From 3f267fe1b9c689a70f7b33aa74c8cdd81b70f160 Mon Sep 17 00:00:00 2001 From: ed Date: Mon, 12 Jun 2023 07:58:11 +0200 Subject: [PATCH] ref fix --- ggml_old/.gitignore | 14 + ggml_old/CMakeLists.txt | 77 + ggml_old/LICENSE | 21 + ggml_old/README.md | 106 + ggml_old/cmake/BuildTypes.cmake | 54 + ggml_old/cmake/GitVars.cmake | 22 + ggml_old/examples/CMakeLists.txt | 28 + ggml_old/examples/common-ggml.cpp | 235 + ggml_old/examples/common-ggml.h | 18 + ggml_old/examples/common.cpp | 668 + ggml_old/examples/common.h | 141 + ggml_old/examples/dolly-v2/CMakeLists.txt | 13 + ggml_old/examples/dolly-v2/README.md | 184 + .../examples/dolly-v2/convert-h5-to-ggml.py | 116 + ggml_old/examples/dolly-v2/main.cpp | 813 + ggml_old/examples/dolly-v2/quantize.cpp | 178 + ggml_old/examples/dr_wav.h | 6434 +++++++ ggml_old/examples/gpt-2/CMakeLists.txt | 13 + ggml_old/examples/gpt-2/README.md | 158 + .../gpt-2/convert-cerebras-to-ggml.py | 183 + .../examples/gpt-2/convert-ckpt-to-ggml.py | 159 + ggml_old/examples/gpt-2/convert-h5-to-ggml.py | 195 + .../examples/gpt-2/download-ggml-model.sh | 69 + ggml_old/examples/gpt-2/download-model.sh | 48 + ggml_old/examples/gpt-2/main.cpp | 838 + ggml_old/examples/gpt-2/quantize.cpp | 184 + ggml_old/examples/gpt-j/CMakeLists.txt | 13 + ggml_old/examples/gpt-j/README.md | 246 + ggml_old/examples/gpt-j/convert-h5-to-ggml.py | 173 + .../examples/gpt-j/download-ggml-model.sh | 69 + ggml_old/examples/gpt-j/download-model.sh | 11 + ggml_old/examples/gpt-j/main.cpp | 741 + ggml_old/examples/gpt-j/quantize.cpp | 182 + ggml_old/examples/gpt-neox/CMakeLists.txt | 13 + ggml_old/examples/gpt-neox/README.md | 107 + .../examples/gpt-neox/convert-h5-to-ggml.py | 116 + ggml_old/examples/gpt-neox/main.cpp | 807 + ggml_old/examples/gpt-neox/quantize.cpp | 178 + ggml_old/examples/mnist/CMakeLists.txt | 7 + ggml_old/examples/mnist/README.md | 104 + ggml_old/examples/mnist/convert-h5-to-ggml.py | 63 + ggml_old/examples/mnist/main.cpp | 308 + .../mnist/models/mnist/mnist_model.state_dict | Bin 0 -> 1591571 bytes .../mnist/models/mnist/t10k-images.idx3-ubyte | Bin 0 -> 7840016 bytes ggml_old/examples/mnist/web/index.html | 178 + ggml_old/examples/mpt/CMakeLists.txt | 13 + ggml_old/examples/mpt/convert-h5-to-ggml.py | 158 + ggml_old/examples/mpt/main.cpp | 1027 + ggml_old/examples/mpt/quantize.cpp | 186 + ggml_old/examples/replit/CMakeLists.txt | 13 + .../examples/replit/convert-h5-to-ggml.py | 113 + ggml_old/examples/replit/main.cpp | 767 + ggml_old/examples/replit/quantize.cpp | 182 + ggml_old/examples/starcoder/CMakeLists.txt | 13 + ggml_old/examples/starcoder/README.md | 112 + .../examples/starcoder/convert-hf-to-ggml.py | 212 + ggml_old/examples/starcoder/main.cpp | 868 + ggml_old/examples/starcoder/quantize.cpp | 184 + ggml_old/examples/whisper/CMakeLists.txt | 22 + ggml_old/examples/whisper/README.md | 29 + .../examples/whisper/convert-pt-to-ggml.py | 329 + ggml_old/examples/whisper/main.cpp | 871 + ggml_old/examples/whisper/quantize.cpp | 221 + ggml_old/examples/whisper/whisper.cpp | 5310 ++++++ ggml_old/examples/whisper/whisper.h | 497 + ggml_old/include/ggml/ggml.h | 1138 ++ ggml_old/scripts/sync-llama.sh | 8 + ggml_old/scripts/sync-whisper.sh | 16 + ggml_old/src/CMakeLists.txt | 241 + ggml_old/src/ggml-cuda.cu | 925 + ggml_old/src/ggml-cuda.h | 23 + ggml_old/src/ggml-opencl.c | 361 + ggml_old/src/ggml-opencl.h | 24 + ggml_old/src/ggml.c | 15700 ++++++++++++++++ ggml_old/tests/CMakeLists.txt | 260 + ggml_old/tests/test-blas0.c | 265 + ggml_old/tests/test-grad0.c | 1131 ++ ggml_old/tests/test-mul-mat0.c | 327 + ggml_old/tests/test-mul-mat1.c | 312 + ggml_old/tests/test-mul-mat2.c | 2591 +++ ggml_old/tests/test-opt.c | 205 + ggml_old/tests/test-svd0.c | 218 + ggml_old/tests/test-vec0.c | 124 + ggml_old/tests/test-vec1.c | 576 + ggml_old/tests/test-vec2.c | 268 + ggml_old/tests/test0.c | 43 + ggml_old/tests/test1.c | 437 + ggml_old/tests/test2.c | 177 + ggml_old/tests/test3.c | 96 + 89 files changed, 50878 insertions(+) create mode 100644 ggml_old/.gitignore create mode 100644 ggml_old/CMakeLists.txt create mode 100644 ggml_old/LICENSE create mode 100644 ggml_old/README.md create mode 100644 ggml_old/cmake/BuildTypes.cmake create mode 100644 ggml_old/cmake/GitVars.cmake create mode 100644 ggml_old/examples/CMakeLists.txt create mode 100644 ggml_old/examples/common-ggml.cpp create mode 100644 ggml_old/examples/common-ggml.h create mode 100644 ggml_old/examples/common.cpp create mode 100644 ggml_old/examples/common.h create mode 100644 ggml_old/examples/dolly-v2/CMakeLists.txt create mode 100644 ggml_old/examples/dolly-v2/README.md create mode 100644 ggml_old/examples/dolly-v2/convert-h5-to-ggml.py create mode 100644 ggml_old/examples/dolly-v2/main.cpp create mode 100644 ggml_old/examples/dolly-v2/quantize.cpp create mode 100644 ggml_old/examples/dr_wav.h create mode 100644 ggml_old/examples/gpt-2/CMakeLists.txt create mode 100644 ggml_old/examples/gpt-2/README.md create mode 100644 ggml_old/examples/gpt-2/convert-cerebras-to-ggml.py create mode 100644 ggml_old/examples/gpt-2/convert-ckpt-to-ggml.py create mode 100644 ggml_old/examples/gpt-2/convert-h5-to-ggml.py create mode 100755 ggml_old/examples/gpt-2/download-ggml-model.sh create mode 100755 ggml_old/examples/gpt-2/download-model.sh create mode 100644 ggml_old/examples/gpt-2/main.cpp create mode 100644 ggml_old/examples/gpt-2/quantize.cpp create mode 100644 ggml_old/examples/gpt-j/CMakeLists.txt create mode 100644 ggml_old/examples/gpt-j/README.md create mode 100644 ggml_old/examples/gpt-j/convert-h5-to-ggml.py create mode 100755 ggml_old/examples/gpt-j/download-ggml-model.sh create mode 100755 ggml_old/examples/gpt-j/download-model.sh create mode 100644 ggml_old/examples/gpt-j/main.cpp create mode 100644 ggml_old/examples/gpt-j/quantize.cpp create mode 100644 ggml_old/examples/gpt-neox/CMakeLists.txt create mode 100644 ggml_old/examples/gpt-neox/README.md create mode 100644 ggml_old/examples/gpt-neox/convert-h5-to-ggml.py create mode 100644 ggml_old/examples/gpt-neox/main.cpp create mode 100644 ggml_old/examples/gpt-neox/quantize.cpp create mode 100644 ggml_old/examples/mnist/CMakeLists.txt create mode 100644 ggml_old/examples/mnist/README.md create mode 100644 ggml_old/examples/mnist/convert-h5-to-ggml.py create mode 100644 ggml_old/examples/mnist/main.cpp create mode 100644 ggml_old/examples/mnist/models/mnist/mnist_model.state_dict create mode 100644 ggml_old/examples/mnist/models/mnist/t10k-images.idx3-ubyte create mode 100644 ggml_old/examples/mnist/web/index.html create mode 100644 ggml_old/examples/mpt/CMakeLists.txt create mode 100644 ggml_old/examples/mpt/convert-h5-to-ggml.py create mode 100644 ggml_old/examples/mpt/main.cpp create mode 100644 ggml_old/examples/mpt/quantize.cpp create mode 100644 ggml_old/examples/replit/CMakeLists.txt create mode 100644 ggml_old/examples/replit/convert-h5-to-ggml.py create mode 100644 ggml_old/examples/replit/main.cpp create mode 100644 ggml_old/examples/replit/quantize.cpp create mode 100644 ggml_old/examples/starcoder/CMakeLists.txt create mode 100644 ggml_old/examples/starcoder/README.md create mode 100644 ggml_old/examples/starcoder/convert-hf-to-ggml.py create mode 100644 ggml_old/examples/starcoder/main.cpp create mode 100644 ggml_old/examples/starcoder/quantize.cpp create mode 100644 ggml_old/examples/whisper/CMakeLists.txt create mode 100644 ggml_old/examples/whisper/README.md create mode 100644 ggml_old/examples/whisper/convert-pt-to-ggml.py create mode 100644 ggml_old/examples/whisper/main.cpp create mode 100644 ggml_old/examples/whisper/quantize.cpp create mode 100644 ggml_old/examples/whisper/whisper.cpp create mode 100644 ggml_old/examples/whisper/whisper.h create mode 100644 ggml_old/include/ggml/ggml.h create mode 100755 ggml_old/scripts/sync-llama.sh create mode 100755 ggml_old/scripts/sync-whisper.sh create mode 100644 ggml_old/src/CMakeLists.txt create mode 100644 ggml_old/src/ggml-cuda.cu create mode 100644 ggml_old/src/ggml-cuda.h create mode 100644 ggml_old/src/ggml-opencl.c create mode 100644 ggml_old/src/ggml-opencl.h create mode 100644 ggml_old/src/ggml.c create mode 100644 ggml_old/tests/CMakeLists.txt create mode 100644 ggml_old/tests/test-blas0.c create mode 100644 ggml_old/tests/test-grad0.c create mode 100644 ggml_old/tests/test-mul-mat0.c create mode 100644 ggml_old/tests/test-mul-mat1.c create mode 100644 ggml_old/tests/test-mul-mat2.c create mode 100644 ggml_old/tests/test-opt.c create mode 100644 ggml_old/tests/test-svd0.c create mode 100644 ggml_old/tests/test-vec0.c create mode 100644 ggml_old/tests/test-vec1.c create mode 100644 ggml_old/tests/test-vec2.c create mode 100644 ggml_old/tests/test0.c create mode 100644 ggml_old/tests/test1.c create mode 100644 ggml_old/tests/test2.c create mode 100644 ggml_old/tests/test3.c diff --git a/ggml_old/.gitignore b/ggml_old/.gitignore new file mode 100644 index 0000000..3ae49ab --- /dev/null +++ b/ggml_old/.gitignore @@ -0,0 +1,14 @@ +build/ +build-debug/ +build-*/ + +compile_commands.json + +.exrc +.cache +.DS_Store +.stablelm +.gpt-2 + +src/arm_neon.h +tests/arm_neon.h diff --git a/ggml_old/CMakeLists.txt b/ggml_old/CMakeLists.txt new file mode 100644 index 0000000..2e46d55 --- /dev/null +++ b/ggml_old/CMakeLists.txt @@ -0,0 +1,77 @@ +cmake_minimum_required (VERSION 3.0) +project(ggml VERSION 0.1.0) + +set(CMAKE_EXPORT_COMPILE_COMMANDS "on") +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) +set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") + +if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) + set(GGML_STANDALONE ON) + include(cmake/GitVars.cmake) + include(cmake/BuildTypes.cmake) +else() + set(GGML_STANDALONE OFF) +endif() + +# options + +option(GGML_ALL_WARNINGS "ggml: enable all compiler warnings" ON) +option(GGML_ALL_WARNINGS_3RD_PARTY "ggml: enable all compiler warnings in 3rd party libs" OFF) + +option(GGML_SANITIZE_THREAD "ggml: enable thread sanitizer" OFF) +option(GGML_SANITIZE_ADDRESS "ggml: enable address sanitizer" OFF) +option(GGML_SANITIZE_UNDEFINED "ggml: enable undefined sanitizer" OFF) + +option(GGML_BUILD_TESTS "ggml: build tests" ${GGML_STANDALONE}) +option(GGML_BUILD_EXAMPLES "ggml: build examples" ${GGML_STANDALONE}) + +option(GGML_PERF "ggml: enable perf timings" OFF) +option(GGML_NO_ACCELERATE "ggml: disable Accelerate framework" OFF) +option(GGML_OPENBLAS "ggml: use OpenBLAS" OFF) +option(GGML_CUBLAS "ggml: use cuBLAS" OFF) + +# sanitizers + +if (GGML_SANITIZE_THREAD) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=thread") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread") +endif() + +if (GGML_SANITIZE_ADDRESS) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer") +endif() + +if (GGML_SANITIZE_UNDEFINED) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined") +endif() + +#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffast-math") +#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native") +#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mcpu=native") + +# dependencies + +set(CMAKE_C_STANDARD 11) +set(CMAKE_CXX_STANDARD 11) + +find_package(Threads REQUIRED) + +# main + +if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "RelWithDebInfo") +endif () + +add_subdirectory(src) + +if (GGML_BUILD_TESTS) + enable_testing() + add_subdirectory(tests) +endif () + +if (GGML_BUILD_EXAMPLES) + add_subdirectory(examples) +endif () diff --git a/ggml_old/LICENSE b/ggml_old/LICENSE new file mode 100644 index 0000000..fb7ff0c --- /dev/null +++ b/ggml_old/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Georgi Gerganov + +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/ggml_old/README.md b/ggml_old/README.md new file mode 100644 index 0000000..65a2b38 --- /dev/null +++ b/ggml_old/README.md @@ -0,0 +1,106 @@ +# ggml + +Tensor library for machine learning + +***Note that this project is under development and not ready for production use. \ +Some of the development is currently happening in the [llama.cpp](https://github.com/ggerganov/llama.cpp) and [whisper.cpp](https://github.com/ggerganov/whisper.cpp) repos*** + +## Features + +- Written in C +- 16-bit float support +- Integer quantization support (4-bit, 5-bit, 8-bit, etc.) +- Automatic differentiation +- ADAM and L-BFGS optimizers +- Optimized for Apple Silicon +- On x86 architectures utilizes AVX / AVX2 intrinsics +- No third-party dependencies +- Zero memory allocations during runtime + +## Roadmap + +- [X] Example of GPT-2 inference [examples/gpt-2](https://github.com/ggerganov/ggml/tree/master/examples/gpt-2) +- [X] Example of GPT-J inference [examples/gpt-j](https://github.com/ggerganov/ggml/tree/master/examples/gpt-j) +- [X] Example of Whisper inference [examples/whisper](https://github.com/ggerganov/ggml/tree/master/examples/whisper) +- [X] Support 4-bit integer quantization https://github.com/ggerganov/ggml/pull/27 +- [X] Example of Cerebras-GPT inference [examples/gpt-2](https://github.com/ggerganov/ggml/tree/master/examples/gpt-2) +- [ ] Example of FLAN-T5 inference https://github.com/ggerganov/ggml/pull/12 +- [X] Example of LLaMA inference [ggerganov/llama.cpp](https://github.com/ggerganov/llama.cpp) +- [X] Example of LLaMA training [ggerganov/llama.cpp/examples/baby-llama](https://github.com/ggerganov/llama.cpp/tree/master/examples/baby-llama) +- [X] Example of BLOOM inference [NouamaneTazi/bloomz.cpp](https://github.com/NouamaneTazi/bloomz.cpp) +- [X] Example of RWKV inference [saharNooby/rwkv.cpp](https://github.com/saharNooby/rwkv.cpp) +- [ ] Example of [SAM](https://github.com/facebookresearch/segment-anything) inference +- [ ] Idea for GPU support: https://github.com/ggerganov/llama.cpp/discussions/915 +- [X] Example of StableLM (GPT-NeoX) inference [examples/gpt-neox](https://github.com/ggerganov/ggml/tree/master/examples/gpt-neox) +- [X] Example of BERT inference [skeskinen/bert.cpp](https://github.com/skeskinen/bert.cpp) +- [X] Example of 💫 StarCoder inference [examples/starcoder](https://github.com/ggerganov/ggml/tree/master/examples/starcoder) +- [X] Example of MPT inference [examples/mpt](https://github.com/ggerganov/ggml/tree/master/examples/mpt) +- [X] Example of Replit inference [examples/replit](https://github.com/ggerganov/ggml/tree/master/examples/replit) + +## Whisper inference (example) + +With ggml you can efficiently run [Whisper](examples/whisper) inference on the CPU. + +Memory requirements: + +| Model | Disk | Mem | +| --- | --- | --- | +| tiny | 75 MB | ~280 MB | +| base | 142 MB | ~430 MB | +| small | 466 MB | ~1.0 GB | +| medium | 1.5 GB | ~2.6 GB | +| large | 2.9 GB | ~4.7 GB | + +## GPT inference (example) + +With ggml you can efficiently run [GPT-2](examples/gpt-2) and [GPT-J](examples/gpt-j) inference on the CPU. + +Here is how to run the example programs: + +```bash +# Build ggml + examples +git clone https://github.com/ggerganov/ggml +cd ggml +mkdir build && cd build +cmake .. +make -j4 gpt-2 gpt-j + +# Run the GPT-2 small 117M model +../examples/gpt-2/download-ggml-model.sh 117M +./bin/gpt-2 -m models/gpt-2-117M/ggml-model.bin -p "This is an example" + +# Run the GPT-J 6B model (requires 12GB disk space and 16GB CPU RAM) +../examples/gpt-j/download-ggml-model.sh 6B +./bin/gpt-j -m models/gpt-j-6B/ggml-model.bin -p "This is an example" + +# Run the Cerebras-GPT 111M model +# Download from: https://huggingface.co/cerebras +python3 ../examples/gpt-2/convert-cerebras-to-ggml.py /path/to/Cerebras-GPT-111M/ +./bin/gpt-2 -m /path/to/Cerebras-GPT-111M/ggml-model-f16.bin -p "This is an example" +``` + +The inference speeds that I get for the different models on my 32GB MacBook M1 Pro are as follows: + +| Model | Size | Time / Token | +| --- | --- | --- | +| GPT-2 | 117M | 5 ms | +| GPT-2 | 345M | 12 ms | +| GPT-2 | 774M | 23 ms | +| GPT-2 | 1558M | 42 ms | +| --- | --- | --- | +| GPT-J | 6B | 125 ms | + +For more information, checkout the corresponding programs in the [examples](examples) folder. + +## Using cuBLAS + +```bash +# fix the path to point to your CUDA compiler +cmake -DGGML_CUBLAS=ON -DCMAKE_CUDA_COMPILER=/usr/local/cuda-12.1/bin/nvcc .. +``` + +## Resources + +- [GGML - Large Language Models for Everyone](https://github.com/rustformers/llm/blob/main/crates/ggml/README.md): a description of the GGML format provided by the maintainers of the `llm` Rust crate, which provides Rust bindings for GGML +- [marella/ctransformers](https://github.com/marella/ctransformers): Python bindings for GGML models. +- [go-skynet/go-ggml-transformers.cpp](https://github.com/go-skynet/go-ggml-transformers.cpp): Golang bindings for GGML models diff --git a/ggml_old/cmake/BuildTypes.cmake b/ggml_old/cmake/BuildTypes.cmake new file mode 100644 index 0000000..a9c7b6c --- /dev/null +++ b/ggml_old/cmake/BuildTypes.cmake @@ -0,0 +1,54 @@ +# Add new build types + +# ReleaseGG - Release with enabled asserts + +SET(CMAKE_CXX_FLAGS_RELEASEGG + "-O3" + CACHE STRING "Flags used by the c++ compiler during release builds with enabled asserts." + FORCE ) +SET(CMAKE_C_FLAGS_RELEASEGG + "-O3" + CACHE STRING "Flags used by the compiler during release builds with enabled asserts." + FORCE ) +SET(CMAKE_EXE_LINKER_FLAGS_RELEASEGG + "" + CACHE STRING "Flags used for linking binaries during release builds with enabled asserts." + FORCE ) +SET(CMAKE_SHARED_LINKER_FLAGS_RELEASEGG + "" + CACHE STRING "Flags used by the shared libraries linker during release builds with enabled asserts." + FORCE ) +MARK_AS_ADVANCED( + CMAKE_CXX_FLAGS_RELEASEGG + CMAKE_C_FLAGS_RELEASEGG + CMAKE_EXE_LINKER_FLAGS_RELEASEGG + CMAKE_SHARED_LINKER_FLAGS_RELEASEGG ) + +# RelWithDebInfoGG - RelWithDebInfo with enabled asserts + +SET(CMAKE_CXX_FLAGS_RELWITHDEBINFOGG + "-O2 -g" + CACHE STRING "Flags used by the c++ compiler during release builds with debug symbols and enabled asserts." + FORCE ) +SET(CMAKE_C_FLAGS_RELWITHDEBINFOGG + "-O2 -g" + CACHE STRING "Flags used by the compiler during release builds with debug symbols and enabled asserts." + FORCE ) +SET(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFOGG + "" + CACHE STRING "Flags used for linking binaries during release builds with debug symbols and enabled asserts." + FORCE ) +SET(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFOGG + "" + CACHE STRING "Flags used by the shared libraries linker during release builds with debug symbols and enabled asserts." + FORCE ) +MARK_AS_ADVANCED( + CMAKE_CXX_FLAGS_RELWITHDEBINFOGG + CMAKE_C_FLAGS_RELWITHDEBINFOGG + CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFOGG + CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFOGG ) + +if (NOT XCODE AND NOT MSVC AND NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo" "ReleaseGG" "RelWithDebInfoGG") +endif() diff --git a/ggml_old/cmake/GitVars.cmake b/ggml_old/cmake/GitVars.cmake new file mode 100644 index 0000000..1a4c24e --- /dev/null +++ b/ggml_old/cmake/GitVars.cmake @@ -0,0 +1,22 @@ +find_package(Git) + +# the commit's SHA1 +execute_process(COMMAND + "${GIT_EXECUTABLE}" describe --match=NeVeRmAtCh --always --abbrev=8 + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" + OUTPUT_VARIABLE GIT_SHA1 + ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) + +# the date of the commit +execute_process(COMMAND + "${GIT_EXECUTABLE}" log -1 --format=%ad --date=local + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" + OUTPUT_VARIABLE GIT_DATE + ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) + +# the subject of the commit +execute_process(COMMAND + "${GIT_EXECUTABLE}" log -1 --format=%s + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" + OUTPUT_VARIABLE GIT_COMMIT_SUBJECT + ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) diff --git a/ggml_old/examples/CMakeLists.txt b/ggml_old/examples/CMakeLists.txt new file mode 100644 index 0000000..7a4bb24 --- /dev/null +++ b/ggml_old/examples/CMakeLists.txt @@ -0,0 +1,28 @@ +if (GGML_ALL_WARNINGS) + if (NOT MSVC) + set(cxx_flags + # TODO(marella): Add other warnings. + -Wunused-variable + -Wno-unused-function + -Wno-multichar + ) + add_compile_options("$<$:${cxx_flags}>") + endif() +endif() + +add_library(common STATIC common.cpp) +target_include_directories(common PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) + +add_library(common-ggml STATIC common-ggml.cpp) +target_link_libraries(common-ggml PRIVATE ggml) +target_include_directories(common-ggml PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) + +add_subdirectory(gpt-2) +add_subdirectory(gpt-j) +add_subdirectory(whisper) +add_subdirectory(mnist) +add_subdirectory(gpt-neox) +add_subdirectory(dolly-v2) +add_subdirectory(replit) +add_subdirectory(mpt) +add_subdirectory(starcoder) diff --git a/ggml_old/examples/common-ggml.cpp b/ggml_old/examples/common-ggml.cpp new file mode 100644 index 0000000..9215dbe --- /dev/null +++ b/ggml_old/examples/common-ggml.cpp @@ -0,0 +1,235 @@ +#include "common-ggml.h" + +#include +#include + +static const std::map GGML_FTYPE_MAP = { + {"q4_0", GGML_FTYPE_MOSTLY_Q4_0}, + {"q4_1", GGML_FTYPE_MOSTLY_Q4_1}, + {"q5_0", GGML_FTYPE_MOSTLY_Q5_0}, + {"q5_1", GGML_FTYPE_MOSTLY_Q5_1}, + {"q8_0", GGML_FTYPE_MOSTLY_Q8_0}, +}; + +void ggml_print_ftypes(FILE * fp) { + for (auto it = GGML_FTYPE_MAP.begin(); it != GGML_FTYPE_MAP.end(); it++) { + fprintf(fp, " type = \"%s\" or %d\n", it->first.c_str(), it->second); + } +} + +enum ggml_ftype ggml_parse_ftype(const char * str) { + enum ggml_ftype ftype; + if (str[0] == 'q') { + const auto it = GGML_FTYPE_MAP.find(str); + if (it == GGML_FTYPE_MAP.end()) { + fprintf(stderr, "%s: unknown ftype '%s'\n", __func__, str); + return GGML_FTYPE_UNKNOWN; + } + ftype = it->second; + } else { + ftype = (enum ggml_ftype) atoi(str); + } + + return ftype; +} + +bool ggml_common_quantize_0( + std::ifstream & finp, + std::ofstream & fout, + const ggml_ftype ftype, + const std::vector & to_quant, + const std::vector & to_skip) { + + ggml_type qtype = GGML_TYPE_F32; + + switch (ftype) { + case GGML_FTYPE_MOSTLY_Q4_0: qtype = GGML_TYPE_Q4_0; break; + case GGML_FTYPE_MOSTLY_Q4_1: qtype = GGML_TYPE_Q4_1; break; + case GGML_FTYPE_MOSTLY_Q5_0: qtype = GGML_TYPE_Q5_0; break; + case GGML_FTYPE_MOSTLY_Q5_1: qtype = GGML_TYPE_Q5_1; break; + case GGML_FTYPE_MOSTLY_Q8_0: qtype = GGML_TYPE_Q8_0; break; + case GGML_FTYPE_UNKNOWN: + case GGML_FTYPE_ALL_F32: + case GGML_FTYPE_MOSTLY_F16: + case GGML_FTYPE_MOSTLY_Q4_1_SOME_F16: + { + fprintf(stderr, "%s: invalid model type %d\n", __func__, ftype); + return false; + } + }; + + if (!ggml_is_quantized(qtype)) { + fprintf(stderr, "%s: invalid quantization type %d (%s)\n", __func__, qtype, ggml_type_name(qtype)); + return false; + } + + size_t total_size_org = 0; + size_t total_size_new = 0; + + std::vector work; + + std::vector data_u8; + std::vector data_f16; + std::vector data_f32; + + std::vector hist_all(1 << 4, 0); + + while (true) { + int32_t n_dims; + int32_t length; + int32_t ttype; + + finp.read(reinterpret_cast(&n_dims), sizeof(n_dims)); + finp.read(reinterpret_cast(&length), sizeof(length)); + finp.read(reinterpret_cast(&ttype), sizeof(ttype)); + + if (finp.eof()) { + break; + } + + int32_t nelements = 1; + int32_t ne[4] = { 1, 1, 1, 1 }; + for (int i = 0; i < n_dims; ++i) { + finp.read (reinterpret_cast(&ne[i]), sizeof(ne[i])); + nelements *= ne[i]; + } + + std::string name(length, 0); + finp.read (&name[0], length); + + printf("%64s - [%5d, %5d, %5d], type = %6s ", name.data(), ne[0], ne[1], ne[2], ggml_type_name((ggml_type) ttype)); + + bool quantize = false; + + // check if we should quantize this tensor + for (const auto & s : to_quant) { + if (std::regex_match(name, std::regex(s))) { + quantize = true; + break; + } + } + + // check if we should skip this tensor + for (const auto & s : to_skip) { + if (std::regex_match(name, std::regex(s))) { + quantize = false; + break; + } + } + + // quantize only 2D tensors + quantize &= (n_dims == 2); + + if (quantize) { + if (ttype != GGML_TYPE_F32 && ttype != GGML_TYPE_F16) { + fprintf(stderr, "%s: unsupported ttype %d (%s) for integer quantization\n", __func__, ttype, ggml_type_name((ggml_type) ttype)); + return false; + } + + if (ttype == GGML_TYPE_F16) { + data_f16.resize(nelements); + finp.read(reinterpret_cast(data_f16.data()), nelements * sizeof(ggml_fp16_t)); + data_f32.resize(nelements); + for (int i = 0; i < nelements; ++i) { + data_f32[i] = ggml_fp16_to_fp32(data_f16[i]); + } + } else { + data_f32.resize(nelements); + finp.read(reinterpret_cast(data_f32.data()), nelements * sizeof(float)); + } + + ttype = qtype; + } else { + const int bpe = (ttype == 0) ? sizeof(float) : sizeof(uint16_t); + + data_u8.resize(nelements*bpe); + finp.read(reinterpret_cast(data_u8.data()), nelements * bpe); + } + + fout.write(reinterpret_cast(&n_dims), sizeof(n_dims)); + fout.write(reinterpret_cast(&length), sizeof(length)); + fout.write(reinterpret_cast(&ttype), sizeof(ttype)); + for (int i = 0; i < n_dims; ++i) { + fout.write(reinterpret_cast(&ne[i]), sizeof(ne[i])); + } + fout.write(&name[0], length); + + if (quantize) { + work.resize(nelements); // for quantization + + size_t cur_size = 0; + std::vector hist_cur(1 << 4, 0); + + switch ((ggml_type) ttype) { + case GGML_TYPE_Q4_0: + { + cur_size = ggml_quantize_q4_0(data_f32.data(), work.data(), nelements, ne[0], hist_cur.data()); + } break; + case GGML_TYPE_Q4_1: + { + cur_size = ggml_quantize_q4_1(data_f32.data(), work.data(), nelements, ne[0], hist_cur.data()); + } break; + case GGML_TYPE_Q5_0: + { + cur_size = ggml_quantize_q5_0(data_f32.data(), work.data(), nelements, ne[0], hist_cur.data()); + } break; + case GGML_TYPE_Q5_1: + { + cur_size = ggml_quantize_q5_1(data_f32.data(), work.data(), nelements, ne[0], hist_cur.data()); + } break; + case GGML_TYPE_Q8_0: + { + cur_size = ggml_quantize_q8_0(data_f32.data(), work.data(), nelements, ne[0], hist_cur.data()); + } break; + case GGML_TYPE_F32: + case GGML_TYPE_F16: + case GGML_TYPE_I8: + case GGML_TYPE_I16: + case GGML_TYPE_I32: + case GGML_TYPE_Q8_1: + case GGML_TYPE_COUNT: + { + fprintf(stderr, "%s: unsupported quantization type %d (%s)\n", __func__, ttype, ggml_type_name((ggml_type) ttype)); + return false; + } + } + + fout.write(reinterpret_cast(work.data()), cur_size); + total_size_new += cur_size; + + printf("size = %8.2f MB -> %8.2f MB | hist: ", nelements * sizeof(float)/1024.0/1024.0, cur_size/1024.0/1024.0); + for (int i = 0; i < (int) hist_cur.size(); ++i) { + hist_all[i] += hist_cur[i]; + } + + for (int i = 0; i < (int) hist_cur.size(); ++i) { + printf("%5.3f ", hist_cur[i] / (float)nelements); + } + printf("\n"); + } else { + printf("size = %8.3f MB\n", data_u8.size()/1024.0/1024.0); + fout.write(reinterpret_cast(data_u8.data()), data_u8.size()); + total_size_new += data_u8.size(); + } + + total_size_org += nelements * sizeof(float); + } + + printf("%s: model size = %8.2f MB\n", __func__, total_size_org/1024.0/1024.0); + printf("%s: quant size = %8.2f MB | ftype = %d (%s)\n", __func__, total_size_new/1024.0/1024.0, ftype, ggml_type_name(qtype)); + + { + int64_t sum_all = 0; + for (int i = 0; i < (int) hist_all.size(); ++i) { + sum_all += hist_all[i]; + } + + printf("%s: hist: ", __func__); + for (int i = 0; i < (int) hist_all.size(); ++i) { + printf("%5.3f ", hist_all[i] / (float)sum_all); + } + printf("\n"); + } + + return true; +} diff --git a/ggml_old/examples/common-ggml.h b/ggml_old/examples/common-ggml.h new file mode 100644 index 0000000..477de34 --- /dev/null +++ b/ggml_old/examples/common-ggml.h @@ -0,0 +1,18 @@ +#pragma once + +#include "ggml.h" + +#include +#include +#include + +enum ggml_ftype ggml_parse_ftype(const char * str); + +void ggml_print_ftypes(FILE * fp = stderr); + +bool ggml_common_quantize_0( + std::ifstream & finp, + std::ofstream & fout, + const ggml_ftype ftype, + const std::vector & to_quant, + const std::vector & to_skip); diff --git a/ggml_old/examples/common.cpp b/ggml_old/examples/common.cpp new file mode 100644 index 0000000..e30f524 --- /dev/null +++ b/ggml_old/examples/common.cpp @@ -0,0 +1,668 @@ +#include "common.h" + +// third-party utilities +// use your favorite implementations +#define DR_WAV_IMPLEMENTATION +#include "dr_wav.h" + +#include +#include +#include +#include +#include + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + +bool gpt_params_parse(int argc, char ** argv, gpt_params & params) { + for (int i = 1; i < argc; i++) { + std::string arg = argv[i]; + + if (arg == "-s" || arg == "--seed") { + params.seed = std::stoi(argv[++i]); + } else if (arg == "-t" || arg == "--threads") { + params.n_threads = std::stoi(argv[++i]); + } else if (arg == "-p" || arg == "--prompt") { + params.prompt = argv[++i]; + } else if (arg == "-n" || arg == "--n_predict") { + params.n_predict = std::stoi(argv[++i]); + } else if (arg == "--top_k") { + params.top_k = std::max(1, std::stoi(argv[++i])); + } else if (arg == "--top_p") { + params.top_p = std::stof(argv[++i]); + } else if (arg == "--temp") { + params.temp = std::stof(argv[++i]); + } else if (arg == "-b" || arg == "--batch_size") { + params.n_batch = std::stoi(argv[++i]); + } else if (arg == "-m" || arg == "--model") { + params.model = argv[++i]; + } else if (arg == "-h" || arg == "--help") { + gpt_print_usage(argc, argv, params); + exit(0); + } else if (arg == "-f" || arg == "--file") { + if (++i > argc) { + fprintf(stderr, "Invalid file param"); + break; + } + std::ifstream file(argv[i]); + if (!file) { + fprintf(stderr, "error: failed to open file '%s'\n", argv[i]); + break; + } + std::copy(std::istreambuf_iterator(file), std::istreambuf_iterator(), back_inserter(params.prompt)); + if (params.prompt.back() == '\n') { + params.prompt.pop_back(); + } + } else { + fprintf(stderr, "error: unknown argument: %s\n", arg.c_str()); + gpt_print_usage(argc, argv, params); + exit(0); + } + } + + return true; +} + +void gpt_print_usage(int /*argc*/, char ** argv, const gpt_params & params) { + fprintf(stderr, "usage: %s [options]\n", argv[0]); + fprintf(stderr, "\n"); + fprintf(stderr, "options:\n"); + fprintf(stderr, " -h, --help show this help message and exit\n"); + fprintf(stderr, " -s SEED, --seed SEED RNG seed (default: -1)\n"); + fprintf(stderr, " -t N, --threads N number of threads to use during computation (default: %d)\n", params.n_threads); + fprintf(stderr, " -p PROMPT, --prompt PROMPT\n"); + fprintf(stderr, " prompt to start generation with (default: random)\n"); + fprintf(stderr, " -f FNAME, --file FNAME\n"); + fprintf(stderr, " load prompt from a file\n"); + fprintf(stderr, " -n N, --n_predict N number of tokens to predict (default: %d)\n", params.n_predict); + fprintf(stderr, " --top_k N top-k sampling (default: %d)\n", params.top_k); + fprintf(stderr, " --top_p N top-p sampling (default: %.1f)\n", params.top_p); + fprintf(stderr, " --temp N temperature (default: %.1f)\n", params.temp); + fprintf(stderr, " -b N, --batch_size N batch size for prompt processing (default: %d)\n", params.n_batch); + fprintf(stderr, " -m FNAME, --model FNAME\n"); + fprintf(stderr, " model path (default: %s)\n", params.model.c_str()); + fprintf(stderr, "\n"); +} + +std::string gpt_random_prompt(std::mt19937 & rng) { + const int r = rng() % 10; + switch (r) { + case 0: return "So"; + case 1: return "Once upon a time"; + case 2: return "When"; + case 3: return "The"; + case 4: return "After"; + case 5: return "If"; + case 6: return "import"; + case 7: return "He"; + case 8: return "She"; + case 9: return "They"; + default: return "To"; + } + + return "The"; +} + +std::string trim(const std::string & s) { + std::regex e("^\\s+|\\s+$"); + return std::regex_replace(s, e, ""); +} + +std::string replace(const std::string & s, const std::string & from, const std::string & to) { + std::string result = s; + size_t pos = 0; + while ((pos = result.find(from, pos)) != std::string::npos) { + result.replace(pos, from.length(), to); + pos += to.length(); + } + return result; +} + +void gpt_vocab::add_special_token(const std::string & token) { + special_tokens.push_back(token); +} + +std::map json_parse(const std::string & fname) { + std::map result; + + // read file into string + std::string json; + { + std::ifstream ifs(fname); + if (!ifs) { + fprintf(stderr, "Failed to open %s\n", fname.c_str()); + exit(1); + } + + json = std::string((std::istreambuf_iterator(ifs)), + (std::istreambuf_iterator())); + } + + if (json[0] != '{') { + return result; + } + + // parse json + { + bool has_key = false; + bool in_token = false; + + std::string str_key = ""; + std::string str_val = ""; + + int n = json.size(); + for (int i = 1; i < n; ++i) { + if (!in_token) { + if (json[i] == ' ') continue; + if (json[i] == '"') { + in_token = true; + continue; + } + } else { + if (json[i] == '\\' && i+1 < n) { + if (has_key == false) { + str_key += json[i]; + } else { + str_val += json[i]; + } + ++i; + } else if (json[i] == '"') { + if (has_key == false) { + has_key = true; + ++i; + while (json[i] == ' ') ++i; + ++i; // : + while (json[i] == ' ') ++i; + if (json[i] != '\"') { + while (json[i] != ',' && json[i] != '}') { + str_val += json[i++]; + } + has_key = false; + } else { + in_token = true; + continue; + } + } else { + has_key = false; + } + + str_key = ::replace(str_key, "\\u0120", " " ); // \u0120 -> space + str_key = ::replace(str_key, "\\u010a", "\n"); // \u010a -> new line + str_key = ::replace(str_key, "\\\"", "\""); // \\\" -> " + + try { + result[str_key] = std::stoi(str_val); + } catch (...) { + //fprintf(stderr, "%s: ignoring key '%s' with value '%s'\n", fname.c_str(), str_key.c_str(), str_val.c_str()); + + } + str_key = ""; + str_val = ""; + in_token = false; + continue; + } + if (has_key == false) { + str_key += json[i]; + } else { + str_val += json[i]; + } + } + } + } + + return result; +} + +std::string convert_to_utf8(const std::wstring & input) { + std::wstring_convert> converter; + return converter.to_bytes(input); +} + +std::wstring convert_to_wstring(const std::string & input) { + std::wstring_convert> converter; + return converter.from_bytes(input); +} + +std::vector gpt_tokenize(const gpt_vocab & vocab, const std::string & text) { + std::vector words; + + // first split the text into words + { + std::string str = text; + std::string pat = R"('s|'t|'re|'ve|'m|'ll|'d| ?[[:alpha:]]+| ?[[:digit:]]+| ?[^\s[:alpha:][:digit:]]+|\s+(?!\S)|\s+)"; + + // Generate the subpattern from the special_tokens vector if it's not empty + if (!vocab.special_tokens.empty()) { + std::string special_tokens_subpattern; + for (const auto & token : vocab.special_tokens) { + if (!special_tokens_subpattern.empty()) { + special_tokens_subpattern += "|"; + } + special_tokens_subpattern += token; + } + + // Modify the regex pattern with the generated special tokens subpattern + pat = special_tokens_subpattern + "|" + pat; + } + + std::regex re(pat); + std::smatch m; + + while (std::regex_search(str, m, re)) { + for (auto x : m) { + words.push_back(x); + } + str = m.suffix(); + } + } + + // find the longest tokens that form the words: + std::vector tokens; + for (const auto & word : words) { + if (word.size() == 0) continue; + + int i = 0; + int n = word.size(); + while (i < n) { + int j = n; + while (j > i) { + auto it = vocab.token_to_id.find(word.substr(i, j-i)); + if (it != vocab.token_to_id.end()) { + tokens.push_back(it->second); + i = j; + j = n; + continue; + } + --j; + } + if (i == n) { + break; + } + if (j == i) { + auto sub = word.substr(i, 1); + if (vocab.token_to_id.find(sub) != vocab.token_to_id.end()) { + tokens.push_back(vocab.token_to_id.at(sub)); + } else { + fprintf(stderr, "%s: unknown token '%s'\n", __func__, sub.data()); + } + ++i; + } + } + } + + return tokens; +} + +bool gpt_vocab_init(const std::string & fname, gpt_vocab & vocab) { + printf("%s: loading vocab from '%s'\n", __func__, fname.c_str()); + + vocab.token_to_id = ::json_parse(fname); + + for (const auto & kv : vocab.token_to_id) { + vocab.id_to_token[kv.second] = kv.first; + } + + printf("%s: vocab size = %d\n", __func__, (int) vocab.token_to_id.size()); + + // print the vocabulary + //for (auto kv : vocab.token_to_id) { + // printf("'%s' -> %d\n", kv.first.data(), kv.second); + //} + + return true; +} + +gpt_vocab::id gpt_sample_top_k_top_p( + const gpt_vocab & vocab, + const float * logits, + int top_k, + double top_p, + double temp, + std::mt19937 & rng) { + int n_logits = vocab.id_to_token.size(); + + std::vector> logits_id; + logits_id.reserve(n_logits); + + { + const double scale = 1.0/temp; + for (int i = 0; i < n_logits; ++i) { + logits_id.push_back(std::make_pair(logits[i]*scale, i)); + } + } + + // find the top K tokens + std::partial_sort( + logits_id.begin(), + logits_id.begin() + top_k, logits_id.end(), + [](const std::pair & a, const std::pair & b) { + return a.first > b.first; + }); + + logits_id.resize(top_k); + + double maxl = -INFINITY; + for (const auto & kv : logits_id) { + maxl = std::max(maxl, kv.first); + } + + // compute probs for the top K tokens + std::vector probs; + probs.reserve(logits_id.size()); + + double sum = 0.0; + for (const auto & kv : logits_id) { + double p = exp(kv.first - maxl); + probs.push_back(p); + sum += p; + } + + // normalize the probs + for (auto & p : probs) { + p /= sum; + } + + if (top_p < 1.0f) { + double cumsum = 0.0f; + for (int i = 0; i < top_k; i++) { + cumsum += probs[i]; + if (cumsum >= top_p) { + top_k = i + 1; + probs.resize(top_k); + logits_id.resize(top_k); + break; + } + } + + cumsum = 1.0/cumsum; + for (int i = 0; i < (int) probs.size(); i++) { + probs[i] *= cumsum; + } + } + + //printf("\n"); + //for (int i = 0; i < (int) probs.size(); i++) { + // printf("%d: '%s' %f\n", i, vocab.id_to_token.at(logits_id[i].second).c_str(), probs[i]); + //} + //exit(0); + + std::discrete_distribution<> dist(probs.begin(), probs.end()); + int idx = dist(rng); + + return logits_id[idx].second; +} + +gpt_vocab::id gpt_sample_top_k_top_p_repeat( + const gpt_vocab & vocab, + const float * logits, + const int32_t * last_n_tokens_data, + size_t last_n_tokens_data_size, + int top_k, + double top_p, + double temp, + int repeat_last_n, + float repeat_penalty, + std::mt19937 & rng) { + + int n_logits = vocab.id_to_token.size(); + + const auto * plogits = logits; + + const auto last_n_tokens = std::vector(last_n_tokens_data, last_n_tokens_data + last_n_tokens_data_size); + + if (temp <= 0) { + // select the token with the highest logit directly + float max_logit = plogits[0]; + gpt_vocab::id max_id = 0; + + for (int i = 1; i < n_logits; ++i) { + if (plogits[i] > max_logit) { + max_logit = plogits[i]; + max_id = i; + } + } + return max_id; + } + + + std::vector> logits_id; + logits_id.reserve(n_logits); + + { + const float scale = 1.0f/temp; + for (int i = 0; i < n_logits; ++i) { + // repetition penalty from ctrl paper (https://arxiv.org/abs/1909.05858) + // credit https://github.com/facebookresearch/llama/compare/main...shawwn:llama:main + if (repeat_last_n > 0 && std::find(last_n_tokens.end()-repeat_last_n, last_n_tokens.end(), i) != last_n_tokens.end()) { + // if score < 0 then repetition penalty has to multiplied to reduce the previous token probability + if (plogits[i] < 0.0f) { + logits_id.push_back(std::make_pair(plogits[i]*scale*repeat_penalty, i)); + } else { + logits_id.push_back(std::make_pair(plogits[i]*scale/repeat_penalty, i)); + } + } else { + logits_id.push_back(std::make_pair(plogits[i]*scale, i)); + } + } + } + + // find the top K tokens + std::partial_sort( + logits_id.begin(), + logits_id.begin() + top_k, logits_id.end(), + [](const std::pair & a, const std::pair & b) { + return a.first > b.first; + }); + + logits_id.resize(top_k); + + double maxl = -INFINITY; + for (const auto & kv : logits_id) { + maxl = std::max(maxl, kv.first); + } + + // compute probs for the top K tokens + std::vector probs; + probs.reserve(logits_id.size()); + + double sum = 0.0; + for (const auto & kv : logits_id) { + double p = exp(kv.first - maxl); + probs.push_back(p); + sum += p; + } + + // normalize the probs + for (auto & p : probs) { + p /= sum; + } + + if (top_p < 1.0f) { + double cumsum = 0.0f; + for (int i = 0; i < top_k; i++) { + cumsum += probs[i]; + if (cumsum >= top_p) { + top_k = i + 1; + probs.resize(top_k); + logits_id.resize(top_k); + break; + } + } + + cumsum = 1.0/cumsum; + for (int i = 0; i < (int) probs.size(); i++) { + probs[i] *= cumsum; + } + } + +// printf("\n"); +// for (int i = 0; i < (int) probs.size(); i++) { +// for (int i = 0; i < 10; i++) { +// printf("%d: '%s' %f\n", i, vocab.id_to_token.at(logits_id[i].second).c_str(), probs[i]); +// } + + std::discrete_distribution<> dist(probs.begin(), probs.end()); + int idx = dist(rng); + + return logits_id[idx].second; + +} + +bool read_wav(const std::string & fname, std::vector& pcmf32, std::vector>& pcmf32s, bool stereo) { + drwav wav; + std::vector wav_data; // used for pipe input from stdin + + if (fname == "-") { + { + uint8_t buf[1024]; + while (true) + { + const size_t n = fread(buf, 1, sizeof(buf), stdin); + if (n == 0) { + break; + } + wav_data.insert(wav_data.end(), buf, buf + n); + } + } + + if (drwav_init_memory(&wav, wav_data.data(), wav_data.size(), nullptr) == false) { + fprintf(stderr, "error: failed to open WAV file from stdin\n"); + return false; + } + + fprintf(stderr, "%s: read %zu bytes from stdin\n", __func__, wav_data.size()); + } + else if (drwav_init_file(&wav, fname.c_str(), nullptr) == false) { + fprintf(stderr, "error: failed to open '%s' as WAV file\n", fname.c_str()); + return false; + } + + if (wav.channels != 1 && wav.channels != 2) { + fprintf(stderr, "%s: WAV file '%s' must be mono or stereo\n", __func__, fname.c_str()); + return false; + } + + if (stereo && wav.channels != 2) { + fprintf(stderr, "%s: WAV file '%s' must be stereo for diarization\n", __func__, fname.c_str()); + return false; + } + + if (wav.sampleRate != COMMON_SAMPLE_RATE) { + fprintf(stderr, "%s: WAV file '%s' must be %i kHz\n", __func__, fname.c_str(), COMMON_SAMPLE_RATE/1000); + return false; + } + + if (wav.bitsPerSample != 16) { + fprintf(stderr, "%s: WAV file '%s' must be 16-bit\n", __func__, fname.c_str()); + return false; + } + + const uint64_t n = wav_data.empty() ? wav.totalPCMFrameCount : wav_data.size()/(wav.channels*wav.bitsPerSample/8); + + std::vector pcm16; + pcm16.resize(n*wav.channels); + drwav_read_pcm_frames_s16(&wav, n, pcm16.data()); + drwav_uninit(&wav); + + // convert to mono, float + pcmf32.resize(n); + if (wav.channels == 1) { + for (uint64_t i = 0; i < n; i++) { + pcmf32[i] = float(pcm16[i])/32768.0f; + } + } else { + for (uint64_t i = 0; i < n; i++) { + pcmf32[i] = float(pcm16[2*i] + pcm16[2*i + 1])/65536.0f; + } + } + + if (stereo) { + // convert to stereo, float + pcmf32s.resize(2); + + pcmf32s[0].resize(n); + pcmf32s[1].resize(n); + for (uint64_t i = 0; i < n; i++) { + pcmf32s[0][i] = float(pcm16[2*i])/32768.0f; + pcmf32s[1][i] = float(pcm16[2*i + 1])/32768.0f; + } + } + + return true; +} + +void high_pass_filter(std::vector & data, float cutoff, float sample_rate) { + const float rc = 1.0f / (2.0f * M_PI * cutoff); + const float dt = 1.0f / sample_rate; + const float alpha = dt / (rc + dt); + + float y = data[0]; + + for (size_t i = 1; i < data.size(); i++) { + y = alpha * (y + data[i] - data[i - 1]); + data[i] = y; + } +} + +bool vad_simple(std::vector & pcmf32, int sample_rate, int last_ms, float vad_thold, float freq_thold, bool verbose) { + const int n_samples = pcmf32.size(); + const int n_samples_last = (sample_rate * last_ms) / 1000; + + if (n_samples_last >= n_samples) { + // not enough samples - assume no speech + return false; + } + + if (freq_thold > 0.0f) { + high_pass_filter(pcmf32, freq_thold, sample_rate); + } + + float energy_all = 0.0f; + float energy_last = 0.0f; + + for (int i = 0; i < n_samples; i++) { + energy_all += fabsf(pcmf32[i]); + + if (i >= n_samples - n_samples_last) { + energy_last += fabsf(pcmf32[i]); + } + } + + energy_all /= n_samples; + energy_last /= n_samples_last; + + if (verbose) { + fprintf(stderr, "%s: energy_all: %f, energy_last: %f, vad_thold: %f, freq_thold: %f\n", __func__, energy_all, energy_last, vad_thold, freq_thold); + } + + if (energy_last > vad_thold*energy_all) { + return false; + } + + return true; +} + +float similarity(const std::string & s0, const std::string & s1) { + const size_t len0 = s0.size() + 1; + const size_t len1 = s1.size() + 1; + + std::vector col(len1, 0); + std::vector prevCol(len1, 0); + + for (size_t i = 0; i < len1; i++) { + prevCol[i] = i; + } + + for (size_t i = 0; i < len0; i++) { + col[0] = i; + for (size_t j = 1; j < len1; j++) { + col[j] = std::min(std::min(1 + col[j - 1], 1 + prevCol[j]), prevCol[j - 1] + (i > 0 && s0[i - 1] == s1[j - 1] ? 0 : 1)); + } + col.swap(prevCol); + } + + const float dist = prevCol[len1 - 1]; + + return 1.0f - (dist / std::max(s0.size(), s1.size())); +} diff --git a/ggml_old/examples/common.h b/ggml_old/examples/common.h new file mode 100644 index 0000000..4a24ffb --- /dev/null +++ b/ggml_old/examples/common.h @@ -0,0 +1,141 @@ +// Various helper functions and utilities + +#pragma once + +#include +#include +#include +#include +#include + +#define COMMON_SAMPLE_RATE 16000 + +// +// CLI argument parsing +// + +struct gpt_params { + int32_t seed = -1; // RNG seed + int32_t n_threads = std::min(4, (int32_t) std::thread::hardware_concurrency()); + int32_t n_predict = 200; // new tokens to predict + + // sampling parameters + int32_t top_k = 40; + float top_p = 0.9f; + float temp = 0.9f; + + int32_t n_batch = 8; // batch size for prompt processing + + std::string model = "models/gpt-2-117M/ggml-model.bin"; // model path + std::string prompt; +}; + +bool gpt_params_parse(int argc, char ** argv, gpt_params & params); + +void gpt_print_usage(int argc, char ** argv, const gpt_params & params); + +std::string gpt_random_prompt(std::mt19937 & rng); + +// +// Vocab utils +// + +std::string trim(const std::string & s); + +std::string replace( + const std::string & s, + const std::string & from, + const std::string & to); + +struct gpt_vocab { + using id = int32_t; + using token = std::string; + + std::map token_to_id; + std::map id_to_token; + std::vector special_tokens; + + void add_special_token(const std::string & token); +}; + +// poor-man's JSON parsing +std::map json_parse(const std::string & fname); + +std::string convert_to_utf8(const std::wstring & input); + +std::wstring convert_to_wstring(const std::string & input); + +// split text into tokens +// +// ref: https://github.com/openai/gpt-2/blob/a74da5d99abaaba920de8131d64da2862a8f213b/src/encoder.py#L53 +// +// Regex (Python): +// r"""'s|'t|'re|'ve|'m|'ll|'d| ?\p{L}+| ?\p{N}+| ?[^\s\p{L}\p{N}]+|\s+(?!\S)|\s+""" +// +// Regex (C++): +// R"('s|'t|'re|'ve|'m|'ll|'d| ?[[:alpha:]]+| ?[[:digit:]]+| ?[^\s[:alpha:][:digit:]]+|\s+(?!\S)|\s+)" +// +std::vector gpt_tokenize(const gpt_vocab & vocab, const std::string & text); + +// load the tokens from encoder.json +bool gpt_vocab_init(const std::string & fname, gpt_vocab & vocab); + +// sample next token given probabilities for each embedding +// +// - consider only the top K tokens +// - from them, consider only the top tokens with cumulative probability > P +// +// TODO: not sure if this implementation is correct +// TODO: temperature is not implemented +// +gpt_vocab::id gpt_sample_top_k_top_p( + const gpt_vocab & vocab, + const float * logits, + int top_k, + double top_p, + double temp, + std::mt19937 & rng); + +gpt_vocab::id gpt_sample_top_k_top_p_repeat( + const gpt_vocab & vocab, + const float * logits, + const int32_t * last_n_tokens_data, + size_t last_n_tokens_data_size, + int top_k, + double top_p, + double temp, + int repeat_last_n, + float repeat_penalty, + std::mt19937 & rng); + +// +// Audio utils +// + +// Read WAV audio file and store the PCM data into pcmf32 +// The sample rate of the audio must be equal to COMMON_SAMPLE_RATE +// If stereo flag is set and the audio has 2 channels, the pcmf32s will contain 2 channel PCM +bool read_wav( + const std::string & fname, + std::vector & pcmf32, + std::vector> & pcmf32s, + bool stereo); + +// Apply a high-pass frequency filter to PCM audio +// Suppresses frequencies below cutoff Hz +void high_pass_filter( + std::vector & data, + float cutoff, + float sample_rate); + +// Basic voice activity detection (VAD) using audio energy adaptive threshold +bool vad_simple( + std::vector & pcmf32, + int sample_rate, + int last_ms, + float vad_thold, + float freq_thold, + bool verbose); + +// compute similarity between two strings using Levenshtein distance +float similarity(const std::string & s0, const std::string & s1); diff --git a/ggml_old/examples/dolly-v2/CMakeLists.txt b/ggml_old/examples/dolly-v2/CMakeLists.txt new file mode 100644 index 0000000..b2d5556 --- /dev/null +++ b/ggml_old/examples/dolly-v2/CMakeLists.txt @@ -0,0 +1,13 @@ +# +# dollyv2 + +set(TEST_TARGET dollyv2) +add_executable(${TEST_TARGET} main.cpp) +target_link_libraries(${TEST_TARGET} PRIVATE ggml common common-ggml) + +# +# dollyv2-quantize + +set(TEST_TARGET dollyv2-quantize) +add_executable(${TEST_TARGET} quantize.cpp) +target_link_libraries(${TEST_TARGET} PRIVATE ggml common common-ggml) diff --git a/ggml_old/examples/dolly-v2/README.md b/ggml_old/examples/dolly-v2/README.md new file mode 100644 index 0000000..377e816 --- /dev/null +++ b/ggml_old/examples/dolly-v2/README.md @@ -0,0 +1,184 @@ +# Dolly-V2 + +Transformer architecture: GPT-NeoX + +Modeled from examples/stablelm + +Ref: https://github.com/databrickslabs/dolly + +Ref: https://github.com/stability-AI/stableLM/#stablelm-alpha + +## Usage + +```bash +# get the repo and build it +git clone https://github.com/ggerganov/ggml +cd ggml +mkdir build && cd build +cmake .. +make -j + +# get the Dolly-V2 3B model +git clone https://huggingface.co/databricks/dolly-v2-3b + +# convert model to FP16 +python3 ../examples/dolly-v2/convert-h5-to-ggml.py ./dolly-v2-3b/ 1 + +# run inference using FP16 precision +./bin/dollyv2 -m ./dolly-v2-3b/ggml-model-f16.bin -p "State the meaning of life." -t 6 -n 64 + +main: seed = 1683218142 +dollyv2_model_load: loading model from './dolly-v2-3b/ggml-model-f16.bin' - please wait ... +dollyv2_model_load: n_vocab = 50280 +dollyv2_model_load: n_ctx = 2048 +dollyv2_model_load: n_embd = 2560 +dollyv2_model_load: n_head = 32 +dollyv2_model_load: n_layer = 32 +dollyv2_model_load: n_rot = 20 +dollyv2_model_load: ftype = 1 +dollyv2_model_load: ggml ctx size = 7374.91 MB +dollyv2_model_load: memory_size = 640.00 MB, n_mem = 65536 +dollyv2_model_load: ................................................ done +dollyv2_model_load: model size = 5295.10 MB / num tensors = 388 +main: number of tokens in prompt = 32 +main: token[0] = 30003, Below +main: token[1] = 310, is +main: token[2] = 271, an +main: token[3] = 9775, instruction +main: token[4] = 326, that +main: token[5] = 8631, describes +main: token[6] = 247, a +main: token[7] = 4836, task +main: token[8] = 964, . +main: token[9] = 19566, Write +main: token[10] = 247, a +main: token[11] = 2380, response +main: token[12] = 326, that +main: token[13] = 20420, appropriately +main: token[14] = 29141, completes +main: token[15] = 253, the +main: token[16] = 2748, request +main: token[17] = 964, . +main: token[18] = 187, + +main: token[19] = 187, + +main: token[20] = 50278, ### Instruction: +main: token[21] = 187, + +main: token[22] = 5443, State +main: token[23] = 253, the +main: token[24] = 4495, meaning +main: token[25] = 273, of +main: token[26] = 1495, life +main: token[27] = 964, . +main: token[28] = 187, + +main: token[29] = 187, + +main: token[30] = 50279, ### Response: +main: token[31] = 187, + + +Below is an instruction that describes a task. Write a response that appropriately completes the request. + +### Instruction: +State the meaning of life. + +### Response: +The meaning of life is to love and be loved. + +### End + +main: mem per token = 16136720 bytes +main: load time = 2202.58 ms +main: sample time = 2.57 ms +main: predict time = 1497.14 ms / 33.27 ms per token +main: total time = 6187.27 ms +``` + +## 5-bit integer quantization mode + +```bash +# quantize the model to 5-bits using Q5_0 quantization +./bin/dollyv2-quantize ./dolly-v2-3b/ggml-model-f16.bin ./dolly-v2-3b/ggml-model-q5_0.bin q5_0 + +# run the quantized model +./bin/dollyv2 -m ./dolly-v2-3b/ggml-model-q5_0.bin -p "State the meaning of life." -t 6 -n 64 + +main: seed = 1683218518 +dollyv2_model_load: loading model from './dolly-v2-3b/ggml-model-q5_0.bin' - please wait ... +dollyv2_model_load: n_vocab = 50280 +dollyv2_model_load: n_ctx = 2048 +dollyv2_model_load: n_embd = 2560 +dollyv2_model_load: n_head = 32 +dollyv2_model_load: n_layer = 32 +dollyv2_model_load: n_rot = 20 +dollyv2_model_load: ftype = 8 +dollyv2_model_load: ggml ctx size = 3902.68 MB +dollyv2_model_load: memory_size = 640.00 MB, n_mem = 65536 +dollyv2_model_load: ................................................ done +dollyv2_model_load: model size = 1822.87 MB / num tensors = 388 +main: number of tokens in prompt = 32 +main: token[0] = 30003, Below +main: token[1] = 310, is +main: token[2] = 271, an +main: token[3] = 9775, instruction +main: token[4] = 326, that +main: token[5] = 8631, describes +main: token[6] = 247, a +main: token[7] = 4836, task +main: token[8] = 964, . +main: token[9] = 19566, Write +main: token[10] = 247, a +main: token[11] = 2380, response +main: token[12] = 326, that +main: token[13] = 20420, appropriately +main: token[14] = 29141, completes +main: token[15] = 253, the +main: token[16] = 2748, request +main: token[17] = 964, . +main: token[18] = 187, + +main: token[19] = 187, + +main: token[20] = 50278, ### Instruction: +main: token[21] = 187, + +main: token[22] = 5443, State +main: token[23] = 253, the +main: token[24] = 4495, meaning +main: token[25] = 273, of +main: token[26] = 1495, life +main: token[27] = 964, . +main: token[28] = 187, + +main: token[29] = 187, + +main: token[30] = 50279, ### Response: +main: token[31] = 187, + + +Below is an instruction that describes a task. Write a response that appropriately completes the request. + +### Instruction: +State the meaning of life. + +### Response: +The meaning of life is the discovery of the true self. + +### End + +main: mem per token = 16127760 bytes +main: load time = 1011.09 ms +main: sample time = 2.79 ms +main: predict time = 1271.62 ms / 27.64 ms per token +main: total time = 2802.51 ms +``` + +## Notes + +- No guarantees for correctness +- The tokenizer is currently hacked - probably works only for English +- Non-parallel residual is not supported +- Contributions and improvements are welcome diff --git a/ggml_old/examples/dolly-v2/convert-h5-to-ggml.py b/ggml_old/examples/dolly-v2/convert-h5-to-ggml.py new file mode 100644 index 0000000..0019810 --- /dev/null +++ b/ggml_old/examples/dolly-v2/convert-h5-to-ggml.py @@ -0,0 +1,116 @@ +import sys +import struct +import json +import numpy as np + +from transformers import AutoModelForCausalLM, AutoTokenizer + +if len(sys.argv) < 3: + print("Usage: convert-h5-to-ggml.py dir-model [use-f32]\n") + print(" ftype == 0 -> float32") + print(" ftype == 1 -> float16") + sys.exit(1) + +# output in the same directory as the model +dir_model = sys.argv[1] +fname_out = sys.argv[1] + "/ggml-model.bin" + +with open(dir_model + "/tokenizer.json", "r", encoding="utf-8") as f: + encoder = json.load(f) + +with open(dir_model + "/config.json", "r", encoding="utf-8") as f: + hparams = json.load(f) + +# possible data types +# ftype == 0 -> float32 +# ftype == 1 -> float16 +# +# map from ftype to string +ftype_str = ["f32", "f16"] + +ftype = 1 +if len(sys.argv) > 2: + ftype = int(sys.argv[2]) + if ftype < 0 or ftype > 1: + print("Invalid ftype: " + str(ftype)) + sys.exit(1) + fname_out = sys.argv[1] + "/ggml-model-" + ftype_str[ftype] + ".bin" + + +tokenizer = AutoTokenizer.from_pretrained(dir_model) +model = AutoModelForCausalLM.from_pretrained(dir_model, low_cpu_mem_usage=True) +#print (model) + +#print(tokenizer.encode('I believe the meaning of life is')) + +list_vars = model.state_dict() +for name in list_vars.keys(): + print(name, list_vars[name].shape, list_vars[name].dtype) + +fout = open(fname_out, "wb") + +print(hparams) + +fout.write(struct.pack("i", 0x67676d6c)) # magic: ggml in hex +fout.write(struct.pack("i", hparams["vocab_size"])) +fout.write(struct.pack("i", hparams["max_position_embeddings"])) +fout.write(struct.pack("i", hparams["hidden_size"])) +fout.write(struct.pack("i", hparams["num_attention_heads"])) +fout.write(struct.pack("i", hparams["num_hidden_layers"])) +fout.write(struct.pack("i", int(hparams["rotary_pct"]*(hparams["hidden_size"]//hparams["num_attention_heads"])))) +fout.write(struct.pack("i", hparams["use_parallel_residual"])) +fout.write(struct.pack("i", ftype)) + +# TODO: temporary hack to not deal with implementing the tokenizer +dot_token = tokenizer.encode('.')[0] +for i in range(hparams["vocab_size"]): + text = tokenizer.decode([dot_token, i]).encode('utf-8') + # remove the first byte (it's always '.') + text = text[1:] + fout.write(struct.pack("i", len(text))) + fout.write(text) + +for name in list_vars.keys(): + data = list_vars[name].squeeze().numpy() + print("Processing variable: " + name + " with shape: ", data.shape) + + # we don't need these + if name.endswith(".attention.masked_bias") or \ + name.endswith(".attention.bias") or \ + name.endswith(".attention.rotary_emb.inv_freq"): + print(" Skipping variable: " + name) + continue + + n_dims = len(data.shape); + + # ftype == 0 -> float32, ftype == 1 -> float16 + ftype_cur = 0; + if ftype != 0: + if name[-7:] == ".weight" and n_dims == 2: + print(" Converting to float16") + data = data.astype(np.float16) + ftype_cur = 1 + else: + print(" Converting to float32") + data = data.astype(np.float32) + ftype_cur = 0 + else: + if data.dtype != np.float32: + print(" Converting to float32") + data = data.astype(np.float32) + ftype_cur = 0 + + # header + str = name.encode('utf-8') + fout.write(struct.pack("iii", n_dims, len(str), ftype_cur)) + for i in range(n_dims): + fout.write(struct.pack("i", data.shape[n_dims - 1 - i])) + fout.write(str); + + # data + data.tofile(fout) + +fout.close() + +print("Done. Output file: " + fname_out) +print("") diff --git a/ggml_old/examples/dolly-v2/main.cpp b/ggml_old/examples/dolly-v2/main.cpp new file mode 100644 index 0000000..d2783e2 --- /dev/null +++ b/ggml_old/examples/dolly-v2/main.cpp @@ -0,0 +1,813 @@ +#include "ggml/ggml.h" + +#include "common.h" +#include "common-ggml.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// default hparams (Dolly-V2 3B) +struct dollyv2_hparams { + int32_t n_vocab = 50254; // tokenizer.vocab_size + int32_t n_ctx = 2048; // model.config.max_position_embeddings + int32_t n_embd = 2560; // model.config.hidden_size + int32_t n_head = 32; // model.config.num_attention_heads + int32_t n_layer = 32; // model.config.num_hidden_layers + int32_t n_rot = 20; // rotary_pct[25%] * (n_embd / n_head) + int32_t par_res = 1; // 1 = true, 0 = false + int32_t ftype = GGML_FTYPE_MOSTLY_F16; +}; + +const std::string INSTRUCTION_KEY = "### Instruction:"; +const std::string RESPONSE_KEY = "### Response:"; +const std::string END_KEY = "### End"; +const std::string INTRO_BLURB = "Below is an instruction that describes a task. Write a response that appropriately completes the request."; + +// dollyv2 prompt format +std::string prompt_for_generation(const std::string& instruction) { + return INTRO_BLURB + "\n\n" + INSTRUCTION_KEY + "\n" + instruction + "\n\n" + RESPONSE_KEY + "\n"; +} + +struct dollyv2_layer { + // pre normalization + struct ggml_tensor * ln_1_g; + struct ggml_tensor * ln_1_b; + + // attention + struct ggml_tensor * c_attn_attn_w; + struct ggml_tensor * c_attn_attn_b; + + struct ggml_tensor * c_attn_proj_w; + struct ggml_tensor * c_attn_proj_b; + + // post normalization + struct ggml_tensor * ln_2_g; + struct ggml_tensor * ln_2_b; + + // ff + struct ggml_tensor * c_mlp_fc_w; + struct ggml_tensor * c_mlp_fc_b; + + struct ggml_tensor * c_mlp_proj_w; + struct ggml_tensor * c_mlp_proj_b; +}; + +struct dollyv2_model { + dollyv2_hparams hparams; + + // normalization + struct ggml_tensor * ln_f_g; + struct ggml_tensor * ln_f_b; + + struct ggml_tensor * wte; // position embedding + + struct ggml_tensor * lmh_g; // language model head + //struct ggml_tensor * lmh_b; // language model bias + + std::vector layers; + + // key + value memory + struct ggml_tensor * memory_k; + struct ggml_tensor * memory_v; + + // + struct ggml_context * ctx; + std::map tensors; +}; + +// load the model's weights from a file +bool dollyv2_model_load(const std::string & fname, dollyv2_model & model, gpt_vocab & vocab) { + printf("%s: loading model from '%s' - please wait ...\n", __func__, fname.c_str()); + + auto fin = std::ifstream(fname, std::ios::binary); + if (!fin) { + fprintf(stderr, "%s: failed to open '%s'\n", __func__, fname.c_str()); + return false; + } + + // verify magic + { + uint32_t magic; + fin.read((char *) &magic, sizeof(magic)); + if (magic != 0x67676d6c) { + fprintf(stderr, "%s: invalid model file '%s' (bad magic)\n", __func__, fname.c_str()); + return false; + } + } + + // load hparams + { + auto & hparams = model.hparams; + + fin.read((char *) &hparams.n_vocab, sizeof(hparams.n_vocab)); + fin.read((char *) &hparams.n_ctx, sizeof(hparams.n_ctx)); + fin.read((char *) &hparams.n_embd, sizeof(hparams.n_embd)); + fin.read((char *) &hparams.n_head, sizeof(hparams.n_head)); + fin.read((char *) &hparams.n_layer, sizeof(hparams.n_layer)); + fin.read((char *) &hparams.n_rot, sizeof(hparams.n_rot)); + fin.read((char *) &hparams.par_res, sizeof(hparams.par_res)); + fin.read((char *) &hparams.ftype, sizeof(hparams.ftype)); + + const int32_t qntvr = hparams.ftype / GGML_QNT_VERSION_FACTOR; + + printf("%s: n_vocab = %d\n", __func__, hparams.n_vocab); + printf("%s: n_ctx = %d\n", __func__, hparams.n_ctx); + printf("%s: n_embd = %d\n", __func__, hparams.n_embd); + printf("%s: n_head = %d\n", __func__, hparams.n_head); + printf("%s: n_layer = %d\n", __func__, hparams.n_layer); + printf("%s: n_rot = %d\n", __func__, hparams.n_rot); + printf("%s: par_res = %d\n", __func__, hparams.par_res); + printf("%s: ftype = %d\n", __func__, hparams.ftype); + printf("%s: qntvr = %d\n", __func__, qntvr); + + hparams.ftype %= GGML_QNT_VERSION_FACTOR; + } + + // load vocab + { + const int32_t n_vocab = model.hparams.n_vocab; + + std::string word; + std::vector buf(128); + + for (int i = 0; i < n_vocab; i++) { + uint32_t len; + fin.read((char *) &len, sizeof(len)); + + buf.resize(len); + fin.read((char *) buf.data(), len); + word.assign(buf.data(), len); + + vocab.token_to_id[word] = i; + vocab.id_to_token[i] = word; + } + + vocab.add_special_token("### End"); + vocab.add_special_token("### Instruction:"); + vocab.add_special_token("### Response:"); + } + + // for the big tensors, we have the option to store the data in 16-bit floats or quantized + // in order to save memory and also to speed up the computation + ggml_type wtype = ggml_ftype_to_ggml_type((ggml_ftype) (model.hparams.ftype)); + if (wtype == GGML_TYPE_COUNT) { + fprintf(stderr, "%s: invalid model file '%s' (bad ftype value %d)\n", + __func__, fname.c_str(), model.hparams.ftype); + return false; + } + + auto & ctx = model.ctx; + + size_t ctx_size = 0; + + { + const auto & hparams = model.hparams; + + const int n_embd = hparams.n_embd; + const int n_layer = hparams.n_layer; + const int n_ctx = hparams.n_ctx; + const int n_vocab = hparams.n_vocab; + + ctx_size += n_embd*ggml_type_sizef(GGML_TYPE_F32); // ln_f_g + ctx_size += n_embd*ggml_type_sizef(GGML_TYPE_F32); // ln_f_b + + ctx_size += n_embd*n_vocab*ggml_type_sizef(wtype); // wte + + ctx_size += n_embd*n_vocab*ggml_type_sizef(wtype); // lmh_g + //ctx_size += n_vocab*ggml_type_sizef(GGML_TYPE_F32); // lmh_b + + ctx_size += n_layer*(n_embd*ggml_type_sizef(GGML_TYPE_F32)); // ln_1_g + ctx_size += n_layer*(n_embd*ggml_type_sizef(GGML_TYPE_F32)); // ln_1_b + + ctx_size += n_layer*(3*n_embd*n_embd*ggml_type_sizef(wtype)); // c_attn_attn_w + ctx_size += n_layer*( 3*n_embd*ggml_type_sizef(GGML_TYPE_F32)); // c_attn_attn_b + + ctx_size += n_layer*(n_embd*n_embd*ggml_type_sizef(wtype)); // c_attn_proj_w + ctx_size += n_layer*(n_embd*n_embd*ggml_type_sizef(GGML_TYPE_F32)); // c_attn_proj_b + + ctx_size += n_layer*(n_embd*ggml_type_sizef(GGML_TYPE_F32)); // ln_2_g + ctx_size += n_layer*(n_embd*ggml_type_sizef(GGML_TYPE_F32)); // ln_2_b + + ctx_size += n_layer*(4*n_embd*n_embd*ggml_type_sizef(wtype)); // c_mlp_fc_w + ctx_size += n_layer*( 4*n_embd*ggml_type_sizef(GGML_TYPE_F32)); // c_mlp_fc_b + + ctx_size += n_layer*(4*n_embd*n_embd*ggml_type_sizef(wtype)); // c_mlp_proj_w + ctx_size += n_layer*( n_embd*ggml_type_sizef(GGML_TYPE_F32)); // c_mlp_proj_b + + ctx_size += n_ctx*n_layer*n_embd*ggml_type_sizef(GGML_TYPE_F32); // memory_k + ctx_size += n_ctx*n_layer*n_embd*ggml_type_sizef(GGML_TYPE_F32); // memory_v + + ctx_size += (6 + 16*n_layer)*512; // object overhead + + printf("%s: ggml ctx size = %6.2f MB\n", __func__, ctx_size/(1024.0*1024.0)); + } + + // create the ggml context + { + struct ggml_init_params params = { + .mem_size = ctx_size, + .mem_buffer = NULL, + .no_alloc = false, + }; + + model.ctx = ggml_init(params); + if (!model.ctx) { + fprintf(stderr, "%s: ggml_init() failed\n", __func__); + return false; + } + } + + // prepare memory for the weights + { + const auto & hparams = model.hparams; + + const int n_embd = hparams.n_embd; + const int n_layer = hparams.n_layer; + const int n_vocab = hparams.n_vocab; + + model.layers.resize(n_layer); + + model.wte = ggml_new_tensor_2d(ctx, wtype, n_embd, n_vocab); + + model.ln_f_g = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + model.ln_f_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + + model.lmh_g = ggml_new_tensor_2d(ctx, wtype, n_embd, n_vocab); + //model.lmh_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_vocab); + + // map by name + model.tensors["gpt_neox.embed_in.weight"] = model.wte; + + model.tensors["gpt_neox.final_layer_norm.weight"] = model.ln_f_g; + model.tensors["gpt_neox.final_layer_norm.bias"] = model.ln_f_b; + + model.tensors["embed_out.weight"] = model.lmh_g; + //model.tensors["lm_head.bias"] = model.lmh_b; + + for (int i = 0; i < n_layer; ++i) { + auto & layer = model.layers[i]; + + layer.ln_1_g = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + layer.ln_1_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + + layer.c_attn_attn_w = ggml_new_tensor_2d(ctx, wtype, n_embd, 3*n_embd); + layer.c_attn_attn_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 3*n_embd); + + layer.c_attn_proj_w = ggml_new_tensor_2d(ctx, wtype, n_embd, n_embd); + layer.c_attn_proj_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + + layer.ln_2_g = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + layer.ln_2_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + + layer.c_mlp_fc_w = ggml_new_tensor_2d(ctx, wtype, n_embd, 4*n_embd); + layer.c_mlp_fc_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 4*n_embd); + + layer.c_mlp_proj_w = ggml_new_tensor_2d(ctx, wtype, 4*n_embd, n_embd); + layer.c_mlp_proj_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + + // map by name + + // unmapped: attention.rotary_emb, mlp.act + + model.tensors["gpt_neox.layers." + std::to_string(i) + ".input_layernorm.weight"] = layer.ln_1_g; + model.tensors["gpt_neox.layers." + std::to_string(i) + ".input_layernorm.bias"] = layer.ln_1_b; + + model.tensors["gpt_neox.layers." + std::to_string(i) + ".attention.query_key_value.weight"] = layer.c_attn_attn_w; + model.tensors["gpt_neox.layers." + std::to_string(i) + ".attention.query_key_value.bias"] = layer.c_attn_attn_b; + + model.tensors["gpt_neox.layers." + std::to_string(i) + ".attention.dense.weight"] = layer.c_attn_proj_w; + model.tensors["gpt_neox.layers." + std::to_string(i) + ".attention.dense.bias"] = layer.c_attn_proj_b; + + model.tensors["gpt_neox.layers." + std::to_string(i) + ".post_attention_layernorm.weight"] = layer.ln_2_g; + model.tensors["gpt_neox.layers." + std::to_string(i) + ".post_attention_layernorm.bias"] = layer.ln_2_b; + + model.tensors["gpt_neox.layers." + std::to_string(i) + ".mlp.dense_h_to_4h.weight"] = layer.c_mlp_fc_w; + model.tensors["gpt_neox.layers." + std::to_string(i) + ".mlp.dense_h_to_4h.bias"] = layer.c_mlp_fc_b; + + model.tensors["gpt_neox.layers." + std::to_string(i) + ".mlp.dense_4h_to_h.weight"] = layer.c_mlp_proj_w; + model.tensors["gpt_neox.layers." + std::to_string(i) + ".mlp.dense_4h_to_h.bias"] = layer.c_mlp_proj_b; + } + } + + // key + value memory + { + const auto & hparams = model.hparams; + + const int n_embd = hparams.n_embd; + const int n_layer = hparams.n_layer; + const int n_ctx = hparams.n_ctx; + + const int64_t n_mem = n_layer*n_ctx; + const int64_t n_elements = n_embd*n_mem; + + model.memory_k = ggml_new_tensor_1d(ctx, GGML_TYPE_F16, n_elements); + model.memory_v = ggml_new_tensor_1d(ctx, GGML_TYPE_F16, n_elements); + + const size_t memory_size = ggml_nbytes(model.memory_k) + ggml_nbytes(model.memory_v); + + printf("%s: memory_size = %8.2f MB, n_mem = %" PRId64 "\n", __func__, memory_size/1024.0/1024.0, n_mem); + } + + // load weights + { + int n_tensors = 0; + size_t total_size = 0; + + printf("%s: ", __func__); + + while (true) { + int32_t n_dims; + int32_t length; + int32_t ttype; + + fin.read(reinterpret_cast(&n_dims), sizeof(n_dims)); + fin.read(reinterpret_cast(&length), sizeof(length)); + fin.read(reinterpret_cast(&ttype), sizeof(ttype)); + + if (fin.eof()) { + break; + } + + int32_t nelements = 1; + int32_t ne[2] = { 1, 1 }; + for (int i = 0; i < n_dims; ++i) { + fin.read(reinterpret_cast(&ne[i]), sizeof(ne[i])); + nelements *= ne[i]; + } + + std::string name(length, 0); + fin.read(&name[0], length); + + if (model.tensors.find(name.data()) == model.tensors.end()) { + fprintf(stderr, "%s: unknown tensor '%s' in model file\n", __func__, name.data()); + return false; + } + + auto tensor = model.tensors[name.data()]; + if (ggml_nelements(tensor) != nelements) { + fprintf(stderr, "%s: tensor '%s' has wrong size in model file\n", __func__, name.data()); + return false; + } + + if (tensor->ne[0] != ne[0] || tensor->ne[1] != ne[1]) { + fprintf(stderr, "%s: tensor '%s' has wrong shape in model file: got [%5d, %5d], expected [%5d, %5d]\n", + __func__, name.data(), (int) tensor->ne[0], (int) tensor->ne[1], ne[0], ne[1]); + return false; + } + + // for debugging + if (0) { + printf("%24s - [%5d, %5d], type = %6s, %6.2f MB, %9zu bytes\n", name.data(), ne[0], ne[1], ggml_type_name(ggml_type(ttype)), ggml_nbytes(tensor)/1024.0/1024.0, ggml_nbytes(tensor)); + } + + const size_t bpe = ggml_type_size(ggml_type(ttype)); + + if ((nelements*bpe)/ggml_blck_size(tensor->type) != ggml_nbytes(tensor)) { + fprintf(stderr, "%s: tensor '%s' has wrong size in model file: got %zu, expected %zu\n", + __func__, name.data(), ggml_nbytes(tensor), nelements*bpe); + return false; + } + + fin.read(reinterpret_cast(tensor->data), ggml_nbytes(tensor)); + + total_size += ggml_nbytes(tensor); + if (++n_tensors % 8 == 0) { + printf("."); + fflush(stdout); + } + } + + printf(" done\n"); + + printf("%s: model size = %8.2f MB / num tensors = %d\n", __func__, total_size/1024.0/1024.0, n_tensors); + } + + fin.close(); + + return true; +} + +// feed-forward network +ggml_tensor * gpt_neox_ff( + const dollyv2_layer &layer, + ggml_context * ctx0, + ggml_tensor * inp) { + ggml_tensor * cur = ggml_norm(ctx0, inp); + + cur = ggml_add(ctx0, + ggml_mul(ctx0, + ggml_repeat(ctx0, layer.ln_2_g, cur), + cur), + ggml_repeat(ctx0, layer.ln_2_b, cur)); + + cur = ggml_mul_mat(ctx0, + layer.c_mlp_fc_w, + cur); + + cur = ggml_add(ctx0, + ggml_repeat(ctx0, layer.c_mlp_fc_b, cur), + cur); + + // GELU activation + cur = ggml_gelu(ctx0, cur); + + // projection + // cur = proj_w*cur + proj_b + cur = ggml_mul_mat(ctx0, + layer.c_mlp_proj_w, + cur); + + cur = ggml_add(ctx0, + ggml_repeat(ctx0, layer.c_mlp_proj_b, cur), + cur); + return cur; +} + +// evaluate the transformer +// +// - model: the model +// - n_threads: number of threads to use +// - n_past: the context size so far +// - embd_inp: the embeddings of the tokens in the context +// - embd_w: the predicted logits for the next token +// +bool dollyv2_eval( + const dollyv2_model & model, + const int n_threads, + const int n_past, + const std::vector & embd_inp, + std::vector & embd_w, + size_t & mem_per_token) { + const int N = embd_inp.size(); + + const auto & hparams = model.hparams; + + const int n_embd = hparams.n_embd; + const int n_layer = hparams.n_layer; + const int n_ctx = hparams.n_ctx; + const int n_head = hparams.n_head; + const int n_vocab = hparams.n_vocab; + const int n_rot = hparams.n_rot; + + static size_t buf_size = 256u*1024*1024; + static void * buf = malloc(buf_size); + + if (mem_per_token > 0 && mem_per_token*N > buf_size) { + const size_t buf_size_new = 1.1*(mem_per_token*N); // add 10% to account for ggml object overhead + //printf("\n%s: reallocating buffer from %zu to %zu bytes\n", __func__, buf_size, buf_size_new); + + // reallocate + buf_size = buf_size_new; + buf = realloc(buf, buf_size); + if (buf == nullptr) { + fprintf(stderr, "%s: failed to allocate %zu bytes\n", __func__, buf_size); + return false; + } + } + + struct ggml_init_params params = { + .mem_size = buf_size, + .mem_buffer = buf, + .no_alloc = false, + }; + + struct ggml_context * ctx0 = ggml_init(params); + struct ggml_cgraph gf = { }; + gf.n_threads = n_threads; + + struct ggml_tensor * embd = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, N); + memcpy(embd->data, embd_inp.data(), N*ggml_element_size(embd)); + + // wte + struct ggml_tensor * inpL = ggml_get_rows(ctx0, model.wte, embd); + + for (int il = 0; il < n_layer; ++il) { + struct ggml_tensor * cur; + + // self-attention + { + { + cur = ggml_norm(ctx0, inpL); + + cur = ggml_add(ctx0, + ggml_mul(ctx0, + ggml_repeat(ctx0, model.layers[il].ln_1_g, cur), + cur), + ggml_repeat(ctx0, model.layers[il].ln_1_b, cur)); + } + + // compute QKV + { + cur = ggml_mul_mat(ctx0, + model.layers[il].c_attn_attn_w, + cur); + + cur = ggml_add(ctx0, + ggml_repeat(ctx0, model.layers[il].c_attn_attn_b, cur), + cur); + } + + struct ggml_tensor * Qcur = ggml_cont(ctx0, ggml_view_3d(ctx0, cur, n_embd/n_head, n_head, N, cur->nb[1]/n_head, cur->nb[1], 0*sizeof(float)*n_embd/n_head)); + struct ggml_tensor * Kcur = ggml_cont(ctx0, ggml_view_3d(ctx0, cur, n_embd/n_head, n_head, N, cur->nb[1]/n_head, cur->nb[1], 1*sizeof(float)*n_embd/n_head)); + struct ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_3d(ctx0, cur, n_embd/n_head, n_head, N, cur->nb[1]/n_head, cur->nb[1], 2*sizeof(float)*n_embd/n_head)); + + // using mode = 2 for GPT-NeoX mode + Qcur = ggml_rope_inplace(ctx0, Qcur, n_past, n_rot, 2); + Kcur = ggml_rope_inplace(ctx0, Kcur, n_past, n_rot, 2); + + // store key and value to memory + { + Vcur = ggml_transpose(ctx0, ggml_reshape_2d(ctx0, Vcur, n_embd, N)); + + struct ggml_tensor * k = ggml_view_1d(ctx0, model.memory_k, N*n_embd, (ggml_element_size(model.memory_k)*n_embd)*(il*n_ctx + n_past)); + struct ggml_tensor * v = ggml_view_2d(ctx0, model.memory_v, N, n_embd, + ( n_ctx)*ggml_element_size(model.memory_v), + (il*n_ctx)*ggml_element_size(model.memory_v)*n_embd + n_past*ggml_element_size(model.memory_v)); + + ggml_build_forward_expand(&gf, ggml_cpy(ctx0, Kcur, k)); + ggml_build_forward_expand(&gf, ggml_cpy(ctx0, Vcur, v)); + } + + // Q = Qcur.contiguous().view(n_embd/n_head, n_head, N).permute(0, 2, 1, 3) + struct ggml_tensor * Q = + ggml_permute(ctx0, + Qcur, + 0, 2, 1, 3); + + // K = Kmem.view(n_embd/n_head, n_head, n_past + N).permute(0, 2, 1, 3) + struct ggml_tensor * K = + ggml_permute(ctx0, + ggml_reshape_3d(ctx0, + ggml_view_1d(ctx0, model.memory_k, (n_past + N)*n_embd, il*n_ctx*ggml_element_size(model.memory_k)*n_embd), + n_embd/n_head, n_head, n_past + N), + 0, 2, 1, 3); + + // K * Q + struct ggml_tensor * KQ = ggml_mul_mat(ctx0, K, Q); + + // KQ_scaled = KQ / sqrt(n_embd/n_head) + struct ggml_tensor * KQ_scaled = + ggml_scale_inplace(ctx0, + KQ, + ggml_new_f32(ctx0, 1.0f/sqrt(float(n_embd)/n_head)) + ); + + // KQ_masked = mask_past(KQ_scaled) + struct ggml_tensor * KQ_masked = ggml_diag_mask_inf_inplace(ctx0, KQ_scaled, n_past); + + // KQ = soft_max(KQ_masked) + struct ggml_tensor * KQ_soft_max = ggml_soft_max_inplace(ctx0, KQ_masked); + + // V_trans = Vmem.view(n_embd/n_head, n_head, n_past + N).permute(1, 2, 0, 3).contiguous() + struct ggml_tensor * V = + ggml_view_3d(ctx0, model.memory_v, + n_past + N, n_embd/n_head, n_head, + n_ctx*ggml_element_size(model.memory_v), + n_ctx*ggml_element_size(model.memory_v)*n_embd/n_head, + il*n_ctx*ggml_element_size(model.memory_v)*n_embd); + + // KQV = transpose(V) * KQ_soft_max + struct ggml_tensor * KQV = ggml_mul_mat(ctx0, V, KQ_soft_max); + + // KQV_merged = KQV.permute(0, 2, 1, 3) + struct ggml_tensor * KQV_merged = ggml_permute(ctx0, KQV, 0, 2, 1, 3); + + // cur = KQV_merged.contiguous().view(n_embd, N) + cur = ggml_cpy(ctx0, + KQV_merged, + ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_embd, N)); + + // projection + { + cur = ggml_mul_mat(ctx0, + model.layers[il].c_attn_proj_w, + cur); + + cur = ggml_add(ctx0, ggml_repeat(ctx0, model.layers[il].c_attn_proj_b, cur), cur); + } + } + + if (hparams.par_res == 0) { + struct ggml_tensor * inpFF = ggml_add(ctx0, cur, inpL); + + cur = gpt_neox_ff(model.layers[il], ctx0, inpFF); + + // input for next layer + inpL = ggml_add(ctx0, cur, inpFF); + } else { + struct ggml_tensor * inpFF = cur; + + // this is independent of the self-attention result, so it could be done in parallel to the self-attention + // note here we pass inpL instead of cur + cur = gpt_neox_ff(model.layers[il], ctx0, inpL); + + // layer input + FF + cur = ggml_add(ctx0, cur, inpFF); + + // input for next layer + inpL = ggml_add(ctx0, cur, inpL); + } + + } + + // norm + { + inpL = ggml_norm(ctx0, inpL); + + // inpL = ln_f_g*inpL + ln_f_b + inpL = ggml_add(ctx0, + ggml_mul(ctx0, + ggml_repeat(ctx0, model.ln_f_g, inpL), + inpL), + ggml_repeat(ctx0, model.ln_f_b, inpL)); + } + + // lm_head + { + inpL = ggml_mul_mat(ctx0, model.lmh_g, inpL); + + //inpL = ggml_add(ctx0, + // ggml_repeat(ctx0, model.lmh_b, inpL), + // inpL); + } + + // logits -> probs + //inpL = ggml_soft_max_inplace(ctx0, inpL); + + // run the computation + ggml_build_forward_expand(&gf, inpL); + ggml_graph_compute (ctx0, &gf); + + //if (n_past%100 == 0) { + // ggml_graph_print (&gf); + // ggml_graph_dump_dot(&gf, NULL, "gpt-2.dot"); + //} + + //embd_w.resize(n_vocab*N); + //memcpy(embd_w.data(), ggml_get_data(inpL), sizeof(float)*n_vocab*N); + + // return result for just the last token + embd_w.resize(n_vocab); + memcpy(embd_w.data(), (float *) ggml_get_data(inpL) + (n_vocab*(N-1)), sizeof(float)*n_vocab); + + if (mem_per_token == 0) { + mem_per_token = ggml_used_mem(ctx0)/N; + } + //printf("used_mem = %zu\n", ggml_used_mem(ctx0)); + + ggml_free(ctx0); + + return true; +} + +int main(int argc, char ** argv) { + ggml_time_init(); + + const int64_t t_main_start_us = ggml_time_us(); + + gpt_params params; + params.model = "models/dolly-v2-3b/ggml-model-f16.bin"; + + if (gpt_params_parse(argc, argv, params) == false) { + return 1; + } + + if (params.seed < 0) { + params.seed = time(NULL); + } + + printf("%s: seed = %d\n", __func__, params.seed); + + std::mt19937 rng(params.seed); + if (params.prompt.empty()) { + params.prompt = gpt_random_prompt(rng); + } + + const std::string prompt = prompt_for_generation(params.prompt); + + int64_t t_load_us = 0; + + gpt_vocab vocab; + dollyv2_model model; + + // load the model + { + const int64_t t_start_us = ggml_time_us(); + + if (!dollyv2_model_load(params.model, model, vocab)) { + fprintf(stderr, "%s: failed to load model from '%s'\n", __func__, params.model.c_str()); + return 1; + } + + t_load_us = ggml_time_us() - t_start_us; + } + + int n_past = 0; + + int64_t t_sample_us = 0; + int64_t t_predict_us = 0; + + std::vector logits; + + // tokenize the prompt + std::vector embd_inp = ::gpt_tokenize(vocab, prompt); + + params.n_predict = std::min(params.n_predict, model.hparams.n_ctx - (int) embd_inp.size()); + + printf("%s: number of tokens in prompt = %zu\n", __func__, embd_inp.size()); + for (int i = 0; i < embd_inp.size(); i++) { + printf("%s: token[%d] = %6d, %s\n", __func__, i, embd_inp[i], vocab.id_to_token.at(embd_inp[i]).c_str()); + } + printf("\n"); + + std::vector embd; + + // determine the required inference memory per token: + size_t mem_per_token = 0; + dollyv2_eval(model, params.n_threads, 0, { 0, 1, 2, 3 }, logits, mem_per_token); + + const int32_t end_token = vocab.token_to_id["### End"]; + + for (int i = embd.size(); i < embd_inp.size() + params.n_predict; i++) { + // predict + if (embd.size() > 0) { + const int64_t t_start_us = ggml_time_us(); + + if (!dollyv2_eval(model, params.n_threads, n_past, embd, logits, mem_per_token)) { + printf("Failed to predict\n"); + return 1; + } + + t_predict_us += ggml_time_us() - t_start_us; + } + + n_past += embd.size(); + embd.clear(); + + if (i >= embd_inp.size()) { + // sample next token + const int top_k = params.top_k; + const float top_p = params.top_p; + const float temp = params.temp; + + const int n_vocab = model.hparams.n_vocab; + + gpt_vocab::id id = 0; + + { + const int64_t t_start_sample_us = ggml_time_us(); + + id = gpt_sample_top_k_top_p(vocab, logits.data() + (logits.size() - n_vocab), top_k, top_p, temp, rng); + + t_sample_us += ggml_time_us() - t_start_sample_us; + } + + // add it to the context + embd.push_back(id); + + } else { + // if here, it means we are still processing the input prompt + for (int k = i; k < embd_inp.size(); k++) { + embd.push_back(embd_inp[k]); + if (embd.size() > params.n_batch) { + break; + } + } + i += embd.size() - 1; + } + + // display text + for (auto id : embd) { + printf("%s", vocab.id_to_token[id].c_str()); + } + fflush(stdout); + + // end of text token + if (embd.back() == 0 || (end_token > 0 && embd.back() == end_token)) { + break; + } + } + + // report timing + { + const int64_t t_main_end_us = ggml_time_us(); + + printf("\n\n"); + printf("%s: mem per token = %8zu bytes\n", __func__, mem_per_token); + printf("%s: load time = %8.2f ms\n", __func__, t_load_us/1000.0f); + printf("%s: sample time = %8.2f ms\n", __func__, t_sample_us/1000.0f); + printf("%s: predict time = %8.2f ms / %.2f ms per token\n", __func__, t_predict_us/1000.0f, t_predict_us/1000.0f/n_past); + printf("%s: total time = %8.2f ms\n", __func__, (t_main_end_us - t_main_start_us)/1000.0f); + } + + ggml_free(model.ctx); + + return 0; +} diff --git a/ggml_old/examples/dolly-v2/quantize.cpp b/ggml_old/examples/dolly-v2/quantize.cpp new file mode 100644 index 0000000..83f7572 --- /dev/null +++ b/ggml_old/examples/dolly-v2/quantize.cpp @@ -0,0 +1,178 @@ +#include "ggml/ggml.h" + +#include "common.h" +#include "common-ggml.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// default hparams (dollyv2 3B) +struct dollyv2_hparams { + int32_t n_vocab = 50254; // tokenizer.vocab_size + int32_t n_ctx = 2048; // model.config.max_position_embeddings + int32_t n_embd = 2560; // model.config.hidden_size + int32_t n_head = 32; // model.config.num_attention_heads + int32_t n_layer = 32; // model.config.num_hidden_layers + int32_t n_rot = 20; // rotary_pct[25%] * (n_embd / n_head) + int32_t par_res = 1; // 1 = true, 0 = false + int32_t ftype = GGML_FTYPE_MOSTLY_F16; +}; + +// quantize a model +bool dollyv2_model_quantize(const std::string & fname_inp, const std::string & fname_out, ggml_ftype ftype) { + gpt_vocab vocab; + + printf("%s: loading model from '%s'\n", __func__, fname_inp.c_str()); + + auto finp = std::ifstream(fname_inp, std::ios::binary); + if (!finp) { + fprintf(stderr, "%s: failed to open '%s' for reading\n", __func__, fname_inp.c_str()); + return false; + } + + auto fout = std::ofstream(fname_out, std::ios::binary); + if (!fout) { + fprintf(stderr, "%s: failed to open '%s' for writing\n", __func__, fname_out.c_str()); + return false; + } + + // verify magic + { + uint32_t magic; + finp.read((char *) &magic, sizeof(magic)); + if (magic != 0x67676d6c) { + fprintf(stderr, "%s: invalid model file '%s' (bad magic)\n", __func__, fname_inp.c_str()); + return false; + } + + fout.write((char *) &magic, sizeof(magic)); + } + + dollyv2_hparams hparams; + + // load hparams + { + finp.read((char *) &hparams.n_vocab, sizeof(hparams.n_vocab)); + finp.read((char *) &hparams.n_ctx, sizeof(hparams.n_ctx)); + finp.read((char *) &hparams.n_embd, sizeof(hparams.n_embd)); + finp.read((char *) &hparams.n_head, sizeof(hparams.n_head)); + finp.read((char *) &hparams.n_layer, sizeof(hparams.n_layer)); + finp.read((char *) &hparams.n_rot, sizeof(hparams.n_rot)); + finp.read((char *) &hparams.par_res, sizeof(hparams.par_res)); + finp.read((char *) &hparams.ftype, sizeof(hparams.ftype)); + + const int32_t qntvr_src = hparams.ftype / GGML_QNT_VERSION_FACTOR; + const int32_t ftype_dst = GGML_QNT_VERSION * GGML_QNT_VERSION_FACTOR + ftype; + + printf("%s: n_vocab = %d\n", __func__, hparams.n_vocab); + printf("%s: n_ctx = %d\n", __func__, hparams.n_ctx); + printf("%s: n_embd = %d\n", __func__, hparams.n_embd); + printf("%s: n_head = %d\n", __func__, hparams.n_head); + printf("%s: n_layer = %d\n", __func__, hparams.n_layer); + printf("%s: par_res = %d\n", __func__, hparams.par_res); + printf("%s: ftype (src) = %d\n", __func__, hparams.ftype); + printf("%s: qntvr (src) = %d\n", __func__, qntvr_src); + printf("%s: ftype (dst) = %d\n", __func__, ftype_dst); + printf("%s: qntvr (dst) = %d\n", __func__, GGML_QNT_VERSION); + + fout.write((char *) &hparams.n_vocab, sizeof(hparams.n_vocab)); + fout.write((char *) &hparams.n_ctx, sizeof(hparams.n_ctx)); + fout.write((char *) &hparams.n_embd, sizeof(hparams.n_embd)); + fout.write((char *) &hparams.n_head, sizeof(hparams.n_head)); + fout.write((char *) &hparams.n_layer, sizeof(hparams.n_layer)); + fout.write((char *) &hparams.n_rot, sizeof(hparams.n_rot)); + fout.write((char *) &hparams.par_res, sizeof(hparams.par_res)); + fout.write((char *) &ftype_dst, sizeof(ftype_dst)); + } + + // load vocab + { + const int32_t n_vocab = hparams.n_vocab; + + std::string word; + for (int i = 0; i < n_vocab; i++) { + uint32_t len; + finp.read ((char *) &len, sizeof(len)); + fout.write((char *) &len, sizeof(len)); + + word.resize(len); + finp.read ((char *) word.data(), len); + fout.write((char *) word.data(), len); + + vocab.token_to_id[word] = i; + vocab.id_to_token[i] = word; + } + } + + // regexes of tensor names to be quantized + const std::vector to_quant = { + ".*weight", + }; + + if (!ggml_common_quantize_0(finp, fout, ftype, to_quant, {})) { + fprintf(stderr, "%s: failed to quantize model '%s'\n", __func__, fname_inp.c_str()); + return false; + } + + finp.close(); + fout.close(); + + return true; +} + +// usage: +// ./dollyv2-quantize models/dolly-v2-3B/ggml-model.bin models/dolly-v2-3B/ggml-model-quant.bin type +// +int main(int argc, char ** argv) { + if (argc != 4) { + fprintf(stderr, "usage: %s model-f32.bin model-quant.bin type\n", argv[0]); + ggml_print_ftypes(stderr); + return 1; + } + + // needed to initialize f16 tables + { + struct ggml_init_params params = { 0, NULL, false }; + struct ggml_context * ctx = ggml_init(params); + ggml_free(ctx); + } + + const std::string fname_inp = argv[1]; + const std::string fname_out = argv[2]; + + const ggml_ftype ftype = ggml_parse_ftype(argv[3]); + + const int64_t t_main_start_us = ggml_time_us(); + + int64_t t_quantize_us = 0; + + // load the model + { + const int64_t t_start_us = ggml_time_us(); + + if (!dollyv2_model_quantize(fname_inp, fname_out, ggml_ftype(ftype))) { + fprintf(stderr, "%s: failed to quantize model from '%s'\n", __func__, fname_inp.c_str()); + return 1; + } + + t_quantize_us = ggml_time_us() - t_start_us; + } + + // report timing + { + const int64_t t_main_end_us = ggml_time_us(); + + printf("\n"); + printf("%s: quantize time = %8.2f ms\n", __func__, t_quantize_us/1000.0f); + printf("%s: total time = %8.2f ms\n", __func__, (t_main_end_us - t_main_start_us)/1000.0f); + } + + return 0; +} diff --git a/ggml_old/examples/dr_wav.h b/ggml_old/examples/dr_wav.h new file mode 100644 index 0000000..fd3e95b --- /dev/null +++ b/ggml_old/examples/dr_wav.h @@ -0,0 +1,6434 @@ +/* +WAV audio loader and writer. Choice of public domain or MIT-0. See license statements at the end of this file. +dr_wav - v0.12.16 - 2020-12-02 + +David Reid - mackron@gmail.com + +GitHub: https://github.com/mackron/dr_libs +*/ + +/* +RELEASE NOTES - VERSION 0.12 +============================ +Version 0.12 includes breaking changes to custom chunk handling. + + +Changes to Chunk Callback +------------------------- +dr_wav supports the ability to fire a callback when a chunk is encounted (except for WAVE and FMT chunks). The callback has been updated to include both the +container (RIFF or Wave64) and the FMT chunk which contains information about the format of the data in the wave file. + +Previously, there was no direct way to determine the container, and therefore no way to discriminate against the different IDs in the chunk header (RIFF and +Wave64 containers encode chunk ID's differently). The `container` parameter can be used to know which ID to use. + +Sometimes it can be useful to know the data format at the time the chunk callback is fired. A pointer to a `drwav_fmt` object is now passed into the chunk +callback which will give you information about the data format. To determine the sample format, use `drwav_fmt_get_format()`. This will return one of the +`DR_WAVE_FORMAT_*` tokens. +*/ + +/* +Introduction +============ +This is a single file library. To use it, do something like the following in one .c file. + + ```c + #define DR_WAV_IMPLEMENTATION + #include "dr_wav.h" + ``` + +You can then #include this file in other parts of the program as you would with any other header file. Do something like the following to read audio data: + + ```c + drwav wav; + if (!drwav_init_file(&wav, "my_song.wav", NULL)) { + // Error opening WAV file. + } + + drwav_int32* pDecodedInterleavedPCMFrames = malloc(wav.totalPCMFrameCount * wav.channels * sizeof(drwav_int32)); + size_t numberOfSamplesActuallyDecoded = drwav_read_pcm_frames_s32(&wav, wav.totalPCMFrameCount, pDecodedInterleavedPCMFrames); + + ... + + drwav_uninit(&wav); + ``` + +If you just want to quickly open and read the audio data in a single operation you can do something like this: + + ```c + unsigned int channels; + unsigned int sampleRate; + drwav_uint64 totalPCMFrameCount; + float* pSampleData = drwav_open_file_and_read_pcm_frames_f32("my_song.wav", &channels, &sampleRate, &totalPCMFrameCount, NULL); + if (pSampleData == NULL) { + // Error opening and reading WAV file. + } + + ... + + drwav_free(pSampleData); + ``` + +The examples above use versions of the API that convert the audio data to a consistent format (32-bit signed PCM, in this case), but you can still output the +audio data in its internal format (see notes below for supported formats): + + ```c + size_t framesRead = drwav_read_pcm_frames(&wav, wav.totalPCMFrameCount, pDecodedInterleavedPCMFrames); + ``` + +You can also read the raw bytes of audio data, which could be useful if dr_wav does not have native support for a particular data format: + + ```c + size_t bytesRead = drwav_read_raw(&wav, bytesToRead, pRawDataBuffer); + ``` + +dr_wav can also be used to output WAV files. This does not currently support compressed formats. To use this, look at `drwav_init_write()`, +`drwav_init_file_write()`, etc. Use `drwav_write_pcm_frames()` to write samples, or `drwav_write_raw()` to write raw data in the "data" chunk. + + ```c + drwav_data_format format; + format.container = drwav_container_riff; // <-- drwav_container_riff = normal WAV files, drwav_container_w64 = Sony Wave64. + format.format = DR_WAVE_FORMAT_PCM; // <-- Any of the DR_WAVE_FORMAT_* codes. + format.channels = 2; + format.sampleRate = 44100; + format.bitsPerSample = 16; + drwav_init_file_write(&wav, "data/recording.wav", &format, NULL); + + ... + + drwav_uint64 framesWritten = drwav_write_pcm_frames(pWav, frameCount, pSamples); + ``` + +dr_wav has seamless support the Sony Wave64 format. The decoder will automatically detect it and it should Just Work without any manual intervention. + + +Build Options +============= +#define these options before including this file. + +#define DR_WAV_NO_CONVERSION_API + Disables conversion APIs such as `drwav_read_pcm_frames_f32()` and `drwav_s16_to_f32()`. + +#define DR_WAV_NO_STDIO + Disables APIs that initialize a decoder from a file such as `drwav_init_file()`, `drwav_init_file_write()`, etc. + + + +Notes +===== +- Samples are always interleaved. +- The default read function does not do any data conversion. Use `drwav_read_pcm_frames_f32()`, `drwav_read_pcm_frames_s32()` and `drwav_read_pcm_frames_s16()` + to read and convert audio data to 32-bit floating point, signed 32-bit integer and signed 16-bit integer samples respectively. Tested and supported internal + formats include the following: + - Unsigned 8-bit PCM + - Signed 12-bit PCM + - Signed 16-bit PCM + - Signed 24-bit PCM + - Signed 32-bit PCM + - IEEE 32-bit floating point + - IEEE 64-bit floating point + - A-law and u-law + - Microsoft ADPCM + - IMA ADPCM (DVI, format code 0x11) +- dr_wav will try to read the WAV file as best it can, even if it's not strictly conformant to the WAV format. +*/ + +#ifndef dr_wav_h +#define dr_wav_h + +#ifdef __cplusplus +extern "C" { +#endif + +#define DRWAV_STRINGIFY(x) #x +#define DRWAV_XSTRINGIFY(x) DRWAV_STRINGIFY(x) + +#define DRWAV_VERSION_MAJOR 0 +#define DRWAV_VERSION_MINOR 12 +#define DRWAV_VERSION_REVISION 16 +#define DRWAV_VERSION_STRING DRWAV_XSTRINGIFY(DRWAV_VERSION_MAJOR) "." DRWAV_XSTRINGIFY(DRWAV_VERSION_MINOR) "." DRWAV_XSTRINGIFY(DRWAV_VERSION_REVISION) + +#include /* For size_t. */ + +/* Sized types. */ +typedef signed char drwav_int8; +typedef unsigned char drwav_uint8; +typedef signed short drwav_int16; +typedef unsigned short drwav_uint16; +typedef signed int drwav_int32; +typedef unsigned int drwav_uint32; +#if defined(_MSC_VER) + typedef signed __int64 drwav_int64; + typedef unsigned __int64 drwav_uint64; +#else + #if defined(__clang__) || (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))) + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wlong-long" + #if defined(__clang__) + #pragma GCC diagnostic ignored "-Wc++11-long-long" + #endif + #endif + typedef signed long long drwav_int64; + typedef unsigned long long drwav_uint64; + #if defined(__clang__) || (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))) + #pragma GCC diagnostic pop + #endif +#endif +#if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__)) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__) + typedef drwav_uint64 drwav_uintptr; +#else + typedef drwav_uint32 drwav_uintptr; +#endif +typedef drwav_uint8 drwav_bool8; +typedef drwav_uint32 drwav_bool32; +#define DRWAV_TRUE 1 +#define DRWAV_FALSE 0 + +#if !defined(DRWAV_API) + #if defined(DRWAV_DLL) + #if defined(_WIN32) + #define DRWAV_DLL_IMPORT __declspec(dllimport) + #define DRWAV_DLL_EXPORT __declspec(dllexport) + #define DRWAV_DLL_PRIVATE static + #else + #if defined(__GNUC__) && __GNUC__ >= 4 + #define DRWAV_DLL_IMPORT __attribute__((visibility("default"))) + #define DRWAV_DLL_EXPORT __attribute__((visibility("default"))) + #define DRWAV_DLL_PRIVATE __attribute__((visibility("hidden"))) + #else + #define DRWAV_DLL_IMPORT + #define DRWAV_DLL_EXPORT + #define DRWAV_DLL_PRIVATE static + #endif + #endif + + #if defined(DR_WAV_IMPLEMENTATION) || defined(DRWAV_IMPLEMENTATION) + #define DRWAV_API DRWAV_DLL_EXPORT + #else + #define DRWAV_API DRWAV_DLL_IMPORT + #endif + #define DRWAV_PRIVATE DRWAV_DLL_PRIVATE + #else + #define DRWAV_API extern + #define DRWAV_PRIVATE static + #endif +#endif + +typedef drwav_int32 drwav_result; +#define DRWAV_SUCCESS 0 +#define DRWAV_ERROR -1 /* A generic error. */ +#define DRWAV_INVALID_ARGS -2 +#define DRWAV_INVALID_OPERATION -3 +#define DRWAV_OUT_OF_MEMORY -4 +#define DRWAV_OUT_OF_RANGE -5 +#define DRWAV_ACCESS_DENIED -6 +#define DRWAV_DOES_NOT_EXIST -7 +#define DRWAV_ALREADY_EXISTS -8 +#define DRWAV_TOO_MANY_OPEN_FILES -9 +#define DRWAV_INVALID_FILE -10 +#define DRWAV_TOO_BIG -11 +#define DRWAV_PATH_TOO_LONG -12 +#define DRWAV_NAME_TOO_LONG -13 +#define DRWAV_NOT_DIRECTORY -14 +#define DRWAV_IS_DIRECTORY -15 +#define DRWAV_DIRECTORY_NOT_EMPTY -16 +#define DRWAV_END_OF_FILE -17 +#define DRWAV_NO_SPACE -18 +#define DRWAV_BUSY -19 +#define DRWAV_IO_ERROR -20 +#define DRWAV_INTERRUPT -21 +#define DRWAV_UNAVAILABLE -22 +#define DRWAV_ALREADY_IN_USE -23 +#define DRWAV_BAD_ADDRESS -24 +#define DRWAV_BAD_SEEK -25 +#define DRWAV_BAD_PIPE -26 +#define DRWAV_DEADLOCK -27 +#define DRWAV_TOO_MANY_LINKS -28 +#define DRWAV_NOT_IMPLEMENTED -29 +#define DRWAV_NO_MESSAGE -30 +#define DRWAV_BAD_MESSAGE -31 +#define DRWAV_NO_DATA_AVAILABLE -32 +#define DRWAV_INVALID_DATA -33 +#define DRWAV_TIMEOUT -34 +#define DRWAV_NO_NETWORK -35 +#define DRWAV_NOT_UNIQUE -36 +#define DRWAV_NOT_SOCKET -37 +#define DRWAV_NO_ADDRESS -38 +#define DRWAV_BAD_PROTOCOL -39 +#define DRWAV_PROTOCOL_UNAVAILABLE -40 +#define DRWAV_PROTOCOL_NOT_SUPPORTED -41 +#define DRWAV_PROTOCOL_FAMILY_NOT_SUPPORTED -42 +#define DRWAV_ADDRESS_FAMILY_NOT_SUPPORTED -43 +#define DRWAV_SOCKET_NOT_SUPPORTED -44 +#define DRWAV_CONNECTION_RESET -45 +#define DRWAV_ALREADY_CONNECTED -46 +#define DRWAV_NOT_CONNECTED -47 +#define DRWAV_CONNECTION_REFUSED -48 +#define DRWAV_NO_HOST -49 +#define DRWAV_IN_PROGRESS -50 +#define DRWAV_CANCELLED -51 +#define DRWAV_MEMORY_ALREADY_MAPPED -52 +#define DRWAV_AT_END -53 + +/* Common data formats. */ +#define DR_WAVE_FORMAT_PCM 0x1 +#define DR_WAVE_FORMAT_ADPCM 0x2 +#define DR_WAVE_FORMAT_IEEE_FLOAT 0x3 +#define DR_WAVE_FORMAT_ALAW 0x6 +#define DR_WAVE_FORMAT_MULAW 0x7 +#define DR_WAVE_FORMAT_DVI_ADPCM 0x11 +#define DR_WAVE_FORMAT_EXTENSIBLE 0xFFFE + +/* Constants. */ +#ifndef DRWAV_MAX_SMPL_LOOPS +#define DRWAV_MAX_SMPL_LOOPS 1 +#endif + +/* Flags to pass into drwav_init_ex(), etc. */ +#define DRWAV_SEQUENTIAL 0x00000001 + +DRWAV_API void drwav_version(drwav_uint32* pMajor, drwav_uint32* pMinor, drwav_uint32* pRevision); +DRWAV_API const char* drwav_version_string(void); + +typedef enum +{ + drwav_seek_origin_start, + drwav_seek_origin_current +} drwav_seek_origin; + +typedef enum +{ + drwav_container_riff, + drwav_container_w64, + drwav_container_rf64 +} drwav_container; + +typedef struct +{ + union + { + drwav_uint8 fourcc[4]; + drwav_uint8 guid[16]; + } id; + + /* The size in bytes of the chunk. */ + drwav_uint64 sizeInBytes; + + /* + RIFF = 2 byte alignment. + W64 = 8 byte alignment. + */ + unsigned int paddingSize; +} drwav_chunk_header; + +typedef struct +{ + /* + The format tag exactly as specified in the wave file's "fmt" chunk. This can be used by applications + that require support for data formats not natively supported by dr_wav. + */ + drwav_uint16 formatTag; + + /* The number of channels making up the audio data. When this is set to 1 it is mono, 2 is stereo, etc. */ + drwav_uint16 channels; + + /* The sample rate. Usually set to something like 44100. */ + drwav_uint32 sampleRate; + + /* Average bytes per second. You probably don't need this, but it's left here for informational purposes. */ + drwav_uint32 avgBytesPerSec; + + /* Block align. This is equal to the number of channels * bytes per sample. */ + drwav_uint16 blockAlign; + + /* Bits per sample. */ + drwav_uint16 bitsPerSample; + + /* The size of the extended data. Only used internally for validation, but left here for informational purposes. */ + drwav_uint16 extendedSize; + + /* + The number of valid bits per sample. When is equal to WAVE_FORMAT_EXTENSIBLE, + is always rounded up to the nearest multiple of 8. This variable contains information about exactly how + many bits are valid per sample. Mainly used for informational purposes. + */ + drwav_uint16 validBitsPerSample; + + /* The channel mask. Not used at the moment. */ + drwav_uint32 channelMask; + + /* The sub-format, exactly as specified by the wave file. */ + drwav_uint8 subFormat[16]; +} drwav_fmt; + +DRWAV_API drwav_uint16 drwav_fmt_get_format(const drwav_fmt* pFMT); + + +/* +Callback for when data is read. Return value is the number of bytes actually read. + +pUserData [in] The user data that was passed to drwav_init() and family. +pBufferOut [out] The output buffer. +bytesToRead [in] The number of bytes to read. + +Returns the number of bytes actually read. + +A return value of less than bytesToRead indicates the end of the stream. Do _not_ return from this callback until +either the entire bytesToRead is filled or you have reached the end of the stream. +*/ +typedef size_t (* drwav_read_proc)(void* pUserData, void* pBufferOut, size_t bytesToRead); + +/* +Callback for when data is written. Returns value is the number of bytes actually written. + +pUserData [in] The user data that was passed to drwav_init_write() and family. +pData [out] A pointer to the data to write. +bytesToWrite [in] The number of bytes to write. + +Returns the number of bytes actually written. + +If the return value differs from bytesToWrite, it indicates an error. +*/ +typedef size_t (* drwav_write_proc)(void* pUserData, const void* pData, size_t bytesToWrite); + +/* +Callback for when data needs to be seeked. + +pUserData [in] The user data that was passed to drwav_init() and family. +offset [in] The number of bytes to move, relative to the origin. Will never be negative. +origin [in] The origin of the seek - the current position or the start of the stream. + +Returns whether or not the seek was successful. + +Whether or not it is relative to the beginning or current position is determined by the "origin" parameter which will be either drwav_seek_origin_start or +drwav_seek_origin_current. +*/ +typedef drwav_bool32 (* drwav_seek_proc)(void* pUserData, int offset, drwav_seek_origin origin); + +/* +Callback for when drwav_init_ex() finds a chunk. + +pChunkUserData [in] The user data that was passed to the pChunkUserData parameter of drwav_init_ex() and family. +onRead [in] A pointer to the function to call when reading. +onSeek [in] A pointer to the function to call when seeking. +pReadSeekUserData [in] The user data that was passed to the pReadSeekUserData parameter of drwav_init_ex() and family. +pChunkHeader [in] A pointer to an object containing basic header information about the chunk. Use this to identify the chunk. +container [in] Whether or not the WAV file is a RIFF or Wave64 container. If you're unsure of the difference, assume RIFF. +pFMT [in] A pointer to the object containing the contents of the "fmt" chunk. + +Returns the number of bytes read + seeked. + +To read data from the chunk, call onRead(), passing in pReadSeekUserData as the first parameter. Do the same for seeking with onSeek(). The return value must +be the total number of bytes you have read _plus_ seeked. + +Use the `container` argument to discriminate the fields in `pChunkHeader->id`. If the container is `drwav_container_riff` or `drwav_container_rf64` you should +use `id.fourcc`, otherwise you should use `id.guid`. + +The `pFMT` parameter can be used to determine the data format of the wave file. Use `drwav_fmt_get_format()` to get the sample format, which will be one of the +`DR_WAVE_FORMAT_*` identifiers. + +The read pointer will be sitting on the first byte after the chunk's header. You must not attempt to read beyond the boundary of the chunk. +*/ +typedef drwav_uint64 (* drwav_chunk_proc)(void* pChunkUserData, drwav_read_proc onRead, drwav_seek_proc onSeek, void* pReadSeekUserData, const drwav_chunk_header* pChunkHeader, drwav_container container, const drwav_fmt* pFMT); + +typedef struct +{ + void* pUserData; + void* (* onMalloc)(size_t sz, void* pUserData); + void* (* onRealloc)(void* p, size_t sz, void* pUserData); + void (* onFree)(void* p, void* pUserData); +} drwav_allocation_callbacks; + +/* Structure for internal use. Only used for loaders opened with drwav_init_memory(). */ +typedef struct +{ + const drwav_uint8* data; + size_t dataSize; + size_t currentReadPos; +} drwav__memory_stream; + +/* Structure for internal use. Only used for writers opened with drwav_init_memory_write(). */ +typedef struct +{ + void** ppData; + size_t* pDataSize; + size_t dataSize; + size_t dataCapacity; + size_t currentWritePos; +} drwav__memory_stream_write; + +typedef struct +{ + drwav_container container; /* RIFF, W64. */ + drwav_uint32 format; /* DR_WAVE_FORMAT_* */ + drwav_uint32 channels; + drwav_uint32 sampleRate; + drwav_uint32 bitsPerSample; +} drwav_data_format; + + +/* See the following for details on the 'smpl' chunk: https://sites.google.com/site/musicgapi/technical-documents/wav-file-format#smpl */ +typedef struct +{ + drwav_uint32 cuePointId; + drwav_uint32 type; + drwav_uint32 start; + drwav_uint32 end; + drwav_uint32 fraction; + drwav_uint32 playCount; +} drwav_smpl_loop; + + typedef struct +{ + drwav_uint32 manufacturer; + drwav_uint32 product; + drwav_uint32 samplePeriod; + drwav_uint32 midiUnityNotes; + drwav_uint32 midiPitchFraction; + drwav_uint32 smpteFormat; + drwav_uint32 smpteOffset; + drwav_uint32 numSampleLoops; + drwav_uint32 samplerData; + drwav_smpl_loop loops[DRWAV_MAX_SMPL_LOOPS]; +} drwav_smpl; + +typedef struct +{ + /* A pointer to the function to call when more data is needed. */ + drwav_read_proc onRead; + + /* A pointer to the function to call when data needs to be written. Only used when the drwav object is opened in write mode. */ + drwav_write_proc onWrite; + + /* A pointer to the function to call when the wav file needs to be seeked. */ + drwav_seek_proc onSeek; + + /* The user data to pass to callbacks. */ + void* pUserData; + + /* Allocation callbacks. */ + drwav_allocation_callbacks allocationCallbacks; + + + /* Whether or not the WAV file is formatted as a standard RIFF file or W64. */ + drwav_container container; + + + /* Structure containing format information exactly as specified by the wav file. */ + drwav_fmt fmt; + + /* The sample rate. Will be set to something like 44100. */ + drwav_uint32 sampleRate; + + /* The number of channels. This will be set to 1 for monaural streams, 2 for stereo, etc. */ + drwav_uint16 channels; + + /* The bits per sample. Will be set to something like 16, 24, etc. */ + drwav_uint16 bitsPerSample; + + /* Equal to fmt.formatTag, or the value specified by fmt.subFormat if fmt.formatTag is equal to 65534 (WAVE_FORMAT_EXTENSIBLE). */ + drwav_uint16 translatedFormatTag; + + /* The total number of PCM frames making up the audio data. */ + drwav_uint64 totalPCMFrameCount; + + + /* The size in bytes of the data chunk. */ + drwav_uint64 dataChunkDataSize; + + /* The position in the stream of the first byte of the data chunk. This is used for seeking. */ + drwav_uint64 dataChunkDataPos; + + /* The number of bytes remaining in the data chunk. */ + drwav_uint64 bytesRemaining; + + + /* + Only used in sequential write mode. Keeps track of the desired size of the "data" chunk at the point of initialization time. Always + set to 0 for non-sequential writes and when the drwav object is opened in read mode. Used for validation. + */ + drwav_uint64 dataChunkDataSizeTargetWrite; + + /* Keeps track of whether or not the wav writer was initialized in sequential mode. */ + drwav_bool32 isSequentialWrite; + + + /* smpl chunk. */ + drwav_smpl smpl; + + + /* A hack to avoid a DRWAV_MALLOC() when opening a decoder with drwav_init_memory(). */ + drwav__memory_stream memoryStream; + drwav__memory_stream_write memoryStreamWrite; + + /* Generic data for compressed formats. This data is shared across all block-compressed formats. */ + struct + { + drwav_uint64 iCurrentPCMFrame; /* The index of the next PCM frame that will be read by drwav_read_*(). This is used with "totalPCMFrameCount" to ensure we don't read excess samples at the end of the last block. */ + } compressed; + + /* Microsoft ADPCM specific data. */ + struct + { + drwav_uint32 bytesRemainingInBlock; + drwav_uint16 predictor[2]; + drwav_int32 delta[2]; + drwav_int32 cachedFrames[4]; /* Samples are stored in this cache during decoding. */ + drwav_uint32 cachedFrameCount; + drwav_int32 prevFrames[2][2]; /* The previous 2 samples for each channel (2 channels at most). */ + } msadpcm; + + /* IMA ADPCM specific data. */ + struct + { + drwav_uint32 bytesRemainingInBlock; + drwav_int32 predictor[2]; + drwav_int32 stepIndex[2]; + drwav_int32 cachedFrames[16]; /* Samples are stored in this cache during decoding. */ + drwav_uint32 cachedFrameCount; + } ima; +} drwav; + + +/* +Initializes a pre-allocated drwav object for reading. + +pWav [out] A pointer to the drwav object being initialized. +onRead [in] The function to call when data needs to be read from the client. +onSeek [in] The function to call when the read position of the client data needs to move. +onChunk [in, optional] The function to call when a chunk is enumerated at initialized time. +pUserData, pReadSeekUserData [in, optional] A pointer to application defined data that will be passed to onRead and onSeek. +pChunkUserData [in, optional] A pointer to application defined data that will be passed to onChunk. +flags [in, optional] A set of flags for controlling how things are loaded. + +Returns true if successful; false otherwise. + +Close the loader with drwav_uninit(). + +This is the lowest level function for initializing a WAV file. You can also use drwav_init_file() and drwav_init_memory() +to open the stream from a file or from a block of memory respectively. + +Possible values for flags: + DRWAV_SEQUENTIAL: Never perform a backwards seek while loading. This disables the chunk callback and will cause this function + to return as soon as the data chunk is found. Any chunks after the data chunk will be ignored. + +drwav_init() is equivalent to "drwav_init_ex(pWav, onRead, onSeek, NULL, pUserData, NULL, 0);". + +The onChunk callback is not called for the WAVE or FMT chunks. The contents of the FMT chunk can be read from pWav->fmt +after the function returns. + +See also: drwav_init_file(), drwav_init_memory(), drwav_uninit() +*/ +DRWAV_API drwav_bool32 drwav_init(drwav* pWav, drwav_read_proc onRead, drwav_seek_proc onSeek, void* pUserData, const drwav_allocation_callbacks* pAllocationCallbacks); +DRWAV_API drwav_bool32 drwav_init_ex(drwav* pWav, drwav_read_proc onRead, drwav_seek_proc onSeek, drwav_chunk_proc onChunk, void* pReadSeekUserData, void* pChunkUserData, drwav_uint32 flags, const drwav_allocation_callbacks* pAllocationCallbacks); + +/* +Initializes a pre-allocated drwav object for writing. + +onWrite [in] The function to call when data needs to be written. +onSeek [in] The function to call when the write position needs to move. +pUserData [in, optional] A pointer to application defined data that will be passed to onWrite and onSeek. + +Returns true if successful; false otherwise. + +Close the writer with drwav_uninit(). + +This is the lowest level function for initializing a WAV file. You can also use drwav_init_file_write() and drwav_init_memory_write() +to open the stream from a file or from a block of memory respectively. + +If the total sample count is known, you can use drwav_init_write_sequential(). This avoids the need for dr_wav to perform +a post-processing step for storing the total sample count and the size of the data chunk which requires a backwards seek. + +See also: drwav_init_file_write(), drwav_init_memory_write(), drwav_uninit() +*/ +DRWAV_API drwav_bool32 drwav_init_write(drwav* pWav, const drwav_data_format* pFormat, drwav_write_proc onWrite, drwav_seek_proc onSeek, void* pUserData, const drwav_allocation_callbacks* pAllocationCallbacks); +DRWAV_API drwav_bool32 drwav_init_write_sequential(drwav* pWav, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount, drwav_write_proc onWrite, void* pUserData, const drwav_allocation_callbacks* pAllocationCallbacks); +DRWAV_API drwav_bool32 drwav_init_write_sequential_pcm_frames(drwav* pWav, const drwav_data_format* pFormat, drwav_uint64 totalPCMFrameCount, drwav_write_proc onWrite, void* pUserData, const drwav_allocation_callbacks* pAllocationCallbacks); + +/* +Utility function to determine the target size of the entire data to be written (including all headers and chunks). + +Returns the target size in bytes. + +Useful if the application needs to know the size to allocate. + +Only writing to the RIFF chunk and one data chunk is currently supported. + +See also: drwav_init_write(), drwav_init_file_write(), drwav_init_memory_write() +*/ +DRWAV_API drwav_uint64 drwav_target_write_size_bytes(const drwav_data_format* pFormat, drwav_uint64 totalSampleCount); + +/* +Uninitializes the given drwav object. + +Use this only for objects initialized with drwav_init*() functions (drwav_init(), drwav_init_ex(), drwav_init_write(), drwav_init_write_sequential()). +*/ +DRWAV_API drwav_result drwav_uninit(drwav* pWav); + + +/* +Reads raw audio data. + +This is the lowest level function for reading audio data. It simply reads the given number of +bytes of the raw internal sample data. + +Consider using drwav_read_pcm_frames_s16(), drwav_read_pcm_frames_s32() or drwav_read_pcm_frames_f32() for +reading sample data in a consistent format. + +pBufferOut can be NULL in which case a seek will be performed. + +Returns the number of bytes actually read. +*/ +DRWAV_API size_t drwav_read_raw(drwav* pWav, size_t bytesToRead, void* pBufferOut); + +/* +Reads up to the specified number of PCM frames from the WAV file. + +The output data will be in the file's internal format, converted to native-endian byte order. Use +drwav_read_pcm_frames_s16/f32/s32() to read data in a specific format. + +If the return value is less than it means the end of the file has been reached or +you have requested more PCM frames than can possibly fit in the output buffer. + +This function will only work when sample data is of a fixed size and uncompressed. If you are +using a compressed format consider using drwav_read_raw() or drwav_read_pcm_frames_s16/s32/f32(). + +pBufferOut can be NULL in which case a seek will be performed. +*/ +DRWAV_API drwav_uint64 drwav_read_pcm_frames(drwav* pWav, drwav_uint64 framesToRead, void* pBufferOut); +DRWAV_API drwav_uint64 drwav_read_pcm_frames_le(drwav* pWav, drwav_uint64 framesToRead, void* pBufferOut); +DRWAV_API drwav_uint64 drwav_read_pcm_frames_be(drwav* pWav, drwav_uint64 framesToRead, void* pBufferOut); + +/* +Seeks to the given PCM frame. + +Returns true if successful; false otherwise. +*/ +DRWAV_API drwav_bool32 drwav_seek_to_pcm_frame(drwav* pWav, drwav_uint64 targetFrameIndex); + + +/* +Writes raw audio data. + +Returns the number of bytes actually written. If this differs from bytesToWrite, it indicates an error. +*/ +DRWAV_API size_t drwav_write_raw(drwav* pWav, size_t bytesToWrite, const void* pData); + +/* +Writes PCM frames. + +Returns the number of PCM frames written. + +Input samples need to be in native-endian byte order. On big-endian architectures the input data will be converted to +little-endian. Use drwav_write_raw() to write raw audio data without performing any conversion. +*/ +DRWAV_API drwav_uint64 drwav_write_pcm_frames(drwav* pWav, drwav_uint64 framesToWrite, const void* pData); +DRWAV_API drwav_uint64 drwav_write_pcm_frames_le(drwav* pWav, drwav_uint64 framesToWrite, const void* pData); +DRWAV_API drwav_uint64 drwav_write_pcm_frames_be(drwav* pWav, drwav_uint64 framesToWrite, const void* pData); + + +/* Conversion Utilities */ +#ifndef DR_WAV_NO_CONVERSION_API + +/* +Reads a chunk of audio data and converts it to signed 16-bit PCM samples. + +pBufferOut can be NULL in which case a seek will be performed. + +Returns the number of PCM frames actually read. + +If the return value is less than it means the end of the file has been reached. +*/ +DRWAV_API drwav_uint64 drwav_read_pcm_frames_s16(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut); +DRWAV_API drwav_uint64 drwav_read_pcm_frames_s16le(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut); +DRWAV_API drwav_uint64 drwav_read_pcm_frames_s16be(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut); + +/* Low-level function for converting unsigned 8-bit PCM samples to signed 16-bit PCM samples. */ +DRWAV_API void drwav_u8_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, size_t sampleCount); + +/* Low-level function for converting signed 24-bit PCM samples to signed 16-bit PCM samples. */ +DRWAV_API void drwav_s24_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, size_t sampleCount); + +/* Low-level function for converting signed 32-bit PCM samples to signed 16-bit PCM samples. */ +DRWAV_API void drwav_s32_to_s16(drwav_int16* pOut, const drwav_int32* pIn, size_t sampleCount); + +/* Low-level function for converting IEEE 32-bit floating point samples to signed 16-bit PCM samples. */ +DRWAV_API void drwav_f32_to_s16(drwav_int16* pOut, const float* pIn, size_t sampleCount); + +/* Low-level function for converting IEEE 64-bit floating point samples to signed 16-bit PCM samples. */ +DRWAV_API void drwav_f64_to_s16(drwav_int16* pOut, const double* pIn, size_t sampleCount); + +/* Low-level function for converting A-law samples to signed 16-bit PCM samples. */ +DRWAV_API void drwav_alaw_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, size_t sampleCount); + +/* Low-level function for converting u-law samples to signed 16-bit PCM samples. */ +DRWAV_API void drwav_mulaw_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, size_t sampleCount); + + +/* +Reads a chunk of audio data and converts it to IEEE 32-bit floating point samples. + +pBufferOut can be NULL in which case a seek will be performed. + +Returns the number of PCM frames actually read. + +If the return value is less than it means the end of the file has been reached. +*/ +DRWAV_API drwav_uint64 drwav_read_pcm_frames_f32(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut); +DRWAV_API drwav_uint64 drwav_read_pcm_frames_f32le(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut); +DRWAV_API drwav_uint64 drwav_read_pcm_frames_f32be(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut); + +/* Low-level function for converting unsigned 8-bit PCM samples to IEEE 32-bit floating point samples. */ +DRWAV_API void drwav_u8_to_f32(float* pOut, const drwav_uint8* pIn, size_t sampleCount); + +/* Low-level function for converting signed 16-bit PCM samples to IEEE 32-bit floating point samples. */ +DRWAV_API void drwav_s16_to_f32(float* pOut, const drwav_int16* pIn, size_t sampleCount); + +/* Low-level function for converting signed 24-bit PCM samples to IEEE 32-bit floating point samples. */ +DRWAV_API void drwav_s24_to_f32(float* pOut, const drwav_uint8* pIn, size_t sampleCount); + +/* Low-level function for converting signed 32-bit PCM samples to IEEE 32-bit floating point samples. */ +DRWAV_API void drwav_s32_to_f32(float* pOut, const drwav_int32* pIn, size_t sampleCount); + +/* Low-level function for converting IEEE 64-bit floating point samples to IEEE 32-bit floating point samples. */ +DRWAV_API void drwav_f64_to_f32(float* pOut, const double* pIn, size_t sampleCount); + +/* Low-level function for converting A-law samples to IEEE 32-bit floating point samples. */ +DRWAV_API void drwav_alaw_to_f32(float* pOut, const drwav_uint8* pIn, size_t sampleCount); + +/* Low-level function for converting u-law samples to IEEE 32-bit floating point samples. */ +DRWAV_API void drwav_mulaw_to_f32(float* pOut, const drwav_uint8* pIn, size_t sampleCount); + + +/* +Reads a chunk of audio data and converts it to signed 32-bit PCM samples. + +pBufferOut can be NULL in which case a seek will be performed. + +Returns the number of PCM frames actually read. + +If the return value is less than it means the end of the file has been reached. +*/ +DRWAV_API drwav_uint64 drwav_read_pcm_frames_s32(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut); +DRWAV_API drwav_uint64 drwav_read_pcm_frames_s32le(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut); +DRWAV_API drwav_uint64 drwav_read_pcm_frames_s32be(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut); + +/* Low-level function for converting unsigned 8-bit PCM samples to signed 32-bit PCM samples. */ +DRWAV_API void drwav_u8_to_s32(drwav_int32* pOut, const drwav_uint8* pIn, size_t sampleCount); + +/* Low-level function for converting signed 16-bit PCM samples to signed 32-bit PCM samples. */ +DRWAV_API void drwav_s16_to_s32(drwav_int32* pOut, const drwav_int16* pIn, size_t sampleCount); + +/* Low-level function for converting signed 24-bit PCM samples to signed 32-bit PCM samples. */ +DRWAV_API void drwav_s24_to_s32(drwav_int32* pOut, const drwav_uint8* pIn, size_t sampleCount); + +/* Low-level function for converting IEEE 32-bit floating point samples to signed 32-bit PCM samples. */ +DRWAV_API void drwav_f32_to_s32(drwav_int32* pOut, const float* pIn, size_t sampleCount); + +/* Low-level function for converting IEEE 64-bit floating point samples to signed 32-bit PCM samples. */ +DRWAV_API void drwav_f64_to_s32(drwav_int32* pOut, const double* pIn, size_t sampleCount); + +/* Low-level function for converting A-law samples to signed 32-bit PCM samples. */ +DRWAV_API void drwav_alaw_to_s32(drwav_int32* pOut, const drwav_uint8* pIn, size_t sampleCount); + +/* Low-level function for converting u-law samples to signed 32-bit PCM samples. */ +DRWAV_API void drwav_mulaw_to_s32(drwav_int32* pOut, const drwav_uint8* pIn, size_t sampleCount); + +#endif /* DR_WAV_NO_CONVERSION_API */ + + +/* High-Level Convenience Helpers */ + +#ifndef DR_WAV_NO_STDIO +/* +Helper for initializing a wave file for reading using stdio. + +This holds the internal FILE object until drwav_uninit() is called. Keep this in mind if you're caching drwav +objects because the operating system may restrict the number of file handles an application can have open at +any given time. +*/ +DRWAV_API drwav_bool32 drwav_init_file(drwav* pWav, const char* filename, const drwav_allocation_callbacks* pAllocationCallbacks); +DRWAV_API drwav_bool32 drwav_init_file_ex(drwav* pWav, const char* filename, drwav_chunk_proc onChunk, void* pChunkUserData, drwav_uint32 flags, const drwav_allocation_callbacks* pAllocationCallbacks); +DRWAV_API drwav_bool32 drwav_init_file_w(drwav* pWav, const wchar_t* filename, const drwav_allocation_callbacks* pAllocationCallbacks); +DRWAV_API drwav_bool32 drwav_init_file_ex_w(drwav* pWav, const wchar_t* filename, drwav_chunk_proc onChunk, void* pChunkUserData, drwav_uint32 flags, const drwav_allocation_callbacks* pAllocationCallbacks); + +/* +Helper for initializing a wave file for writing using stdio. + +This holds the internal FILE object until drwav_uninit() is called. Keep this in mind if you're caching drwav +objects because the operating system may restrict the number of file handles an application can have open at +any given time. +*/ +DRWAV_API drwav_bool32 drwav_init_file_write(drwav* pWav, const char* filename, const drwav_data_format* pFormat, const drwav_allocation_callbacks* pAllocationCallbacks); +DRWAV_API drwav_bool32 drwav_init_file_write_sequential(drwav* pWav, const char* filename, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount, const drwav_allocation_callbacks* pAllocationCallbacks); +DRWAV_API drwav_bool32 drwav_init_file_write_sequential_pcm_frames(drwav* pWav, const char* filename, const drwav_data_format* pFormat, drwav_uint64 totalPCMFrameCount, const drwav_allocation_callbacks* pAllocationCallbacks); +DRWAV_API drwav_bool32 drwav_init_file_write_w(drwav* pWav, const wchar_t* filename, const drwav_data_format* pFormat, const drwav_allocation_callbacks* pAllocationCallbacks); +DRWAV_API drwav_bool32 drwav_init_file_write_sequential_w(drwav* pWav, const wchar_t* filename, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount, const drwav_allocation_callbacks* pAllocationCallbacks); +DRWAV_API drwav_bool32 drwav_init_file_write_sequential_pcm_frames_w(drwav* pWav, const wchar_t* filename, const drwav_data_format* pFormat, drwav_uint64 totalPCMFrameCount, const drwav_allocation_callbacks* pAllocationCallbacks); +#endif /* DR_WAV_NO_STDIO */ + +/* +Helper for initializing a loader from a pre-allocated memory buffer. + +This does not create a copy of the data. It is up to the application to ensure the buffer remains valid for +the lifetime of the drwav object. + +The buffer should contain the contents of the entire wave file, not just the sample data. +*/ +DRWAV_API drwav_bool32 drwav_init_memory(drwav* pWav, const void* data, size_t dataSize, const drwav_allocation_callbacks* pAllocationCallbacks); +DRWAV_API drwav_bool32 drwav_init_memory_ex(drwav* pWav, const void* data, size_t dataSize, drwav_chunk_proc onChunk, void* pChunkUserData, drwav_uint32 flags, const drwav_allocation_callbacks* pAllocationCallbacks); + +/* +Helper for initializing a writer which outputs data to a memory buffer. + +dr_wav will manage the memory allocations, however it is up to the caller to free the data with drwav_free(). + +The buffer will remain allocated even after drwav_uninit() is called. The buffer should not be considered valid +until after drwav_uninit() has been called. +*/ +DRWAV_API drwav_bool32 drwav_init_memory_write(drwav* pWav, void** ppData, size_t* pDataSize, const drwav_data_format* pFormat, const drwav_allocation_callbacks* pAllocationCallbacks); +DRWAV_API drwav_bool32 drwav_init_memory_write_sequential(drwav* pWav, void** ppData, size_t* pDataSize, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount, const drwav_allocation_callbacks* pAllocationCallbacks); +DRWAV_API drwav_bool32 drwav_init_memory_write_sequential_pcm_frames(drwav* pWav, void** ppData, size_t* pDataSize, const drwav_data_format* pFormat, drwav_uint64 totalPCMFrameCount, const drwav_allocation_callbacks* pAllocationCallbacks); + + +#ifndef DR_WAV_NO_CONVERSION_API +/* +Opens and reads an entire wav file in a single operation. + +The return value is a heap-allocated buffer containing the audio data. Use drwav_free() to free the buffer. +*/ +DRWAV_API drwav_int16* drwav_open_and_read_pcm_frames_s16(drwav_read_proc onRead, drwav_seek_proc onSeek, void* pUserData, unsigned int* channelsOut, unsigned int* sampleRateOut, drwav_uint64* totalFrameCountOut, const drwav_allocation_callbacks* pAllocationCallbacks); +DRWAV_API float* drwav_open_and_read_pcm_frames_f32(drwav_read_proc onRead, drwav_seek_proc onSeek, void* pUserData, unsigned int* channelsOut, unsigned int* sampleRateOut, drwav_uint64* totalFrameCountOut, const drwav_allocation_callbacks* pAllocationCallbacks); +DRWAV_API drwav_int32* drwav_open_and_read_pcm_frames_s32(drwav_read_proc onRead, drwav_seek_proc onSeek, void* pUserData, unsigned int* channelsOut, unsigned int* sampleRateOut, drwav_uint64* totalFrameCountOut, const drwav_allocation_callbacks* pAllocationCallbacks); +#ifndef DR_WAV_NO_STDIO +/* +Opens and decodes an entire wav file in a single operation. + +The return value is a heap-allocated buffer containing the audio data. Use drwav_free() to free the buffer. +*/ +DRWAV_API drwav_int16* drwav_open_file_and_read_pcm_frames_s16(const char* filename, unsigned int* channelsOut, unsigned int* sampleRateOut, drwav_uint64* totalFrameCountOut, const drwav_allocation_callbacks* pAllocationCallbacks); +DRWAV_API float* drwav_open_file_and_read_pcm_frames_f32(const char* filename, unsigned int* channelsOut, unsigned int* sampleRateOut, drwav_uint64* totalFrameCountOut, const drwav_allocation_callbacks* pAllocationCallbacks); +DRWAV_API drwav_int32* drwav_open_file_and_read_pcm_frames_s32(const char* filename, unsigned int* channelsOut, unsigned int* sampleRateOut, drwav_uint64* totalFrameCountOut, const drwav_allocation_callbacks* pAllocationCallbacks); +DRWAV_API drwav_int16* drwav_open_file_and_read_pcm_frames_s16_w(const wchar_t* filename, unsigned int* channelsOut, unsigned int* sampleRateOut, drwav_uint64* totalFrameCountOut, const drwav_allocation_callbacks* pAllocationCallbacks); +DRWAV_API float* drwav_open_file_and_read_pcm_frames_f32_w(const wchar_t* filename, unsigned int* channelsOut, unsigned int* sampleRateOut, drwav_uint64* totalFrameCountOut, const drwav_allocation_callbacks* pAllocationCallbacks); +DRWAV_API drwav_int32* drwav_open_file_and_read_pcm_frames_s32_w(const wchar_t* filename, unsigned int* channelsOut, unsigned int* sampleRateOut, drwav_uint64* totalFrameCountOut, const drwav_allocation_callbacks* pAllocationCallbacks); +#endif +/* +Opens and decodes an entire wav file from a block of memory in a single operation. + +The return value is a heap-allocated buffer containing the audio data. Use drwav_free() to free the buffer. +*/ +DRWAV_API drwav_int16* drwav_open_memory_and_read_pcm_frames_s16(const void* data, size_t dataSize, unsigned int* channelsOut, unsigned int* sampleRateOut, drwav_uint64* totalFrameCountOut, const drwav_allocation_callbacks* pAllocationCallbacks); +DRWAV_API float* drwav_open_memory_and_read_pcm_frames_f32(const void* data, size_t dataSize, unsigned int* channelsOut, unsigned int* sampleRateOut, drwav_uint64* totalFrameCountOut, const drwav_allocation_callbacks* pAllocationCallbacks); +DRWAV_API drwav_int32* drwav_open_memory_and_read_pcm_frames_s32(const void* data, size_t dataSize, unsigned int* channelsOut, unsigned int* sampleRateOut, drwav_uint64* totalFrameCountOut, const drwav_allocation_callbacks* pAllocationCallbacks); +#endif + +/* Frees data that was allocated internally by dr_wav. */ +DRWAV_API void drwav_free(void* p, const drwav_allocation_callbacks* pAllocationCallbacks); + +/* Converts bytes from a wav stream to a sized type of native endian. */ +DRWAV_API drwav_uint16 drwav_bytes_to_u16(const drwav_uint8* data); +DRWAV_API drwav_int16 drwav_bytes_to_s16(const drwav_uint8* data); +DRWAV_API drwav_uint32 drwav_bytes_to_u32(const drwav_uint8* data); +DRWAV_API drwav_int32 drwav_bytes_to_s32(const drwav_uint8* data); +DRWAV_API drwav_uint64 drwav_bytes_to_u64(const drwav_uint8* data); +DRWAV_API drwav_int64 drwav_bytes_to_s64(const drwav_uint8* data); + +/* Compares a GUID for the purpose of checking the type of a Wave64 chunk. */ +DRWAV_API drwav_bool32 drwav_guid_equal(const drwav_uint8 a[16], const drwav_uint8 b[16]); + +/* Compares a four-character-code for the purpose of checking the type of a RIFF chunk. */ +DRWAV_API drwav_bool32 drwav_fourcc_equal(const drwav_uint8* a, const char* b); + +#ifdef __cplusplus +} +#endif +#endif /* dr_wav_h */ + + +/************************************************************************************************************************************************************ + ************************************************************************************************************************************************************ + + IMPLEMENTATION + + ************************************************************************************************************************************************************ + ************************************************************************************************************************************************************/ +#if defined(DR_WAV_IMPLEMENTATION) || defined(DRWAV_IMPLEMENTATION) +#ifndef dr_wav_c +#define dr_wav_c + +#include +#include /* For memcpy(), memset() */ +#include /* For INT_MAX */ + +#ifndef DR_WAV_NO_STDIO +#include +#include +#endif + +/* Standard library stuff. */ +#ifndef DRWAV_ASSERT +#include +#define DRWAV_ASSERT(expression) assert(expression) +#endif +#ifndef DRWAV_MALLOC +#define DRWAV_MALLOC(sz) malloc((sz)) +#endif +#ifndef DRWAV_REALLOC +#define DRWAV_REALLOC(p, sz) realloc((p), (sz)) +#endif +#ifndef DRWAV_FREE +#define DRWAV_FREE(p) free((p)) +#endif +#ifndef DRWAV_COPY_MEMORY +#define DRWAV_COPY_MEMORY(dst, src, sz) memcpy((dst), (src), (sz)) +#endif +#ifndef DRWAV_ZERO_MEMORY +#define DRWAV_ZERO_MEMORY(p, sz) memset((p), 0, (sz)) +#endif +#ifndef DRWAV_ZERO_OBJECT +#define DRWAV_ZERO_OBJECT(p) DRWAV_ZERO_MEMORY((p), sizeof(*p)) +#endif + +#define drwav_countof(x) (sizeof(x) / sizeof(x[0])) +#define drwav_align(x, a) ((((x) + (a) - 1) / (a)) * (a)) +#define drwav_min(a, b) (((a) < (b)) ? (a) : (b)) +#define drwav_max(a, b) (((a) > (b)) ? (a) : (b)) +#define drwav_clamp(x, lo, hi) (drwav_max((lo), drwav_min((hi), (x)))) + +#define DRWAV_MAX_SIMD_VECTOR_SIZE 64 /* 64 for AVX-512 in the future. */ + +/* CPU architecture. */ +#if defined(__x86_64__) || defined(_M_X64) + #define DRWAV_X64 +#elif defined(__i386) || defined(_M_IX86) + #define DRWAV_X86 +#elif defined(__arm__) || defined(_M_ARM) + #define DRWAV_ARM +#endif + +#ifdef _MSC_VER + #define DRWAV_INLINE __forceinline +#elif defined(__GNUC__) + /* + I've had a bug report where GCC is emitting warnings about functions possibly not being inlineable. This warning happens when + the __attribute__((always_inline)) attribute is defined without an "inline" statement. I think therefore there must be some + case where "__inline__" is not always defined, thus the compiler emitting these warnings. When using -std=c89 or -ansi on the + command line, we cannot use the "inline" keyword and instead need to use "__inline__". In an attempt to work around this issue + I am using "__inline__" only when we're compiling in strict ANSI mode. + */ + #if defined(__STRICT_ANSI__) + #define DRWAV_INLINE __inline__ __attribute__((always_inline)) + #else + #define DRWAV_INLINE inline __attribute__((always_inline)) + #endif +#elif defined(__WATCOMC__) + #define DRWAV_INLINE __inline +#else + #define DRWAV_INLINE +#endif + +#if defined(SIZE_MAX) + #define DRWAV_SIZE_MAX SIZE_MAX +#else + #if defined(_WIN64) || defined(_LP64) || defined(__LP64__) + #define DRWAV_SIZE_MAX ((drwav_uint64)0xFFFFFFFFFFFFFFFF) + #else + #define DRWAV_SIZE_MAX 0xFFFFFFFF + #endif +#endif + +#if defined(_MSC_VER) && _MSC_VER >= 1400 + #define DRWAV_HAS_BYTESWAP16_INTRINSIC + #define DRWAV_HAS_BYTESWAP32_INTRINSIC + #define DRWAV_HAS_BYTESWAP64_INTRINSIC +#elif defined(__clang__) + #if defined(__has_builtin) + #if __has_builtin(__builtin_bswap16) + #define DRWAV_HAS_BYTESWAP16_INTRINSIC + #endif + #if __has_builtin(__builtin_bswap32) + #define DRWAV_HAS_BYTESWAP32_INTRINSIC + #endif + #if __has_builtin(__builtin_bswap64) + #define DRWAV_HAS_BYTESWAP64_INTRINSIC + #endif + #endif +#elif defined(__GNUC__) + #if ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + #define DRWAV_HAS_BYTESWAP32_INTRINSIC + #define DRWAV_HAS_BYTESWAP64_INTRINSIC + #endif + #if ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)) + #define DRWAV_HAS_BYTESWAP16_INTRINSIC + #endif +#endif + +DRWAV_API void drwav_version(drwav_uint32* pMajor, drwav_uint32* pMinor, drwav_uint32* pRevision) +{ + if (pMajor) { + *pMajor = DRWAV_VERSION_MAJOR; + } + + if (pMinor) { + *pMinor = DRWAV_VERSION_MINOR; + } + + if (pRevision) { + *pRevision = DRWAV_VERSION_REVISION; + } +} + +DRWAV_API const char* drwav_version_string(void) +{ + return DRWAV_VERSION_STRING; +} + +/* +These limits are used for basic validation when initializing the decoder. If you exceed these limits, first of all: what on Earth are +you doing?! (Let me know, I'd be curious!) Second, you can adjust these by #define-ing them before the dr_wav implementation. +*/ +#ifndef DRWAV_MAX_SAMPLE_RATE +#define DRWAV_MAX_SAMPLE_RATE 384000 +#endif +#ifndef DRWAV_MAX_CHANNELS +#define DRWAV_MAX_CHANNELS 256 +#endif +#ifndef DRWAV_MAX_BITS_PER_SAMPLE +#define DRWAV_MAX_BITS_PER_SAMPLE 64 +#endif + +static const drwav_uint8 drwavGUID_W64_RIFF[16] = {0x72,0x69,0x66,0x66, 0x2E,0x91, 0xCF,0x11, 0xA5,0xD6, 0x28,0xDB,0x04,0xC1,0x00,0x00}; /* 66666972-912E-11CF-A5D6-28DB04C10000 */ +static const drwav_uint8 drwavGUID_W64_WAVE[16] = {0x77,0x61,0x76,0x65, 0xF3,0xAC, 0xD3,0x11, 0x8C,0xD1, 0x00,0xC0,0x4F,0x8E,0xDB,0x8A}; /* 65766177-ACF3-11D3-8CD1-00C04F8EDB8A */ +/*static const drwav_uint8 drwavGUID_W64_JUNK[16] = {0x6A,0x75,0x6E,0x6B, 0xF3,0xAC, 0xD3,0x11, 0x8C,0xD1, 0x00,0xC0,0x4F,0x8E,0xDB,0x8A};*/ /* 6B6E756A-ACF3-11D3-8CD1-00C04F8EDB8A */ +static const drwav_uint8 drwavGUID_W64_FMT [16] = {0x66,0x6D,0x74,0x20, 0xF3,0xAC, 0xD3,0x11, 0x8C,0xD1, 0x00,0xC0,0x4F,0x8E,0xDB,0x8A}; /* 20746D66-ACF3-11D3-8CD1-00C04F8EDB8A */ +static const drwav_uint8 drwavGUID_W64_FACT[16] = {0x66,0x61,0x63,0x74, 0xF3,0xAC, 0xD3,0x11, 0x8C,0xD1, 0x00,0xC0,0x4F,0x8E,0xDB,0x8A}; /* 74636166-ACF3-11D3-8CD1-00C04F8EDB8A */ +static const drwav_uint8 drwavGUID_W64_DATA[16] = {0x64,0x61,0x74,0x61, 0xF3,0xAC, 0xD3,0x11, 0x8C,0xD1, 0x00,0xC0,0x4F,0x8E,0xDB,0x8A}; /* 61746164-ACF3-11D3-8CD1-00C04F8EDB8A */ +static const drwav_uint8 drwavGUID_W64_SMPL[16] = {0x73,0x6D,0x70,0x6C, 0xF3,0xAC, 0xD3,0x11, 0x8C,0xD1, 0x00,0xC0,0x4F,0x8E,0xDB,0x8A}; /* 6C706D73-ACF3-11D3-8CD1-00C04F8EDB8A */ + +static DRWAV_INLINE drwav_bool32 drwav__guid_equal(const drwav_uint8 a[16], const drwav_uint8 b[16]) +{ + int i; + for (i = 0; i < 16; i += 1) { + if (a[i] != b[i]) { + return DRWAV_FALSE; + } + } + + return DRWAV_TRUE; +} + +static DRWAV_INLINE drwav_bool32 drwav__fourcc_equal(const drwav_uint8* a, const char* b) +{ + return + a[0] == b[0] && + a[1] == b[1] && + a[2] == b[2] && + a[3] == b[3]; +} + + + +static DRWAV_INLINE int drwav__is_little_endian(void) +{ +#if defined(DRWAV_X86) || defined(DRWAV_X64) + return DRWAV_TRUE; +#elif defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN) && __BYTE_ORDER == __LITTLE_ENDIAN + return DRWAV_TRUE; +#else + int n = 1; + return (*(char*)&n) == 1; +#endif +} + +static DRWAV_INLINE drwav_uint16 drwav__bytes_to_u16(const drwav_uint8* data) +{ + return (data[0] << 0) | (data[1] << 8); +} + +static DRWAV_INLINE drwav_int16 drwav__bytes_to_s16(const drwav_uint8* data) +{ + return (short)drwav__bytes_to_u16(data); +} + +static DRWAV_INLINE drwav_uint32 drwav__bytes_to_u32(const drwav_uint8* data) +{ + return (data[0] << 0) | (data[1] << 8) | (data[2] << 16) | (data[3] << 24); +} + +static DRWAV_INLINE drwav_int32 drwav__bytes_to_s32(const drwav_uint8* data) +{ + return (drwav_int32)drwav__bytes_to_u32(data); +} + +static DRWAV_INLINE drwav_uint64 drwav__bytes_to_u64(const drwav_uint8* data) +{ + return + ((drwav_uint64)data[0] << 0) | ((drwav_uint64)data[1] << 8) | ((drwav_uint64)data[2] << 16) | ((drwav_uint64)data[3] << 24) | + ((drwav_uint64)data[4] << 32) | ((drwav_uint64)data[5] << 40) | ((drwav_uint64)data[6] << 48) | ((drwav_uint64)data[7] << 56); +} + +static DRWAV_INLINE drwav_int64 drwav__bytes_to_s64(const drwav_uint8* data) +{ + return (drwav_int64)drwav__bytes_to_u64(data); +} + +static DRWAV_INLINE void drwav__bytes_to_guid(const drwav_uint8* data, drwav_uint8* guid) +{ + int i; + for (i = 0; i < 16; ++i) { + guid[i] = data[i]; + } +} + + +static DRWAV_INLINE drwav_uint16 drwav__bswap16(drwav_uint16 n) +{ +#ifdef DRWAV_HAS_BYTESWAP16_INTRINSIC + #if defined(_MSC_VER) + return _byteswap_ushort(n); + #elif defined(__GNUC__) || defined(__clang__) + return __builtin_bswap16(n); + #else + #error "This compiler does not support the byte swap intrinsic." + #endif +#else + return ((n & 0xFF00) >> 8) | + ((n & 0x00FF) << 8); +#endif +} + +static DRWAV_INLINE drwav_uint32 drwav__bswap32(drwav_uint32 n) +{ +#ifdef DRWAV_HAS_BYTESWAP32_INTRINSIC + #if defined(_MSC_VER) + return _byteswap_ulong(n); + #elif defined(__GNUC__) || defined(__clang__) + #if defined(DRWAV_ARM) && (defined(__ARM_ARCH) && __ARM_ARCH >= 6) && !defined(DRWAV_64BIT) /* <-- 64-bit inline assembly has not been tested, so disabling for now. */ + /* Inline assembly optimized implementation for ARM. In my testing, GCC does not generate optimized code with __builtin_bswap32(). */ + drwav_uint32 r; + __asm__ __volatile__ ( + #if defined(DRWAV_64BIT) + "rev %w[out], %w[in]" : [out]"=r"(r) : [in]"r"(n) /* <-- This is untested. If someone in the community could test this, that would be appreciated! */ + #else + "rev %[out], %[in]" : [out]"=r"(r) : [in]"r"(n) + #endif + ); + return r; + #else + return __builtin_bswap32(n); + #endif + #else + #error "This compiler does not support the byte swap intrinsic." + #endif +#else + return ((n & 0xFF000000) >> 24) | + ((n & 0x00FF0000) >> 8) | + ((n & 0x0000FF00) << 8) | + ((n & 0x000000FF) << 24); +#endif +} + +static DRWAV_INLINE drwav_uint64 drwav__bswap64(drwav_uint64 n) +{ +#ifdef DRWAV_HAS_BYTESWAP64_INTRINSIC + #if defined(_MSC_VER) + return _byteswap_uint64(n); + #elif defined(__GNUC__) || defined(__clang__) + return __builtin_bswap64(n); + #else + #error "This compiler does not support the byte swap intrinsic." + #endif +#else + /* Weird "<< 32" bitshift is required for C89 because it doesn't support 64-bit constants. Should be optimized out by a good compiler. */ + return ((n & ((drwav_uint64)0xFF000000 << 32)) >> 56) | + ((n & ((drwav_uint64)0x00FF0000 << 32)) >> 40) | + ((n & ((drwav_uint64)0x0000FF00 << 32)) >> 24) | + ((n & ((drwav_uint64)0x000000FF << 32)) >> 8) | + ((n & ((drwav_uint64)0xFF000000 )) << 8) | + ((n & ((drwav_uint64)0x00FF0000 )) << 24) | + ((n & ((drwav_uint64)0x0000FF00 )) << 40) | + ((n & ((drwav_uint64)0x000000FF )) << 56); +#endif +} + + +static DRWAV_INLINE drwav_int16 drwav__bswap_s16(drwav_int16 n) +{ + return (drwav_int16)drwav__bswap16((drwav_uint16)n); +} + +static DRWAV_INLINE void drwav__bswap_samples_s16(drwav_int16* pSamples, drwav_uint64 sampleCount) +{ + drwav_uint64 iSample; + for (iSample = 0; iSample < sampleCount; iSample += 1) { + pSamples[iSample] = drwav__bswap_s16(pSamples[iSample]); + } +} + + +static DRWAV_INLINE void drwav__bswap_s24(drwav_uint8* p) +{ + drwav_uint8 t; + t = p[0]; + p[0] = p[2]; + p[2] = t; +} + +static DRWAV_INLINE void drwav__bswap_samples_s24(drwav_uint8* pSamples, drwav_uint64 sampleCount) +{ + drwav_uint64 iSample; + for (iSample = 0; iSample < sampleCount; iSample += 1) { + drwav_uint8* pSample = pSamples + (iSample*3); + drwav__bswap_s24(pSample); + } +} + + +static DRWAV_INLINE drwav_int32 drwav__bswap_s32(drwav_int32 n) +{ + return (drwav_int32)drwav__bswap32((drwav_uint32)n); +} + +static DRWAV_INLINE void drwav__bswap_samples_s32(drwav_int32* pSamples, drwav_uint64 sampleCount) +{ + drwav_uint64 iSample; + for (iSample = 0; iSample < sampleCount; iSample += 1) { + pSamples[iSample] = drwav__bswap_s32(pSamples[iSample]); + } +} + + +static DRWAV_INLINE float drwav__bswap_f32(float n) +{ + union { + drwav_uint32 i; + float f; + } x; + x.f = n; + x.i = drwav__bswap32(x.i); + + return x.f; +} + +static DRWAV_INLINE void drwav__bswap_samples_f32(float* pSamples, drwav_uint64 sampleCount) +{ + drwav_uint64 iSample; + for (iSample = 0; iSample < sampleCount; iSample += 1) { + pSamples[iSample] = drwav__bswap_f32(pSamples[iSample]); + } +} + + +static DRWAV_INLINE double drwav__bswap_f64(double n) +{ + union { + drwav_uint64 i; + double f; + } x; + x.f = n; + x.i = drwav__bswap64(x.i); + + return x.f; +} + +static DRWAV_INLINE void drwav__bswap_samples_f64(double* pSamples, drwav_uint64 sampleCount) +{ + drwav_uint64 iSample; + for (iSample = 0; iSample < sampleCount; iSample += 1) { + pSamples[iSample] = drwav__bswap_f64(pSamples[iSample]); + } +} + + +static DRWAV_INLINE void drwav__bswap_samples_pcm(void* pSamples, drwav_uint64 sampleCount, drwav_uint32 bytesPerSample) +{ + /* Assumes integer PCM. Floating point PCM is done in drwav__bswap_samples_ieee(). */ + switch (bytesPerSample) + { + case 2: /* s16, s12 (loosely packed) */ + { + drwav__bswap_samples_s16((drwav_int16*)pSamples, sampleCount); + } break; + case 3: /* s24 */ + { + drwav__bswap_samples_s24((drwav_uint8*)pSamples, sampleCount); + } break; + case 4: /* s32 */ + { + drwav__bswap_samples_s32((drwav_int32*)pSamples, sampleCount); + } break; + default: + { + /* Unsupported format. */ + DRWAV_ASSERT(DRWAV_FALSE); + } break; + } +} + +static DRWAV_INLINE void drwav__bswap_samples_ieee(void* pSamples, drwav_uint64 sampleCount, drwav_uint32 bytesPerSample) +{ + switch (bytesPerSample) + { + #if 0 /* Contributions welcome for f16 support. */ + case 2: /* f16 */ + { + drwav__bswap_samples_f16((drwav_float16*)pSamples, sampleCount); + } break; + #endif + case 4: /* f32 */ + { + drwav__bswap_samples_f32((float*)pSamples, sampleCount); + } break; + case 8: /* f64 */ + { + drwav__bswap_samples_f64((double*)pSamples, sampleCount); + } break; + default: + { + /* Unsupported format. */ + DRWAV_ASSERT(DRWAV_FALSE); + } break; + } +} + +static DRWAV_INLINE void drwav__bswap_samples(void* pSamples, drwav_uint64 sampleCount, drwav_uint32 bytesPerSample, drwav_uint16 format) +{ + switch (format) + { + case DR_WAVE_FORMAT_PCM: + { + drwav__bswap_samples_pcm(pSamples, sampleCount, bytesPerSample); + } break; + + case DR_WAVE_FORMAT_IEEE_FLOAT: + { + drwav__bswap_samples_ieee(pSamples, sampleCount, bytesPerSample); + } break; + + case DR_WAVE_FORMAT_ALAW: + case DR_WAVE_FORMAT_MULAW: + { + drwav__bswap_samples_s16((drwav_int16*)pSamples, sampleCount); + } break; + + case DR_WAVE_FORMAT_ADPCM: + case DR_WAVE_FORMAT_DVI_ADPCM: + default: + { + /* Unsupported format. */ + DRWAV_ASSERT(DRWAV_FALSE); + } break; + } +} + + +static void* drwav__malloc_default(size_t sz, void* pUserData) +{ + (void)pUserData; + return DRWAV_MALLOC(sz); +} + +static void* drwav__realloc_default(void* p, size_t sz, void* pUserData) +{ + (void)pUserData; + return DRWAV_REALLOC(p, sz); +} + +static void drwav__free_default(void* p, void* pUserData) +{ + (void)pUserData; + DRWAV_FREE(p); +} + + +static void* drwav__malloc_from_callbacks(size_t sz, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + if (pAllocationCallbacks == NULL) { + return NULL; + } + + if (pAllocationCallbacks->onMalloc != NULL) { + return pAllocationCallbacks->onMalloc(sz, pAllocationCallbacks->pUserData); + } + + /* Try using realloc(). */ + if (pAllocationCallbacks->onRealloc != NULL) { + return pAllocationCallbacks->onRealloc(NULL, sz, pAllocationCallbacks->pUserData); + } + + return NULL; +} + +static void* drwav__realloc_from_callbacks(void* p, size_t szNew, size_t szOld, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + if (pAllocationCallbacks == NULL) { + return NULL; + } + + if (pAllocationCallbacks->onRealloc != NULL) { + return pAllocationCallbacks->onRealloc(p, szNew, pAllocationCallbacks->pUserData); + } + + /* Try emulating realloc() in terms of malloc()/free(). */ + if (pAllocationCallbacks->onMalloc != NULL && pAllocationCallbacks->onFree != NULL) { + void* p2; + + p2 = pAllocationCallbacks->onMalloc(szNew, pAllocationCallbacks->pUserData); + if (p2 == NULL) { + return NULL; + } + + if (p != NULL) { + DRWAV_COPY_MEMORY(p2, p, szOld); + pAllocationCallbacks->onFree(p, pAllocationCallbacks->pUserData); + } + + return p2; + } + + return NULL; +} + +static void drwav__free_from_callbacks(void* p, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + if (p == NULL || pAllocationCallbacks == NULL) { + return; + } + + if (pAllocationCallbacks->onFree != NULL) { + pAllocationCallbacks->onFree(p, pAllocationCallbacks->pUserData); + } +} + + +static drwav_allocation_callbacks drwav_copy_allocation_callbacks_or_defaults(const drwav_allocation_callbacks* pAllocationCallbacks) +{ + if (pAllocationCallbacks != NULL) { + /* Copy. */ + return *pAllocationCallbacks; + } else { + /* Defaults. */ + drwav_allocation_callbacks allocationCallbacks; + allocationCallbacks.pUserData = NULL; + allocationCallbacks.onMalloc = drwav__malloc_default; + allocationCallbacks.onRealloc = drwav__realloc_default; + allocationCallbacks.onFree = drwav__free_default; + return allocationCallbacks; + } +} + + +static DRWAV_INLINE drwav_bool32 drwav__is_compressed_format_tag(drwav_uint16 formatTag) +{ + return + formatTag == DR_WAVE_FORMAT_ADPCM || + formatTag == DR_WAVE_FORMAT_DVI_ADPCM; +} + +static unsigned int drwav__chunk_padding_size_riff(drwav_uint64 chunkSize) +{ + return (unsigned int)(chunkSize % 2); +} + +static unsigned int drwav__chunk_padding_size_w64(drwav_uint64 chunkSize) +{ + return (unsigned int)(chunkSize % 8); +} + +static drwav_uint64 drwav_read_pcm_frames_s16__msadpcm(drwav* pWav, drwav_uint64 samplesToRead, drwav_int16* pBufferOut); +static drwav_uint64 drwav_read_pcm_frames_s16__ima(drwav* pWav, drwav_uint64 samplesToRead, drwav_int16* pBufferOut); +static drwav_bool32 drwav_init_write__internal(drwav* pWav, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount); + +static drwav_result drwav__read_chunk_header(drwav_read_proc onRead, void* pUserData, drwav_container container, drwav_uint64* pRunningBytesReadOut, drwav_chunk_header* pHeaderOut) +{ + if (container == drwav_container_riff || container == drwav_container_rf64) { + drwav_uint8 sizeInBytes[4]; + + if (onRead(pUserData, pHeaderOut->id.fourcc, 4) != 4) { + return DRWAV_AT_END; + } + + if (onRead(pUserData, sizeInBytes, 4) != 4) { + return DRWAV_INVALID_FILE; + } + + pHeaderOut->sizeInBytes = drwav__bytes_to_u32(sizeInBytes); + pHeaderOut->paddingSize = drwav__chunk_padding_size_riff(pHeaderOut->sizeInBytes); + *pRunningBytesReadOut += 8; + } else { + drwav_uint8 sizeInBytes[8]; + + if (onRead(pUserData, pHeaderOut->id.guid, 16) != 16) { + return DRWAV_AT_END; + } + + if (onRead(pUserData, sizeInBytes, 8) != 8) { + return DRWAV_INVALID_FILE; + } + + pHeaderOut->sizeInBytes = drwav__bytes_to_u64(sizeInBytes) - 24; /* <-- Subtract 24 because w64 includes the size of the header. */ + pHeaderOut->paddingSize = drwav__chunk_padding_size_w64(pHeaderOut->sizeInBytes); + *pRunningBytesReadOut += 24; + } + + return DRWAV_SUCCESS; +} + +static drwav_bool32 drwav__seek_forward(drwav_seek_proc onSeek, drwav_uint64 offset, void* pUserData) +{ + drwav_uint64 bytesRemainingToSeek = offset; + while (bytesRemainingToSeek > 0) { + if (bytesRemainingToSeek > 0x7FFFFFFF) { + if (!onSeek(pUserData, 0x7FFFFFFF, drwav_seek_origin_current)) { + return DRWAV_FALSE; + } + bytesRemainingToSeek -= 0x7FFFFFFF; + } else { + if (!onSeek(pUserData, (int)bytesRemainingToSeek, drwav_seek_origin_current)) { + return DRWAV_FALSE; + } + bytesRemainingToSeek = 0; + } + } + + return DRWAV_TRUE; +} + +static drwav_bool32 drwav__seek_from_start(drwav_seek_proc onSeek, drwav_uint64 offset, void* pUserData) +{ + if (offset <= 0x7FFFFFFF) { + return onSeek(pUserData, (int)offset, drwav_seek_origin_start); + } + + /* Larger than 32-bit seek. */ + if (!onSeek(pUserData, 0x7FFFFFFF, drwav_seek_origin_start)) { + return DRWAV_FALSE; + } + offset -= 0x7FFFFFFF; + + for (;;) { + if (offset <= 0x7FFFFFFF) { + return onSeek(pUserData, (int)offset, drwav_seek_origin_current); + } + + if (!onSeek(pUserData, 0x7FFFFFFF, drwav_seek_origin_current)) { + return DRWAV_FALSE; + } + offset -= 0x7FFFFFFF; + } + + /* Should never get here. */ + /*return DRWAV_TRUE; */ +} + + +static drwav_bool32 drwav__read_fmt(drwav_read_proc onRead, drwav_seek_proc onSeek, void* pUserData, drwav_container container, drwav_uint64* pRunningBytesReadOut, drwav_fmt* fmtOut) +{ + drwav_chunk_header header; + drwav_uint8 fmt[16]; + + if (drwav__read_chunk_header(onRead, pUserData, container, pRunningBytesReadOut, &header) != DRWAV_SUCCESS) { + return DRWAV_FALSE; + } + + + /* Skip non-fmt chunks. */ + while (((container == drwav_container_riff || container == drwav_container_rf64) && !drwav__fourcc_equal(header.id.fourcc, "fmt ")) || (container == drwav_container_w64 && !drwav__guid_equal(header.id.guid, drwavGUID_W64_FMT))) { + if (!drwav__seek_forward(onSeek, header.sizeInBytes + header.paddingSize, pUserData)) { + return DRWAV_FALSE; + } + *pRunningBytesReadOut += header.sizeInBytes + header.paddingSize; + + /* Try the next header. */ + if (drwav__read_chunk_header(onRead, pUserData, container, pRunningBytesReadOut, &header) != DRWAV_SUCCESS) { + return DRWAV_FALSE; + } + } + + + /* Validation. */ + if (container == drwav_container_riff || container == drwav_container_rf64) { + if (!drwav__fourcc_equal(header.id.fourcc, "fmt ")) { + return DRWAV_FALSE; + } + } else { + if (!drwav__guid_equal(header.id.guid, drwavGUID_W64_FMT)) { + return DRWAV_FALSE; + } + } + + + if (onRead(pUserData, fmt, sizeof(fmt)) != sizeof(fmt)) { + return DRWAV_FALSE; + } + *pRunningBytesReadOut += sizeof(fmt); + + fmtOut->formatTag = drwav__bytes_to_u16(fmt + 0); + fmtOut->channels = drwav__bytes_to_u16(fmt + 2); + fmtOut->sampleRate = drwav__bytes_to_u32(fmt + 4); + fmtOut->avgBytesPerSec = drwav__bytes_to_u32(fmt + 8); + fmtOut->blockAlign = drwav__bytes_to_u16(fmt + 12); + fmtOut->bitsPerSample = drwav__bytes_to_u16(fmt + 14); + + fmtOut->extendedSize = 0; + fmtOut->validBitsPerSample = 0; + fmtOut->channelMask = 0; + memset(fmtOut->subFormat, 0, sizeof(fmtOut->subFormat)); + + if (header.sizeInBytes > 16) { + drwav_uint8 fmt_cbSize[2]; + int bytesReadSoFar = 0; + + if (onRead(pUserData, fmt_cbSize, sizeof(fmt_cbSize)) != sizeof(fmt_cbSize)) { + return DRWAV_FALSE; /* Expecting more data. */ + } + *pRunningBytesReadOut += sizeof(fmt_cbSize); + + bytesReadSoFar = 18; + + fmtOut->extendedSize = drwav__bytes_to_u16(fmt_cbSize); + if (fmtOut->extendedSize > 0) { + /* Simple validation. */ + if (fmtOut->formatTag == DR_WAVE_FORMAT_EXTENSIBLE) { + if (fmtOut->extendedSize != 22) { + return DRWAV_FALSE; + } + } + + if (fmtOut->formatTag == DR_WAVE_FORMAT_EXTENSIBLE) { + drwav_uint8 fmtext[22]; + if (onRead(pUserData, fmtext, fmtOut->extendedSize) != fmtOut->extendedSize) { + return DRWAV_FALSE; /* Expecting more data. */ + } + + fmtOut->validBitsPerSample = drwav__bytes_to_u16(fmtext + 0); + fmtOut->channelMask = drwav__bytes_to_u32(fmtext + 2); + drwav__bytes_to_guid(fmtext + 6, fmtOut->subFormat); + } else { + if (!onSeek(pUserData, fmtOut->extendedSize, drwav_seek_origin_current)) { + return DRWAV_FALSE; + } + } + *pRunningBytesReadOut += fmtOut->extendedSize; + + bytesReadSoFar += fmtOut->extendedSize; + } + + /* Seek past any leftover bytes. For w64 the leftover will be defined based on the chunk size. */ + if (!onSeek(pUserData, (int)(header.sizeInBytes - bytesReadSoFar), drwav_seek_origin_current)) { + return DRWAV_FALSE; + } + *pRunningBytesReadOut += (header.sizeInBytes - bytesReadSoFar); + } + + if (header.paddingSize > 0) { + if (!onSeek(pUserData, header.paddingSize, drwav_seek_origin_current)) { + return DRWAV_FALSE; + } + *pRunningBytesReadOut += header.paddingSize; + } + + return DRWAV_TRUE; +} + + +static size_t drwav__on_read(drwav_read_proc onRead, void* pUserData, void* pBufferOut, size_t bytesToRead, drwav_uint64* pCursor) +{ + size_t bytesRead; + + DRWAV_ASSERT(onRead != NULL); + DRWAV_ASSERT(pCursor != NULL); + + bytesRead = onRead(pUserData, pBufferOut, bytesToRead); + *pCursor += bytesRead; + return bytesRead; +} + +#if 0 +static drwav_bool32 drwav__on_seek(drwav_seek_proc onSeek, void* pUserData, int offset, drwav_seek_origin origin, drwav_uint64* pCursor) +{ + DRWAV_ASSERT(onSeek != NULL); + DRWAV_ASSERT(pCursor != NULL); + + if (!onSeek(pUserData, offset, origin)) { + return DRWAV_FALSE; + } + + if (origin == drwav_seek_origin_start) { + *pCursor = offset; + } else { + *pCursor += offset; + } + + return DRWAV_TRUE; +} +#endif + + + +static drwav_uint32 drwav_get_bytes_per_pcm_frame(drwav* pWav) +{ + /* + The bytes per frame is a bit ambiguous. It can be either be based on the bits per sample, or the block align. The way I'm doing it here + is that if the bits per sample is a multiple of 8, use floor(bitsPerSample*channels/8), otherwise fall back to the block align. + */ + if ((pWav->bitsPerSample & 0x7) == 0) { + /* Bits per sample is a multiple of 8. */ + return (pWav->bitsPerSample * pWav->fmt.channels) >> 3; + } else { + return pWav->fmt.blockAlign; + } +} + +DRWAV_API drwav_uint16 drwav_fmt_get_format(const drwav_fmt* pFMT) +{ + if (pFMT == NULL) { + return 0; + } + + if (pFMT->formatTag != DR_WAVE_FORMAT_EXTENSIBLE) { + return pFMT->formatTag; + } else { + return drwav__bytes_to_u16(pFMT->subFormat); /* Only the first two bytes are required. */ + } +} + +static drwav_bool32 drwav_preinit(drwav* pWav, drwav_read_proc onRead, drwav_seek_proc onSeek, void* pReadSeekUserData, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + if (pWav == NULL || onRead == NULL || onSeek == NULL) { + return DRWAV_FALSE; + } + + DRWAV_ZERO_MEMORY(pWav, sizeof(*pWav)); + pWav->onRead = onRead; + pWav->onSeek = onSeek; + pWav->pUserData = pReadSeekUserData; + pWav->allocationCallbacks = drwav_copy_allocation_callbacks_or_defaults(pAllocationCallbacks); + + if (pWav->allocationCallbacks.onFree == NULL || (pWav->allocationCallbacks.onMalloc == NULL && pWav->allocationCallbacks.onRealloc == NULL)) { + return DRWAV_FALSE; /* Invalid allocation callbacks. */ + } + + return DRWAV_TRUE; +} + +static drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, void* pChunkUserData, drwav_uint32 flags) +{ + /* This function assumes drwav_preinit() has been called beforehand. */ + + drwav_uint64 cursor; /* <-- Keeps track of the byte position so we can seek to specific locations. */ + drwav_bool32 sequential; + drwav_uint8 riff[4]; + drwav_fmt fmt; + unsigned short translatedFormatTag; + drwav_bool32 foundDataChunk; + drwav_uint64 dataChunkSize = 0; /* <-- Important! Don't explicitly set this to 0 anywhere else. Calculation of the size of the data chunk is performed in different paths depending on the container. */ + drwav_uint64 sampleCountFromFactChunk = 0; /* Same as dataChunkSize - make sure this is the only place this is initialized to 0. */ + drwav_uint64 chunkSize; + + cursor = 0; + sequential = (flags & DRWAV_SEQUENTIAL) != 0; + + /* The first 4 bytes should be the RIFF identifier. */ + if (drwav__on_read(pWav->onRead, pWav->pUserData, riff, sizeof(riff), &cursor) != sizeof(riff)) { + return DRWAV_FALSE; + } + + /* + The first 4 bytes can be used to identify the container. For RIFF files it will start with "RIFF" and for + w64 it will start with "riff". + */ + if (drwav__fourcc_equal(riff, "RIFF")) { + pWav->container = drwav_container_riff; + } else if (drwav__fourcc_equal(riff, "riff")) { + int i; + drwav_uint8 riff2[12]; + + pWav->container = drwav_container_w64; + + /* Check the rest of the GUID for validity. */ + if (drwav__on_read(pWav->onRead, pWav->pUserData, riff2, sizeof(riff2), &cursor) != sizeof(riff2)) { + return DRWAV_FALSE; + } + + for (i = 0; i < 12; ++i) { + if (riff2[i] != drwavGUID_W64_RIFF[i+4]) { + return DRWAV_FALSE; + } + } + } else if (drwav__fourcc_equal(riff, "RF64")) { + pWav->container = drwav_container_rf64; + } else { + return DRWAV_FALSE; /* Unknown or unsupported container. */ + } + + + if (pWav->container == drwav_container_riff || pWav->container == drwav_container_rf64) { + drwav_uint8 chunkSizeBytes[4]; + drwav_uint8 wave[4]; + + /* RIFF/WAVE */ + if (drwav__on_read(pWav->onRead, pWav->pUserData, chunkSizeBytes, sizeof(chunkSizeBytes), &cursor) != sizeof(chunkSizeBytes)) { + return DRWAV_FALSE; + } + + if (pWav->container == drwav_container_riff) { + if (drwav__bytes_to_u32(chunkSizeBytes) < 36) { + return DRWAV_FALSE; /* Chunk size should always be at least 36 bytes. */ + } + } else { + if (drwav__bytes_to_u32(chunkSizeBytes) != 0xFFFFFFFF) { + return DRWAV_FALSE; /* Chunk size should always be set to -1/0xFFFFFFFF for RF64. The actual size is retrieved later. */ + } + } + + if (drwav__on_read(pWav->onRead, pWav->pUserData, wave, sizeof(wave), &cursor) != sizeof(wave)) { + return DRWAV_FALSE; + } + + if (!drwav__fourcc_equal(wave, "WAVE")) { + return DRWAV_FALSE; /* Expecting "WAVE". */ + } + } else { + drwav_uint8 chunkSizeBytes[8]; + drwav_uint8 wave[16]; + + /* W64 */ + if (drwav__on_read(pWav->onRead, pWav->pUserData, chunkSizeBytes, sizeof(chunkSizeBytes), &cursor) != sizeof(chunkSizeBytes)) { + return DRWAV_FALSE; + } + + if (drwav__bytes_to_u64(chunkSizeBytes) < 80) { + return DRWAV_FALSE; + } + + if (drwav__on_read(pWav->onRead, pWav->pUserData, wave, sizeof(wave), &cursor) != sizeof(wave)) { + return DRWAV_FALSE; + } + + if (!drwav__guid_equal(wave, drwavGUID_W64_WAVE)) { + return DRWAV_FALSE; + } + } + + + /* For RF64, the "ds64" chunk must come next, before the "fmt " chunk. */ + if (pWav->container == drwav_container_rf64) { + drwav_uint8 sizeBytes[8]; + drwav_uint64 bytesRemainingInChunk; + drwav_chunk_header header; + drwav_result result = drwav__read_chunk_header(pWav->onRead, pWav->pUserData, pWav->container, &cursor, &header); + if (result != DRWAV_SUCCESS) { + return DRWAV_FALSE; + } + + if (!drwav__fourcc_equal(header.id.fourcc, "ds64")) { + return DRWAV_FALSE; /* Expecting "ds64". */ + } + + bytesRemainingInChunk = header.sizeInBytes + header.paddingSize; + + /* We don't care about the size of the RIFF chunk - skip it. */ + if (!drwav__seek_forward(pWav->onSeek, 8, pWav->pUserData)) { + return DRWAV_FALSE; + } + bytesRemainingInChunk -= 8; + cursor += 8; + + + /* Next 8 bytes is the size of the "data" chunk. */ + if (drwav__on_read(pWav->onRead, pWav->pUserData, sizeBytes, sizeof(sizeBytes), &cursor) != sizeof(sizeBytes)) { + return DRWAV_FALSE; + } + bytesRemainingInChunk -= 8; + dataChunkSize = drwav__bytes_to_u64(sizeBytes); + + + /* Next 8 bytes is the same count which we would usually derived from the FACT chunk if it was available. */ + if (drwav__on_read(pWav->onRead, pWav->pUserData, sizeBytes, sizeof(sizeBytes), &cursor) != sizeof(sizeBytes)) { + return DRWAV_FALSE; + } + bytesRemainingInChunk -= 8; + sampleCountFromFactChunk = drwav__bytes_to_u64(sizeBytes); + + + /* Skip over everything else. */ + if (!drwav__seek_forward(pWav->onSeek, bytesRemainingInChunk, pWav->pUserData)) { + return DRWAV_FALSE; + } + cursor += bytesRemainingInChunk; + } + + + /* The next bytes should be the "fmt " chunk. */ + if (!drwav__read_fmt(pWav->onRead, pWav->onSeek, pWav->pUserData, pWav->container, &cursor, &fmt)) { + return DRWAV_FALSE; /* Failed to read the "fmt " chunk. */ + } + + /* Basic validation. */ + if ((fmt.sampleRate == 0 || fmt.sampleRate > DRWAV_MAX_SAMPLE_RATE) || + (fmt.channels == 0 || fmt.channels > DRWAV_MAX_CHANNELS) || + (fmt.bitsPerSample == 0 || fmt.bitsPerSample > DRWAV_MAX_BITS_PER_SAMPLE) || + fmt.blockAlign == 0) { + return DRWAV_FALSE; /* Probably an invalid WAV file. */ + } + + + /* Translate the internal format. */ + translatedFormatTag = fmt.formatTag; + if (translatedFormatTag == DR_WAVE_FORMAT_EXTENSIBLE) { + translatedFormatTag = drwav__bytes_to_u16(fmt.subFormat + 0); + } + + + /* + We need to enumerate over each chunk for two reasons: + 1) The "data" chunk may not be the next one + 2) We may want to report each chunk back to the client + + In order to correctly report each chunk back to the client we will need to keep looping until the end of the file. + */ + foundDataChunk = DRWAV_FALSE; + + /* The next chunk we care about is the "data" chunk. This is not necessarily the next chunk so we'll need to loop. */ + for (;;) + { + drwav_chunk_header header; + drwav_result result = drwav__read_chunk_header(pWav->onRead, pWav->pUserData, pWav->container, &cursor, &header); + if (result != DRWAV_SUCCESS) { + if (!foundDataChunk) { + return DRWAV_FALSE; + } else { + break; /* Probably at the end of the file. Get out of the loop. */ + } + } + + /* Tell the client about this chunk. */ + if (!sequential && onChunk != NULL) { + drwav_uint64 callbackBytesRead = onChunk(pChunkUserData, pWav->onRead, pWav->onSeek, pWav->pUserData, &header, pWav->container, &fmt); + + /* + dr_wav may need to read the contents of the chunk, so we now need to seek back to the position before + we called the callback. + */ + if (callbackBytesRead > 0) { + if (!drwav__seek_from_start(pWav->onSeek, cursor, pWav->pUserData)) { + return DRWAV_FALSE; + } + } + } + + + if (!foundDataChunk) { + pWav->dataChunkDataPos = cursor; + } + + chunkSize = header.sizeInBytes; + if (pWav->container == drwav_container_riff || pWav->container == drwav_container_rf64) { + if (drwav__fourcc_equal(header.id.fourcc, "data")) { + foundDataChunk = DRWAV_TRUE; + if (pWav->container != drwav_container_rf64) { /* The data chunk size for RF64 will always be set to 0xFFFFFFFF here. It was set to it's true value earlier. */ + dataChunkSize = chunkSize; + } + } + } else { + if (drwav__guid_equal(header.id.guid, drwavGUID_W64_DATA)) { + foundDataChunk = DRWAV_TRUE; + dataChunkSize = chunkSize; + } + } + + /* + If at this point we have found the data chunk and we're running in sequential mode, we need to break out of this loop. The reason for + this is that we would otherwise require a backwards seek which sequential mode forbids. + */ + if (foundDataChunk && sequential) { + break; + } + + /* Optional. Get the total sample count from the FACT chunk. This is useful for compressed formats. */ + if (pWav->container == drwav_container_riff) { + if (drwav__fourcc_equal(header.id.fourcc, "fact")) { + drwav_uint32 sampleCount; + if (drwav__on_read(pWav->onRead, pWav->pUserData, &sampleCount, 4, &cursor) != 4) { + return DRWAV_FALSE; + } + chunkSize -= 4; + + if (!foundDataChunk) { + pWav->dataChunkDataPos = cursor; + } + + /* + The sample count in the "fact" chunk is either unreliable, or I'm not understanding it properly. For now I am only enabling this + for Microsoft ADPCM formats. + */ + if (pWav->translatedFormatTag == DR_WAVE_FORMAT_ADPCM) { + sampleCountFromFactChunk = sampleCount; + } else { + sampleCountFromFactChunk = 0; + } + } + } else if (pWav->container == drwav_container_w64) { + if (drwav__guid_equal(header.id.guid, drwavGUID_W64_FACT)) { + if (drwav__on_read(pWav->onRead, pWav->pUserData, &sampleCountFromFactChunk, 8, &cursor) != 8) { + return DRWAV_FALSE; + } + chunkSize -= 8; + + if (!foundDataChunk) { + pWav->dataChunkDataPos = cursor; + } + } + } else if (pWav->container == drwav_container_rf64) { + /* We retrieved the sample count from the ds64 chunk earlier so no need to do that here. */ + } + + /* "smpl" chunk. */ + if (pWav->container == drwav_container_riff || pWav->container == drwav_container_rf64) { + if (drwav__fourcc_equal(header.id.fourcc, "smpl")) { + drwav_uint8 smplHeaderData[36]; /* 36 = size of the smpl header section, not including the loop data. */ + if (chunkSize >= sizeof(smplHeaderData)) { + drwav_uint64 bytesJustRead = drwav__on_read(pWav->onRead, pWav->pUserData, smplHeaderData, sizeof(smplHeaderData), &cursor); + chunkSize -= bytesJustRead; + + if (bytesJustRead == sizeof(smplHeaderData)) { + drwav_uint32 iLoop; + + pWav->smpl.manufacturer = drwav__bytes_to_u32(smplHeaderData+0); + pWav->smpl.product = drwav__bytes_to_u32(smplHeaderData+4); + pWav->smpl.samplePeriod = drwav__bytes_to_u32(smplHeaderData+8); + pWav->smpl.midiUnityNotes = drwav__bytes_to_u32(smplHeaderData+12); + pWav->smpl.midiPitchFraction = drwav__bytes_to_u32(smplHeaderData+16); + pWav->smpl.smpteFormat = drwav__bytes_to_u32(smplHeaderData+20); + pWav->smpl.smpteOffset = drwav__bytes_to_u32(smplHeaderData+24); + pWav->smpl.numSampleLoops = drwav__bytes_to_u32(smplHeaderData+28); + pWav->smpl.samplerData = drwav__bytes_to_u32(smplHeaderData+32); + + for (iLoop = 0; iLoop < pWav->smpl.numSampleLoops && iLoop < drwav_countof(pWav->smpl.loops); ++iLoop) { + drwav_uint8 smplLoopData[24]; /* 24 = size of a loop section in the smpl chunk. */ + bytesJustRead = drwav__on_read(pWav->onRead, pWav->pUserData, smplLoopData, sizeof(smplLoopData), &cursor); + chunkSize -= bytesJustRead; + + if (bytesJustRead == sizeof(smplLoopData)) { + pWav->smpl.loops[iLoop].cuePointId = drwav__bytes_to_u32(smplLoopData+0); + pWav->smpl.loops[iLoop].type = drwav__bytes_to_u32(smplLoopData+4); + pWav->smpl.loops[iLoop].start = drwav__bytes_to_u32(smplLoopData+8); + pWav->smpl.loops[iLoop].end = drwav__bytes_to_u32(smplLoopData+12); + pWav->smpl.loops[iLoop].fraction = drwav__bytes_to_u32(smplLoopData+16); + pWav->smpl.loops[iLoop].playCount = drwav__bytes_to_u32(smplLoopData+20); + } else { + break; /* Break from the smpl loop for loop. */ + } + } + } + } else { + /* Looks like invalid data. Ignore the chunk. */ + } + } + } else { + if (drwav__guid_equal(header.id.guid, drwavGUID_W64_SMPL)) { + /* + This path will be hit when a W64 WAV file contains a smpl chunk. I don't have a sample file to test this path, so a contribution + is welcome to add support for this. + */ + } + } + + /* Make sure we seek past the padding. */ + chunkSize += header.paddingSize; + if (!drwav__seek_forward(pWav->onSeek, chunkSize, pWav->pUserData)) { + break; + } + cursor += chunkSize; + + if (!foundDataChunk) { + pWav->dataChunkDataPos = cursor; + } + } + + /* If we haven't found a data chunk, return an error. */ + if (!foundDataChunk) { + return DRWAV_FALSE; + } + + /* We may have moved passed the data chunk. If so we need to move back. If running in sequential mode we can assume we are already sitting on the data chunk. */ + if (!sequential) { + if (!drwav__seek_from_start(pWav->onSeek, pWav->dataChunkDataPos, pWav->pUserData)) { + return DRWAV_FALSE; + } + cursor = pWav->dataChunkDataPos; + } + + + /* At this point we should be sitting on the first byte of the raw audio data. */ + + pWav->fmt = fmt; + pWav->sampleRate = fmt.sampleRate; + pWav->channels = fmt.channels; + pWav->bitsPerSample = fmt.bitsPerSample; + pWav->bytesRemaining = dataChunkSize; + pWav->translatedFormatTag = translatedFormatTag; + pWav->dataChunkDataSize = dataChunkSize; + + if (sampleCountFromFactChunk != 0) { + pWav->totalPCMFrameCount = sampleCountFromFactChunk; + } else { + pWav->totalPCMFrameCount = dataChunkSize / drwav_get_bytes_per_pcm_frame(pWav); + + if (pWav->translatedFormatTag == DR_WAVE_FORMAT_ADPCM) { + drwav_uint64 totalBlockHeaderSizeInBytes; + drwav_uint64 blockCount = dataChunkSize / fmt.blockAlign; + + /* Make sure any trailing partial block is accounted for. */ + if ((blockCount * fmt.blockAlign) < dataChunkSize) { + blockCount += 1; + } + + /* We decode two samples per byte. There will be blockCount headers in the data chunk. This is enough to know how to calculate the total PCM frame count. */ + totalBlockHeaderSizeInBytes = blockCount * (6*fmt.channels); + pWav->totalPCMFrameCount = ((dataChunkSize - totalBlockHeaderSizeInBytes) * 2) / fmt.channels; + } + if (pWav->translatedFormatTag == DR_WAVE_FORMAT_DVI_ADPCM) { + drwav_uint64 totalBlockHeaderSizeInBytes; + drwav_uint64 blockCount = dataChunkSize / fmt.blockAlign; + + /* Make sure any trailing partial block is accounted for. */ + if ((blockCount * fmt.blockAlign) < dataChunkSize) { + blockCount += 1; + } + + /* We decode two samples per byte. There will be blockCount headers in the data chunk. This is enough to know how to calculate the total PCM frame count. */ + totalBlockHeaderSizeInBytes = blockCount * (4*fmt.channels); + pWav->totalPCMFrameCount = ((dataChunkSize - totalBlockHeaderSizeInBytes) * 2) / fmt.channels; + + /* The header includes a decoded sample for each channel which acts as the initial predictor sample. */ + pWav->totalPCMFrameCount += blockCount; + } + } + + /* Some formats only support a certain number of channels. */ + if (pWav->translatedFormatTag == DR_WAVE_FORMAT_ADPCM || pWav->translatedFormatTag == DR_WAVE_FORMAT_DVI_ADPCM) { + if (pWav->channels > 2) { + return DRWAV_FALSE; + } + } + +#ifdef DR_WAV_LIBSNDFILE_COMPAT + /* + I use libsndfile as a benchmark for testing, however in the version I'm using (from the Windows installer on the libsndfile website), + it appears the total sample count libsndfile uses for MS-ADPCM is incorrect. It would seem they are computing the total sample count + from the number of blocks, however this results in the inclusion of extra silent samples at the end of the last block. The correct + way to know the total sample count is to inspect the "fact" chunk, which should always be present for compressed formats, and should + always include the sample count. This little block of code below is only used to emulate the libsndfile logic so I can properly run my + correctness tests against libsndfile, and is disabled by default. + */ + if (pWav->translatedFormatTag == DR_WAVE_FORMAT_ADPCM) { + drwav_uint64 blockCount = dataChunkSize / fmt.blockAlign; + pWav->totalPCMFrameCount = (((blockCount * (fmt.blockAlign - (6*pWav->channels))) * 2)) / fmt.channels; /* x2 because two samples per byte. */ + } + if (pWav->translatedFormatTag == DR_WAVE_FORMAT_DVI_ADPCM) { + drwav_uint64 blockCount = dataChunkSize / fmt.blockAlign; + pWav->totalPCMFrameCount = (((blockCount * (fmt.blockAlign - (4*pWav->channels))) * 2) + (blockCount * pWav->channels)) / fmt.channels; + } +#endif + + return DRWAV_TRUE; +} + +DRWAV_API drwav_bool32 drwav_init(drwav* pWav, drwav_read_proc onRead, drwav_seek_proc onSeek, void* pUserData, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + return drwav_init_ex(pWav, onRead, onSeek, NULL, pUserData, NULL, 0, pAllocationCallbacks); +} + +DRWAV_API drwav_bool32 drwav_init_ex(drwav* pWav, drwav_read_proc onRead, drwav_seek_proc onSeek, drwav_chunk_proc onChunk, void* pReadSeekUserData, void* pChunkUserData, drwav_uint32 flags, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + if (!drwav_preinit(pWav, onRead, onSeek, pReadSeekUserData, pAllocationCallbacks)) { + return DRWAV_FALSE; + } + + return drwav_init__internal(pWav, onChunk, pChunkUserData, flags); +} + + +static drwav_uint32 drwav__riff_chunk_size_riff(drwav_uint64 dataChunkSize) +{ + drwav_uint64 chunkSize = 4 + 24 + dataChunkSize + drwav__chunk_padding_size_riff(dataChunkSize); /* 4 = "WAVE". 24 = "fmt " chunk. */ + if (chunkSize > 0xFFFFFFFFUL) { + chunkSize = 0xFFFFFFFFUL; + } + + return (drwav_uint32)chunkSize; /* Safe cast due to the clamp above. */ +} + +static drwav_uint32 drwav__data_chunk_size_riff(drwav_uint64 dataChunkSize) +{ + if (dataChunkSize <= 0xFFFFFFFFUL) { + return (drwav_uint32)dataChunkSize; + } else { + return 0xFFFFFFFFUL; + } +} + +static drwav_uint64 drwav__riff_chunk_size_w64(drwav_uint64 dataChunkSize) +{ + drwav_uint64 dataSubchunkPaddingSize = drwav__chunk_padding_size_w64(dataChunkSize); + + return 80 + 24 + dataChunkSize + dataSubchunkPaddingSize; /* +24 because W64 includes the size of the GUID and size fields. */ +} + +static drwav_uint64 drwav__data_chunk_size_w64(drwav_uint64 dataChunkSize) +{ + return 24 + dataChunkSize; /* +24 because W64 includes the size of the GUID and size fields. */ +} + +static drwav_uint64 drwav__riff_chunk_size_rf64(drwav_uint64 dataChunkSize) +{ + drwav_uint64 chunkSize = 4 + 36 + 24 + dataChunkSize + drwav__chunk_padding_size_riff(dataChunkSize); /* 4 = "WAVE". 36 = "ds64" chunk. 24 = "fmt " chunk. */ + if (chunkSize > 0xFFFFFFFFUL) { + chunkSize = 0xFFFFFFFFUL; + } + + return chunkSize; +} + +static drwav_uint64 drwav__data_chunk_size_rf64(drwav_uint64 dataChunkSize) +{ + return dataChunkSize; +} + + +static size_t drwav__write(drwav* pWav, const void* pData, size_t dataSize) +{ + DRWAV_ASSERT(pWav != NULL); + DRWAV_ASSERT(pWav->onWrite != NULL); + + /* Generic write. Assumes no byte reordering required. */ + return pWav->onWrite(pWav->pUserData, pData, dataSize); +} + +static size_t drwav__write_u16ne_to_le(drwav* pWav, drwav_uint16 value) +{ + DRWAV_ASSERT(pWav != NULL); + DRWAV_ASSERT(pWav->onWrite != NULL); + + if (!drwav__is_little_endian()) { + value = drwav__bswap16(value); + } + + return drwav__write(pWav, &value, 2); +} + +static size_t drwav__write_u32ne_to_le(drwav* pWav, drwav_uint32 value) +{ + DRWAV_ASSERT(pWav != NULL); + DRWAV_ASSERT(pWav->onWrite != NULL); + + if (!drwav__is_little_endian()) { + value = drwav__bswap32(value); + } + + return drwav__write(pWav, &value, 4); +} + +static size_t drwav__write_u64ne_to_le(drwav* pWav, drwav_uint64 value) +{ + DRWAV_ASSERT(pWav != NULL); + DRWAV_ASSERT(pWav->onWrite != NULL); + + if (!drwav__is_little_endian()) { + value = drwav__bswap64(value); + } + + return drwav__write(pWav, &value, 8); +} + + +static drwav_bool32 drwav_preinit_write(drwav* pWav, const drwav_data_format* pFormat, drwav_bool32 isSequential, drwav_write_proc onWrite, drwav_seek_proc onSeek, void* pUserData, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + if (pWav == NULL || onWrite == NULL) { + return DRWAV_FALSE; + } + + if (!isSequential && onSeek == NULL) { + return DRWAV_FALSE; /* <-- onSeek is required when in non-sequential mode. */ + } + + /* Not currently supporting compressed formats. Will need to add support for the "fact" chunk before we enable this. */ + if (pFormat->format == DR_WAVE_FORMAT_EXTENSIBLE) { + return DRWAV_FALSE; + } + if (pFormat->format == DR_WAVE_FORMAT_ADPCM || pFormat->format == DR_WAVE_FORMAT_DVI_ADPCM) { + return DRWAV_FALSE; + } + + DRWAV_ZERO_MEMORY(pWav, sizeof(*pWav)); + pWav->onWrite = onWrite; + pWav->onSeek = onSeek; + pWav->pUserData = pUserData; + pWav->allocationCallbacks = drwav_copy_allocation_callbacks_or_defaults(pAllocationCallbacks); + + if (pWav->allocationCallbacks.onFree == NULL || (pWav->allocationCallbacks.onMalloc == NULL && pWav->allocationCallbacks.onRealloc == NULL)) { + return DRWAV_FALSE; /* Invalid allocation callbacks. */ + } + + pWav->fmt.formatTag = (drwav_uint16)pFormat->format; + pWav->fmt.channels = (drwav_uint16)pFormat->channels; + pWav->fmt.sampleRate = pFormat->sampleRate; + pWav->fmt.avgBytesPerSec = (drwav_uint32)((pFormat->bitsPerSample * pFormat->sampleRate * pFormat->channels) / 8); + pWav->fmt.blockAlign = (drwav_uint16)((pFormat->channels * pFormat->bitsPerSample) / 8); + pWav->fmt.bitsPerSample = (drwav_uint16)pFormat->bitsPerSample; + pWav->fmt.extendedSize = 0; + pWav->isSequentialWrite = isSequential; + + return DRWAV_TRUE; +} + +static drwav_bool32 drwav_init_write__internal(drwav* pWav, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount) +{ + /* The function assumes drwav_preinit_write() was called beforehand. */ + + size_t runningPos = 0; + drwav_uint64 initialDataChunkSize = 0; + drwav_uint64 chunkSizeFMT; + + /* + The initial values for the "RIFF" and "data" chunks depends on whether or not we are initializing in sequential mode or not. In + sequential mode we set this to its final values straight away since they can be calculated from the total sample count. In non- + sequential mode we initialize it all to zero and fill it out in drwav_uninit() using a backwards seek. + */ + if (pWav->isSequentialWrite) { + initialDataChunkSize = (totalSampleCount * pWav->fmt.bitsPerSample) / 8; + + /* + The RIFF container has a limit on the number of samples. drwav is not allowing this. There's no practical limits for Wave64 + so for the sake of simplicity I'm not doing any validation for that. + */ + if (pFormat->container == drwav_container_riff) { + if (initialDataChunkSize > (0xFFFFFFFFUL - 36)) { + return DRWAV_FALSE; /* Not enough room to store every sample. */ + } + } + } + + pWav->dataChunkDataSizeTargetWrite = initialDataChunkSize; + + + /* "RIFF" chunk. */ + if (pFormat->container == drwav_container_riff) { + drwav_uint32 chunkSizeRIFF = 28 + (drwav_uint32)initialDataChunkSize; /* +28 = "WAVE" + [sizeof "fmt " chunk] */ + runningPos += drwav__write(pWav, "RIFF", 4); + runningPos += drwav__write_u32ne_to_le(pWav, chunkSizeRIFF); + runningPos += drwav__write(pWav, "WAVE", 4); + } else if (pFormat->container == drwav_container_w64) { + drwav_uint64 chunkSizeRIFF = 80 + 24 + initialDataChunkSize; /* +24 because W64 includes the size of the GUID and size fields. */ + runningPos += drwav__write(pWav, drwavGUID_W64_RIFF, 16); + runningPos += drwav__write_u64ne_to_le(pWav, chunkSizeRIFF); + runningPos += drwav__write(pWav, drwavGUID_W64_WAVE, 16); + } else if (pFormat->container == drwav_container_rf64) { + runningPos += drwav__write(pWav, "RF64", 4); + runningPos += drwav__write_u32ne_to_le(pWav, 0xFFFFFFFF); /* Always 0xFFFFFFFF for RF64. Set to a proper value in the "ds64" chunk. */ + runningPos += drwav__write(pWav, "WAVE", 4); + } + + + /* "ds64" chunk (RF64 only). */ + if (pFormat->container == drwav_container_rf64) { + drwav_uint32 initialds64ChunkSize = 28; /* 28 = [Size of RIFF (8 bytes)] + [Size of DATA (8 bytes)] + [Sample Count (8 bytes)] + [Table Length (4 bytes)]. Table length always set to 0. */ + drwav_uint64 initialRiffChunkSize = 8 + initialds64ChunkSize + initialDataChunkSize; /* +8 for the ds64 header. */ + + runningPos += drwav__write(pWav, "ds64", 4); + runningPos += drwav__write_u32ne_to_le(pWav, initialds64ChunkSize); /* Size of ds64. */ + runningPos += drwav__write_u64ne_to_le(pWav, initialRiffChunkSize); /* Size of RIFF. Set to true value at the end. */ + runningPos += drwav__write_u64ne_to_le(pWav, initialDataChunkSize); /* Size of DATA. Set to true value at the end. */ + runningPos += drwav__write_u64ne_to_le(pWav, totalSampleCount); /* Sample count. */ + runningPos += drwav__write_u32ne_to_le(pWav, 0); /* Table length. Always set to zero in our case since we're not doing any other chunks than "DATA". */ + } + + + /* "fmt " chunk. */ + if (pFormat->container == drwav_container_riff || pFormat->container == drwav_container_rf64) { + chunkSizeFMT = 16; + runningPos += drwav__write(pWav, "fmt ", 4); + runningPos += drwav__write_u32ne_to_le(pWav, (drwav_uint32)chunkSizeFMT); + } else if (pFormat->container == drwav_container_w64) { + chunkSizeFMT = 40; + runningPos += drwav__write(pWav, drwavGUID_W64_FMT, 16); + runningPos += drwav__write_u64ne_to_le(pWav, chunkSizeFMT); + } + + runningPos += drwav__write_u16ne_to_le(pWav, pWav->fmt.formatTag); + runningPos += drwav__write_u16ne_to_le(pWav, pWav->fmt.channels); + runningPos += drwav__write_u32ne_to_le(pWav, pWav->fmt.sampleRate); + runningPos += drwav__write_u32ne_to_le(pWav, pWav->fmt.avgBytesPerSec); + runningPos += drwav__write_u16ne_to_le(pWav, pWav->fmt.blockAlign); + runningPos += drwav__write_u16ne_to_le(pWav, pWav->fmt.bitsPerSample); + + pWav->dataChunkDataPos = runningPos; + + /* "data" chunk. */ + if (pFormat->container == drwav_container_riff) { + drwav_uint32 chunkSizeDATA = (drwav_uint32)initialDataChunkSize; + runningPos += drwav__write(pWav, "data", 4); + runningPos += drwav__write_u32ne_to_le(pWav, chunkSizeDATA); + } else if (pFormat->container == drwav_container_w64) { + drwav_uint64 chunkSizeDATA = 24 + initialDataChunkSize; /* +24 because W64 includes the size of the GUID and size fields. */ + runningPos += drwav__write(pWav, drwavGUID_W64_DATA, 16); + runningPos += drwav__write_u64ne_to_le(pWav, chunkSizeDATA); + } else if (pFormat->container == drwav_container_rf64) { + runningPos += drwav__write(pWav, "data", 4); + runningPos += drwav__write_u32ne_to_le(pWav, 0xFFFFFFFF); /* Always set to 0xFFFFFFFF for RF64. The true size of the data chunk is specified in the ds64 chunk. */ + } + + /* + The runningPos variable is incremented in the section above but is left unused which is causing some static analysis tools to detect it + as a dead store. I'm leaving this as-is for safety just in case I want to expand this function later to include other tags and want to + keep track of the running position for whatever reason. The line below should silence the static analysis tools. + */ + (void)runningPos; + + /* Set some properties for the client's convenience. */ + pWav->container = pFormat->container; + pWav->channels = (drwav_uint16)pFormat->channels; + pWav->sampleRate = pFormat->sampleRate; + pWav->bitsPerSample = (drwav_uint16)pFormat->bitsPerSample; + pWav->translatedFormatTag = (drwav_uint16)pFormat->format; + + return DRWAV_TRUE; +} + + +DRWAV_API drwav_bool32 drwav_init_write(drwav* pWav, const drwav_data_format* pFormat, drwav_write_proc onWrite, drwav_seek_proc onSeek, void* pUserData, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + if (!drwav_preinit_write(pWav, pFormat, DRWAV_FALSE, onWrite, onSeek, pUserData, pAllocationCallbacks)) { + return DRWAV_FALSE; + } + + return drwav_init_write__internal(pWav, pFormat, 0); /* DRWAV_FALSE = Not Sequential */ +} + +DRWAV_API drwav_bool32 drwav_init_write_sequential(drwav* pWav, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount, drwav_write_proc onWrite, void* pUserData, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + if (!drwav_preinit_write(pWav, pFormat, DRWAV_TRUE, onWrite, NULL, pUserData, pAllocationCallbacks)) { + return DRWAV_FALSE; + } + + return drwav_init_write__internal(pWav, pFormat, totalSampleCount); /* DRWAV_TRUE = Sequential */ +} + +DRWAV_API drwav_bool32 drwav_init_write_sequential_pcm_frames(drwav* pWav, const drwav_data_format* pFormat, drwav_uint64 totalPCMFrameCount, drwav_write_proc onWrite, void* pUserData, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + if (pFormat == NULL) { + return DRWAV_FALSE; + } + + return drwav_init_write_sequential(pWav, pFormat, totalPCMFrameCount*pFormat->channels, onWrite, pUserData, pAllocationCallbacks); +} + +DRWAV_API drwav_uint64 drwav_target_write_size_bytes(const drwav_data_format* pFormat, drwav_uint64 totalSampleCount) +{ + /* Casting totalSampleCount to drwav_int64 for VC6 compatibility. No issues in practice because nobody is going to exhaust the whole 63 bits. */ + drwav_uint64 targetDataSizeBytes = (drwav_uint64)((drwav_int64)totalSampleCount * pFormat->channels * pFormat->bitsPerSample/8.0); + drwav_uint64 riffChunkSizeBytes; + drwav_uint64 fileSizeBytes = 0; + + if (pFormat->container == drwav_container_riff) { + riffChunkSizeBytes = drwav__riff_chunk_size_riff(targetDataSizeBytes); + fileSizeBytes = (8 + riffChunkSizeBytes); /* +8 because WAV doesn't include the size of the ChunkID and ChunkSize fields. */ + } else if (pFormat->container == drwav_container_w64) { + riffChunkSizeBytes = drwav__riff_chunk_size_w64(targetDataSizeBytes); + fileSizeBytes = riffChunkSizeBytes; + } else if (pFormat->container == drwav_container_rf64) { + riffChunkSizeBytes = drwav__riff_chunk_size_rf64(targetDataSizeBytes); + fileSizeBytes = (8 + riffChunkSizeBytes); /* +8 because WAV doesn't include the size of the ChunkID and ChunkSize fields. */ + } + + return fileSizeBytes; +} + + +#ifndef DR_WAV_NO_STDIO + +/* drwav_result_from_errno() is only used for fopen() and wfopen() so putting it inside DR_WAV_NO_STDIO for now. If something else needs this later we can move it out. */ +#include +static drwav_result drwav_result_from_errno(int e) +{ + switch (e) + { + case 0: return DRWAV_SUCCESS; + #ifdef EPERM + case EPERM: return DRWAV_INVALID_OPERATION; + #endif + #ifdef ENOENT + case ENOENT: return DRWAV_DOES_NOT_EXIST; + #endif + #ifdef ESRCH + case ESRCH: return DRWAV_DOES_NOT_EXIST; + #endif + #ifdef EINTR + case EINTR: return DRWAV_INTERRUPT; + #endif + #ifdef EIO + case EIO: return DRWAV_IO_ERROR; + #endif + #ifdef ENXIO + case ENXIO: return DRWAV_DOES_NOT_EXIST; + #endif + #ifdef E2BIG + case E2BIG: return DRWAV_INVALID_ARGS; + #endif + #ifdef ENOEXEC + case ENOEXEC: return DRWAV_INVALID_FILE; + #endif + #ifdef EBADF + case EBADF: return DRWAV_INVALID_FILE; + #endif + #ifdef ECHILD + case ECHILD: return DRWAV_ERROR; + #endif + #ifdef EAGAIN + case EAGAIN: return DRWAV_UNAVAILABLE; + #endif + #ifdef ENOMEM + case ENOMEM: return DRWAV_OUT_OF_MEMORY; + #endif + #ifdef EACCES + case EACCES: return DRWAV_ACCESS_DENIED; + #endif + #ifdef EFAULT + case EFAULT: return DRWAV_BAD_ADDRESS; + #endif + #ifdef ENOTBLK + case ENOTBLK: return DRWAV_ERROR; + #endif + #ifdef EBUSY + case EBUSY: return DRWAV_BUSY; + #endif + #ifdef EEXIST + case EEXIST: return DRWAV_ALREADY_EXISTS; + #endif + #ifdef EXDEV + case EXDEV: return DRWAV_ERROR; + #endif + #ifdef ENODEV + case ENODEV: return DRWAV_DOES_NOT_EXIST; + #endif + #ifdef ENOTDIR + case ENOTDIR: return DRWAV_NOT_DIRECTORY; + #endif + #ifdef EISDIR + case EISDIR: return DRWAV_IS_DIRECTORY; + #endif + #ifdef EINVAL + case EINVAL: return DRWAV_INVALID_ARGS; + #endif + #ifdef ENFILE + case ENFILE: return DRWAV_TOO_MANY_OPEN_FILES; + #endif + #ifdef EMFILE + case EMFILE: return DRWAV_TOO_MANY_OPEN_FILES; + #endif + #ifdef ENOTTY + case ENOTTY: return DRWAV_INVALID_OPERATION; + #endif + #ifdef ETXTBSY + case ETXTBSY: return DRWAV_BUSY; + #endif + #ifdef EFBIG + case EFBIG: return DRWAV_TOO_BIG; + #endif + #ifdef ENOSPC + case ENOSPC: return DRWAV_NO_SPACE; + #endif + #ifdef ESPIPE + case ESPIPE: return DRWAV_BAD_SEEK; + #endif + #ifdef EROFS + case EROFS: return DRWAV_ACCESS_DENIED; + #endif + #ifdef EMLINK + case EMLINK: return DRWAV_TOO_MANY_LINKS; + #endif + #ifdef EPIPE + case EPIPE: return DRWAV_BAD_PIPE; + #endif + #ifdef EDOM + case EDOM: return DRWAV_OUT_OF_RANGE; + #endif + #ifdef ERANGE + case ERANGE: return DRWAV_OUT_OF_RANGE; + #endif + #ifdef EDEADLK + case EDEADLK: return DRWAV_DEADLOCK; + #endif + #ifdef ENAMETOOLONG + case ENAMETOOLONG: return DRWAV_PATH_TOO_LONG; + #endif + #ifdef ENOLCK + case ENOLCK: return DRWAV_ERROR; + #endif + #ifdef ENOSYS + case ENOSYS: return DRWAV_NOT_IMPLEMENTED; + #endif + #ifdef ENOTEMPTY + case ENOTEMPTY: return DRWAV_DIRECTORY_NOT_EMPTY; + #endif + #ifdef ELOOP + case ELOOP: return DRWAV_TOO_MANY_LINKS; + #endif + #ifdef ENOMSG + case ENOMSG: return DRWAV_NO_MESSAGE; + #endif + #ifdef EIDRM + case EIDRM: return DRWAV_ERROR; + #endif + #ifdef ECHRNG + case ECHRNG: return DRWAV_ERROR; + #endif + #ifdef EL2NSYNC + case EL2NSYNC: return DRWAV_ERROR; + #endif + #ifdef EL3HLT + case EL3HLT: return DRWAV_ERROR; + #endif + #ifdef EL3RST + case EL3RST: return DRWAV_ERROR; + #endif + #ifdef ELNRNG + case ELNRNG: return DRWAV_OUT_OF_RANGE; + #endif + #ifdef EUNATCH + case EUNATCH: return DRWAV_ERROR; + #endif + #ifdef ENOCSI + case ENOCSI: return DRWAV_ERROR; + #endif + #ifdef EL2HLT + case EL2HLT: return DRWAV_ERROR; + #endif + #ifdef EBADE + case EBADE: return DRWAV_ERROR; + #endif + #ifdef EBADR + case EBADR: return DRWAV_ERROR; + #endif + #ifdef EXFULL + case EXFULL: return DRWAV_ERROR; + #endif + #ifdef ENOANO + case ENOANO: return DRWAV_ERROR; + #endif + #ifdef EBADRQC + case EBADRQC: return DRWAV_ERROR; + #endif + #ifdef EBADSLT + case EBADSLT: return DRWAV_ERROR; + #endif + #ifdef EBFONT + case EBFONT: return DRWAV_INVALID_FILE; + #endif + #ifdef ENOSTR + case ENOSTR: return DRWAV_ERROR; + #endif + #ifdef ENODATA + case ENODATA: return DRWAV_NO_DATA_AVAILABLE; + #endif + #ifdef ETIME + case ETIME: return DRWAV_TIMEOUT; + #endif + #ifdef ENOSR + case ENOSR: return DRWAV_NO_DATA_AVAILABLE; + #endif + #ifdef ENONET + case ENONET: return DRWAV_NO_NETWORK; + #endif + #ifdef ENOPKG + case ENOPKG: return DRWAV_ERROR; + #endif + #ifdef EREMOTE + case EREMOTE: return DRWAV_ERROR; + #endif + #ifdef ENOLINK + case ENOLINK: return DRWAV_ERROR; + #endif + #ifdef EADV + case EADV: return DRWAV_ERROR; + #endif + #ifdef ESRMNT + case ESRMNT: return DRWAV_ERROR; + #endif + #ifdef ECOMM + case ECOMM: return DRWAV_ERROR; + #endif + #ifdef EPROTO + case EPROTO: return DRWAV_ERROR; + #endif + #ifdef EMULTIHOP + case EMULTIHOP: return DRWAV_ERROR; + #endif + #ifdef EDOTDOT + case EDOTDOT: return DRWAV_ERROR; + #endif + #ifdef EBADMSG + case EBADMSG: return DRWAV_BAD_MESSAGE; + #endif + #ifdef EOVERFLOW + case EOVERFLOW: return DRWAV_TOO_BIG; + #endif + #ifdef ENOTUNIQ + case ENOTUNIQ: return DRWAV_NOT_UNIQUE; + #endif + #ifdef EBADFD + case EBADFD: return DRWAV_ERROR; + #endif + #ifdef EREMCHG + case EREMCHG: return DRWAV_ERROR; + #endif + #ifdef ELIBACC + case ELIBACC: return DRWAV_ACCESS_DENIED; + #endif + #ifdef ELIBBAD + case ELIBBAD: return DRWAV_INVALID_FILE; + #endif + #ifdef ELIBSCN + case ELIBSCN: return DRWAV_INVALID_FILE; + #endif + #ifdef ELIBMAX + case ELIBMAX: return DRWAV_ERROR; + #endif + #ifdef ELIBEXEC + case ELIBEXEC: return DRWAV_ERROR; + #endif + #ifdef EILSEQ + case EILSEQ: return DRWAV_INVALID_DATA; + #endif + #ifdef ERESTART + case ERESTART: return DRWAV_ERROR; + #endif + #ifdef ESTRPIPE + case ESTRPIPE: return DRWAV_ERROR; + #endif + #ifdef EUSERS + case EUSERS: return DRWAV_ERROR; + #endif + #ifdef ENOTSOCK + case ENOTSOCK: return DRWAV_NOT_SOCKET; + #endif + #ifdef EDESTADDRREQ + case EDESTADDRREQ: return DRWAV_NO_ADDRESS; + #endif + #ifdef EMSGSIZE + case EMSGSIZE: return DRWAV_TOO_BIG; + #endif + #ifdef EPROTOTYPE + case EPROTOTYPE: return DRWAV_BAD_PROTOCOL; + #endif + #ifdef ENOPROTOOPT + case ENOPROTOOPT: return DRWAV_PROTOCOL_UNAVAILABLE; + #endif + #ifdef EPROTONOSUPPORT + case EPROTONOSUPPORT: return DRWAV_PROTOCOL_NOT_SUPPORTED; + #endif + #ifdef ESOCKTNOSUPPORT + case ESOCKTNOSUPPORT: return DRWAV_SOCKET_NOT_SUPPORTED; + #endif + #ifdef EOPNOTSUPP + case EOPNOTSUPP: return DRWAV_INVALID_OPERATION; + #endif + #ifdef EPFNOSUPPORT + case EPFNOSUPPORT: return DRWAV_PROTOCOL_FAMILY_NOT_SUPPORTED; + #endif + #ifdef EAFNOSUPPORT + case EAFNOSUPPORT: return DRWAV_ADDRESS_FAMILY_NOT_SUPPORTED; + #endif + #ifdef EADDRINUSE + case EADDRINUSE: return DRWAV_ALREADY_IN_USE; + #endif + #ifdef EADDRNOTAVAIL + case EADDRNOTAVAIL: return DRWAV_ERROR; + #endif + #ifdef ENETDOWN + case ENETDOWN: return DRWAV_NO_NETWORK; + #endif + #ifdef ENETUNREACH + case ENETUNREACH: return DRWAV_NO_NETWORK; + #endif + #ifdef ENETRESET + case ENETRESET: return DRWAV_NO_NETWORK; + #endif + #ifdef ECONNABORTED + case ECONNABORTED: return DRWAV_NO_NETWORK; + #endif + #ifdef ECONNRESET + case ECONNRESET: return DRWAV_CONNECTION_RESET; + #endif + #ifdef ENOBUFS + case ENOBUFS: return DRWAV_NO_SPACE; + #endif + #ifdef EISCONN + case EISCONN: return DRWAV_ALREADY_CONNECTED; + #endif + #ifdef ENOTCONN + case ENOTCONN: return DRWAV_NOT_CONNECTED; + #endif + #ifdef ESHUTDOWN + case ESHUTDOWN: return DRWAV_ERROR; + #endif + #ifdef ETOOMANYREFS + case ETOOMANYREFS: return DRWAV_ERROR; + #endif + #ifdef ETIMEDOUT + case ETIMEDOUT: return DRWAV_TIMEOUT; + #endif + #ifdef ECONNREFUSED + case ECONNREFUSED: return DRWAV_CONNECTION_REFUSED; + #endif + #ifdef EHOSTDOWN + case EHOSTDOWN: return DRWAV_NO_HOST; + #endif + #ifdef EHOSTUNREACH + case EHOSTUNREACH: return DRWAV_NO_HOST; + #endif + #ifdef EALREADY + case EALREADY: return DRWAV_IN_PROGRESS; + #endif + #ifdef EINPROGRESS + case EINPROGRESS: return DRWAV_IN_PROGRESS; + #endif + #ifdef ESTALE + case ESTALE: return DRWAV_INVALID_FILE; + #endif + #ifdef EUCLEAN + case EUCLEAN: return DRWAV_ERROR; + #endif + #ifdef ENOTNAM + case ENOTNAM: return DRWAV_ERROR; + #endif + #ifdef ENAVAIL + case ENAVAIL: return DRWAV_ERROR; + #endif + #ifdef EISNAM + case EISNAM: return DRWAV_ERROR; + #endif + #ifdef EREMOTEIO + case EREMOTEIO: return DRWAV_IO_ERROR; + #endif + #ifdef EDQUOT + case EDQUOT: return DRWAV_NO_SPACE; + #endif + #ifdef ENOMEDIUM + case ENOMEDIUM: return DRWAV_DOES_NOT_EXIST; + #endif + #ifdef EMEDIUMTYPE + case EMEDIUMTYPE: return DRWAV_ERROR; + #endif + #ifdef ECANCELED + case ECANCELED: return DRWAV_CANCELLED; + #endif + #ifdef ENOKEY + case ENOKEY: return DRWAV_ERROR; + #endif + #ifdef EKEYEXPIRED + case EKEYEXPIRED: return DRWAV_ERROR; + #endif + #ifdef EKEYREVOKED + case EKEYREVOKED: return DRWAV_ERROR; + #endif + #ifdef EKEYREJECTED + case EKEYREJECTED: return DRWAV_ERROR; + #endif + #ifdef EOWNERDEAD + case EOWNERDEAD: return DRWAV_ERROR; + #endif + #ifdef ENOTRECOVERABLE + case ENOTRECOVERABLE: return DRWAV_ERROR; + #endif + #ifdef ERFKILL + case ERFKILL: return DRWAV_ERROR; + #endif + #ifdef EHWPOISON + case EHWPOISON: return DRWAV_ERROR; + #endif + default: return DRWAV_ERROR; + } +} + +static drwav_result drwav_fopen(FILE** ppFile, const char* pFilePath, const char* pOpenMode) +{ +#if _MSC_VER && _MSC_VER >= 1400 + errno_t err; +#endif + + if (ppFile != NULL) { + *ppFile = NULL; /* Safety. */ + } + + if (pFilePath == NULL || pOpenMode == NULL || ppFile == NULL) { + return DRWAV_INVALID_ARGS; + } + +#if _MSC_VER && _MSC_VER >= 1400 + err = fopen_s(ppFile, pFilePath, pOpenMode); + if (err != 0) { + return drwav_result_from_errno(err); + } +#else +#if defined(_WIN32) || defined(__APPLE__) + *ppFile = fopen(pFilePath, pOpenMode); +#else + #if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64 && defined(_LARGEFILE64_SOURCE) + *ppFile = fopen64(pFilePath, pOpenMode); + #else + *ppFile = fopen(pFilePath, pOpenMode); + #endif +#endif + if (*ppFile == NULL) { + drwav_result result = drwav_result_from_errno(errno); + if (result == DRWAV_SUCCESS) { + result = DRWAV_ERROR; /* Just a safety check to make sure we never ever return success when pFile == NULL. */ + } + + return result; + } +#endif + + return DRWAV_SUCCESS; +} + +/* +_wfopen() isn't always available in all compilation environments. + + * Windows only. + * MSVC seems to support it universally as far back as VC6 from what I can tell (haven't checked further back). + * MinGW-64 (both 32- and 64-bit) seems to support it. + * MinGW wraps it in !defined(__STRICT_ANSI__). + * OpenWatcom wraps it in !defined(_NO_EXT_KEYS). + +This can be reviewed as compatibility issues arise. The preference is to use _wfopen_s() and _wfopen() as opposed to the wcsrtombs() +fallback, so if you notice your compiler not detecting this properly I'm happy to look at adding support. +*/ +#if defined(_WIN32) + #if defined(_MSC_VER) || defined(__MINGW64__) || (!defined(__STRICT_ANSI__) && !defined(_NO_EXT_KEYS)) + #define DRWAV_HAS_WFOPEN + #endif +#endif + +static drwav_result drwav_wfopen(FILE** ppFile, const wchar_t* pFilePath, const wchar_t* pOpenMode, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + if (ppFile != NULL) { + *ppFile = NULL; /* Safety. */ + } + + if (pFilePath == NULL || pOpenMode == NULL || ppFile == NULL) { + return DRWAV_INVALID_ARGS; + } + +#if defined(DRWAV_HAS_WFOPEN) + { + /* Use _wfopen() on Windows. */ + #if defined(_MSC_VER) && _MSC_VER >= 1400 + errno_t err = _wfopen_s(ppFile, pFilePath, pOpenMode); + if (err != 0) { + return drwav_result_from_errno(err); + } + #else + *ppFile = _wfopen(pFilePath, pOpenMode); + if (*ppFile == NULL) { + return drwav_result_from_errno(errno); + } + #endif + (void)pAllocationCallbacks; + } +#else + /* + Use fopen() on anything other than Windows. Requires a conversion. This is annoying because fopen() is locale specific. The only real way I can + think of to do this is with wcsrtombs(). Note that wcstombs() is apparently not thread-safe because it uses a static global mbstate_t object for + maintaining state. I've checked this with -std=c89 and it works, but if somebody get's a compiler error I'll look into improving compatibility. + */ + { + mbstate_t mbs; + size_t lenMB; + const wchar_t* pFilePathTemp = pFilePath; + char* pFilePathMB = NULL; + char pOpenModeMB[32] = {0}; + + /* Get the length first. */ + DRWAV_ZERO_OBJECT(&mbs); + lenMB = wcsrtombs(NULL, &pFilePathTemp, 0, &mbs); + if (lenMB == (size_t)-1) { + return drwav_result_from_errno(errno); + } + + pFilePathMB = (char*)drwav__malloc_from_callbacks(lenMB + 1, pAllocationCallbacks); + if (pFilePathMB == NULL) { + return DRWAV_OUT_OF_MEMORY; + } + + pFilePathTemp = pFilePath; + DRWAV_ZERO_OBJECT(&mbs); + wcsrtombs(pFilePathMB, &pFilePathTemp, lenMB + 1, &mbs); + + /* The open mode should always consist of ASCII characters so we should be able to do a trivial conversion. */ + { + size_t i = 0; + for (;;) { + if (pOpenMode[i] == 0) { + pOpenModeMB[i] = '\0'; + break; + } + + pOpenModeMB[i] = (char)pOpenMode[i]; + i += 1; + } + } + + *ppFile = fopen(pFilePathMB, pOpenModeMB); + + drwav__free_from_callbacks(pFilePathMB, pAllocationCallbacks); + } + + if (*ppFile == NULL) { + return DRWAV_ERROR; + } +#endif + + return DRWAV_SUCCESS; +} + + +static size_t drwav__on_read_stdio(void* pUserData, void* pBufferOut, size_t bytesToRead) +{ + return fread(pBufferOut, 1, bytesToRead, (FILE*)pUserData); +} + +static size_t drwav__on_write_stdio(void* pUserData, const void* pData, size_t bytesToWrite) +{ + return fwrite(pData, 1, bytesToWrite, (FILE*)pUserData); +} + +static drwav_bool32 drwav__on_seek_stdio(void* pUserData, int offset, drwav_seek_origin origin) +{ + return fseek((FILE*)pUserData, offset, (origin == drwav_seek_origin_current) ? SEEK_CUR : SEEK_SET) == 0; +} + +DRWAV_API drwav_bool32 drwav_init_file(drwav* pWav, const char* filename, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + return drwav_init_file_ex(pWav, filename, NULL, NULL, 0, pAllocationCallbacks); +} + + +static drwav_bool32 drwav_init_file__internal_FILE(drwav* pWav, FILE* pFile, drwav_chunk_proc onChunk, void* pChunkUserData, drwav_uint32 flags, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + drwav_bool32 result; + + result = drwav_preinit(pWav, drwav__on_read_stdio, drwav__on_seek_stdio, (void*)pFile, pAllocationCallbacks); + if (result != DRWAV_TRUE) { + fclose(pFile); + return result; + } + + result = drwav_init__internal(pWav, onChunk, pChunkUserData, flags); + if (result != DRWAV_TRUE) { + fclose(pFile); + return result; + } + + return DRWAV_TRUE; +} + +DRWAV_API drwav_bool32 drwav_init_file_ex(drwav* pWav, const char* filename, drwav_chunk_proc onChunk, void* pChunkUserData, drwav_uint32 flags, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + FILE* pFile; + if (drwav_fopen(&pFile, filename, "rb") != DRWAV_SUCCESS) { + return DRWAV_FALSE; + } + + /* This takes ownership of the FILE* object. */ + return drwav_init_file__internal_FILE(pWav, pFile, onChunk, pChunkUserData, flags, pAllocationCallbacks); +} + +DRWAV_API drwav_bool32 drwav_init_file_w(drwav* pWav, const wchar_t* filename, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + return drwav_init_file_ex_w(pWav, filename, NULL, NULL, 0, pAllocationCallbacks); +} + +DRWAV_API drwav_bool32 drwav_init_file_ex_w(drwav* pWav, const wchar_t* filename, drwav_chunk_proc onChunk, void* pChunkUserData, drwav_uint32 flags, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + FILE* pFile; + if (drwav_wfopen(&pFile, filename, L"rb", pAllocationCallbacks) != DRWAV_SUCCESS) { + return DRWAV_FALSE; + } + + /* This takes ownership of the FILE* object. */ + return drwav_init_file__internal_FILE(pWav, pFile, onChunk, pChunkUserData, flags, pAllocationCallbacks); +} + + +static drwav_bool32 drwav_init_file_write__internal_FILE(drwav* pWav, FILE* pFile, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount, drwav_bool32 isSequential, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + drwav_bool32 result; + + result = drwav_preinit_write(pWav, pFormat, isSequential, drwav__on_write_stdio, drwav__on_seek_stdio, (void*)pFile, pAllocationCallbacks); + if (result != DRWAV_TRUE) { + fclose(pFile); + return result; + } + + result = drwav_init_write__internal(pWav, pFormat, totalSampleCount); + if (result != DRWAV_TRUE) { + fclose(pFile); + return result; + } + + return DRWAV_TRUE; +} + +static drwav_bool32 drwav_init_file_write__internal(drwav* pWav, const char* filename, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount, drwav_bool32 isSequential, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + FILE* pFile; + if (drwav_fopen(&pFile, filename, "wb") != DRWAV_SUCCESS) { + return DRWAV_FALSE; + } + + /* This takes ownership of the FILE* object. */ + return drwav_init_file_write__internal_FILE(pWav, pFile, pFormat, totalSampleCount, isSequential, pAllocationCallbacks); +} + +static drwav_bool32 drwav_init_file_write_w__internal(drwav* pWav, const wchar_t* filename, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount, drwav_bool32 isSequential, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + FILE* pFile; + if (drwav_wfopen(&pFile, filename, L"wb", pAllocationCallbacks) != DRWAV_SUCCESS) { + return DRWAV_FALSE; + } + + /* This takes ownership of the FILE* object. */ + return drwav_init_file_write__internal_FILE(pWav, pFile, pFormat, totalSampleCount, isSequential, pAllocationCallbacks); +} + +DRWAV_API drwav_bool32 drwav_init_file_write(drwav* pWav, const char* filename, const drwav_data_format* pFormat, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + return drwav_init_file_write__internal(pWav, filename, pFormat, 0, DRWAV_FALSE, pAllocationCallbacks); +} + +DRWAV_API drwav_bool32 drwav_init_file_write_sequential(drwav* pWav, const char* filename, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + return drwav_init_file_write__internal(pWav, filename, pFormat, totalSampleCount, DRWAV_TRUE, pAllocationCallbacks); +} + +DRWAV_API drwav_bool32 drwav_init_file_write_sequential_pcm_frames(drwav* pWav, const char* filename, const drwav_data_format* pFormat, drwav_uint64 totalPCMFrameCount, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + if (pFormat == NULL) { + return DRWAV_FALSE; + } + + return drwav_init_file_write_sequential(pWav, filename, pFormat, totalPCMFrameCount*pFormat->channels, pAllocationCallbacks); +} + +DRWAV_API drwav_bool32 drwav_init_file_write_w(drwav* pWav, const wchar_t* filename, const drwav_data_format* pFormat, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + return drwav_init_file_write_w__internal(pWav, filename, pFormat, 0, DRWAV_FALSE, pAllocationCallbacks); +} + +DRWAV_API drwav_bool32 drwav_init_file_write_sequential_w(drwav* pWav, const wchar_t* filename, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + return drwav_init_file_write_w__internal(pWav, filename, pFormat, totalSampleCount, DRWAV_TRUE, pAllocationCallbacks); +} + +DRWAV_API drwav_bool32 drwav_init_file_write_sequential_pcm_frames_w(drwav* pWav, const wchar_t* filename, const drwav_data_format* pFormat, drwav_uint64 totalPCMFrameCount, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + if (pFormat == NULL) { + return DRWAV_FALSE; + } + + return drwav_init_file_write_sequential_w(pWav, filename, pFormat, totalPCMFrameCount*pFormat->channels, pAllocationCallbacks); +} +#endif /* DR_WAV_NO_STDIO */ + + +static size_t drwav__on_read_memory(void* pUserData, void* pBufferOut, size_t bytesToRead) +{ + drwav* pWav = (drwav*)pUserData; + size_t bytesRemaining; + + DRWAV_ASSERT(pWav != NULL); + DRWAV_ASSERT(pWav->memoryStream.dataSize >= pWav->memoryStream.currentReadPos); + + bytesRemaining = pWav->memoryStream.dataSize - pWav->memoryStream.currentReadPos; + if (bytesToRead > bytesRemaining) { + bytesToRead = bytesRemaining; + } + + if (bytesToRead > 0) { + DRWAV_COPY_MEMORY(pBufferOut, pWav->memoryStream.data + pWav->memoryStream.currentReadPos, bytesToRead); + pWav->memoryStream.currentReadPos += bytesToRead; + } + + return bytesToRead; +} + +static drwav_bool32 drwav__on_seek_memory(void* pUserData, int offset, drwav_seek_origin origin) +{ + drwav* pWav = (drwav*)pUserData; + DRWAV_ASSERT(pWav != NULL); + + if (origin == drwav_seek_origin_current) { + if (offset > 0) { + if (pWav->memoryStream.currentReadPos + offset > pWav->memoryStream.dataSize) { + return DRWAV_FALSE; /* Trying to seek too far forward. */ + } + } else { + if (pWav->memoryStream.currentReadPos < (size_t)-offset) { + return DRWAV_FALSE; /* Trying to seek too far backwards. */ + } + } + + /* This will never underflow thanks to the clamps above. */ + pWav->memoryStream.currentReadPos += offset; + } else { + if ((drwav_uint32)offset <= pWav->memoryStream.dataSize) { + pWav->memoryStream.currentReadPos = offset; + } else { + return DRWAV_FALSE; /* Trying to seek too far forward. */ + } + } + + return DRWAV_TRUE; +} + +static size_t drwav__on_write_memory(void* pUserData, const void* pDataIn, size_t bytesToWrite) +{ + drwav* pWav = (drwav*)pUserData; + size_t bytesRemaining; + + DRWAV_ASSERT(pWav != NULL); + DRWAV_ASSERT(pWav->memoryStreamWrite.dataCapacity >= pWav->memoryStreamWrite.currentWritePos); + + bytesRemaining = pWav->memoryStreamWrite.dataCapacity - pWav->memoryStreamWrite.currentWritePos; + if (bytesRemaining < bytesToWrite) { + /* Need to reallocate. */ + void* pNewData; + size_t newDataCapacity = (pWav->memoryStreamWrite.dataCapacity == 0) ? 256 : pWav->memoryStreamWrite.dataCapacity * 2; + + /* If doubling wasn't enough, just make it the minimum required size to write the data. */ + if ((newDataCapacity - pWav->memoryStreamWrite.currentWritePos) < bytesToWrite) { + newDataCapacity = pWav->memoryStreamWrite.currentWritePos + bytesToWrite; + } + + pNewData = drwav__realloc_from_callbacks(*pWav->memoryStreamWrite.ppData, newDataCapacity, pWav->memoryStreamWrite.dataCapacity, &pWav->allocationCallbacks); + if (pNewData == NULL) { + return 0; + } + + *pWav->memoryStreamWrite.ppData = pNewData; + pWav->memoryStreamWrite.dataCapacity = newDataCapacity; + } + + DRWAV_COPY_MEMORY(((drwav_uint8*)(*pWav->memoryStreamWrite.ppData)) + pWav->memoryStreamWrite.currentWritePos, pDataIn, bytesToWrite); + + pWav->memoryStreamWrite.currentWritePos += bytesToWrite; + if (pWav->memoryStreamWrite.dataSize < pWav->memoryStreamWrite.currentWritePos) { + pWav->memoryStreamWrite.dataSize = pWav->memoryStreamWrite.currentWritePos; + } + + *pWav->memoryStreamWrite.pDataSize = pWav->memoryStreamWrite.dataSize; + + return bytesToWrite; +} + +static drwav_bool32 drwav__on_seek_memory_write(void* pUserData, int offset, drwav_seek_origin origin) +{ + drwav* pWav = (drwav*)pUserData; + DRWAV_ASSERT(pWav != NULL); + + if (origin == drwav_seek_origin_current) { + if (offset > 0) { + if (pWav->memoryStreamWrite.currentWritePos + offset > pWav->memoryStreamWrite.dataSize) { + offset = (int)(pWav->memoryStreamWrite.dataSize - pWav->memoryStreamWrite.currentWritePos); /* Trying to seek too far forward. */ + } + } else { + if (pWav->memoryStreamWrite.currentWritePos < (size_t)-offset) { + offset = -(int)pWav->memoryStreamWrite.currentWritePos; /* Trying to seek too far backwards. */ + } + } + + /* This will never underflow thanks to the clamps above. */ + pWav->memoryStreamWrite.currentWritePos += offset; + } else { + if ((drwav_uint32)offset <= pWav->memoryStreamWrite.dataSize) { + pWav->memoryStreamWrite.currentWritePos = offset; + } else { + pWav->memoryStreamWrite.currentWritePos = pWav->memoryStreamWrite.dataSize; /* Trying to seek too far forward. */ + } + } + + return DRWAV_TRUE; +} + +DRWAV_API drwav_bool32 drwav_init_memory(drwav* pWav, const void* data, size_t dataSize, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + return drwav_init_memory_ex(pWav, data, dataSize, NULL, NULL, 0, pAllocationCallbacks); +} + +DRWAV_API drwav_bool32 drwav_init_memory_ex(drwav* pWav, const void* data, size_t dataSize, drwav_chunk_proc onChunk, void* pChunkUserData, drwav_uint32 flags, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + if (data == NULL || dataSize == 0) { + return DRWAV_FALSE; + } + + if (!drwav_preinit(pWav, drwav__on_read_memory, drwav__on_seek_memory, pWav, pAllocationCallbacks)) { + return DRWAV_FALSE; + } + + pWav->memoryStream.data = (const drwav_uint8*)data; + pWav->memoryStream.dataSize = dataSize; + pWav->memoryStream.currentReadPos = 0; + + return drwav_init__internal(pWav, onChunk, pChunkUserData, flags); +} + + +static drwav_bool32 drwav_init_memory_write__internal(drwav* pWav, void** ppData, size_t* pDataSize, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount, drwav_bool32 isSequential, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + if (ppData == NULL || pDataSize == NULL) { + return DRWAV_FALSE; + } + + *ppData = NULL; /* Important because we're using realloc()! */ + *pDataSize = 0; + + if (!drwav_preinit_write(pWav, pFormat, isSequential, drwav__on_write_memory, drwav__on_seek_memory_write, pWav, pAllocationCallbacks)) { + return DRWAV_FALSE; + } + + pWav->memoryStreamWrite.ppData = ppData; + pWav->memoryStreamWrite.pDataSize = pDataSize; + pWav->memoryStreamWrite.dataSize = 0; + pWav->memoryStreamWrite.dataCapacity = 0; + pWav->memoryStreamWrite.currentWritePos = 0; + + return drwav_init_write__internal(pWav, pFormat, totalSampleCount); +} + +DRWAV_API drwav_bool32 drwav_init_memory_write(drwav* pWav, void** ppData, size_t* pDataSize, const drwav_data_format* pFormat, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + return drwav_init_memory_write__internal(pWav, ppData, pDataSize, pFormat, 0, DRWAV_FALSE, pAllocationCallbacks); +} + +DRWAV_API drwav_bool32 drwav_init_memory_write_sequential(drwav* pWav, void** ppData, size_t* pDataSize, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + return drwav_init_memory_write__internal(pWav, ppData, pDataSize, pFormat, totalSampleCount, DRWAV_TRUE, pAllocationCallbacks); +} + +DRWAV_API drwav_bool32 drwav_init_memory_write_sequential_pcm_frames(drwav* pWav, void** ppData, size_t* pDataSize, const drwav_data_format* pFormat, drwav_uint64 totalPCMFrameCount, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + if (pFormat == NULL) { + return DRWAV_FALSE; + } + + return drwav_init_memory_write_sequential(pWav, ppData, pDataSize, pFormat, totalPCMFrameCount*pFormat->channels, pAllocationCallbacks); +} + + + +DRWAV_API drwav_result drwav_uninit(drwav* pWav) +{ + drwav_result result = DRWAV_SUCCESS; + + if (pWav == NULL) { + return DRWAV_INVALID_ARGS; + } + + /* + If the drwav object was opened in write mode we'll need to finalize a few things: + - Make sure the "data" chunk is aligned to 16-bits for RIFF containers, or 64 bits for W64 containers. + - Set the size of the "data" chunk. + */ + if (pWav->onWrite != NULL) { + drwav_uint32 paddingSize = 0; + + /* Padding. Do not adjust pWav->dataChunkDataSize - this should not include the padding. */ + if (pWav->container == drwav_container_riff || pWav->container == drwav_container_rf64) { + paddingSize = drwav__chunk_padding_size_riff(pWav->dataChunkDataSize); + } else { + paddingSize = drwav__chunk_padding_size_w64(pWav->dataChunkDataSize); + } + + if (paddingSize > 0) { + drwav_uint64 paddingData = 0; + drwav__write(pWav, &paddingData, paddingSize); /* Byte order does not matter for this. */ + } + + /* + Chunk sizes. When using sequential mode, these will have been filled in at initialization time. We only need + to do this when using non-sequential mode. + */ + if (pWav->onSeek && !pWav->isSequentialWrite) { + if (pWav->container == drwav_container_riff) { + /* The "RIFF" chunk size. */ + if (pWav->onSeek(pWav->pUserData, 4, drwav_seek_origin_start)) { + drwav_uint32 riffChunkSize = drwav__riff_chunk_size_riff(pWav->dataChunkDataSize); + drwav__write_u32ne_to_le(pWav, riffChunkSize); + } + + /* the "data" chunk size. */ + if (pWav->onSeek(pWav->pUserData, (int)pWav->dataChunkDataPos + 4, drwav_seek_origin_start)) { + drwav_uint32 dataChunkSize = drwav__data_chunk_size_riff(pWav->dataChunkDataSize); + drwav__write_u32ne_to_le(pWav, dataChunkSize); + } + } else if (pWav->container == drwav_container_w64) { + /* The "RIFF" chunk size. */ + if (pWav->onSeek(pWav->pUserData, 16, drwav_seek_origin_start)) { + drwav_uint64 riffChunkSize = drwav__riff_chunk_size_w64(pWav->dataChunkDataSize); + drwav__write_u64ne_to_le(pWav, riffChunkSize); + } + + /* The "data" chunk size. */ + if (pWav->onSeek(pWav->pUserData, (int)pWav->dataChunkDataPos + 16, drwav_seek_origin_start)) { + drwav_uint64 dataChunkSize = drwav__data_chunk_size_w64(pWav->dataChunkDataSize); + drwav__write_u64ne_to_le(pWav, dataChunkSize); + } + } else if (pWav->container == drwav_container_rf64) { + /* We only need to update the ds64 chunk. The "RIFF" and "data" chunks always have their sizes set to 0xFFFFFFFF for RF64. */ + int ds64BodyPos = 12 + 8; + + /* The "RIFF" chunk size. */ + if (pWav->onSeek(pWav->pUserData, ds64BodyPos + 0, drwav_seek_origin_start)) { + drwav_uint64 riffChunkSize = drwav__riff_chunk_size_rf64(pWav->dataChunkDataSize); + drwav__write_u64ne_to_le(pWav, riffChunkSize); + } + + /* The "data" chunk size. */ + if (pWav->onSeek(pWav->pUserData, ds64BodyPos + 8, drwav_seek_origin_start)) { + drwav_uint64 dataChunkSize = drwav__data_chunk_size_rf64(pWav->dataChunkDataSize); + drwav__write_u64ne_to_le(pWav, dataChunkSize); + } + } + } + + /* Validation for sequential mode. */ + if (pWav->isSequentialWrite) { + if (pWav->dataChunkDataSize != pWav->dataChunkDataSizeTargetWrite) { + result = DRWAV_INVALID_FILE; + } + } + } + +#ifndef DR_WAV_NO_STDIO + /* + If we opened the file with drwav_open_file() we will want to close the file handle. We can know whether or not drwav_open_file() + was used by looking at the onRead and onSeek callbacks. + */ + if (pWav->onRead == drwav__on_read_stdio || pWav->onWrite == drwav__on_write_stdio) { + fclose((FILE*)pWav->pUserData); + } +#endif + + return result; +} + + + +DRWAV_API size_t drwav_read_raw(drwav* pWav, size_t bytesToRead, void* pBufferOut) +{ + size_t bytesRead; + + if (pWav == NULL || bytesToRead == 0) { + return 0; + } + + if (bytesToRead > pWav->bytesRemaining) { + bytesToRead = (size_t)pWav->bytesRemaining; + } + + if (pBufferOut != NULL) { + bytesRead = pWav->onRead(pWav->pUserData, pBufferOut, bytesToRead); + } else { + /* We need to seek. If we fail, we need to read-and-discard to make sure we get a good byte count. */ + bytesRead = 0; + while (bytesRead < bytesToRead) { + size_t bytesToSeek = (bytesToRead - bytesRead); + if (bytesToSeek > 0x7FFFFFFF) { + bytesToSeek = 0x7FFFFFFF; + } + + if (pWav->onSeek(pWav->pUserData, (int)bytesToSeek, drwav_seek_origin_current) == DRWAV_FALSE) { + break; + } + + bytesRead += bytesToSeek; + } + + /* When we get here we may need to read-and-discard some data. */ + while (bytesRead < bytesToRead) { + drwav_uint8 buffer[4096]; + size_t bytesSeeked; + size_t bytesToSeek = (bytesToRead - bytesRead); + if (bytesToSeek > sizeof(buffer)) { + bytesToSeek = sizeof(buffer); + } + + bytesSeeked = pWav->onRead(pWav->pUserData, buffer, bytesToSeek); + bytesRead += bytesSeeked; + + if (bytesSeeked < bytesToSeek) { + break; /* Reached the end. */ + } + } + } + + pWav->bytesRemaining -= bytesRead; + return bytesRead; +} + + + +DRWAV_API drwav_uint64 drwav_read_pcm_frames_le(drwav* pWav, drwav_uint64 framesToRead, void* pBufferOut) +{ + drwav_uint32 bytesPerFrame; + drwav_uint64 bytesToRead; /* Intentionally uint64 instead of size_t so we can do a check that we're not reading too much on 32-bit builds. */ + + if (pWav == NULL || framesToRead == 0) { + return 0; + } + + /* Cannot use this function for compressed formats. */ + if (drwav__is_compressed_format_tag(pWav->translatedFormatTag)) { + return 0; + } + + bytesPerFrame = drwav_get_bytes_per_pcm_frame(pWav); + if (bytesPerFrame == 0) { + return 0; + } + + /* Don't try to read more samples than can potentially fit in the output buffer. */ + bytesToRead = framesToRead * bytesPerFrame; + if (bytesToRead > DRWAV_SIZE_MAX) { + bytesToRead = (DRWAV_SIZE_MAX / bytesPerFrame) * bytesPerFrame; /* Round the number of bytes to read to a clean frame boundary. */ + } + + /* + Doing an explicit check here just to make it clear that we don't want to be attempt to read anything if there's no bytes to read. There + *could* be a time where it evaluates to 0 due to overflowing. + */ + if (bytesToRead == 0) { + return 0; + } + + return drwav_read_raw(pWav, (size_t)bytesToRead, pBufferOut) / bytesPerFrame; +} + +DRWAV_API drwav_uint64 drwav_read_pcm_frames_be(drwav* pWav, drwav_uint64 framesToRead, void* pBufferOut) +{ + drwav_uint64 framesRead = drwav_read_pcm_frames_le(pWav, framesToRead, pBufferOut); + + if (pBufferOut != NULL) { + drwav__bswap_samples(pBufferOut, framesRead*pWav->channels, drwav_get_bytes_per_pcm_frame(pWav)/pWav->channels, pWav->translatedFormatTag); + } + + return framesRead; +} + +DRWAV_API drwav_uint64 drwav_read_pcm_frames(drwav* pWav, drwav_uint64 framesToRead, void* pBufferOut) +{ + if (drwav__is_little_endian()) { + return drwav_read_pcm_frames_le(pWav, framesToRead, pBufferOut); + } else { + return drwav_read_pcm_frames_be(pWav, framesToRead, pBufferOut); + } +} + + + +DRWAV_API drwav_bool32 drwav_seek_to_first_pcm_frame(drwav* pWav) +{ + if (pWav->onWrite != NULL) { + return DRWAV_FALSE; /* No seeking in write mode. */ + } + + if (!pWav->onSeek(pWav->pUserData, (int)pWav->dataChunkDataPos, drwav_seek_origin_start)) { + return DRWAV_FALSE; + } + + if (drwav__is_compressed_format_tag(pWav->translatedFormatTag)) { + pWav->compressed.iCurrentPCMFrame = 0; + + /* Cached data needs to be cleared for compressed formats. */ + if (pWav->translatedFormatTag == DR_WAVE_FORMAT_ADPCM) { + DRWAV_ZERO_OBJECT(&pWav->msadpcm); + } else if (pWav->translatedFormatTag == DR_WAVE_FORMAT_DVI_ADPCM) { + DRWAV_ZERO_OBJECT(&pWav->ima); + } else { + DRWAV_ASSERT(DRWAV_FALSE); /* If this assertion is triggered it means I've implemented a new compressed format but forgot to add a branch for it here. */ + } + } + + pWav->bytesRemaining = pWav->dataChunkDataSize; + return DRWAV_TRUE; +} + +DRWAV_API drwav_bool32 drwav_seek_to_pcm_frame(drwav* pWav, drwav_uint64 targetFrameIndex) +{ + /* Seeking should be compatible with wave files > 2GB. */ + + if (pWav == NULL || pWav->onSeek == NULL) { + return DRWAV_FALSE; + } + + /* No seeking in write mode. */ + if (pWav->onWrite != NULL) { + return DRWAV_FALSE; + } + + /* If there are no samples, just return DRWAV_TRUE without doing anything. */ + if (pWav->totalPCMFrameCount == 0) { + return DRWAV_TRUE; + } + + /* Make sure the sample is clamped. */ + if (targetFrameIndex >= pWav->totalPCMFrameCount) { + targetFrameIndex = pWav->totalPCMFrameCount - 1; + } + + /* + For compressed formats we just use a slow generic seek. If we are seeking forward we just seek forward. If we are going backwards we need + to seek back to the start. + */ + if (drwav__is_compressed_format_tag(pWav->translatedFormatTag)) { + /* TODO: This can be optimized. */ + + /* + If we're seeking forward it's simple - just keep reading samples until we hit the sample we're requesting. If we're seeking backwards, + we first need to seek back to the start and then just do the same thing as a forward seek. + */ + if (targetFrameIndex < pWav->compressed.iCurrentPCMFrame) { + if (!drwav_seek_to_first_pcm_frame(pWav)) { + return DRWAV_FALSE; + } + } + + if (targetFrameIndex > pWav->compressed.iCurrentPCMFrame) { + drwav_uint64 offsetInFrames = targetFrameIndex - pWav->compressed.iCurrentPCMFrame; + + drwav_int16 devnull[2048]; + while (offsetInFrames > 0) { + drwav_uint64 framesRead = 0; + drwav_uint64 framesToRead = offsetInFrames; + if (framesToRead > drwav_countof(devnull)/pWav->channels) { + framesToRead = drwav_countof(devnull)/pWav->channels; + } + + if (pWav->translatedFormatTag == DR_WAVE_FORMAT_ADPCM) { + framesRead = drwav_read_pcm_frames_s16__msadpcm(pWav, framesToRead, devnull); + } else if (pWav->translatedFormatTag == DR_WAVE_FORMAT_DVI_ADPCM) { + framesRead = drwav_read_pcm_frames_s16__ima(pWav, framesToRead, devnull); + } else { + DRWAV_ASSERT(DRWAV_FALSE); /* If this assertion is triggered it means I've implemented a new compressed format but forgot to add a branch for it here. */ + } + + if (framesRead != framesToRead) { + return DRWAV_FALSE; + } + + offsetInFrames -= framesRead; + } + } + } else { + drwav_uint64 totalSizeInBytes; + drwav_uint64 currentBytePos; + drwav_uint64 targetBytePos; + drwav_uint64 offset; + + totalSizeInBytes = pWav->totalPCMFrameCount * drwav_get_bytes_per_pcm_frame(pWav); + DRWAV_ASSERT(totalSizeInBytes >= pWav->bytesRemaining); + + currentBytePos = totalSizeInBytes - pWav->bytesRemaining; + targetBytePos = targetFrameIndex * drwav_get_bytes_per_pcm_frame(pWav); + + if (currentBytePos < targetBytePos) { + /* Offset forwards. */ + offset = (targetBytePos - currentBytePos); + } else { + /* Offset backwards. */ + if (!drwav_seek_to_first_pcm_frame(pWav)) { + return DRWAV_FALSE; + } + offset = targetBytePos; + } + + while (offset > 0) { + int offset32 = ((offset > INT_MAX) ? INT_MAX : (int)offset); + if (!pWav->onSeek(pWav->pUserData, offset32, drwav_seek_origin_current)) { + return DRWAV_FALSE; + } + + pWav->bytesRemaining -= offset32; + offset -= offset32; + } + } + + return DRWAV_TRUE; +} + + +DRWAV_API size_t drwav_write_raw(drwav* pWav, size_t bytesToWrite, const void* pData) +{ + size_t bytesWritten; + + if (pWav == NULL || bytesToWrite == 0 || pData == NULL) { + return 0; + } + + bytesWritten = pWav->onWrite(pWav->pUserData, pData, bytesToWrite); + pWav->dataChunkDataSize += bytesWritten; + + return bytesWritten; +} + + +DRWAV_API drwav_uint64 drwav_write_pcm_frames_le(drwav* pWav, drwav_uint64 framesToWrite, const void* pData) +{ + drwav_uint64 bytesToWrite; + drwav_uint64 bytesWritten; + const drwav_uint8* pRunningData; + + if (pWav == NULL || framesToWrite == 0 || pData == NULL) { + return 0; + } + + bytesToWrite = ((framesToWrite * pWav->channels * pWav->bitsPerSample) / 8); + if (bytesToWrite > DRWAV_SIZE_MAX) { + return 0; + } + + bytesWritten = 0; + pRunningData = (const drwav_uint8*)pData; + + while (bytesToWrite > 0) { + size_t bytesJustWritten; + drwav_uint64 bytesToWriteThisIteration; + + bytesToWriteThisIteration = bytesToWrite; + DRWAV_ASSERT(bytesToWriteThisIteration <= DRWAV_SIZE_MAX); /* <-- This is checked above. */ + + bytesJustWritten = drwav_write_raw(pWav, (size_t)bytesToWriteThisIteration, pRunningData); + if (bytesJustWritten == 0) { + break; + } + + bytesToWrite -= bytesJustWritten; + bytesWritten += bytesJustWritten; + pRunningData += bytesJustWritten; + } + + return (bytesWritten * 8) / pWav->bitsPerSample / pWav->channels; +} + +DRWAV_API drwav_uint64 drwav_write_pcm_frames_be(drwav* pWav, drwav_uint64 framesToWrite, const void* pData) +{ + drwav_uint64 bytesToWrite; + drwav_uint64 bytesWritten; + drwav_uint32 bytesPerSample; + const drwav_uint8* pRunningData; + + if (pWav == NULL || framesToWrite == 0 || pData == NULL) { + return 0; + } + + bytesToWrite = ((framesToWrite * pWav->channels * pWav->bitsPerSample) / 8); + if (bytesToWrite > DRWAV_SIZE_MAX) { + return 0; + } + + bytesWritten = 0; + pRunningData = (const drwav_uint8*)pData; + + bytesPerSample = drwav_get_bytes_per_pcm_frame(pWav) / pWav->channels; + + while (bytesToWrite > 0) { + drwav_uint8 temp[4096]; + drwav_uint32 sampleCount; + size_t bytesJustWritten; + drwav_uint64 bytesToWriteThisIteration; + + bytesToWriteThisIteration = bytesToWrite; + DRWAV_ASSERT(bytesToWriteThisIteration <= DRWAV_SIZE_MAX); /* <-- This is checked above. */ + + /* + WAV files are always little-endian. We need to byte swap on big-endian architectures. Since our input buffer is read-only we need + to use an intermediary buffer for the conversion. + */ + sampleCount = sizeof(temp)/bytesPerSample; + + if (bytesToWriteThisIteration > ((drwav_uint64)sampleCount)*bytesPerSample) { + bytesToWriteThisIteration = ((drwav_uint64)sampleCount)*bytesPerSample; + } + + DRWAV_COPY_MEMORY(temp, pRunningData, (size_t)bytesToWriteThisIteration); + drwav__bswap_samples(temp, sampleCount, bytesPerSample, pWav->translatedFormatTag); + + bytesJustWritten = drwav_write_raw(pWav, (size_t)bytesToWriteThisIteration, temp); + if (bytesJustWritten == 0) { + break; + } + + bytesToWrite -= bytesJustWritten; + bytesWritten += bytesJustWritten; + pRunningData += bytesJustWritten; + } + + return (bytesWritten * 8) / pWav->bitsPerSample / pWav->channels; +} + +DRWAV_API drwav_uint64 drwav_write_pcm_frames(drwav* pWav, drwav_uint64 framesToWrite, const void* pData) +{ + if (drwav__is_little_endian()) { + return drwav_write_pcm_frames_le(pWav, framesToWrite, pData); + } else { + return drwav_write_pcm_frames_be(pWav, framesToWrite, pData); + } +} + + +static drwav_uint64 drwav_read_pcm_frames_s16__msadpcm(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut) +{ + drwav_uint64 totalFramesRead = 0; + + DRWAV_ASSERT(pWav != NULL); + DRWAV_ASSERT(framesToRead > 0); + + /* TODO: Lots of room for optimization here. */ + + while (framesToRead > 0 && pWav->compressed.iCurrentPCMFrame < pWav->totalPCMFrameCount) { + /* If there are no cached frames we need to load a new block. */ + if (pWav->msadpcm.cachedFrameCount == 0 && pWav->msadpcm.bytesRemainingInBlock == 0) { + if (pWav->channels == 1) { + /* Mono. */ + drwav_uint8 header[7]; + if (pWav->onRead(pWav->pUserData, header, sizeof(header)) != sizeof(header)) { + return totalFramesRead; + } + pWav->msadpcm.bytesRemainingInBlock = pWav->fmt.blockAlign - sizeof(header); + + pWav->msadpcm.predictor[0] = header[0]; + pWav->msadpcm.delta[0] = drwav__bytes_to_s16(header + 1); + pWav->msadpcm.prevFrames[0][1] = (drwav_int32)drwav__bytes_to_s16(header + 3); + pWav->msadpcm.prevFrames[0][0] = (drwav_int32)drwav__bytes_to_s16(header + 5); + pWav->msadpcm.cachedFrames[2] = pWav->msadpcm.prevFrames[0][0]; + pWav->msadpcm.cachedFrames[3] = pWav->msadpcm.prevFrames[0][1]; + pWav->msadpcm.cachedFrameCount = 2; + } else { + /* Stereo. */ + drwav_uint8 header[14]; + if (pWav->onRead(pWav->pUserData, header, sizeof(header)) != sizeof(header)) { + return totalFramesRead; + } + pWav->msadpcm.bytesRemainingInBlock = pWav->fmt.blockAlign - sizeof(header); + + pWav->msadpcm.predictor[0] = header[0]; + pWav->msadpcm.predictor[1] = header[1]; + pWav->msadpcm.delta[0] = drwav__bytes_to_s16(header + 2); + pWav->msadpcm.delta[1] = drwav__bytes_to_s16(header + 4); + pWav->msadpcm.prevFrames[0][1] = (drwav_int32)drwav__bytes_to_s16(header + 6); + pWav->msadpcm.prevFrames[1][1] = (drwav_int32)drwav__bytes_to_s16(header + 8); + pWav->msadpcm.prevFrames[0][0] = (drwav_int32)drwav__bytes_to_s16(header + 10); + pWav->msadpcm.prevFrames[1][0] = (drwav_int32)drwav__bytes_to_s16(header + 12); + + pWav->msadpcm.cachedFrames[0] = pWav->msadpcm.prevFrames[0][0]; + pWav->msadpcm.cachedFrames[1] = pWav->msadpcm.prevFrames[1][0]; + pWav->msadpcm.cachedFrames[2] = pWav->msadpcm.prevFrames[0][1]; + pWav->msadpcm.cachedFrames[3] = pWav->msadpcm.prevFrames[1][1]; + pWav->msadpcm.cachedFrameCount = 2; + } + } + + /* Output anything that's cached. */ + while (framesToRead > 0 && pWav->msadpcm.cachedFrameCount > 0 && pWav->compressed.iCurrentPCMFrame < pWav->totalPCMFrameCount) { + if (pBufferOut != NULL) { + drwav_uint32 iSample = 0; + for (iSample = 0; iSample < pWav->channels; iSample += 1) { + pBufferOut[iSample] = (drwav_int16)pWav->msadpcm.cachedFrames[(drwav_countof(pWav->msadpcm.cachedFrames) - (pWav->msadpcm.cachedFrameCount*pWav->channels)) + iSample]; + } + + pBufferOut += pWav->channels; + } + + framesToRead -= 1; + totalFramesRead += 1; + pWav->compressed.iCurrentPCMFrame += 1; + pWav->msadpcm.cachedFrameCount -= 1; + } + + if (framesToRead == 0) { + return totalFramesRead; + } + + + /* + If there's nothing left in the cache, just go ahead and load more. If there's nothing left to load in the current block we just continue to the next + loop iteration which will trigger the loading of a new block. + */ + if (pWav->msadpcm.cachedFrameCount == 0) { + if (pWav->msadpcm.bytesRemainingInBlock == 0) { + continue; + } else { + static drwav_int32 adaptationTable[] = { + 230, 230, 230, 230, 307, 409, 512, 614, + 768, 614, 512, 409, 307, 230, 230, 230 + }; + static drwav_int32 coeff1Table[] = { 256, 512, 0, 192, 240, 460, 392 }; + static drwav_int32 coeff2Table[] = { 0, -256, 0, 64, 0, -208, -232 }; + + drwav_uint8 nibbles; + drwav_int32 nibble0; + drwav_int32 nibble1; + + if (pWav->onRead(pWav->pUserData, &nibbles, 1) != 1) { + return totalFramesRead; + } + pWav->msadpcm.bytesRemainingInBlock -= 1; + + /* TODO: Optimize away these if statements. */ + nibble0 = ((nibbles & 0xF0) >> 4); if ((nibbles & 0x80)) { nibble0 |= 0xFFFFFFF0UL; } + nibble1 = ((nibbles & 0x0F) >> 0); if ((nibbles & 0x08)) { nibble1 |= 0xFFFFFFF0UL; } + + if (pWav->channels == 1) { + /* Mono. */ + drwav_int32 newSample0; + drwav_int32 newSample1; + + newSample0 = ((pWav->msadpcm.prevFrames[0][1] * coeff1Table[pWav->msadpcm.predictor[0]]) + (pWav->msadpcm.prevFrames[0][0] * coeff2Table[pWav->msadpcm.predictor[0]])) >> 8; + newSample0 += nibble0 * pWav->msadpcm.delta[0]; + newSample0 = drwav_clamp(newSample0, -32768, 32767); + + pWav->msadpcm.delta[0] = (adaptationTable[((nibbles & 0xF0) >> 4)] * pWav->msadpcm.delta[0]) >> 8; + if (pWav->msadpcm.delta[0] < 16) { + pWav->msadpcm.delta[0] = 16; + } + + pWav->msadpcm.prevFrames[0][0] = pWav->msadpcm.prevFrames[0][1]; + pWav->msadpcm.prevFrames[0][1] = newSample0; + + + newSample1 = ((pWav->msadpcm.prevFrames[0][1] * coeff1Table[pWav->msadpcm.predictor[0]]) + (pWav->msadpcm.prevFrames[0][0] * coeff2Table[pWav->msadpcm.predictor[0]])) >> 8; + newSample1 += nibble1 * pWav->msadpcm.delta[0]; + newSample1 = drwav_clamp(newSample1, -32768, 32767); + + pWav->msadpcm.delta[0] = (adaptationTable[((nibbles & 0x0F) >> 0)] * pWav->msadpcm.delta[0]) >> 8; + if (pWav->msadpcm.delta[0] < 16) { + pWav->msadpcm.delta[0] = 16; + } + + pWav->msadpcm.prevFrames[0][0] = pWav->msadpcm.prevFrames[0][1]; + pWav->msadpcm.prevFrames[0][1] = newSample1; + + + pWav->msadpcm.cachedFrames[2] = newSample0; + pWav->msadpcm.cachedFrames[3] = newSample1; + pWav->msadpcm.cachedFrameCount = 2; + } else { + /* Stereo. */ + drwav_int32 newSample0; + drwav_int32 newSample1; + + /* Left. */ + newSample0 = ((pWav->msadpcm.prevFrames[0][1] * coeff1Table[pWav->msadpcm.predictor[0]]) + (pWav->msadpcm.prevFrames[0][0] * coeff2Table[pWav->msadpcm.predictor[0]])) >> 8; + newSample0 += nibble0 * pWav->msadpcm.delta[0]; + newSample0 = drwav_clamp(newSample0, -32768, 32767); + + pWav->msadpcm.delta[0] = (adaptationTable[((nibbles & 0xF0) >> 4)] * pWav->msadpcm.delta[0]) >> 8; + if (pWav->msadpcm.delta[0] < 16) { + pWav->msadpcm.delta[0] = 16; + } + + pWav->msadpcm.prevFrames[0][0] = pWav->msadpcm.prevFrames[0][1]; + pWav->msadpcm.prevFrames[0][1] = newSample0; + + + /* Right. */ + newSample1 = ((pWav->msadpcm.prevFrames[1][1] * coeff1Table[pWav->msadpcm.predictor[1]]) + (pWav->msadpcm.prevFrames[1][0] * coeff2Table[pWav->msadpcm.predictor[1]])) >> 8; + newSample1 += nibble1 * pWav->msadpcm.delta[1]; + newSample1 = drwav_clamp(newSample1, -32768, 32767); + + pWav->msadpcm.delta[1] = (adaptationTable[((nibbles & 0x0F) >> 0)] * pWav->msadpcm.delta[1]) >> 8; + if (pWav->msadpcm.delta[1] < 16) { + pWav->msadpcm.delta[1] = 16; + } + + pWav->msadpcm.prevFrames[1][0] = pWav->msadpcm.prevFrames[1][1]; + pWav->msadpcm.prevFrames[1][1] = newSample1; + + pWav->msadpcm.cachedFrames[2] = newSample0; + pWav->msadpcm.cachedFrames[3] = newSample1; + pWav->msadpcm.cachedFrameCount = 1; + } + } + } + } + + return totalFramesRead; +} + + +static drwav_uint64 drwav_read_pcm_frames_s16__ima(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut) +{ + drwav_uint64 totalFramesRead = 0; + drwav_uint32 iChannel; + + static drwav_int32 indexTable[16] = { + -1, -1, -1, -1, 2, 4, 6, 8, + -1, -1, -1, -1, 2, 4, 6, 8 + }; + + static drwav_int32 stepTable[89] = { + 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, + 19, 21, 23, 25, 28, 31, 34, 37, 41, 45, + 50, 55, 60, 66, 73, 80, 88, 97, 107, 118, + 130, 143, 157, 173, 190, 209, 230, 253, 279, 307, + 337, 371, 408, 449, 494, 544, 598, 658, 724, 796, + 876, 963, 1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066, + 2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358, + 5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899, + 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767 + }; + + DRWAV_ASSERT(pWav != NULL); + DRWAV_ASSERT(framesToRead > 0); + + /* TODO: Lots of room for optimization here. */ + + while (framesToRead > 0 && pWav->compressed.iCurrentPCMFrame < pWav->totalPCMFrameCount) { + /* If there are no cached samples we need to load a new block. */ + if (pWav->ima.cachedFrameCount == 0 && pWav->ima.bytesRemainingInBlock == 0) { + if (pWav->channels == 1) { + /* Mono. */ + drwav_uint8 header[4]; + if (pWav->onRead(pWav->pUserData, header, sizeof(header)) != sizeof(header)) { + return totalFramesRead; + } + pWav->ima.bytesRemainingInBlock = pWav->fmt.blockAlign - sizeof(header); + + if (header[2] >= drwav_countof(stepTable)) { + pWav->onSeek(pWav->pUserData, pWav->ima.bytesRemainingInBlock, drwav_seek_origin_current); + pWav->ima.bytesRemainingInBlock = 0; + return totalFramesRead; /* Invalid data. */ + } + + pWav->ima.predictor[0] = drwav__bytes_to_s16(header + 0); + pWav->ima.stepIndex[0] = header[2]; + pWav->ima.cachedFrames[drwav_countof(pWav->ima.cachedFrames) - 1] = pWav->ima.predictor[0]; + pWav->ima.cachedFrameCount = 1; + } else { + /* Stereo. */ + drwav_uint8 header[8]; + if (pWav->onRead(pWav->pUserData, header, sizeof(header)) != sizeof(header)) { + return totalFramesRead; + } + pWav->ima.bytesRemainingInBlock = pWav->fmt.blockAlign - sizeof(header); + + if (header[2] >= drwav_countof(stepTable) || header[6] >= drwav_countof(stepTable)) { + pWav->onSeek(pWav->pUserData, pWav->ima.bytesRemainingInBlock, drwav_seek_origin_current); + pWav->ima.bytesRemainingInBlock = 0; + return totalFramesRead; /* Invalid data. */ + } + + pWav->ima.predictor[0] = drwav__bytes_to_s16(header + 0); + pWav->ima.stepIndex[0] = header[2]; + pWav->ima.predictor[1] = drwav__bytes_to_s16(header + 4); + pWav->ima.stepIndex[1] = header[6]; + + pWav->ima.cachedFrames[drwav_countof(pWav->ima.cachedFrames) - 2] = pWav->ima.predictor[0]; + pWav->ima.cachedFrames[drwav_countof(pWav->ima.cachedFrames) - 1] = pWav->ima.predictor[1]; + pWav->ima.cachedFrameCount = 1; + } + } + + /* Output anything that's cached. */ + while (framesToRead > 0 && pWav->ima.cachedFrameCount > 0 && pWav->compressed.iCurrentPCMFrame < pWav->totalPCMFrameCount) { + if (pBufferOut != NULL) { + drwav_uint32 iSample; + for (iSample = 0; iSample < pWav->channels; iSample += 1) { + pBufferOut[iSample] = (drwav_int16)pWav->ima.cachedFrames[(drwav_countof(pWav->ima.cachedFrames) - (pWav->ima.cachedFrameCount*pWav->channels)) + iSample]; + } + pBufferOut += pWav->channels; + } + + framesToRead -= 1; + totalFramesRead += 1; + pWav->compressed.iCurrentPCMFrame += 1; + pWav->ima.cachedFrameCount -= 1; + } + + if (framesToRead == 0) { + return totalFramesRead; + } + + /* + If there's nothing left in the cache, just go ahead and load more. If there's nothing left to load in the current block we just continue to the next + loop iteration which will trigger the loading of a new block. + */ + if (pWav->ima.cachedFrameCount == 0) { + if (pWav->ima.bytesRemainingInBlock == 0) { + continue; + } else { + /* + From what I can tell with stereo streams, it looks like every 4 bytes (8 samples) is for one channel. So it goes 4 bytes for the + left channel, 4 bytes for the right channel. + */ + pWav->ima.cachedFrameCount = 8; + for (iChannel = 0; iChannel < pWav->channels; ++iChannel) { + drwav_uint32 iByte; + drwav_uint8 nibbles[4]; + if (pWav->onRead(pWav->pUserData, &nibbles, 4) != 4) { + pWav->ima.cachedFrameCount = 0; + return totalFramesRead; + } + pWav->ima.bytesRemainingInBlock -= 4; + + for (iByte = 0; iByte < 4; ++iByte) { + drwav_uint8 nibble0 = ((nibbles[iByte] & 0x0F) >> 0); + drwav_uint8 nibble1 = ((nibbles[iByte] & 0xF0) >> 4); + + drwav_int32 step = stepTable[pWav->ima.stepIndex[iChannel]]; + drwav_int32 predictor = pWav->ima.predictor[iChannel]; + + drwav_int32 diff = step >> 3; + if (nibble0 & 1) diff += step >> 2; + if (nibble0 & 2) diff += step >> 1; + if (nibble0 & 4) diff += step; + if (nibble0 & 8) diff = -diff; + + predictor = drwav_clamp(predictor + diff, -32768, 32767); + pWav->ima.predictor[iChannel] = predictor; + pWav->ima.stepIndex[iChannel] = drwav_clamp(pWav->ima.stepIndex[iChannel] + indexTable[nibble0], 0, (drwav_int32)drwav_countof(stepTable)-1); + pWav->ima.cachedFrames[(drwav_countof(pWav->ima.cachedFrames) - (pWav->ima.cachedFrameCount*pWav->channels)) + (iByte*2+0)*pWav->channels + iChannel] = predictor; + + + step = stepTable[pWav->ima.stepIndex[iChannel]]; + predictor = pWav->ima.predictor[iChannel]; + + diff = step >> 3; + if (nibble1 & 1) diff += step >> 2; + if (nibble1 & 2) diff += step >> 1; + if (nibble1 & 4) diff += step; + if (nibble1 & 8) diff = -diff; + + predictor = drwav_clamp(predictor + diff, -32768, 32767); + pWav->ima.predictor[iChannel] = predictor; + pWav->ima.stepIndex[iChannel] = drwav_clamp(pWav->ima.stepIndex[iChannel] + indexTable[nibble1], 0, (drwav_int32)drwav_countof(stepTable)-1); + pWav->ima.cachedFrames[(drwav_countof(pWav->ima.cachedFrames) - (pWav->ima.cachedFrameCount*pWav->channels)) + (iByte*2+1)*pWav->channels + iChannel] = predictor; + } + } + } + } + } + + return totalFramesRead; +} + + +#ifndef DR_WAV_NO_CONVERSION_API +static unsigned short g_drwavAlawTable[256] = { + 0xEA80, 0xEB80, 0xE880, 0xE980, 0xEE80, 0xEF80, 0xEC80, 0xED80, 0xE280, 0xE380, 0xE080, 0xE180, 0xE680, 0xE780, 0xE480, 0xE580, + 0xF540, 0xF5C0, 0xF440, 0xF4C0, 0xF740, 0xF7C0, 0xF640, 0xF6C0, 0xF140, 0xF1C0, 0xF040, 0xF0C0, 0xF340, 0xF3C0, 0xF240, 0xF2C0, + 0xAA00, 0xAE00, 0xA200, 0xA600, 0xBA00, 0xBE00, 0xB200, 0xB600, 0x8A00, 0x8E00, 0x8200, 0x8600, 0x9A00, 0x9E00, 0x9200, 0x9600, + 0xD500, 0xD700, 0xD100, 0xD300, 0xDD00, 0xDF00, 0xD900, 0xDB00, 0xC500, 0xC700, 0xC100, 0xC300, 0xCD00, 0xCF00, 0xC900, 0xCB00, + 0xFEA8, 0xFEB8, 0xFE88, 0xFE98, 0xFEE8, 0xFEF8, 0xFEC8, 0xFED8, 0xFE28, 0xFE38, 0xFE08, 0xFE18, 0xFE68, 0xFE78, 0xFE48, 0xFE58, + 0xFFA8, 0xFFB8, 0xFF88, 0xFF98, 0xFFE8, 0xFFF8, 0xFFC8, 0xFFD8, 0xFF28, 0xFF38, 0xFF08, 0xFF18, 0xFF68, 0xFF78, 0xFF48, 0xFF58, + 0xFAA0, 0xFAE0, 0xFA20, 0xFA60, 0xFBA0, 0xFBE0, 0xFB20, 0xFB60, 0xF8A0, 0xF8E0, 0xF820, 0xF860, 0xF9A0, 0xF9E0, 0xF920, 0xF960, + 0xFD50, 0xFD70, 0xFD10, 0xFD30, 0xFDD0, 0xFDF0, 0xFD90, 0xFDB0, 0xFC50, 0xFC70, 0xFC10, 0xFC30, 0xFCD0, 0xFCF0, 0xFC90, 0xFCB0, + 0x1580, 0x1480, 0x1780, 0x1680, 0x1180, 0x1080, 0x1380, 0x1280, 0x1D80, 0x1C80, 0x1F80, 0x1E80, 0x1980, 0x1880, 0x1B80, 0x1A80, + 0x0AC0, 0x0A40, 0x0BC0, 0x0B40, 0x08C0, 0x0840, 0x09C0, 0x0940, 0x0EC0, 0x0E40, 0x0FC0, 0x0F40, 0x0CC0, 0x0C40, 0x0DC0, 0x0D40, + 0x5600, 0x5200, 0x5E00, 0x5A00, 0x4600, 0x4200, 0x4E00, 0x4A00, 0x7600, 0x7200, 0x7E00, 0x7A00, 0x6600, 0x6200, 0x6E00, 0x6A00, + 0x2B00, 0x2900, 0x2F00, 0x2D00, 0x2300, 0x2100, 0x2700, 0x2500, 0x3B00, 0x3900, 0x3F00, 0x3D00, 0x3300, 0x3100, 0x3700, 0x3500, + 0x0158, 0x0148, 0x0178, 0x0168, 0x0118, 0x0108, 0x0138, 0x0128, 0x01D8, 0x01C8, 0x01F8, 0x01E8, 0x0198, 0x0188, 0x01B8, 0x01A8, + 0x0058, 0x0048, 0x0078, 0x0068, 0x0018, 0x0008, 0x0038, 0x0028, 0x00D8, 0x00C8, 0x00F8, 0x00E8, 0x0098, 0x0088, 0x00B8, 0x00A8, + 0x0560, 0x0520, 0x05E0, 0x05A0, 0x0460, 0x0420, 0x04E0, 0x04A0, 0x0760, 0x0720, 0x07E0, 0x07A0, 0x0660, 0x0620, 0x06E0, 0x06A0, + 0x02B0, 0x0290, 0x02F0, 0x02D0, 0x0230, 0x0210, 0x0270, 0x0250, 0x03B0, 0x0390, 0x03F0, 0x03D0, 0x0330, 0x0310, 0x0370, 0x0350 +}; + +static unsigned short g_drwavMulawTable[256] = { + 0x8284, 0x8684, 0x8A84, 0x8E84, 0x9284, 0x9684, 0x9A84, 0x9E84, 0xA284, 0xA684, 0xAA84, 0xAE84, 0xB284, 0xB684, 0xBA84, 0xBE84, + 0xC184, 0xC384, 0xC584, 0xC784, 0xC984, 0xCB84, 0xCD84, 0xCF84, 0xD184, 0xD384, 0xD584, 0xD784, 0xD984, 0xDB84, 0xDD84, 0xDF84, + 0xE104, 0xE204, 0xE304, 0xE404, 0xE504, 0xE604, 0xE704, 0xE804, 0xE904, 0xEA04, 0xEB04, 0xEC04, 0xED04, 0xEE04, 0xEF04, 0xF004, + 0xF0C4, 0xF144, 0xF1C4, 0xF244, 0xF2C4, 0xF344, 0xF3C4, 0xF444, 0xF4C4, 0xF544, 0xF5C4, 0xF644, 0xF6C4, 0xF744, 0xF7C4, 0xF844, + 0xF8A4, 0xF8E4, 0xF924, 0xF964, 0xF9A4, 0xF9E4, 0xFA24, 0xFA64, 0xFAA4, 0xFAE4, 0xFB24, 0xFB64, 0xFBA4, 0xFBE4, 0xFC24, 0xFC64, + 0xFC94, 0xFCB4, 0xFCD4, 0xFCF4, 0xFD14, 0xFD34, 0xFD54, 0xFD74, 0xFD94, 0xFDB4, 0xFDD4, 0xFDF4, 0xFE14, 0xFE34, 0xFE54, 0xFE74, + 0xFE8C, 0xFE9C, 0xFEAC, 0xFEBC, 0xFECC, 0xFEDC, 0xFEEC, 0xFEFC, 0xFF0C, 0xFF1C, 0xFF2C, 0xFF3C, 0xFF4C, 0xFF5C, 0xFF6C, 0xFF7C, + 0xFF88, 0xFF90, 0xFF98, 0xFFA0, 0xFFA8, 0xFFB0, 0xFFB8, 0xFFC0, 0xFFC8, 0xFFD0, 0xFFD8, 0xFFE0, 0xFFE8, 0xFFF0, 0xFFF8, 0x0000, + 0x7D7C, 0x797C, 0x757C, 0x717C, 0x6D7C, 0x697C, 0x657C, 0x617C, 0x5D7C, 0x597C, 0x557C, 0x517C, 0x4D7C, 0x497C, 0x457C, 0x417C, + 0x3E7C, 0x3C7C, 0x3A7C, 0x387C, 0x367C, 0x347C, 0x327C, 0x307C, 0x2E7C, 0x2C7C, 0x2A7C, 0x287C, 0x267C, 0x247C, 0x227C, 0x207C, + 0x1EFC, 0x1DFC, 0x1CFC, 0x1BFC, 0x1AFC, 0x19FC, 0x18FC, 0x17FC, 0x16FC, 0x15FC, 0x14FC, 0x13FC, 0x12FC, 0x11FC, 0x10FC, 0x0FFC, + 0x0F3C, 0x0EBC, 0x0E3C, 0x0DBC, 0x0D3C, 0x0CBC, 0x0C3C, 0x0BBC, 0x0B3C, 0x0ABC, 0x0A3C, 0x09BC, 0x093C, 0x08BC, 0x083C, 0x07BC, + 0x075C, 0x071C, 0x06DC, 0x069C, 0x065C, 0x061C, 0x05DC, 0x059C, 0x055C, 0x051C, 0x04DC, 0x049C, 0x045C, 0x041C, 0x03DC, 0x039C, + 0x036C, 0x034C, 0x032C, 0x030C, 0x02EC, 0x02CC, 0x02AC, 0x028C, 0x026C, 0x024C, 0x022C, 0x020C, 0x01EC, 0x01CC, 0x01AC, 0x018C, + 0x0174, 0x0164, 0x0154, 0x0144, 0x0134, 0x0124, 0x0114, 0x0104, 0x00F4, 0x00E4, 0x00D4, 0x00C4, 0x00B4, 0x00A4, 0x0094, 0x0084, + 0x0078, 0x0070, 0x0068, 0x0060, 0x0058, 0x0050, 0x0048, 0x0040, 0x0038, 0x0030, 0x0028, 0x0020, 0x0018, 0x0010, 0x0008, 0x0000 +}; + +static DRWAV_INLINE drwav_int16 drwav__alaw_to_s16(drwav_uint8 sampleIn) +{ + return (short)g_drwavAlawTable[sampleIn]; +} + +static DRWAV_INLINE drwav_int16 drwav__mulaw_to_s16(drwav_uint8 sampleIn) +{ + return (short)g_drwavMulawTable[sampleIn]; +} + + + +static void drwav__pcm_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, size_t totalSampleCount, unsigned int bytesPerSample) +{ + unsigned int i; + + /* Special case for 8-bit sample data because it's treated as unsigned. */ + if (bytesPerSample == 1) { + drwav_u8_to_s16(pOut, pIn, totalSampleCount); + return; + } + + + /* Slightly more optimal implementation for common formats. */ + if (bytesPerSample == 2) { + for (i = 0; i < totalSampleCount; ++i) { + *pOut++ = ((const drwav_int16*)pIn)[i]; + } + return; + } + if (bytesPerSample == 3) { + drwav_s24_to_s16(pOut, pIn, totalSampleCount); + return; + } + if (bytesPerSample == 4) { + drwav_s32_to_s16(pOut, (const drwav_int32*)pIn, totalSampleCount); + return; + } + + + /* Anything more than 64 bits per sample is not supported. */ + if (bytesPerSample > 8) { + DRWAV_ZERO_MEMORY(pOut, totalSampleCount * sizeof(*pOut)); + return; + } + + + /* Generic, slow converter. */ + for (i = 0; i < totalSampleCount; ++i) { + drwav_uint64 sample = 0; + unsigned int shift = (8 - bytesPerSample) * 8; + + unsigned int j; + for (j = 0; j < bytesPerSample; j += 1) { + DRWAV_ASSERT(j < 8); + sample |= (drwav_uint64)(pIn[j]) << shift; + shift += 8; + } + + pIn += j; + *pOut++ = (drwav_int16)((drwav_int64)sample >> 48); + } +} + +static void drwav__ieee_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, size_t totalSampleCount, unsigned int bytesPerSample) +{ + if (bytesPerSample == 4) { + drwav_f32_to_s16(pOut, (const float*)pIn, totalSampleCount); + return; + } else if (bytesPerSample == 8) { + drwav_f64_to_s16(pOut, (const double*)pIn, totalSampleCount); + return; + } else { + /* Only supporting 32- and 64-bit float. Output silence in all other cases. Contributions welcome for 16-bit float. */ + DRWAV_ZERO_MEMORY(pOut, totalSampleCount * sizeof(*pOut)); + return; + } +} + +static drwav_uint64 drwav_read_pcm_frames_s16__pcm(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut) +{ + drwav_uint32 bytesPerFrame; + drwav_uint64 totalFramesRead; + drwav_uint8 sampleData[4096]; + + /* Fast path. */ + if ((pWav->translatedFormatTag == DR_WAVE_FORMAT_PCM && pWav->bitsPerSample == 16) || pBufferOut == NULL) { + return drwav_read_pcm_frames(pWav, framesToRead, pBufferOut); + } + + bytesPerFrame = drwav_get_bytes_per_pcm_frame(pWav); + if (bytesPerFrame == 0) { + return 0; + } + + totalFramesRead = 0; + + while (framesToRead > 0) { + drwav_uint64 framesRead = drwav_read_pcm_frames(pWav, drwav_min(framesToRead, sizeof(sampleData)/bytesPerFrame), sampleData); + if (framesRead == 0) { + break; + } + + drwav__pcm_to_s16(pBufferOut, sampleData, (size_t)(framesRead*pWav->channels), bytesPerFrame/pWav->channels); + + pBufferOut += framesRead*pWav->channels; + framesToRead -= framesRead; + totalFramesRead += framesRead; + } + + return totalFramesRead; +} + +static drwav_uint64 drwav_read_pcm_frames_s16__ieee(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut) +{ + drwav_uint64 totalFramesRead; + drwav_uint8 sampleData[4096]; + drwav_uint32 bytesPerFrame; + + if (pBufferOut == NULL) { + return drwav_read_pcm_frames(pWav, framesToRead, NULL); + } + + bytesPerFrame = drwav_get_bytes_per_pcm_frame(pWav); + if (bytesPerFrame == 0) { + return 0; + } + + totalFramesRead = 0; + + while (framesToRead > 0) { + drwav_uint64 framesRead = drwav_read_pcm_frames(pWav, drwav_min(framesToRead, sizeof(sampleData)/bytesPerFrame), sampleData); + if (framesRead == 0) { + break; + } + + drwav__ieee_to_s16(pBufferOut, sampleData, (size_t)(framesRead*pWav->channels), bytesPerFrame/pWav->channels); + + pBufferOut += framesRead*pWav->channels; + framesToRead -= framesRead; + totalFramesRead += framesRead; + } + + return totalFramesRead; +} + +static drwav_uint64 drwav_read_pcm_frames_s16__alaw(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut) +{ + drwav_uint64 totalFramesRead; + drwav_uint8 sampleData[4096]; + drwav_uint32 bytesPerFrame; + + if (pBufferOut == NULL) { + return drwav_read_pcm_frames(pWav, framesToRead, NULL); + } + + bytesPerFrame = drwav_get_bytes_per_pcm_frame(pWav); + if (bytesPerFrame == 0) { + return 0; + } + + totalFramesRead = 0; + + while (framesToRead > 0) { + drwav_uint64 framesRead = drwav_read_pcm_frames(pWav, drwav_min(framesToRead, sizeof(sampleData)/bytesPerFrame), sampleData); + if (framesRead == 0) { + break; + } + + drwav_alaw_to_s16(pBufferOut, sampleData, (size_t)(framesRead*pWav->channels)); + + pBufferOut += framesRead*pWav->channels; + framesToRead -= framesRead; + totalFramesRead += framesRead; + } + + return totalFramesRead; +} + +static drwav_uint64 drwav_read_pcm_frames_s16__mulaw(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut) +{ + drwav_uint64 totalFramesRead; + drwav_uint8 sampleData[4096]; + drwav_uint32 bytesPerFrame; + + if (pBufferOut == NULL) { + return drwav_read_pcm_frames(pWav, framesToRead, NULL); + } + + bytesPerFrame = drwav_get_bytes_per_pcm_frame(pWav); + if (bytesPerFrame == 0) { + return 0; + } + + totalFramesRead = 0; + + while (framesToRead > 0) { + drwav_uint64 framesRead = drwav_read_pcm_frames(pWav, drwav_min(framesToRead, sizeof(sampleData)/bytesPerFrame), sampleData); + if (framesRead == 0) { + break; + } + + drwav_mulaw_to_s16(pBufferOut, sampleData, (size_t)(framesRead*pWav->channels)); + + pBufferOut += framesRead*pWav->channels; + framesToRead -= framesRead; + totalFramesRead += framesRead; + } + + return totalFramesRead; +} + +DRWAV_API drwav_uint64 drwav_read_pcm_frames_s16(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut) +{ + if (pWav == NULL || framesToRead == 0) { + return 0; + } + + if (pBufferOut == NULL) { + return drwav_read_pcm_frames(pWav, framesToRead, NULL); + } + + /* Don't try to read more samples than can potentially fit in the output buffer. */ + if (framesToRead * pWav->channels * sizeof(drwav_int16) > DRWAV_SIZE_MAX) { + framesToRead = DRWAV_SIZE_MAX / sizeof(drwav_int16) / pWav->channels; + } + + if (pWav->translatedFormatTag == DR_WAVE_FORMAT_PCM) { + return drwav_read_pcm_frames_s16__pcm(pWav, framesToRead, pBufferOut); + } + + if (pWav->translatedFormatTag == DR_WAVE_FORMAT_IEEE_FLOAT) { + return drwav_read_pcm_frames_s16__ieee(pWav, framesToRead, pBufferOut); + } + + if (pWav->translatedFormatTag == DR_WAVE_FORMAT_ALAW) { + return drwav_read_pcm_frames_s16__alaw(pWav, framesToRead, pBufferOut); + } + + if (pWav->translatedFormatTag == DR_WAVE_FORMAT_MULAW) { + return drwav_read_pcm_frames_s16__mulaw(pWav, framesToRead, pBufferOut); + } + + if (pWav->translatedFormatTag == DR_WAVE_FORMAT_ADPCM) { + return drwav_read_pcm_frames_s16__msadpcm(pWav, framesToRead, pBufferOut); + } + + if (pWav->translatedFormatTag == DR_WAVE_FORMAT_DVI_ADPCM) { + return drwav_read_pcm_frames_s16__ima(pWav, framesToRead, pBufferOut); + } + + return 0; +} + +DRWAV_API drwav_uint64 drwav_read_pcm_frames_s16le(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut) +{ + drwav_uint64 framesRead = drwav_read_pcm_frames_s16(pWav, framesToRead, pBufferOut); + if (pBufferOut != NULL && drwav__is_little_endian() == DRWAV_FALSE) { + drwav__bswap_samples_s16(pBufferOut, framesRead*pWav->channels); + } + + return framesRead; +} + +DRWAV_API drwav_uint64 drwav_read_pcm_frames_s16be(drwav* pWav, drwav_uint64 framesToRead, drwav_int16* pBufferOut) +{ + drwav_uint64 framesRead = drwav_read_pcm_frames_s16(pWav, framesToRead, pBufferOut); + if (pBufferOut != NULL && drwav__is_little_endian() == DRWAV_TRUE) { + drwav__bswap_samples_s16(pBufferOut, framesRead*pWav->channels); + } + + return framesRead; +} + + +DRWAV_API void drwav_u8_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, size_t sampleCount) +{ + int r; + size_t i; + for (i = 0; i < sampleCount; ++i) { + int x = pIn[i]; + r = x << 8; + r = r - 32768; + pOut[i] = (short)r; + } +} + +DRWAV_API void drwav_s24_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, size_t sampleCount) +{ + int r; + size_t i; + for (i = 0; i < sampleCount; ++i) { + int x = ((int)(((unsigned int)(((const drwav_uint8*)pIn)[i*3+0]) << 8) | ((unsigned int)(((const drwav_uint8*)pIn)[i*3+1]) << 16) | ((unsigned int)(((const drwav_uint8*)pIn)[i*3+2])) << 24)) >> 8; + r = x >> 8; + pOut[i] = (short)r; + } +} + +DRWAV_API void drwav_s32_to_s16(drwav_int16* pOut, const drwav_int32* pIn, size_t sampleCount) +{ + int r; + size_t i; + for (i = 0; i < sampleCount; ++i) { + int x = pIn[i]; + r = x >> 16; + pOut[i] = (short)r; + } +} + +DRWAV_API void drwav_f32_to_s16(drwav_int16* pOut, const float* pIn, size_t sampleCount) +{ + int r; + size_t i; + for (i = 0; i < sampleCount; ++i) { + float x = pIn[i]; + float c; + c = ((x < -1) ? -1 : ((x > 1) ? 1 : x)); + c = c + 1; + r = (int)(c * 32767.5f); + r = r - 32768; + pOut[i] = (short)r; + } +} + +DRWAV_API void drwav_f64_to_s16(drwav_int16* pOut, const double* pIn, size_t sampleCount) +{ + int r; + size_t i; + for (i = 0; i < sampleCount; ++i) { + double x = pIn[i]; + double c; + c = ((x < -1) ? -1 : ((x > 1) ? 1 : x)); + c = c + 1; + r = (int)(c * 32767.5); + r = r - 32768; + pOut[i] = (short)r; + } +} + +DRWAV_API void drwav_alaw_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, size_t sampleCount) +{ + size_t i; + for (i = 0; i < sampleCount; ++i) { + pOut[i] = drwav__alaw_to_s16(pIn[i]); + } +} + +DRWAV_API void drwav_mulaw_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, size_t sampleCount) +{ + size_t i; + for (i = 0; i < sampleCount; ++i) { + pOut[i] = drwav__mulaw_to_s16(pIn[i]); + } +} + + + +static void drwav__pcm_to_f32(float* pOut, const drwav_uint8* pIn, size_t sampleCount, unsigned int bytesPerSample) +{ + unsigned int i; + + /* Special case for 8-bit sample data because it's treated as unsigned. */ + if (bytesPerSample == 1) { + drwav_u8_to_f32(pOut, pIn, sampleCount); + return; + } + + /* Slightly more optimal implementation for common formats. */ + if (bytesPerSample == 2) { + drwav_s16_to_f32(pOut, (const drwav_int16*)pIn, sampleCount); + return; + } + if (bytesPerSample == 3) { + drwav_s24_to_f32(pOut, pIn, sampleCount); + return; + } + if (bytesPerSample == 4) { + drwav_s32_to_f32(pOut, (const drwav_int32*)pIn, sampleCount); + return; + } + + + /* Anything more than 64 bits per sample is not supported. */ + if (bytesPerSample > 8) { + DRWAV_ZERO_MEMORY(pOut, sampleCount * sizeof(*pOut)); + return; + } + + + /* Generic, slow converter. */ + for (i = 0; i < sampleCount; ++i) { + drwav_uint64 sample = 0; + unsigned int shift = (8 - bytesPerSample) * 8; + + unsigned int j; + for (j = 0; j < bytesPerSample; j += 1) { + DRWAV_ASSERT(j < 8); + sample |= (drwav_uint64)(pIn[j]) << shift; + shift += 8; + } + + pIn += j; + *pOut++ = (float)((drwav_int64)sample / 9223372036854775807.0); + } +} + +static void drwav__ieee_to_f32(float* pOut, const drwav_uint8* pIn, size_t sampleCount, unsigned int bytesPerSample) +{ + if (bytesPerSample == 4) { + unsigned int i; + for (i = 0; i < sampleCount; ++i) { + *pOut++ = ((const float*)pIn)[i]; + } + return; + } else if (bytesPerSample == 8) { + drwav_f64_to_f32(pOut, (const double*)pIn, sampleCount); + return; + } else { + /* Only supporting 32- and 64-bit float. Output silence in all other cases. Contributions welcome for 16-bit float. */ + DRWAV_ZERO_MEMORY(pOut, sampleCount * sizeof(*pOut)); + return; + } +} + + +static drwav_uint64 drwav_read_pcm_frames_f32__pcm(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut) +{ + drwav_uint64 totalFramesRead; + drwav_uint8 sampleData[4096]; + + drwav_uint32 bytesPerFrame = drwav_get_bytes_per_pcm_frame(pWav); + if (bytesPerFrame == 0) { + return 0; + } + + totalFramesRead = 0; + + while (framesToRead > 0) { + drwav_uint64 framesRead = drwav_read_pcm_frames(pWav, drwav_min(framesToRead, sizeof(sampleData)/bytesPerFrame), sampleData); + if (framesRead == 0) { + break; + } + + drwav__pcm_to_f32(pBufferOut, sampleData, (size_t)framesRead*pWav->channels, bytesPerFrame/pWav->channels); + + pBufferOut += framesRead*pWav->channels; + framesToRead -= framesRead; + totalFramesRead += framesRead; + } + + return totalFramesRead; +} + +static drwav_uint64 drwav_read_pcm_frames_f32__msadpcm(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut) +{ + /* + We're just going to borrow the implementation from the drwav_read_s16() since ADPCM is a little bit more complicated than other formats and I don't + want to duplicate that code. + */ + drwav_uint64 totalFramesRead = 0; + drwav_int16 samples16[2048]; + while (framesToRead > 0) { + drwav_uint64 framesRead = drwav_read_pcm_frames_s16(pWav, drwav_min(framesToRead, drwav_countof(samples16)/pWav->channels), samples16); + if (framesRead == 0) { + break; + } + + drwav_s16_to_f32(pBufferOut, samples16, (size_t)(framesRead*pWav->channels)); /* <-- Safe cast because we're clamping to 2048. */ + + pBufferOut += framesRead*pWav->channels; + framesToRead -= framesRead; + totalFramesRead += framesRead; + } + + return totalFramesRead; +} + +static drwav_uint64 drwav_read_pcm_frames_f32__ima(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut) +{ + /* + We're just going to borrow the implementation from the drwav_read_s16() since IMA-ADPCM is a little bit more complicated than other formats and I don't + want to duplicate that code. + */ + drwav_uint64 totalFramesRead = 0; + drwav_int16 samples16[2048]; + while (framesToRead > 0) { + drwav_uint64 framesRead = drwav_read_pcm_frames_s16(pWav, drwav_min(framesToRead, drwav_countof(samples16)/pWav->channels), samples16); + if (framesRead == 0) { + break; + } + + drwav_s16_to_f32(pBufferOut, samples16, (size_t)(framesRead*pWav->channels)); /* <-- Safe cast because we're clamping to 2048. */ + + pBufferOut += framesRead*pWav->channels; + framesToRead -= framesRead; + totalFramesRead += framesRead; + } + + return totalFramesRead; +} + +static drwav_uint64 drwav_read_pcm_frames_f32__ieee(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut) +{ + drwav_uint64 totalFramesRead; + drwav_uint8 sampleData[4096]; + drwav_uint32 bytesPerFrame; + + /* Fast path. */ + if (pWav->translatedFormatTag == DR_WAVE_FORMAT_IEEE_FLOAT && pWav->bitsPerSample == 32) { + return drwav_read_pcm_frames(pWav, framesToRead, pBufferOut); + } + + bytesPerFrame = drwav_get_bytes_per_pcm_frame(pWav); + if (bytesPerFrame == 0) { + return 0; + } + + totalFramesRead = 0; + + while (framesToRead > 0) { + drwav_uint64 framesRead = drwav_read_pcm_frames(pWav, drwav_min(framesToRead, sizeof(sampleData)/bytesPerFrame), sampleData); + if (framesRead == 0) { + break; + } + + drwav__ieee_to_f32(pBufferOut, sampleData, (size_t)(framesRead*pWav->channels), bytesPerFrame/pWav->channels); + + pBufferOut += framesRead*pWav->channels; + framesToRead -= framesRead; + totalFramesRead += framesRead; + } + + return totalFramesRead; +} + +static drwav_uint64 drwav_read_pcm_frames_f32__alaw(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut) +{ + drwav_uint64 totalFramesRead; + drwav_uint8 sampleData[4096]; + drwav_uint32 bytesPerFrame = drwav_get_bytes_per_pcm_frame(pWav); + if (bytesPerFrame == 0) { + return 0; + } + + totalFramesRead = 0; + + while (framesToRead > 0) { + drwav_uint64 framesRead = drwav_read_pcm_frames(pWav, drwav_min(framesToRead, sizeof(sampleData)/bytesPerFrame), sampleData); + if (framesRead == 0) { + break; + } + + drwav_alaw_to_f32(pBufferOut, sampleData, (size_t)(framesRead*pWav->channels)); + + pBufferOut += framesRead*pWav->channels; + framesToRead -= framesRead; + totalFramesRead += framesRead; + } + + return totalFramesRead; +} + +static drwav_uint64 drwav_read_pcm_frames_f32__mulaw(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut) +{ + drwav_uint64 totalFramesRead; + drwav_uint8 sampleData[4096]; + + drwav_uint32 bytesPerFrame = drwav_get_bytes_per_pcm_frame(pWav); + if (bytesPerFrame == 0) { + return 0; + } + + totalFramesRead = 0; + + while (framesToRead > 0) { + drwav_uint64 framesRead = drwav_read_pcm_frames(pWav, drwav_min(framesToRead, sizeof(sampleData)/bytesPerFrame), sampleData); + if (framesRead == 0) { + break; + } + + drwav_mulaw_to_f32(pBufferOut, sampleData, (size_t)(framesRead*pWav->channels)); + + pBufferOut += framesRead*pWav->channels; + framesToRead -= framesRead; + totalFramesRead += framesRead; + } + + return totalFramesRead; +} + +DRWAV_API drwav_uint64 drwav_read_pcm_frames_f32(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut) +{ + if (pWav == NULL || framesToRead == 0) { + return 0; + } + + if (pBufferOut == NULL) { + return drwav_read_pcm_frames(pWav, framesToRead, NULL); + } + + /* Don't try to read more samples than can potentially fit in the output buffer. */ + if (framesToRead * pWav->channels * sizeof(float) > DRWAV_SIZE_MAX) { + framesToRead = DRWAV_SIZE_MAX / sizeof(float) / pWav->channels; + } + + if (pWav->translatedFormatTag == DR_WAVE_FORMAT_PCM) { + return drwav_read_pcm_frames_f32__pcm(pWav, framesToRead, pBufferOut); + } + + if (pWav->translatedFormatTag == DR_WAVE_FORMAT_ADPCM) { + return drwav_read_pcm_frames_f32__msadpcm(pWav, framesToRead, pBufferOut); + } + + if (pWav->translatedFormatTag == DR_WAVE_FORMAT_IEEE_FLOAT) { + return drwav_read_pcm_frames_f32__ieee(pWav, framesToRead, pBufferOut); + } + + if (pWav->translatedFormatTag == DR_WAVE_FORMAT_ALAW) { + return drwav_read_pcm_frames_f32__alaw(pWav, framesToRead, pBufferOut); + } + + if (pWav->translatedFormatTag == DR_WAVE_FORMAT_MULAW) { + return drwav_read_pcm_frames_f32__mulaw(pWav, framesToRead, pBufferOut); + } + + if (pWav->translatedFormatTag == DR_WAVE_FORMAT_DVI_ADPCM) { + return drwav_read_pcm_frames_f32__ima(pWav, framesToRead, pBufferOut); + } + + return 0; +} + +DRWAV_API drwav_uint64 drwav_read_pcm_frames_f32le(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut) +{ + drwav_uint64 framesRead = drwav_read_pcm_frames_f32(pWav, framesToRead, pBufferOut); + if (pBufferOut != NULL && drwav__is_little_endian() == DRWAV_FALSE) { + drwav__bswap_samples_f32(pBufferOut, framesRead*pWav->channels); + } + + return framesRead; +} + +DRWAV_API drwav_uint64 drwav_read_pcm_frames_f32be(drwav* pWav, drwav_uint64 framesToRead, float* pBufferOut) +{ + drwav_uint64 framesRead = drwav_read_pcm_frames_f32(pWav, framesToRead, pBufferOut); + if (pBufferOut != NULL && drwav__is_little_endian() == DRWAV_TRUE) { + drwav__bswap_samples_f32(pBufferOut, framesRead*pWav->channels); + } + + return framesRead; +} + + +DRWAV_API void drwav_u8_to_f32(float* pOut, const drwav_uint8* pIn, size_t sampleCount) +{ + size_t i; + + if (pOut == NULL || pIn == NULL) { + return; + } + +#ifdef DR_WAV_LIBSNDFILE_COMPAT + /* + It appears libsndfile uses slightly different logic for the u8 -> f32 conversion to dr_wav, which in my opinion is incorrect. It appears + libsndfile performs the conversion something like "f32 = (u8 / 256) * 2 - 1", however I think it should be "f32 = (u8 / 255) * 2 - 1" (note + the divisor of 256 vs 255). I use libsndfile as a benchmark for testing, so I'm therefore leaving this block here just for my automated + correctness testing. This is disabled by default. + */ + for (i = 0; i < sampleCount; ++i) { + *pOut++ = (pIn[i] / 256.0f) * 2 - 1; + } +#else + for (i = 0; i < sampleCount; ++i) { + float x = pIn[i]; + x = x * 0.00784313725490196078f; /* 0..255 to 0..2 */ + x = x - 1; /* 0..2 to -1..1 */ + + *pOut++ = x; + } +#endif +} + +DRWAV_API void drwav_s16_to_f32(float* pOut, const drwav_int16* pIn, size_t sampleCount) +{ + size_t i; + + if (pOut == NULL || pIn == NULL) { + return; + } + + for (i = 0; i < sampleCount; ++i) { + *pOut++ = pIn[i] * 0.000030517578125f; + } +} + +DRWAV_API void drwav_s24_to_f32(float* pOut, const drwav_uint8* pIn, size_t sampleCount) +{ + size_t i; + + if (pOut == NULL || pIn == NULL) { + return; + } + + for (i = 0; i < sampleCount; ++i) { + double x; + drwav_uint32 a = ((drwav_uint32)(pIn[i*3+0]) << 8); + drwav_uint32 b = ((drwav_uint32)(pIn[i*3+1]) << 16); + drwav_uint32 c = ((drwav_uint32)(pIn[i*3+2]) << 24); + + x = (double)((drwav_int32)(a | b | c) >> 8); + *pOut++ = (float)(x * 0.00000011920928955078125); + } +} + +DRWAV_API void drwav_s32_to_f32(float* pOut, const drwav_int32* pIn, size_t sampleCount) +{ + size_t i; + if (pOut == NULL || pIn == NULL) { + return; + } + + for (i = 0; i < sampleCount; ++i) { + *pOut++ = (float)(pIn[i] / 2147483648.0); + } +} + +DRWAV_API void drwav_f64_to_f32(float* pOut, const double* pIn, size_t sampleCount) +{ + size_t i; + + if (pOut == NULL || pIn == NULL) { + return; + } + + for (i = 0; i < sampleCount; ++i) { + *pOut++ = (float)pIn[i]; + } +} + +DRWAV_API void drwav_alaw_to_f32(float* pOut, const drwav_uint8* pIn, size_t sampleCount) +{ + size_t i; + + if (pOut == NULL || pIn == NULL) { + return; + } + + for (i = 0; i < sampleCount; ++i) { + *pOut++ = drwav__alaw_to_s16(pIn[i]) / 32768.0f; + } +} + +DRWAV_API void drwav_mulaw_to_f32(float* pOut, const drwav_uint8* pIn, size_t sampleCount) +{ + size_t i; + + if (pOut == NULL || pIn == NULL) { + return; + } + + for (i = 0; i < sampleCount; ++i) { + *pOut++ = drwav__mulaw_to_s16(pIn[i]) / 32768.0f; + } +} + + + +static void drwav__pcm_to_s32(drwav_int32* pOut, const drwav_uint8* pIn, size_t totalSampleCount, unsigned int bytesPerSample) +{ + unsigned int i; + + /* Special case for 8-bit sample data because it's treated as unsigned. */ + if (bytesPerSample == 1) { + drwav_u8_to_s32(pOut, pIn, totalSampleCount); + return; + } + + /* Slightly more optimal implementation for common formats. */ + if (bytesPerSample == 2) { + drwav_s16_to_s32(pOut, (const drwav_int16*)pIn, totalSampleCount); + return; + } + if (bytesPerSample == 3) { + drwav_s24_to_s32(pOut, pIn, totalSampleCount); + return; + } + if (bytesPerSample == 4) { + for (i = 0; i < totalSampleCount; ++i) { + *pOut++ = ((const drwav_int32*)pIn)[i]; + } + return; + } + + + /* Anything more than 64 bits per sample is not supported. */ + if (bytesPerSample > 8) { + DRWAV_ZERO_MEMORY(pOut, totalSampleCount * sizeof(*pOut)); + return; + } + + + /* Generic, slow converter. */ + for (i = 0; i < totalSampleCount; ++i) { + drwav_uint64 sample = 0; + unsigned int shift = (8 - bytesPerSample) * 8; + + unsigned int j; + for (j = 0; j < bytesPerSample; j += 1) { + DRWAV_ASSERT(j < 8); + sample |= (drwav_uint64)(pIn[j]) << shift; + shift += 8; + } + + pIn += j; + *pOut++ = (drwav_int32)((drwav_int64)sample >> 32); + } +} + +static void drwav__ieee_to_s32(drwav_int32* pOut, const drwav_uint8* pIn, size_t totalSampleCount, unsigned int bytesPerSample) +{ + if (bytesPerSample == 4) { + drwav_f32_to_s32(pOut, (const float*)pIn, totalSampleCount); + return; + } else if (bytesPerSample == 8) { + drwav_f64_to_s32(pOut, (const double*)pIn, totalSampleCount); + return; + } else { + /* Only supporting 32- and 64-bit float. Output silence in all other cases. Contributions welcome for 16-bit float. */ + DRWAV_ZERO_MEMORY(pOut, totalSampleCount * sizeof(*pOut)); + return; + } +} + + +static drwav_uint64 drwav_read_pcm_frames_s32__pcm(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut) +{ + drwav_uint64 totalFramesRead; + drwav_uint8 sampleData[4096]; + drwav_uint32 bytesPerFrame; + + /* Fast path. */ + if (pWav->translatedFormatTag == DR_WAVE_FORMAT_PCM && pWav->bitsPerSample == 32) { + return drwav_read_pcm_frames(pWav, framesToRead, pBufferOut); + } + + bytesPerFrame = drwav_get_bytes_per_pcm_frame(pWav); + if (bytesPerFrame == 0) { + return 0; + } + + totalFramesRead = 0; + + while (framesToRead > 0) { + drwav_uint64 framesRead = drwav_read_pcm_frames(pWav, drwav_min(framesToRead, sizeof(sampleData)/bytesPerFrame), sampleData); + if (framesRead == 0) { + break; + } + + drwav__pcm_to_s32(pBufferOut, sampleData, (size_t)(framesRead*pWav->channels), bytesPerFrame/pWav->channels); + + pBufferOut += framesRead*pWav->channels; + framesToRead -= framesRead; + totalFramesRead += framesRead; + } + + return totalFramesRead; +} + +static drwav_uint64 drwav_read_pcm_frames_s32__msadpcm(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut) +{ + /* + We're just going to borrow the implementation from the drwav_read_s16() since ADPCM is a little bit more complicated than other formats and I don't + want to duplicate that code. + */ + drwav_uint64 totalFramesRead = 0; + drwav_int16 samples16[2048]; + while (framesToRead > 0) { + drwav_uint64 framesRead = drwav_read_pcm_frames_s16(pWav, drwav_min(framesToRead, drwav_countof(samples16)/pWav->channels), samples16); + if (framesRead == 0) { + break; + } + + drwav_s16_to_s32(pBufferOut, samples16, (size_t)(framesRead*pWav->channels)); /* <-- Safe cast because we're clamping to 2048. */ + + pBufferOut += framesRead*pWav->channels; + framesToRead -= framesRead; + totalFramesRead += framesRead; + } + + return totalFramesRead; +} + +static drwav_uint64 drwav_read_pcm_frames_s32__ima(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut) +{ + /* + We're just going to borrow the implementation from the drwav_read_s16() since IMA-ADPCM is a little bit more complicated than other formats and I don't + want to duplicate that code. + */ + drwav_uint64 totalFramesRead = 0; + drwav_int16 samples16[2048]; + while (framesToRead > 0) { + drwav_uint64 framesRead = drwav_read_pcm_frames_s16(pWav, drwav_min(framesToRead, drwav_countof(samples16)/pWav->channels), samples16); + if (framesRead == 0) { + break; + } + + drwav_s16_to_s32(pBufferOut, samples16, (size_t)(framesRead*pWav->channels)); /* <-- Safe cast because we're clamping to 2048. */ + + pBufferOut += framesRead*pWav->channels; + framesToRead -= framesRead; + totalFramesRead += framesRead; + } + + return totalFramesRead; +} + +static drwav_uint64 drwav_read_pcm_frames_s32__ieee(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut) +{ + drwav_uint64 totalFramesRead; + drwav_uint8 sampleData[4096]; + + drwav_uint32 bytesPerFrame = drwav_get_bytes_per_pcm_frame(pWav); + if (bytesPerFrame == 0) { + return 0; + } + + totalFramesRead = 0; + + while (framesToRead > 0) { + drwav_uint64 framesRead = drwav_read_pcm_frames(pWav, drwav_min(framesToRead, sizeof(sampleData)/bytesPerFrame), sampleData); + if (framesRead == 0) { + break; + } + + drwav__ieee_to_s32(pBufferOut, sampleData, (size_t)(framesRead*pWav->channels), bytesPerFrame/pWav->channels); + + pBufferOut += framesRead*pWav->channels; + framesToRead -= framesRead; + totalFramesRead += framesRead; + } + + return totalFramesRead; +} + +static drwav_uint64 drwav_read_pcm_frames_s32__alaw(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut) +{ + drwav_uint64 totalFramesRead; + drwav_uint8 sampleData[4096]; + + drwav_uint32 bytesPerFrame = drwav_get_bytes_per_pcm_frame(pWav); + if (bytesPerFrame == 0) { + return 0; + } + + totalFramesRead = 0; + + while (framesToRead > 0) { + drwav_uint64 framesRead = drwav_read_pcm_frames(pWav, drwav_min(framesToRead, sizeof(sampleData)/bytesPerFrame), sampleData); + if (framesRead == 0) { + break; + } + + drwav_alaw_to_s32(pBufferOut, sampleData, (size_t)(framesRead*pWav->channels)); + + pBufferOut += framesRead*pWav->channels; + framesToRead -= framesRead; + totalFramesRead += framesRead; + } + + return totalFramesRead; +} + +static drwav_uint64 drwav_read_pcm_frames_s32__mulaw(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut) +{ + drwav_uint64 totalFramesRead; + drwav_uint8 sampleData[4096]; + + drwav_uint32 bytesPerFrame = drwav_get_bytes_per_pcm_frame(pWav); + if (bytesPerFrame == 0) { + return 0; + } + + totalFramesRead = 0; + + while (framesToRead > 0) { + drwav_uint64 framesRead = drwav_read_pcm_frames(pWav, drwav_min(framesToRead, sizeof(sampleData)/bytesPerFrame), sampleData); + if (framesRead == 0) { + break; + } + + drwav_mulaw_to_s32(pBufferOut, sampleData, (size_t)(framesRead*pWav->channels)); + + pBufferOut += framesRead*pWav->channels; + framesToRead -= framesRead; + totalFramesRead += framesRead; + } + + return totalFramesRead; +} + +DRWAV_API drwav_uint64 drwav_read_pcm_frames_s32(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut) +{ + if (pWav == NULL || framesToRead == 0) { + return 0; + } + + if (pBufferOut == NULL) { + return drwav_read_pcm_frames(pWav, framesToRead, NULL); + } + + /* Don't try to read more samples than can potentially fit in the output buffer. */ + if (framesToRead * pWav->channels * sizeof(drwav_int32) > DRWAV_SIZE_MAX) { + framesToRead = DRWAV_SIZE_MAX / sizeof(drwav_int32) / pWav->channels; + } + + if (pWav->translatedFormatTag == DR_WAVE_FORMAT_PCM) { + return drwav_read_pcm_frames_s32__pcm(pWav, framesToRead, pBufferOut); + } + + if (pWav->translatedFormatTag == DR_WAVE_FORMAT_ADPCM) { + return drwav_read_pcm_frames_s32__msadpcm(pWav, framesToRead, pBufferOut); + } + + if (pWav->translatedFormatTag == DR_WAVE_FORMAT_IEEE_FLOAT) { + return drwav_read_pcm_frames_s32__ieee(pWav, framesToRead, pBufferOut); + } + + if (pWav->translatedFormatTag == DR_WAVE_FORMAT_ALAW) { + return drwav_read_pcm_frames_s32__alaw(pWav, framesToRead, pBufferOut); + } + + if (pWav->translatedFormatTag == DR_WAVE_FORMAT_MULAW) { + return drwav_read_pcm_frames_s32__mulaw(pWav, framesToRead, pBufferOut); + } + + if (pWav->translatedFormatTag == DR_WAVE_FORMAT_DVI_ADPCM) { + return drwav_read_pcm_frames_s32__ima(pWav, framesToRead, pBufferOut); + } + + return 0; +} + +DRWAV_API drwav_uint64 drwav_read_pcm_frames_s32le(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut) +{ + drwav_uint64 framesRead = drwav_read_pcm_frames_s32(pWav, framesToRead, pBufferOut); + if (pBufferOut != NULL && drwav__is_little_endian() == DRWAV_FALSE) { + drwav__bswap_samples_s32(pBufferOut, framesRead*pWav->channels); + } + + return framesRead; +} + +DRWAV_API drwav_uint64 drwav_read_pcm_frames_s32be(drwav* pWav, drwav_uint64 framesToRead, drwav_int32* pBufferOut) +{ + drwav_uint64 framesRead = drwav_read_pcm_frames_s32(pWav, framesToRead, pBufferOut); + if (pBufferOut != NULL && drwav__is_little_endian() == DRWAV_TRUE) { + drwav__bswap_samples_s32(pBufferOut, framesRead*pWav->channels); + } + + return framesRead; +} + + +DRWAV_API void drwav_u8_to_s32(drwav_int32* pOut, const drwav_uint8* pIn, size_t sampleCount) +{ + size_t i; + + if (pOut == NULL || pIn == NULL) { + return; + } + + for (i = 0; i < sampleCount; ++i) { + *pOut++ = ((int)pIn[i] - 128) << 24; + } +} + +DRWAV_API void drwav_s16_to_s32(drwav_int32* pOut, const drwav_int16* pIn, size_t sampleCount) +{ + size_t i; + + if (pOut == NULL || pIn == NULL) { + return; + } + + for (i = 0; i < sampleCount; ++i) { + *pOut++ = pIn[i] << 16; + } +} + +DRWAV_API void drwav_s24_to_s32(drwav_int32* pOut, const drwav_uint8* pIn, size_t sampleCount) +{ + size_t i; + + if (pOut == NULL || pIn == NULL) { + return; + } + + for (i = 0; i < sampleCount; ++i) { + unsigned int s0 = pIn[i*3 + 0]; + unsigned int s1 = pIn[i*3 + 1]; + unsigned int s2 = pIn[i*3 + 2]; + + drwav_int32 sample32 = (drwav_int32)((s0 << 8) | (s1 << 16) | (s2 << 24)); + *pOut++ = sample32; + } +} + +DRWAV_API void drwav_f32_to_s32(drwav_int32* pOut, const float* pIn, size_t sampleCount) +{ + size_t i; + + if (pOut == NULL || pIn == NULL) { + return; + } + + for (i = 0; i < sampleCount; ++i) { + *pOut++ = (drwav_int32)(2147483648.0 * pIn[i]); + } +} + +DRWAV_API void drwav_f64_to_s32(drwav_int32* pOut, const double* pIn, size_t sampleCount) +{ + size_t i; + + if (pOut == NULL || pIn == NULL) { + return; + } + + for (i = 0; i < sampleCount; ++i) { + *pOut++ = (drwav_int32)(2147483648.0 * pIn[i]); + } +} + +DRWAV_API void drwav_alaw_to_s32(drwav_int32* pOut, const drwav_uint8* pIn, size_t sampleCount) +{ + size_t i; + + if (pOut == NULL || pIn == NULL) { + return; + } + + for (i = 0; i < sampleCount; ++i) { + *pOut++ = ((drwav_int32)drwav__alaw_to_s16(pIn[i])) << 16; + } +} + +DRWAV_API void drwav_mulaw_to_s32(drwav_int32* pOut, const drwav_uint8* pIn, size_t sampleCount) +{ + size_t i; + + if (pOut == NULL || pIn == NULL) { + return; + } + + for (i= 0; i < sampleCount; ++i) { + *pOut++ = ((drwav_int32)drwav__mulaw_to_s16(pIn[i])) << 16; + } +} + + + +static drwav_int16* drwav__read_pcm_frames_and_close_s16(drwav* pWav, unsigned int* channels, unsigned int* sampleRate, drwav_uint64* totalFrameCount) +{ + drwav_uint64 sampleDataSize; + drwav_int16* pSampleData; + drwav_uint64 framesRead; + + DRWAV_ASSERT(pWav != NULL); + + sampleDataSize = pWav->totalPCMFrameCount * pWav->channels * sizeof(drwav_int16); + if (sampleDataSize > DRWAV_SIZE_MAX) { + drwav_uninit(pWav); + return NULL; /* File's too big. */ + } + + pSampleData = (drwav_int16*)drwav__malloc_from_callbacks((size_t)sampleDataSize, &pWav->allocationCallbacks); /* <-- Safe cast due to the check above. */ + if (pSampleData == NULL) { + drwav_uninit(pWav); + return NULL; /* Failed to allocate memory. */ + } + + framesRead = drwav_read_pcm_frames_s16(pWav, (size_t)pWav->totalPCMFrameCount, pSampleData); + if (framesRead != pWav->totalPCMFrameCount) { + drwav__free_from_callbacks(pSampleData, &pWav->allocationCallbacks); + drwav_uninit(pWav); + return NULL; /* There was an error reading the samples. */ + } + + drwav_uninit(pWav); + + if (sampleRate) { + *sampleRate = pWav->sampleRate; + } + if (channels) { + *channels = pWav->channels; + } + if (totalFrameCount) { + *totalFrameCount = pWav->totalPCMFrameCount; + } + + return pSampleData; +} + +static float* drwav__read_pcm_frames_and_close_f32(drwav* pWav, unsigned int* channels, unsigned int* sampleRate, drwav_uint64* totalFrameCount) +{ + drwav_uint64 sampleDataSize; + float* pSampleData; + drwav_uint64 framesRead; + + DRWAV_ASSERT(pWav != NULL); + + sampleDataSize = pWav->totalPCMFrameCount * pWav->channels * sizeof(float); + if (sampleDataSize > DRWAV_SIZE_MAX) { + drwav_uninit(pWav); + return NULL; /* File's too big. */ + } + + pSampleData = (float*)drwav__malloc_from_callbacks((size_t)sampleDataSize, &pWav->allocationCallbacks); /* <-- Safe cast due to the check above. */ + if (pSampleData == NULL) { + drwav_uninit(pWav); + return NULL; /* Failed to allocate memory. */ + } + + framesRead = drwav_read_pcm_frames_f32(pWav, (size_t)pWav->totalPCMFrameCount, pSampleData); + if (framesRead != pWav->totalPCMFrameCount) { + drwav__free_from_callbacks(pSampleData, &pWav->allocationCallbacks); + drwav_uninit(pWav); + return NULL; /* There was an error reading the samples. */ + } + + drwav_uninit(pWav); + + if (sampleRate) { + *sampleRate = pWav->sampleRate; + } + if (channels) { + *channels = pWav->channels; + } + if (totalFrameCount) { + *totalFrameCount = pWav->totalPCMFrameCount; + } + + return pSampleData; +} + +static drwav_int32* drwav__read_pcm_frames_and_close_s32(drwav* pWav, unsigned int* channels, unsigned int* sampleRate, drwav_uint64* totalFrameCount) +{ + drwav_uint64 sampleDataSize; + drwav_int32* pSampleData; + drwav_uint64 framesRead; + + DRWAV_ASSERT(pWav != NULL); + + sampleDataSize = pWav->totalPCMFrameCount * pWav->channels * sizeof(drwav_int32); + if (sampleDataSize > DRWAV_SIZE_MAX) { + drwav_uninit(pWav); + return NULL; /* File's too big. */ + } + + pSampleData = (drwav_int32*)drwav__malloc_from_callbacks((size_t)sampleDataSize, &pWav->allocationCallbacks); /* <-- Safe cast due to the check above. */ + if (pSampleData == NULL) { + drwav_uninit(pWav); + return NULL; /* Failed to allocate memory. */ + } + + framesRead = drwav_read_pcm_frames_s32(pWav, (size_t)pWav->totalPCMFrameCount, pSampleData); + if (framesRead != pWav->totalPCMFrameCount) { + drwav__free_from_callbacks(pSampleData, &pWav->allocationCallbacks); + drwav_uninit(pWav); + return NULL; /* There was an error reading the samples. */ + } + + drwav_uninit(pWav); + + if (sampleRate) { + *sampleRate = pWav->sampleRate; + } + if (channels) { + *channels = pWav->channels; + } + if (totalFrameCount) { + *totalFrameCount = pWav->totalPCMFrameCount; + } + + return pSampleData; +} + + + +DRWAV_API drwav_int16* drwav_open_and_read_pcm_frames_s16(drwav_read_proc onRead, drwav_seek_proc onSeek, void* pUserData, unsigned int* channelsOut, unsigned int* sampleRateOut, drwav_uint64* totalFrameCountOut, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + drwav wav; + + if (channelsOut) { + *channelsOut = 0; + } + if (sampleRateOut) { + *sampleRateOut = 0; + } + if (totalFrameCountOut) { + *totalFrameCountOut = 0; + } + + if (!drwav_init(&wav, onRead, onSeek, pUserData, pAllocationCallbacks)) { + return NULL; + } + + return drwav__read_pcm_frames_and_close_s16(&wav, channelsOut, sampleRateOut, totalFrameCountOut); +} + +DRWAV_API float* drwav_open_and_read_pcm_frames_f32(drwav_read_proc onRead, drwav_seek_proc onSeek, void* pUserData, unsigned int* channelsOut, unsigned int* sampleRateOut, drwav_uint64* totalFrameCountOut, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + drwav wav; + + if (channelsOut) { + *channelsOut = 0; + } + if (sampleRateOut) { + *sampleRateOut = 0; + } + if (totalFrameCountOut) { + *totalFrameCountOut = 0; + } + + if (!drwav_init(&wav, onRead, onSeek, pUserData, pAllocationCallbacks)) { + return NULL; + } + + return drwav__read_pcm_frames_and_close_f32(&wav, channelsOut, sampleRateOut, totalFrameCountOut); +} + +DRWAV_API drwav_int32* drwav_open_and_read_pcm_frames_s32(drwav_read_proc onRead, drwav_seek_proc onSeek, void* pUserData, unsigned int* channelsOut, unsigned int* sampleRateOut, drwav_uint64* totalFrameCountOut, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + drwav wav; + + if (channelsOut) { + *channelsOut = 0; + } + if (sampleRateOut) { + *sampleRateOut = 0; + } + if (totalFrameCountOut) { + *totalFrameCountOut = 0; + } + + if (!drwav_init(&wav, onRead, onSeek, pUserData, pAllocationCallbacks)) { + return NULL; + } + + return drwav__read_pcm_frames_and_close_s32(&wav, channelsOut, sampleRateOut, totalFrameCountOut); +} + +#ifndef DR_WAV_NO_STDIO +DRWAV_API drwav_int16* drwav_open_file_and_read_pcm_frames_s16(const char* filename, unsigned int* channelsOut, unsigned int* sampleRateOut, drwav_uint64* totalFrameCountOut, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + drwav wav; + + if (channelsOut) { + *channelsOut = 0; + } + if (sampleRateOut) { + *sampleRateOut = 0; + } + if (totalFrameCountOut) { + *totalFrameCountOut = 0; + } + + if (!drwav_init_file(&wav, filename, pAllocationCallbacks)) { + return NULL; + } + + return drwav__read_pcm_frames_and_close_s16(&wav, channelsOut, sampleRateOut, totalFrameCountOut); +} + +DRWAV_API float* drwav_open_file_and_read_pcm_frames_f32(const char* filename, unsigned int* channelsOut, unsigned int* sampleRateOut, drwav_uint64* totalFrameCountOut, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + drwav wav; + + if (channelsOut) { + *channelsOut = 0; + } + if (sampleRateOut) { + *sampleRateOut = 0; + } + if (totalFrameCountOut) { + *totalFrameCountOut = 0; + } + + if (!drwav_init_file(&wav, filename, pAllocationCallbacks)) { + return NULL; + } + + return drwav__read_pcm_frames_and_close_f32(&wav, channelsOut, sampleRateOut, totalFrameCountOut); +} + +DRWAV_API drwav_int32* drwav_open_file_and_read_pcm_frames_s32(const char* filename, unsigned int* channelsOut, unsigned int* sampleRateOut, drwav_uint64* totalFrameCountOut, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + drwav wav; + + if (channelsOut) { + *channelsOut = 0; + } + if (sampleRateOut) { + *sampleRateOut = 0; + } + if (totalFrameCountOut) { + *totalFrameCountOut = 0; + } + + if (!drwav_init_file(&wav, filename, pAllocationCallbacks)) { + return NULL; + } + + return drwav__read_pcm_frames_and_close_s32(&wav, channelsOut, sampleRateOut, totalFrameCountOut); +} + + +DRWAV_API drwav_int16* drwav_open_file_and_read_pcm_frames_s16_w(const wchar_t* filename, unsigned int* channelsOut, unsigned int* sampleRateOut, drwav_uint64* totalFrameCountOut, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + drwav wav; + + if (sampleRateOut) { + *sampleRateOut = 0; + } + if (channelsOut) { + *channelsOut = 0; + } + if (totalFrameCountOut) { + *totalFrameCountOut = 0; + } + + if (!drwav_init_file_w(&wav, filename, pAllocationCallbacks)) { + return NULL; + } + + return drwav__read_pcm_frames_and_close_s16(&wav, channelsOut, sampleRateOut, totalFrameCountOut); +} + +DRWAV_API float* drwav_open_file_and_read_pcm_frames_f32_w(const wchar_t* filename, unsigned int* channelsOut, unsigned int* sampleRateOut, drwav_uint64* totalFrameCountOut, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + drwav wav; + + if (sampleRateOut) { + *sampleRateOut = 0; + } + if (channelsOut) { + *channelsOut = 0; + } + if (totalFrameCountOut) { + *totalFrameCountOut = 0; + } + + if (!drwav_init_file_w(&wav, filename, pAllocationCallbacks)) { + return NULL; + } + + return drwav__read_pcm_frames_and_close_f32(&wav, channelsOut, sampleRateOut, totalFrameCountOut); +} + +DRWAV_API drwav_int32* drwav_open_file_and_read_pcm_frames_s32_w(const wchar_t* filename, unsigned int* channelsOut, unsigned int* sampleRateOut, drwav_uint64* totalFrameCountOut, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + drwav wav; + + if (sampleRateOut) { + *sampleRateOut = 0; + } + if (channelsOut) { + *channelsOut = 0; + } + if (totalFrameCountOut) { + *totalFrameCountOut = 0; + } + + if (!drwav_init_file_w(&wav, filename, pAllocationCallbacks)) { + return NULL; + } + + return drwav__read_pcm_frames_and_close_s32(&wav, channelsOut, sampleRateOut, totalFrameCountOut); +} +#endif + +DRWAV_API drwav_int16* drwav_open_memory_and_read_pcm_frames_s16(const void* data, size_t dataSize, unsigned int* channelsOut, unsigned int* sampleRateOut, drwav_uint64* totalFrameCountOut, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + drwav wav; + + if (channelsOut) { + *channelsOut = 0; + } + if (sampleRateOut) { + *sampleRateOut = 0; + } + if (totalFrameCountOut) { + *totalFrameCountOut = 0; + } + + if (!drwav_init_memory(&wav, data, dataSize, pAllocationCallbacks)) { + return NULL; + } + + return drwav__read_pcm_frames_and_close_s16(&wav, channelsOut, sampleRateOut, totalFrameCountOut); +} + +DRWAV_API float* drwav_open_memory_and_read_pcm_frames_f32(const void* data, size_t dataSize, unsigned int* channelsOut, unsigned int* sampleRateOut, drwav_uint64* totalFrameCountOut, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + drwav wav; + + if (channelsOut) { + *channelsOut = 0; + } + if (sampleRateOut) { + *sampleRateOut = 0; + } + if (totalFrameCountOut) { + *totalFrameCountOut = 0; + } + + if (!drwav_init_memory(&wav, data, dataSize, pAllocationCallbacks)) { + return NULL; + } + + return drwav__read_pcm_frames_and_close_f32(&wav, channelsOut, sampleRateOut, totalFrameCountOut); +} + +DRWAV_API drwav_int32* drwav_open_memory_and_read_pcm_frames_s32(const void* data, size_t dataSize, unsigned int* channelsOut, unsigned int* sampleRateOut, drwav_uint64* totalFrameCountOut, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + drwav wav; + + if (channelsOut) { + *channelsOut = 0; + } + if (sampleRateOut) { + *sampleRateOut = 0; + } + if (totalFrameCountOut) { + *totalFrameCountOut = 0; + } + + if (!drwav_init_memory(&wav, data, dataSize, pAllocationCallbacks)) { + return NULL; + } + + return drwav__read_pcm_frames_and_close_s32(&wav, channelsOut, sampleRateOut, totalFrameCountOut); +} +#endif /* DR_WAV_NO_CONVERSION_API */ + + +DRWAV_API void drwav_free(void* p, const drwav_allocation_callbacks* pAllocationCallbacks) +{ + if (pAllocationCallbacks != NULL) { + drwav__free_from_callbacks(p, pAllocationCallbacks); + } else { + drwav__free_default(p, NULL); + } +} + +DRWAV_API drwav_uint16 drwav_bytes_to_u16(const drwav_uint8* data) +{ + return drwav__bytes_to_u16(data); +} + +DRWAV_API drwav_int16 drwav_bytes_to_s16(const drwav_uint8* data) +{ + return drwav__bytes_to_s16(data); +} + +DRWAV_API drwav_uint32 drwav_bytes_to_u32(const drwav_uint8* data) +{ + return drwav__bytes_to_u32(data); +} + +DRWAV_API drwav_int32 drwav_bytes_to_s32(const drwav_uint8* data) +{ + return drwav__bytes_to_s32(data); +} + +DRWAV_API drwav_uint64 drwav_bytes_to_u64(const drwav_uint8* data) +{ + return drwav__bytes_to_u64(data); +} + +DRWAV_API drwav_int64 drwav_bytes_to_s64(const drwav_uint8* data) +{ + return drwav__bytes_to_s64(data); +} + + +DRWAV_API drwav_bool32 drwav_guid_equal(const drwav_uint8 a[16], const drwav_uint8 b[16]) +{ + return drwav__guid_equal(a, b); +} + +DRWAV_API drwav_bool32 drwav_fourcc_equal(const drwav_uint8* a, const char* b) +{ + return drwav__fourcc_equal(a, b); +} + +#endif /* dr_wav_c */ +#endif /* DR_WAV_IMPLEMENTATION */ + +/* +RELEASE NOTES - v0.11.0 +======================= +Version 0.11.0 has breaking API changes. + +Improved Client-Defined Memory Allocation +----------------------------------------- +The main change with this release is the addition of a more flexible way of implementing custom memory allocation routines. The +existing system of DRWAV_MALLOC, DRWAV_REALLOC and DRWAV_FREE are still in place and will be used by default when no custom +allocation callbacks are specified. + +To use the new system, you pass in a pointer to a drwav_allocation_callbacks object to drwav_init() and family, like this: + + void* my_malloc(size_t sz, void* pUserData) + { + return malloc(sz); + } + void* my_realloc(void* p, size_t sz, void* pUserData) + { + return realloc(p, sz); + } + void my_free(void* p, void* pUserData) + { + free(p); + } + + ... + + drwav_allocation_callbacks allocationCallbacks; + allocationCallbacks.pUserData = &myData; + allocationCallbacks.onMalloc = my_malloc; + allocationCallbacks.onRealloc = my_realloc; + allocationCallbacks.onFree = my_free; + drwav_init_file(&wav, "my_file.wav", &allocationCallbacks); + +The advantage of this new system is that it allows you to specify user data which will be passed in to the allocation routines. + +Passing in null for the allocation callbacks object will cause dr_wav to use defaults which is the same as DRWAV_MALLOC, +DRWAV_REALLOC and DRWAV_FREE and the equivalent of how it worked in previous versions. + +Every API that opens a drwav object now takes this extra parameter. These include the following: + + drwav_init() + drwav_init_ex() + drwav_init_file() + drwav_init_file_ex() + drwav_init_file_w() + drwav_init_file_w_ex() + drwav_init_memory() + drwav_init_memory_ex() + drwav_init_write() + drwav_init_write_sequential() + drwav_init_write_sequential_pcm_frames() + drwav_init_file_write() + drwav_init_file_write_sequential() + drwav_init_file_write_sequential_pcm_frames() + drwav_init_file_write_w() + drwav_init_file_write_sequential_w() + drwav_init_file_write_sequential_pcm_frames_w() + drwav_init_memory_write() + drwav_init_memory_write_sequential() + drwav_init_memory_write_sequential_pcm_frames() + drwav_open_and_read_pcm_frames_s16() + drwav_open_and_read_pcm_frames_f32() + drwav_open_and_read_pcm_frames_s32() + drwav_open_file_and_read_pcm_frames_s16() + drwav_open_file_and_read_pcm_frames_f32() + drwav_open_file_and_read_pcm_frames_s32() + drwav_open_file_and_read_pcm_frames_s16_w() + drwav_open_file_and_read_pcm_frames_f32_w() + drwav_open_file_and_read_pcm_frames_s32_w() + drwav_open_memory_and_read_pcm_frames_s16() + drwav_open_memory_and_read_pcm_frames_f32() + drwav_open_memory_and_read_pcm_frames_s32() + +Endian Improvements +------------------- +Previously, the following APIs returned little-endian audio data. These now return native-endian data. This improves compatibility +on big-endian architectures. + + drwav_read_pcm_frames() + drwav_read_pcm_frames_s16() + drwav_read_pcm_frames_s32() + drwav_read_pcm_frames_f32() + drwav_open_and_read_pcm_frames_s16() + drwav_open_and_read_pcm_frames_s32() + drwav_open_and_read_pcm_frames_f32() + drwav_open_file_and_read_pcm_frames_s16() + drwav_open_file_and_read_pcm_frames_s32() + drwav_open_file_and_read_pcm_frames_f32() + drwav_open_file_and_read_pcm_frames_s16_w() + drwav_open_file_and_read_pcm_frames_s32_w() + drwav_open_file_and_read_pcm_frames_f32_w() + drwav_open_memory_and_read_pcm_frames_s16() + drwav_open_memory_and_read_pcm_frames_s32() + drwav_open_memory_and_read_pcm_frames_f32() + +APIs have been added to give you explicit control over whether or not audio data is read or written in big- or little-endian byte +order: + + drwav_read_pcm_frames_le() + drwav_read_pcm_frames_be() + drwav_read_pcm_frames_s16le() + drwav_read_pcm_frames_s16be() + drwav_read_pcm_frames_f32le() + drwav_read_pcm_frames_f32be() + drwav_read_pcm_frames_s32le() + drwav_read_pcm_frames_s32be() + drwav_write_pcm_frames_le() + drwav_write_pcm_frames_be() + +Removed APIs +------------ +The following APIs were deprecated in version 0.10.0 and have now been removed: + + drwav_open() + drwav_open_ex() + drwav_open_write() + drwav_open_write_sequential() + drwav_open_file() + drwav_open_file_ex() + drwav_open_file_write() + drwav_open_file_write_sequential() + drwav_open_memory() + drwav_open_memory_ex() + drwav_open_memory_write() + drwav_open_memory_write_sequential() + drwav_close() + + + +RELEASE NOTES - v0.10.0 +======================= +Version 0.10.0 has breaking API changes. There are no significant bug fixes in this release, so if you are affected you do +not need to upgrade. + +Removed APIs +------------ +The following APIs were deprecated in version 0.9.0 and have been completely removed in version 0.10.0: + + drwav_read() + drwav_read_s16() + drwav_read_f32() + drwav_read_s32() + drwav_seek_to_sample() + drwav_write() + drwav_open_and_read_s16() + drwav_open_and_read_f32() + drwav_open_and_read_s32() + drwav_open_file_and_read_s16() + drwav_open_file_and_read_f32() + drwav_open_file_and_read_s32() + drwav_open_memory_and_read_s16() + drwav_open_memory_and_read_f32() + drwav_open_memory_and_read_s32() + drwav::totalSampleCount + +See release notes for version 0.9.0 at the bottom of this file for replacement APIs. + +Deprecated APIs +--------------- +The following APIs have been deprecated. There is a confusing and completely arbitrary difference between drwav_init*() and +drwav_open*(), where drwav_init*() initializes a pre-allocated drwav object, whereas drwav_open*() will first allocated a +drwav object on the heap and then initialize it. drwav_open*() has been deprecated which means you must now use a pre- +allocated drwav object with drwav_init*(). If you need the previous functionality, you can just do a malloc() followed by +a called to one of the drwav_init*() APIs. + + drwav_open() + drwav_open_ex() + drwav_open_write() + drwav_open_write_sequential() + drwav_open_file() + drwav_open_file_ex() + drwav_open_file_write() + drwav_open_file_write_sequential() + drwav_open_memory() + drwav_open_memory_ex() + drwav_open_memory_write() + drwav_open_memory_write_sequential() + drwav_close() + +These APIs will be removed completely in a future version. The rationale for this change is to remove confusion between the +two different ways to initialize a drwav object. +*/ + +/* +REVISION HISTORY +================ +v0.12.16 - 2020-12-02 + - Fix a bug when trying to read more bytes than can fit in a size_t. + +v0.12.15 - 2020-11-21 + - Fix compilation with OpenWatcom. + +v0.12.14 - 2020-11-13 + - Minor code clean up. + +v0.12.13 - 2020-11-01 + - Improve compiler support for older versions of GCC. + +v0.12.12 - 2020-09-28 + - Add support for RF64. + - Fix a bug in writing mode where the size of the RIFF chunk incorrectly includes the header section. + +v0.12.11 - 2020-09-08 + - Fix a compilation error on older compilers. + +v0.12.10 - 2020-08-24 + - Fix a bug when seeking with ADPCM formats. + +v0.12.9 - 2020-08-02 + - Simplify sized types. + +v0.12.8 - 2020-07-25 + - Fix a compilation warning. + +v0.12.7 - 2020-07-15 + - Fix some bugs on big-endian architectures. + - Fix an error in s24 to f32 conversion. + +v0.12.6 - 2020-06-23 + - Change drwav_read_*() to allow NULL to be passed in as the output buffer which is equivalent to a forward seek. + - Fix a buffer overflow when trying to decode invalid IMA-ADPCM files. + - Add include guard for the implementation section. + +v0.12.5 - 2020-05-27 + - Minor documentation fix. + +v0.12.4 - 2020-05-16 + - Replace assert() with DRWAV_ASSERT(). + - Add compile-time and run-time version querying. + - DRWAV_VERSION_MINOR + - DRWAV_VERSION_MAJOR + - DRWAV_VERSION_REVISION + - DRWAV_VERSION_STRING + - drwav_version() + - drwav_version_string() + +v0.12.3 - 2020-04-30 + - Fix compilation errors with VC6. + +v0.12.2 - 2020-04-21 + - Fix a bug where drwav_init_file() does not close the file handle after attempting to load an erroneous file. + +v0.12.1 - 2020-04-13 + - Fix some pedantic warnings. + +v0.12.0 - 2020-04-04 + - API CHANGE: Add container and format parameters to the chunk callback. + - Minor documentation updates. + +v0.11.5 - 2020-03-07 + - Fix compilation error with Visual Studio .NET 2003. + +v0.11.4 - 2020-01-29 + - Fix some static analysis warnings. + - Fix a bug when reading f32 samples from an A-law encoded stream. + +v0.11.3 - 2020-01-12 + - Minor changes to some f32 format conversion routines. + - Minor bug fix for ADPCM conversion when end of file is reached. + +v0.11.2 - 2019-12-02 + - Fix a possible crash when using custom memory allocators without a custom realloc() implementation. + - Fix an integer overflow bug. + - Fix a null pointer dereference bug. + - Add limits to sample rate, channels and bits per sample to tighten up some validation. + +v0.11.1 - 2019-10-07 + - Internal code clean up. + +v0.11.0 - 2019-10-06 + - API CHANGE: Add support for user defined memory allocation routines. This system allows the program to specify their own memory allocation + routines with a user data pointer for client-specific contextual data. This adds an extra parameter to the end of the following APIs: + - drwav_init() + - drwav_init_ex() + - drwav_init_file() + - drwav_init_file_ex() + - drwav_init_file_w() + - drwav_init_file_w_ex() + - drwav_init_memory() + - drwav_init_memory_ex() + - drwav_init_write() + - drwav_init_write_sequential() + - drwav_init_write_sequential_pcm_frames() + - drwav_init_file_write() + - drwav_init_file_write_sequential() + - drwav_init_file_write_sequential_pcm_frames() + - drwav_init_file_write_w() + - drwav_init_file_write_sequential_w() + - drwav_init_file_write_sequential_pcm_frames_w() + - drwav_init_memory_write() + - drwav_init_memory_write_sequential() + - drwav_init_memory_write_sequential_pcm_frames() + - drwav_open_and_read_pcm_frames_s16() + - drwav_open_and_read_pcm_frames_f32() + - drwav_open_and_read_pcm_frames_s32() + - drwav_open_file_and_read_pcm_frames_s16() + - drwav_open_file_and_read_pcm_frames_f32() + - drwav_open_file_and_read_pcm_frames_s32() + - drwav_open_file_and_read_pcm_frames_s16_w() + - drwav_open_file_and_read_pcm_frames_f32_w() + - drwav_open_file_and_read_pcm_frames_s32_w() + - drwav_open_memory_and_read_pcm_frames_s16() + - drwav_open_memory_and_read_pcm_frames_f32() + - drwav_open_memory_and_read_pcm_frames_s32() + Set this extra parameter to NULL to use defaults which is the same as the previous behaviour. Setting this NULL will use + DRWAV_MALLOC, DRWAV_REALLOC and DRWAV_FREE. + - Add support for reading and writing PCM frames in an explicit endianness. New APIs: + - drwav_read_pcm_frames_le() + - drwav_read_pcm_frames_be() + - drwav_read_pcm_frames_s16le() + - drwav_read_pcm_frames_s16be() + - drwav_read_pcm_frames_f32le() + - drwav_read_pcm_frames_f32be() + - drwav_read_pcm_frames_s32le() + - drwav_read_pcm_frames_s32be() + - drwav_write_pcm_frames_le() + - drwav_write_pcm_frames_be() + - Remove deprecated APIs. + - API CHANGE: The following APIs now return native-endian data. Previously they returned little-endian data. + - drwav_read_pcm_frames() + - drwav_read_pcm_frames_s16() + - drwav_read_pcm_frames_s32() + - drwav_read_pcm_frames_f32() + - drwav_open_and_read_pcm_frames_s16() + - drwav_open_and_read_pcm_frames_s32() + - drwav_open_and_read_pcm_frames_f32() + - drwav_open_file_and_read_pcm_frames_s16() + - drwav_open_file_and_read_pcm_frames_s32() + - drwav_open_file_and_read_pcm_frames_f32() + - drwav_open_file_and_read_pcm_frames_s16_w() + - drwav_open_file_and_read_pcm_frames_s32_w() + - drwav_open_file_and_read_pcm_frames_f32_w() + - drwav_open_memory_and_read_pcm_frames_s16() + - drwav_open_memory_and_read_pcm_frames_s32() + - drwav_open_memory_and_read_pcm_frames_f32() + +v0.10.1 - 2019-08-31 + - Correctly handle partial trailing ADPCM blocks. + +v0.10.0 - 2019-08-04 + - Remove deprecated APIs. + - Add wchar_t variants for file loading APIs: + drwav_init_file_w() + drwav_init_file_ex_w() + drwav_init_file_write_w() + drwav_init_file_write_sequential_w() + - Add drwav_target_write_size_bytes() which calculates the total size in bytes of a WAV file given a format and sample count. + - Add APIs for specifying the PCM frame count instead of the sample count when opening in sequential write mode: + drwav_init_write_sequential_pcm_frames() + drwav_init_file_write_sequential_pcm_frames() + drwav_init_file_write_sequential_pcm_frames_w() + drwav_init_memory_write_sequential_pcm_frames() + - Deprecate drwav_open*() and drwav_close(): + drwav_open() + drwav_open_ex() + drwav_open_write() + drwav_open_write_sequential() + drwav_open_file() + drwav_open_file_ex() + drwav_open_file_write() + drwav_open_file_write_sequential() + drwav_open_memory() + drwav_open_memory_ex() + drwav_open_memory_write() + drwav_open_memory_write_sequential() + drwav_close() + - Minor documentation updates. + +v0.9.2 - 2019-05-21 + - Fix warnings. + +v0.9.1 - 2019-05-05 + - Add support for C89. + - Change license to choice of public domain or MIT-0. + +v0.9.0 - 2018-12-16 + - API CHANGE: Add new reading APIs for reading by PCM frames instead of samples. Old APIs have been deprecated and + will be removed in v0.10.0. Deprecated APIs and their replacements: + drwav_read() -> drwav_read_pcm_frames() + drwav_read_s16() -> drwav_read_pcm_frames_s16() + drwav_read_f32() -> drwav_read_pcm_frames_f32() + drwav_read_s32() -> drwav_read_pcm_frames_s32() + drwav_seek_to_sample() -> drwav_seek_to_pcm_frame() + drwav_write() -> drwav_write_pcm_frames() + drwav_open_and_read_s16() -> drwav_open_and_read_pcm_frames_s16() + drwav_open_and_read_f32() -> drwav_open_and_read_pcm_frames_f32() + drwav_open_and_read_s32() -> drwav_open_and_read_pcm_frames_s32() + drwav_open_file_and_read_s16() -> drwav_open_file_and_read_pcm_frames_s16() + drwav_open_file_and_read_f32() -> drwav_open_file_and_read_pcm_frames_f32() + drwav_open_file_and_read_s32() -> drwav_open_file_and_read_pcm_frames_s32() + drwav_open_memory_and_read_s16() -> drwav_open_memory_and_read_pcm_frames_s16() + drwav_open_memory_and_read_f32() -> drwav_open_memory_and_read_pcm_frames_f32() + drwav_open_memory_and_read_s32() -> drwav_open_memory_and_read_pcm_frames_s32() + drwav::totalSampleCount -> drwav::totalPCMFrameCount + - API CHANGE: Rename drwav_open_and_read_file_*() to drwav_open_file_and_read_*(). + - API CHANGE: Rename drwav_open_and_read_memory_*() to drwav_open_memory_and_read_*(). + - Add built-in support for smpl chunks. + - Add support for firing a callback for each chunk in the file at initialization time. + - This is enabled through the drwav_init_ex(), etc. family of APIs. + - Handle invalid FMT chunks more robustly. + +v0.8.5 - 2018-09-11 + - Const correctness. + - Fix a potential stack overflow. + +v0.8.4 - 2018-08-07 + - Improve 64-bit detection. + +v0.8.3 - 2018-08-05 + - Fix C++ build on older versions of GCC. + +v0.8.2 - 2018-08-02 + - Fix some big-endian bugs. + +v0.8.1 - 2018-06-29 + - Add support for sequential writing APIs. + - Disable seeking in write mode. + - Fix bugs with Wave64. + - Fix typos. + +v0.8 - 2018-04-27 + - Bug fix. + - Start using major.minor.revision versioning. + +v0.7f - 2018-02-05 + - Restrict ADPCM formats to a maximum of 2 channels. + +v0.7e - 2018-02-02 + - Fix a crash. + +v0.7d - 2018-02-01 + - Fix a crash. + +v0.7c - 2018-02-01 + - Set drwav.bytesPerSample to 0 for all compressed formats. + - Fix a crash when reading 16-bit floating point WAV files. In this case dr_wav will output silence for + all format conversion reading APIs (*_s16, *_s32, *_f32 APIs). + - Fix some divide-by-zero errors. + +v0.7b - 2018-01-22 + - Fix errors with seeking of compressed formats. + - Fix compilation error when DR_WAV_NO_CONVERSION_API + +v0.7a - 2017-11-17 + - Fix some GCC warnings. + +v0.7 - 2017-11-04 + - Add writing APIs. + +v0.6 - 2017-08-16 + - API CHANGE: Rename dr_* types to drwav_*. + - Add support for custom implementations of malloc(), realloc(), etc. + - Add support for Microsoft ADPCM. + - Add support for IMA ADPCM (DVI, format code 0x11). + - Optimizations to drwav_read_s16(). + - Bug fixes. + +v0.5g - 2017-07-16 + - Change underlying type for booleans to unsigned. + +v0.5f - 2017-04-04 + - Fix a minor bug with drwav_open_and_read_s16() and family. + +v0.5e - 2016-12-29 + - Added support for reading samples as signed 16-bit integers. Use the _s16() family of APIs for this. + - Minor fixes to documentation. + +v0.5d - 2016-12-28 + - Use drwav_int* and drwav_uint* sized types to improve compiler support. + +v0.5c - 2016-11-11 + - Properly handle JUNK chunks that come before the FMT chunk. + +v0.5b - 2016-10-23 + - A minor change to drwav_bool8 and drwav_bool32 types. + +v0.5a - 2016-10-11 + - Fixed a bug with drwav_open_and_read() and family due to incorrect argument ordering. + - Improve A-law and mu-law efficiency. + +v0.5 - 2016-09-29 + - API CHANGE. Swap the order of "channels" and "sampleRate" parameters in drwav_open_and_read*(). Rationale for this is to + keep it consistent with dr_audio and dr_flac. + +v0.4b - 2016-09-18 + - Fixed a typo in documentation. + +v0.4a - 2016-09-18 + - Fixed a typo. + - Change date format to ISO 8601 (YYYY-MM-DD) + +v0.4 - 2016-07-13 + - API CHANGE. Make onSeek consistent with dr_flac. + - API CHANGE. Rename drwav_seek() to drwav_seek_to_sample() for clarity and consistency with dr_flac. + - Added support for Sony Wave64. + +v0.3a - 2016-05-28 + - API CHANGE. Return drwav_bool32 instead of int in onSeek callback. + - Fixed a memory leak. + +v0.3 - 2016-05-22 + - Lots of API changes for consistency. + +v0.2a - 2016-05-16 + - Fixed Linux/GCC build. + +v0.2 - 2016-05-11 + - Added support for reading data as signed 32-bit PCM for consistency with dr_flac. + +v0.1a - 2016-05-07 + - Fixed a bug in drwav_open_file() where the file handle would not be closed if the loader failed to initialize. + +v0.1 - 2016-05-04 + - Initial versioned release. +*/ + +/* +This software is available as a choice of the following licenses. Choose +whichever you prefer. + +=============================================================================== +ALTERNATIVE 1 - 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. + +For more information, please refer to + +=============================================================================== +ALTERNATIVE 2 - MIT No Attribution +=============================================================================== +Copyright 2020 David Reid + +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. + +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/ggml_old/examples/gpt-2/CMakeLists.txt b/ggml_old/examples/gpt-2/CMakeLists.txt new file mode 100644 index 0000000..1d9bcdd --- /dev/null +++ b/ggml_old/examples/gpt-2/CMakeLists.txt @@ -0,0 +1,13 @@ +# +# gpt-2 + +set(TEST_TARGET gpt-2) +add_executable(${TEST_TARGET} main.cpp) +target_link_libraries(${TEST_TARGET} PRIVATE ggml common common-ggml) + +# +# gpt-2-quantize + +set(TEST_TARGET gpt-2-quantize) +add_executable(${TEST_TARGET} quantize.cpp) +target_link_libraries(${TEST_TARGET} PRIVATE ggml common common-ggml) diff --git a/ggml_old/examples/gpt-2/README.md b/ggml_old/examples/gpt-2/README.md new file mode 100644 index 0000000..509fabc --- /dev/null +++ b/ggml_old/examples/gpt-2/README.md @@ -0,0 +1,158 @@ +# gpt-2 + +This is a C++ example running GPT-2 inference using the [ggml](https://github.com/ggerganov/ggml) library. + +The program runs on the CPU - no video card is required. + +The [Cerebras-GPT](https://huggingface.co/cerebras) models are also supported. + +The example supports the following GPT-2 models: + +| Model | Description | Disk Size | +| --- | --- | --- | +| 117M | Small model | 240 MB | +| 345M | Medium model | 680 MB | +| 774M | Large model | 1.5 GB | +| 1558M | XL model | 3.0 GB | + +Sample performance on MacBook M1 Pro: + +| Model | Size | Time / Token | +| --- | --- | --- | +| GPT-2 | 117M | 5 ms | +| GPT-2 | 345M | 12 ms | +| GPT-2 | 774M | 23 ms | +| GPT-2 | 1558M | 42 ms | + +*TODO: add tables for Cerebras-GPT models* + +Sample output: + +``` +$ ./bin/gpt-2 -h +usage: ./bin/gpt-2 [options] + +options: + -h, --help show this help message and exit + -s SEED, --seed SEED RNG seed (default: -1) + -t N, --threads N number of threads to use during computation (default: 8) + -p PROMPT, --prompt PROMPT + prompt to start generation with (default: random) + -n N, --n_predict N number of tokens to predict (default: 200) + --top_k N top-k sampling (default: 40) + --top_p N top-p sampling (default: 0.9) + --temp N temperature (default: 1.0) + -b N, --batch_size N batch size for prompt processing (default: 8) + -m FNAME, --model FNAME + model path (default: models/gpt-2-117M/ggml-model.bin) + +$ ./bin/gpt-2 +gpt2_model_load: loading model from 'models/gpt-2-117M/ggml-model.bin' +gpt2_model_load: n_vocab = 50257 +gpt2_model_load: n_ctx = 1024 +gpt2_model_load: n_embd = 768 +gpt2_model_load: n_head = 12 +gpt2_model_load: n_layer = 12 +gpt2_model_load: f16 = 1 +gpt2_model_load: ggml ctx size = 311.12 MB +gpt2_model_load: memory size = 72.00 MB, n_mem = 12288 +gpt2_model_load: model size = 239.08 MB +main: number of tokens in prompt = 1 + +So this is going to be the end of the line for us. + +If the Dolphins continue to do their business, it's possible that the team could make a bid to bring in new defensive coordinator Scott Linehan. + +Linehan's job is a little daunting, but he's a great coach and an excellent coach. I don't believe we're going to make the playoffs. + +We're going to have to work hard to keep our heads down and get ready to go.<|endoftext|> + +main: mem per token = 2048612 bytes +main: load time = 106.32 ms +main: sample time = 7.10 ms +main: predict time = 506.40 ms / 5.06 ms per token +main: total time = 629.84 ms +``` + +## Downloading and converting the original models (GPT-2) + +You can download the original model files using the [download-model.sh](download-model.sh) Bash script. The models are +in Tensorflow format, so in order to use them with ggml, you need to convert them to appropriate format. This is done +via the [convert-ckpt-to-ggml.py](convert-ckpt-to-ggml.py) python script. + +Here is the entire process for the GPT-2 117M model (download from official site + conversion): + +``` +cd ggml/build +../examples/gpt-2/download-model.sh 117M + +Downloading model 117M ... +models/gpt-2-117M/checkpoint 100%[=============================>] 77 --.-KB/s in 0s +models/gpt-2-117M/encoder.json 100%[=============================>] 1018K 1.20MB/s in 0.8s +models/gpt-2-117M/hparams.json 100%[=============================>] 90 --.-KB/s in 0s +models/gpt-2-117M/model.ckpt.data-00000-of-00001 100%[=============================>] 474.70M 1.21MB/s in 8m 39s +models/gpt-2-117M/model.ckpt.index 100%[=============================>] 5.09K --.-KB/s in 0s +models/gpt-2-117M/model.ckpt.meta 100%[=============================>] 460.11K 806KB/s in 0.6s +models/gpt-2-117M/vocab.bpe 100%[=============================>] 445.62K 799KB/s in 0.6s +Done! Model '117M' saved in 'models/gpt-2-117M/' + +Run the convert-ckpt-to-ggml.py script to convert the model to ggml format. + + python /Users/john/ggml/examples/gpt-2/convert-ckpt-to-ggml.py models/gpt-2-117M/ 1 + +``` + +This conversion requires that you have python and Tensorflow installed on your computer. Still, if you want to avoid +this, you can download the already converted ggml models as described below. + +## Downloading and converting the original models (Cerebras-GPT) + +Clone the respective repository from here: https://huggingface.co/cerebras + +Use the [convert-cerebras-to-ggml.py](convert-cerebras-to-ggml.py) script to convert the model to `ggml` format: + +``` +cd ggml/build +git clone https://huggingface.co/cerebras/Cerebras-GPT-111M models/ +python ../examples/gpt-2/convert-cerebras-to-ggml.py models/Cerebras-GPT-111M/ + +``` + +## Downloading the ggml model directly (GPT-2) + +For convenience, I will be hosting the converted ggml model files in order to make it easier to run the examples. This +way, you can directly download a single binary file and start using it. No python or Tensorflow is required. + +Here is how to get the 117M ggml model: + +``` +cd ggml/build +../examples/gpt-2/download-ggml-model.sh 117M + +Downloading ggml model 117M ... +models/gpt-2-117M/ggml-model.bin 100%[===============================>] 239.58M 8.52MB/s in 28s +Done! Model '117M' saved in 'models/gpt-2-117M/ggml-model.bin' +You can now use it like this: + + $ ./bin/gpt-2 -m models/gpt-2-117M/ggml-model.bin -p "This is an example" + +``` + +At some point, I might decide to stop hosting these models. So in that case, simply revert to the manual process above. + +## Quantizing the models + +You can also try to quantize the `ggml` models via 4-bit integer quantization. +Keep in mind that for smaller models, this will render them completely useless. +You generally want to quantize larger models. + +``` +# quantize GPT-2 F16 to Q4_0 (faster but less precise) +./bin/gpt-2-quantize models/gpt-2-1558M/ggml-model-f16.bin models/gpt-2-1558M/ggml-model-q4_0.bin 2 +./bin/gpt-2 -m models/gpt-2-1558M/ggml-model-q4_0.bin -p "This is an example" + +# quantize Cerebras F16 to Q4_1 (slower but more precise) +./bin/gpt-2-quantize models/Cerebras-GPT-6.7B/ggml-model-f16.bin models/Cerebras-GPT-6.7B/ggml-model-q4_1.bin 3 +./bin/gpt-2 -m models/Cerebras-GPT-6.7B/ggml-model-q4_1.bin -p "This is an example" + +``` diff --git a/ggml_old/examples/gpt-2/convert-cerebras-to-ggml.py b/ggml_old/examples/gpt-2/convert-cerebras-to-ggml.py new file mode 100644 index 0000000..5e71134 --- /dev/null +++ b/ggml_old/examples/gpt-2/convert-cerebras-to-ggml.py @@ -0,0 +1,183 @@ +# Convert Cerebras models to ggml format +# +# ref: https://www.cerebras.net/blog/cerebras-gpt-a-family-of-open-compute-efficient-large-language-models/ +# + +import sys +import struct +import json +import torch +import numpy as np +import re + +from transformers import AutoModelForCausalLM + +# ref: https://github.com/openai/gpt-2/blob/master/src/encoder.py +def bytes_to_unicode(): + """ + Returns list of utf-8 byte and a corresponding list of unicode strings. + The reversible bpe codes work on unicode strings. + This means you need a large # of unicode characters in your vocab if you want to avoid UNKs. + When you're at something like a 10B token dataset you end up needing around 5K for decent coverage. + This is a signficant percentage of your normal, say, 32K bpe vocab. + To avoid that, we want lookup tables between utf-8 bytes and unicode strings. + And avoids mapping to whitespace/control characters the bpe code barfs on. + """ + bs = list(range(ord("!"), ord("~")+1))+list(range(ord("¡"), ord("¬")+1))+list(range(ord("®"), ord("ÿ")+1)) + cs = bs[:] + n = 0 + for b in range(2**8): + if b not in bs: + bs.append(b) + cs.append(2**8+n) + n += 1 + cs = [chr(n) for n in cs] + return dict(zip(bs, cs)) + +if len(sys.argv) < 2: + print("Usage: convert-h5-to-ggml.py dir-model [use-f32]\n") + sys.exit(1) + +# output in the same directory as the model +dir_model = sys.argv[1] +fname_out = sys.argv[1] + "/ggml-model-f16.bin" + +with open(dir_model + "/vocab.json", "r", encoding="utf-8") as f: + encoder = json.load(f) + +with open(dir_model + "/config.json", "r", encoding="utf-8") as f: + hparams = json.load(f) + +# use 16-bit or 32-bit floats +use_f16 = True +if len(sys.argv) > 2: + use_f16 = False + fname_out = sys.argv[1] + "/ggml-model-f32.bin" + +model = AutoModelForCausalLM.from_pretrained(dir_model, low_cpu_mem_usage=True) +#print (model) + +list_vars = model.state_dict() +#print (list_vars) + +print(hparams) + +fout = open(fname_out, "wb") + +fout.write(struct.pack("i", 0x67676d6c)) # magic: ggml in hex +fout.write(struct.pack("i", hparams["vocab_size"])) +fout.write(struct.pack("i", hparams["n_positions"])) +fout.write(struct.pack("i", hparams["n_embd"])) +fout.write(struct.pack("i", hparams["n_head"])) +fout.write(struct.pack("i", hparams["n_layer"])) +fout.write(struct.pack("i", use_f16)) + +byte_encoder = bytes_to_unicode() +byte_decoder = {v:k for k, v in byte_encoder.items()} + +fout.write(struct.pack("i", len(encoder))) + +for key in encoder: + text = bytearray([byte_decoder[c] for c in key]) + fout.write(struct.pack("i", len(text))) + fout.write(text) + +for name in list_vars.keys(): + data = list_vars[name].squeeze().numpy() + print("Processing variable: " + name + " with shape: ", data.shape) + + # rename headers to keep compatibility + if name == "transformer.ln_f.weight": + name = "model/ln_f/g" + elif name == "transformer.ln_f.bias": + name = "model/ln_f/b" + elif name == "transformer.wte.weight": + name = "model/wte" + elif name == "transformer.wpe.weight": + name = "model/wpe" + elif name == "lm_head.weight": + name = "model/lm_head" + elif re.match(r"transformer.h\.\d+\.ln_1\.weight", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/ln_1/g" + elif re.match(r"transformer.h\.\d+\.ln_1\.bias", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/ln_1/b" + elif re.match(r"transformer.h\.\d+\.attn\.c_attn\.weight", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/attn/c_attn/w" + elif re.match(r"transformer.h\.\d+\.attn\.c_attn\.bias", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/attn/c_attn/b" + elif re.match(r"transformer.h\.\d+\.attn\.c_proj\.weight", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/attn/c_proj/w" + elif re.match(r"transformer.h.\d+.attn.c_proj.bias", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/attn/c_proj/b" + elif re.match(r"transformer.h.\d+.ln_2.weight", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/ln_2/g" + elif re.match(r"transformer.h.\d+.ln_2.bias", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/ln_2/b" + elif re.match(r"transformer.h.\d+.mlp.c_fc.weight", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/mlp/c_fc/w" + elif re.match(r"transformer.h.\d+.mlp.c_fc.bias", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/mlp/c_fc/b" + elif re.match(r"transformer.h.\d+.mlp.c_proj.weight", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/mlp/c_proj/w" + elif re.match(r"transformer.h.\d+.mlp.c_proj.bias", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/mlp/c_proj/b" + else: + print("Unrecognized variable name. %s", name) + + # we don't need these + if name.endswith("attn.masked_bias") or name.endswith(".attn.bias"): + print(" Skipping variable: " + name) + continue + + n_dims = len(data.shape); + + # ftype == 0 -> float32, ftype == 1 -> float16 + ftype = 0; + if use_f16: + if (name == "model/wte" or name == "model/lm_head" or name[-2:] == "/g" or name[-2:] == "/w") and n_dims == 2: + print(" Converting to float16") + data = data.astype(np.float16) + ftype = 1 + else: + print(" Converting to float32") + data = data.astype(np.float32) + ftype = 0 + + # for efficiency - transpose the projection matrices + # "model/h.*/attn/c_attn/w" + # "model/h.*/attn/c_proj/w" + # "model/h.*/mlp/c_fc/w" + # "model/h.*/mlp/c_proj/w" + if name[-14:] == "/attn/c_attn/w" or \ + name[-14:] == "/attn/c_proj/w" or \ + name[-11:] == "/mlp/c_fc/w" or \ + name[-13:] == "/mlp/c_proj/w": + print(" Transposing") + data = data.transpose() + + # header + str = name.encode('utf-8') + fout.write(struct.pack("iii", n_dims, len(str), ftype)) + for i in range(n_dims): + fout.write(struct.pack("i", data.shape[n_dims - 1 - i])) + fout.write(str); + + # data + data.tofile(fout) + +fout.close() + +print("Done. Output file: " + fname_out) +print("") diff --git a/ggml_old/examples/gpt-2/convert-ckpt-to-ggml.py b/ggml_old/examples/gpt-2/convert-ckpt-to-ggml.py new file mode 100644 index 0000000..9113141 --- /dev/null +++ b/ggml_old/examples/gpt-2/convert-ckpt-to-ggml.py @@ -0,0 +1,159 @@ +# Convert a model checkpoint to a ggml compatible file +# +# Load the model using TensorFlow. +# Iterate over all variables and write them to a binary file. +# +# For each variable, write the following: +# - Number of dimensions (int) +# - Name length (int) +# - Dimensions (int[n_dims]) +# - Name (char[name_length]) +# - Data (float[n_dims]) +# +# By default, the bigger matrices are converted to 16-bit floats. +# This can be disabled by adding the "use-f32" CLI argument. +# +# At the start of the ggml file we write the model parameters +# and vocabulary. +# + +import sys +import json +import struct +import numpy as np +import tensorflow as tf + +# ref: https://github.com/openai/gpt-2/blob/master/src/encoder.py +def bytes_to_unicode(): + """ + Returns list of utf-8 byte and a corresponding list of unicode strings. + The reversible bpe codes work on unicode strings. + This means you need a large # of unicode characters in your vocab if you want to avoid UNKs. + When you're at something like a 10B token dataset you end up needing around 5K for decent coverage. + This is a signficant percentage of your normal, say, 32K bpe vocab. + To avoid that, we want lookup tables between utf-8 bytes and unicode strings. + And avoids mapping to whitespace/control characters the bpe code barfs on. + """ + bs = list(range(ord("!"), ord("~")+1))+list(range(ord("¡"), ord("¬")+1))+list(range(ord("®"), ord("ÿ")+1)) + cs = bs[:] + n = 0 + for b in range(2**8): + if b not in bs: + bs.append(b) + cs.append(2**8+n) + n += 1 + cs = [chr(n) for n in cs] + return dict(zip(bs, cs)) + +# helper method to convert a numpy array to different float types +def convert_to_ftype(data, ftype): + # fp16 + if ftype == 1: + return data.astype(np.float16) + + assert False, "Invalid ftype: " + str(ftype) + +if len(sys.argv) < 3: + print("Usage: convert-ckpt-to-ggml.py dir-model ftype\n") + print(" ftype == 0 -> float32") + print(" ftype == 1 -> float16") + sys.exit(1) + +# output in the same directory as the model +dir_model = sys.argv[1] +fname_out = sys.argv[1] + "/ggml-model.bin" + +with open(dir_model + "/encoder.json", "r", encoding="utf-8") as f: + encoder = json.load(f) + +with open(dir_model + "/hparams.json", "r", encoding="utf-8") as f: + hparams = json.load(f) + +# possible data types +# ftype == 0 -> float32 +# ftype == 1 -> float16 +# +# map from ftype to string +ftype_str = ["f32", "f16"] + +ftype = 1 +if len(sys.argv) > 2: + ftype = int(sys.argv[2]) + if ftype < 0 or ftype > 1: + print("Invalid ftype: " + str(ftype)) + sys.exit(1) + fname_out = sys.argv[1] + "/ggml-model-" + ftype_str[ftype] + ".bin" + +list_vars = tf.train.list_variables(dir_model) + +fout = open(fname_out, "wb") + +fout.write(struct.pack("i", 0x67676d6c)) # magic: ggml in hex +fout.write(struct.pack("i", hparams["n_vocab"])) +fout.write(struct.pack("i", hparams["n_ctx"])) +fout.write(struct.pack("i", hparams["n_embd"])) +fout.write(struct.pack("i", hparams["n_head"])) +fout.write(struct.pack("i", hparams["n_layer"])) +fout.write(struct.pack("i", ftype)) + +byte_encoder = bytes_to_unicode() +byte_decoder = {v:k for k, v in byte_encoder.items()} + +fout.write(struct.pack("i", len(encoder))) + +for key in encoder: + text = bytearray([byte_decoder[c] for c in key]) + fout.write(struct.pack("i", len(text))) + fout.write(text) + +for name, shape in list_vars: + print("Processing variable: " + name + " with shape: ", shape) + + data = tf.train.load_variable(dir_model, name).squeeze() + n_dims = len(data.shape); + + # for efficiency - transpose the projection matrices + # "model/h.*/attn/c_attn/w" + # "model/h.*/attn/c_proj/w" + # "model/h.*/mlp/c_fc/w" + # "model/h.*/mlp/c_proj/w" + if name[-14:] == "/attn/c_attn/w" or \ + name[-14:] == "/attn/c_proj/w" or \ + name[-11:] == "/mlp/c_fc/w" or \ + name[-13:] == "/mlp/c_proj/w": + print(" Transposing") + data = data.transpose() + + dshape = data.shape + + ftype_cur = 0 + if ftype != 0: + # match name: + # "model/wte" + # "model/h.*/attn/c_attn/w" + # "model/h.*/attn/c_proj/w" + # "model/h.*/mlp/c_fc/w" + # "model/h.*/mlp/c_proj/w" + if name == "model/wte" or name[-2:] == "/w": + print(" Converting to " + ftype_str[ftype]) + data = convert_to_ftype(data, ftype) + ftype_cur = ftype + else: + print(" Converting to float32") + data = data.astype(np.float32) + ftype_cur = 0 + + # header + str = name.encode('utf-8') + fout.write(struct.pack("iii", n_dims, len(str), ftype_cur)) + for i in range(n_dims): + fout.write(struct.pack("i", dshape[n_dims - 1 - i])) + fout.write(str); + + # data + data.tofile(fout) + +fout.close() + +print("Done. Output file: " + fname_out) +print("") diff --git a/ggml_old/examples/gpt-2/convert-h5-to-ggml.py b/ggml_old/examples/gpt-2/convert-h5-to-ggml.py new file mode 100644 index 0000000..6a2b865 --- /dev/null +++ b/ggml_old/examples/gpt-2/convert-h5-to-ggml.py @@ -0,0 +1,195 @@ +# Convert GPT-2 h5 transformer model to ggml format +# +# Load the model using GPT2Model. +# Iterate over all variables and write them to a binary file. +# +# For each variable, write the following: +# - Number of dimensions (int) +# - Name length (int) +# - Dimensions (int[n_dims]) +# - Name (char[name_length]) +# - Data (float[n_dims]) +# +# By default, the bigger matrices are converted to 16-bit floats. +# This can be disabled by adding the "use-f32" CLI argument. +# +# At the start of the ggml file we write the model parameters +# and vocabulary. +# + +import sys +import struct +import json +import numpy as np +import re + +from transformers import GPT2Model + +# ref: https://github.com/openai/gpt-2/blob/master/src/encoder.py +def bytes_to_unicode(): + """ + Returns list of utf-8 byte and a corresponding list of unicode strings. + The reversible bpe codes work on unicode strings. + This means you need a large # of unicode characters in your vocab if you want to avoid UNKs. + When you're at something like a 10B token dataset you end up needing around 5K for decent coverage. + This is a signficant percentage of your normal, say, 32K bpe vocab. + To avoid that, we want lookup tables between utf-8 bytes and unicode strings. + And avoids mapping to whitespace/control characters the bpe code barfs on. + """ + bs = list(range(ord("!"), ord("~")+1))+list(range(ord("¡"), ord("¬")+1))+list(range(ord("®"), ord("ÿ")+1)) + cs = bs[:] + n = 0 + for b in range(2**8): + if b not in bs: + bs.append(b) + cs.append(2**8+n) + n += 1 + cs = [chr(n) for n in cs] + return dict(zip(bs, cs)) + +if len(sys.argv) < 2: + print("Usage: convert-h5-to-ggml.py dir-model [use-f32]\n") + sys.exit(1) + +# output in the same directory as the model +dir_model = sys.argv[1] +fname_out = sys.argv[1] + "/ggml-model.bin" + +with open(dir_model + "/vocab.json", "r", encoding="utf-8") as f: + encoder = json.load(f) + +with open(dir_model + "/added_tokens.json", "r", encoding="utf-8") as f: + encoder_added = json.load(f) + +with open(dir_model + "/config.json", "r", encoding="utf-8") as f: + hparams = json.load(f) + +# use 16-bit or 32-bit floats +use_f16 = True +if len(sys.argv) > 2: + use_f16 = False + fname_out = sys.argv[1] + "/ggml-model-f32.bin" + +model = GPT2Model.from_pretrained(dir_model, low_cpu_mem_usage=True) +#print (model) + +list_vars = model.state_dict() +#print (list_vars) + +fout = open(fname_out, "wb") + +fout.write(struct.pack("i", 0x67676d6c)) # magic: ggml in hex +fout.write(struct.pack("i", hparams["vocab_size"])) +fout.write(struct.pack("i", hparams["n_positions"])) +fout.write(struct.pack("i", hparams["n_embd"])) +fout.write(struct.pack("i", hparams["n_head"])) +fout.write(struct.pack("i", hparams["n_layer"])) +#fout.write(struct.pack("i", hparams["rotary_dim"])) +fout.write(struct.pack("i", use_f16)) + +byte_encoder = bytes_to_unicode() +byte_decoder = {v:k for k, v in byte_encoder.items()} + +fout.write(struct.pack("i", len(encoder) + len(encoder_added))) + +for key in encoder: + text = bytearray([byte_decoder[c] for c in key]) + fout.write(struct.pack("i", len(text))) + fout.write(text) + +for key in encoder_added: + text = bytearray([byte_decoder[c] for c in key]) + fout.write(struct.pack("i", len(text))) + fout.write(text) + +for name in list_vars.keys(): + data = list_vars[name].squeeze().numpy() + print("Processing variable: " + name + " with shape: ", data.shape) + + # we don't need these + if name.endswith("attn.masked_bias") or name.endswith(".attn.bias"): + print(" Skipping variable: " + name) + continue + + n_dims = len(data.shape); + + # ftype == 0 -> float32, ftype == 1 -> float16 + ftype = 0; + if use_f16: + if name[-7:] == ".weight" and n_dims == 2: + print(" Converting to float16") + data = data.astype(np.float16) + ftype = 1 + else: + print(" Converting to float32") + data = data.astype(np.float32) + ftype = 0 + + # for efficiency - transpose these matrices: + # "transformer.h.*.mlp.c_proj.weight + if name.endswith(".mlp.c_proj.weight"): + print(" Transposing") + data = data.transpose() + + # rename headers to keep compatibility + if name == "ln_f.weight": + name = "model/ln_f/g" + elif name == "ln_f.bias": + name = "model/ln_f/b" + elif name == "wte.weight": + name = "model/wte" + elif name == "wpe.weight": + name = "model/wpe" + elif re.match(r"h\.\d+\.ln_1\.weight", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/ln_1/g" + elif re.match(r"h\.\d+\.ln_1\.bias", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/ln_1/b" + elif re.match(r"h\.\d+\.attn\.c_attn\.weight", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/attn/c_attn/w" + elif re.match(r"h\.\d+\.attn\.c_attn\.bias", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/attn/c_attn/b" + elif re.match(r"h\.\d+\.attn\.c_proj\.weight", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/attn/c_proj/w" + elif re.match(r"h.\d+.attn.c_proj.bias", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/attn/c_proj/b" + elif re.match(r"h.\d+.ln_2.weight", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/ln_2/g" + elif re.match(r"h.\d+.ln_2.bias", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/ln_2/b" + elif re.match(r"h.\d+.mlp.c_fc.weight", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/mlp/c_fc/w" + elif re.match(r"h.\d+.mlp.c_fc.bias", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/mlp/c_fc/b" + elif re.match(r"h.\d+.mlp.c_proj.weight", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/mlp/c_proj/w" + elif re.match(r"h.\d+.mlp.c_proj.bias", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/mlp/c_proj/b" + else: + print("Unrecognized variable name. %s", name) + + str = name.encode('utf-8') + + fout.write(struct.pack("iii", n_dims, len(str), ftype)) + for i in range(n_dims): + fout.write(struct.pack("i", data.shape[n_dims - 1 - i])) + fout.write(str); + + # data + data.tofile(fout) + +fout.close() + +print("Done. Output file: " + fname_out) +print("") diff --git a/ggml_old/examples/gpt-2/download-ggml-model.sh b/ggml_old/examples/gpt-2/download-ggml-model.sh new file mode 100755 index 0000000..3aae015 --- /dev/null +++ b/ggml_old/examples/gpt-2/download-ggml-model.sh @@ -0,0 +1,69 @@ +#!/bin/bash + +# This script downloads GPT-2 model files that have already been converted to ggml format. +# This way you don't have to convert them yourself. +# +# If you want to download the original GPT-2 model files, use the "download-model.sh" script instead. + +#src="https://ggml.ggerganov.com" +#pfx="ggml-model-gpt-2" + +src="https://huggingface.co/ggerganov/ggml" +pfx="resolve/main/ggml-model-gpt-2" + +ggml_path=$(dirname $(realpath $0)) + +# GPT-2 models +models=( "117M" "345M" "774M" "1558M" ) + +# list available models +function list_models { + printf "\n" + printf " Available models:" + for model in "${models[@]}"; do + printf " $model" + done + printf "\n\n" +} + +if [ "$#" -ne 1 ]; then + printf "Usage: $0 \n" + list_models + + exit 1 +fi + +model=$1 + +if [[ ! " ${models[@]} " =~ " ${model} " ]]; then + printf "Invalid model: $model\n" + list_models + + exit 1 +fi + +# download ggml model + +printf "Downloading ggml model $model ...\n" + +mkdir -p models/gpt-2-$model + +if [ -x "$(command -v wget)" ]; then + wget --quiet --show-progress -O models/gpt-2-$model/ggml-model.bin $src/$pfx-$model.bin +elif [ -x "$(command -v curl)" ]; then + curl -L --output models/gpt-2-$model/ggml-model.bin $src/$pfx-$model.bin +else + printf "Either wget or curl is required to download models.\n" + exit 1 +fi + +if [ $? -ne 0 ]; then + printf "Failed to download ggml model $model \n" + printf "Please try again later or download the original GPT-2 model files and convert them yourself.\n" + exit 1 +fi + +printf "Done! Model '$model' saved in 'models/gpt-2-$model/ggml-model.bin'\n" +printf "You can now use it like this:\n\n" +printf " $ ./bin/gpt-2 -m models/gpt-2-$model/ggml-model.bin -p \"This is an example\"\n" +printf "\n" diff --git a/ggml_old/examples/gpt-2/download-model.sh b/ggml_old/examples/gpt-2/download-model.sh new file mode 100755 index 0000000..f0c62f4 --- /dev/null +++ b/ggml_old/examples/gpt-2/download-model.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +ggml_path=$(dirname $(realpath $0)) + +# GPT-2 models +models=( "117M" "345M" "774M" "1558M" ) + +# list available models +function list_models { + printf "\n" + printf " Available models:" + for model in "${models[@]}"; do + printf " $model" + done + printf "\n\n" +} + +if [ "$#" -ne 1 ]; then + printf "Usage: $0 \n" + list_models + + exit 1 +fi + +model=$1 + +if [[ ! " ${models[@]} " =~ " ${model} " ]]; then + printf "Invalid model: $model\n" + list_models + + exit 1 +fi + +# download model + +printf "Downloading model $model ...\n" + +mkdir -p models/gpt-2-$model + +for file in checkpoint encoder.json hparams.json model.ckpt.data-00000-of-00001 model.ckpt.index model.ckpt.meta vocab.bpe; do + wget --quiet --show-progress -O models/gpt-2-$model/$file https://openaipublic.blob.core.windows.net/gpt-2/models/$model/$file +done + +printf "Done! Model '$model' saved in 'models/gpt-2-$model/'\n\n" +printf "Run the convert-ckpt-to-ggml.py script to convert the model to ggml format.\n" +printf "\n" +printf " python $ggml_path/convert-ckpt-to-ggml.py models/gpt-2-$model/\n" +printf "\n" diff --git a/ggml_old/examples/gpt-2/main.cpp b/ggml_old/examples/gpt-2/main.cpp new file mode 100644 index 0000000..47f5e5e --- /dev/null +++ b/ggml_old/examples/gpt-2/main.cpp @@ -0,0 +1,838 @@ +#include "ggml/ggml.h" + +#include "common.h" +#include "common-ggml.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +// default hparams (GPT-2 117M) +struct gpt2_hparams { + int32_t n_vocab = 50257; + int32_t n_ctx = 1024; + int32_t n_embd = 768; + int32_t n_head = 12; + int32_t n_layer = 12; + int32_t ftype = 1; +}; + +struct gpt2_layer { + // normalization + struct ggml_tensor * ln_1_g; + struct ggml_tensor * ln_1_b; + + struct ggml_tensor * ln_2_g; + struct ggml_tensor * ln_2_b; + + // attention + struct ggml_tensor * c_attn_attn_w; + struct ggml_tensor * c_attn_attn_b; + + struct ggml_tensor * c_attn_proj_w; + struct ggml_tensor * c_attn_proj_b; + + // mlp + struct ggml_tensor * c_mlp_fc_w; + struct ggml_tensor * c_mlp_fc_b; + + struct ggml_tensor * c_mlp_proj_w; + struct ggml_tensor * c_mlp_proj_b; +}; + +struct gpt2_model { + gpt2_hparams hparams; + + // normalization + struct ggml_tensor * ln_f_g; + struct ggml_tensor * ln_f_b; + + struct ggml_tensor * wte; // position embedding + struct ggml_tensor * wpe; // token embedding + struct ggml_tensor * lm_head; // language model head + + std::vector layers; + + // key + value memory + struct ggml_tensor * memory_k; + struct ggml_tensor * memory_v; + + // + struct ggml_context * ctx; + std::map tensors; +}; + +// load the model's weights from a file +bool gpt2_model_load(const std::string & fname, gpt2_model & model, gpt_vocab & vocab) { + printf("%s: loading model from '%s'\n", __func__, fname.c_str()); + + auto fin = std::ifstream(fname, std::ios::binary); + if (!fin) { + fprintf(stderr, "%s: failed to open '%s'\n", __func__, fname.c_str()); + return false; + } + + // verify magic + { + uint32_t magic; + fin.read((char *) &magic, sizeof(magic)); + if (magic != 0x67676d6c) { + fprintf(stderr, "%s: invalid model file '%s' (bad magic)\n", __func__, fname.c_str()); + return false; + } + } + + // load hparams + { + auto & hparams = model.hparams; + + fin.read((char *) &hparams.n_vocab, sizeof(hparams.n_vocab)); + fin.read((char *) &hparams.n_ctx, sizeof(hparams.n_ctx)); + fin.read((char *) &hparams.n_embd, sizeof(hparams.n_embd)); + fin.read((char *) &hparams.n_head, sizeof(hparams.n_head)); + fin.read((char *) &hparams.n_layer, sizeof(hparams.n_layer)); + fin.read((char *) &hparams.ftype, sizeof(hparams.ftype)); + + const int32_t qntvr = hparams.ftype / GGML_QNT_VERSION_FACTOR; + + printf("%s: n_vocab = %d\n", __func__, hparams.n_vocab); + printf("%s: n_ctx = %d\n", __func__, hparams.n_ctx); + printf("%s: n_embd = %d\n", __func__, hparams.n_embd); + printf("%s: n_head = %d\n", __func__, hparams.n_head); + printf("%s: n_layer = %d\n", __func__, hparams.n_layer); + printf("%s: ftype = %d\n", __func__, hparams.ftype); + printf("%s: qntvr = %d\n", __func__, qntvr); + + hparams.ftype %= GGML_QNT_VERSION_FACTOR; + } + + // load vocab + { + int32_t n_vocab = 0; + fin.read((char *) &n_vocab, sizeof(n_vocab)); + + if (n_vocab != model.hparams.n_vocab) { + fprintf(stderr, "%s: invalid model file '%s' (bad vocab size %d != %d)\n", + __func__, fname.c_str(), n_vocab, model.hparams.n_vocab); + return false; + } + + std::string word; + std::vector buf(128); + + for (int i = 0; i < n_vocab; i++) { + uint32_t len; + fin.read((char *) &len, sizeof(len)); + + buf.resize(len); + fin.read((char *) buf.data(), len); + word.assign(buf.data(), len); + + vocab.token_to_id[word] = i; + vocab.id_to_token[i] = word; + } + } + + // for the big tensors, we have the option to store the data in 16-bit floats or quantized + // in order to save memory and also to speed up the computation + ggml_type wtype = ggml_ftype_to_ggml_type((ggml_ftype) (model.hparams.ftype)); + if (wtype == GGML_TYPE_COUNT) { + fprintf(stderr, "%s: invalid model file '%s' (bad ftype value %d)\n", + __func__, fname.c_str(), model.hparams.ftype); + return false; + } + + auto & ctx = model.ctx; + + size_t ctx_size = 0; + + { + const auto & hparams = model.hparams; + + const int n_embd = hparams.n_embd; + const int n_layer = hparams.n_layer; + const int n_ctx = hparams.n_ctx; + const int n_vocab = hparams.n_vocab; + + ctx_size += n_embd*ggml_type_sizef(GGML_TYPE_F32); // ln_f_g + ctx_size += n_embd*ggml_type_sizef(GGML_TYPE_F32); // ln_f_b + + ctx_size += n_vocab*n_embd*ggml_type_sizef(wtype); // wte + ctx_size += n_ctx*n_embd*ggml_type_sizef(GGML_TYPE_F32); // wpe + ctx_size += n_vocab*n_embd*ggml_type_sizef(wtype); // lm_head + + ctx_size += n_layer*(n_embd*ggml_type_sizef(GGML_TYPE_F32)); // ln_1_g + ctx_size += n_layer*(n_embd*ggml_type_sizef(GGML_TYPE_F32)); // ln_1_b + + ctx_size += n_layer*(n_embd*ggml_type_sizef(GGML_TYPE_F32)); // ln_2_g + ctx_size += n_layer*(n_embd*ggml_type_sizef(GGML_TYPE_F32)); // ln_2_b + + ctx_size += n_layer*(3*n_embd*n_embd*ggml_type_sizef(wtype)); // c_attn_attn_w + ctx_size += n_layer*( 3*n_embd*ggml_type_sizef(GGML_TYPE_F32)); // c_attn_attn_b + + ctx_size += n_layer*(n_embd*n_embd*ggml_type_sizef(wtype)); // c_attn_proj_w + ctx_size += n_layer*( n_embd*ggml_type_sizef(GGML_TYPE_F32)); // c_attn_proj_b + + ctx_size += n_layer*(4*n_embd*n_embd*ggml_type_sizef(wtype)); // c_mlp_fc_w + ctx_size += n_layer*( 4*n_embd*ggml_type_sizef(GGML_TYPE_F32)); // c_mlp_fc_b + + ctx_size += n_layer*(4*n_embd*n_embd*ggml_type_sizef(wtype)); // c_mlp_proj_w + ctx_size += n_layer*( n_embd*ggml_type_sizef(GGML_TYPE_F32)); // c_mlp_proj_b + + ctx_size += n_ctx*n_layer*n_embd*ggml_type_sizef(GGML_TYPE_F32); // memory_k + ctx_size += n_ctx*n_layer*n_embd*ggml_type_sizef(GGML_TYPE_F32); // memory_v + + ctx_size += (6 + 12*n_layer)*512; // object overhead + + printf("%s: ggml tensor size = %d bytes\n", __func__, (int) sizeof(ggml_tensor)); + printf("%s: ggml ctx size = %6.2f MB\n", __func__, ctx_size/(1024.0*1024.0)); + } + + // create the ggml context + { + struct ggml_init_params params = { + .mem_size = ctx_size, + .mem_buffer = NULL, + .no_alloc = false, + }; + + model.ctx = ggml_init(params); + if (!model.ctx) { + fprintf(stderr, "%s: ggml_init() failed\n", __func__); + return false; + } + } + + // prepare memory for the weights + { + const auto & hparams = model.hparams; + + const int n_embd = hparams.n_embd; + const int n_layer = hparams.n_layer; + const int n_ctx = hparams.n_ctx; + const int n_vocab = hparams.n_vocab; + + model.layers.resize(n_layer); + + model.ln_f_g = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + model.ln_f_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + + model.wte = ggml_new_tensor_2d(ctx, wtype, n_embd, n_vocab); + model.wpe = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, n_embd, n_ctx); + model.lm_head = ggml_new_tensor_2d(ctx, wtype, n_embd, n_vocab); + + // map by name + model.tensors["model/ln_f/g"] = model.ln_f_g; + model.tensors["model/ln_f/b"] = model.ln_f_b; + + model.tensors["model/wte"] = model.wte; + model.tensors["model/wpe"] = model.wpe; + model.tensors["model/lm_head"] = model.lm_head; + + for (int i = 0; i < n_layer; ++i) { + auto & layer = model.layers[i]; + + layer.ln_1_g = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + layer.ln_1_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + + layer.ln_2_g = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + layer.ln_2_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + + layer.c_attn_attn_w = ggml_new_tensor_2d(ctx, wtype, n_embd, 3*n_embd); + layer.c_attn_attn_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 3*n_embd); + + layer.c_attn_proj_w = ggml_new_tensor_2d(ctx, wtype, n_embd, n_embd); + layer.c_attn_proj_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + + layer.c_mlp_fc_w = ggml_new_tensor_2d(ctx, wtype, n_embd, 4*n_embd); + layer.c_mlp_fc_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 4*n_embd); + + layer.c_mlp_proj_w = ggml_new_tensor_2d(ctx, wtype, 4*n_embd, n_embd); + layer.c_mlp_proj_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + + // map by name + model.tensors["model/h" + std::to_string(i) + "/ln_1/g"] = layer.ln_1_g; + model.tensors["model/h" + std::to_string(i) + "/ln_1/b"] = layer.ln_1_b; + + model.tensors["model/h" + std::to_string(i) + "/ln_2/g"] = layer.ln_2_g; + model.tensors["model/h" + std::to_string(i) + "/ln_2/b"] = layer.ln_2_b; + + model.tensors["model/h" + std::to_string(i) + "/attn/c_attn/w"] = layer.c_attn_attn_w; + model.tensors["model/h" + std::to_string(i) + "/attn/c_attn/b"] = layer.c_attn_attn_b; + + model.tensors["model/h" + std::to_string(i) + "/attn/c_proj/w"] = layer.c_attn_proj_w; + model.tensors["model/h" + std::to_string(i) + "/attn/c_proj/b"] = layer.c_attn_proj_b; + + model.tensors["model/h" + std::to_string(i) + "/mlp/c_fc/w"] = layer.c_mlp_fc_w; + model.tensors["model/h" + std::to_string(i) + "/mlp/c_fc/b"] = layer.c_mlp_fc_b; + + model.tensors["model/h" + std::to_string(i) + "/mlp/c_proj/w"] = layer.c_mlp_proj_w; + model.tensors["model/h" + std::to_string(i) + "/mlp/c_proj/b"] = layer.c_mlp_proj_b; + } + } + + // key + value memory + { + const auto & hparams = model.hparams; + + const int n_embd = hparams.n_embd; + const int n_layer = hparams.n_layer; + const int n_ctx = hparams.n_ctx; + + const int n_mem = n_layer*n_ctx; + const int n_elements = n_embd*n_mem; + + model.memory_k = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_elements); + model.memory_v = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_elements); + + const size_t memory_size = ggml_nbytes(model.memory_k) + ggml_nbytes(model.memory_v); + + printf("%s: memory size = %8.2f MB, n_mem = %d\n", __func__, memory_size/1024.0/1024.0, n_mem); + } + + // load weights + { + size_t total_size = 0; + + bool has_lm_head = false; + + while (true) { + int32_t n_dims; + int32_t length; + int32_t ttype; + + fin.read(reinterpret_cast(&n_dims), sizeof(n_dims)); + fin.read(reinterpret_cast(&length), sizeof(length)); + fin.read(reinterpret_cast(&ttype), sizeof(ttype)); + + if (fin.eof()) { + break; + } + + int32_t nelements = 1; + int32_t ne[2] = { 1, 1 }; + for (int i = 0; i < n_dims; ++i) { + fin.read(reinterpret_cast(&ne[i]), sizeof(ne[i])); + nelements *= ne[i]; + } + + std::string name(length, 0); + fin.read(&name[0], length); + + if (model.tensors.find(name.data()) == model.tensors.end()) { + fprintf(stderr, "%s: unknown tensor '%s' in model file\n", __func__, name.data()); + return false; + } + + auto tensor = model.tensors[name.data()]; + if (ggml_nelements(tensor) != nelements) { + fprintf(stderr, "%s: tensor '%s' has wrong size in model file\n", __func__, name.data()); + return false; + } + + if (tensor->ne[0] != ne[0] || tensor->ne[1] != ne[1]) { + fprintf(stderr, "%s: tensor '%s' has wrong shape in model file: got [%d, %d], expected [%d, %d]\n", + __func__, name.data(), (int) tensor->ne[0], (int) tensor->ne[1], ne[0], ne[1]); + return false; + } + + // for debugging + if (0) { + printf("%24s - [%5d, %5d], type = %6s, %6.2f MB, %9zu bytes\n", name.data(), ne[0], ne[1], ggml_type_name(ggml_type(ttype)), ggml_nbytes(tensor)/1024.0/1024.0, ggml_nbytes(tensor)); + } + + const size_t bpe = ggml_type_size(ggml_type(ttype)); + + if ((nelements*bpe)/ggml_blck_size(tensor->type) != ggml_nbytes(tensor)) { + fprintf(stderr, "%s: tensor '%s' has wrong size in model file: got %zu, expected %zu\n", + __func__, name.data(), ggml_nbytes(tensor), nelements*bpe); + return false; + } + + fin.read(reinterpret_cast(tensor->data), ggml_nbytes(tensor)); + + // GPT-2 models share the WTE tensor as the LM head + if (name == "model/wte" && has_lm_head == false) { + memcpy(model.lm_head->data, tensor->data, ggml_nbytes(tensor)); + } + + if (name == "model/lm_head") { + has_lm_head = true; + } + + total_size += ggml_nbytes(tensor); + } + + printf("%s: model size = %8.2f MB\n", __func__, total_size/1024.0/1024.0); + } + + fin.close(); + + return true; +} + +// evaluate the transformer +// +// - model: the model +// - n_threads: number of threads to use +// - n_past: the context size so far +// - embd_inp: the embeddings of the tokens in the context +// - embd_w: the predicted logits for the next token +// +bool gpt2_eval( + const gpt2_model & model, + const int n_threads, + const int n_past, + const std::vector & embd_inp, + std::vector & embd_w, + size_t & mem_per_token) { + const int N = embd_inp.size(); + + const auto & hparams = model.hparams; + + const int n_embd = hparams.n_embd; + const int n_layer = hparams.n_layer; + const int n_ctx = hparams.n_ctx; + const int n_head = hparams.n_head; + const int n_vocab = hparams.n_vocab; + + static size_t buf_size = 256u*1024*1024; + static void * buf = malloc(buf_size); + + if (mem_per_token > 0 && mem_per_token*N > buf_size) { + const size_t buf_size_new = 1.1*(mem_per_token*N); // add 10% to account for ggml object overhead + //printf("\n%s: reallocating buffer from %zu to %zu bytes\n", __func__, buf_size, buf_size_new); + + // reallocate + buf_size = buf_size_new; + buf = realloc(buf, buf_size); + if (buf == nullptr) { + fprintf(stderr, "%s: failed to allocate %zu bytes\n", __func__, buf_size); + return false; + } + } + + struct ggml_init_params params = { + .mem_size = buf_size, + .mem_buffer = buf, + .no_alloc = false, + }; + + struct ggml_context * ctx0 = ggml_init(params); + struct ggml_cgraph gf = {}; + gf.n_threads = n_threads; + + struct ggml_tensor * embd = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, N); + memcpy(embd->data, embd_inp.data(), N*ggml_element_size(embd)); + + struct ggml_tensor * position = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, N); + for (int i = 0; i < N; ++i) { + ((int32_t *) position->data)[i] = n_past + i; + } + + // wte + wpe + struct ggml_tensor * inpL = + ggml_add(ctx0, + ggml_get_rows(ctx0, model.wte, embd), + ggml_get_rows(ctx0, model.wpe, position)); + + for (int il = 0; il < n_layer; ++il) { + struct ggml_tensor * cur; + + // norm + { + // [ 768, N] + cur = ggml_norm(ctx0, inpL); + + // cur = ln_1_g*cur + ln_1_b + // [ 768, N] + cur = ggml_add(ctx0, + ggml_mul(ctx0, + ggml_repeat(ctx0, model.layers[il].ln_1_g, cur), + cur), + ggml_repeat(ctx0, model.layers[il].ln_1_b, cur)); + } + + // attn + // [2304, 768] - model.layers[il].c_attn_attn_w + // [2304, 1] - model.layers[il].c_attn_attn_b + // [ 768, N] - cur (in) + // [2304, N] - cur (out) + // + // cur = attn_w*cur + attn_b + // [2304, N] + { + cur = ggml_mul_mat(ctx0, + model.layers[il].c_attn_attn_w, + cur); + + cur = ggml_add(ctx0, + ggml_repeat(ctx0, model.layers[il].c_attn_attn_b, cur), + cur); + } + + // self-attention + { + struct ggml_tensor * Qcur = ggml_view_2d(ctx0, cur, n_embd, N, cur->nb[1], 0*sizeof(float)*n_embd); + struct ggml_tensor * Kcur = ggml_view_2d(ctx0, cur, n_embd, N, cur->nb[1], 1*sizeof(float)*n_embd); + struct ggml_tensor * Vcur = ggml_view_2d(ctx0, cur, n_embd, N, cur->nb[1], 2*sizeof(float)*n_embd); + + // store key and value to memory + if (N >= 1) { + struct ggml_tensor * k = ggml_view_1d(ctx0, model.memory_k, N*n_embd, (ggml_element_size(model.memory_k)*n_embd)*(il*n_ctx + n_past)); + struct ggml_tensor * v = ggml_view_1d(ctx0, model.memory_v, N*n_embd, (ggml_element_size(model.memory_v)*n_embd)*(il*n_ctx + n_past)); + + ggml_build_forward_expand(&gf, ggml_cpy(ctx0, Kcur, k)); + ggml_build_forward_expand(&gf, ggml_cpy(ctx0, Vcur, v)); + } + + // Q = Qcur.contiguous().view(n_embd/n_head, n_head, N).permute(0, 2, 1, 3) + // [64, N, 12] + struct ggml_tensor * Q = + ggml_permute(ctx0, + ggml_cpy(ctx0, + Qcur, + ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_embd/n_head, n_head, N)), + 0, 2, 1, 3); + + // K = Kmem.view(n_embd/n_head, n_head, n_past + N).permute(0, 2, 1, 3) + // [64, n_past + N, 12] + struct ggml_tensor * K = + ggml_permute(ctx0, + ggml_reshape_3d(ctx0, + ggml_view_1d(ctx0, model.memory_k, (n_past + N)*n_embd, il*n_ctx*ggml_element_size(model.memory_k)*n_embd), + n_embd/n_head, n_head, n_past + N), + 0, 2, 1, 3); + + // GG: flash attention + //struct ggml_tensor * V = + // ggml_cpy(ctx0, + // ggml_permute(ctx0, + // ggml_reshape_3d(ctx0, + // ggml_view_1d(ctx0, model.memory_v, (n_past + N)*n_embd, il*n_ctx*ggml_element_size(model.memory_v)*n_embd), + // n_embd/n_head, n_head, n_past + N), + // 1, 2, 0, 3), + // ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_past + N, n_embd/n_head, n_head)); + + //struct ggml_tensor * KQV = ggml_flash_attn(ctx0, Q, K, V, true); + + // K * Q + // [n_past + N, N, 12] + struct ggml_tensor * KQ = ggml_mul_mat(ctx0, K, Q); + + // KQ_scaled = KQ / sqrt(n_embd/n_head) + // [n_past + N, N, 12] + struct ggml_tensor * KQ_scaled = + ggml_scale_inplace(ctx0, + KQ, + ggml_new_f32(ctx0, 1.0f/sqrt(float(n_embd)/n_head)) + ); + + // KQ_masked = mask_past(KQ_scaled) + // [n_past + N, N, 12] + struct ggml_tensor * KQ_masked = ggml_diag_mask_inf_inplace(ctx0, KQ_scaled, n_past); + + // KQ = soft_max(KQ_masked) + // [n_past + N, N, 12] + struct ggml_tensor * KQ_soft_max = ggml_soft_max_inplace(ctx0, KQ_masked); + + // V_trans = Vmem.view(n_embd/n_head, n_head, n_past + N).permute(1, 2, 0, 3).contiguous() + // [n_past + N, 64, 12] + struct ggml_tensor * V_trans = + ggml_cpy(ctx0, + ggml_permute(ctx0, + ggml_reshape_3d(ctx0, + ggml_view_1d(ctx0, model.memory_v, (n_past + N)*n_embd, il*n_ctx*ggml_element_size(model.memory_v)*n_embd), + n_embd/n_head, n_head, n_past + N), + 1, 2, 0, 3), + ggml_new_tensor_3d(ctx0, model.memory_v->type, n_past + N, n_embd/n_head, n_head)); + + // KQV = transpose(V) * KQ_soft_max + // [64, N, 12] + struct ggml_tensor * KQV = ggml_mul_mat(ctx0, V_trans, KQ_soft_max); + + // KQV_merged = KQV.permute(0, 2, 1, 3) + // [64, 12, N] + struct ggml_tensor * KQV_merged = ggml_permute(ctx0, KQV, 0, 2, 1, 3); + + // cur = KQV_merged.contiguous().view(n_embd, N) + // [768, N] + cur = ggml_cpy(ctx0, + KQV_merged, + ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_embd, N)); + } + + // projection + // [ 768, 768] - model.layers[il].c_attn_proj_w + // [ 768, 1] - model.layers[il].c_attn_proj_b + // [ 768, N] - cur (in) + // [ 768, N] - cur (out) + // + // cur = proj_w*cur + proj_b + // [768, N] + { + cur = ggml_mul_mat(ctx0, + model.layers[il].c_attn_proj_w, + cur); + + cur = ggml_add(ctx0, + ggml_repeat(ctx0, model.layers[il].c_attn_proj_b, cur), + cur); + } + + // add the input + cur = ggml_add(ctx0, cur, inpL); + + struct ggml_tensor * inpFF = cur; + + // feed-forward network + { + // norm + { + cur = ggml_norm(ctx0, inpFF); + + // cur = ln_2_g*cur + ln_2_b + // [ 768, N] + cur = ggml_add(ctx0, + ggml_mul(ctx0, + ggml_repeat(ctx0, model.layers[il].ln_2_g, cur), + cur), + ggml_repeat(ctx0, model.layers[il].ln_2_b, cur)); + } + + // fully connected + // [3072, 768] - model.layers[il].c_mlp_fc_w + // [3072, 1] - model.layers[il].c_mlp_fc_b + // [ 768, N] - cur (in) + // [3072, N] - cur (out) + // + // cur = fc_w*cur + fc_b + // [3072, N] + cur = ggml_mul_mat(ctx0, + model.layers[il].c_mlp_fc_w, + cur); + + cur = ggml_add(ctx0, + ggml_repeat(ctx0, model.layers[il].c_mlp_fc_b, cur), + cur); + + // GELU activation + // [3072, N] + cur = ggml_gelu(ctx0, cur); + + // projection + // [ 768, 3072] - model.layers[il].c_mlp_proj_w + // [ 768, 1] - model.layers[il].c_mlp_proj_b + // [3072, N] - cur (in) + // [ 768, N] - cur (out) + // + // cur = proj_w*cur + proj_b + // [768, N] + cur = ggml_mul_mat(ctx0, + model.layers[il].c_mlp_proj_w, + cur); + + cur = ggml_add(ctx0, + ggml_repeat(ctx0, model.layers[il].c_mlp_proj_b, cur), + cur); + } + + // input for next layer + inpL = ggml_add(ctx0, cur, inpFF); + } + + // norm + { + // [ 768, N] + inpL = ggml_norm(ctx0, inpL); + + // inpL = ln_f_g*inpL + ln_f_b + // [ 768, N] + inpL = ggml_add(ctx0, + ggml_mul(ctx0, + ggml_repeat(ctx0, model.ln_f_g, inpL), + inpL), + ggml_repeat(ctx0, model.ln_f_b, inpL)); + } + + // inpL = WTE * inpL + // [ 768, 50257] - model.lm_head + // [ 768, N] - inpL + inpL = ggml_mul_mat(ctx0, model.lm_head, inpL); + + // logits -> probs + //inpL = ggml_soft_max_inplace(ctx0, inpL); + + // run the computation + ggml_build_forward_expand(&gf, inpL); + ggml_graph_compute (ctx0, &gf); + + //if (n_past%100 == 0) { + // ggml_graph_print (&gf); + // ggml_graph_dump_dot(&gf, NULL, "gpt-2.dot"); + //} + + //embd_w.resize(n_vocab*N); + //memcpy(embd_w.data(), ggml_get_data(inpL), sizeof(float)*n_vocab*N); + + // return result just for the last token + embd_w.resize(n_vocab); + memcpy(embd_w.data(), (float *) ggml_get_data(inpL) + (n_vocab*(N-1)), sizeof(float)*n_vocab); + + if (mem_per_token == 0) { + mem_per_token = ggml_used_mem(ctx0)/N; + } + //printf("used_mem = %zu\n", ggml_used_mem(ctx0)); + + ggml_free(ctx0); + + return true; +} + +int main(int argc, char ** argv) { + ggml_time_init(); + + const int64_t t_main_start_us = ggml_time_us(); + + gpt_params params; + params.model = "models/gpt-2-117M/ggml-model.bin"; + + if (gpt_params_parse(argc, argv, params) == false) { + return 1; + } + + if (params.seed < 0) { + params.seed = time(NULL); + } + + printf("%s: seed = %d\n", __func__, params.seed); + + std::mt19937 rng(params.seed); + if (params.prompt.empty()) { + params.prompt = gpt_random_prompt(rng); + } + + int64_t t_load_us = 0; + + gpt_vocab vocab; + gpt2_model model; + + // load the model + { + const int64_t t_start_us = ggml_time_us(); + + if (!gpt2_model_load(params.model, model, vocab)) { + fprintf(stderr, "%s: failed to load model from '%s'\n", __func__, params.model.c_str()); + return 1; + } + + t_load_us = ggml_time_us() - t_start_us; + } + + int n_past = 0; + + int64_t t_sample_us = 0; + int64_t t_predict_us = 0; + + std::vector logits; + + // tokenize the prompt + std::vector embd_inp = ::gpt_tokenize(vocab, params.prompt); + + params.n_predict = std::min(params.n_predict, model.hparams.n_ctx - (int) embd_inp.size()); + + printf("%s: prompt: '%s'\n", __func__, params.prompt.c_str()); + printf("%s: number of tokens in prompt = %zu, first 8 tokens: ", __func__, embd_inp.size()); + for (int i = 0; i < std::min(8, (int) embd_inp.size()); i++) { + printf("%d ", embd_inp[i]); + } + printf("\n\n"); + + // submit the input prompt token-by-token + // this reduces the memory usage during inference, at the cost of a bit of speed at the beginning + std::vector embd; + + // determine the required inference memory per token: + size_t mem_per_token = 0; + gpt2_eval(model, params.n_threads, 0, { 0, 1, 2, 3 }, logits, mem_per_token); + + for (int i = embd.size(); i < embd_inp.size() + params.n_predict; i++) { + // predict + if (embd.size() > 0) { + const int64_t t_start_us = ggml_time_us(); + + if (!gpt2_eval(model, params.n_threads, n_past, embd, logits, mem_per_token)) { + printf("Failed to predict\n"); + return 1; + } + + t_predict_us += ggml_time_us() - t_start_us; + } + + n_past += embd.size(); + embd.clear(); + + if (i >= embd_inp.size()) { + // sample next token + const int top_k = params.top_k; + const float top_p = params.top_p; + const float temp = params.temp; + + const int n_vocab = model.hparams.n_vocab; + + gpt_vocab::id id = 0; + + { + const int64_t t_start_sample_us = ggml_time_us(); + + id = gpt_sample_top_k_top_p(vocab, logits.data() + (logits.size() - n_vocab), top_k, top_p, temp, rng); + + t_sample_us += ggml_time_us() - t_start_sample_us; + } + + // add it to the context + embd.push_back(id); + } else { + // if here, it means we are still processing the input prompt + for (int k = i; k < embd_inp.size(); k++) { + embd.push_back(embd_inp[k]); + if (embd.size() >= params.n_batch) { + break; + } + } + i += embd.size() - 1; + } + + // display text + for (auto id : embd) { + printf("%s", vocab.id_to_token[id].c_str()); + } + fflush(stdout); + + // end of text token + if (embd.back() == 50256) { + break; + } + } + + // report timing + { + const int64_t t_main_end_us = ggml_time_us(); + + printf("\n\n"); + printf("%s: mem per token = %8zu bytes\n", __func__, mem_per_token); + printf("%s: load time = %8.2f ms\n", __func__, t_load_us/1000.0f); + printf("%s: sample time = %8.2f ms\n", __func__, t_sample_us/1000.0f); + printf("%s: predict time = %8.2f ms / %.2f ms per token\n", __func__, t_predict_us/1000.0f, t_predict_us/1000.0f/n_past); + printf("%s: total time = %8.2f ms\n", __func__, (t_main_end_us - t_main_start_us)/1000.0f); + } + + ggml_free(model.ctx); + + return 0; +} diff --git a/ggml_old/examples/gpt-2/quantize.cpp b/ggml_old/examples/gpt-2/quantize.cpp new file mode 100644 index 0000000..d802189 --- /dev/null +++ b/ggml_old/examples/gpt-2/quantize.cpp @@ -0,0 +1,184 @@ +#include "ggml/ggml.h" + +#include "common.h" +#include "common-ggml.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// default hparams (GPT-2 117M) +struct gpt2_hparams { + int32_t n_vocab = 50257; + int32_t n_ctx = 1024; + int32_t n_embd = 768; + int32_t n_head = 12; + int32_t n_layer = 12; + int32_t ftype = 1; +}; + +// quantize a model +bool gpt2_model_quantize(const std::string & fname_inp, const std::string & fname_out, ggml_ftype ftype) { + gpt_vocab vocab; + + printf("%s: loading model from '%s'\n", __func__, fname_inp.c_str()); + + auto finp = std::ifstream(fname_inp, std::ios::binary); + if (!finp) { + fprintf(stderr, "%s: failed to open '%s' for reading\n", __func__, fname_inp.c_str()); + return false; + } + + auto fout = std::ofstream(fname_out, std::ios::binary); + if (!fout) { + fprintf(stderr, "%s: failed to open '%s' for writing\n", __func__, fname_out.c_str()); + return false; + } + + // verify magic + { + uint32_t magic; + finp.read((char *) &magic, sizeof(magic)); + if (magic != 0x67676d6c) { + fprintf(stderr, "%s: invalid model file '%s' (bad magic)\n", __func__, fname_inp.c_str()); + return false; + } + + fout.write((char *) &magic, sizeof(magic)); + } + + gpt2_hparams hparams; + + // load hparams + { + finp.read((char *) &hparams.n_vocab, sizeof(hparams.n_vocab)); + finp.read((char *) &hparams.n_ctx, sizeof(hparams.n_ctx)); + finp.read((char *) &hparams.n_embd, sizeof(hparams.n_embd)); + finp.read((char *) &hparams.n_head, sizeof(hparams.n_head)); + finp.read((char *) &hparams.n_layer, sizeof(hparams.n_layer)); + finp.read((char *) &hparams.ftype, sizeof(hparams.ftype)); + + const int32_t qntvr_src = hparams.ftype / GGML_QNT_VERSION_FACTOR; + const int32_t ftype_dst = GGML_QNT_VERSION * GGML_QNT_VERSION_FACTOR + ftype; + + printf("%s: n_vocab = %d\n", __func__, hparams.n_vocab); + printf("%s: n_ctx = %d\n", __func__, hparams.n_ctx); + printf("%s: n_embd = %d\n", __func__, hparams.n_embd); + printf("%s: n_head = %d\n", __func__, hparams.n_head); + printf("%s: n_layer = %d\n", __func__, hparams.n_layer); + printf("%s: ftype (src) = %d\n", __func__, hparams.ftype); + printf("%s: qntvr (src) = %d\n", __func__, qntvr_src); + printf("%s: ftype (dst) = %d\n", __func__, ftype_dst); + printf("%s: qntvr (dst) = %d\n", __func__, GGML_QNT_VERSION); + + fout.write((char *) &hparams.n_vocab, sizeof(hparams.n_vocab)); + fout.write((char *) &hparams.n_ctx, sizeof(hparams.n_ctx)); + fout.write((char *) &hparams.n_embd, sizeof(hparams.n_embd)); + fout.write((char *) &hparams.n_head, sizeof(hparams.n_head)); + fout.write((char *) &hparams.n_layer, sizeof(hparams.n_layer)); + fout.write((char *) &ftype_dst, sizeof(ftype_dst)); + } + + // load vocab + { + int32_t n_vocab = 0; + finp.read ((char *) &n_vocab, sizeof(n_vocab)); + fout.write((char *) &n_vocab, sizeof(n_vocab)); + + if (n_vocab != hparams.n_vocab) { + fprintf(stderr, "%s: invalid model file '%s' (bad vocab size %d != %d)\n", + __func__, fname_inp.c_str(), n_vocab, hparams.n_vocab); + return false; + } + + std::string word; + for (int i = 0; i < n_vocab; i++) { + uint32_t len; + finp.read ((char *) &len, sizeof(len)); + fout.write((char *) &len, sizeof(len)); + + word.resize(len); + finp.read ((char *) word.data(), len); + fout.write((char *) word.data(), len); + + vocab.token_to_id[word] = i; + vocab.id_to_token[i] = word; + } + } + + // regexes of tensor names to be quantized + const std::vector to_quant = { + "model/wte", + "model/lm_head", + "model/h.*/attn/c_attn/w", + "model/h.*/attn/c_proj/w", + "model/h.*/mlp/c_fc/w", + "model/h.*/mlp/c_proj/w", + }; + + if (!ggml_common_quantize_0(finp, fout, ftype, to_quant, {})) { + fprintf(stderr, "%s: failed to quantize model '%s'\n", __func__, fname_inp.c_str()); + return false; + } + + finp.close(); + fout.close(); + + return true; +} + +// usage: +// ./gpt-2-quantize models/gpt-2-117M/ggml-model.bin models/gpt-2-117M/ggml-model-quant.bin type +// +int main(int argc, char ** argv) { + if (argc != 4) { + fprintf(stderr, "usage: %s model-f32.bin model-quant.bin type\n", argv[0]); + ggml_print_ftypes(stderr); + return 1; + } + + // needed to initialize f16 tables + { + struct ggml_init_params params = { 0, NULL, false }; + struct ggml_context * ctx = ggml_init(params); + ggml_free(ctx); + } + + const std::string fname_inp = argv[1]; + const std::string fname_out = argv[2]; + + const ggml_ftype ftype = ggml_parse_ftype(argv[3]); + + const int64_t t_main_start_us = ggml_time_us(); + + int64_t t_quantize_us = 0; + + // load the model + { + const int64_t t_start_us = ggml_time_us(); + + if (!gpt2_model_quantize(fname_inp, fname_out, ggml_ftype(ftype))) { + fprintf(stderr, "%s: failed to quantize model from '%s'\n", __func__, fname_inp.c_str()); + return 1; + } + + t_quantize_us = ggml_time_us() - t_start_us; + } + + // report timing + { + const int64_t t_main_end_us = ggml_time_us(); + + printf("\n"); + printf("%s: quantize time = %8.2f ms\n", __func__, t_quantize_us/1000.0f); + printf("%s: total time = %8.2f ms\n", __func__, (t_main_end_us - t_main_start_us)/1000.0f); + } + + return 0; +} diff --git a/ggml_old/examples/gpt-j/CMakeLists.txt b/ggml_old/examples/gpt-j/CMakeLists.txt new file mode 100644 index 0000000..3675b7d --- /dev/null +++ b/ggml_old/examples/gpt-j/CMakeLists.txt @@ -0,0 +1,13 @@ +# +# gpt-j + +set(TEST_TARGET gpt-j) +add_executable(${TEST_TARGET} main.cpp) +target_link_libraries(${TEST_TARGET} PRIVATE ggml common common-ggml) + +# +# gpt-j-quantize + +set(TEST_TARGET gpt-j-quantize) +add_executable(${TEST_TARGET} quantize.cpp) +target_link_libraries(${TEST_TARGET} PRIVATE ggml common common-ggml) diff --git a/ggml_old/examples/gpt-j/README.md b/ggml_old/examples/gpt-j/README.md new file mode 100644 index 0000000..e5cc795 --- /dev/null +++ b/ggml_old/examples/gpt-j/README.md @@ -0,0 +1,246 @@ +# gpt-j + +Local GPT-J inference on your computer using C/C++ + +No video card required. You just need to have 16 GB of RAM. + +## Motivation + +The GPT-J 6B model is the open-source alternative to OpenAI's GPT-3. It's basically a neural network that allows you to +generate coherent, human-like text given a certain context (prompt). + +The GPT-J model is quite big - the compact version of the model uses 16-bit floating point representation of the weights +and is still 12 GB big. This means that in order to run inference on your computer, you would need to have a video card +with at least 12 GB of video RAM. Alternatively, you can try to run the python implementations on the CPU, but that +would probably not be very efficient as they are primarily optimized for running on a GPU (or at least this is my guess - +I don't have much experience with python). + +I wanted to try and run the model on my MacBook, so I decided to implement the model inference from scratch using my own +custom build tensor library. The tensor library (called [ggml](https://github.com/ggerganov/ggml), written in C) is in +early development stage, but it already allows me to run the GPT-J model. + +On my 32GB MacBook M1 Pro, I achieve an inference speed of about `125 ms/token` or about ~6 words per second (1 word +typically consists of 1 or 2 tokens). + +Here is a sample run with prompt `int main(int argc, char ** argv) {`: + +``` +$ time ./bin/gpt-j -p "int main(int argc, char ** argv) {" + +gptj_model_load: loading model from 'models/gpt-j-6B/ggml-model.bin' - please wait ... +gptj_model_load: n_vocab = 50400 +gptj_model_load: n_ctx = 2048 +gptj_model_load: n_embd = 4096 +gptj_model_load: n_head = 16 +gptj_model_load: n_layer = 28 +gptj_model_load: n_rot = 64 +gptj_model_load: f16 = 1 +gptj_model_load: ggml ctx size = 13334.86 MB +gptj_model_load: memory_size = 1792.00 MB, n_mem = 57344 +gptj_model_load: ................................... done +gptj_model_load: model size = 11542.79 MB / num tensors = 285 +main: number of tokens in prompt = 13 + +int main(int argc, char ** argv) { + (void)argc; + (void)argv; + + { + struct sockaddr_in addr; + int addrlen; + char * ip = "192.168.1.4"; + int i; + + if ( (addrlen = sizeof(addr)) == -1 ) + return -1; + + for (i = 0; i < 10; ++i) { + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = inet_addr(ip); + +main: mem per token = 16430420 bytes +main: load time = 6211.48 ms +main: sample time = 13.74 ms +main: predict time = 26420.34 ms / 124.62 ms per token +main: total time = 33035.37 ms + +real 0m33.171s +user 3m32.269s +sys 0m3.686s + +$ +``` + +It took ~6.2 seconds to load the model to memory. After that, it took ~26.4 seconds to generate 200 tokens of what +looks like to be the beginning of a networking program in C. Pretty cool! + +Here is another run, just for fun: + +``` +time ./bin/gpt-j -n 500 -t 8 -p "Ask HN: Inherited the worst code and tech team I have ever seen. How to fix it? +" + +gptj_model_load: loading model from 'models/gpt-j-6B/ggml-model.bin' - please wait ... +gptj_model_load: n_vocab = 50400 +gptj_model_load: n_ctx = 2048 +gptj_model_load: n_embd = 4096 +gptj_model_load: n_head = 16 +gptj_model_load: n_layer = 28 +gptj_model_load: n_rot = 64 +gptj_model_load: f16 = 1 +gptj_model_load: ggml ctx size = 13334.86 MB +gptj_model_load: memory_size = 1792.00 MB, n_mem = 57344 +gptj_model_load: ................................... done +gptj_model_load: model size = 11542.79 MB / num tensors = 285 +main: number of tokens in prompt = 24 + +Ask HN: Inherited the worst code and tech team I have ever seen. How to fix it? + +I've inherited a team with some very strange and un-documented practices, one of them is that they use an old custom +application with a very slow tech stack written in Python that the team doesn't want to touch but also doesn't want to +throw away as it has some "legacy" code in it. + +The problem is, the tech stack is very very slow. + +They have a single web server on a VM that is slow. +The server is a little bit busy (not very busy though) and they have a lot of processes (30+ that are constantly being +spawned by the application) +They have an application that is single threaded and was written in Python and the team don't want to touch this, and +the application is very slow. + +My task as a new member of the team is to fix this. + +I'm a senior dev on the team (3 years on the project) and have been told that I will take the lead on this task. I know +next to nothing about Python. So here is what I have so far. + +What I have done is I've been trying to debug the processes with the "ps" command. This way I can see what is running +and where. From what I see, the application spawns 10 processes a minute and some of them are used for nothing. + +I have also started to look for the code. The application source is not in GitHub or any other repository, it is only on +our internal GitLab. + +What I've found so far: + +The application uses a custom SQLAlchemy implementation to interact with the data. I've looked at the source, it looks +like an object cache or something like that. But from what I've seen, the cache gets full every 20 minutes and then gets +cleared with a special command. + +Another strange thing is that the application creates a file for every entry in the database (even if the entry already +exists). I've looked at the file to see if it contains something, but it seems to be a JSON file with lots of records. + +The other strange thing is that I can only find the database tables in the GitLab repository and not the code. So I +can't really understand how the application is supposed to interact with the database. + +I also found a "log" directory, but the code is encrypted with AES. From what I've found, it is in + +main: mem per token = 16430420 bytes +main: load time = 3900.10 ms +main: sample time = 32.58 ms +main: predict time = 68049.91 ms / 130.11 ms per token +main: total time = 73020.05 ms + +real 1m13.156s +user 9m1.328s +sys. 0m7.103s +``` + +## Implementation details + +The high level implementation of the model is contained in the [main.cpp](main.cpp) file. The core computations are +performed by the [ggml](https://github.com/ggerganov/ggml/blob/master/include/ggml/ggml.h) library. + + +#### Matrix multiplication + +The most performance critical part of the implementation is of course the matrix multiplication routine. 99% of the time +is spent here, so it was important to optimize this as much as possible. + +On Arm64, I utilize the 128-bit NEON intrinsics for 16-bit floating point operations: + +https://github.com/ggerganov/ggml/blob/fb558f78d905f85c54813602649ddd628ffe0f3a/src/ggml.c#L187-L243 + +These instructions allow each core to operate simultaneously on 64 16-bit floats. I'm no expert in SIMD, but after quite +some trials this was the most efficient code for dot product of a row and column that I could come up with. Combined +with the parallel computation on 8 CPU threads, I believe I'm close to the maximum performance that one could possibly +get on the M1 CPU. Still, I'm curious to know if there is a more efficient way to implement this. + + +#### Attempt to use the M1 GPU + +One interesting property of the GPT-J transformer architecture is that it allows you to perform part of the inference in +parallel - i.e. the Feed-forward network can be computed in parallel to the Self-attention layer: + +https://github.com/ggerganov/ggml/blob/fb558f78d905f85c54813602649ddd628ffe0f3a/examples/gpt-j/main.cpp#L507-L531 + +So I thought why not try and bring in the M1 GPU to compute half of the neural network in parallel to the CPU and +potentially gain some extra performance. Thanks to the M1's shared memory model, it was relatively easy to offload part +of the computation to the GPU using Apple's [Metal Performance +Shaders](https://developer.apple.com/documentation/metalperformanceshaders). The GPU shares the host memory, so there is +no need to copy the data back and forth as you would normally do with Cuda or OpenCL. The weight matrices are directly +available to be used by the GPU. + +However, to my surprise, using MPS together with the CPU did not lead to any performance improvement at all. My +conclusion was that the 8-thread NEON CPU computation is already saturating the memory bandwidth of the M1 and since +the CPU and the GPU on the MacBook are sharing that bandwidth, it does not help to offload the computation to the GPU. +Another observation was that the MPS GPU matrix multiplication using 16-bit floats had the same performance as the +8-thread NEON CPU implementation. Again, I explain this with a saturated memory channel. But of course, my explanation +could be totally wrong and somehow the implementation wasn't utilizing the resources correctly. + +In the end, I decided to not use MPS or the GPU all together. + +### Zero memory allocations + +Another property of my implementation is that it does not perform any memory allocations once the model is loaded into +memory. All required memory is allocated at the start of the program with a single `malloc` (technically 2 calls, but +that is not important). + +## Usage + +If you want to give this a try and you are on Linux or Mac OS, simply follow these instructions: + +```bash +# Clone the ggml library and build the gpt-j example +git clone https://github.com/ggerganov/ggml +cd ggml +mkdir build && cd build +cmake .. +make -j4 gpt-j + +# Download the ggml-compatible GPT-J 6B model (requires 12GB disk space) +../examples/gpt-j/download-ggml-model.sh 6B + +# Run the inference (requires 16GB of CPU RAM) +./bin/gpt-j -m models/gpt-j-6B/ggml-model.bin -p "This is an example" + +# Input prompt through pipe and run the inference. +echo "This is an example" > prompt.txt +cat prompt.txt | ./bin/gpt-j -m models/gpt-j-6B/ggml-model.bin +``` + +To run the `gpt-j` tool, you need the 12GB `ggml-model.bin` file which contains the GPT-J model in +[ggml](https://github.com/ggerganov/ggml) compatible format. In the instructions above, the binary file +is downloaded from my repository on Hugging Face using the [download-ggml-model.sh](download-ggml-model.sh) script. +You can also, download the file manually from this link: + +https://huggingface.co/ggerganov/ggml/tree/main + +--- + +Alternatively, if you don't want to download the 12GB ggml model file, you can perform the conversion yourself using +python. + +First, you need to download the full GPT-J model from here: https://huggingface.co/EleutherAI/gpt-j-6B + +Note that the full model is quite big - about 72 GB. After you download it, you need to convert it to ggml format using +the [convert-h5-to-ggml.py](convert-h5-to-ggml.py) script. This will generate the `ggml-model.bin` file, which you can +then use with the `gpt-j` program. + + +## GPT-2 + +I also implemented a tool for CPU inference using the smaller GPT-2 models. They have worse quality compared to GPT-J, +but are much faster to execute. + +For example, the Small GPT-2 model is only 240 MB big and the inference speed on my MacBook is about 200 tokens/sec. + +For more details, checkout the GPT-2 example here: [gpt-2](https://github.com/ggerganov/ggml/tree/master/examples/gpt-2) diff --git a/ggml_old/examples/gpt-j/convert-h5-to-ggml.py b/ggml_old/examples/gpt-j/convert-h5-to-ggml.py new file mode 100644 index 0000000..cb77317 --- /dev/null +++ b/ggml_old/examples/gpt-j/convert-h5-to-ggml.py @@ -0,0 +1,173 @@ +# Convert GPT-J-6B h5 transformer model to ggml format +# +# Load the model using GPTJForCausalLM. +# Iterate over all variables and write them to a binary file. +# +# For each variable, write the following: +# - Number of dimensions (int) +# - Name length (int) +# - Dimensions (int[n_dims]) +# - Name (char[name_length]) +# - Data (float[n_dims]) +# +# By default, the bigger matrices are converted to 16-bit floats. +# This can be disabled by adding the "use-f32" CLI argument. +# +# At the start of the ggml file we write the model parameters +# and vocabulary. +# + +import sys +import struct +import json +import torch +import numpy as np + +from transformers import GPTJForCausalLM + +# ref: https://github.com/openai/gpt-2/blob/master/src/encoder.py +def bytes_to_unicode(): + """ + Returns list of utf-8 byte and a corresponding list of unicode strings. + The reversible bpe codes work on unicode strings. + This means you need a large # of unicode characters in your vocab if you want to avoid UNKs. + When you're at something like a 10B token dataset you end up needing around 5K for decent coverage. + This is a signficant percentage of your normal, say, 32K bpe vocab. + To avoid that, we want lookup tables between utf-8 bytes and unicode strings. + And avoids mapping to whitespace/control characters the bpe code barfs on. + """ + bs = list(range(ord("!"), ord("~")+1))+list(range(ord("¡"), ord("¬")+1))+list(range(ord("®"), ord("ÿ")+1)) + cs = bs[:] + n = 0 + for b in range(2**8): + if b not in bs: + bs.append(b) + cs.append(2**8+n) + n += 1 + cs = [chr(n) for n in cs] + return dict(zip(bs, cs)) + +if len(sys.argv) < 3: + print("Usage: convert-h5-to-ggml.py dir-model [use-f32]\n") + print(" ftype == 0 -> float32") + print(" ftype == 1 -> float16") + sys.exit(1) + +# output in the same directory as the model +dir_model = sys.argv[1] +fname_out = sys.argv[1] + "/ggml-model.bin" + +with open(dir_model + "/vocab.json", "r", encoding="utf-8") as f: + encoder = json.load(f) + +with open(dir_model + "/added_tokens.json", "r", encoding="utf-8") as f: + encoder_added = json.load(f) + +with open(dir_model + "/config.json", "r", encoding="utf-8") as f: + hparams = json.load(f) + +# possible data types +# ftype == 0 -> float32 +# ftype == 1 -> float16 +# +# map from ftype to string +ftype_str = ["f32", "f16"] + +ftype = 1 +if len(sys.argv) > 2: + ftype = int(sys.argv[2]) + if ftype < 0 or ftype > 1: + print("Invalid ftype: " + str(ftype)) + sys.exit(1) + fname_out = sys.argv[1] + "/ggml-model-" + ftype_str[ftype] + ".bin" + + +model = GPTJForCausalLM.from_pretrained(dir_model, low_cpu_mem_usage=True) +#print (model) + +list_vars = model.state_dict() +#print (list_vars) + +fout = open(fname_out, "wb") + +fout.write(struct.pack("i", 0x67676d6c)) # magic: ggml in hex +fout.write(struct.pack("i", hparams["vocab_size"])) +fout.write(struct.pack("i", hparams["n_positions"])) +fout.write(struct.pack("i", hparams["n_embd"])) +fout.write(struct.pack("i", hparams["n_head"])) +fout.write(struct.pack("i", hparams["n_layer"])) +fout.write(struct.pack("i", hparams["rotary_dim"])) +fout.write(struct.pack("i", ftype)) + +byte_encoder = bytes_to_unicode() +byte_decoder = {v:k for k, v in byte_encoder.items()} + +fout.write(struct.pack("i", len(encoder) + len(encoder_added))) + +for key in encoder: + text = bytearray([byte_decoder[c] for c in key]) + fout.write(struct.pack("i", len(text))) + fout.write(text) + +for key in encoder_added: + text = bytearray([byte_decoder[c] for c in key]) + fout.write(struct.pack("i", len(text))) + fout.write(text) + +for name in list_vars.keys(): + data = list_vars[name].squeeze().numpy() + print("Processing variable: " + name + " with shape: ", data.shape) + + # we don't need these + if name.endswith("attn.masked_bias") or name.endswith(".attn.bias"): + print(" Skipping variable: " + name) + continue + + n_dims = len(data.shape); + + # ftype == 0 -> float32, ftype == 1 -> float16 + ftype_cur = 0; + if ftype != 0: + if name[-7:] == ".weight" and n_dims == 2: + print(" Converting to float16") + data = data.astype(np.float16) + ftype_cur = 1 + else: + print(" Converting to float32") + data = data.astype(np.float32) + ftype_cur = 0 + else: + if data.dtype != np.float32: + print(" Converting to float32") + data = data.astype(np.float32) + ftype_cur = 0 + + # for efficiency - transpose these matrices: + # (note - with latest ggml this is no longer more efficient, so disabling it) + # "transformer.h.*.mlp.fc_in.weight" + # "transformer.h.*.attn.out_proj.weight" + # "transformer.h.*.attn.q_proj.weight" + # "transformer.h.*.attn.k_proj.weight" + # "transformer.h.*.attn.v_proj.weight" + #if name.endswith(".mlp.fc_in.weight") or \ + # name.endswith(".attn.out_proj.weight") or \ + # name.endswith(".attn.q_proj.weight") or \ + # name.endswith(".attn.k_proj.weight") or \ + # name.endswith(".attn.v_proj.weight"): + # print(" Transposing") + # data = data.transpose() + + # header + str = name.encode('utf-8') + fout.write(struct.pack("iii", n_dims, len(str), ftype_cur)) + for i in range(n_dims): + fout.write(struct.pack("i", data.shape[n_dims - 1 - i])) + fout.write(str); + + # data + data.tofile(fout) + +fout.close() + +print("Done. Output file: " + fname_out) +print("") diff --git a/ggml_old/examples/gpt-j/download-ggml-model.sh b/ggml_old/examples/gpt-j/download-ggml-model.sh new file mode 100755 index 0000000..a9e2aa5 --- /dev/null +++ b/ggml_old/examples/gpt-j/download-ggml-model.sh @@ -0,0 +1,69 @@ +#!/bin/bash + +# This script downloads GPT-J model files that have already been converted to ggml format. +# This way you don't have to convert them yourself. +# +# If you want to download the original GPT-J model files, use the "download-model.sh" script instead. + +#src="https://ggml.ggerganov.com" +#pfx="ggml-model-gpt-j" + +src="https://huggingface.co/ggerganov/ggml" +pfx="resolve/main/ggml-model-gpt-j" + +ggml_path=$(dirname $(realpath $0)) + +# GPT-J models +models=( "6B" ) + +# list available models +function list_models { + printf "\n" + printf " Available models:" + for model in "${models[@]}"; do + printf " $model" + done + printf "\n\n" +} + +if [ "$#" -ne 1 ]; then + printf "Usage: $0 \n" + list_models + + exit 1 +fi + +model=$1 + +if [[ ! " ${models[@]} " =~ " ${model} " ]]; then + printf "Invalid model: $model\n" + list_models + + exit 1 +fi + +# download ggml model + +printf "Downloading ggml model $model ...\n" + +mkdir -p models/gpt-j-$model + +if [ -x "$(command -v wget)" ]; then + wget --quiet --show-progress -O models/gpt-j-$model/ggml-model.bin $src/$pfx-$model.bin +elif [ -x "$(command -v curl)" ]; then + curl -L --output models/gpt-j-$model/ggml-model.bin $src/$pfx-$model.bin +else + printf "Either wget or curl is required to download models.\n" + exit 1 +fi + +if [ $? -ne 0 ]; then + printf "Failed to download ggml model $model \n" + printf "Please try again later or download the original GPT-J model files and convert them yourself.\n" + exit 1 +fi + +printf "Done! Model '$model' saved in 'models/gpt-j-$model/ggml-model.bin'\n" +printf "You can now use it like this:\n\n" +printf " $ ./bin/gpt-j -m models/gpt-j-$model/ggml-model.bin -p \"This is an example\"\n" +printf "\n" diff --git a/ggml_old/examples/gpt-j/download-model.sh b/ggml_old/examples/gpt-j/download-model.sh new file mode 100755 index 0000000..c773baf --- /dev/null +++ b/ggml_old/examples/gpt-j/download-model.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +printf "To obtain the GPT-J 6B model files, please visit: https://huggingface.co/EleutherAI/gpt-j-6B\n\n" + +printf "The model is very big. For example, the reposirory above is 72GB in size.\n" +printf "If you are sure that you want to clone it, simply run the following command:\n\n" + +printf " $ git clone https://huggingface.co/EleutherAI/gpt-j-6B models/gpt-j-6B\n\n" + +printf "Alternatively, use the 'download-ggml-model.sh' script to download a 12GB ggml version of the model.\n" +printf "This version is enough to run inference using the ggml library.\n\n" diff --git a/ggml_old/examples/gpt-j/main.cpp b/ggml_old/examples/gpt-j/main.cpp new file mode 100644 index 0000000..ee6d1a9 --- /dev/null +++ b/ggml_old/examples/gpt-j/main.cpp @@ -0,0 +1,741 @@ +#include "ggml/ggml.h" + +#include "common.h" +#include "common-ggml.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +// default hparams (GPT-J 6B) +struct gptj_hparams { + int32_t n_vocab = 50400; + int32_t n_ctx = 2048; + int32_t n_embd = 4096; + int32_t n_head = 16; + int32_t n_layer = 28; + int32_t n_rot = 64; + int32_t ftype = 1; +}; + +struct gptj_layer { + // normalization + struct ggml_tensor * ln_1_g; + struct ggml_tensor * ln_1_b; + + // attention + struct ggml_tensor * c_attn_q_proj_w; + struct ggml_tensor * c_attn_k_proj_w; + struct ggml_tensor * c_attn_v_proj_w; + + struct ggml_tensor * c_attn_proj_w; + + // ff + struct ggml_tensor * c_mlp_fc_w; + struct ggml_tensor * c_mlp_fc_b; + + struct ggml_tensor * c_mlp_proj_w; + struct ggml_tensor * c_mlp_proj_b; +}; + +struct gptj_model { + gptj_hparams hparams; + + // normalization + struct ggml_tensor * ln_f_g; + struct ggml_tensor * ln_f_b; + + struct ggml_tensor * wte; // position embedding + + struct ggml_tensor * lmh_g; // language model head + struct ggml_tensor * lmh_b; // language model bias + + std::vector layers; + + // key + value memory + struct ggml_tensor * memory_k; + struct ggml_tensor * memory_v; + + // + struct ggml_context * ctx; + std::map tensors; +}; + +// load the model's weights from a file +bool gptj_model_load(const std::string & fname, gptj_model & model, gpt_vocab & vocab) { + printf("%s: loading model from '%s' - please wait ...\n", __func__, fname.c_str()); + + auto fin = std::ifstream(fname, std::ios::binary); + if (!fin) { + fprintf(stderr, "%s: failed to open '%s'\n", __func__, fname.c_str()); + return false; + } + + // verify magic + { + uint32_t magic; + fin.read((char *) &magic, sizeof(magic)); + if (magic != 0x67676d6c) { + fprintf(stderr, "%s: invalid model file '%s' (bad magic)\n", __func__, fname.c_str()); + return false; + } + } + + // load hparams + { + auto & hparams = model.hparams; + + fin.read((char *) &hparams.n_vocab, sizeof(hparams.n_vocab)); + fin.read((char *) &hparams.n_ctx, sizeof(hparams.n_ctx)); + fin.read((char *) &hparams.n_embd, sizeof(hparams.n_embd)); + fin.read((char *) &hparams.n_head, sizeof(hparams.n_head)); + fin.read((char *) &hparams.n_layer, sizeof(hparams.n_layer)); + fin.read((char *) &hparams.n_rot, sizeof(hparams.n_rot)); + fin.read((char *) &hparams.ftype, sizeof(hparams.ftype)); + + const int32_t qntvr = hparams.ftype / GGML_QNT_VERSION_FACTOR; + + printf("%s: n_vocab = %d\n", __func__, hparams.n_vocab); + printf("%s: n_ctx = %d\n", __func__, hparams.n_ctx); + printf("%s: n_embd = %d\n", __func__, hparams.n_embd); + printf("%s: n_head = %d\n", __func__, hparams.n_head); + printf("%s: n_layer = %d\n", __func__, hparams.n_layer); + printf("%s: n_rot = %d\n", __func__, hparams.n_rot); + printf("%s: ftype = %d\n", __func__, hparams.ftype); + printf("%s: qntvr = %d\n", __func__, qntvr); + + hparams.ftype %= GGML_QNT_VERSION_FACTOR; + } + + // load vocab + { + int32_t n_vocab = 0; + fin.read((char *) &n_vocab, sizeof(n_vocab)); + + if (n_vocab != model.hparams.n_vocab) { + fprintf(stderr, "%s: invalid model file '%s' (bad vocab size %d != %d)\n", + __func__, fname.c_str(), n_vocab, model.hparams.n_vocab); + return false; + } + + std::string word; + std::vector buf(128); + + for (int i = 0; i < n_vocab; i++) { + uint32_t len; + fin.read((char *) &len, sizeof(len)); + + buf.resize(len); + fin.read((char *) buf.data(), len); + word.assign(buf.data(), len); + + vocab.token_to_id[word] = i; + vocab.id_to_token[i] = word; + } + } + + // for the big tensors, we have the option to store the data in 16-bit floats or quantized + // in order to save memory and also to speed up the computation + ggml_type wtype = ggml_ftype_to_ggml_type((ggml_ftype) (model.hparams.ftype)); + if (wtype == GGML_TYPE_COUNT) { + fprintf(stderr, "%s: invalid model file '%s' (bad ftype value %d)\n", + __func__, fname.c_str(), model.hparams.ftype); + return false; + } + + auto & ctx = model.ctx; + + size_t ctx_size = 0; + + { + const auto & hparams = model.hparams; + + const int n_embd = hparams.n_embd; + const int n_layer = hparams.n_layer; + const int n_ctx = hparams.n_ctx; + const int n_vocab = hparams.n_vocab; + + ctx_size += n_embd*ggml_type_sizef(GGML_TYPE_F32); // ln_f_g + ctx_size += n_embd*ggml_type_sizef(GGML_TYPE_F32); // ln_f_b + + ctx_size += n_embd*n_vocab*ggml_type_sizef(wtype); // wte + + ctx_size += n_embd*n_vocab*ggml_type_sizef(wtype); // lmh_g + ctx_size += n_vocab*ggml_type_sizef(GGML_TYPE_F32); // lmh_b + + ctx_size += n_layer*(n_embd*ggml_type_sizef(GGML_TYPE_F32)); // ln_1_g + ctx_size += n_layer*(n_embd*ggml_type_sizef(GGML_TYPE_F32)); // ln_1_b + + ctx_size += n_layer*(n_embd*n_embd*ggml_type_sizef(wtype)); // c_attn_q_proj_w + ctx_size += n_layer*(n_embd*n_embd*ggml_type_sizef(wtype)); // c_attn_k_proj_w + ctx_size += n_layer*(n_embd*n_embd*ggml_type_sizef(wtype)); // c_attn_v_proj_w + + ctx_size += n_layer*(n_embd*n_embd*ggml_type_sizef(wtype)); // c_attn_proj_w + + ctx_size += n_layer*(4*n_embd*n_embd*ggml_type_sizef(wtype)); // c_mlp_fc_w + ctx_size += n_layer*( 4*n_embd*ggml_type_sizef(GGML_TYPE_F32)); // c_mlp_fc_b + + ctx_size += n_layer*(4*n_embd*n_embd*ggml_type_sizef(wtype)); // c_mlp_proj_w + ctx_size += n_layer*( n_embd*ggml_type_sizef(GGML_TYPE_F32)); // c_mlp_proj_b + + ctx_size += n_ctx*n_layer*n_embd*ggml_type_sizef(GGML_TYPE_F16); // memory_k + ctx_size += n_ctx*n_layer*n_embd*ggml_type_sizef(GGML_TYPE_F16); // memory_v + + ctx_size += (5 + 10*n_layer)*512; // object overhead + + printf("%s: ggml ctx size = %6.2f MB\n", __func__, ctx_size/(1024.0*1024.0)); + } + + // create the ggml context + { + struct ggml_init_params params = { + .mem_size = ctx_size, + .mem_buffer = NULL, + .no_alloc = false, + }; + + model.ctx = ggml_init(params); + if (!model.ctx) { + fprintf(stderr, "%s: ggml_init() failed\n", __func__); + return false; + } + } + + // prepare memory for the weights + { + const auto & hparams = model.hparams; + + const int n_embd = hparams.n_embd; + const int n_layer = hparams.n_layer; + const int n_vocab = hparams.n_vocab; + + model.layers.resize(n_layer); + + model.wte = ggml_new_tensor_2d(ctx, wtype, n_embd, n_vocab); + + model.ln_f_g = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + model.ln_f_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + + model.lmh_g = ggml_new_tensor_2d(ctx, wtype, n_embd, n_vocab); + model.lmh_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_vocab); + + // map by name + model.tensors["transformer.wte.weight"] = model.wte; + + model.tensors["transformer.ln_f.weight"] = model.ln_f_g; + model.tensors["transformer.ln_f.bias"] = model.ln_f_b; + + model.tensors["lm_head.weight"] = model.lmh_g; + model.tensors["lm_head.bias"] = model.lmh_b; + + for (int i = 0; i < n_layer; ++i) { + auto & layer = model.layers[i]; + + layer.ln_1_g = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + layer.ln_1_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + + layer.c_attn_q_proj_w = ggml_new_tensor_2d(ctx, wtype, n_embd, n_embd); + layer.c_attn_k_proj_w = ggml_new_tensor_2d(ctx, wtype, n_embd, n_embd); + layer.c_attn_v_proj_w = ggml_new_tensor_2d(ctx, wtype, n_embd, n_embd); + + layer.c_attn_proj_w = ggml_new_tensor_2d(ctx, wtype, n_embd, n_embd); + + layer.c_mlp_fc_w = ggml_new_tensor_2d(ctx, wtype, n_embd, 4*n_embd); + layer.c_mlp_fc_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 4*n_embd); + + layer.c_mlp_proj_w = ggml_new_tensor_2d(ctx, wtype, 4*n_embd, n_embd); + layer.c_mlp_proj_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + + // map by name + model.tensors["transformer.h." + std::to_string(i) + ".ln_1.weight"] = layer.ln_1_g; + model.tensors["transformer.h." + std::to_string(i) + ".ln_1.bias"] = layer.ln_1_b; + + model.tensors["transformer.h." + std::to_string(i) + ".attn.q_proj.weight"] = layer.c_attn_q_proj_w; + model.tensors["transformer.h." + std::to_string(i) + ".attn.k_proj.weight"] = layer.c_attn_k_proj_w; + model.tensors["transformer.h." + std::to_string(i) + ".attn.v_proj.weight"] = layer.c_attn_v_proj_w; + + model.tensors["transformer.h." + std::to_string(i) + ".attn.out_proj.weight"] = layer.c_attn_proj_w; + + model.tensors["transformer.h." + std::to_string(i) + ".mlp.fc_in.weight"] = layer.c_mlp_fc_w; + model.tensors["transformer.h." + std::to_string(i) + ".mlp.fc_in.bias"] = layer.c_mlp_fc_b; + + model.tensors["transformer.h." + std::to_string(i) + ".mlp.fc_out.weight"] = layer.c_mlp_proj_w; + model.tensors["transformer.h." + std::to_string(i) + ".mlp.fc_out.bias"] = layer.c_mlp_proj_b; + } + } + + // key + value memory + { + const auto & hparams = model.hparams; + + const int n_embd = hparams.n_embd; + const int n_layer = hparams.n_layer; + const int n_ctx = hparams.n_ctx; + + const int n_mem = n_layer*n_ctx; + const int n_elements = n_embd*n_mem; + + model.memory_k = ggml_new_tensor_1d(ctx, GGML_TYPE_F16, n_elements); + model.memory_v = ggml_new_tensor_1d(ctx, GGML_TYPE_F16, n_elements); + + const size_t memory_size = ggml_nbytes(model.memory_k) + ggml_nbytes(model.memory_v); + + printf("%s: memory_size = %8.2f MB, n_mem = %d\n", __func__, memory_size/1024.0/1024.0, n_mem); + } + + // load weights + { + int n_tensors = 0; + size_t total_size = 0; + + printf("%s: ", __func__); + + while (true) { + int32_t n_dims; + int32_t length; + int32_t ttype; + + fin.read(reinterpret_cast(&n_dims), sizeof(n_dims)); + fin.read(reinterpret_cast(&length), sizeof(length)); + fin.read(reinterpret_cast(&ttype), sizeof(ttype)); + + if (fin.eof()) { + break; + } + + int32_t nelements = 1; + int32_t ne[2] = { 1, 1 }; + for (int i = 0; i < n_dims; ++i) { + fin.read(reinterpret_cast(&ne[i]), sizeof(ne[i])); + nelements *= ne[i]; + } + + std::string name(length, 0); + fin.read(&name[0], length); + + if (model.tensors.find(name.data()) == model.tensors.end()) { + fprintf(stderr, "%s: unknown tensor '%s' in model file\n", __func__, name.data()); + return false; + } + + auto tensor = model.tensors[name.data()]; + if (ggml_nelements(tensor) != nelements) { + fprintf(stderr, "%s: tensor '%s' has wrong size in model file\n", __func__, name.data()); + return false; + } + + if (tensor->ne[0] != ne[0] || tensor->ne[1] != ne[1]) { + fprintf(stderr, "%s: tensor '%s' has wrong shape in model file: got [%d, %d], expected [%d, %d]\n", + __func__, name.data(), (int) tensor->ne[0], (int) tensor->ne[1], ne[0], ne[1]); + return false; + } + + // for debugging + if (0) { + printf("%24s - [%5d, %5d], type = %6s, %6.2f MB, %9zu bytes\n", name.data(), ne[0], ne[1], ggml_type_name(ggml_type(ttype)), ggml_nbytes(tensor)/1024.0/1024.0, ggml_nbytes(tensor)); + } + + const size_t bpe = ggml_type_size(ggml_type(ttype)); + + if ((nelements*bpe)/ggml_blck_size(tensor->type) != ggml_nbytes(tensor)) { + fprintf(stderr, "%s: tensor '%s' has wrong size in model file: got %zu, expected %zu\n", + __func__, name.data(), ggml_nbytes(tensor), nelements*bpe); + return false; + } + + fin.read(reinterpret_cast(tensor->data), ggml_nbytes(tensor)); + + //printf("%42s - [%5d, %5d], type = %6s, %6.2f MB\n", name.data(), ne[0], ne[1], ttype == 0 ? "float" : "f16", ggml_nbytes(tensor)/1024.0/1024.0); + total_size += ggml_nbytes(tensor); + if (++n_tensors % 8 == 0) { + printf("."); + fflush(stdout); + } + } + + printf(" done\n"); + + printf("%s: model size = %8.2f MB / num tensors = %d\n", __func__, total_size/1024.0/1024.0, n_tensors); + } + + fin.close(); + + return true; +} + +// evaluate the transformer +// +// - model: the model +// - n_threads: number of threads to use +// - n_past: the context size so far +// - embd_inp: the embeddings of the tokens in the context +// - embd_w: the predicted logits for the next token +// +// The GPT-J model requires about 16MB of memory per input token. +// +bool gptj_eval( + const gptj_model & model, + const int n_threads, + const int n_past, + const std::vector & embd_inp, + std::vector & embd_w, + size_t & mem_per_token) { + const int N = embd_inp.size(); + + const auto & hparams = model.hparams; + + const int n_embd = hparams.n_embd; + const int n_layer = hparams.n_layer; + const int n_ctx = hparams.n_ctx; + const int n_head = hparams.n_head; + const int n_vocab = hparams.n_vocab; + const int n_rot = hparams.n_rot; + + static size_t buf_size = 256u*1024*1024; + static void * buf = malloc(buf_size); + + if (mem_per_token > 0 && mem_per_token*N > buf_size) { + const size_t buf_size_new = 1.1*(mem_per_token*N); // add 10% to account for ggml object overhead + //printf("\n%s: reallocating buffer from %zu to %zu bytes\n", __func__, buf_size, buf_size_new); + + // reallocate + buf_size = buf_size_new; + buf = realloc(buf, buf_size); + if (buf == nullptr) { + fprintf(stderr, "%s: failed to allocate %zu bytes\n", __func__, buf_size); + return false; + } + } + + struct ggml_init_params params = { + .mem_size = buf_size, + .mem_buffer = buf, + .no_alloc = false, + }; + + struct ggml_context * ctx0 = ggml_init(params); + struct ggml_cgraph gf = {}; + gf.n_threads = n_threads; + + struct ggml_tensor * embd = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, N); + memcpy(embd->data, embd_inp.data(), N*ggml_element_size(embd)); + + // wte + struct ggml_tensor * inpL = ggml_get_rows(ctx0, model.wte, embd); + + for (int il = 0; il < n_layer; ++il) { + struct ggml_tensor * cur; + + // norm + { + cur = ggml_norm(ctx0, inpL); + + // cur = ln_1_g*cur + ln_1_b + cur = ggml_add(ctx0, + ggml_mul(ctx0, + ggml_repeat(ctx0, model.layers[il].ln_1_g, cur), + cur), + ggml_repeat(ctx0, model.layers[il].ln_1_b, cur)); + } + + struct ggml_tensor * inpSA = cur; + + // self-attention + { + struct ggml_tensor * Qcur = ggml_rope_inplace(ctx0, ggml_reshape_3d(ctx0, ggml_mul_mat(ctx0, model.layers[il].c_attn_q_proj_w, cur), n_embd/n_head, n_head, N), n_past, n_rot, 0); + struct ggml_tensor * Kcur = ggml_rope_inplace(ctx0, ggml_reshape_3d(ctx0, ggml_mul_mat(ctx0, model.layers[il].c_attn_k_proj_w, cur), n_embd/n_head, n_head, N), n_past, n_rot, 0); + + // store key and value to memory + { + struct ggml_tensor * Vcur = ggml_transpose(ctx0, ggml_mul_mat(ctx0, model.layers[il].c_attn_v_proj_w, cur)); + + struct ggml_tensor * k = ggml_view_1d(ctx0, model.memory_k, N*n_embd, (ggml_element_size(model.memory_k)*n_embd)*(il*n_ctx + n_past)); + struct ggml_tensor * v = ggml_view_2d(ctx0, model.memory_v, N, n_embd, + ( n_ctx)*ggml_element_size(model.memory_v), + (il*n_ctx)*ggml_element_size(model.memory_v)*n_embd + n_past*ggml_element_size(model.memory_v)); + + ggml_build_forward_expand(&gf, ggml_cpy(ctx0, Kcur, k)); + ggml_build_forward_expand(&gf, ggml_cpy(ctx0, Vcur, v)); + } + + // Q = Qcur.contiguous().view(n_embd/n_head, n_head, N).permute(0, 2, 1, 3) + struct ggml_tensor * Q = + ggml_permute(ctx0, + Qcur, + 0, 2, 1, 3); + + // K = Kmem.view(n_embd/n_head, n_head, n_past + N).permute(0, 2, 1, 3) + struct ggml_tensor * K = + ggml_permute(ctx0, + ggml_reshape_3d(ctx0, + ggml_view_1d(ctx0, model.memory_k, (n_past + N)*n_embd, il*n_ctx*ggml_element_size(model.memory_k)*n_embd), + n_embd/n_head, n_head, n_past + N), + 0, 2, 1, 3); + + // K * Q + struct ggml_tensor * KQ = ggml_mul_mat(ctx0, K, Q); + + // KQ_scaled = KQ / sqrt(n_embd/n_head) + struct ggml_tensor * KQ_scaled = + ggml_scale_inplace(ctx0, + KQ, + ggml_new_f32(ctx0, 1.0f/sqrt(float(n_embd)/n_head)) + ); + + // KQ_masked = mask_past(KQ_scaled) + struct ggml_tensor * KQ_masked = ggml_diag_mask_inf_inplace(ctx0, KQ_scaled, n_past); + + // KQ = soft_max(KQ_masked) + struct ggml_tensor * KQ_soft_max = ggml_soft_max_inplace(ctx0, KQ_masked); + + // V_trans = Vmem.view(n_embd/n_head, n_head, n_past + N).permute(1, 2, 0, 3).contiguous() + struct ggml_tensor * V = + ggml_view_3d(ctx0, model.memory_v, + n_past + N, n_embd/n_head, n_head, + n_ctx*ggml_element_size(model.memory_v), + n_ctx*ggml_element_size(model.memory_v)*n_embd/n_head, + il*n_ctx*ggml_element_size(model.memory_v)*n_embd); + + // KQV = transpose(V) * KQ_soft_max + struct ggml_tensor * KQV = ggml_mul_mat(ctx0, V, KQ_soft_max); + + // KQV_merged = KQV.permute(0, 2, 1, 3) + struct ggml_tensor * KQV_merged = ggml_permute(ctx0, KQV, 0, 2, 1, 3); + + // cur = KQV_merged.contiguous().view(n_embd, N) + cur = ggml_cpy(ctx0, + KQV_merged, + ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_embd, N)); + + // projection (no bias) + cur = ggml_mul_mat(ctx0, + model.layers[il].c_attn_proj_w, + cur); + } + + struct ggml_tensor * inpFF = cur; + + // feed-forward network + // this is independent of the self-attention result, so it could be done in parallel to the self-attention + { + // note here we pass inpSA instead of cur + cur = ggml_mul_mat(ctx0, + model.layers[il].c_mlp_fc_w, + inpSA); + + cur = ggml_add(ctx0, + ggml_repeat(ctx0, model.layers[il].c_mlp_fc_b, cur), + cur); + + // GELU activation + cur = ggml_gelu(ctx0, cur); + + // projection + // cur = proj_w*cur + proj_b + cur = ggml_mul_mat(ctx0, + model.layers[il].c_mlp_proj_w, + cur); + + cur = ggml_add(ctx0, + ggml_repeat(ctx0, model.layers[il].c_mlp_proj_b, cur), + cur); + } + + // self-attention + FF + cur = ggml_add(ctx0, cur, inpFF); + + // input for next layer + inpL = ggml_add(ctx0, cur, inpL); + } + + // norm + { + inpL = ggml_norm(ctx0, inpL); + + // inpL = ln_f_g*inpL + ln_f_b + inpL = ggml_add(ctx0, + ggml_mul(ctx0, + ggml_repeat(ctx0, model.ln_f_g, inpL), + inpL), + ggml_repeat(ctx0, model.ln_f_b, inpL)); + } + + // lm_head + { + inpL = ggml_mul_mat(ctx0, model.lmh_g, inpL); + + inpL = ggml_add(ctx0, + ggml_repeat(ctx0, model.lmh_b, inpL), + inpL); + } + + // logits -> probs + //inpL = ggml_soft_max_inplace(ctx0, inpL); + + // run the computation + ggml_build_forward_expand(&gf, inpL); + ggml_graph_compute (ctx0, &gf); + + //if (n_past%100 == 0) { + // ggml_graph_print (&gf); + // ggml_graph_dump_dot(&gf, NULL, "gpt-j.dot"); + //} + + //embd_w.resize(n_vocab*N); + //memcpy(embd_w.data(), ggml_get_data(inpL), sizeof(float)*n_vocab*N); + + // return result for just the last token + embd_w.resize(n_vocab); + memcpy(embd_w.data(), (float *) ggml_get_data(inpL) + (n_vocab*(N-1)), sizeof(float)*n_vocab); + + if (mem_per_token == 0) { + mem_per_token = ggml_used_mem(ctx0)/N; + } + //printf("used_mem = %zu\n", ggml_used_mem(ctx0)); + + ggml_free(ctx0); + + return true; +} + +int main(int argc, char ** argv) { + ggml_time_init(); + + const int64_t t_main_start_us = ggml_time_us(); + + gpt_params params; + params.model = "models/gpt-j-6B/ggml-model.bin"; + + if (gpt_params_parse(argc, argv, params) == false) { + return 1; + } + + if (params.seed < 0) { + params.seed = time(NULL); + } + + printf("%s: seed = %d\n", __func__, params.seed); + + std::mt19937 rng(params.seed); + if (params.prompt.empty()) { + params.prompt = gpt_random_prompt(rng); + } + + int64_t t_load_us = 0; + + gpt_vocab vocab; + gptj_model model; + + // load the model + { + const int64_t t_start_us = ggml_time_us(); + + if (!gptj_model_load(params.model, model, vocab)) { + fprintf(stderr, "%s: failed to load model from '%s'\n", __func__, params.model.c_str()); + return 1; + } + + t_load_us = ggml_time_us() - t_start_us; + } + + int n_past = 0; + + int64_t t_sample_us = 0; + int64_t t_predict_us = 0; + + std::vector logits; + + // tokenize the prompt + std::vector embd_inp = ::gpt_tokenize(vocab, params.prompt); + + params.n_predict = std::min(params.n_predict, model.hparams.n_ctx - (int) embd_inp.size()); + + printf("%s: number of tokens in prompt = %zu\n", __func__, embd_inp.size()); + printf("\n"); + + std::vector embd; + + // determine the required inference memory per token: + size_t mem_per_token = 0; + gptj_eval(model, params.n_threads, 0, { 0, 1, 2, 3 }, logits, mem_per_token); + + for (int i = embd.size(); i < embd_inp.size() + params.n_predict; i++) { + // predict + if (embd.size() > 0) { + const int64_t t_start_us = ggml_time_us(); + + if (!gptj_eval(model, params.n_threads, n_past, embd, logits, mem_per_token)) { + printf("Failed to predict\n"); + return 1; + } + + t_predict_us += ggml_time_us() - t_start_us; + } + + n_past += embd.size(); + embd.clear(); + + if (i >= embd_inp.size()) { + // sample next token + const int top_k = params.top_k; + const float top_p = params.top_p; + const float temp = params.temp; + + const int n_vocab = model.hparams.n_vocab; + + gpt_vocab::id id = 0; + + { + const int64_t t_start_sample_us = ggml_time_us(); + + id = gpt_sample_top_k_top_p(vocab, logits.data() + (logits.size() - n_vocab), top_k, top_p, temp, rng); + + t_sample_us += ggml_time_us() - t_start_sample_us; + } + + // add it to the context + embd.push_back(id); + } else { + // if here, it means we are still processing the input prompt + for (int k = i; k < embd_inp.size(); k++) { + embd.push_back(embd_inp[k]); + if (embd.size() > params.n_batch) { + break; + } + } + i += embd.size() - 1; + } + + // display text + for (auto id : embd) { + printf("%s", vocab.id_to_token[id].c_str()); + } + fflush(stdout); + + // end of text token + if (embd.back() == 50256) { + break; + } + } + + // report timing + { + const int64_t t_main_end_us = ggml_time_us(); + + printf("\n\n"); + printf("%s: mem per token = %8zu bytes\n", __func__, mem_per_token); + printf("%s: load time = %8.2f ms\n", __func__, t_load_us/1000.0f); + printf("%s: sample time = %8.2f ms\n", __func__, t_sample_us/1000.0f); + printf("%s: predict time = %8.2f ms / %.2f ms per token\n", __func__, t_predict_us/1000.0f, t_predict_us/1000.0f/n_past); + printf("%s: total time = %8.2f ms\n", __func__, (t_main_end_us - t_main_start_us)/1000.0f); + } + + ggml_free(model.ctx); + + return 0; +} diff --git a/ggml_old/examples/gpt-j/quantize.cpp b/ggml_old/examples/gpt-j/quantize.cpp new file mode 100644 index 0000000..0c1f795 --- /dev/null +++ b/ggml_old/examples/gpt-j/quantize.cpp @@ -0,0 +1,182 @@ +#include "ggml/ggml.h" + +#include "common.h" +#include "common-ggml.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// default hparams (GPT-J 6B) +struct gptj_hparams { + int32_t n_vocab = 50400; + int32_t n_ctx = 2048; + int32_t n_embd = 4096; + int32_t n_head = 16; + int32_t n_layer = 28; + int32_t n_rot = 64; + int32_t ftype = 1; +}; + +// quantize a model +bool gptj_model_quantize(const std::string & fname_inp, const std::string & fname_out, ggml_ftype ftype) { + gpt_vocab vocab; + + printf("%s: loading model from '%s'\n", __func__, fname_inp.c_str()); + + auto finp = std::ifstream(fname_inp, std::ios::binary); + if (!finp) { + fprintf(stderr, "%s: failed to open '%s' for reading\n", __func__, fname_inp.c_str()); + return false; + } + + auto fout = std::ofstream(fname_out, std::ios::binary); + if (!fout) { + fprintf(stderr, "%s: failed to open '%s' for writing\n", __func__, fname_out.c_str()); + return false; + } + + // verify magic + { + uint32_t magic; + finp.read((char *) &magic, sizeof(magic)); + if (magic != 0x67676d6c) { + fprintf(stderr, "%s: invalid model file '%s' (bad magic)\n", __func__, fname_inp.c_str()); + return false; + } + + fout.write((char *) &magic, sizeof(magic)); + } + + gptj_hparams hparams; + + // load hparams + { + finp.read((char *) &hparams.n_vocab, sizeof(hparams.n_vocab)); + finp.read((char *) &hparams.n_ctx, sizeof(hparams.n_ctx)); + finp.read((char *) &hparams.n_embd, sizeof(hparams.n_embd)); + finp.read((char *) &hparams.n_head, sizeof(hparams.n_head)); + finp.read((char *) &hparams.n_layer, sizeof(hparams.n_layer)); + finp.read((char *) &hparams.n_rot, sizeof(hparams.n_rot)); + finp.read((char *) &hparams.ftype, sizeof(hparams.ftype)); + + const int32_t qntvr_src = hparams.ftype / GGML_QNT_VERSION_FACTOR; + const int32_t ftype_dst = GGML_QNT_VERSION * GGML_QNT_VERSION_FACTOR + ftype; + + printf("%s: n_vocab = %d\n", __func__, hparams.n_vocab); + printf("%s: n_ctx = %d\n", __func__, hparams.n_ctx); + printf("%s: n_embd = %d\n", __func__, hparams.n_embd); + printf("%s: n_head = %d\n", __func__, hparams.n_head); + printf("%s: n_layer = %d\n", __func__, hparams.n_layer); + printf("%s: ftype (src) = %d\n", __func__, hparams.ftype); + printf("%s: qntvr (src) = %d\n", __func__, qntvr_src); + printf("%s: ftype (dst) = %d\n", __func__, ftype_dst); + printf("%s: qntvr (dst) = %d\n", __func__, GGML_QNT_VERSION); + + fout.write((char *) &hparams.n_vocab, sizeof(hparams.n_vocab)); + fout.write((char *) &hparams.n_ctx, sizeof(hparams.n_ctx)); + fout.write((char *) &hparams.n_embd, sizeof(hparams.n_embd)); + fout.write((char *) &hparams.n_head, sizeof(hparams.n_head)); + fout.write((char *) &hparams.n_layer, sizeof(hparams.n_layer)); + fout.write((char *) &hparams.n_rot, sizeof(hparams.n_rot)); + fout.write((char *) &ftype_dst, sizeof(ftype_dst)); + } + + // load vocab + { + int32_t n_vocab = 0; + finp.read ((char *) &n_vocab, sizeof(n_vocab)); + fout.write((char *) &n_vocab, sizeof(n_vocab)); + + if (n_vocab != hparams.n_vocab) { + fprintf(stderr, "%s: invalid model file '%s' (bad vocab size %d != %d)\n", + __func__, fname_inp.c_str(), n_vocab, hparams.n_vocab); + return false; + } + + std::string word; + for (int i = 0; i < n_vocab; i++) { + uint32_t len; + finp.read ((char *) &len, sizeof(len)); + fout.write((char *) &len, sizeof(len)); + + word.resize(len); + finp.read ((char *) word.data(), len); + fout.write((char *) word.data(), len); + + vocab.token_to_id[word] = i; + vocab.id_to_token[i] = word; + } + } + + // regexes of tensor names to be quantized + const std::vector to_quant = { + ".*weight", + }; + + if (!ggml_common_quantize_0(finp, fout, ftype, to_quant, {})) { + fprintf(stderr, "%s: failed to quantize model '%s'\n", __func__, fname_inp.c_str()); + return false; + } + + finp.close(); + fout.close(); + + return true; +} + +// usage: +// ./gpt-2-quantize models/gpt-2-117M/ggml-model.bin models/gpt-2-117M/ggml-model-quant.bin type +// +int main(int argc, char ** argv) { + if (argc != 4) { + fprintf(stderr, "usage: %s model-f32.bin model-quant.bin type\n", argv[0]); + ggml_print_ftypes(stderr); + return 1; + } + + // needed to initialize f16 tables + { + struct ggml_init_params params = { 0, NULL, false }; + struct ggml_context * ctx = ggml_init(params); + ggml_free(ctx); + } + + const std::string fname_inp = argv[1]; + const std::string fname_out = argv[2]; + + const ggml_ftype ftype = ggml_parse_ftype(argv[3]); + + const int64_t t_main_start_us = ggml_time_us(); + + int64_t t_quantize_us = 0; + + // load the model + { + const int64_t t_start_us = ggml_time_us(); + + if (!gptj_model_quantize(fname_inp, fname_out, ggml_ftype(ftype))) { + fprintf(stderr, "%s: failed to quantize model from '%s'\n", __func__, fname_inp.c_str()); + return 1; + } + + t_quantize_us = ggml_time_us() - t_start_us; + } + + // report timing + { + const int64_t t_main_end_us = ggml_time_us(); + + printf("\n"); + printf("%s: quantize time = %8.2f ms\n", __func__, t_quantize_us/1000.0f); + printf("%s: total time = %8.2f ms\n", __func__, (t_main_end_us - t_main_start_us)/1000.0f); + } + + return 0; +} diff --git a/ggml_old/examples/gpt-neox/CMakeLists.txt b/ggml_old/examples/gpt-neox/CMakeLists.txt new file mode 100644 index 0000000..21a319b --- /dev/null +++ b/ggml_old/examples/gpt-neox/CMakeLists.txt @@ -0,0 +1,13 @@ +# +# gpt-neox + +set(TEST_TARGET gpt-neox) +add_executable(${TEST_TARGET} main.cpp) +target_link_libraries(${TEST_TARGET} PRIVATE ggml common common-ggml) + +# +# gpt-neox-quantize + +set(TEST_TARGET gpt-neox-quantize) +add_executable(${TEST_TARGET} quantize.cpp) +target_link_libraries(${TEST_TARGET} PRIVATE ggml common common-ggml) diff --git a/ggml_old/examples/gpt-neox/README.md b/ggml_old/examples/gpt-neox/README.md new file mode 100644 index 0000000..d80338a --- /dev/null +++ b/ggml_old/examples/gpt-neox/README.md @@ -0,0 +1,107 @@ +# GPT-NeoX + +Transformer architecture: GPT-NeoX + +Ref: https://github.com/stability-AI/stableLM/#stablelm-alpha + +## Usage + +```bash +# get the repo and build it +git clone https://github.com/ggerganov/ggml +cd ggml +mkdir build && cd build +cmake .. +make -j + +# get the StableLM 3B Alpha model +git clone https://huggingface.co/stabilityai/gpt_neox-base-alpha-3b + +# convert model to FP16 +python3 ../examples/gpt_neox/convert-h5-to-ggml.py ./stablelm-base-alpha-3b/ 1 + +# run inference using FP16 precision +make -j && ./bin/gpt_neox -m ./stablelm-base-alpha-3b/ggml-model-f16.bin -p "I believe the meaning of life is" -t 8 -n 64 + +main: seed = 1681940611 +gpt_neox_model_load: loading model from 'models/stablelm-base-alpha-3b/ggml-model-f16.bin' - please wait ... +gpt_neox_model_load: n_vocab = 50688 +gpt_neox_model_load: n_ctx = 4096 +gpt_neox_model_load: n_embd = 4096 +gpt_neox_model_load: n_head = 32 +gpt_neox_model_load: n_layer = 16 +gpt_neox_model_load: n_rot = 32 +gpt_neox_model_load: ftype = 1 +gpt_neox_model_load: ggml ctx size = 10011.10 MB +gpt_neox_model_load: memory_size = 2048.00 MB, n_mem = 65536 +gpt_neox_model_load: ................................ done +gpt_neox_model_load: model size = 6939.28 MB / num tensors = 260 +main: number of tokens in prompt = 7 +main: token[0] = 42, I +main: token[1] = 2868, believe +main: token[2] = 253, the +main: token[3] = 4495, meaning +main: token[4] = 273, of +main: token[5] = 1495, life +main: token[6] = 310, is + +I believe the meaning of life is to grow, to find a way, to love, to find an appreciation for life, and to live it with all of its beauty. + +For I am the child of God. I am the offspring of God's love. I am the offspring of the light of the world. I am the offspring of the + +main: mem per token = 12186760 bytes +main: load time = 2118.55 ms +main: sample time = 9.59 ms +main: predict time = 4474.07 ms / 63.92 ms per token +main: total time = 6911.26 ms +``` + +## 5-bit integer quantization mode + +```bash +# quantize the model to 5-bits using Q5_0 quantization +./bin/gpt_neox-quantize ./stablelm-base-alpha-3b/ggml-model-f16.bin ./stablelm-base-alpha-3b/ggml-model-q5_0.bin q5_0 + +# run the quantized model +./bin/gpt_neox -m ./stablelm-base-alpha-3b/ggml-model-q5_0.bin -p "I believe the meaning of life is" -t 8 -n 64 + +main: seed = 1682021489 +gpt_neox_model_load: loading model from 'models/stablelm-base-alpha-3b/ggml-model-q5_0.bin' - please wait ... +gpt_neox_model_load: n_vocab = 50688 +gpt_neox_model_load: n_ctx = 4096 +gpt_neox_model_load: n_embd = 4096 +gpt_neox_model_load: n_head = 32 +gpt_neox_model_load: n_layer = 16 +gpt_neox_model_load: n_rot = 32 +gpt_neox_model_load: ftype = 6 +gpt_neox_model_load: ggml ctx size = 5676.10 MB +gpt_neox_model_load: memory_size = 1024.00 MB, n_mem = 65536 +gpt_neox_model_load: ........................ done +gpt_neox_model_load: model size = 2604.28 MB / num tensors = 196 +main: number of tokens in prompt = 7 +main: token[0] = 42, I +main: token[1] = 2868, believe +main: token[2] = 253, the +main: token[3] = 4495, meaning +main: token[4] = 273, of +main: token[5] = 1495, life +main: token[6] = 310, is + +I believe the meaning of life is to love and be loved. The last three verses were enough to tie us all together. If you love someone you love them all. There are some things in this world that are just not equal in Heaven. - Be here in this moment. + +This world is not what is outside of us. It is what + +main: mem per token = 12958024 bytes +main: load time = 850.51 ms +main: sample time = 9.95 ms +main: predict time = 3103.81 ms / 44.34 ms per token +main: total time = 4177.68 ms + +``` + +## Notes + +- No guarantees for correctness +- The tokenizer is currently hacked - probably works only for English +- Non-parallel residual is not supported +- Contributions and improvements are welcome diff --git a/ggml_old/examples/gpt-neox/convert-h5-to-ggml.py b/ggml_old/examples/gpt-neox/convert-h5-to-ggml.py new file mode 100644 index 0000000..9d21226 --- /dev/null +++ b/ggml_old/examples/gpt-neox/convert-h5-to-ggml.py @@ -0,0 +1,116 @@ +import sys +import struct +import json +import numpy as np + +from transformers import AutoModelForCausalLM, AutoTokenizer + +if len(sys.argv) < 3: + print("Usage: convert-h5-to-ggml.py dir-model [use-f32]\n") + print(" ftype == 0 -> float32") + print(" ftype == 1 -> float16") + sys.exit(1) + +# output in the same directory as the model +dir_model = sys.argv[1] +fname_out = sys.argv[1] + "/ggml-model.bin" + +with open(dir_model + "/tokenizer.json", "r", encoding="utf-8") as f: + encoder = json.load(f) + +with open(dir_model + "/config.json", "r", encoding="utf-8") as f: + hparams = json.load(f) + +# possible data types +# ftype == 0 -> float32 +# ftype == 1 -> float16 +# +# map from ftype to string +ftype_str = ["f32", "f16"] + +ftype = 1 +if len(sys.argv) > 2: + ftype = int(sys.argv[2]) + if ftype < 0 or ftype > 1: + print("Invalid ftype: " + str(ftype)) + sys.exit(1) + fname_out = sys.argv[1] + "/ggml-model-" + ftype_str[ftype] + ".bin" + + +tokenizer = AutoTokenizer.from_pretrained(dir_model) +model = AutoModelForCausalLM.from_pretrained(dir_model, low_cpu_mem_usage=True) +#print (model) + +#print(tokenizer.encode('I believe the meaning of life is')) + +list_vars = model.state_dict() +for name in list_vars.keys(): + print(name, list_vars[name].shape, list_vars[name].dtype) + +fout = open(fname_out, "wb") + +print(hparams) + +fout.write(struct.pack("i", 0x67676d6c)) # magic: ggml in hex +fout.write(struct.pack("i", hparams["vocab_size"])) +fout.write(struct.pack("i", hparams["max_position_embeddings"])) +fout.write(struct.pack("i", hparams["hidden_size"])) +fout.write(struct.pack("i", hparams["num_attention_heads"])) +fout.write(struct.pack("i", hparams["num_hidden_layers"])) +fout.write(struct.pack("i", int(hparams["rotary_pct"]*(hparams["hidden_size"]//hparams["num_attention_heads"])))) +fout.write(struct.pack("i", hparams["use_parallel_residual"] if "use_parallel_residual" in hparams else True)) +fout.write(struct.pack("i", ftype)) + +# TODO: temporary hack to not deal with implementing the tokenizer +dot_token = tokenizer.encode('.')[0] +for i in range(hparams["vocab_size"]): + text = tokenizer.decode([dot_token, i]).encode('utf-8') + # remove the first byte (it's always '.') + text = text[1:] + fout.write(struct.pack("i", len(text))) + fout.write(text) + +for name in list_vars.keys(): + data = list_vars[name].squeeze().numpy() + print("Processing variable: " + name + " with shape: ", data.shape) + + # we don't need these + if name.endswith(".attention.masked_bias") or \ + name.endswith(".attention.bias") or \ + name.endswith(".attention.rotary_emb.inv_freq"): + print(" Skipping variable: " + name) + continue + + n_dims = len(data.shape); + + # ftype == 0 -> float32, ftype == 1 -> float16 + ftype_cur = 0; + if ftype != 0: + if name[-7:] == ".weight" and n_dims == 2: + print(" Converting to float16") + data = data.astype(np.float16) + ftype_cur = 1 + else: + print(" Converting to float32") + data = data.astype(np.float32) + ftype_cur = 0 + else: + if data.dtype != np.float32: + print(" Converting to float32") + data = data.astype(np.float32) + ftype_cur = 0 + + # header + str = name.encode('utf-8') + fout.write(struct.pack("iii", n_dims, len(str), ftype_cur)) + for i in range(n_dims): + fout.write(struct.pack("i", data.shape[n_dims - 1 - i])) + fout.write(str); + + # data + data.tofile(fout) + +fout.close() + +print("Done. Output file: " + fname_out) +print("") diff --git a/ggml_old/examples/gpt-neox/main.cpp b/ggml_old/examples/gpt-neox/main.cpp new file mode 100644 index 0000000..c5a7323 --- /dev/null +++ b/ggml_old/examples/gpt-neox/main.cpp @@ -0,0 +1,807 @@ +#include "ggml/ggml.h" + +#include "common.h" +#include "common-ggml.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// default hparams (StableLM 3B) +struct gpt_neox_hparams { + int32_t n_vocab = 50257; + int32_t n_ctx = 4096; + int32_t n_embd = 4096; + int32_t n_head = 32; + int32_t n_layer = 16; + int32_t n_rot = 32; // rotary_pct * (n_embd / n_head) + int32_t par_res = 1; // 1 = true, 0 = false + int32_t ftype = 1; +}; + +struct gpt_neox_layer { + // pre normalization + struct ggml_tensor * ln_1_g; + struct ggml_tensor * ln_1_b; + + // attention + struct ggml_tensor * c_attn_attn_w; + struct ggml_tensor * c_attn_attn_b; + + struct ggml_tensor * c_attn_proj_w; + struct ggml_tensor * c_attn_proj_b; + + // post normalization + struct ggml_tensor * ln_2_g; + struct ggml_tensor * ln_2_b; + + // ff + struct ggml_tensor * c_mlp_fc_w; + struct ggml_tensor * c_mlp_fc_b; + + struct ggml_tensor * c_mlp_proj_w; + struct ggml_tensor * c_mlp_proj_b; +}; + +struct gpt_neox_model { + gpt_neox_hparams hparams; + + // normalization + struct ggml_tensor * ln_f_g; + struct ggml_tensor * ln_f_b; + + struct ggml_tensor * wte; // position embedding + + struct ggml_tensor * lmh_g; // language model head + //struct ggml_tensor * lmh_b; // language model bias + + std::vector layers; + + // key + value memory + struct ggml_tensor * memory_k; + struct ggml_tensor * memory_v; + + // + struct ggml_context * ctx; + std::map tensors; +}; + +// load the model's weights from a file +bool gpt_neox_model_load(const std::string & fname, gpt_neox_model & model, gpt_vocab & vocab) { + printf("%s: loading model from '%s' - please wait ...\n", __func__, fname.c_str()); + + auto fin = std::ifstream(fname, std::ios::binary); + if (!fin) { + fprintf(stderr, "%s: failed to open '%s'\n", __func__, fname.c_str()); + return false; + } + + // verify magic + { + uint32_t magic; + fin.read((char *) &magic, sizeof(magic)); + if (magic != 0x67676d6c) { + fprintf(stderr, "%s: invalid model file '%s' (bad magic)\n", __func__, fname.c_str()); + return false; + } + } + + // load hparams + { + auto & hparams = model.hparams; + + fin.read((char *) &hparams.n_vocab, sizeof(hparams.n_vocab)); + fin.read((char *) &hparams.n_ctx, sizeof(hparams.n_ctx)); + fin.read((char *) &hparams.n_embd, sizeof(hparams.n_embd)); + fin.read((char *) &hparams.n_head, sizeof(hparams.n_head)); + fin.read((char *) &hparams.n_layer, sizeof(hparams.n_layer)); + fin.read((char *) &hparams.n_rot, sizeof(hparams.n_rot)); + fin.read((char *) &hparams.par_res, sizeof(hparams.par_res)); + fin.read((char *) &hparams.ftype, sizeof(hparams.ftype)); + + const int32_t qntvr = hparams.ftype / GGML_QNT_VERSION_FACTOR; + + printf("%s: n_vocab = %d\n", __func__, hparams.n_vocab); + printf("%s: n_ctx = %d\n", __func__, hparams.n_ctx); + printf("%s: n_embd = %d\n", __func__, hparams.n_embd); + printf("%s: n_head = %d\n", __func__, hparams.n_head); + printf("%s: n_layer = %d\n", __func__, hparams.n_layer); + printf("%s: n_rot = %d\n", __func__, hparams.n_rot); + printf("%s: par_res = %d\n", __func__, hparams.par_res); + printf("%s: ftype = %d\n", __func__, hparams.ftype); + printf("%s: qntvr = %d\n", __func__, qntvr); + + hparams.ftype %= GGML_QNT_VERSION_FACTOR; + } + + // load vocab + { + const int32_t n_vocab = model.hparams.n_vocab; + + std::string word; + std::vector buf(128); + + for (int i = 0; i < n_vocab; i++) { + uint32_t len; + fin.read((char *) &len, sizeof(len)); + + buf.resize(len); + fin.read((char *) buf.data(), len); + word.assign(buf.data(), len); + + vocab.token_to_id[word] = i; + vocab.id_to_token[i] = word; + } + } + + // for the big tensors, we have the option to store the data in 16-bit floats or quantized + // in order to save memory and also to speed up the computation + ggml_type wtype = ggml_ftype_to_ggml_type((ggml_ftype) (model.hparams.ftype)); + if (wtype == GGML_TYPE_COUNT) { + fprintf(stderr, "%s: invalid model file '%s' (bad ftype value %d)\n", + __func__, fname.c_str(), model.hparams.ftype); + return false; + } + + auto & ctx = model.ctx; + + size_t ctx_size = 0; + + { + const auto & hparams = model.hparams; + + const int n_embd = hparams.n_embd; + const int n_layer = hparams.n_layer; + const int n_ctx = hparams.n_ctx; + const int n_vocab = hparams.n_vocab; + + ctx_size += n_embd*ggml_type_sizef(GGML_TYPE_F32); // ln_f_g + ctx_size += n_embd*ggml_type_sizef(GGML_TYPE_F32); // ln_f_b + + ctx_size += n_embd*n_vocab*ggml_type_sizef(wtype); // wte + + ctx_size += n_embd*n_vocab*ggml_type_sizef(wtype); // lmh_g + //ctx_size += n_vocab*ggml_type_sizef(GGML_TYPE_F32); // lmh_b + + ctx_size += n_layer*(n_embd*ggml_type_sizef(GGML_TYPE_F32)); // ln_1_g + ctx_size += n_layer*(n_embd*ggml_type_sizef(GGML_TYPE_F32)); // ln_1_b + + ctx_size += n_layer*(3*n_embd*n_embd*ggml_type_sizef(wtype)); // c_attn_attn_w + ctx_size += n_layer*( 3*n_embd*ggml_type_sizef(GGML_TYPE_F32)); // c_attn_attn_b + + ctx_size += n_layer*(n_embd*n_embd*ggml_type_sizef(wtype)); // c_attn_proj_w + ctx_size += n_layer*(n_embd*n_embd*ggml_type_sizef(GGML_TYPE_F32)); // c_attn_proj_b + + ctx_size += n_layer*(n_embd*ggml_type_sizef(GGML_TYPE_F32)); // ln_2_g + ctx_size += n_layer*(n_embd*ggml_type_sizef(GGML_TYPE_F32)); // ln_2_b + + ctx_size += n_layer*(4*n_embd*n_embd*ggml_type_sizef(wtype)); // c_mlp_fc_w + ctx_size += n_layer*( 4*n_embd*ggml_type_sizef(GGML_TYPE_F32)); // c_mlp_fc_b + + ctx_size += n_layer*(4*n_embd*n_embd*ggml_type_sizef(wtype)); // c_mlp_proj_w + ctx_size += n_layer*( n_embd*ggml_type_sizef(GGML_TYPE_F32)); // c_mlp_proj_b + + ctx_size += n_ctx*n_layer*n_embd*ggml_type_sizef(GGML_TYPE_F32); // memory_k + ctx_size += n_ctx*n_layer*n_embd*ggml_type_sizef(GGML_TYPE_F32); // memory_v + + ctx_size += (6 + 16*n_layer)*512; // object overhead + + printf("%s: ggml ctx size = %6.2f MB\n", __func__, ctx_size/(1024.0*1024.0)); + } + + // create the ggml context + { + struct ggml_init_params params = { + .mem_size = ctx_size, + .mem_buffer = NULL, + .no_alloc = false, + }; + + model.ctx = ggml_init(params); + if (!model.ctx) { + fprintf(stderr, "%s: ggml_init() failed\n", __func__); + return false; + } + } + + // prepare memory for the weights + { + const auto & hparams = model.hparams; + + const int n_embd = hparams.n_embd; + const int n_layer = hparams.n_layer; + const int n_vocab = hparams.n_vocab; + + model.layers.resize(n_layer); + + model.wte = ggml_new_tensor_2d(ctx, wtype, n_embd, n_vocab); + + model.ln_f_g = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + model.ln_f_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + + model.lmh_g = ggml_new_tensor_2d(ctx, wtype, n_embd, n_vocab); + //model.lmh_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_vocab); + + // map by name + model.tensors["gpt_neox.embed_in.weight"] = model.wte; + + model.tensors["gpt_neox.final_layer_norm.weight"] = model.ln_f_g; + model.tensors["gpt_neox.final_layer_norm.bias"] = model.ln_f_b; + + model.tensors["embed_out.weight"] = model.lmh_g; + //model.tensors["lm_head.bias"] = model.lmh_b; + + for (int i = 0; i < n_layer; ++i) { + auto & layer = model.layers[i]; + + layer.ln_1_g = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + layer.ln_1_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + + layer.c_attn_attn_w = ggml_new_tensor_2d(ctx, wtype, n_embd, 3*n_embd); + layer.c_attn_attn_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 3*n_embd); + + layer.c_attn_proj_w = ggml_new_tensor_2d(ctx, wtype, n_embd, n_embd); + layer.c_attn_proj_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + + layer.ln_2_g = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + layer.ln_2_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + + layer.c_mlp_fc_w = ggml_new_tensor_2d(ctx, wtype, n_embd, 4*n_embd); + layer.c_mlp_fc_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 4*n_embd); + + layer.c_mlp_proj_w = ggml_new_tensor_2d(ctx, wtype, 4*n_embd, n_embd); + layer.c_mlp_proj_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + + // map by name + model.tensors["gpt_neox.layers." + std::to_string(i) + ".input_layernorm.weight"] = layer.ln_1_g; + model.tensors["gpt_neox.layers." + std::to_string(i) + ".input_layernorm.bias"] = layer.ln_1_b; + + model.tensors["gpt_neox.layers." + std::to_string(i) + ".attention.query_key_value.weight"] = layer.c_attn_attn_w; + model.tensors["gpt_neox.layers." + std::to_string(i) + ".attention.query_key_value.bias"] = layer.c_attn_attn_b; + + model.tensors["gpt_neox.layers." + std::to_string(i) + ".attention.dense.weight"] = layer.c_attn_proj_w; + model.tensors["gpt_neox.layers." + std::to_string(i) + ".attention.dense.bias"] = layer.c_attn_proj_b; + + model.tensors["gpt_neox.layers." + std::to_string(i) + ".post_attention_layernorm.weight"] = layer.ln_2_g; + model.tensors["gpt_neox.layers." + std::to_string(i) + ".post_attention_layernorm.bias"] = layer.ln_2_b; + + model.tensors["gpt_neox.layers." + std::to_string(i) + ".mlp.dense_h_to_4h.weight"] = layer.c_mlp_fc_w; + model.tensors["gpt_neox.layers." + std::to_string(i) + ".mlp.dense_h_to_4h.bias"] = layer.c_mlp_fc_b; + + model.tensors["gpt_neox.layers." + std::to_string(i) + ".mlp.dense_4h_to_h.weight"] = layer.c_mlp_proj_w; + model.tensors["gpt_neox.layers." + std::to_string(i) + ".mlp.dense_4h_to_h.bias"] = layer.c_mlp_proj_b; + } + } + + // key + value memory + { + const auto & hparams = model.hparams; + + const int n_embd = hparams.n_embd; + const int n_layer = hparams.n_layer; + const int n_ctx = hparams.n_ctx; + + const int64_t n_mem = n_layer*n_ctx; + const int64_t n_elements = n_embd*n_mem; + + model.memory_k = ggml_new_tensor_1d(ctx, GGML_TYPE_F16, n_elements); + model.memory_v = ggml_new_tensor_1d(ctx, GGML_TYPE_F16, n_elements); + + const size_t memory_size = ggml_nbytes(model.memory_k) + ggml_nbytes(model.memory_v); + + printf("%s: memory_size = %8.2f MB, n_mem = %" PRId64 "\n", __func__, memory_size/1024.0/1024.0, n_mem); + } + + // load weights + { + int n_tensors = 0; + size_t total_size = 0; + + printf("%s: ", __func__); + + while (true) { + int32_t n_dims; + int32_t length; + int32_t ttype; + + fin.read(reinterpret_cast(&n_dims), sizeof(n_dims)); + fin.read(reinterpret_cast(&length), sizeof(length)); + fin.read(reinterpret_cast(&ttype), sizeof(ttype)); + + if (fin.eof()) { + break; + } + + int32_t nelements = 1; + int32_t ne[2] = { 1, 1 }; + for (int i = 0; i < n_dims; ++i) { + fin.read(reinterpret_cast(&ne[i]), sizeof(ne[i])); + nelements *= ne[i]; + } + + std::string name(length, 0); + fin.read(&name[0], length); + + if (model.tensors.find(name.data()) == model.tensors.end()) { + fprintf(stderr, "%s: unknown tensor '%s' in model file\n", __func__, name.data()); + return false; + } + + auto tensor = model.tensors[name.data()]; + if (ggml_nelements(tensor) != nelements) { + fprintf(stderr, "%s: tensor '%s' has wrong size in model file\n", __func__, name.data()); + return false; + } + + if (tensor->ne[0] != ne[0] || tensor->ne[1] != ne[1]) { + fprintf(stderr, "%s: tensor '%s' has wrong shape in model file: got [%5d, %5d], expected [%5d, %5d]\n", + __func__, name.data(), (int) tensor->ne[0], (int) tensor->ne[1], ne[0], ne[1]); + return false; + } + + // for debugging + if (0) { + printf("%24s - [%5d, %5d], type = %6s, %6.2f MB, %9zu bytes\n", name.data(), ne[0], ne[1], ggml_type_name(ggml_type(ttype)), ggml_nbytes(tensor)/1024.0/1024.0, ggml_nbytes(tensor)); + } + + const size_t bpe = ggml_type_size(ggml_type(ttype)); + + if ((nelements*bpe)/ggml_blck_size(tensor->type) != ggml_nbytes(tensor)) { + fprintf(stderr, "%s: tensor '%s' has wrong size in model file: got %zu, expected %zu\n", + __func__, name.data(), ggml_nbytes(tensor), nelements*bpe); + return false; + } + + fin.read(reinterpret_cast(tensor->data), ggml_nbytes(tensor)); + + total_size += ggml_nbytes(tensor); + if (++n_tensors % 8 == 0) { + printf("."); + fflush(stdout); + } + } + + printf(" done\n"); + + printf("%s: model size = %8.2f MB / num tensors = %d\n", __func__, total_size/1024.0/1024.0, n_tensors); + } + + fin.close(); + + return true; +} + + +// feed-forward network +ggml_tensor * gpt_neox_ff( + const gpt_neox_layer &layer, + ggml_context * ctx0, + ggml_tensor * inp) { + ggml_tensor * cur = ggml_norm(ctx0, inp); + + cur = ggml_add(ctx0, + ggml_mul(ctx0, + ggml_repeat(ctx0, layer.ln_2_g, cur), + cur), + ggml_repeat(ctx0, layer.ln_2_b, cur)); + + cur = ggml_mul_mat(ctx0, + layer.c_mlp_fc_w, + cur); + + cur = ggml_add(ctx0, + ggml_repeat(ctx0, layer.c_mlp_fc_b, cur), + cur); + + // GELU activation + cur = ggml_gelu(ctx0, cur); + + // projection + // cur = proj_w*cur + proj_b + cur = ggml_mul_mat(ctx0, + layer.c_mlp_proj_w, + cur); + + cur = ggml_add(ctx0, + ggml_repeat(ctx0, layer.c_mlp_proj_b, cur), + cur); + return cur; +} + +// evaluate the transformer +// +// - model: the model +// - n_threads: number of threads to use +// - n_past: the context size so far +// - embd_inp: the embeddings of the tokens in the context +// - embd_w: the predicted logits for the next token +// +bool gpt_neox_eval( + const gpt_neox_model & model, + const int n_threads, + const int n_past, + const std::vector & embd_inp, + std::vector & embd_w, + size_t & mem_per_token) { + const int N = embd_inp.size(); + + const auto & hparams = model.hparams; + + const int n_embd = hparams.n_embd; + const int n_layer = hparams.n_layer; + const int n_ctx = hparams.n_ctx; + const int n_head = hparams.n_head; + const int n_vocab = hparams.n_vocab; + const int n_rot = hparams.n_rot; + + static size_t buf_size = 256u*1024*1024; + static void * buf = malloc(buf_size); + + // use 2 scratch buffers + // TODO: very hacky solution - reimplement in a more elegant way + static size_t scr0_size = 256u*1024*1024; + static void * scr0 = malloc(scr0_size); + + static size_t scr1_size = 256u*1024*1024; + static void * scr1 = malloc(scr1_size); + + if (mem_per_token > 0 && mem_per_token*N > buf_size) { + const size_t buf_size_new = 1.1*(mem_per_token*N); // add 10% to account for ggml object overhead + //printf("\n%s: reallocating buffer from %zu to %zu bytes\n", __func__, buf_size, buf_size_new); + + // reallocate + buf_size = buf_size_new; + buf = realloc(buf, buf_size); + if (buf == nullptr) { + fprintf(stderr, "%s: failed to allocate %zu bytes\n", __func__, buf_size); + return false; + } + } + + struct ggml_init_params params = { + .mem_size = buf_size, + .mem_buffer = buf, + .no_alloc = false, + }; + + struct ggml_context * ctx0 = ggml_init(params); + struct ggml_cgraph gf = {}; + gf.n_threads = n_threads; + + struct ggml_tensor * embd = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, N); + memcpy(embd->data, embd_inp.data(), N*ggml_element_size(embd)); + + // wte + struct ggml_tensor * inpL = ggml_get_rows(ctx0, model.wte, embd); + + for (int il = 0; il < n_layer; ++il) { + struct ggml_tensor * cur; + + ggml_set_scratch(ctx0, { 0, scr0_size, scr0, }); + + // self-attention + { + { + cur = ggml_norm(ctx0, inpL); + + cur = ggml_add(ctx0, + ggml_mul(ctx0, + ggml_repeat(ctx0, model.layers[il].ln_1_g, cur), + cur), + ggml_repeat(ctx0, model.layers[il].ln_1_b, cur)); + } + + // compute QKV + { + cur = ggml_mul_mat(ctx0, + model.layers[il].c_attn_attn_w, + cur); + + cur = ggml_add(ctx0, + ggml_repeat(ctx0, model.layers[il].c_attn_attn_b, cur), + cur); + } + + struct ggml_tensor * Qcur = ggml_cont(ctx0, ggml_view_3d(ctx0, cur, n_embd/n_head, n_head, N, cur->nb[1]/n_head, cur->nb[1], 0*sizeof(float)*n_embd/n_head)); + struct ggml_tensor * Kcur = ggml_cont(ctx0, ggml_view_3d(ctx0, cur, n_embd/n_head, n_head, N, cur->nb[1]/n_head, cur->nb[1], 1*sizeof(float)*n_embd/n_head)); + struct ggml_tensor * Vcur = ggml_cont(ctx0, ggml_view_3d(ctx0, cur, n_embd/n_head, n_head, N, cur->nb[1]/n_head, cur->nb[1], 2*sizeof(float)*n_embd/n_head)); + + // using mode = 2 for GPT-NeoX mode + Qcur = ggml_rope_inplace(ctx0, Qcur, n_past, n_rot, 2); + Kcur = ggml_rope_inplace(ctx0, Kcur, n_past, n_rot, 2); + + // store key and value to memory + { + Vcur = ggml_transpose(ctx0, ggml_reshape_2d(ctx0, Vcur, n_embd, N)); + + struct ggml_tensor * k = ggml_view_1d(ctx0, model.memory_k, N*n_embd, (ggml_element_size(model.memory_k)*n_embd)*(il*n_ctx + n_past)); + struct ggml_tensor * v = ggml_view_2d(ctx0, model.memory_v, N, n_embd, + ( n_ctx)*ggml_element_size(model.memory_v), + (il*n_ctx)*ggml_element_size(model.memory_v)*n_embd + n_past*ggml_element_size(model.memory_v)); + + ggml_build_forward_expand(&gf, ggml_cpy(ctx0, Kcur, k)); + ggml_build_forward_expand(&gf, ggml_cpy(ctx0, Vcur, v)); + } + + // Q = Qcur.contiguous().view(n_embd/n_head, n_head, N).permute(0, 2, 1, 3) + struct ggml_tensor * Q = + ggml_permute(ctx0, + Qcur, + 0, 2, 1, 3); + + // K = Kmem.view(n_embd/n_head, n_head, n_past + N).permute(0, 2, 1, 3) + struct ggml_tensor * K = + ggml_permute(ctx0, + ggml_reshape_3d(ctx0, + ggml_view_1d(ctx0, model.memory_k, (n_past + N)*n_embd, il*n_ctx*ggml_element_size(model.memory_k)*n_embd), + n_embd/n_head, n_head, n_past + N), + 0, 2, 1, 3); + + // K * Q + struct ggml_tensor * KQ = ggml_mul_mat(ctx0, K, Q); + + // KQ_scaled = KQ / sqrt(n_embd/n_head) + struct ggml_tensor * KQ_scaled = + ggml_scale_inplace(ctx0, + KQ, + ggml_new_f32(ctx0, 1.0f/sqrt(float(n_embd)/n_head)) + ); + + // KQ_masked = mask_past(KQ_scaled) + struct ggml_tensor * KQ_masked = ggml_diag_mask_inf_inplace(ctx0, KQ_scaled, n_past); + + // KQ = soft_max(KQ_masked) + struct ggml_tensor * KQ_soft_max = ggml_soft_max_inplace(ctx0, KQ_masked); + + // V_trans = Vmem.view(n_embd/n_head, n_head, n_past + N).permute(1, 2, 0, 3).contiguous() + struct ggml_tensor * V = + ggml_view_3d(ctx0, model.memory_v, + n_past + N, n_embd/n_head, n_head, + n_ctx*ggml_element_size(model.memory_v), + n_ctx*ggml_element_size(model.memory_v)*n_embd/n_head, + il*n_ctx*ggml_element_size(model.memory_v)*n_embd); + + // KQV = transpose(V) * KQ_soft_max + struct ggml_tensor * KQV = ggml_mul_mat(ctx0, V, KQ_soft_max); + + // KQV_merged = KQV.permute(0, 2, 1, 3) + struct ggml_tensor * KQV_merged = ggml_permute(ctx0, KQV, 0, 2, 1, 3); + + // cur = KQV_merged.contiguous().view(n_embd, N) + cur = ggml_cpy(ctx0, + KQV_merged, + ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_embd, N)); + + // projection + { + cur = ggml_mul_mat(ctx0, + model.layers[il].c_attn_proj_w, + cur); + + cur = ggml_add(ctx0, ggml_repeat(ctx0, model.layers[il].c_attn_proj_b, cur), cur); + } + } + + ggml_set_scratch(ctx0, { 0, scr1_size, scr1, }); + + if (hparams.par_res == 0) { + struct ggml_tensor * inpFF = ggml_add(ctx0, cur, inpL); + + cur = gpt_neox_ff(model.layers[il], ctx0, inpFF); + + // input for next layer + inpL = ggml_add(ctx0, cur, inpFF); + } else { + struct ggml_tensor * inpFF = cur; + + // this is independent of the self-attention result, so it could be done in parallel to the self-attention + // note here we pass inpL instead of cur + cur = gpt_neox_ff(model.layers[il], ctx0, inpL); + + // layer input + FF + cur = ggml_add(ctx0, cur, inpFF); + + // input for next layer + inpL = ggml_add(ctx0, cur, inpL); + } + } + + ggml_set_scratch(ctx0, { 0, scr0_size, scr0, }); + + // norm + { + inpL = ggml_norm(ctx0, inpL); + + // inpL = ln_f_g*inpL + ln_f_b + inpL = ggml_add(ctx0, + ggml_mul(ctx0, + ggml_repeat(ctx0, model.ln_f_g, inpL), + inpL), + ggml_repeat(ctx0, model.ln_f_b, inpL)); + } + + ggml_set_scratch(ctx0, { 0, 0, nullptr, }); + + // lm_head + { + inpL = ggml_mul_mat(ctx0, model.lmh_g, inpL); + + //inpL = ggml_add(ctx0, + // ggml_repeat(ctx0, model.lmh_b, inpL), + // inpL); + } + + // logits -> probs + //inpL = ggml_soft_max_inplace(ctx0, inpL); + + // run the computation + ggml_build_forward_expand(&gf, inpL); + ggml_graph_compute (ctx0, &gf); + + //if (n_past%100 == 0) { + // ggml_graph_print (&gf); + // ggml_graph_dump_dot(&gf, NULL, "gpt-2.dot"); + //} + + //embd_w.resize(n_vocab*N); + //memcpy(embd_w.data(), ggml_get_data(inpL), sizeof(float)*n_vocab*N); + + // return result for just the last token + embd_w.resize(n_vocab); + memcpy(embd_w.data(), (float *) ggml_get_data(inpL) + (n_vocab*(N-1)), sizeof(float)*n_vocab); + + if (mem_per_token == 0) { + mem_per_token = ggml_used_mem(ctx0)/N; + } + //printf("used_mem = %zu\n", ggml_used_mem(ctx0)); + + ggml_free(ctx0); + + return true; +} + +int main(int argc, char ** argv) { + ggml_time_init(); + + const int64_t t_main_start_us = ggml_time_us(); + + gpt_params params; + params.model = "models/stablelm-base-alpha-3b/ggml-model-f16.bin"; + + if (gpt_params_parse(argc, argv, params) == false) { + return 1; + } + + if (params.seed < 0) { + params.seed = time(NULL); + } + + printf("%s: seed = %d\n", __func__, params.seed); + + std::mt19937 rng(params.seed); + if (params.prompt.empty()) { + params.prompt = gpt_random_prompt(rng); + } + + int64_t t_load_us = 0; + + gpt_vocab vocab; + gpt_neox_model model; + + // load the model + { + const int64_t t_start_us = ggml_time_us(); + + if (!gpt_neox_model_load(params.model, model, vocab)) { + fprintf(stderr, "%s: failed to load model from '%s'\n", __func__, params.model.c_str()); + return 1; + } + + t_load_us = ggml_time_us() - t_start_us; + } + + int n_past = 0; + + int64_t t_sample_us = 0; + int64_t t_predict_us = 0; + + std::vector logits; + + // tokenize the prompt + std::vector embd_inp = ::gpt_tokenize(vocab, params.prompt); + + params.n_predict = std::min(params.n_predict, model.hparams.n_ctx - (int) embd_inp.size()); + + printf("%s: number of tokens in prompt = %zu\n", __func__, embd_inp.size()); + for (int i = 0; i < embd_inp.size(); i++) { + printf("%s: token[%d] = %6d, %s\n", __func__, i, embd_inp[i], vocab.id_to_token.at(embd_inp[i]).c_str()); + } + printf("\n"); + + std::vector embd; + + // determine the required inference memory per token: + size_t mem_per_token = 0; + gpt_neox_eval(model, params.n_threads, 0, { 0, 1, 2, 3 }, logits, mem_per_token); + + for (int i = embd.size(); i < embd_inp.size() + params.n_predict; i++) { + // predict + if (embd.size() > 0) { + const int64_t t_start_us = ggml_time_us(); + + if (!gpt_neox_eval(model, params.n_threads, n_past, embd, logits, mem_per_token)) { + printf("Failed to predict\n"); + return 1; + } + + t_predict_us += ggml_time_us() - t_start_us; + } + + n_past += embd.size(); + embd.clear(); + + if (i >= embd_inp.size()) { + // sample next token + const int top_k = params.top_k; + const float top_p = params.top_p; + const float temp = params.temp; + + const int n_vocab = model.hparams.n_vocab; + + gpt_vocab::id id = 0; + + { + const int64_t t_start_sample_us = ggml_time_us(); + + id = gpt_sample_top_k_top_p(vocab, logits.data() + (logits.size() - n_vocab), top_k, top_p, temp, rng); + + t_sample_us += ggml_time_us() - t_start_sample_us; + } + + // add it to the context + embd.push_back(id); + } else { + // if here, it means we are still processing the input prompt + for (int k = i; k < embd_inp.size(); k++) { + embd.push_back(embd_inp[k]); + if (embd.size() > params.n_batch) { + break; + } + } + i += embd.size() - 1; + } + + // display text + for (auto id : embd) { + printf("%s", vocab.id_to_token[id].c_str()); + } + fflush(stdout); + + // end of text token + if (embd.back() == 0) { + break; + } + } + + // report timing + { + const int64_t t_main_end_us = ggml_time_us(); + + printf("\n\n"); + printf("%s: mem per token = %8zu bytes\n", __func__, mem_per_token); + printf("%s: load time = %8.2f ms\n", __func__, t_load_us/1000.0f); + printf("%s: sample time = %8.2f ms\n", __func__, t_sample_us/1000.0f); + printf("%s: predict time = %8.2f ms / %.2f ms per token\n", __func__, t_predict_us/1000.0f, t_predict_us/1000.0f/n_past); + printf("%s: total time = %8.2f ms\n", __func__, (t_main_end_us - t_main_start_us)/1000.0f); + } + + ggml_free(model.ctx); + + return 0; +} diff --git a/ggml_old/examples/gpt-neox/quantize.cpp b/ggml_old/examples/gpt-neox/quantize.cpp new file mode 100644 index 0000000..ac7d681 --- /dev/null +++ b/ggml_old/examples/gpt-neox/quantize.cpp @@ -0,0 +1,178 @@ +#include "ggml/ggml.h" + +#include "common.h" +#include "common-ggml.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// default hparams (StableLM 3B) +struct gpt_neox_hparams { + int32_t n_vocab = 50257; + int32_t n_ctx = 4096; + int32_t n_embd = 4096; + int32_t n_head = 32; + int32_t n_layer = 16; + int32_t n_rot = 32; // 0.25 * (n_embd / n_head) + int32_t par_res = 1; // 1 = true, 0 = false + int32_t ftype = 1; +}; + +// quantize a model +bool gpt_neox_model_quantize(const std::string & fname_inp, const std::string & fname_out, ggml_ftype ftype) { + gpt_vocab vocab; + + printf("%s: loading model from '%s'\n", __func__, fname_inp.c_str()); + + auto finp = std::ifstream(fname_inp, std::ios::binary); + if (!finp) { + fprintf(stderr, "%s: failed to open '%s' for reading\n", __func__, fname_inp.c_str()); + return false; + } + + auto fout = std::ofstream(fname_out, std::ios::binary); + if (!fout) { + fprintf(stderr, "%s: failed to open '%s' for writing\n", __func__, fname_out.c_str()); + return false; + } + + // verify magic + { + uint32_t magic; + finp.read((char *) &magic, sizeof(magic)); + if (magic != 0x67676d6c) { + fprintf(stderr, "%s: invalid model file '%s' (bad magic)\n", __func__, fname_inp.c_str()); + return false; + } + + fout.write((char *) &magic, sizeof(magic)); + } + + gpt_neox_hparams hparams; + + // load hparams + { + finp.read((char *) &hparams.n_vocab, sizeof(hparams.n_vocab)); + finp.read((char *) &hparams.n_ctx, sizeof(hparams.n_ctx)); + finp.read((char *) &hparams.n_embd, sizeof(hparams.n_embd)); + finp.read((char *) &hparams.n_head, sizeof(hparams.n_head)); + finp.read((char *) &hparams.n_layer, sizeof(hparams.n_layer)); + finp.read((char *) &hparams.n_rot, sizeof(hparams.n_rot)); + finp.read((char *) &hparams.par_res, sizeof(hparams.par_res)); + finp.read((char *) &hparams.ftype, sizeof(hparams.ftype)); + + const int32_t qntvr_src = hparams.ftype / GGML_QNT_VERSION_FACTOR; + const int32_t ftype_dst = GGML_QNT_VERSION * GGML_QNT_VERSION_FACTOR + ftype; + + printf("%s: n_vocab = %d\n", __func__, hparams.n_vocab); + printf("%s: n_ctx = %d\n", __func__, hparams.n_ctx); + printf("%s: n_embd = %d\n", __func__, hparams.n_embd); + printf("%s: n_head = %d\n", __func__, hparams.n_head); + printf("%s: n_layer = %d\n", __func__, hparams.n_layer); + printf("%s: par_res = %d\n", __func__, hparams.par_res); + printf("%s: ftype (src) = %d\n", __func__, hparams.ftype); + printf("%s: qntvr (src) = %d\n", __func__, qntvr_src); + printf("%s: ftype (dst) = %d\n", __func__, ftype_dst); + printf("%s: qntvr (dst) = %d\n", __func__, GGML_QNT_VERSION); + + fout.write((char *) &hparams.n_vocab, sizeof(hparams.n_vocab)); + fout.write((char *) &hparams.n_ctx, sizeof(hparams.n_ctx)); + fout.write((char *) &hparams.n_embd, sizeof(hparams.n_embd)); + fout.write((char *) &hparams.n_head, sizeof(hparams.n_head)); + fout.write((char *) &hparams.n_layer, sizeof(hparams.n_layer)); + fout.write((char *) &hparams.n_rot, sizeof(hparams.n_rot)); + fout.write((char *) &hparams.par_res, sizeof(hparams.par_res)); + fout.write((char *) &ftype_dst, sizeof(ftype_dst)); + } + + // load vocab + { + const int32_t n_vocab = hparams.n_vocab; + + std::string word; + for (int i = 0; i < n_vocab; i++) { + uint32_t len; + finp.read ((char *) &len, sizeof(len)); + fout.write((char *) &len, sizeof(len)); + + word.resize(len); + finp.read ((char *) word.data(), len); + fout.write((char *) word.data(), len); + + vocab.token_to_id[word] = i; + vocab.id_to_token[i] = word; + } + } + + // regexes of tensor names to be quantized + const std::vector to_quant = { + ".*weight", + }; + + if (!ggml_common_quantize_0(finp, fout, ftype, to_quant, {})) { + fprintf(stderr, "%s: failed to quantize model '%s'\n", __func__, fname_inp.c_str()); + return false; + } + + finp.close(); + fout.close(); + + return true; +} + +// usage: +// ./gpt-neox-quantize models/stalellm2-117M/ggml-model.bin models/stablelm2-117M/ggml-model-quant.bin type +// +int main(int argc, char ** argv) { + if (argc != 4) { + fprintf(stderr, "usage: %s model-f32.bin model-quant.bin type\n", argv[0]); + ggml_print_ftypes(stderr); + return 1; + } + + // needed to initialize f16 tables + { + struct ggml_init_params params = { 0, NULL, false }; + struct ggml_context * ctx = ggml_init(params); + ggml_free(ctx); + } + + const std::string fname_inp = argv[1]; + const std::string fname_out = argv[2]; + + const ggml_ftype ftype = ggml_parse_ftype(argv[3]); + + const int64_t t_main_start_us = ggml_time_us(); + + int64_t t_quantize_us = 0; + + // load the model + { + const int64_t t_start_us = ggml_time_us(); + + if (!gpt_neox_model_quantize(fname_inp, fname_out, ggml_ftype(ftype))) { + fprintf(stderr, "%s: failed to quantize model from '%s'\n", __func__, fname_inp.c_str()); + return 1; + } + + t_quantize_us = ggml_time_us() - t_start_us; + } + + // report timing + { + const int64_t t_main_end_us = ggml_time_us(); + + printf("\n"); + printf("%s: quantize time = %8.2f ms\n", __func__, t_quantize_us/1000.0f); + printf("%s: total time = %8.2f ms\n", __func__, (t_main_end_us - t_main_start_us)/1000.0f); + } + + return 0; +} diff --git a/ggml_old/examples/mnist/CMakeLists.txt b/ggml_old/examples/mnist/CMakeLists.txt new file mode 100644 index 0000000..91b802a --- /dev/null +++ b/ggml_old/examples/mnist/CMakeLists.txt @@ -0,0 +1,7 @@ +# +# mnist + +set(TEST_TARGET mnist) +add_executable(${TEST_TARGET} main.cpp) +target_link_libraries(${TEST_TARGET} PRIVATE ggml common) + diff --git a/ggml_old/examples/mnist/README.md b/ggml_old/examples/mnist/README.md new file mode 100644 index 0000000..0f2ed8c --- /dev/null +++ b/ggml_old/examples/mnist/README.md @@ -0,0 +1,104 @@ +# MNIST Example for GGML + +This is a simple example of how to use GGML for inferencing. + +## Training the Model + +A Google Colab notebook for training a simple two-layer network to recognize digits is located here. You can +use this to save a pytorch model to be converted to ggml format. + +[Colab](https://colab.research.google.com/drive/12n_8VNJnolBnX5dVS0HNWubnOjyEaFSb?usp=sharing) + + +## GGML Format Conversion + +GGML "format" is whatever you choose for efficient loading. In our case, we just save the hyperparameters used +plus the model weights and biases. Run convert-h5-to-ggml.py to convert your pytorch model. The output format is: + +- magic constant (int32) +- repeated list of tensors +- number of dimensions of tensor (int32) +- tensor dimension (int32 repeated) +- values of tensor (int32) + +Run ```convert-h5-to-ggml.py mnist_model.state_dict``` where `mnist_model.state_dict` is the saved pytorch model from the Google Colab. For +quickstart, it is included in the mnist/models directory. + +## MNIST Network + +The MNIST recognizer network is extremely simple. A fully connected layer + relu, followed by a fully connected layer + softmax. This +version of the MNIST network doesn't use convolutions. + +## Running the example + +Here is how to run the example programs: + +```bash +# Build ggml + examples +git clone https://github.com/ggerganov/ggml +cd ggml +mkdir build && cd build +cmake .. +make -j4 mnist + +# Run the MNIST model +./bin/mnist ../examples/mnist/models/mnist/ggml-model-f32.bin ../examples/mnist/models/mnist/t10k-images.idx3-ubyte +``` + +For more information, checkout the corresponding programs in the [examples](examples) folder. + +# Sample output + + +``` +$ ./bin/mnist ./models/mnist/ggml-model-f32.bin ../examples/mnist/models/mnist/t10k-images.idx3-ubyte +mnist_model_load: loading model from './models/mnist/ggml-model-f32.bin' +mnist_model_load: ggml ctx size = 1.52 MB +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ +_ _ _ _ _ _ _ _ _ _ _ _ _ * * _ _ _ _ _ _ _ _ _ _ _ _ _ +_ _ _ _ _ _ _ _ _ _ _ _ * * * * _ _ _ _ _ _ _ _ _ _ _ _ +_ _ _ _ _ _ _ _ _ _ * * * _ _ _ * _ * * _ _ _ _ _ _ _ _ +_ _ _ _ _ _ _ _ _ * * _ _ _ _ _ * _ * _ _ _ _ _ _ _ _ _ +_ _ _ _ _ _ _ _ _ * * _ _ _ _ _ _ * * _ _ _ _ _ _ _ _ _ +_ _ _ _ _ _ _ _ * * _ _ _ _ _ _ * * * * _ _ _ _ _ _ _ _ +_ _ _ _ _ _ _ * * _ _ _ _ _ _ _ * * * * _ _ _ _ _ _ _ _ +_ _ _ _ _ _ _ * * _ _ _ _ _ * * _ _ * * _ _ _ _ _ _ _ _ +_ _ _ _ _ _ _ * * _ _ _ _ * * _ _ _ _ * _ _ _ _ _ _ _ _ +_ _ _ _ _ _ _ * * * * * * _ _ _ _ _ _ * _ _ _ _ _ _ _ _ +_ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ * _ _ _ _ _ _ _ _ +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ * * _ _ _ _ _ _ _ +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ * * _ _ _ _ _ _ _ +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ * * _ _ _ _ _ _ _ +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ * * _ _ _ _ _ _ _ _ +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ * * * _ _ _ _ _ _ _ _ +_ _ _ _ _ _ _ _ _ _ _ _ * _ _ * * * _ _ _ _ _ _ _ _ _ _ +_ _ _ _ _ _ _ _ _ _ _ _ * * * * * _ _ _ _ _ _ _ _ _ _ _ +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + +ggml_graph_dump_dot: dot -Tpng mnist.dot -o mnist.dot.png && open mnist.dot.png +Predicted digit is 9 +``` + +Computation graph: + +![mnist dot](https://user-images.githubusercontent.com/1991296/231882071-84e29d53-b226-4d73-bdc2-5bd6dcb7efd1.png) + + +## Web demo + +The example can be compiled with Emscripten like this: + +```bash +cd examples/mnist +emcc -I../../include -I../../include/ggml -I../../examples ../../src/ggml.c main.cpp -o web/mnist.js -s EXPORTED_FUNCTIONS='["_wasm_eval","_wasm_random_digit","_malloc","_free"]' -s EXPORTED_RUNTIME_METHODS='["ccall"]' -s ALLOW_MEMORY_GROWTH=1 --preload-file models/mnist +``` + +Online demo: https://mnist.ggerganov.com diff --git a/ggml_old/examples/mnist/convert-h5-to-ggml.py b/ggml_old/examples/mnist/convert-h5-to-ggml.py new file mode 100644 index 0000000..a4f7536 --- /dev/null +++ b/ggml_old/examples/mnist/convert-h5-to-ggml.py @@ -0,0 +1,63 @@ +# Convert MNIS h5 transformer model to ggml format +# +# Load the (state_dict) saved model using PyTorch +# Iterate over all variables and write them to a binary file. +# +# For each variable, write the following: +# - Number of dimensions (int) +# - Name length (int) +# - Dimensions (int[n_dims]) +# - Name (char[name_length]) +# - Data (float[n_dims]) +# +# At the start of the ggml file we write the model parameters + +import sys +import struct +import json +import numpy as np +import re + + +import torch +import torch.nn as nn +import torchvision.datasets as dsets +import torchvision.transforms as transforms +from torch.autograd import Variable + +if len(sys.argv) != 2: + print("Usage: convert-h5-to-ggml.py model\n") + sys.exit(1) + +state_dict_file = sys.argv[1] +fname_out = "models/mnist/ggml-model-f32.bin" + +state_dict = torch.load(state_dict_file, map_location=torch.device('cpu')) +#print (model) + +list_vars = state_dict +print (list_vars) + +fout = open(fname_out, "wb") + +fout.write(struct.pack("i", 0x67676d6c)) # magic: ggml in hex + + +for name in list_vars.keys(): + data = list_vars[name].squeeze().numpy() + print("Processing variable: " + name + " with shape: ", data.shape) + n_dims = len(data.shape); + + fout.write(struct.pack("i", n_dims)) + + data = data.astype(np.float32) + for i in range(n_dims): + fout.write(struct.pack("i", data.shape[n_dims - 1 - i])) + + # data + data.tofile(fout) + +fout.close() + +print("Done. Output file: " + fname_out) +print("") diff --git a/ggml_old/examples/mnist/main.cpp b/ggml_old/examples/mnist/main.cpp new file mode 100644 index 0000000..c84eedd --- /dev/null +++ b/ggml_old/examples/mnist/main.cpp @@ -0,0 +1,308 @@ +#include "ggml/ggml.h" + +#include "common.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +// default hparams +struct mnist_hparams { + int32_t n_input = 784; + int32_t n_hidden = 500; + int32_t n_classes = 10; +}; + +struct mnist_model { + mnist_hparams hparams; + + struct ggml_tensor * fc1_weight; + struct ggml_tensor * fc1_bias; + + struct ggml_tensor * fc2_weight; + struct ggml_tensor * fc2_bias; + + struct ggml_context * ctx; +}; + +// load the model's weights from a file +bool mnist_model_load(const std::string & fname, mnist_model & model) { + printf("%s: loading model from '%s'\n", __func__, fname.c_str()); + + auto fin = std::ifstream(fname, std::ios::binary); + if (!fin) { + fprintf(stderr, "%s: failed to open '%s'\n", __func__, fname.c_str()); + return false; + } + + // verify magic + { + uint32_t magic; + fin.read((char *) &magic, sizeof(magic)); + if (magic != 0x67676d6c) { + fprintf(stderr, "%s: invalid model file '%s' (bad magic)\n", __func__, fname.c_str()); + return false; + } + } + + auto & ctx = model.ctx; + + size_t ctx_size = 0; + + { + const auto & hparams = model.hparams; + + const int n_input = hparams.n_input; + const int n_hidden = hparams.n_hidden; + const int n_classes = hparams.n_classes; + + ctx_size += n_input * n_hidden * ggml_type_sizef(GGML_TYPE_F32); // fc1 weight + ctx_size += n_hidden * ggml_type_sizef(GGML_TYPE_F32); // fc1 bias + + ctx_size += n_hidden * n_classes * ggml_type_sizef(GGML_TYPE_F32); // fc2 weight + ctx_size += n_classes * ggml_type_sizef(GGML_TYPE_F32); // fc2 bias + + printf("%s: ggml ctx size = %6.2f MB\n", __func__, ctx_size/(1024.0*1024.0)); + } + + // create the ggml context + { + struct ggml_init_params params = { + .mem_size = ctx_size + 1024*1024, + .mem_buffer = NULL, + .no_alloc = false, + }; + + model.ctx = ggml_init(params); + if (!model.ctx) { + fprintf(stderr, "%s: ggml_init() failed\n", __func__); + return false; + } + } + + // Read FC1 layer 1 + { + // Read dimensions + int32_t n_dims; + fin.read(reinterpret_cast(&n_dims), sizeof(n_dims)); + + { + int32_t ne_weight[2] = { 1, 1 }; + for (int i = 0; i < n_dims; ++i) { + fin.read(reinterpret_cast(&ne_weight[i]), sizeof(ne_weight[i])); + } + + // FC1 dimensions taken from file, eg. 768x500 + model.hparams.n_input = ne_weight[0]; + model.hparams.n_hidden = ne_weight[1]; + + model.fc1_weight = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, model.hparams.n_input, model.hparams.n_hidden); + fin.read(reinterpret_cast(model.fc1_weight->data), ggml_nbytes(model.fc1_weight)); + ggml_set_name(model.fc1_weight, "fc1_weight"); + } + + { + int32_t ne_bias[2] = { 1, 1 }; + for (int i = 0; i < n_dims; ++i) { + fin.read(reinterpret_cast(&ne_bias[i]), sizeof(ne_bias[i])); + } + + model.fc1_bias = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, model.hparams.n_hidden); + fin.read(reinterpret_cast(model.fc1_bias->data), ggml_nbytes(model.fc1_bias)); + ggml_set_name(model.fc1_bias, "fc1_bias"); + } + } + + // Read FC2 layer 2 + { + // Read dimensions + int32_t n_dims; + fin.read(reinterpret_cast(&n_dims), sizeof(n_dims)); + + { + int32_t ne_weight[2] = { 1, 1 }; + for (int i = 0; i < n_dims; ++i) { + fin.read(reinterpret_cast(&ne_weight[i]), sizeof(ne_weight[i])); + } + + // FC1 dimensions taken from file, eg. 10x500 + model.hparams.n_classes = ne_weight[1]; + + model.fc2_weight = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, model.hparams.n_hidden, model.hparams.n_classes); + fin.read(reinterpret_cast(model.fc2_weight->data), ggml_nbytes(model.fc2_weight)); + ggml_set_name(model.fc2_weight, "fc2_weight"); + } + + { + int32_t ne_bias[2] = { 1, 1 }; + for (int i = 0; i < n_dims; ++i) { + fin.read(reinterpret_cast(&ne_bias[i]), sizeof(ne_bias[i])); + } + + model.fc2_bias = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, model.hparams.n_classes); + fin.read(reinterpret_cast(model.fc2_bias->data), ggml_nbytes(model.fc2_bias)); + ggml_set_name(model.fc2_bias, "fc2_bias"); + } + } + + fin.close(); + + return true; +} + +// evaluate the model +// +// - model: the model +// - n_threads: number of threads to use +// - digit: 784 pixel values +// +// returns 0 - 9 prediction +int mnist_eval( + const mnist_model & model, + const int n_threads, + std::vector digit + ) { + + const auto & hparams = model.hparams; + + static size_t buf_size = hparams.n_input * sizeof(float) * 4; + static void * buf = malloc(buf_size); + + struct ggml_init_params params = { + .mem_size = buf_size, + .mem_buffer = buf, + }; + + struct ggml_context * ctx0 = ggml_init(params); + struct ggml_cgraph gf = {}; + gf.n_threads = n_threads; + + struct ggml_tensor * input = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, hparams.n_input); + memcpy(input->data, digit.data(), ggml_nbytes(input)); + ggml_set_name(input, "input"); + + // fc1 MLP = Ax + b + ggml_tensor * fc1 = ggml_add(ctx0, ggml_mul_mat(ctx0, model.fc1_weight, input), model.fc1_bias); + ggml_tensor * fc2 = ggml_add(ctx0, ggml_mul_mat(ctx0, model.fc2_weight, ggml_relu(ctx0, fc1)), model.fc2_bias); + + // soft max + ggml_tensor * probs = ggml_soft_max(ctx0, fc2); + + // run the computation + ggml_build_forward_expand(&gf, probs); + ggml_graph_compute (ctx0, &gf); + + //ggml_graph_print (&gf); + ggml_graph_dump_dot(&gf, NULL, "mnist.dot"); + + const float * probs_data = ggml_get_data_f32(probs); + + const int prediction = std::max_element(probs_data, probs_data + 10) - probs_data; + + ggml_free(ctx0); + + return prediction; +} + +#ifdef __cplusplus +extern "C" { +#endif + +int wasm_eval(uint8_t *digitPtr) +{ + mnist_model model; + if (!mnist_model_load("models/mnist/ggml-model-f32.bin", model)) { + fprintf(stderr, "error loading model\n"); + return -1; + } + std::vector digit(digitPtr, digitPtr + 784); + int result = mnist_eval(model, 1, digit); + ggml_free(model.ctx); + return result; +} + +int wasm_random_digit(char *digitPtr) +{ + auto fin = std::ifstream("models/mnist/t10k-images.idx3-ubyte", std::ios::binary); + if (!fin) { + fprintf(stderr, "failed to open digits file\n"); + return 0; + } + srand(time(NULL)); + // Seek to a random digit: 16-byte header + 28*28 * (random 0 - 10000) + fin.seekg(16 + 784 * (rand() % 10000)); + fin.read(digitPtr, 784); + return 1; +} + +#ifdef __cplusplus +} +#endif + +int main(int argc, char ** argv) { + srand(time(NULL)); + ggml_time_init(); + + if (argc != 3) { + fprintf(stderr, "Usage: %s models/mnist/ggml-model-f32.bin models/mnist/t10k-images.idx3-ubyte\n", argv[0]); + exit(0); + } + + uint8_t buf[784]; + mnist_model model; + std::vector digit; + + // load the model + { + const int64_t t_start_us = ggml_time_us(); + + if (!mnist_model_load(argv[1], model)) { + fprintf(stderr, "%s: failed to load model from '%s'\n", __func__, "models/ggml-model-f32.bin"); + return 1; + } + + const int64_t t_load_us = ggml_time_us() - t_start_us; + + fprintf(stdout, "%s: loaded model in %8.2f ms\n", __func__, t_load_us / 1000.0f); + } + + // read a random digit from the test set + { + std::ifstream fin(argv[2], std::ios::binary); + if (!fin) { + fprintf(stderr, "%s: failed to open '%s'\n", __func__, argv[2]); + return 1; + } + + // seek to a random digit: 16-byte header + 28*28 * (random 0 - 10000) + fin.seekg(16 + 784 * (rand() % 10000)); + fin.read((char *) &buf, sizeof(buf)); + } + + // render the digit in ASCII + { + digit.resize(sizeof(buf)); + + for (int row = 0; row < 28; row++) { + for (int col = 0; col < 28; col++) { + fprintf(stderr, "%c ", (float)buf[row*28 + col] > 230 ? '*' : '_'); + digit[row*28 + col] = ((float)buf[row*28 + col]); + } + + fprintf(stderr, "\n"); + } + + fprintf(stderr, "\n"); + } + + fprintf(stdout, "%s: predicted digit is %d\n", __func__, mnist_eval(model, 1, digit)); + + ggml_free(model.ctx); + + return 0; +} diff --git a/ggml_old/examples/mnist/models/mnist/mnist_model.state_dict b/ggml_old/examples/mnist/models/mnist/mnist_model.state_dict new file mode 100644 index 0000000000000000000000000000000000000000..dfb609b814a311c8279dbfb45e71367cedf9b409 GIT binary patch literal 1591571 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�xF2ZJwT#1Eqj|(m%+S&HV5m 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�C1QpKJ;W~%8 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%0D4lNtCp8l%~($W{C>vpU|niy!irZypLt_El%*` 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 Mo2csF(U|>QUE4POdpg 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 h}d*@`XGn5T;( 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≀ilSZ?WUN2^mRl!E) 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

AX4zCfG^B-xueEXZ&B$ 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

n{BIxgvPwcZ#eFa={nbS@?C?EdK3TELJXZpb<{p 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

M zT*e)7#{AfbGpzsFMCb_(CFkZ#@N4-dC>!?rDz=Iwev4uYJ+72ep$B>Me z%Cl9H@UZd=<}B>ScIwoU0*(17?`*?*?bEQL)t;{nOD2W;Vkn+3^;!Q zU2QG-^3lP(%~KT}PnP1U@OZGD@&{@!6v4fTnHU!Cg4vtYXl+mlOsLc4cXd0^Uf}Bv zEwg9U-^51a!1`S~1dYBEnIG9HkrSry6 zFT6RjTx2)zg(xEriOT0(`u#{0Z5#Oz;)|A%{!i^>vb;92w3{h#jH}?|HeFgXeH)PE zSUjb120sL)Olju&*JLeo8T`%mC2RHkyXg=cWD-c|9<=Yo4p z+nJPwf5D!DNLCtL&nlxglD#LA_;y1j-mf)4e5YL&cj!zZsbQUBv0fR8KYNj7 z3e2v-XX9W{=1WX#^unO%3hI^_A>Lo7%}b)zasBi4yy$)@f4*A8ohC~0n_uL4r{{R_ z#?P_rLqe6fZ4oD~OC^P~@pR%gRtmP=xGiv9N8#gcM|_ul1fy^0V%dd@c*iK5%VzlS z_M5kG!4PFWowwrX31hJDnvjQKvvKcKL9;6C`(*a2;_087qQ@3LiN5s*QtNh0ysF_U z`K~VmrN*k_b$9ZauS5_z*c!Iudl?Q{x-*!+REc{<~`_#L9 zlBsu%+QPimhx5r=Cs1B~ClkIh_{1iMjC@uIP6v$P+P;M#xn?AlzssTD>K&AXjG@&p zWrcUvI1yPeiR6DjDjM*#kLhZ@$DK33!Ie`d;ebsG=|1BPvuDgg*Zzsbf$7lOAAQMj z9cx^wRE9kQ8{qKI`>b`!G`vw^kMyT5F4!^y-}f6b^EFcRV74;dZ<7Z8l(GoURR zoe-YeBK9rGVb?r1Gv|3j@Q}Ma{~h`Wd9@B0+}efz9zSIkf^TiJ_C55hu!iUfb*O)^ z6^F+~;fC$$*zdkY^j=~r8kID&J^mHoVs#2Wxtt{Lo}LjupJl{~9fm-)JcB7sw?*DR zt?_GJIAq3a)8>I+hL{eu_Y(RP5bK^*RF;c#6|aH34EhU=2iXc;WVF8P7{X-x($bx#Ec z_c>JSObh6Je8)`gB?+0eI50iiOu`gfSxcD>dW^5f

>4HE1SO%Q(XOedopR<>JT= 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

HgRP^1xyT?*F`yS89dxQXgHO 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 z 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�t4ZQmA7n3o&b#e!L#gG z4Ok+O@TMK*2|6kNE1qS?{--d(BW$O4$wNG(9g~3Rk<;39ERp!N!dN!%-c?*r*w_v58t8_U^28HPJkdo_* zSc5-}w`BPKRsxix~4*u)lR;b8UKLEq#*`H17R#fC$;_8^(g&)V6*W=jPP2HyrSYMgu^%=44;aCTlb zsU-;E8yX$;9K<&Dl_2l zNu2sMf1}>USRdgkP-W`Y`#srm{uQ6ms!Xgbt($vJn zWRhE@c}pxn64FX^7z5>lLZYH@!To9gVd z;4$)8?LSsy@ong1#fGN91R0B6LC(GBX|SG02)md1OTWaC%jagRPj%0=Fxqb_QiJl- zmp>sne?frK+2d#UFs{XV&7OV#YWlYmi`$CYPpC){5+gFnx5?R(sMPPRO#wrMWU9X}&)VY{p+?q856%x%jbBs5VFc()okxyzEcVjL zE3$^V`{)D`m5|-i=1~7lq8e9Aes+lF@;ZlJtRnud46$C!4qY*lnNt$q4ngE zwjV^bVZS|~`2(NVKNnKkD1$Z~u3x(r8inyheps=2rV@Vsefr`o-T8=ehELDfDZWPa zu;7S{bF$x(7S%+>Ux?FU>nhhRhNr4s#i>;pk!MAt8Pa`a8dgp*5b_RAjr-|~sZ--( zb7>~Kuo!A~`o5NTS^(lAq!Q&;DVHzP!nyplUVY_^pJ`@>&=tuRM(P8W^|my+)}o@I9bV=$+xK0>=mLpDns{dcjUj)z6kO+>bGaj;CG<7v*n=FT~? z?=)-v&!pcV366K58^%MNa#i>ocIx0m=oo&|UpIU~{PYjP=D9e*_p9^nn_+xbtHgVx ziW`eoxQ4OzhM$bFFb>u<*BPq@JEFq#*Vd1oDIr$TVC~8i-wg@V@$o zhbLm?`z~FA)0D{iJXZN+s($}6Z`9@?;JU-T3si!JJ9T^54E{3(rN<__4#|^N{f=^H zvaB%%>Km2FnsO^NKR4Q_yowst@QM}vUX*~a zpqB=GQBo(Lq3nDS!UZJ-UcW+^i8oP6_s5b$QfDZ$Rqa8_N?Q-x3`KjIYd=!n6I`Mh z%0^A}eeP*7FC&zFx+qPVDi}iE^_M}K;lb2!YY>qZT8p-h<|(NqO|edNf#IIb-_@Ue z(Pjq<)sJZJrblf>GvEuhosX5DdY6|#&qekU@bC?sH*fdyHzmFP9S`ZBfK$^w1jFBG zJ8V_6X3f61tMC=B@=J13=QhzAX!Uj}zeUZl`Vu>0%v4G5!Hfp8A?I;OS!%@LQ4%cy z|0d?k&?|0ywiYXQ&F7`SZe_RTvql(A6TV;9a05M#XP=MxH6- zxjvs)+#RU)hZ)|UU(u)>;`-5c3)F%cm7X1yPWH(P>Gd@73F?}aJIfB1${=I&A>>aK z+bbE(AV1K-64(z?T|vhg@70#D$*{7y8WupV*?!jL)TM7;pT|p9i4~85ok-ijKCBW9 zjZ#u}X6OF4jBMbNp)n_NbM_BJbICgr47Gm+q!+Tx-?OMwBq?1Knfx0hFU(%6GYmJ9 znFc9di#$s36J-WJl3X=N+cht&D;aFlfBFS|f7h$f3+vf3JMz&I?W3{akofU{{kioQ z|3d2nU^>{U%Z#fDz$Qs9qCP~v;o6mf5bW@!Vw)u|!Ff1}zEP*bN5J+F&Qo_7s*x19 z+m5ZsZiG<%hrgH4u*c^L2IyXVnUeSHb|e^1=!|cLd?oRnj~tT})B^G%!REv6wDe;J zD^+djd@VQ_tPm;`Y>$u1)nJsX!L!#d^RR2~JT{7&u4DXx69yAR+BjhI6}&;~oU$vd(hkwK10eaE zSossqKHDZK>Y?4T_^N%C+I}gE3}g>6&TxSG?7Ayku%&CiqAjFyuzj}0 z75o=0IpXZ=r;|E0qk;%S?aVe7#iF7QVj7RlWQ=C!TK(os-@y35s#Tp}-u7+% z8)?Cw^w>@<+ub@_CAOt2LFzIS^G^`#gW3fJu^Iuk z7y=>adkWYvO`zIKu>dvNKpCbYE@w!-E=F@G$Be}`0kY^orWTSDh^Xg42TOIS&VLaL z3NjVdWk?naQBWoz018yiJp&=FIIO<`rWddXvgAR5feb=P)gQe{g8bQF%T4<8e!}#+ zvVMeW`fz_}fUPL}?m+KL(xC-0aanyua29lI&!ZJ&k7ePV1aPa8FiL$JH$AU}R^Y*{ z#u0unByxg>&`jm=NcBqt6HG*(1(#(gQJ<9Y`6f3@GPKfvk+L3j7O7om zw(ccWwf$zU7F+>-^?#NZ;-dH=>1Qz=QyL*q%iS-jf*hN;kM}^nyolkWknL_~j zI8%aQ{1|3%RKA5D3S|aEK^K&(jZgsW*?CQj4xwqeN_t$DqNKO7V`#RT_XJrdEh;cN z2rFl#ki^qJQ&gn&oM{dze>oQB!@VP&xYra8BDsi3xV`n{_H7I~)2m>ID3W9Y7s8H0 zbSgldyTTqzux=omglm0&tw=^?EzM3>WmeoJ3SNcsRx6WrL>I?PQa|24s-=?gj%_x8DrR zz0DKXIX4DE)rf(8MqEFe-c=O?t1>r*+~pwzyAmGuL>}+Jc`s1{gb-}3c=_BV=pp;g ze)Bx(ktQ%BxRtD3)nIliIXv!ZtnwITUj4^|0}NWcLaQ;Bf4nS>cc9B=rN#1;+qfqg z(lKFGZ7n`ol-IYoTEtb;;#g|<^}ldVHCAHL`=MSQXt5kM=pM#t4tA(Sm*bA>)xe93 z%;9{o%)}?Dve&1kvfnlX#4;^@ZL7tI)Xwz!q6ql+YQvwpr%JGjTSGs@eg{h2WF&+f-r-CX@NeiW2`%rKs%0tk^~M?e7WLIXm!y`l?9!+?MfD z7gYrQ*mkW)a83t_xOR=MgV-k;z8Zh64g3}w@33t|2b!g{#&7;z;wE*Bmo5Jz*m))f zm7MS=4ZHjGJIj9n0NjvmWSx+&%BZzC!@2}~6qzuW{j9(-isbT65@z5Jm><&t5>um~ zTcPqd4DffuBSHsAYG>p#1ng3JY&`{Md+%p4a&ZJ*r$7cG#he6o{wG9nR}$CjBt;rB#!lg}G-{x*D*M|{n5>{GMM z2p^{SnY2i3z_Ue>$&Yc~&KS90!?s>G({Kj<#H4wme4VkF{f)5bH{>8W@4-qe+5$sekW<>*CMyw67+nMGSV4nr{X(3o zQq7^A%D!;f2x{ETbE`S$E%;z-yIl_V9kv6+$}4Ov480ZF%*_~{C1E>2VK$0|!uEX1 zNsHyE^04gM2}9rIfz5O2^D;Ph8k3h@WvnDSwtW+2$GzwgG)h$DeF>5T{F6lO=&|X9 z%(qQffK1S-J2Xh}j?k5Z$nN z8>S*>ID39IN}%t}O%8V*ZaXt$&d^t{CAVh+w!8)>)EW2$;QPCjq{(*B_a@#A(#CYs zgBa#%ag~?73Fj#XXD}qf`}S?H`_ZKcE`5{tYq_>$~G@e%lcdIZv3L&>uxCN z{UjYp_2#BPxhyraVwpYd6dhX$2nv*B(;S!yvV-c7jXH2+!(bdp9SH&ziPyjYY5*fd z5{x41U{rug*#6K#ESF6Rf&lx7lc}aAk{W6;n{sMK#d;72-87FT%9pV7B=4p1Y{oo(fp;AY1@*^Bsfr}2R zS5Go=UvKYz@O8P-gT>t7&;*iEg^C71J(T-AR0Hj^rB&^haMm{(r5ks`nTKCc=>ost zow`uJc=c+pQw_26GzeJh-kGZ!8_zyiI?E+X>F9`KuT>K#BOB%4_x^l%h zZ1kRLl7h4Uc*}6K4GSH41_0M>jvY`4Z57hOnB|GRf7G$Zgmv+B(LS;v3!25MD}!&Q z1P9l5v*-6?*pq?=^0n=i1>4T!>vO-SFXcyLxTghGPsCXRypXrQ|5=#WcZK^r1YtZ% zk0%fuXR-Yr1Rpkjv~FiEAH=tqH$7p#GUKoN|Amj}&p$XLxR06ip;3jqW9FO-7rA0$ zHT__RE)r*EWffMqYIW^wyxvf*nTij28w|bvg0aa4!wJ%LOb#{=V6Z|k?wK^NvHq27 zuwB8^EKRqrF_7u7ON&R3yL1VT!wza{Veq0DN2g6{9V5rPbFqV3!9hdj1fN8j8qn$JoqPtP-loSq@~OX zq2pjRSPC_U{1JRz)|-cD{zk5Fcl`vZzi94&CrLZloo#sM7OY&H?e(tp&| zXDXaNHdoTg0Fwv8$)o-ol;h%C2ce>C5-#1X4U}?@BvKbm89&5>?k2sH1 zty3sD-|ppuB*c$5Qn`x9>G=8$^WD#@^aOBwL0)EXA7n*Glk z{*VH^QIO14mZOFXSWlO2*by+3>b9z^axZ}ii%#_r!; z-1~wL@)(%*FILRaUOTKN00&U!B`mKrQLHS9=F;lUe1c!cMC)s!iVz0=We$&&3B{3& zCPF>&BfY&;ekI0yeadU9i+ocbzKug8AeU7%XXf9YcX39{!&tb7DYZbjd#t|GrTAR(lT=QHd1D>&u*(C>fX*3*ussj# zbc}-$h+`h+fgR2R`_>tYmCaGr)noFo`LAG39f@ek+1KW09M3*J=RKju3Cn%~a-R<-!H*V}V}vwXVnJ@u=iN#K5vXM zUy=*}B*ewsISvy_lEWaaTuE}^Kb~p47UN&Fwty`!aH5Bzq(&VV#sXA5wOR^)GK2kW zcC?$lSFbCXd7RZ7?1<3>;WuqQsh}ZE(0M6D=gB1x7Tfl^DqwL=x3D$j!SO5C8ahmW zmB)ur^Mi`A!RZa_b13hLi4`2Yj=UkYD?fTPwEraK(r{4}Y?TOkNc&mzIOD#0k4~N3 z_>u_GDUNA(zGi=smdaLT)aw@a^irjJE>nY~I^6RP%;TZ|IBWy-mD0XX^pL*OxsJvOpaM+N}$I-ZXjZ#B9UWDKTKqe9cwzS>aU(%Vdbs}Qw+n1LHx^>Iiu z0|41K%ory2o*~**j=i&9E#KNZAg#O|3UT51Wy_aA&o}fc3s?{BzR|yZ%ybz#gCTwN zU%J?_O%+Ow>WF_iw$$G0Fsz?n?IloU@ZiOZ2HU%(5b~UU8(Oij22$&HG)(R^%#YkX?j@t~*?ZZ>@e4U5PJ5Fz?RO%RB-LbmE+TPFG`40qIRAlx>gSM~ zI(w6l_>Jrv8yeagR_4T*GAEVbFysTL@W#i*VM5|I^9XR$ z;S4x6$iADUrcHx(FF7G87BDRf>sLRLL+Bk?v)kDgnI-^imjhHafW+nA^j9_6NI|~$R=^ofOiwG9)aQ)71oFKTN>@irko4UbS&DO0|9}Ys zH|@VMm{jv8LKPR};2X9_+xw3ntI>#{|6X?g)HL|QKJ>OnLQh?#PzUVGpMQRY@iyBd zNbR6265|AWLMc{!V{j^d;Mh&}K`LGX-vW6UiE)4&LFm;~=l#QAn~W7sc4&AW*l|1N zGk%^Q_2u`#j=|iQu*%4HSeRrFG?QGze-TJ5{2G+86RlYu}j^R}wJd;19 z{v$^G0%tHwn$45LVLKAq?)uGE`-FjM2oz&Gg7gO<-&S=~`#=RpuIL;l6?Na7Z7_$!4aH@k)y^UjG{} zGB}v!vdL5aOc&mSri7@2k~4k+-L#9-A+UOxX820jCjLvSvY|C_z{c;}FJ8Xx^{3sBZU zbmu%9Kn3(Z1UVE9WCDWJ3?Tpm9iV@>*o#DO+SJ#2Q?c2p4UGpvcD7+<2A!{b`B%#i zicA|RYpSVAb7IJiIflA;EfY@emKB8tUq743Ya*cVPA(Z>=yBJoi=HUty?mTZV?Mn{ zXXee7CA2Yg2SHe+wrNDu1(A{aH%G>$eNj+E48HVgvfAZB*hJpkxbd?WIp`T;O0K|Z{_^~Gq(^_qM_{JVO7yCd zGP`a$Sea^#0JAD^%t)@o^A5+GC_7nQhF+n_&bUz(8pC2{d0eQ_?=C!y@xqdy!QPS5 z#Dh|>5<{Vqy=NWh-CHP`U?mFG82y_zo|VEKm(m>LuVEPm!7)+yqOveIF^Vo6SCsqv zdx2x0D|Gt06;y0sWh!{#ilW7BpneY&yj1;7egdccoa<`H)$3`T*4Edz_B?uY%Zb(; z1bLwMhyKr+Am($ejvZ{@h&KYRPqVX{P{$<-EKL?>fR3}amPC;|xH7IzNLy3z`dO2t#CIg# z;=4R#`?M-1_+Hl>Q#X6EmlWlQ_AGXQAlq}P~!Ec9)W$pWr#C_MS zdiD2*XWDmKC^b4-`+%HnX?kaft{YC0KgYApGzNT5{EmpSrfCFBuu*Na@}80 zgK;`otJIiZ_|yoidb7rq8pNd+4ATlLuAMscNsj_r@LLNStqcsgbKPPEVYusi6BCGF zLf#id2J3Z&Y?5^Qt1uk(?(h{vWs^v3L&FDub^D!=4|$Qvy-LV=eRR>3=|rVOl2%I; zYJ3qG?s#1eq46*{QACbazelosrI1g}EhKB86r#K3@~;v`4YsG-%~bFhgq|iG7W_L2Rmwd&;`TSCywA0{ef+o ziSO0by=j+YI9VgUPQiDz5pEN28#zd&J;CEPQ>qiy)oUSG#2*(RVk++m5N;_z^%kgs z_7eSGP{3fQKo3tQ3lHxim|1Uz?Dd>sya@ntoA2y1u#iNY8^nGX!Gnf{yHk6r6fIGr()b2F z6Bo^y^BUJNQ*hjh1f#|S*QK6}Gv7pzgwXAU7cTx2$e9d=IwX+u`pdS!PC|ZRG1MW+ z+;JW@pXV`j*=Rp_Kel0wf1j>7Dh%;$;e1*QVA&3}9`q?8M=VW_s*vk)#Ku5$A9LCk zL$OX4%Ta*EIaHSrV3#;$hS^J8a~PH*;V1*AYGOy&(b)<65O&;ojdNr%fJIpxPkBtr zk#=PATK@rDYgb@7r)0o{Xr}=*4;YiQ&GcVgN_@xqHfap&Z_Uc z=1|j)oeF#kOb)Q4YSZ78SOjz=Ieu5b?mJ79r~XH<|CzKnR*WDIe5Rgr|F#4IW*N1Y z>T5zKuD*e)CP~55{NL9U~*0Tgq%mcZ32RYbkDlPptkm!DT_^}J0TXU8UM#fnP>-Lma_i#7OBXNR zQ8M0Q^XIcX<;ac>T6cH336UvG9kt|*18oafx*sVWEXHRJ_xP7(F-wb5-sdo5$7A2% zb57r~L754TP`c8e_hWJcGOzYF8IJJ&5npg_J>o+* zE_Q?Q>gL+yr!n4TKYFFTA*a`VO0qhhR;l|>Avk@~t2~z25yF87iW0G-8H-RmI%J{X zN9(?@CDp4dV5{eJb!^P=uAX!D5_mm(f?cRdye8u;8`fjiWj}c8$6|CBuv2W>>-Gzd)!5+idVkmo+5q&oRu1g6?1-#cqvkCHSLk z@kuZjb(fexRk3IgoPG3;#0G}^phzCd$5DHo#u@v>64ad#oF%^eO!s@TI-B&7`qr$Z}Y8^Yu3M`mD?9Bmobup)Y&y>nrV8wd>m58OjTCeH(BtEH_fX#ZKCtxVK;Lc+Ojv5`^{Rvsm_CX-@I?-=vvD3eP z78TAJHhiMJ-}5a`YlR95kAK=wRX31~;B1~V|CJJ$=UkhFCG}$*T=a%Y*fu8&7P)V6 z!v3b6Z?FqHxJ11nK1WQx@LyFAc3xBu`(3h|9Pr+qb4T~d+{!Ck9F(S0spM$~i~sYo zbGk!x(*P@Skve@!lvsT4w=McP^)Sg3HR?U*BFrheDmE*7D_OA_ zO4@}frQK(XSjBHHoH_a#byg9IaEQj<;Z@v5T=o3j*N9iZiwwJdgActx#a+bSFR zDlDbrw6N!~c&@B^Fc7}?%SUrDY)Bx453}&SF106|1k=L;RQfiKYue_78l8y2$~QIS zTu8UsEu~2I&p&@!I?{&u>`mO(fHpVAVCS>ow&3glAuR@5;t@V%(Bic+EGZOa20smB z$KKIf_*Z#b9HI9yc9{Qx&}N)e&2TSX&*Gt?$l#me)S3n@UZ>$$QDpM{_d9iIm@5B^ zM3uWg4RMOD4J?j#`UZXlV?@2>hV5ZVZ>auu7B#wnSsziT^RSfrav?c33fA_okwfSz zY$)o`LhO*4XKYD)53T9H1I!Y4ime}Hfa|X@tq>Xu*vYr#X}JR!ELE>%`;LLVhA~qb z8J|}Ox%%6osE!iQSd9Qakl z{jX%NEQzOQOtfLJbB5RNbHqC15Jzm8GSL~!W2498irCp>x@kp@nY2g@7WQ&v@es$K zChVIXSBX_+>CX0#kqIy3_unz)lpxNzgI#r6a=HvNDUaNR;E{|bPo8%*;sq90`!ROJ z8sqd@mL^XX3U$7Byynx%&34sw%ve|Kj4i-oH;U!v40i7A$piDgwGEFG=?PX%&UT+e1IC1S@uz?5RS{r;!g;FU+3@M=B$Y4Pbpz~HlXh@zpH~^%D%*Tp|1Cw364c7`5jlQv&Yo@>6bN8Ahg)o@=$;t50vSV+{#W zTQR41+p%sWSbft;uuhpzw8qcrZ2iG7%^O9K)f#i!_8S{Y$Y%y7e#lOe%g_dWsaoK$ zQzU0gcz5RA{C)2s zy;sH7`q08q5wkp?zl#+o>Gc>l99f7E+Y81}0Bom0i&wxLD_ibi(wC&>Vpf7*5kYh|iVN?wLFjX>*Hp6gO}>F?N(>|u^6-Z^c$QC5 z7B_$`S%zjb0z3+s^QI zaLVK#R8nk&3nvQsYY?HNjahjs9JaVoY#kf5jqPRO{1-#M1BVY69P&{=vmEU4 zbF8~V?z=$2r5%)mztM+jlpG7ESSM%9d~kRbzx!bKEiW^;ui;_Y>CkCKe<%wKMgF>w z{#X|BGJ~T(va9yTg~A2bVI@;miv;XT$eXOM2Ov0Z)p2hoT9z>mWzrw8H8fsHpk?XM zfbfUoQ!mRifV#sODMKahRM9ELc_5_n@T1RvC{6`um%sMjdljMWAPsb7L)P5BeP8yn z_m-1GYo@Ju2D&Ko#63e*=vrc9ag_9)o=;xF*P;xo><*g!UMJj*O2 zi&>VV!^k*}XPFs!bmqAg$j7QaRdoHYHpRQ{1=#acZt}9Uh(Cr53E>aAp^Ci{&Myw2 zckTl+STrnPbcOh2jTAAH_sn$0dXP6vJ&~9f!~Re>H2jW#ZL0x7mDJ@M_``;eYeGeK4QaLqYaOuGHUj?lZ2=@%xxSbAJ%TS0iQ$5%Vqq?({`82Qox zf-}?}KiT(*_PkIXkNm7=y`SJQc~|#aV7K{ORCV%s4PJap$yfp%hcDdWA8Zvb((>D@ z52yQY)4QQqzmzUJUp}_0>V52t)rvZIGgjW|TIj*a;#-Jhpc%F)|MO%qx4pOYUpJqY zjj%Sg5xK?-HSU!hsJzUS_UU+EdGG?N5p5pB&6>Xod%73co&7p1Gw5BUVbv&yJ@2oP zZ~h|73mU52bqI7x^^>NbQ+sL|w@Nc--n%Zl@rBE2O94V{px^s&+y=(?GcXn!vPBl9 z(Y?Gb_9{CX<8V)|)YgFsCYPWB-3*ilvY3A|UhqB6RU7uu7dC^zitoeQPu;`kR1xg7 z%3wtTaZulzt8%o#R>0n|?B2)s>w6YOFKEMR><+C6c7&Z}DWdQ3pVpJ{17Vjj)r=)Q zEzO18gr?pYTV4CG3u`Y+(d!)EY4z{=;Ap1JFdru}%>*B2Yha4=} z2L?hjv9>2)^>==RM)fc)le$7V*b#Q!zK{QeBP?+8OrZ~=KfMPuESzC`5xTv*^6t?Y zGiFHMIc(g|DD7TlS`=*mImF&VavKn?l_?%9R-^O72D~}vM~)l`+s>#fyO_d*AJ8kb@zUs{Y2o?AlU(?r;!VTjZxTqeE_S2PZ*pJqOEy4O3ag4`%tS6odTP7Lzywzj; znxUp$J@(wx1-o%HpA>{@G|{jDk00n1Zw%arkMUPFp<#u;_mE|HEoxIa8^^NSlg*khH7bg zf|bGWS9(GhmNkrPYo}hx(y~E23G4&jlg7<}m`Iomfz2MbLtLTyK!Z)C)qIFiekK^` z7U~1%dpS-HY6Yis?QnYHP~%uEjwFL%flt=Z8FY zLGP~%v-_c&nW?oj7XPxeV=Ytg%n?4v9J5?cc$qE z>>|6k~*v@j0vN#rgx9;8TLcV)Mdw;_;T^Ge#AC1@;q&{kEDd z+r|CY-&RLxmD}$LV9CSq#!>F?o4zkzi4d@jiV`xnzAs4UE6M;4tedHv)$2hW6@?!T zuWO!oSgG7^D98-<4@GHf(86^XWaJp16hosiyg(uB;al$- z+ATZh;>C;iF~1FnZrPgp^NUoL8J=v{dI~!S1fg%3S9@6{f^CoWz<-)`N7!d!2kUEK zx)So8zkm5M$jARUPH)Cys96FXhm5$nA9gOborK!|C;i?k%97%o8D)x=88_$8-E-#j zwjs}i;78Xm$9(>XQ%5*~KVl`(0V@;ej1?T@j6oyO(IV z7LR!@a@i2-R~;)hpSYHbb<>v;$qm>|HX6=(5Fwbym`X=bTu+wEei5UB;FQ$menMQ& z+5e{!C^~q@jvc#g{S@xC2d&(bkd?IcDmU!{A@}ynE|Sa#i{6Dh^xb{>;2WX+=}XxW zJI2=3_$7x8Ia~|=5q8$9<9j_=%wRm(hFGs0T3#m{3XY;Onb-8 z9$_EnB&K%68o>rKQ9tkkh8sXWXE>gmnj?FzRh{xtTosG68&1Y@Jj)Evs==}x9q8;5 z9l6P=a?FM;9Q*7r0fB+^C?*&D4d8MepvhGb{&1KI1qOma5I~|`pr#uDkWOj>>o0`@ zES9DIja3k<%g~UH0ET5r=eQ6==42Jg(D)CQA`q4Uow)tMOC+Paa#2S6Xgjc}-$T#F4r_bE*1L zSXg?;PgAn`GeU;^GG_eB=?wpDklu5HzWw&wva;@#9?;uQ`<@cMu4F5Vub}Vg+`fHq z-0OW?&qa&$jCXyYZdCu2G2x#v@6ttO%G^-SGE$bT0_V#Lm3bX5z7!Jli2Ds0hO^+@ zDn$u2SmwI&QVQfjIqAj74DwGke@fdqVEaiMgsQ~Tyh8_+pB+PO zPEhRDdlCqyoCMA}GEDuUN#W;0=Mr%DnKEaN@B~-+vPa3TMZf%hKXH-F1lHE)h1<}` zy9c|l6Ota?iiOaEZ6uk>N&1~%U*!-~U>mvLa8LNEKl-)g0pQ*x*<)-%UEp~r+zCPj zcdvp^Saa!JFZnQI>Y-n+tm!PXuJP8;MF$%duP4L)+hyZFbac6KTGCSa7T!ZoB*r zdZ*EM$i0RB1?;&Uq2QdG@P<|Rd8$;gB)nf9pk|}bKW6F{x`&V8y>y1suh!Qk)`eoj zEtaGH4fePwr)@FK;7j$f#qyMU8jc^zix@6QKE9x8OoX>CyqcxK{eYspFGb*8zDZHG zI$*V-Fr~jTgsMitBE`m1yTJQ!k2Z)<_wev3ADzvC_k2WQ5o-wX(2#APqlDb5u2Yl~ zXOBp}i=vySmhb)3$&)jrYhK3$(Iq-0hOe5c1@T=t`J->M0b%%${I-JmorJ4(^#syY z#7bnJe?gTc7;Bp?4e!5(s7%2`vec65)XSAsq8kzWKP}Da#2%lHdZm(hNhVaZJ|V*_ zCmdBMjJPDD3l0y}_h*YKqO#^&wC)**U zV)5tOOCVHe7wqR$N`^d_{XdjI{qgHu_GcOms#37w)(nENwof}7!Alu;uM>R#$mf#T z74Rc?5e+1jxPO24PIMnt|)*&<)?=?u^HAXCIj$!}i1NRm&DUWGcAb&tztvva{yX155^2xtICEFi zLiX1WLhohb9WP5vKvXpgUz5C+RONFxr?uP)y_JidDlc9kI6?b#*loYUY4*l}u6AD1 z%G9B*isM{T1QTA%sA^SOEPR}k+KnA5`5I&TimbUTm6jUDOLTwqGKkL1b(@lbQ!ji` zrQ6pyr;!C#$b$GLVP%C{`z(!dKMO<0@x$OJDW7PPO5EggG&BKX(dzqNgF=NB-E#nY zIQ{d_KR*u5<{QGhdjU%4H+EOc*bJB#6|ugG#;{=(7)A zAqf1Fn#8) z;w9>1!P)I0arD#C^8Tqy(>MT_y{;XaXf|0TVte!lsPseIRB5zF|M?BT82W(uFrTEp zQL^#uGq9kE2Y@RdLEpM0?veyUEsm1N#cdHR`?T4?GL91Tk^LRVNibDZ@saUEv}?SA z^TZq<`Bw<(Z1<)~z^5Yy-$6(0Q=C!T$!FCQ?AO#u>;JF3_}i;e4}AT0H(4rPCWjBx zme(J`kPX!>HK3@QXUPGBucddAnW{4HBcYBM?9n&C5v)RNog#*AferlfI73daZ<9=x zW$9{}PCMM7BB9D?R#l@td+%S_sOT25#|D+|bqUHOJB&n$ErF6Vp%wd}d&gw*n5ikL z4qk-GLJvRmbpH|dFcUs!9=k}+Q zs(S`G48PfeeD!-HS>x4Wor|os{hSdRg6TaaYsJ*7>3kz1WJ{kmwmd%<{M!;}_~D0i z;K^Q(Db@FAL@t~&0wHJ{U#A*%K^5zN4zu8>Y|X?_H~^IdJ(RkjyECxd{svU-IwZk` zFVK;}xAxMJFsp+1Ax#0!{i`v(@x6dr1)m>1=vZ#<4peMvLhgkrOrxf7uxbZ??nLE2 zI?N9`cG_|6xRH#*hBxNA_Mw^}940*URK?G5Y=29<1wL<2Q60akA|O{QO>{c4s*ZMKJf_g76)0 z_rS>eDWP1zM++5O9@Ag?L*pa)2XY-@CyDi=jQIe32K=BxK=9+>xxTzy<-8g+=rkuR z(_TX{b$gMECM^<6osX%Ul$H9LsIKx}WrH#jq-~GlpIjl>VZX*<>T7aYM|%|vA>R|2 zT)mh=HhD=RbZ^k00IKqJuH#xZgn}@-oy#D{jQTRBzsF3uD`EXeP!)|lQV!RlwI z@eG!(;JKLC5%maxp-sux4{AdfAHzL7QNW%SuMd-;VS%Nmq#;!9AilQFmPosor%+OQ z_2nBI<}{b)>m-{;o0{;rBnso*)cPzu zVI+Ip9Fl5&r3|Og6d^dYJ#ycKlf`l=8HPzHeck$J+biE49zD{s7mmL-oLN`B-5)M% zBz&Ru{oRsPFuRqLgbrLaVHI-g=Je_-jA&tLix`RV-Xf4icG=}3JN;l~{1MbKM4nb%c zEb|VzLzhphcZ5T!z6-~Pg-AYth59UA+NV(^dw&(@;h)Sj{x*Glad`&Xo=`3&+?ReF zVb0e#s7<_mULJV*PWcT!!yhQ)Bwl|~)`7G}Y?=hCo2B-IER@WJL#Uma#wtnQNDOt+ zLrF!%(9Q#^n=-}FvR(U0)1s>R{3@(@rP3N5JJy3sN84IiIM*vqQ4&`6E`C_yo5j>@ z3*J2^R>|F~T(#G|V_ZW}-56*iN#4j;@b&Vr9F*PXhPqS3Sgb_A9G95thJd-2-U?GP zu8z3P{j>}`f0;663ZwVdi(fbce}4VHDuMbFpf2n)VZwe|<*FYEOR3#@p7dYWJfSnAD8z#iM` zJeo>(YMJ!`t8dX2XJ!N1JD(+Csh)IEvZPx_)hQZ+T|cneEM4>*&eA`UtXQLGV#&N; zT}_7hw$lb!0o&&-xcgLzS=zLCm6j1u)-?r;PHt6B-=X)2_FM5`2F*AGoI0NeD0ePL z#f1G6b-k}CwukApu-pGLB;Jj$&D0VeDRiDU`KqK&o(@!b5m%!4YDBA2Y7Xg zNBJc=fHh$tR6ZT!V`JOSI}h=atT{$LHI<%lZ@`xR&$9hgO2+8eu12gwjV{**rr@T| zZQ|5_VYhg8BpyfU@WUcMdyZe9kfIj0eJ7W4$I|JI2wij7j{Od`m+gaVzJPit!v&uK zsYx6CsjS>7rJsQHP)=(SI0>Px4SUp6{plP~Qkw}_CD>KvIJ^RTK30AaAQ-JUpQ>d3 zuqaEpVEqy-rINHpq$t}h2}^mx@$dZJFBa+pKOp6zd?r?FD3|vWjbE>2L#ZDWIO8_# z058T%OGkNVDTIUAjdyv{);70VCZh_+Fe#NlpTqdeqoX+d7y;2?k34O+OCj8g8`5M&1Ht0=bGmxWDz8tPcD%z`bJk|d9= zd)4btv@xq0wtTjLX9bgk3;O*^Y@MTxvQmDkU6Pt4<#sj-%ecN|w6c3R&$vZj^2_uM zTlJcphn=ux0BhHtJP~VJ0QZ?ad-lgQ#AW&bv{(g4oU3Oh3d{6i0#!1`PfmVAC(x6f z`~afQK7t=~fmup`jqP5RjUV;Jgtj#XJ-}G3_f)=(W1ypG4E!J#72%8!dXtbH2u*^t z>=Y2d@TF1}55PSNYHq{IUb(Z1-lKhmZ4exTNpEY+x1JJ+ZsvdwRFNT1zpU7+OW+_4 za(zh`+XFxBCM``h{3aAcI~di(3E|VmjQJfa9T6&S-NRCUVSH_%`jB`J8Cw#)aPFE_ zw87ZgZW~;_i7`9`dYFQ7W-o(5 zIFWz%7Wvl`K%>K8b%7EbV7k`{UpTXx25m${KnvYcv3RQmZYs1$#P|U`*7#OeQ>GKM z9^u#tWy|gc@XkOUd^H{4qgC?!{b2`sbpoG>7rumJ^xnOi=Y;n*{ItF{6iYZ*#vpQMG<0T&84{P8Ft5d*E8$Kg*e zQ_SDL>2I!}k&=FP?H3WY?$l;m_USL;!LCXs4+{*XB{FOaf)fu<$J<@P)XrTVZd-i;fF5xkGXDvg58<=3OyT54Nz7(yE$9^)VNz=c}0TCV-$rM!vqOnfe_3F!=f~23ArzHa2Ju=_jWY5@2Ps4h;!#UdW;ZGp$I>AnnH|hi!SS7% zREF6#wzQxgYN^2C0G0)gq^nks?Z1rb=rD$4C_S~;7IW{AP+L2IX4m&v zu5vS%#CiyM&-cdU4av&MuC1SB4iX?Vl1@1N7(PJ)8m80aEY`>ejCXTqMY)V$mAM#$#-rtY#hmWMCRM$qPp&<;jnd?5y;@2cjAf} zEJJI?ke?=ABsqsW+G?Qa2DwoXl^zS5qs|bM^JaGT%ha9E6hi!Yzh2qK8WQ(QWEPJV zC$ajVk!KPS>SsfZ`Ncj{$q}nYt2$_?VP$&$nY)$N;n?7np0#t*_u&soR9{xC(e;*X zhP>aJ?PrIcZOO(%hlbX7_?ljaBFo?_@@8Sxxegn4#9h8JS^5L(6#=GjD6jo(MjaII z*KgS!LS8eS2?VSJn<|J*7O>tX!xN3~kiU3|#T_QuR;$Jm1LeMm$flc89ruNVTyp3Q z0;_1FM}hN)%C7)OtbJ-K?yzUaUAYyF>u4R`lfmsFWSgJC@Yk;a;w2_mJd@n@GdZ5v zLWskCh2b367Y@$@@8fCY>czMoAXM?Kw_dd8?mLX{sXZ*g+~BjSXkysjX=-6yWr?vX z49(QDwg|f<(D>?JmSN~N&I+tB3@XWXJM@EEdxk%edRvxpT^HKsTA0X4b+X4J9s8MS z4j5|hVtn#lYF*cmSl4`>p6-ZN+9jB(1r20J%ww%H2HXAPnN~bJ1z4n0-R5m*MSaVw zTO4#5V`=i#r`YMk%IiI4T*+-lRK(NcC_mQ5klkDjVQf3q?{3J8lXCUOwX~iejAx0{ixJf5ZDMcx3wJ17M1z9z3l0$i7*v=dz!d_OYRApe=yYOXzM>ra;Y zYEbKu&19gu)uIDzM=cmWiVb#~OkOfL+trKg5^K+c(EF5i%U1y~g z_CGGX+qd2|d|dJ#8I?<4ucgo1PHBRZnC@ts9=#Bi*;6d#md1uiu-Q^w0i20{)_z1@ zLADJoXX00M?J@Ya@TRn|7Yy&F=R7fD_(VUG8K#L!%(Qm@+AQu9QpfBM_BtzKr8A$X zUq)y(-^jE&P&Mb9jU(IqO%G_9V%Kc9;y_ z36-Wtkj}9AhQmjXwW5ceD)t?25UhcQe{qmcdyhdWwf}QzoZer{r;AR_hJSIkmk6lQ zp5djj$E2mRENnj1Tjk++sI-SnuKct~=|Lm`@=U3dy8@+{I$I69lqrA=$K@gdPLuwYNV}XGNWe7|&nn^xQL53NW3r36wpHeD_3bcr;>&s8$tzvLGUj? z3O(CGx8c8DmDd>y_-}{)&lR%bai631joPsS<;ry<+0lW~cDt(E2)Qs2CisNfu{TKe zu?i5;^kn;tDDQVW15&t05=pXmOi^UsY(f${$dZYgLo#POG-v82LFexRp%HF)X|O7V zkaI5>tZ=P&lMu&t@F6DXXU9ka7N^mDN}#Si5GUtT&7!0Q3D)vQbszTlSIO;1#)gqhs-lr)0 zg=Y}p5;fPyWGwUPzPA$n?3u0%n>RdKkfq2@p}eJJtuNvmt9)TMLz{N^qx!d%qxLr|RW2|l!IfNG zVg@2ORQ+HbIrMIB(mR-L(7(2J_zxib{*!=!FVbyT(Ck%zV1S(M&C zy+P3w=6ywoSg0eR&0w{e&Kf+Y|85BsY`roG78ymY8E5n0@fAD@Q4msd znu_47B(kGgvw8W^qeFbfs9DZK{U-_MR|&mOeaR5r(+k%K$>F^AjW_ReAwq8Q*h91D z=v|V@_dhjKrs%q*qR2+h456iodeVoHhhnv--1VIO3&y8KlYb!15G*Op>IHqfvFFi`YLE%YG8)Vi6(4x)p2f~cv@PK`rPkL>HO zT2V`TMuJqS{s$sp0}F{2APuASNE!lJGg`^g3M|Nu1qSGP`)8 zbOOej(P|bGI7m&U0orb1K!BFDAl`xCTuf*~6--wEN zk!aLfT<{D>DJ}&EZj+)>9db(du3rGVOQR{C^NtK7wJ1jRNU`hCS}sl^Y}h1PnycLa zi=HILR{~at!!iuOAWY)Zf*MdE2|5LTE=tx-3fliv_FAU)U`WzGDHCQ3d$wF`@ASz( zl;ps4uu2%Ove}Kp?&iHaQcIFGGdJQnSC|!4Gq?XXz4HS;}F>PUApBAYc_v z<1J>RBAK7PJsAI3z%WC}u!oTqI;TEjYC_5Pm>+L3a;Ki9*evUc#h|%(zQwhS!@Vu8 zVdTz2CRb!XK3Ll1(3Q+iCes|&p)$qUKil|ubsKp%37;M4W@@5gbhpnkl`1d%9mW}w z`>5q+p!;#=tXa2V_yOj5h)YWTq+&IM2a5f|<&I;Vk`jHne~YSyE9+Wr=+G{&Gv#6- zY?0xdiCUA~dNEnI(mR9VoCr*b`95->PjfLx#1ZvOi9Q`i5C!{B!N2Q-j=j#@li z;`ll`NQl^JXt;$v?H?J#e1=TFwofC9Y|0OXSHZA#1wmhDUxPMpR?1&56o$n~pTY|8uPc<0;UOkcQJIj~P8$`Yg?pZ%L(k*_{W*Zl@_k2|L(qk;Vmj zHL!B`qHQLJ?%*cmp_|~$VEZW7oqw{1($jb?_Q@w%xAQ_Hv z`Y!Pq9E@@H)ZX`U@a!TU;tRdp0jPMC0oSO*BSMe{No>1J4ezwJjYSPS27%?IN?je7V;F!~|_3cIQgXVm6ljFOC z!_u@Ux0TTFNSh(Pu~dbxVB@JnzLqXajXXHm?5Squ&n#V<-DIZnajplV6y9!?%M4-r z7k1%8UwwNOLmMl#4HEWn4>4&<5az(3Wx}!qcAt0HR;3SXNSLJ$upP^E7J~%^I$wJ5 zabb^ox~WY(Y)pThE=Ul!jp?CnGy{J_!3XUWVnVBZ@%V1YzQH|FW63gxN{vdXy0FYc zu(Mpq>wFis$qd0@_O2L0{Th;oU5_xws;l7T8DR4di`DLS{yGE2 zH`+8jyQo?OUtru&D2u&@WGfCbr*LXIFFv%e*95a7WA%;wDm=s@hFan{n4Man_c@$U zSFl5cH{wSZ7t@*>?FkctcPPlo>2Mi_N|v4JTekEWDW>`*&vg24yzq6)@bSo&kPq!{SzUdaYbJ*bGD1oMIvM1=|Ep z{}493z^DCKL+`ozejcgn)*Zrc9(EqFf`ECyc9u59)UZi=53!Ehu3GgMG<2}TW*AM% z?itX%9c%EMb}WGonXU~>mVE6`8^A(nr?pbywg$Iq!(+am!{(A>#*CR2o`j#|E@{A^ zbSq07|1GVv)?9c4yxKg>72*sgkl^J;cYYZhn9Kph1xzGlFz&|A)->ef~HH zn%))K8lHZ^rwkGm59juaMJ$Gv;q7e3{ttWK0iQ+D?LD+W5(1&un9!wzQl*71(yJmJ zL_vxa0YQNvp!ANfG(n0K>0K$Igx+f?A&?M~5Yl_unddvRb#`~=dGGbT_qz&AetCB0 z{LeX4woE@`!un&Zw0aa(zvDf+PV_-0dpc-=m<+bdISpfDRAvEQXow-O6O7kr;nFd9 zzUG&&owG7}sD#-##WG?Lh3}P;LAR^6I^vTwd`IpCbjL|mOe!G&FWv)?EPe}{Uunwc zehAFoK6(_6?=#aRnu2P(i7&ts= z9X15`Api+aU{En(FpO`T9mNiKj--Q*H`s@YaZVlkT zv$JN*2*IZ9KqF-F?QnvjN0Gui=<__t{$*8l&k*bE!B30lsL`WF`8)7KOX}!R?bNnD z9gLl2#fsdK=@he;X_4!awBn>Xh-)d+3Q*tNh3!Innl9Z7+lKD2Wm@tHsFZ@|!FNS2 z)3$7!m1hSA&Qg1GQ?X>iSU$AFdY??_+rWQb0wpUiT$n(2d>LO-MX682CGyc+^wx)% zQsXhj@2q{ zgv`DK^ATb!*o@#W*)Z!r&OP2j;RwMuEjchGLztS@penvltKm$BA;d60!cY}&i2c|# zoo6aj3G2lFGtUf8t*IuaO%`tqUIBX(F}5YbwiaB=UeRYyHLvYD-XX@8k=-_ajc}g` z2XT9mgVtWZCIu#cm*{?rr%H0HrRAbCWc!_br3Wk?7eYo^NP6%il4!I8b*k*CoIw$SDhi_P{*dPpv8yZ-mo)tXRFRbLGK; z-ug~xD+eqgVLC=uG$O@1Sf_IgafrVX2kk|v$$8uZGtdHe7%vlkLDmNr6G*)!|Id_w zTg8eM`^=ivvEs;Cv-(%efjpSiZu_+*Qu6ik+7o)G6fD-0r(gG+zJLGX#k6%Z=Po&C zq$gJ^A0t4|-Vs&8xSbZts!X^{?mFNQ%RxwmDVWy3y6CPUT*mVFrW4p7V*Uw+*^q=NTd34mfr^_t6 zaL{!9KsJw;WTaVc3puV5{79<#^HepBXzTLskVR&(StPTDLa8AU^H^@aS9-;^hCC}^ zk{d!uM1%=t-6JuBHiyN_8wBIbLk9Jf_w&(%-C#c3@*chWf?WD$+>kz!e9IYq^EMb%n(k|7^g zhoeMoE=RtC|AJ|&C$^QbU|xB(oRXh-ZJR4Hv{U^!o3%FDybI8jN&L>LOU;_FsBer} z#0WLNf)fWCL9?$rjP9E$MyUK_F@~Cnv9f^-wk+sCcj{afy?z)U(_?rdXBp#b8+(s# z)@)KLPBNyi%e6nLtW;EalFTo4yMY6Li;Rqnj*m=AIc7-ds=-sNGHTeGCA{@R2~_zh zia0J?T0Bb0bd7^E0WZABoMJ1e9IXkyS>GKM*_>&UEP=^p`3sn5T0g7cLL8RYN>jt` zfqG-d<;%IbOk6NLpIarg#l*Zoq)@27UuP6f(i?aR`)T}x`u=>451CXVR1M2p;NS?- zSQ~~~z_;V@rcIj?c)JPB333+v&8Rv*Co?{@4!o z4rvUQBHM0C&9q@o(+`JtD4c- z(Iu#7IDs$3IkHNA>rDtM5Ec%psLe4~g3yL6+Q6z!9EHp>G?W!V-`m>cjQK+#GiH$! zZJVJv98)0roXOwVv|i#*=_TdFosw7dcfHhbz!h8y zc2K5sA%)@Xub>130hE0zp38!8*g!R1%T$cn*X+BU_`HraNyDaUWe}F; z>);6UYKK8^uDIT7XqkXBmk)%4fr+^g2J;n6!8OOKvkho58#Z`SG5(?)vI zx^*ER1V0U0L*1B zKd$|xaE8%7_z8ahD>Ris5PA8b-TU$ID;eR7OZztt~Zrsxex7~V8|KPb(lS(H=9zV z@2|&4_T_vgDl9so7-#t2UO?B9!gv1AyyCR97xv+fZE8bjKdEIGR493$iZNgEvZP4v zi1?I0_aJ?A$|gOR+%uYcE+)8Cx;&Ss(7Ih^v3!AKtIGUtx65gtGgyvArBf9T2^0+pz+T(y7G@^sxWNR>-m*4BWDK4% zo(WjIeqAkue^#)=Rp_8CTsX`=gh>}RD+`wchuZV>(>8F_@JO1VcJ!E1u8Ef0z@ledS`Z<`7a)3|eiFx5F$PPmEGmn6c@0|#?gi|- z-qOdbCn*j@rn7M*|z zCUU2`4H|Ikz1`Xw2cOfIfz3Bw?Hml5lpt&`-E+Q!PZo%AfCHB?b>PQ}mGgC80*Q?PRUJWhYDKnneP6jT8!gMFK@_ zx9`%G-E4a7hUeRq$Liahr+giQOnp)# z*H*XGiU^ZMhJx7-Fjr4m>ojUc_o~ctmu;jkUJXo?v zJAsKyiDWEys59o}sn86GY+F2`OWwTh*-98ag&nX0j*u-YtE><- zVQxz@^cIt+kB^UmptgyIm?o}X^PVJ`oh&pp=&_xof5wO2-$v55@u7TRg4mA_Rlh<~ z#;}bZgDu}yLINR}!wy#f=t2wR)$qVTgJ1F0jU_3Q%QW8cXs)gEQF=Q$+ot#e@^YqC z2o(<^r1RA0nK#SXphonx2?vRvW3sLr$hUjJ+{TX?e(Lq0 z@8FX?9k-p$aHK9ZgLJ+3ez`eR@0;M{J|@t0MzhMg+dK+WJl#U8(0zMM+7+7zCI3{p3(oW0Cy>?7p(k97;k zQA#?TNua;t%)|=PAs8_0^zk$aN>)XcruUk5Xcl z7tw4_ROWMiik0ToBy!EoBH00-QYwPN7fiM`Y>H>yv&eC-6w z@0Y*G@Zs>zX1|UrX#(2Sdo%QJ0~@0@#FiF_Fe^4T>sp6X*tSQtQ!0ie?1Ki$Eo=2q z_#W8?Z&C+B9@{>@C-Ehi8k-A?B#&qb(62${tGw^u!T9XsblXh|!U1D;V0$qOT1p(O){E3C81?S=Pg`C$9;QZ&ZlE2m1ELX6O z^59boO$$zZ2~Xz{$OzAQ)oynN2XPw?l-*@Y+F+}gyPmvf36}T0^79Wg?q~G9VBO?1 zS|dL9bKHhS5c)>5j+JXG4$Ei8nkQv#glO_NI)upvGlbAkj31pi0pnA6v#ocW8fx^9A6v zeYH^$_a69~W&E?=X>zo$ET40ob%{M@@vX*>eU;(q#<2lR2Zai|Y$rJJ(4p`842#ul3F|sxf#4#4dBcd&H)24P zqhR+@Bfowro|%Ca>MXy>?+j~=kDGYez^e2*Y|!L?_{tPy1EpVyvHDJIZ+s)(F~X|< zr~2X8B|lNxogC>2$2AGX{+BRcQ8JPBz$=!~DfZX0;O`{se=$1bM5Qy#*NL37JLF8x zS$u5CzFGcyPaR}4H_Q2UWI#=v$!&xT0F!Z3&B4}wPMI^8Ln(5u zV{ulM>{o`VSCoW~g3T3a*Y9V1*G5(eu1_?}%yy2iF}8IbG_I-msc2PR?sFNo)}AKz zHICK1wrc=hVWVk;gOjyppGJADuG!8^6y~QmnJvV6!0rcxvgPF6_vPVqfXI`K=151c zqeM^M{^ELAPD(-ECigxuvaY^7owI+JvC>>@H^tmak@byaCibTzUN?T?NjeIgR+gnx zzw1|Us?PN#E6ACjtPq6rxVz^-ZZH4jKq~3XU&I#Q6%Xr7BDsYTPC8>BDAJfGy|i^L zGzd*{tk?ZkPsK~tp+hUjKQ-L>LHIR(+RL9xT~HAEhuOgbjM-%ynt5kTc2vpl{6(_T zaym5}Yzsqp750(DL+~`UHwn5CI!N^Gqu!pm#?H92oBiq*m?WFV_&^y>y+J~mZtQTf zo%!y-k%hwytxri$BYkA8>XbO7#dANbgX6gUFe4z?f|)@5Bantw+#S%ONpa} zMrdg{y!HS&p!cBd*i20f)l5m#^#jr41)GN{iDgL6}I~L zvd(YybS0ClBrV)D?t=bsXf*liQsMK2yVjddk$fFTodK)%mq&eJ`w(`Hq$4cyFbh6h z-J}k6zHxX4bhrEV=`(nR!(zk+F`wekGe(#N+0eRl+u*(iS9~TPC#nV6YnijclOrmI zIW~AOylr3opoBa>TKWwCV7e8vaKwO8$fc@Z7>>H#pOu1zG-DHS?1dW`zxtlj0QH_j zaQvDNnRwoMf^`e8B+B^ZUhRU(J?6>GCuQPp`_BSbIszoG|g) zw8)6Wpyg-EYoz62^#{Q}BlIy&X=w#lNm5*I7z%U0 zCfNp*3r(A*EHFB0$22`&kz(w7Nr-g;d$^{WL)DkRNS-l?aF1+h0eoQCA-cp+I;h3X zTx-{!O|iS|?J?l)P&muIjPP6Ee_jIbt-iPJ?3ccbqW2qYIHfqSdk-$@lwM5?VHVr~ zlK4D*_F7F+{>G=o#Yw42&%lIJ>k_>*1fe5T&p}`GRl_m{QT64JO}b}}Zx_4XHzI{H9)EhyX^=Pu-``YX_3A%rL8FxwJ;5d?zMI6x! zZ0!()2Giv+)J?XvZnE!DkZZR{Q)}rer@xVWI+jVu zSWTCH%?-BC0;;3zJ4lRe^r;Mp(GCEd^;=#SP(2d~xkm@GYGhrrMwmAk?uduVgT(Z+2^J5H5K(AYjWt(a;n};2%VS4K{++7_bu-z7gXEd2xn) zfpMUJ+WLLIO{pb|k#L5Q((tv`;4_?}S`kFnZI z_uiKb>B`y%{RP$O>8z+3UAv$`s2!}ExZwjM29F`1M~)l`!)Y^g&>s|i>sbO!@NcBg z??wpf7%fkT6KWkG)%zN33mn$5+|$*FG9Ns6K&Q+vx7RU*%HE^{*s4oEpftL4e7=U* z4+=#ks;|3{o_^uN!0Pl>v%5Z`d3!tSTZ&u)jT%i)-9O03S{k_u=bd(6ZmQVrN3X?C zM6fhm}5WMK~}6i;~@9^tO;+h35Zt36!#aIvnij(SH2K8R4O$HXy31Qr<=n>m5^<&^~*Va(L3 zIZY|g^$?FXv<|pydSdV62?pkQkL)+TE*0X)00TpL52c5HOsi9HdH%#{=31`tQ~cs1 zKuYw#M(`4u$@t0pVQA+1xrgC{aiguh+g0#`55TnI#xCsOpdtI(`vxv{kYjCl*<2kZ zpHiH1!uqti{{n|{f)&Vp@XfnzF19M`0Khi~*M~NCDrUcds1BR}haV4A+5wwuhe&y9jr(LceOzjW8#5*Y+NtCH^%pH+hey z(jlava&|EPK^TI#`%7=mm|_8XoX=?UtDq@ZFG=?VO|(w0B#G0~l_f7qDd)>*I?Pws zYtmga#Rzqkq-#dV>;tSbP=1(gnx#;9zy?y6j_2ScDtyN_`qWi=HZx5gnvpWBl^p1# z4v!cuNiW-)<2x-$duKwqWd9L3Xv~a*0_*Hjw=VK}DM`014I(w2C2vYn?8l4@^#b-8 z%263k+j=zFdXL^YpAxfS3k(zO&u@{U!4V0Niul8v*8#vnlTJ+H$h;-}_e-Ew&((52 z_0;GFxh>Lj(&^_tV!_ajt%87l(dSu58&s1Aff{LtzXA-X80;@LG(0 zHNW+`SBw>hnn@(r2IC;xn1G_&Wk12gt630Sy^7G>bb_XV*5Hdq9qnVEtj5lZ}rK+nnKPBp%c z`e`KjP;)L;F$~|YVfiF!jIf=upXRq-Bgn5-k`}I*gxN_4jVxb};VkP%RmTbT)BP4t zKSGTDt_9mmZVMhTgpSIKtoS{IiPSK0$*qgl|FN})MP=?C6q`fGW(Wx~gT*l&uxhyL z`mSftuxMoh^M`3?q!g$Ui65B0zWL7(tp{D;84fdlwEu9B?bWHO>N^Pe+@uo~fL>Qh z#HKYnQ*gYkY8`$`nNlQyea%ud;$>PhJp)8^Od z;DKaB!!yctr=(XR=sQS;*Y_Wro?2B$k3>8R(t;P+b-Le?eytUi7SA(&Q&f_=j7b~3 zmxqm(Hlvfr&>h^xrt`fNT%`$aJsOSvaw!NVIRX6x)%Ld6~c3XOeWqG!n(A$=y3rTFQjY-tE#Wdxu(P zas50-k~p^sp?-tMNYaZb-0xWe+`j{L%yDQT_p=G(g_X6&^tZj%8h8e}j9^lAw!KiM zXJz3ma5yW-_K}>PwR4w(Wd&I!2fUXzuQ#}Rz`%|Yv4t?u3AP4{_Ri(;fdp-1^%(xe zG_m}8z~@C4e(KG=NrkUL{seD?Ka`81pY;{)8=aNJm-4v=$r!~l>wcfxSvYCbUrL62 zj|NhwYm+@Yy*0wy ztMd}@nRAS!{92O3^yP^JoDj(Adw2{vOyZ9XE9)9)>z7Ol#*e>{ALtvngjr`lN5UwT zbklmYm20s=8nY9FfJMUuk2c755k2;R&F61(lVdy)-&Kp*dd(dfZYAmAHaOOjJspDm z*rc@)GW)*4k-}a;j1yyl#EG#$-W<9bYfplgnG;}ypg(iK2w8l8KK8IsUZbGLTFuY-Csk<)@Hd_rz7Nm9ywR)YGAg4sA(PLj@Bu`d8gA76J4Tx{4yAl`;S zLIHLchGNeHw$G{)ZYGk|?L8qwk9vwCH;hAQD4OonW6i!RG!&tfmvW zcmE-n=i}SX?vcGarj>qx;5ZwK2RP*=szd0Y6Z`W{ z^YFSBi^t^@P8E!^BlIW6+?s>xXypXUK3gnjiT{lWdJG>v{FGzH5Ke}h z-cu_7jGH%Y4^64lF)_D4>HW!|WQkcXVNvpp6l|gB!F(}dtc)ZW6h_GBwj|L-IXpL3 zl0vKcjYbGfbp{Fo1-_FZ0$j`BT6Zkd#5LMq6tG(`&E?i?GnWFx{!;W z8P!6RmkNa36g8FVfVD$WudvQb@=8{kuYS44U?R?#A2}`>FrI z;nQjuHfx$#RX}32= zWuC|65uG=iP3$M7^@957)~&PCf@sxaae%3AtOWrx#X}}fu3w?~azZNGFqJTa95=lt zEZ-F}feo_$UYTN*)5ssf57!kknN`F3VJnfS9!HbNk?brl>+cpfm<_)5|N9cCd>`L` zpU?Jf5{B_X?&H!FjEcfv)EJKBA}pQys_iMv>yca`J1Zmidjx-O7u<;71G4}SBM1AO z-23@7jgf;Drm3WV91MM%1XBF?5PJ8$KJU5l<&@-c<5N@qzawWa7L6jf6Ef_;MKm_s z)mb`ssaAMxLO}37rC0Pk`0qih=1=yP;3uW=1$ZQualbxwVZ%N2HP(6g1+f~l0#_HR?Q1W7uTo1+i92OGdh!G~N36$6c;wr*R%?jD=psZ%HWN14ij zgFM{**rs_9?AKF|LfvX<+ki>HL z1!~|x(i(YMv<)OF=t?~8_h+`Ye$fE~2iWiS)s>ZGZTS2wA59Z;Ejjzw$BW8{`bG@n z-`VT$FHW7qAqE{zOep?U42)a~6XWY}_zFR1rXHOs1(={^WAzx@- z{rc{Pg|dHXmgzC4G|%u|GSo17wR~lNI*{QsSn71RJqzCwSTK{T$2Hy}!qwzepG`0n z+nZIU`ahJ%1YQo{ed$~_{knyWD#wv}OF|8Ia0{VVFCg~{%+&D+*4u^xEdB}icoFEgjs)i13d`dJ9 z<)z@n35&4!r6%+4fYgc{q*erhQbDm%iG|Km8Y+$uEev&%MR8i*NF=*!4wpQxu2omx z{n?iPk>q-$e7Ys4j_CK|#pS(eTwT=NilLl&x>Ptx7UbrAcY!&_J%^w!MyLfjYg4BY zT9Ds0ukAX+Ne#Awd}`y@2+pyB8k_C9g4nAmjcF?Brg?4G;t%`TX#Y5Z+n{eY!Tlek z&TFyh&ka2R+W00NSgP!=upQ%{J9YZOj1}Bw}#9xk(v?aVoZlc zT>33eWWb*53V!~G{Kgeri^Hl8CNFsySmNo4x|8IFcF^-7*$73&-3a{|adbd#gB%(5 zDR%T22jnR{6F+{>t`bGzrC?zr*wn4i*rMod-E5oYk>M$rq)aQNalXC&*GgdA!t-=I zgwrlq=y06h(W_UlP!6aK=JevU3pC8jah^8ROfFPy4)o&0*vp}?hdMazf>4>}#Sufu zEA%|H2gYgfnj%DAI~?aBhvUptE!2=^PYc+ue3c5H6Re@A?FN$29<;}!QpP#K7CLEV zg*w5wC8oybBnv2%^F#;}{&xk+lIQ#{AtbmNt|m?nEd~e-1fk=i>IhD$xV)I)DuFT?>mMI zv8n02?RYYKg|z)bu|}kc5L3?DfboNs!ml_wX~p z7opT0ED4@8uZMVDXTHW}ckxg5*+N}E~&85R}IDS$|;lE?Hm^TBbc-Jefs=5;KUAL`;4@3Pn${Jj>e_#8LW{PgM?lA*4u%<>zNqT!hc+6oqitq&7$l^8efH-KLV8id7Q z2h!)PGS+_!+s~|4@s6OHFy$s}*PXz4zQ$*{_RYYt zWi2!<2v#t!XnyMzFxv`Tm8W-H!NoR7!?&$@KGjc@`Aa1;STBoA;i(Z#LWcOVLFA) zcOUWdE;EBU!7uqzZ!R@kZSnV|OT4ga*gd+OUS@@VX{Y;PoMcO|A?5lf>11GDm!2?d zG1`(?y(Nw+UA$b~V01go*nBDs&KQHIsR`sb0pY>@R=ObN@!hFSjs?n(}sBY%c)%P7iwvJk7~jq-a` zU$*Qr^aLFLvSqu~O=w<&we?4KBa2NEFi!92<5SqHg|+DNMW*Z;Xw#(-CSdcU$FP-r zd|LGA<3`{5^?5_aZcsf?7wX5+oy)WPci)|k zOu`B68GR;iwcl~FaFROjE}p4NRelZLXVPQ@T;{~48Xp>i4!&-1pZb|7YM|t-+t6bx zK^JgYT%H5avkLR$wi`accy)*37J)Y**gNb~HJkanTKk(n>nEM;3$e69b0w0ws@x5- z#9Y|WB2U&aQq@$7Iqwijtx0YWw%!0P7ub%h-crDZn&i;WB(s}Bxj~*=8d|Lh30BsC z-XK>kFH~hv8V7R^*;{4Vw+e5CZ@{Md1Ad3g33GG^6^sI^;)Yo<)J8dm3gE6b47I0c zxyGO4VyHl^0kxXO@-eEaFr0?XeXc3EjgwAFrw*`W>)3^Y$e86mXo!s6^e}=Z-}_M! zrA>r4B``uZyoGCguXp(bF<4a^;+qO}zSu0MlX0~-MQi6=WRj3p)QcnnYYKKYELl{CIb_FyXXQcpa1*MxA8=EfS z@D@y5vV6XlH{i@w>EVq=OcT}6+!xNQ{Abh-JA<1W$u|3{q>H!kO~qpD6%G)M$Td!3 zmg1XZ%eDuHTW)~PP#NPhG zKozV=2yN5UC62S>2MqW<>Lqh4D`E`TJ0W;h4$3`%wc|Pl2fIVp0pC~j^fsmr5SmG+ zNYH+5Xmo#cLxqX{j>j0XaEhMB3$AoffP7Vc%B9nEw#lT1^jto?o!W`P&^dXIxd)Eg zzaI|%oWnw>c2w4ehMj(u7mGdVBq!FuzlQl0a3uC$t?a`aV=v-!>(>wUG1%Yw{%r}g zoj9>0pJ~{uG(yr}&E~ul2chzo-8HM|r)L0qa^b>-WRgD40^T9yd^g%F9G*hbE!Zx7 zQ1qA$YxrGM6NTN5!3sKM{>uA-O-_$u5=l|kG3gZDGbWWh*8^rxt(PQ4@b>1&u+2OT$**ggMPeK20gETcB7D(8GJ>52mWgw} z`)5xuIfQ5-x?0m1O&Ab&Dd0Kj?TaNMFMsNir|I{Pv$ZN8BL z*eObG$#u{u91N$3c48}mPt$|tcj3DgsO&ZE-sQmviI##!<@tYM9qXKgGgEXCF=AIKX>U=_TPeviRV$;uhl zAtI$H?#b13pa-X5CJ=n(=uv`K*|ClpWHN}X#|af}U_X42-XEB5tzpAZXPtvQ{ zu^uNV?PL7FXp)WH){QjEJ9D`2IojY#=@8e=-{M(1T&WV%QGfRjybYLO24GZOZLPuOA*Avba z5MU6SP!3`f$u$h2c4GuOoyaW&Dei_KP(@?I-MKoq)7U~Aa4|VHKIC;y92+eYL2QVo zQV`oXn#yh5gdjPUd|V6j5s zPXUG7*AMs@K`<1-gb-5MWE!Nygs}mTbNI0Y)-Pv31p7KgkqrB@+E_o$r5{T$`OR4~ zK?wOf5%l|SVZM5?*c0RD@Rj4`B@{C5uNdCoSQmk`E6&f7ZW^T8ATD1H^m>qr1v+Mm za#AG;htTdX*VRnN9fVymI1jl#R|<&G?EYSaff;MLVZ_7#X4oZLmqSf7q*G`b`#-^c z;S~zdz`QrUPKVKWjxPN*PxKgEWkbXm43gb1YOuaWzRF`F!2IW>Mw~2pKF>TG@Y9v7 z*t#6BcneA#f}=}uK$(=IAvwzHtSS5p@OY6RDi;1!EO-O^3I!)(!Ke;Mboqj z)mk*YdBO4{h+{kF5&huc!Go8hlN0d@Ync=o5sx3OT#Z_`w(l}-i<5(@W-o_O`Ixg- zxqEn|N}Bn!jtR^?BMr-AGeDh*!%e;1G8pfL83EbBC(rb0K8$Z_5XfP6maRnuvu+tM z_DLLpnazDO@ik`pI`4IyQAv%BrsYfB4`ZgL<<4g8I~J=Me4G7}uyS>uvy&Yrow?@X zWv15*&ULZhI8$1Gl_M)d5u9pS_t3$lfw=nwjhl8>_^0o@%{& z&%_sc_vR1(>TGYEC--p}Yz&+DJ}2Wouax3U{LS8EDghhuL(fy(^hhgOV43Ep1wOtC z%ku5tq+H#)K}F?y0Au=5$%e4g_N?txnOMn@*vdXIcO_`pXcN# z?UA{x7#fGya3JJ;2B-fTr_HfjIC4#b{B2|EOAG!+2Rp^WDj0!FNYooDHjaetHj+kY zmKCRYZPz@BXKXZ$&|S7&uZ7IlJx;J8AjM_^X0S8Ah(>>#GSWR8acI?=u2M}tX zlp3;34G&I|0!>3+@71rbj%2lrmn3gSjPZILk}{q$Vb<#}Ndl|rA5fgLa-Gn{w2cC+2nX zA8P;OtL(R7GOxS$`dy;+jydpSco^37}u?j6C2xcOSqaoXn?tBzowQ>qxb7uNl=$isV+2R$ zuL9>9f|I{Z(pHO#L(;vgKQFv?^$x5f?`*?r$&_!UgSM{!AxXySg-ah=q!2n3=0j;q zC63MTlJd9FJ?05#%uP`=MS7rkIKSyaY$tr{qi0p)$RM;bjOP6y7lQ@0Qn+wY(Jbjl zffN`imj?cAuntbrB247p3D~q+oSJPJwT0l9LK6(IF6jP!vEV%M;&W6F?-54mieow7 zK!x2k&56O$J%17V#4%8qm`}+61}0idg;0Jc@geeqFrA3p6&4y=hYJe@OFaBYi2XBw zJl|)WWkliI(0BV8+&l*Omdiul}))`9FZqn>3W9sA-+!6q z5usBPD|zwN$qc1m>SjJNqxokx7R}ruv1(pS49Ky8N zsX#D(7k=wQOAHEbk)lHT4VIsxFcLV>d#DxLNp%)Zii0t*;iQ!&p zuFGxe-Uz~{ze15M?!axC4-7j!a#g0}FC0X=E8(f4Qu-tlhlwzh;1qksbnnb660o?& zb&e&foo=%}8seoT`#ba~l#iRIJ6_lXN=Rv8Vd=DGm)OSocz!0$fML^tv9#3}wXQka zA{twR4N6~Uw)Pn;9#U+FQa2>&8mD^5)^%k{vUIl>2Qn1A^;t^5bLh|X^yULY zhYsyvf?8a>sMr~xUr!u=@dy3JA_P0XFupos#J@IC54h@v=w}170(0kr-OM@a$Wwjy zybKJXRZ!o6<q-)R&y5!7raKtFOj)y*KPhpqB(gb?b9@jZB= zc+M{l<1ahWO2Y2uLu42~_>s5v=R^5SI+*aVR1UJ1((k;}@d(%;j5n935kqCDko=9H z+1EyldBgp%%0WTr$n(j@jW9@o|1@iA7EqGrox0SemRu~uk8jdxnZOIps+y$``T&MW zE)5wnQ_6>4GEgMjfGpfV2F2Rft06N~?_m5Rm^i`Q!2H|^@y=wU`{s;Ulr9txq;E*H43XD>!n+CRq}!oRG%}IPlU-8#WQXJs-HXO~Da14EC$tpsj-O z#If5dcL^&N%!-5(>zalkB&~75@Af#e$_wWkqN2E!*EZ5Q;%!XuA7!<`Yk2j!i%0W5@-(aG zppD#7kY_NCfg^0gn+h}7qrg&If#4x0SdAxG8Y_@POR)6BQvf!F_B!p0a~*5~6Jman z6v-6=V*fP8REL!b@~^ySRsh0}U|^rqrjt4QIVsb2PRf*GqB3nq4+eh7NeGZ+xj;VF zECF<$!2a>%W)2)VN{|b9&cI@eb$~@?cG*BNe3JLvSAepl_h@xCyI#P` z6}d)nK8A+DJOU?9_thUlI=rD1DBQc{eMb`SkoX2W?uhOoO|R%31uQ{sJ1NPn(sYTD z?r+TT!L#n)Nk!pX;y7q<()UM7d?=4^`ao|LUu>p>^vG%I4j<}N;VxX+cbj6{Wg4Z^ z|A-oz;Ap60NBu;fckO?*2BA*MgpDc#GZ*uio7nUcXaZe9XWM?*wyh=OokmKxM~)mR z`VQ(bysnp2YYSC!S6EaCyY>mZO z{_{etGuRy4!q?d)5faOf&+{fBS)-UIg3)l6yc#)z2^-#mGcw6WBgp#NULqvnbC#m} zt5b_)ef1#Y$uWVZuz5j-qvGVi zyP&&I{jwXNhQ$U)NiQfrY|tVbIOZD80tY{gK~ZHzN>x|>zLE?zcoyRm8idA!*epGS?q_AS)1Ph^okQV(GJg&(| z!8qN@APsx!Z6rhGsTHZn4d`YPdK>t+CE!!2dP6Q#p`Jgy2#lA`pF7vcj8_~Rsw_OC zmHbH-qc@wr4zw2z{|TPM7B1BA2ejgc|FnRBfO7%yfi$dPN&`dM_Z}s5iwC}E6E*CL zA{REUB0_tUK*zrdX%Ip~U#W3zNuY6V0v^Mao~`NyeJ=+Zbj8L-k#@N^Ga7aS+AjG)Q453Ki@2u5H9epHDcS@v-_!Pj6k`C1e5k%?dg3MG)GY-80xz~U!a#p@i& zEZZOO){L;yePE?an3}eeI?JQ}t%3Q}LXJE6WN0#=>ENQ3uY@XCLXt6etq#ClnMTQN_ zA1sA-qTpOflCPQ&y*8Jmxbst{oX<#{>BZ8izs57T4WfHgZ2Myw3$RMjaQ2F@iDl18 z&Mo3`zg{%hWg_=uo7uC~L2c|y2`g=2i#RCGOJ^^`rW2URwYV0r$HWzR!M(6Oyeg;1 z2{G0edJ??G7Kp-jAUuQLu%+99w(y}2&{&qN%^o!&upLO+Wl6pg^zesr*~o=Z2gurL zb;i!Z(E+yLtmd|CJiMSsv!5?DmOi?iTL2ps=ibFYU0-Z z=5$oob^^UTJJ5{4BC35)K`!HIh-DmBWGE9@?$6|`%Fqwh=u#jd|Oa*Ppq`DO6 zYZjA3iWN6KO&pHbm$cL|Sd_VTG2(f#52M8xYKouOJJVV$;yE+0A1RzmrC5TkDPiao z&t1cO*GP@edWCs1A?E#D^0V^mVVJwt{ZtDsH1dHd&(R`RU zwML|c>71(Ow_ZI@zPWRG*0Ny26~{kZTZ;)B-gg$fgwANH+~7B;vafVBjIWIRS>h}* zD;-Z>w90|d&KLPCLe!G+k$1qd_K2ILq7A#6MklboC*-oNxs><$?*P#geK>uf2cN?p z0qBKG^=vB9gaH_GQ-w(R#eLZSn{k;hNj ztmj`vcly%te!Dr#&nQ)ZH8wEYczLzNtn=s3Uzq&KQ=5f4gsRq2qMwaBv*|GTqr_E2 z!4xd4AR)b?&Jl8kjdu{C+->}40aMzHK&j`lQ5}Q8_*&wuE=?coPQ8T}KXqSmsO~bdlGTgd10MA7& zrN=4Og{Z*LDhoqPYIuMAq0X&)+TmzAezJj&1;I#2h158E)q(1#;vY+((fFLMiSfWB z;FgwA*oPtM-rQh%9*d3__kg^MjBz7Zz(kKr6~H37oo$$3z{g`TzlU2r@j?C%@o7DA zj3>`pFsWGu(`wM>JTV?zY5|^P1Ay=)&RQ9XZx!QV)bc^Z0WO3(-T7^0ZJy9;L(AU( z)Vre06encg|1{RZiOzn6a9#!_1#=16E=tQHLK^)w%;8LKfLNzvwiqL0oM6K8{D?S& znCod0R!XFF10lj5*%YGfinU7@drZ!`+Q~8nu&=TUu-BTLcRsX|PxD&(sM1w@@5^1} zVq<#&G!4S*3efY?qSXe8!Qy%fpQG*hA2?>bzrzpZ#%$g#$*KJoN+I}@7+ z4}Bu!lTze3-px#HXGDfjFV+-l@8nC&QabmGxDvy<1s^m*WifU$LMZRCTSllXS#1Qs z_pPI=9xjW`SU()De@CrY_MNzlCg`1(!N!NOZ89*l&)jt_kFOYIGmp(5^4EH42FB`I01bsuv^HSl>TkkY(v7Dn{d@MJ-I!JwXMO>FbR|)I|{b| zv7d5r#d1M{U)JD4XgP@W;6r8LT{xo^tA%AIh#j!d)L=fEI~c#KVf4>B3uZW2~x`ZQF{*-?@ zt)?S6*j0k1$i>rxdD!@qt2=^-KMzw?eUZuUi&D6kcsvp|&-1>mJ^b23J+PRERhP%d z;D@)eY1ncwdk0w3-QH@tOqUNw1QAE*T|qygD!y!4H)04^#nX*|#aC4{oez8;W1&j4 zl8CVtPUMC=!8$p?sy_P1*BzFUHwE2x@t!1^CA%LYq&NK?a&ioTOV2B4g@i*(O+E50W?Q1&GN zkyo}6`tKccz1I*D6-M@IDbTN@sR+6E@o5g`GBt@vYkbNkk{@+`!;>=?G=@GW#MA*Y zV1yv=LTo(=;Wwo~K_+?1s$u=LC9;zZv;OUb2y1~W&ar{49@gLK_I##U$|7(5g}l7# zj^~_j-1v(vcjM)!YO<-2^0ZtLk#uQp+v1d3+reT!J2S2h&^vhZju@E7%#_tkdwk$E zvcQ}j_b0T{sOoiiY|JWk&|-eLoOzaE{Gp_*qu_3kf3alMU!=~E zA?t<=sb)(JhxaY%f2IWH3cn(#hipR28ckK1aFI6*KP06-fcfLujIi+FxnJ)BOLGXHb}b9 zeR(8p_%Oo(IwX5Oaon^eMB~^={4}rin&S)^Xr*c4PcVToJHFeA7l@wtQVF;NUx>~! zB#R(4hBJSuGP?(62J!n-U@fx}55{0cdvE(j1g??cXin1NQ*7Id8HJT`!?Vok6wFE>Rx7NAtTH?N! z+Gt$XYvE|@Yo%#n_uG#}&l4&VCuq-u@EAN$Q(?XO#2&P!lCsomQw8PPV1JPcR`}&v z8cuu`ij$j}lTySl9ENO8?b-zgBVzn}9VQ}|t67iM7A~9%d2h;^Ix&evZ8pHk_!10Z zm2F1tG-+*BoLv@AjX#gsa$zgbW@7FQLwWy;TAONT|LtRHBaW8>5Oux8lL z-``IQzP66!3kD@*1d|2VXOWe zZ_3{XUop2gdOjid8_AkHo>neODQ1a#evFVJ573A|Wm*F3#(^84VgoPhNTRD;k?yn*^(;N)sLP4h(1 zcyjM>kYyUhxE{nQ^XDDLL_Mp~0KnI17abwP*DR%}@c6(f@5z29{x>hsW8p?ors0`O z+?8WbpBTe{n_2bE-+mD{@!89z0ZX!Y~*M5#pH3g^e&$hIvgt>(C(UmcuU$O{} ziD1T^bRAzoxkN_95;EWZx-U%F0+ZGy`#vH!bbig_@t)%I*%2gusOF0j1hUSsD>t=h zY}XZ;6Ku5Vw8}y6Z%(^tgV4r=n>TOWOu*YYqY34M=`cg^T+z43uI(*_Ujpq^$7_MW z_C?tRA3AjCn+md1dgP#L$L*0PPejU_ed+c{`hU_MLy^Tx7C(`3J4Pvk0lPSei?xfC zVs`6exh9roF_P5OM9~7CqZ~Mf4;2BMoDpp`M$@&zA+TvLKZzzX4fFuJd?RgCnc(T~ z2<8lrQ4Hb=7S#{^r3ir(LJy^rOP5ULM@Q{#t`}e*9yl<`-b3f>dE=-hIxYJhj;OwE z8D?qNp~JYNVbB7lu7{~qve6|*)MbLfGHh--fTeC&41N3e{?*WriNBeKU~*AY`K!yw zs>;%19|M!klPrP| zU)Zd^dBB)3#tSW2_ImZaWKvO%g(Z#m-(cqTf|?LqeeG${(c|)vvmRtUz8QFZPL`nf zbHR-%1|?%DO&Oes?=HN9v%bq_7ejO{I1GYu5QK{UhHqd$%hSN+{6`Yi5fI)0lrmI8 zH(1+q216Y%j3UA)#Kl0Rp9q6^{!>hrr}{Og=|rk-jZUxsMa&<;z>O~>=nHxGQ{FKpYMqW4==(I#-FahQ;LS`Q%NGNCK ze62$6WhWL_D@R9wC1)pa@@}OQFd)O)#|X!}74BB47c62Z97FROT*)hvt!W;vp6a{X zW}*(EhzMD1G`?aVHV+S{Soz1&e3{4eqhLFv%WW!}=rj;cQ$7Go@wdy_u>JU0DQO;<25Ug`*<^uDKhJvjuR=RH%N#&$vcRGoDMaR%y za6Sg#uRn7QHsqZr*QpwtTkbf4+=z90MP^%(8Q*|n4Q)aQrBIuNZbY(nSSV}C4H#x_ zN1k!s&zX28Fif%RQ>}FNqh^OW1>8G zUcu6AL3CbXlWEip+g|&NsVJH!*;c7&F;J6urL=(M+7O1+L<5`+oz#pCrK|ZZs`Ow( zX^if-dfGX`&N;!Xdj4@?4`GVCZNIU7`}Q6E8|JpL$Y!+VanCEZ7SZEm*xQ`HE#n(36$S)XI}B*#aqm?H$$Okt4tS2 zUmN_YZ=UqBcWe6iNr_~&}v3P&EhrCSyWCHQsPS37yPhoWE8TW7zkvY>mfU$#}v zuIPAee_c*{3G+5Yynz!I)`SV=oMC_9l|ng!oBtK8J&Cnfa;l>BBu1!mGn|hua;F_X ziJ-C>8Nwo4gN3HE(P1=r(m6;OQ#Q$T1$UJhQ7GT z3&)PhPNE#?sb^9bX&CJKqb_yV&jSm=9KI<=SWHQxcQ&(+6@&1_jPv6-wWX{!Ul~pN z+w1>W2^5=sg05~&SZf~+8JZ^FL->)7SVnw0U_y4}0oUcnID+r=W0TVf1k^IjI(g=A84Wo$~R0Z<4ugGy< zr$FNh+r-?D5ps@>)4JNAY@6Xw$NF%xBWD>TT?9A+eF(d<|Fp`v1p)>UjU;5K6@!JS zWFAytfYq{KC8G$5hp&eBJ#sgv1#1Li>w)$wA+~ zzRB%f)IEUzSlP>sjp+Z>AH+LWM@dl~Ow2{eB=iUJhxG%Zq51v<3lsvko%|va^Sm!M z5P6vh+bI2r^noBUbc=i3mCW5Z^SO^m>=5%!b@eeCT$DeI)YZhw?I$UwnoP&CSKJF9 z%qtqBNe(`j;I^7ErGn~}NnT1Mxvd$Ckz4vxNYFH5*;vt@kdOwze4c7NW3I^Dw#AXy zLlY)MKub$E*rqGqK_#f$t&?<5?vZnG)RrwVl72Vixro)P>KbDQ=mYL7k6usLh)chf_v};i9m?^&OG0l z^^wiJZ|{5W_ZFD^^6WY1f6mzM&W;aWGQ7IvjUNlcQR?4~4uba)FdRkHzliEQSUn7^ zwzXKiI1Kyq7^*P0zAEcSuz(qYe%RK16DMv2K|Ki^mlFl zpnA(CJK&B8_X2X#{1akJEnGN0Ffj1Kk7h_Z;pOMQc=2MV-Y#DIHRB_;3$;iyh26sf zwFlUg*oZ*s1}K_BpmfVI4NLE3nCtjZBNUjSQHGsqp-Ib-SAx$tABcMN6_FyB2U;0UHSgMm=>FyS3x72Z^CdsfGk zyQevKZnwZGj&>;Zb;m-|N&BzqV7t=6{%)Qr!Ux<8npR`~HdD7UXYLYPNkQ_`+DPjt2 zMCQ(&b7t^Oa_BatifQd^>KwWBHYc#L1tj|r7_j^40|qHx^9So~c@aYB7q)pMQ~3{; z)pH58QZu&o9P8_Jj&*u=lCBHg*LqmK&XU6E`MEuv@OJ&@U}ck>;{tQY9rG+b3|6H% z+O5W?jm|Lhwi(1~=lSJuwoGe7O}MTOaqOEBbl)&R&UTqm(W2ka0mrpT^9;J99NI!B zwBTE(PT8}i-f4B39Gu0wxfwrQEC%$C&YnHHt=NTI2-rn>KA)P?EwkTK6B>m0bi4jO-HUJewFuG_fl4`+rRqUK9`Js8eoNhSh)SUF0m-Xo3;p@Y3P7iF1Zm(MpG*P<+o7vY zTH(#t_%j$pZ!8vOqBn1hq-x9_r-Bs~xr(L3y74DoubhQeZCi z(^woY76^GdO`Qhk&CgLbvp(9m-O6Me$C73`S+U9y=bh`@q+>VYZ(<{fk*{K0tbF~~ zFz==FMT7r1iHEQ2kyE60E04I*U{f=D*b9^9iCxZJ7hlBgbQ;L>xvP8tJ~cdkT&&}? zQg&oQnU+Q%+nrYfZeD9LqlUwtIh0E!3W z&tmb1nX5<+X{@g(^OS9F%Tq22W~eRHHePytt_1Lb0T27hDC^(9d9%0!rYH|ONFdct zQRGe3pTJLLq|6HHO8Wu(2C&A}KN2)D=ijU-&!0VuzujNJ5Xv;h@8o{JA)XTGt>|CR z0gvzIk;i?d{U{k1s@2o)WS-W7`v)cRa|xE^nKRZr*%?Ej|1}mY2@lQJ?8eBjjC<60 zN->mom^t)~@jgAf^f1WM5XK`LGfz<*=PdxHd~VaVlj&jO)3M7BH_FLR z^r`aN?p5Yj3v#bw#fl&OB6bM`S`au^{}UiK|z zzbhu)6)OwG(pZBBx%NAKabTAv$Avox{hX9`siRXF*!zT{ToB7uElBqfFL0EYa6P(} zj;Ax?Smt6wIS z#Oy%SX?PjV7&Ti)BR4Ek+}Hmf-JQy$=ikiaS^w98VX_gQ&dZnIrv+@ZFjQOoS}ME~ z*N(u?`K(NIyuX5T3|&u)gYe5F`#G8@SCt!za_iF1S~dSK<+^28{jh?g7aJ`Wx~R>< zfH4m(1?gNH1}ogo`q~<<%`L0|#{O)?u3*E@uaxLA2CZE$o8iq8T0|BWuCQ-iu0P^U zJFL8%ZoNGi#;myC zesF*7UtETZGOPBM`#;EmTGL?N#JLsu#h`K>NX6u36wHh*!Gjg9!;{!HTY(-s4-Vq6 z8s~8IkW8xZ(;Y09^CU?y3daxF9^rPdd0;tBd#p+6*12Edksg$G8+A3A+rPJ+v2Rf| zeDkD$EvHsFXFfey^a6)fO*jrvx0B>-?(#Ua0M)bH4H6aw-8L(8pz?$-u}l9+(qh6p z!rK3_xS3_5QSY>EsZFq&VZN5U3PMkuvHHo*SUW;vEO%X;H>*LvUo)~?v>mralo^t$ z>0pM=zu}sxh0}!&Mze%_|r$J&&T z4wG1FZzNTE?86&3p1&F?d6qg|X$bZF!n5&oA!j`GGt=Ftr+y}YrXc*1^$9nHI`MNl zi*)l5+Akt^If8{^(o}TYHQS_lA|GDJi%h;rI&aJTGq%DcOSMT0kAd?aUJ;CoMw^c& zLb-N^9vnmSh#3|-!1SE{-qW7(gIxAAIB!};DBsA)oA&0| z0&}Kijxi7MEIWjH1-4e}dmc@G#lf}h{==a`>yl4TXxwMZF&sb4ilGruxe@*ZpIum2 z-ikA{-d@EVn9*32X_7s$sq2i_pd;IEZugjMG(I?GQopkMP%M#X>;~e<1U0*djt!RL-Cae8P#Xk()1)B(*YCYm$U_O$Na_HQN~7CX(=lg~gHxqcZ1H zz9TG$o@m2dsY|Dw+H~;BmB%mQVXeZY@)kBK;jT7V6&-POG9hcsBA%*L=y5l4It-8>?!B2E32`vTNHy|0pznVln3n^<^Xw+`4N<_iC!Y8cO@D?XAKKBa1cmaen zV1jY=YK@^^;Hl(6yN%mI*}V;8rjXDAy^a3_BKt`>=I;sMmgEkauKm{!<3*mxWA6jI zP^U{kX19eYVV5NsI-Y``Eqa)0`}o29>cBy|q1| zdM$YXZPl_^@U!rjXTvcL9t)*7V74y@LZ4jL^CaQpM)4Rk ziH8RrC&kc`APqM2zt1#~0NYg)HJu9ng8P9<7GM(#f~1d%^Gy?ZX$X(8OAS| zcenHjRcQP$aY0^wu^O<5%dTgaDC1`iQ~FSpGV<}Q*SGTw%s8n6>cj2TF<|r0BbuPmR2{I8?J;` z6AY-J1LUWlyy9IU4lCOo=16{koO?(y)&YS|>6O?V?flQh5l~B-&xRHIr`(*jByM zXR^zW$6Di8YDt|t_GK{+^W00$tD-?t$s_g6EA%`{n1<|2HmK@;AB?QIZBEle4Q1N>*N% z0?!gQm1>X{BN-&|Tld|&&{&b}prQF)AmNe3Ov9#+bNPf=m~91PpV6&}brg zg>>y3hiD7%trK#f=$wG9^4u;u2M$|u1qc=(s1xFH%^4Zu8YzNB16(2CUl-RL5$mG) z*2Psvz>0>1sIsCi{ROpYba8D}xsj5{6xC!SU9z~0bcJjUa7x2gnmR~^Eg(Btw2MoN zkzHueBlQ>=y!{#?Nr8^*>9=bebkPvUm>^lY4Lj*Q(7<#;1245KHN3H3=Y)v2$BzHw z>Ha5Y@Ldx|n%bojbxK06vO+I~djd(VP4yO&v)l{g0hoPTE%nYa&BsEwpo3i-3V{KK{*0Gx2zlY9N8KCAFxWxzQBBYFH9G^$z4^Fw>o7p|Axev5)gu2uuzEO!%Ve3a~9>0z0l` zS#~3-|A0Vkcqu_|`hgn+Py z*&5LZ9kF8;E!uI|5R11{=hKdSRLtEjvFHa&Ec#8Naty%u7io7$=>^we_T)pT*$S@0 zBiP4l!h}tQYYI?~Uuq2VtqJvudF2>RxxOX(ttx(42Z;n#XHxc1oxj7$qvkI$~M3Df`Wi<%&v* z^?D#QS&4t&@@EHrLI)>QSM+xmbF_SCMOmTtELH0~Gfat^VsGnY_EnVF(|g0h5+J27 zY$>HaWgZr*&y0OA+Kh%42K=_$pd1~saA7mY{t#31E%D#TfhKDnklkx$$f}YKk zTuhZ64!KkP`J32imsUSj{a}CcC7oeP1Ou%&w7|zFvEYbT3EGpk7KQ1xj1q@-P7(eAVGlX4czP*9cNdv#5`@Ua0IP3E6WWGpH? znQC%se>nc|aT2tzyIPLgQ&@dH)M#SEH=lmU509arQ%TB!e(ylLIM;#XN_HcJ4w6U4 zM`H(JDkN}jY-RJ+*+G0+JB!O3bDe3XS_neB$+vdaPLEcc`VZYkDrAqev_t59*dWZI zmD>9$86$r_YtF`rql9;eMyBxOSQ6E%K&uM*N__YM^LgxZFB(2L&u>SO_*b#1$tj_i zrkj%j)Nc{|q@`}V_s7kLOW}l}D@M}l>^yX6(XwHC%}QYBLzNBe?e*{FK(8@%rs4f# z#)z-P7ttvSt$Sj{KNs)!dXQ5Gl~8DwvaY9!ByR_7JBz@)CBQEAt%hI~{0p<5f&nD~Gy1IN4k<)Sli0MM?g?X3d%#4|Zj4#UK@eAIKMQ zOcHygs4@eKY-LZ}mjkcAig~tQvrABd?HHx=yq9_O(S-ABf@+T*#A9zL?_F--!s83; z^R*K-H|QBDf9;OCcR)Qa+MYofCnu4s#WSLU^9WhSKNRibwQg9?K$!Mzx1w~Xv1+q1 z^C=0Y>*j-C1v?$92q&{RR74Q;$R5?z_)BHj3rR9Vm#UT8K}ZDC4{I5(gP63iScdYd z6_OPDXMg$U1EEQAg!JHZ#_-@W`0G&9dJnpO9k3j5Jelh+xt}Y*>Z!cqJ`kWE<#= z&9It1>%@@LtJ^|+_A@WL#75_WF0c#pB+BNJxqYkLMIQdRt0X%{;DBOqEbURDRf5orwAJn?%XL}t zGl&}vIq$^^uO>tf&j*bO(gV1BV*In90*SGCsVBT!S*@jeF#<%6m9=4b||GysRhT*%1@b#^%^If*zF%6D=0FNL$Tbh{Az zWl)f;$_F?sj!0-K4-Or~cex%~2gNr=JbL`jLoQd)`0=HLB>xWOpXMHZ#et&@1g>ch z*bnY_6}t<4NYr&>EI&!ZHwPBX<RI8Nf56mo0V(h#_9*tAW4v+8e!BQ#)s|xEP{uo!daN!0tviljV8!W;woidog z&^#L$&O)#eNs^)&rfiY)p7tJlA6B-Er6Zkhos|PMmfsBu3NrppdDb#z+Wi@(Hq>Y% zFY@;7DJHgDQI3HOCfz(ZS_!iM$_ zO)+0c=WP>nU8h6Smh;Ehd_u1)m+Xz*cf%Fy>4o$uf7a1!f>}R&fEC+@fj#JO>F+dc zo#y`zak*v>!^f6BI1bJpH-s{jS_NB0sP`gf4-3&ae$Zm-?c29owy1AK_$~E6%Ym+8 z%ez9SEAPBkT$}nUH2=sBp}Lee62zL@$(ea+J0ZV{IGOCa!PQ-Jgi@Qm@EO}m&X|3+ zx(DAqKGwWo251fJb)Gs3)0g=0%;0a6w2w@NC8{J4e^z308FmqenifJ;2*FM@t<7i`z%mSqw*|657C!yY$YpIi4c7q0*M!ow0vB z@+)m=AJLD4<5Kf$WZ(Vpa4Qdf5FUC|&%Y=tI*vZVbvP?v-B7DlX(a8`m+%PlF6&r@ zME)eq08!QcB4l@d-azNClWh(SUzpIAoaie?Q8(lzGut+*2ECs7k7te?}keB(-Xti!rkLMt%v zLvS>?-qbsj%EjSRt{C8KKFzf3hkTr?oM8j%bsLV~cY#lbwjk1e4*2 zYS6?j$H@$~Ekw4H!D!d7ebuXb!)VBoiYzwh%AW1*+mAd3R)J>Q#89aRQ;8v)34W2q z5Lwq|{BLFW=U~nQ+e&lyRL3*H+7aGGgQ~tJ7eESywH|C8H!wi zJCOQoA~x59IIE0sfM?;?^*F1U^~$=11!Fw!G4bM zL3@dwX%#+T+&I9R7<%f}V@X78ceTf+{W*MqzxDOQ@t*e(`ZOxybUnt5G8K>FSG{^g z;TZw~f(l*2A&T6lmZsufz)nf)HrY2ug>Qd}x7zZ=u&VtBKGqnO+={o^GDQPhMdJ-r zm~D16ADeu!c%%N63X0{%`DWt5Mv8-Q0V5pk`YT>HoVtSDmZe?gx}Wkag7|}rPs7(b zvS!fk$dswuq@$B2P5O*|Ab7pkmv4Eqv18(2#D zRgf8ibTOB+T{|LKn5299iwj;C2lop}2YV@N+-n~Fa?Qa*5dU9evz~LWkS%I;(@A^o zaObq!ym*7i5u*&pH`a#3<|&4Iz`ZSMedzYDs(X++lgY0YX?RFMwJ3+@9;bfJfZf-c zC2D2q=0%$J3LKn+v9p*?(J|b7DHE$2g>RV*OH}^@UvX#yc8-efEB4E%=AEK$veCCZ z?HG+ev^YCe`m>mGouqRCP-ocJrW-<8N|Y#3Z5?$sJKA}@W5tR+G|MA{wyyY!!(ae2 z0$fmeo1Bu55^(I4p$<*vO5f+^)ZeoIWe&`}eNS)PWH*aJx)kSgt>{oNDNic%5=Ug zD`iVib&t}s+mnu;iA0ig&CieUS;y*2cVV*izkmn+G^%M< zK>vwU<{2~W6>lbr1@L2e*#uhMa9>8(&SVb!%g!3~NLmNU@$7;uyuHsU_LRuFgJw~z z0G49g)4@VjjL7WD#!)O!v>1%Ax!C09lMG#t|;F%6())9=S z$gOg$Pg2-wl%+R7iJb->=Iwqvd=yu3wZQb`g{<=u>F`-QrgOjWbsPkBt;uv?4lB#; z&29Jn_y#07x7vB-ilUFW>EKw>7QoEG%EtK$7u(0m0)XnKgmv@2u7njgZGfngsIG^b zrW`<{73Etygmx$@wnbS~I!3v|KxhY6*WalNLW9-snT3O&D}Ym{@BYM(l;2jA@UXB% zB_>IEb;z<&sm#mNC2%378g{Ze)l8jI8g`pC3=;-d?H^ZQo0DOq0p>lS7L%V%K9v-7e8{`M`>P(qKqK9P_Njih#xVkhHjuv1jp;U##EV## z`Dyotb%4`i-sU6S+3mY3cuXRrupJ;WB!gKfUvWOV_^^5gO;@g z&ya<~9Y@3wI!~R92-hs~aCPt~wM!Tq5(Kxhau;l5c z*ucq~z`?QM`JA!#4iHN3z}db8`$A1i?%-r{ zUpWGc?tfL3369`W<(1=OhCQ=Fp zo?+6-=9x-vSMVxSsClrWTovj|c~;=)(+^?((k`)lL8!cXqWpTNzB)dj*NyLSYn)?} zW@+6)QoMP>c&S_!KDcLgkqSx=NJT+r2+pR1O-m1R)i=BluG1VR6TwLaE@*l0r)fHM$c7?~8-G>DpMv0YbhmQr!tFdi`yc$SH5+@(TU- z&+S)1f@STlO$H#_KM+3fQ=nO^|J~qh*XdR`0wxkfFgI!)Y;THhRIAov*gMsL3bR=@ zAUJ-l!LNfYXK$Hd`UGP8wymGuRIr~BUD&qO-=OKW16Ue7#Idhc z?EV8Az}otoefGOx-madb;d5>NQ}f|r`aRg@XR|RpZa}@{EDY?Qb)9_LF}}k>9l!2t zW1Q-HZeL6GY0-noMHV^MLZ+rULg?^p$2e9^b8h;rA2G(M5X^ji+4>9)o|aC!qgAr< zi`6inuw+^b^qdg&a-?8>J|09F4&L_leJL~(&aVJ$z(tTB+{PQ8?+Z(l4weRSi`(X# zsVkjtiqKEKlxgOo8g_Sn1j-hmR&1IH<0$?wzwLesJj+}A&OW;hrHiafCDHqjACF9! z?7?F&ar-yd|LOAO~{Pnsscp_!vZ~8{9oH*z;Lpn5ESku(bygND8*Y~CsF71wp^Rb73ne1fZZKjxsv+$ zn_%_W(0Ad!;@|RRH)SRf>gsROJkbfiY|P6{{-JW74aP(e`btq8KUNvH@W*4@3}IWe zUu-Nx<~po6KV#LSl{1XCow=+$x3dhrTuJN12vkNZ8@|D=?gEzY=$bkeJqz7du!x}! z`xBE+KY+ZJU$({48%r?po3LUhoLX_27L zN_+?CLaOsKG)>g5Fq>hXQ0RVHcmcw^qbNme03}-o!h24`oTJ*NYixXYI82Rb_;ox6?4{C=_xAK8Vi~1AyA#9n9y6 z3D#6jImYrEWwNQq6GfjmF7Dt}|4;a=)u#*>1M=zDpx?ScXoj+dJXQ3$r8m~}vpVd? z(2Ugn*4m{S4b9K^xWIlLDu@sQyM1$hlsDwYs!hY2ON_>)-5i>`+TVV`w%Bp7yGa}9 z;;u5q!k~%n^-ecPpS^*u`CLJ3P*!+Ea6fxkcDg=RIIMzMa8?lP0w0;petd)L44bzlTrZ83!Sw$ z*nR_0S+w?BC}PG!&cEtv{gSZLKYQ0ye^X95YiF`2SkWTKoG&LUEsJ0 z8HT#hJPVNK3uMBaty}9D@ip_rMx=LO10=?#$&p(_IDw7by4A*TWWXFwU}L5C-G;w@ zWQIJGM|7Qh4+f#%7ZTSVswSEfG0**pX)j(}hJBPo457wffM*Tmm>Nu59A8lgPZu1- zdz>KHJ>~CWCu{fqVeei^Nm(gSPbB+Ut?LxI#cf~Q>L?D-8U%)%UNes9Sr#s}@d3M(q0_?#q+_@De*vqD$1`#J2Qoe*!lA!k z+Ok6X)laU!G*$Eq?PK+#3p)EH)hu19B_`bjeO++e@gTLVHyw|9gXwZk$FH>vceJX2 z6+gaDRFB07wK^CvTvo4p#}BF#@Mj-2U{iBEog?s^(^vgCJ0@cDvqLyDx?mt#ryw*1 z4#1Pea>q6_)+v2-WWu4Ugl;N+)g%Rg5#(!s&Aj&F#kQUvvUC<03r)wkQ@te}|M|`V zv~iQd*Py94Ym~Hg<=ouLJ&$Bs#cBw1lo<88MiGZfvTaK!MZv2Q3{{Ri2hqrKT{$a> zO--e9UY|!0*Gj7A%umJzVRud|N@7<=sxv**zOK(?Pz5N=U3Z$vpl&deR>6U?r!XJw zal5)ndEqG<)&^*dM@dEbPQ=;+)&v1IM#NzH#NF%@RytwVcBWz_xv6Nk0Q`h_#&9!c zRmE~I0lGI*_L+tgTNZ{7$s_vrhDdt2$R`d-Z3YYS?@TBuMb&NJ@#C2?aE?|ph=Z;c z-sOwI;hS2+`s3gQJVbZ19}883NQ{s1SQ$9_9WYcY7~kN#BFaH%6hn2e(1B=TIYkUs zl?AI66cO_bfX(jJIEYve*n~iRZ&6PCi0dZXcc+ks&r@`)og{t7@#W&w@G-{1 z8?hYYk?)`n@1)>hp%FyWcWEtbwHH@S4cGpY{{n#2ZMRExy5P}Q6j~>Ckx_+Kd+_|; z&NFT#{=F8W{B$1b_FmFF$xpKj)-hyGub3?kD&?2dqyL zc`n>@RoA08Y*FCQVfQ1%C3a$Ash?W`BlzjNGVr5o>V6)Mryb-Nc3VFTRc2i*F_PBo z)%m(cczOnCMP_Ii9#j{$4K z4LZ}IL&JjE%XHX>4-1&l)cgfsV&2~`!Op^P4Z9&-%&lXY{P9VqQfR|+V6J6p!{*?W zMs_ce4NJkW8qV&zVth`kC=F8ZZaV_gdKdhmbq5!Hh2tBrn8`t69Gm{(E894hB(3} zBjcQ)kCS$KIA9;%PHyP{dF*ub(PIT!Ab)ES8bj{N9(Wqadr6K^y`ZGNW4cwZE~!s= zY$Fo~)7I5rA~>4d$(N~Us}bAD3cih0;%SoBH{tOc>CPo_8Tmz%)VUVPeay@P@!&J ztz;}xx9(INZV#>2wY0QN--8>qhaS@${izKs9Y96k)YF~Q(wOSVFL&)&n77Ri_Lf+> zbm@M>ZUqCW%sah$ebws%cu+>fK$2-_R9f0-`I}pp2HQ(&hSmcV;82LtG%S^yRfhJh zLyfS}eX#pcYF6tG%p(LjZf= z&@{^QeOj7BcF800|3m8T-f{B#-6d5QD639fe02r(KK-Vg5V4Nup_xiu${#|_25z_J zo(>J-dpw}?R&%e0o_RlOai(mYjB)6>VR!s{R4H+}=|D{DTc&#-wjf>d9yFp$^u-}j zEanD#Q^3xc)!Nbyuf<=p-?+-pwD90p+(2@KiOn@bGKfq+8Q?dS44HZL_`?7r&V0e& z;_mGTi_j3u9IH+NKJ(npgfWtDt;1fSjzfiLpa z+%cG3!;T4n!0zlB;%f(hwqwUM>=^YH`T91pVXB$0O<*Iz>{ufkZzHLXzBb-YYJt&T z2#s}(EDWed49F$Go^Z_!q7N3n$H3BNsG6D4PKe^?C%#CxK1>L>8;zVQL$vU0N9BJx&-VrYJYuEhhW+)Mq`Pjl5$g_Uj`poYbn}w zhglFU>Eu{RxL$s0`XG&>9YPHPA3v(lK@XQ#$eS1XT(KgFsHSOKeaf5C>A!-^5Ts`Z z({K$n@tRJ)!psd(-;gZ9uI&cRU*EamGz*5;d;|CbD_T)E)9*GkMqO+LwTwChgz?>g zfK~on&!fltcRniJtaNGGIM_^na>}WiuO6~>BAen6=S4czBA(h5S#kkh%L**6M{>M; zMgyq)g(dH_W?DEl+VP3^BNHwESt@T*OjA~3ahr)lg9KjaSEQe%$WlA-7O_7-Q-Lfg z!77_vwtIM($#4WzGY4=YlYJpA12uT-B)$jCGiiQ?-l_4!kc((0^X(iQ*FdmDCvjT z{mdCQld`4z(=(^=W2PZATAAgYuk|+gaDYo4YBxg@m7u#+tYX|iLq}b_5DwDf%T~`R z*H6rWo}w&pKBr_ZxEe-VMY(7UEi!=ulc1zInZXBVHLq^+Sm|KW9MOQ=mCy#~J0m>` zQ`H!(JSuKeWyo%d+MUkG3}(v}gZjU?283~~H!Dz|moCS0X9RH-vNT!hG>LKY)AIqD z!75uEEDZR-;#lejLZHGRcLC{QPqV33Sq2Op%C%twTqh`$dBPp|A|vl?nd{Wau#+e~p_}8K zV2BM<%0mH9$Oh_FJsQ&(wf$lGtYeuM!rQQlJ1h+_daz1!7g=4=>v=R|=((Jbz>YtM zlT}bR`-QO8DbKSsq$stD{0oU^qnfMnoH>*8s1f*ukQ!!8I0CROoXBJW+h#H>krA@5 zr%hC7Rg+R>HNM^fh?G6NEQ`qVu=CS9b(+1OzD?_x?@pF+M`$8c7bjHqJ(^CRKKC;=od;QwFJR4o-9ID9=UInvW8^d9TLOT6u>wVYs{|CLe2loe-0Gp6DaRTgjh%fM1g@HPKcQ z#A9_xsP;+RN-pr2+n*$MZ4vh@Lt>ShJcdgA2~YeTOpY`aAlRt$t95(h7I&2vgc9{P zL6o^Fbzf8!9tSis;F4Z^ga`b=?NT*g}o)#g*KbN5lV<%e|S`6}9LVmW`InS8p zOIEVa!d~oV-sF)a(ZYhrX0y5P^U3x&`()f|NhJOrxamRn?!knW)ZO-8yJAO9!(Pp* zi#*&@sNGhmT)FaRRV!C6ZUyz0`uFER^^R)}or0Ii1vla-`%7 zti`26I+t;$Hq+HDwj40O(3W2EJN2k-HqY@d5o8@w-)JR#`q7;&yB`@F@B1&h{Ld=AM~?{%Q6uB?j8) za@X0p3m2_cX334Ayze^Zo(2F+i$I&GQ;id&p_rb-tZeX9r`%s-I7?sDvf z@J%DQy+e`~6A~d#=TMbxmkIr!4oymhfg6N#(ur&b1)IlX^x0KrVYT=)R6B5@1c|iM>kei=-SO`K- zVH13)kB^}cID5ubP9)^ZOqo7`z6RCV-|C8nP=jLh=7Q!kRQF7GWHb8$zH>r{LN|5H zV2=o;GgZ7#(dqJ5z#)MCkaj%5!dpUuTk_uNe7BGdLMA(?zH#FGb!mp?uhw&f)+K1uPfeZ#~c6@1;crS%SE?^*(=~s+j{XS!3Bqpif@!68;^X0m0##+50 z98AhsvSYh!4=|s8`lJlWXb)`op#QO(bkj^TCOW`%F`tPrl_NYbFc3D{COp;wEB>@c zlm9F7nL;uA3d@*L_cYMGu+%8vX*mG=dzp-?CZ$4iDcBwm+ z!LKA={PdX0@&%2hmVrMCp@F~$wp{UVE<@gInOnILvH7yd^Wa1HP6wYk0B+bPdMRZp zHY7MjbwB^~75Dki9-i34)MJV4`^k7#VsY=0Ba&xb!`~xSEk%xck38{p_!=Si{!d9# zM8q%6nW~cEfqQq~3(zTWqLv|GukJN#4t*5ikT;;ZnK;HbJuLStXS-RXKbM(il)9(h zVm?47fHF@^^e&m=7%x7mC4?1>~-rIqB&qZj!5S7v(31kYbi(LElvkG>P+u(Q{ z8%bWoPw(F*qa6S`%#LFKg+deHv}J&(Df- zdgZE>D`5r`k0H-;<{?*=#YSg4rr)tXC3*R-sYi*=V7%f?7aC+AO!#(Qj@fWF-nwS)ebTTWUzkJh z%!C9SeFjI$`_FRTg*wsqOjsuKSv*O=L4{4;M%0SN`>Srj_I@V=Et!N5WI?6lupzLn z`7h(h(!j35Z7iWq)g?sDGY7y``L{}RLhCbZf@7E3v4?hc!{dfP7r8L zhxQdQRA>3}=f@X*C{3P3{jCUc-~`6=ruce;t1@NEQMFIS%$MWl1W-!&nQ}@DerkR^ z1Pm4F)M?Je3v|Y*qFi~OvD29*6ndt=aIC_+aOi}xR9c{Wg;9v_E>X>^+=tUmCJIpD zA>dwMIbzmtUb?PcXrY{II-dD|H)QPcDY*V#fy|%8Ll;8AC zC8{1!l$U*_tr3qs;N@&q-Qd0lXf1nN3}^`Ch69A?%;T1ZB6o$DhcZ=18$K)MTOki^ z@asZ0+VFyoCcluh$SNd0|E+7+nV9VZ)Dqrj4>f3u<0SPS-`k^M+S4k$Rm`IbsmalY zIu(gd%pqcXa8I9-%>!|75kl>7Yc%LS-X&|xwZz|j6p}bi{5XI=*>Or-^0yKXL6q?* zPPRT+tWL&d&V#!TjJiG9zyKFE9_YM9KjyGy;u*|g&{uJd7 z-p$AiCfCbLZs1D=k_7STxB}rL73L_DfO&C5I^0Nmh&sLaQ5lD zOq!vN2dsn2W%lQLIiYJG(`pYwEpZgr3q$>!PhXYV&xJIo-<2~b+Mfs&Mg)-8Nifv% zEWEtxxAjv1s)IV#)spJeH|p+hkk`Lu7BKYQ6j-NCPOf$rp|_HMH3zcaxbclXT|+R< z3*VEl=@kVz6=W<|uHnMygn6{eD|LnUk>AAk#891|vOrqStGKW8*|8|&1;^P$Fv0w$ zLwOF~Zg)9G6`cx_R$^#mvObBHeB#t-qVLIAjSzn`Ury6rCJ{oj$!LjG6%`M6D$Nk` zBb}YhO2$b((Yo>|;`D7qX!Swoo3PNKz2y{#|4sRqKR9koTqqVlTP3OUKy>n7#4nt> z$d1TMc$$bD=keiO4yoDY^hE)EXvWDtDAcFHX?U?yX|(`{*LDaEEx@;+Gqr8o1EDiR z*RVC_5)bfMwCSK)hGKk}>Cvi!as6hA0BxK!32J=_cJE6*#+|O<{qMX3Uro1n?kCxc z<>Gg7{mDu*UHuMTY{p;J|!8?w?Sww%+Jb|g}UmS zU~l3Yb`1Tg$Ddx-un@|%*4RVjawYLAP-_vGtlHgMUS(nedCUAyb0C|)>*lsjvM$05 zmDZ8VYcD9r-xI>fydFLuUEtw={=$!acA-?Acs}w;oG(0I4Fhj*l?{aa=MW34oe*7 zfE5WLK|XRU-}pr0D~H~>O}6iQEN`wZe)gkBp%K#2ztTy}d&T(OjyPkPj|R%Kg!+)} zXn;H-6fAcvYTTGXl#;k?6C$HKOXRP;sOZS80WO!U!@1}jZOan+G429SzTE*5P_z!( zO1lq3v{SAO7*?5%q;vo^;f|Do6RK3q1rQuMMb#_^=Spo zyDqMg5F2@Ta67o0VCli_kluM!BSgDZmiAi;wG3Y}ygOfrYxx34^1$DXz#sed)7qqF zcKPgp`8ji8D;heZ$aT|J!glBY^K-(hQO#=AhA+OU1eybAaAXk73Nrm@;KK1{-GQ;UI+C0+C?4l}2;acoQ5py1#kyx(BhD^2BOGm;EOPk3}_KvdWP zF=mu4hMp(sXR&sw0pyN!77{4Ish8n)T^mi~==6z$d*F~VSj>$TdCI8Y>*5^JM!`=5 z>F?|4GOScr^*or|O{kxsf>32mqa8)~W+6W9S%(c9_C>*A!xqNioAaF75hbBpgl?B1 zbA_NkMTU8n^;-k|B~iAwNH@>ot2G}Yn~MH5qp`%1YpRQoC$;+iV+jInm7{<;wKprQ z!uawG(L+^|6~IWLCa5b@P}*BZ@vN{XqP&j+z=hbU8yBHbjvLSym;wEAGCx}mpAiiy zTqn!uZven}Jk)7Lm!a^j4UH0YvYQDOdDkQ}j~aE8qNcz`cziK6S-?ChRcbk~ z@@6%8*RA6x`@KwCSE%lUZ?;6J3> z(Fhn-%<=;r4|~qH6k4=y-FhgjKmymA@ejEVg>=exbY2Z1e{y;Woy^2 zTe~#7{3|Z#ziEPMucDojT;&Og6$*M?c{enUXE_)G7Uj@glB4rZ_|httByN}({z z-~JleyqE%JEp5D=q!=?d!~(sxIAfIoiYsjC+NgKw(W;Ye0vic)0ZD|sFAq`7*QRSH zDfWq7VA5U->5lz!tQ;Ut-HH@*vMWZtJm&C;o=wQk=4SA3iT_p(xb>Vlb7sO3*`4>H zok-x=GFSDr)lJxg=-jzr304SpS~&`>graMcHgh%9LV<)FS3eoB6mAn6y_STeXk#I; zugYu|YfZ>BRWbx((}KZ@g%C1Hm5dayk3phgu<5{KwlMe^uv_)2y<2ZUGT{#*DSHM$ zk`PIMNjz7|S5n2=>TxbEu;jDViHoF1{`_rV9XT6M8pVtm)g4YCeIlkOD%IsY(C~zi zBf6S!@k<}OW__nwQ?PqloE4c|j$aAWvuy(ZEW+#a84rnl`vx=m?{vKgdr#lpR@0Q2 zL|dq7ChcY`)9-&k;o?W4@Zlf1J{a$_(PaTEyncNXq2*B;<0_`V98nG*aH^NOt;64Q z+9sPDC%(p&tR1#b1Wi#OncT2{ZTL!nvCGMFY1^NAXkD zYZio)%cAaM{9L_NECeg4=w|7=-{-||2=7)S7`qmF$WmKlD^yvrA{!O{0#@OxRo8xk z;fxeGaQ8E>g3FZ<0fVXFK~(rb+zaj-fY1eHKYdx~fxDlpSKCikAN~EgsyK}aP`k-C z6PA?tX()V{6wVKY7*M7|;&Goa7}<2wZ%vzalO2Ft<4>9`v`Syp@WZ%zMkxuwW3Ezc z=9DQ@?8|L({Hff5{;prura<)R)8864aBZq2)IsipUn#Ml*Q&*~RsfrXJVz@^lBBbs zsj_rgsG{5-W%J7*D@V~tUaV~J%(Z#4a_e2~i_6I0GU?|)w!TkXWNH>sDM!y`L2A(} z>3cgwfg3As;>UtrQy46c?UMs_P(%#o1^Jf)i}I-==Jhl{y?bjVexkI!w6VD))d ze?H?AXu}TkSe+Y5`}XaNrH0FS4CRN;qDFKE1#T{2AZUFFkeKnZ7jRxGwOS{!`t$-t zaGazc<+BtOg0n@1dJj6SL(qi_EgIGpyozJ~=u)@t4-X{qY`akN?0tN~=@~^G9kvL;Wg)fyXcs}d=C=4X3Z+?M5=mKZB(Az@UdXs zA%P^_p0+X~BI4Ek`32Zl4SGFRX$EzA{@k9uBljFPw?Sw!nInW_2!fr@C`8ZG!LFx+ zeL+sS8UFLvY}d(rr(z!UOV(TXycOkli2G3*YTaMD<{LD39Unms$s<#6115`PRl)BU ze*b{PcbDF|nXs|)PY%uKY#9n;*J1a)%&OFtEQf=o^5_DTA}zs5-D4>1Br-RT5sLuNjXlX1cQ(+Uaao0`_3C*YPb6;fzM`GKXDYqXF}`u?*QM z9jtLWSbBb@i@BWR;=Y%pe#pem#?*FBJIe5*W4_pY_(zk^`Z`9xTVf?gY(4GUaB#n; zgC+j^vAoF+FBn9xHR&K>ng3H^hH!yFBs;zlvGWW5%NvQm}t%5La0%>yXs-GyLY@EyXW8 z-+6R-m+ph)@~z@f(1Y%9;vC@cvugWT;v+)mUpfpgf%fI;QWI5pxq~BCDXf_z=KD~q zy-O4dB(#@ERZ-S!>zvxfZWE*{TC?++jr~Hw3yIoiN%R`Masf63-MI>hwAQ_LS8&xhm1l*w-*C5hy#TW~mU6$RoM0tyIV%T> zI?rrIT|{iF(eu95W%;2~rnZQ6aT$}t0|dJOm*J;4KiQI4lpb0aYudGdZM7zV3m8mj z4%j+p&YZ1uPCGZEi1g{~bUt*55i2X5b-Ji7Ae~vy;;eMbTnx^RSu{@xNw6vWT@0qk zi|Nz-t>Zl5+ZOU0L{{rY-5}Q>KFxFX?uBtr)y42#v8VAm80gjP!*a>jx)szIz|SFyBGwzeRg}^2nnyq$))d}Zg~aJnc=h^bSjOXn_~=gjWXnXOQqKDA|Y@MD~&{cX18RMFGg{Vox{S+;6OYU-#pYfD42{=}F%$Fa_4c^qlD>E#H`ReMfa@r1Q_YAo3p z8n|{h?9iP6DmzIJOOc~43sV6- z4UMh|*SIt`Tcu-#qT)X?)b#5Cy)s*fkOdrsHj$LW1FC$rFpBJQ=doM^wB3T@w`r+l zaqnTP$>t^RvBKA!%h3K?dkR1Bvt^7od1=Q6kwB{-Z!AfyX9FL*NH&wrc!2D+O`2HD z%ugOm>|?=wT;!^Cm%O1%v90M%A3`Fn)yH}7;_D`pYegM@6Vxhi^1n~MMe}xP)X^tqD z=sYM|m7K`Pshez>c;)DvI{8eVA&@iR>7)cN zGI=kjU134Pi(EGKcp^RQgLLesyN2*y>3ohcST@+xcigyf$DfkaZzS33w>piGQwxNT zrb7s?jri6Y=cL3Er;Z$i>{#tetRMG?CD@e8Rv99RRihqYOk&c^n~|uThDRmuv)E#D z;!>gUaCDSWeNfeRlgQvdX7#L5W9);JjoTTl6Q)JA>MpfIY3q>^{$o@j)_|;qA;p=K~|r{&cY3uE%z7 z7&_B}REB?@nCh>fiY=omaVSxOn5oy35CjTPgGP9*Q*}` zh#v6=*d{Iu=fI-mXc~*0fiA8wS11}Q%L=IaKk;_;Xf!mhe!}7G3V|&OF06<06IPfC zMe*CtSRIV#=w>k9fUP$bgmn}vH+VncXvd#)yUZK7@L-*`fkE0&GGp*IY>>k34FGX* zX}z!kwpeMQcH)cD|OVT zuCimeRo9j2yt%SMzSv*Pn>HtcgF}L0!3pMPuonLzk!CgYSSol1lWm#byN#9SlRAN` zZ9R;d3Or``f_C5FkuV-&9fL?^;llE*&(|*$A8RBz_U144Y6Nh&K@@%iS zDX;_(x*u*kXaGyGmWmQmHBgDPd1aC`!vmuwz22aar#I|j1I|=t35xAt zMXwK6X5h@d%KxAA5V^Mto@4SQgP}(E34Re2bQhMRoS4cr z1l$+L==l@}U@fow!8?DO@`%t2@g}YlIF!aUD8d zFrk7vIEF5o87TwnDBo7;v@P+l9HY4$9GnjJyA;FaQRZcmP0vBOj&ghOB4x4640+SV zsrmujfU9E*x->CE$3ffHnt64a1WoLAA7O~ZT>$BJyqwY(Pd|DW<+ z1`mL|WbUBOKNum2qt|Mf9eOH4X(Pet$u+w@Pb(tiwFfqpgko^|Qvvhdu4p@26fuXO zOdXiffQOhILwH|O6kpLo)q$x*j*kko9~?SjQCX~TEqW`&5m<=}4p}5iH5y59&vo!# z21@c0>}sPbrxZo&zmMRpDc!FP(FO3!c_Z6L`dvlCtQ$f zj`tJ3d;_5?i@J?jxbP@jplb^3y4jWcq)HV3nW74?=k0cfsISG_T7<2Wf;;H0ycLM7 zTVoyGMoqT+i-sex)=A!7at8W4)wEA$b;%j%hEG0^^k?4?*sp>AeyqCjeA~m(>FSF3 zBpGT;utC|cK6Bx``5%v~xnq|D-QiYvzkaZYztfcoXQ zMcy|>CUJ#i1$uPqvJ9rkBo+~0sIi|W#+(il0HOo!qpU~HdD(>q-Ki?YRvD~tO&|M4 z&{qW>w{ATmQ3Hi1mxAtd=0L6x9Cod<%(wwr{^6v!R4zX?&3fvPe|LVUM+JTEJap`Z zK*P*|PBF-w4?`=8QeCo%$liAitR5fdX!j2X@=hLz+@>-6(wiyDefeqWqW7_+tV1Z@ zofB}j2`$z{Hw?E&Wu9WmbB)lNs7RX4v$8K(Xi|EbZw82@5O)hq0<`m}^5 zxl2fQJNE8nobshE2*Q{tUST6{TJKgJV3iG;USUXWpw3rJz;ybATQ;4iSWTUV=X-78 zZZi&=Q!&;NGOv~9=#Dxr5;WZ~qjuU@hdSVa?=CQW0gb_QhbTG@LVx0Wvd!)0zrBdL z`p3^RN5g0dyrR4-qzX=2vEmg9yPUsPbBV*rq|hfGM}l+ne(8K3Ou9Ni$YTI;GIKI{ zjpSvbq{q5r5ODY+<@fxwy2EsK-Xe1xFbSKFp-pa?Z{Mm zY`d(Fut7*fG1Mm}b)^s%%5w@Yr9U@C2o0x)nGeU;dW%?_P`oS?{9OFnd=(6(;@ez_ zD-z*V0LNSYY(Dd`;e7wh1r58nsjXHd82-`gck%RHiR8XSx<)1FB#Zpeu5Qu!=jeyE zTOyMhNYVnO6+XCUH%XwW#}PB|L;iDVYRqul%g|K$rxW?MI;Oz=`n{}9pa)5;?~KWw zK26)hcAO7yKU|wy<}q0OSl5Wxz6&`d#nx!DRQ2h!xKVzc_!KRWRB`_2cK!6__SiL! zi%GtR+cT;n_%iXuN8~I8M5yf=Z$R3(XA2T3d0fOy6HPq==_#Ttzn#8Bq zNR+J`|LHao=ho$@RmC=h`n3yuz#YD+E$FVG`#61_?FP_sA2|j`!zK=pLkQ{%_Z=X> zg6kMqHQ1GOdy^*GTvrgf@B#y>ubw|{J3ET#SoP_N&}FVV{d0l9PimK``a>OnOS0h+ z!H4r9G}}UKeoldAjyJ^;zHi*P4Yl5v->{=;Klt4-O#7R=z+lLeS=K0F?i0Fqkryx0 z$wLhdBYN$nW9lXJ$DDR7WATj!dhMi8YsxJ#RP5q0Y;t(`I&*>pmMAkdfg;f&1X#0ft6?))|(`^WX(_- z@mDK1wNuEi98?qQ10+*Pf>r^t6mrIsW3-BqSJsgE3=S~b*0JLW@|bxxRcrVB^DZUQ zn$LANNv{>`LH^whI7Z{@W;ZJ=i>jSUc1(*R=Id-BuyGSP?16IRk=c1(BR|iImaKp9SuFB9i91m1NrK0}eXVaLbOaeRBjOF|$Jf(MrrcP;KN#R{b@R-jNQRlebN=JzP&>JeZaXzp8#J zy|7PC2E!iBno3gLb+`i!NnQ{U_L~`k%=@}EuG$`fPkk0Hta6znCrNIuq#@&Ds)7tK z_ZY5DMXnMSW4~sAEyr>zE#=H(IeyL1bizNzUi8*g{7awNYpl95fO%b%%v2=z4f217 zej)hH1b@7dlj$76_+-wUPk3_9KKPombP+#Q-&3=&^B!Ad6G=+Llgw1rUpSsD@2@VW z^33ESFhna2#^>2DOjFbV;l`{^jq(657h2fa?qN|?4zu1e>M7K^6+dJ#2X(Y=3Jzni zf`=X`6FS+vQ|Y8uj7(glw6u=rnS+bNaSKJ&mve9`l%3hNmvIFb7x(dpl5qM7GXVY; zaCx5U0%5?Ma-~<_#J-`c`&5HI)MxiUFM*kfLYaCI30AB}qVlT~;wik;ip|6&HA24> zOf~Uc^i>s^y|6zu8B|nlAIP?3=Ifk_=bsPs{@tNc7*3?@mwGAc8?oj9#yhPkX|fSx z`NWDe!thd0l*Y0Rryc-PuhMIbQ|R99-GD_3*I?|=yk?GS|0UaQJi;28J=6=|t!NKf ze7PUt0TzNO05cG@VXC89o~Qky+L=1V{+xsF*aKEyrhVdSAU8(B{zLYce^?cL4%th< z*~KAimaJJ_T!^7#cFu!#hT)U1{NBK&wXb)6XM$R+4kWK&($#l!UvHl~ckTc?Ha-DA zJJz$?gO+xZ?pu=-Gd%|cvg-uX^Kk~Zj~v67t<%INImfAY{g_wUz_Xvn&xIYwTx(Er zErXTz3{8JYckJyf;k=27Vk+K|w=C$Hy8_m>U9l_CeSt4XLsRq_9;Q?5&m3nW!^6Yl zuoth)q)MA`!j86rMl(}(-kMjt>QC6$@uyhZG1m5m5-D;i8oF^P`eJqZV~`3OC%97k zDM73}5mH?`)uYZux|1l@FBDCg`8#Ebz{n;Hf_9VYk1xmk8p!}1U=pFS!SJjy!o&yx zp&uNxT80Ox7@8o!iuoY)hJ2koH|RQy$9~I0fR^WQ7`pBz0Hy8-9T&Zbc|fhGf9t%J zk2yL!JI{i$;mOr~3jmCYe8o%5WddE`w_}}7p|C-1cv2rb?c1I<*immEW9q5ZVz7S^ z&Q>J<-e_Izy?gB2JZ-RIA!yIuH|jOf#jley9rcm|nS~%yAEg6j9GvaA@Eg)CP@GLW z`4OWA4d_!H7ilrU6Hdvro|f3)4MrqoB&Kn?GW`iLAvjy}db&Lx9U@QlJV!Id?pM!q zWHc%aa7yJKkW~#QyNKc=c`J4erSl{gD=8!?wwJ0du9S&VHhXlE@zhJOCv`d|VbJ8H zo}6<$HU0*RjbFe}3H;>OYXIeGry0I+YRLp?zpp`8JS2C@?`S1|!l5?qTITaKK1JIN z=YwvH=-;nl|8=k`kM0^)dQTPv!C6eK$bLK46;cC9p=| zmT>uQZbncg6n)RpsX~=D$l>kyVtqp7t8IDEH!Gi`_=OxZrRb;!sj{5HHR}F`jLGt> zUpNX2JxhxP2gCXYs9rcQcTxJ24gQXogQ{_46;kKd8I()zyRxwNA)S!th?M5M&2G)r z43|2G__5tPMh47%U%pLx!e) zM(hE~(gJ03K!-PE%O2%QMPDZUS6GUjmqH|IY8ZJJn#<@MYncaz5%%v;3i~}si*Eun z45NdDg>sW28s~eq1ko7GHH2qTB6_e;FcMx82Zt<$)z%rQXA}yrNs)|T0=gxtu8Kp~ zs+qxP^}ub{+pH9O=qSA!-wtKne|;r)%HGcMpW$;IHtZ#`&0yc$%#ANTA+-TqbKp)T z)pa5Pk|HCa7MV?94*`js4Lw5^>zAB-q*`IZ&tfJ0e%BPSn50+y-H@Ch_?-qMp%3bK zJCz;?UY5}%ma0$|zmw50F6Md)zF8lxxs-Pwlc%4}CDeS4E2qlXUtS-C&Zgnah?-!6e76KhE0FHNlbz;dGDWZeY}>i9xUnEtMuHC3>-aP9A_{%p~t#T(Sh3c+5xgbE7D$(LEra3Oh(0y)5f zxl)u|D@_rspO_)4)V86UY}29Y$$O1EHlu*wqQ`}(*o@#=G|%wUp0g;JCK=(g=$zrF zJf&VLd;BP>8iclX6c+$u8~L-*JjfYh9X;7MyFGy;J_22ynb!YfJw5=Vqt zM`CKul0OziZ{$ zs#U9BTCIi?v^!X^9#f4Lq3mls&4QT&84TQfmyBZ!C1x4e0sRyw_py?U&^as|3;H4) zA0@pAp6e&RlspTHnIQI!m9DDDUvoE&hY{MVYsygRI_f5UhKNn}B{UL% zfCZKoW5PWAb2%G**0vFQt7I%*M(3RYHaP>VLk5KgnD7pjcF^ds1KV0!uj9AWpoWo& zkH?ei+L;1^+&HX`*`8m3{b0G?&B9dw1zsVjo$|-v6w!dfVe3_IW|b4+el~%P4H{Fq z%LG7v4Py@(N++fZXRZrH+x8lKR!<4AaDJk!FO8!m90`E=mtN(9Q)t3vOmzTMIk@`{ zkBH)96EME?RT6*xVFHfoaG#yDSCoPr?A7z(e(!)`eA;TZ>3Ph&d;j#@pRiG+mjm;x zHv=DN!)whC#GTO=@#~V`aKCYEWanBR6mrY4$3UB zKAfY3`m<>TEPg~C*d!SF0|V}T1)Ix%C4;v?!IId8Oeh7&sdpP``Nm8ZdXRyt-$dxUM)~8dHp8<`fF^9FWDE;W7 zp6=Vxc^X>|D`J}vVuchM%lQ}~nEnIjo*e0}c#J=PBD5|m2|2Dt=~RQX2F0s<(@~12 zA)$IS%>8^AJD#p!1+Ku?l+3(k9w=?wHuxk=r=1y^v%^HV;zH^gG{aNjP{_)5e~1r~ zFZ&v$aOw#~9?lf-G89=odTE}7nq=T)yc;GTx_+YvJm1ZuMFM?o#Cyhq=2RL(%R z^GjpVTb>1$w_Y|$+9#e}Y7rmH(WsDI{pmaB?3}|8qP`&m%l8EBaxg+xPh*5CSt(j* zS8#9y+RYnGaN12KB9Uj_OhsnW<7z|EvD)N2y1y2sG^O-DKpPRdMAliS(A7&mc&Fhs zlLC9spC3a>N$mkjYEDztFktDNhFt-j)_aR=YQC~hj+*DMD+2|YZVxL})BfUsnIL=1(lCBJkpA64O9?ocBEe@WJ*^F!oTndw;mz}~46gjjxg#tuaQ9@G40+O< ztWVA=<`bysb{1`2a02>r?#Y zZjkh295spa);l`AA=nc}N+G~@r-)s~rPyYk%ySVA%ps-mx=ux*OHy2te!`sb(Kfc^ zdZ5RHhh@7H4N&W3*K^1PtVPv7s#&!&V+SV zDeB*wEnb^XoT<2ge39vqn>Kz?w5V&NwCDPit>hJ+7ek$EH4PE(d2@}#6e^oi&uuCrn+t1muc;@6Uhcd$2;9dVgO;3U8*fx}J6@D2i?@Pj_ch|^Y;a%}>T1jCX%y~*| z;wms~I9T0V_yZX={W@hgdCN`CabQf`Dt91c@p)dtLs;eT-Vh&L?qet48QibWnT4v+)jEOlKXK;!{lbQ_m^?H=)cPu);dkhg9ao!E2X5Bd8`z?g$L;3>XYQ=v^n_B=Y=@VbV#7Rj?8hjx&pr4LhQ+J9Wf z_c&!Z*m{{~VmT=ZVGpH)rK#<+tFGe9^s65Z>z~~&rQx3+;u5GHiuPTquD*;kS17EJ zL?J<@T3_cVItdnB20x!2>%*?DI6>}d8Y#g-|7AM6{&e?|k^j=Bl2n$#+#kqtKvlxX zVxu4(Y6H&2_NeL^EYp7UT#LCZebW3?S?;4@U8uAaeI?(@uVOA2gRO=`Sy>*aiLDPN zHG;{NMfWwa{m9fZDja3yrOMM~Jz7ckom>vTnnA!nWyDs>%j9DKReB{~WNoRx(2r6x z8*^Tj645d_ZZ0fbKE_JHGI%IX`FS5Lu?oBKC)3Cf@kL?=*GKGWZ2L}_yT<(Ca)p0J z2H3_7u(cUr=dtoZaMN=hi)wjEIQutospR0D2)4F6NUm&8I@U5VM7V+S-X~|d?H~F4+##~1*fcd zylBa_LLz_Q5MB$QEXf4=MGuOs1TO-@qXSKeB?HVFznxK$6Rf&yu4=V4x3gP)$Nj5QcGvIb0m3qLQZ;Rnu6kn@6DOx|B^Q2qpBhC%@zq!*(Jk9shZ8s2wBMMChR{ zD7BmJC(q(O_EVVMU!q6$j&iXnuMo1wP!`g1@6^|dJN+8c`J0hW$+7YjAQIlw*0ILUkR^(EUbV^sgm+S1WEZW7+A@CG*{E4Q)+LqPcl^v!ofFNq8`lX zls9kQ586R?7GdWletsJ_`rwzmkpzXaDV}VRFb7uIT9|`of0cRBLUW^C+-)P!ZtK{&_Q=2KdtXpG<#NC}eT%>g{d1fB;ck#u6D}F3aNEKso+?SU0W_58^!ww+! zCd=eiyE*UMG9@*U^J&PfQqwK4N*6tuXRcqJ8vogQ<5AciVZ*i+FwALoc@<5{pCDSB zV?*WWL9$egGbm7T@lPIPvP4k5WJ$pIMR9XfcK_cnA!;9kwbQ|uCm3_@D+B0DSauj` z&X-BBJ!E>YDQxxvmTC^0{Z2l2JDbBFtH07d+oSGwYuA*`%+-_|Ncxyax;N(nV(=!Q z2lVhEIr{iHy!kNIzx|dK%XF^1Vf`G+X`od-XJ7J!euQL#$QeI)kcuR-r)Eo-1^n9#pLt zs>k*<3Z%Y?rAAldG_%IVz9h{m&;2e79Y&NJ;AV!MGKa&d0Z~AoDK2 zWgQ9&ToHdj?+XmeXJ*j4lyHuBHXKhk94e<9T%{Om9n&{dbcee+1%sm{o*)#!etAT+ z=rc&-H--|6XCqX}do2_r&=Zp1n%D3F$9%xndc3$XUTb{}A@H04Ou0k!I@3|A7NTS9 zI=Xz=cJiH99|`V#X>V3X{0?U^x|vxTmx$1O8iN}EP`KxFP@GVP!Sav255GZ5ct9Hl z0>WQ2_I9;4r#!Atk+xu(u;U~>$B`b{_=Qq~Y?%C!i;?}7(2n=yfkO#|u|KzlG~UZzuu}tKQ$8XNHWK57 zL|19d-b)S#YAcPvTFmM^j?a~r&d z47_QqbLbopzJFB1!z?0I*n$p`4i{&Bv(ufl0ZiSfswfeQdU2E~q}lk80XYq@R_NEz zL%k7lzD3QCeveSZ80CvCbOTZI=vjVG1^a(Vn+oM#b5`h9SVyYzlmzq8r;!Ay^rWNl z@S5%5e71y%td>R>_)Su-=(kNDpmW+tuU#eamBy)+oY!L?D^(5E!ldCimcEAr7PjHj z4pMG>pMyyW2yJqxjqdTV#c)~O>6>UL50fSWh*5VgCbhndQit(AB|iIqAhoIOvM5zs z!q6oF);d^D=6(+_vz8#A=*kys7bSNS3{%$mAjgVY;;&@c`mUR_Kb5C)yD7j@;9b%{ zcvP!ewU9|b^-hulq&llsAzAhwMuEA>8xIavEg<^bqg-TJf*gCPN|ieP@_VZtO|XR1 z9f-C`GPOpRU=!7NnnlSc)S+H2UK1w0mgSrpS$Q~Zl;tN!Ta)sG;Fk-I7J zS>@nZ00m2qib{~>yHsPHx6y(Jv1A2|EZ?!_L5;iHP=ZY&v3_>{%@X+L1;#5aznvji zG11>+K5K<2_yP>293IHAZ6s*{j2sq=;@LI?8{~W+AEo<-ip~i*G$vv=7m~8vwM8~C zQfBo`i(sxs*BJ60e)enhTPwF7x(s_hH-zaS%d>mT1W9VF+DsMzK1zHVDuR0HKGdrT zY_6yMlse*!YEW4OD`Xf#1YpQEaz`}b?WsHjH%1q2F}p%X?pGkxC=AxEpCn^ZyZ!sB3a?bH0LWV2vvb-Pd%I`fc>n)PKFYK-7!K|55aggCgFnf z8JHnxT^i(`vaO$r0>mf^ZsB+9~+^zhwol$ z3{c5pp6Y%dl4111Cl8(D_8Z|utMm{17c6*k$ZBMkIs+%=zU!>?{TlgO>iUXssC|HD zY`_4i1)G5ImEuM$SuI0)6A-x^F6+n%6B;z22Youe17olCT`-6+Vr)CuSMds7&*X`% z4b6sUE*b8@(|Mn*<4A(}52fQGvV9<)Gsrvfd?Q1X;ej3e@EY~|B^J+jH;9^N0`gMw zl&^PWU?mD1iS#`k#ZL!Tu!33Vh3giktLHl_CY8F2kG9chXVy@ldmu^-_FK4cQTv(6 zx_*PD(t>+90`d?4|7{TMo;LZGc?|Wxv*y$5Rp%aMLm}1eC1Lh$C6;N(241(ZPKaW) zA}{CyQZCbaazL_jNHX0Y$V5&FM)Cy(w~m&$fD~XCa+N+FC(D0Z;%rDDSvjS296alr zB80Wh238W*i@&O92j{^{9nf@{?KeUy3%v+aTAzc|Lg?QruY6fZk7)oHutP@tEVk5$ zfx=!OWK2H0`!ewvV%H%LRD9aHc(;>~cciZ;CjyWbCB90_?ki34=_|QJJcLY78 zi~47y!0o-%a)G}fH&Pc-pDyc^GJ`)M{$t3vh}mTtxpEJY*;752nf%%R&q|>4%$YNv zLY++9Ka+Uv0vzlX0NK)k+cfdA4>EYjlvBEgVGX4L01{XAsVi1i`$P3>Q6q+PW!J!sw$)sc` zwv9IhO|dq$y)!mN)%SkNmWN8r2@4BAPx;1WtY8ZGR87KKvQZu9zO!FBTR2u6`3 zD6u+mB-_Nk3^tlGgQeWI3k175x{N{k?9of0z}riaV=GtYe(x=nhFA{j$!>v@T&|^( z#$85tc(qnrucxnwFx5b4k>+(f37B9^{2THsav}uT;(I~oTAsx(WnKblNo%O*%JMu# z(#ie)imoPkcxd6)0tFV4A>0EzNP=4$kbIk)##!l*49|Q#v3em8*Crk!RV8Dw++;}Q zBH+dL;z~(NAsLDMV(gFv*fhS_Pmuh*mO*4YU*?nY4BiiF=lGZS9I9^g^Qps4Y?UiG zEh#y3W^;Fh=^WS8TQ67o9c`D;rB2= z7PF_(r91QoF%U=ObS$%ytXUjOr{pWVfsob#7Fd=7vxmpRo{+0@+^GQkhOV=}f-?j$ zK2}>Qd>X&`o|4QASBN^3F1*tbEQ?wlsi0r5GbQ*r_>W3pn@9im?+5WjUGJ0j7^n7S z!2(;Mf=__|n=)AK>o6>}vTTT1=vA@O`91D)5Qt?S znfS_GQ>8yvl#u42-kFPSK&f;efv~^{XP4h0f9_A}*x&;~`$grVNANK|>$Gb1uvM$Z zQf1EEF5IX9E_Tl22zF$qN_}v965%lJb)q9lTEPKe!oFd9Se%zvRG@IaiV!RR53$=B z$h{L|Lt$B>C@ottelHkwtZ)naaz7Tx@&NpvhFoia^Nx&+Ou&KkC)i5)71Tf1$B%Dr zF0}l6fDSjTXztZsJ3%;=*ejglqy_mD}nb$Zu*%-nueN~lMsrHx~&6+i7^`(_v6?; zprrtGe)%0-so+B)=HLlEOSwOr3ZVQ*I>vXny}!BlD?LCK?*vmI{aCU}asTat z$iNhd{2S>-rd|?_oA!dbJd$rJH;9yNIwpSWxOBmFagSAT7D|sjUSpWUQ5=?x9@ZQ=H7o0CEmkLwpAl$1fzP18; zP;?R;gnuRLL!P*EupiKiqp;+JZ?nFJU2vlNY(|Cq_2TIJOo9^FZi`^Mw`$2adFh94 zvn7=WcBs@~$qEIq5CJ6R2oz(v62w?WItOPEADmnvOiO46w=kbY;srh+Cz?5v0Lv}P zd&byZXR+K?5mYV?2{A~^Kg0T;7B(NEbbLH?_lu(pqm<572Uu6}B~8@Ae}lEriH~K1 zH3*#Z

Id*4{F{m_*J46kx;1RDo%whFQZh!1kC4c0XCe@!TG?_;P!}rQ8;ZJpgCr zi7;3{BE+PV;`rQdgB+(VB9THlqhtB)(VKk)D{Us2{Se=e=CIih=Oi98ht2*i!TUCw z!)AZ(YNH04!=H}78%jI$qpPU{XUcjX=%L#1)e)IYG{c+e`y1iVh{G@_*OeL^gLiTf zAXZPuLj+ji+jt8%KG+&}0sGkdix&Aj7j0pcEEFTqARNDIZiFnJt;iNZkM`>f&~eAF zXYi-jor{lJ`U*!+7o<~i8<&J<=!%$UyI1M88KO@339r??%(DyTeYyvV5yrllR~wv( z_&G<3L9z4}Dn&CK(hva?CH!<|A9B!ZYh_XXn3R1cNK%vin_is!lRJ}{{hIAu{~jN% z^NML2o(JRW?kSvsFzL(*BH{dE3@cbFN_pM0`b}i9iE1^MJLXpwTisHj<>&1I=&7>j z&)|eikLW_IPK|Q@ju4WV!Ye zel=-;MG5AIqJoZxG1?hvX9eVqqQ8}zNw}P*Bpll|+4aHpuNi2n9zKDR(njk6cz%!G z7_$cz0;Z!wCTyRn!&u=@rya=#rzH8At_8}LQ<{kK*#)0kE4hZ|7R1jS0qj0QHx0Rp zu{5^az#3T+23-Qvb$B#(DIkX-2j?M}%*Sfav8MsS;R@)P-mAztEg|)|T?`Jox(OQ_ zz60i(Q{JNhsuz)E>U*3X78aI-Vz#noX2JDQFx?nDx`HXHPsp2l;%gh8SA+M_*Mf;y zvh-pmQyfLtBt@V2u~FS0LXI-nZ2V05Wtv3qWU!~I1(MhIEj!l!%ytQ0$^!T0uNX0D zd<42NckDJ4#X^!)i(GDqkp~Zxaz0uQSlW~bVvA4+Eu{TE1q;{g+F%)taVc+UBorIgjpqLF`=Hx-2JgxZ|Jhum33cX`v zpY)Mjlf9S6rQTOMZFUYnbnIB_H{E*WlnU-a^DNEooYXVf%98DD;9Pg1ONvMP6N_5G zo*iv~CFkwH!X_}*a%t>li(sr}Af#GsVh6jR6_XAj)2apv+noV6#*D>bOSO48&SZ$4 zMg#1TOVXhrQ>b;qK~pHdw;7Yp#8$O~b**jg59XWpwwR7c28qJgB8<-<*X_iPb|v5| z@;pKt;H!VtQe=dy##C1R^(zST$*(-mtOAJ5QD@JX7!s<$_Rz-i|25E~M(^tD$HQl@g-4 z*|aO_z9zpNY#RqRA2s^+Z+M-A(-WooJwQo~xCsVg-usAca5d&kYsEJ`6oLCI1v&@# zAWnM(%+*@%fStYPb(703-sARdVlky|FxikA+D`@mJ@f2i=Qey<&)hybG7onc#o+mO zd-7?oQrX}dbVl+7X?E=@wxynkYO3s*8G~t?tToU7F_*4qz$lJvO#VqL3p1~BtX!L{+0Cgf-D8!!L zqjO-eHcUQb_-W4ubHhi0kHWYHro#2i(z~Ms|K-6<#nxl|ifJ-Qt{mWqRd9b)nO~SL zZVf`mzDm3KcxiTX8R!tq_RN3^dWhL}?XM_I3W(e&Nj;%&^1WTKC>%Knrz`G}su5aQ zfArYs&^Y-i&?ud`Oq^Y?B!L19NRlG#YprI&QDq&?ZI=lPfVJhiKILh`;B~fO#bfPu z&jA_6>qbXqbh*Fn~?vkEsc7 zmNlJn08eMJwd&rt?17vYSi>a8Oj4c>rmiT_qGPaf|B7W?5wM>6e!4ln_;3qroDR=l zkPbxV(@0*KgufAO2Xqg zSRt8g;k(bpq~CG!?A9+ax8llv8q$g5n{jl)NXYQ>_^{T{aT)%-#Kw1ROS=4S7$)Y7 zbPId)CiylVzG|33p$KfrF0Oje2Bfp?XMsPI7!XXyG?o_Fg-Qcx*vi@|RylL2O4C+|# zJ*4s>PNqJ0*WE}3&f`5_>+ISymuKR=$@lP;200t>&HVwf_p?$mMzH01>f|f~0na`U z^K6D0`Gozh1qujCGxx|Bvb?W3uWZ12QJVi=9MA(rj3`?79EvQ#6AU2l~r&@C8 zLteftemqRmT3ph@p-vCL@P=k{9;x}wJEFyZK z!M6<{pXA%-x^HbZy2K1Vh>ppg27(wrIyhM*12M=STbk11Z{fG$78qz#i$svfZ-att zH<+R{GVn2b_F%LDs;ZTXDpzK*`KMl4DQ8ksaN*KQWz}(7h&P2u64EO-A0GyLZEF%J>u?O=T_$g?}}tW zBOpoLY$&mnri6MFc!Mq^MY>Z|CFn3k-s&`6zDN(#60m?QmzJ_#*<~Pfs4C6HL$Mu*DC_zMOU%mr zZIkFH;mu%+U{8EWSOk4AQ=|QIP#g4Tv6dM9q^g=i%VoJ^!!Q&{+)3L_)uaDyhoYJ} zs(}-<+$eNHV{^PnFP0vKq9&BgmoH1ce5IM2krpe9RL~tV8i}dOpf(IJfK&dQ)DxjS zoi7oiCp79<|KE(54HnnwkG(h5gpR*GRR(5wR-h$@pZ44oPVq_7Epl!w-xZBQ<@pF4 zhY^HCkW?zwPl!poXNa+XIZ|N5EhjK<^YVs7mSEf{=Q4!-vNM@10ViWOQZ~A;p|O(B zp~IL9wwbbLb-M%Azl>C2FkFS>OU-`v#yCM4UV)Qda2<p^47aim@qm!L5(`})*um#O%?uwf--XRu>XT&kPN=-jD8(n@^Q;3LFhuXQYo7s96u zKH{m1|5nE|a?HRsEu%U^K3`m0a;i|O#&IZ>Gdfj!df_*xFUG^IkI;cH%wU8}oNs#y zlD<~~_}iI=Bqx}U!r}Ag%`29P!9Ekt+5AO?FdN~^0xZ`J948vJfy=Fak@_# zow7ZXsf8R0YtG=fvM|7uT#X|*41-2&_*uR6G`=ZTb#y-A1sGQ*~N0s2^ z1ojk?d7_0JjO>f_80m!uaxmBr+Ji$Tq#wXE6+oG0$VszBm@L|#3G0cF`P^=+f}dsi z?c5IhmnG9GlDFU!ywM=3`buI#%kp18TNP@dZ~pq5Osmb|f>QRNsH1s(PQ?946 z&p^t4QOo6LUu6Z?UZ#|sraek|jBdkXv7t2f1?K5|EM*XqUr5#cLVNeoNyf8jGOXS#6O23!ipg_3bwCZ@lx;OkB*WVRR!!I~BZI7X zD!|$ZJitm*Lpi&?c)AiUtN6VPgOenQVKo6gzNyRaFq zJnHl-8JcR$8L|70&>s$1-l`xYS2hr*Ui*$)oE`jeD&JC);C3fGn9-#Y@~7c_B4ajp zJnkUjnOKt`;dD*g-S_j|C<D=u|D{~r5KrHFbkYuAf7 zWgpw;Qt{&T{qTI9m3emHTzFntZQ%0E=U^-1N@dFA)DZS`8{dtgvku04$a!WszLG)H zJz3Tf0B*VeLZ_IXPEEUQe7$3$n~C%Zc^l!;!rUIkAwp~)4isXp>8pfTOC-hyU@_*A z0e1BtVqG(klTt4V^B}EGXKMnTdvyk%Xoi?=sjh-~zQR`+nodZwiLt{O$gR#m?#s}w zy84gsS@NeN$o4mH+%4CzB*n~J%jP=UY+1fEsmgAd#b6FPu`@KseK^>D`BDR->?ses zrWj@Ak=%-jFPmDSPC(~CG1t|ILF{;l#<^L(s@e{$lu^WkT3gMUTy@e zp3<-606}a{H|6)=Sh@9(({ed&ydI#QO=Ni;Mbd*cqU3veP3@Q?ho#wp$$(x}t9Dtp ze%-othvlU1x(s;&ra00~kk?vEpgx?BNZisTOZvCVYL@!!ho!&QCJBq789v1|eTcvm zjJaba1Z##L>pvn1THGS>Hht-w7%LYd#=g#A>pvVfaLf|FDF9e6Q_$iCjALG_EdLOz z6o-S$S|YIrYGHiV9oDKUjv z2q-<~9G=7x;_`ls#Nx_S>?Us3ij(gF<>6v5ScFo4(h@j8(|EdIX4Ey_`#i-Q;a+Vpm&L2iMcG3#6)%^=@*Z~(g$g+UBNc$OH zFoyE()GUl6THB?v_TKj}5N4}(E~s8YT7xZ@iM$6jyH}J_em+=cJ;L08%$!lnMQt@I z?#1al`QL3-&@k2>m&up8X%NOc_|49j*cP#x|MCueZ%MpKq15v|j%NE*3P*)#oM1Ko z4Z*S>a4OSiXy{^$MK5*35WJ0_Wl1`KLkbxBDGztMi^g*R|3GougJtK<5DoL$ng0F0 zncqj266B(7auiJBa-I9@O9!6`Y?Og%%Y41LQqmV;^QGPVaY~0x0fj_ZRWeolnk(n9 z#~YH7@Eb3_Qm7q}6Piez*Ji{U^0p_mnnqYCR|(%6-+6Ib$We}5rg|r$qvP>-{$~V= zT3|u*2iUAw^XF`hb#b&cY!3aF0aiaYubI{Aj})gx+N~YjVUFi2MOH~g?DEihd&g^xqK(Gr=j2JP3Gl0JsrmV7Z-Uy;I8s_Rmr2v?)Zi+^aatY*y zq@u|J$n6G-WX)%lxjgK=7KoAiw-SyV*~OC4`<=WTkZsO=Gd<-w<~(5v2%B zCK#bWXaOszQ1XYN7{LgI<5a{yLJ9=CKw|mhT}2)Sptl?NWeVHUqiYKi@|nz*fJ39@ z%lAHAZ`;q-b%keWuM2Zylq7Z6AvBWFX~%*X%x&v|1Cv^`n2r#OY0L%w7qCAv&Jy;J4oI7m~3~(>C=nVZ5 zuqHv&Cz%Q=zt#0qPrwptQMCWOV5VP`)yeBP0|t54q4e0~1i0p&X^mY*A^+Y|y%HgD;@=}w$j)i?{c|jcwHs;; zz6oy7bu`f$35;`Xfj+lc*%;*N}fXEM+Q?JBC#^gP#yn}!?NQ|L-bT`qLS`xlbxooWtibkE+ zAPE+3_b~j#QxZ(rDp)H*}s_AswHTy4dAq0x4oW2{)A(6@H%suhEM z4}Ep8D7`bp18q{P4(HZ!QIyT-coZM+4i~ofI)Y*v>KgQCes5@T;P*?o#*`#sq-39i$P-m!O%>?u#y2 zF*k3FytgT-0G}0;^4HRv_CJtJVfJ7}j7;ypov!$h%q;;0!zhr-gT#4ty*3o1Q}zgmZwM(DZ|_i2KE8BPCdXs=4d7pBcdHZ$RTvY3 z{6jBui5Ps5qn#KFnoOn+v&jbP>4wrv|pAHO7JBO4-{$17$S)3oe`FR+=% zNraycSRUJ7(Qo|8=l!IxR4N9|hv^K@@djD-w2t-f@0+Z?PZR`4{v!OCGoq^SjYN10 zlQ&Ig%$Z4OIirmbeokC2682>^7@bsFps~?g9NN&@ zJ{aU9HkQdE%E4q z6>#9%czjw9TAnNLu{H_lM+;34tiUn;__!XjKKm!x@MTvk%?M4t?peVIeD)|MkgMkc zujM`YquPt)(BM=QIi1&Fj{YU9)b_7Pc^}>E8|B(6LFT?ngdtZXr&dxWbNwlc&XCM@ zNsgoHem%C_=TNX<2(alZ`C?t2&-$#Dhz<$9=2~aud!npukOKuK9qIklx5i-#A^Cnc zQ_$j_0u3Lsy?~QUoY`n=Yz~Aj0Jz)tyu7?F!v9_-;hb)8p5?XRM8bd)gYQi^r-&vuX}g@D}_Xm?nJZ8!4)- zq?YOP_%cA<0bA-tZUz25bIJA#f2dO@JHz5~2fvO{tmL;Rm96#o}n&rn#-IetI z2kI?!9neZs*3l22;}n33y7dja!N#g5qgj%t?q#1VQ;V`hjWR!pf}95E#a1)&1cglv z&#zD%8u}%+rmz*bRW>K*Y&G}cIHqxFnP9_D<7_y=LzTCPR`b|%eb1gjOqp4jKCwUp z#OX?EWzc}xtZOfvWhz!<%k=_wqUPJHVvA+jgT{(O4M}J)wXI>JjcT|+m?2k8kt-6Q zJ|R$$#;V3lPbQK5b8>)CndR-fAgxcBY zc>t#B0Bpr0sFOn{=F`L^z$!>Z#*Up9uWoAg8l@vjzLX8nWH=copWALnB&qR3m7lZ% zn_HL>@VhRB1NvsxuMgW9Zc&gC%<3&i@w<7zat7gV3{J|^G6|W|NP(--QzL5>BuPW> z2x~ot_hTZowAB-3$MFIZVl9yvJO00dJrw?S$I)O>7Np~%6|*4m{~qJ^V3o8VM`tp~ z!~a`sl5mDyn8Z&SaG(DQ`?TQ}LFGUcc>i5uDIVyD_T-V;CtY-OWV$T1lM~3G%o^PL zqFQmA>8CJ0&l%Hc zeHt#;PF`~rFJ$E;DNl`(ZqioaDkKT889X_K=7IRjX$jcYJP$}|Xq&-3Ds3}JONJP} zPQ_vmw&j(X24{p-J+jTNC^!FrZTU>Ya4}_}-*#yD!Ntv{E$Dok(vbhe?%+hz-z1Z1HFfc0p)nnF-W-V1 zsRQu*E`$54W{R(`l6ECDHEFSU`=dZh*c|XjznX(){~#3MU=Ex7)gpz*^X1ryLaLfr zb#Jkjoln8Kr+`!AneoBakJVof{=TGZ3fMG(B0ZayE(GXSzd;e=Kj_ zP)pkR`H&lZ5GH$@kMb#m-foB<}{mWH45v`9-441`J9e8npB zVO*Bdqz7I8#!E$?R}Je{5nV)i!ZC;J44sAJQw?Ow>QsE@%-uHMnQqKjQWf-Jn^wu( z>z>I{LdxA&F@KI8J$gg9jI6`Cuz`QgPOWC?Kg?P;tw(Q5S`?WA3s7WjQ_$iq5{dSe zvQSKcwh<_zM-CIg?5zpMA_*sDs_#X2w93#dqx$P-An1AFvHroF!2dn!`m~qd(5|9Qz_HbWMSl@EMlk*z7 zErC@rzOXJP`N&})=x%LaG;18Z~% z^;sLK)3+qlx1ANs-UrD`wDH7tv|T4{kB4~NJPlLKBKrplS+Wi3E1WElB)M&abx{<} z2-WCR9DO zU!eQzFeaCMFKH{&mT+=eaq?^Yq{;5JaSs$#@l%Lh$e~LnXMp{l0jA6Uo1g2B z)+sJ1nKficJYktDCwo695e&(X*lC6$0m_6b;9VHO28gT|t^GF)`!}P&tgB`DdqVp` zmKRc3OIh|)Nae!hHxy<}2}lLrQN!@fZ1yWYgQ#Kng~-nsqJ5Lx!lLvI+N6hzhf(pp ziLI_SAQQ_W+6%1sr+_wXRC-B$~|Ws(yiPNz7glzHqQZ`WFD=c2L0V*W`5*DgWz3+R`y`QjY{r%wnpQGc z&V@iym=z5cIVmSd9wDHDC0VV)5z#U}S-Em$8%c|8w>d&d8WX9AD1V|xTQO;v9Shb+ zmJOC3J$9$1sSLXeqTz9?2o6#ub1;PoX5ww~a(%UeK zWG9$?r8=c8t60%Y`S|@#+m{G?0j&`djq^!o(Fakj(>Rhh#ibS{ETL#1D%8d3lv)9H zVp$ezmvFUx7ySh-uVI7XlyAez(Rmi5M?(e;dJgsHOQvP13+E`Pi_6F8?Dl8P$FL|0 z=Kr`?cV@3Sy4ZIJ{a|Oe`dT7b04s1F=&1maq|In{23Y-ngtZl)|0!jExkac`8kj~K zyJFst1?ha!c684GZk=;Xy#Y3TA!}&WN(-OazyG4+&+v5?)D9ob-v^6-ztUo?#9bkl z-51{wbX2n+!uy!_UHy@IKgBcn=3wEQsY#Rh(4Gi5@9E^CX$?5v{Nb0xdA&>y948#Y zuecfiB?Pm0Brg-cK+EI!Ng@(?aR-s0Loe$HM&Z64vuTPlPsA&%Vl_6#M;@8gr%#`m zKJqGS3lEI>f7*SDtdKn0$}06A7joHz*NGA}9tW-#OeVU#O8!zLwqJbgX|c!@=p^vn z0z8Kg0QDUv>n>DRAeZh_o=zVOEc2rHpgLx-DGtzP5FFvmF}%`@^~JiiGZ{x6#owE; zRd}r$?3fx=Z?*Mwqg8mhik-yEi$&hGnBS}PQ@@k2`*dm;tzn89-z0QA=Zhq&1NAON z>8I?*!luX0h>W+wPCry!y?wi0(QuWkP5;DCe#~P9du47W>U^qD5Zr}&VigU z5enn-!(mv!3c;0}^~2zblKOc*pya$XCP_5{VnJ5W6D`<hlG6uqz^P~}P!qWKXqQG&FgBQgu2?>IRSBfUI~9z@ z`5c{2n@J|n5#GR}%*I7O;TaXr(-jkTO?#LA^4011haV+Nz5^n0lRZ zyR?ymiJbHLIMx6!;F~^EDlk7xPViK|H^OMRo^tSBBqwjHX;AE*oDq<}=bRZZh-f3c zNUQCvX5VB|E{n|+!=Eit-d{Z=gxf>?8(qr^%eJYksiHop8`w%nyQslw{bb z6#@!R?pMR%IRORo>|vk#1-`nT%AfJ@QGVNXj3Gs|!Ue_h$rYU1MTzqNhd(*43#}Nb zB7RX+l%$ccSD$?$RPL(sUjEKVfQxs@^XQ&<=yWn}D~eGn5W^c5*VscdzoIW zbk-2jV#~7Q4fXS8`sVbya+wG`9xi{hx-!IgSr6k3C9a=vwn9>0oRn>C+O1-Z0v|Ci zb|6`bzeM3owUz$^zB8eB?^$pL_M8oLRo`GGu@}hZ z9fbd~sDwb~>h)Xv4A_gg9kb9F3D>dVcqTfH@hi+;O|9$r3o~<+I^^t&5o4QbU{!>V zvZbklKVn-iT?hS~grYd#pUUNh*3#@o_zLQ3_-T*Fqk=T)KQNr*(!{)6QxJ}jybIM` z;Aqafn|nnIX+&T$1x2N@9Iq)sO^UPu(cf)8TI^lPv%wTJb^XOqn%N*TLp7U_L@p|Wqz}L(L zWsXm39Ev}5)hl@C@54=Lk)&Tk;R3jM%J%4G4>5jQ!yH9pr5jFKGjJy?5cIZMUAzNB z#x|V#M;?)7U{?0o|KBbF$5yQ@J{$B36zD)5z|+to8R#f<_~nTz(5T zTuh}#P8)abJhgJ?&Ye%5jgsYU6lka^bxD@LFhZ24V+Pn?LM;E`6nSk{N>%x*dqdXk z2!_ti1GXU>vE|XjH?kbLzC0zR1&g$7S(%S~!qmNo#(l-le(@{uGK#Oo1B={(7YfOP zt?#bN`GCA^@S-s@v;dQDfnZ12$sSmU1Wx%w$C&*nh{WwygoD~!(c(niI4MB(2gSRs z*km;sU)h80M*S?@(}%}lD{$ZcfZ&u7cZ+u2<5u3mFF>93c$jDkf=hx<^4udrw@Rw zVHB!_!WYIc$q=x9Y~)`(#5ub7tAaUGZy+H$daJE-*F&s$ZmeSGd$L%|1f|lf8bWM- z%1u+>yrEkuItd#8!I`&WsCQcB zJPbR2Ha7|2iNVpdr;fIsaDs5Kba+#|U|@JD_iDxUMO4!8`#UhuG~$_R>k6bH*0 zyNig`LmaFRj{Rd)=X`BqN)r~Vo1%855xRDQdF@ZaQVnH(Y+56$5QM6Z8ac9T-cgU| zayn!hbNDz$N+)EAR5GatEzb_rQO0IaD;zV)@DI;GjyhJ^kRhJ!8OUXXS(JPdfz}&N ztz0>_05`8*q!pHZn{&W2aSA3UhdkSM>^k`>Om5H>BBwH_hs&5i*A?M*j2SMeI%4?n z;a66-3q`^m#!`qZ`}uonjgtz0vswHtSXA+1EQ-GrDr zHN%Bh{zL4$6|cGaK7L|_OV}TCmkT?#jmG%-D}2n6DTVy2amw2IQnvkg0F4z~iuWo% zcj@blmGT4Lr5QY~#;}YgpDXIA(QVCK*E)*!vuQ7OSNuM!Im(~0*6oKQ+~e^{OMU(` z-aVms@#2G~Ja`_9FIla(lIKY4pt=aA)ydnRxH8f(e99b|#lJSLi6v|bw2wVx3R%2W z6J83|+(^<|@m6)|PGn7s9#deDZIvlx@n-cF@ASTaJuRhW7JM$=?qp{BSNik+?tyIA ze`kAKeMa2V>iRgUKmAt_86Y18ISade$^T|RxFV|nsAmkO89SWBc}9cPUIbJMG> zm=T(oD(}c?ge;x{NRH$W*f_bgG%uU=FN+ z-CD(x3J5s3D&MWka#?;!V|qC2GJX4xPBA^RokzPyKtix?h?-EJo`ea zI&!UzkP|0a#iXBI&3=DHewz(tHtjd|ouDH49Q<#VfXi(B zL}x8I+h!TWcmkWUHLQCmY|hsCB)74b@sr7F(5)}BnJ+DXYYy~F5!}3y+^2*gCG}OV zj8MY|VJo;DA={3P>kTG@lx0vg4DMx79b8lamrj_Sr>s@{AZ2LK8J6G!vul?u371s# z(MiU$3FJ<`dVVRIlu%+G4OnB?l9`=*f9JHd9%N-%{cpuVP%)jJ`Xver%T z;}50)<^3SW`k`Qo*&ZBcnpd$?Ro?@70!=c)8DPy*WUFOn2*F`w$jcP6dY8xxtOQf& z^gqOY3gHa@ne=|5UbkPTj2XLn-KkTjylmI;i7!uVksh2I5ZYahX>ab!dt1(NDwtohWiw0%nE+?sbC z6<@Jfy~&XrZsH3Xm--l!Yy`(*+{g$J&zK-RSob}?s2i0kZA^;Rmn!`Vr&rhc)MwtH zrAp_mNgz&R2FPaP9kr!W+mbNnumPu?>2flxA5UeZh~f&<&f_;rlwO`SzE32S@4Kz< zZFmMJw@%$6VI&2kbaw8n#8re-UhUtWZrz1KloatpXfK(}`hbSgO3&fsi3%+k(~}H6 zG5Sk^%EcpkoM;bzt(y345qeDNJdMYzlzj+!Sg}G_!+OFeL$!bnkb)K2k&Mv}tsk#T zyS~ClIyP7wLh@csC+g4BWRw=8BkyoTah+y7*PK3mdP}EV@2%T63>Z9x5H_#dFhg(~ zsCJW#g{lTtA#W;`cBY3Ix@tvg+X*J$1C-LNmtTsTiDY;;lEqsQ%Q;;unCN?l(Y#Nt z3sI*-2N(Aa9sYi}eLK^5E_sTg;!)JGk;fuash0_^nJNRW2$bxJ_{K*0QXXgDUnq(_ zI6-`#NujV|c0S5?;2F2qOt>1Sh>fXd!NPa2XUY#$97eFHO`Q)h2;j+oEj&CTJUl!O zqp0_P{q>h6^La_3)Vz!~PX~83ajjWU@fVLxQl7ahGmtbVhWYe#rg|9+WNmuMeVvJD zr?maL2IhI^eFcW55nAG1BIpyKm#jV36Rt5tmnm}sjsYG5{av_nZ%qh&m=*MVQQ#ll zN$E_+)aVoP?NdwbskyzTdzA@aYX$1&#~fp(L)~8^(XZGYGg7KPw;|r~YuakMt&fW2 zT1UZ=Yu=YeuK{-edi7dA-YTnvCUcJYGT4TY>mdb>IdILyx5RwcsEH2V+M%3&y2?^9 zR6bxC6VN4HYWpF&pS~SH(t{`C7kb(1{5Ev(3AtwR)Dr7B0>Rsn(SXsln72Wf{S=JMmEenB_pZhdxXMwcTo*-yKIriXwl|0wBuLJ z`n4nK4b1q#G+ssDDEeOGgY!5tAb%SjXSx-d+Ck9l?^2hDm?I+o0zo(}2r;*a5UAvJ z6g)idG^7q$5{ltm195OUNy`1g#?B(Rc)w68^49o-!OwVbGF@197M#dWD&fGWi=ENx z>tUmNnU>l>luNMb7OU_S>bXUp}8N7i>}$oqM$ z3Hn!u3RatYf10lh*x{QMmIZ3U9X`xoSu5=J1FfMMo*VBDuIyW z3^DgF34Y%S*!E2D3RZc7aHKo`8$3*O@{c^qd=8;?A(4A|X=zBVV)tABgoBlh#tBu+ zMjsx;!CE00tXqtZ7vf+wg3zx`ptkyzgGo1$?_G?J^L|>X^!kaHgF6VVCZ4)agjUBR z43_Hr%**YMsmj34R1VfdMsNB~*@a)Q!??ws;Umz{G{dnCXhFEaHUxTUc@A@CTj3b% z-+})IPVGvINrmxi_>9^h_WlR5NeCbKs_K1w-;oiM`fD2mR`K5J(!ZU2MDlm+3sz8) zsy)JClV0JMoUVt%dYn2)%Ks1_V_(q@SUE+#3&zZ=?eqX&A!#g#@iZz%r-@jdEdCKc zqPywsF#Zk1vQ9`$r^ll6zQw`0q^!MP;D~{gM(HORkF2yJMD}jMHUkHhpY_S)^0W|y zOP`27vT8W@8{%;PYe_D(52DLs_{pCQ9R(zB=YTM^hL+@a;~LQ*wO{Jq{SSSr%p^XU znEEh1w#G!$ycOd~2La;aU|`h3Bv%+Ut)>W8M2hhYT^go)QSvgrM1FFRW^_UtNynl) z#7B29+~B-o=;^qCDSb*yoAH1Nz#$NT`{R|TK_{Le%B}BB$uypYP6DTtTi?ko>2z!) zo=cK67P@L|IYT^aB$)hT^9E;UAlm^bNhPgxd~iEG`Q@0K*i}9ok)rz!nu;+Ymqydt zK8OFCC6M{gxdP72?XL;WtgPyB3C1PsF>)Q3oD4_@TjP0429n?)2(Uvg_h(xiNlKG% zj2CtC9-Sq+`17rJNuhp!KM235*!x((<5^+s0fji(|n58~!7?{o4F?%`t6;n#PBnDoVZgqQH; zCcrw>nJ#?n66U-{8Y^5J(S31km<=tSz z>f{C|W>_5}#NfT|&k<2cH_!?Z);jcvij=h0$3HjDUGQ4o|4O|fG27r`*gF>J4em8I z)&S{+c0gX!R;j1qf&^l4@LYS-iX$uTwgkrdz+hsWTYDJc#pV@Fb`~&E;9tm+Cf)5c z-RBKb+P}-5p6zt9^8Dk{nm)DKtsyIp$iGwk=B4{&@5{)>>i{cCO2Fk47Oj@RL1YP< z17N_JgHqGkMmJ?_sLfgiLyT2kU{X;dt`)<;oT}(XMqC3K)2Ma`TvPFyTyQ zKlb+}>B>F}2BI00&ywPQbHJsq=jAX@wp#^xs;IsYyxToWf~~9ko5kc^mGXrri_)ZtNQY{Qz&^EeSm&=2L2d zpIOukPe5;cpgl^cKx9eK;$WF#C@kpf z9?y}h2%n_-&-$S#3dl=O{&9M7@aw{DC+JiYOH4+f=JAKZ`AT*3Dm15iEJK)haQdg?C zo!Nq87u=R9ZH054xn-Ah&;`jq!}{25O;#(yhnc-#%h5A~gM(9^2HD?x8sEU(>O9Ni zty{MxKCx|0%)UEoEFlT2NBQ|t?s(F|7VH436FXavX|y_c}bPbGWRL0ro?_Ig~;Fp^kC3u}S>9jB~X#JoyzGP$G)8GpYc@y2}VWD@6`0F5B} z7#5+)#A(~LV4P`77EK}73K_xC-v-3Q@`p2Nv0*=vlxlW0n_h<~Mh(3luZQ_=G`Vdg zSl2EbM+U)kGD1NlwY4Ke@Z2S2urKo4q@?k+d2@Jn5l3TOL>t9BRTnAnVBv;h;nGW+ zKcYz3F!TF#YQ7Y{H8N|su&^J-&kq`9@(#XWklgPS<#&!}FmCa?`3wkVTL+pnLkx29 zvzUg+9??Rb29}Nz-h!rrFq^d`rLFL2C?Ii zO1|#b1>B`_u|j)&V)vV5gA0{jtZ*GcaUlO%uKx|!YFXk}5^`69bx0tIABeH{poWpX z@d4yvH!rao8bSgk2tr35I;(KI;Nx?4pM%a5CCBQ!iLO2wK3x4oumA1oDl<;xq@4o-Kh!JbKPip@mp%sC}m2spk=dZ4=NF9bx9hb}S6r_ZtEBlNn#h$RH2X16OXt z#ps5&x%FC+Og~_Oudm$oN5To#+j2;;cwFMID2fsERAvIyfUcxjC8z( zfl&5k@MuE50xRX;^Q#Pg3)LqV+F#UR@~7DEqKd$t=$DbM2(B2L@oM!ZPdgbL3=3BH z`EVzA9ahvHY+c^BU*EoC$unm=&}oi2&C$uV#HnZb+CP2%w&k-^IVZ=&*oU=tY$lG8 zXq5_bMKvzSe$A?G+i*<6lX1rJiB;`ksq}UnGHcYRna4vh-Zzp#z5LX!KJxPG@g(y$ z|E?M0Uy7?M<1ZnVmna!U-{6%F3zXW$cQzHk}-0 zh7?PjgVAiZ+Ao&$vFkbLShB(4w|m@TuCr{dY^uh}XZ8AJGU+sxP_A&2z*Rsx{0U(X zZRPB&x6JL5$RErbpG)8P*fy0|Mn;T?8YHd`2>4)s7J1Z~?-g{pk^)aD?RWc=GZYc3 zeq`m!Z!PZ&N=-}jm*#95`9g{vAn!`C>jJEd-dPf0c`x1YQNt2olgMiI$(PI`Z==_= z>RFHXjihIdRI)P+ka7e%=28Y2gP*~$4X{DD7QC+asevsgovI}-*16hGak5(@?vh=R z;dLEYw(szA+JCAB*NN?Sq=br%CGppPy$)af!SW6*>dE%usaO{Q%#jXL%C&=1}CA-+noUT21A`dT|&d?#gN%)IXCrCk?G!zZt<#nChtK zS$#jIC2dll60%kHTrZQ1E+ClOPp{cbB{1>*Kzl`}J7)AXfl@JAN{*9+vNjc!tU^Rr|a!Zl9mGX?g%z1)L*kxVN^ka zQTzut*cKwMdyW&~aGC}Q^Tpz{Pz)AQgz2PM(J0b}{=Ray5?D1`I?snfl(T|Psiqvl z->7be3Rr^aVTeg?up-e)ir$1UTHt-G;GsNM`rKFxT}X!x{>* z;D0g^9s*c?-|AS8qLSIbj=d5R918eWR2yNri zLi2YR!vz%$XispJ_6351i-#> zLa4l=&=#sPEo*kBp*+TbRfi3d5MPi}5%fOxX&I#`*LH%n^^Oh@u%|~Lyo;q#q2|t= zTgaDM993{&X@|xu&wng|0;7{$_M5`8?a!!Ru%&PTNVrf6IHhugo zRxddNKHT2$Ht`sk21)<*T0DL_N`TdZcN0gh0DDP-IU=tfJ$k^XqM1O?NWcI$*j_i- zWH*>FEqa9R(gGOwjErsfXs{fAP@q&{mddlmjX0nx*nWsL4sd`KV^|(cn zET5A)L164FcC}zoX*3j!L?PJgaUuu9)V*LaDV1x+G|cxNAv48VXee==$t%WkJ|<+A z7=krL;;JXX;L4tP+*n1E{eqCF3KF$##Ijq+h!l8A$PtETc$=mX(%bMbzs)m9th3#- z1YjJu$MQKT&j>}ZDCm@V34K%Lw;^WRVVYK|&9)GQuz|gHax+tGC2@q_v2Mm)&%6LH z)upF%1IN3jdL`ETlXj*~f9bq%%OUYTe~Qn< zbB3gsFg+~s7o6Faxsh-k@i!8%*qFroZ%DBJC2XI~m82i@*OM96f9669d zEkq_tb>YQA6Qvrs*v*rR5^crT)ZqN4GCXmxwEf=nd@Jv|!>Q4mk~5>c^efIkD}f^4t%2#rW6QenHIK(Wk`)zo z{6r=WX~70Q4U?ZKuhnTB#*EkAO2)mlu8`+kywch8`3(mfAx+goF#KTr#asd?9q%;# zS`gp0)}f9&4>T9VH;o_=I!@9$T0T?|Tbt6$hZDTThUHv}e>8eLTi{5>MHmm5u5==C zt*HlY@B^|jk`O-=0pgwObkQDEo_F_J#$5qFV9S<^TekLq_26arG2emHV}V^3jxg=v zyTe?>kxsi>H6pi(+s}=Ko1aOvq*Dmi-)^t4NAZ%-IXlmGk$uHQxqbg&`kww%Gem7t zsp!-Wpc07r4zceU{51`22!8SzJAxR8|5RBGVS|A`6|%V_#)hImoWvw2cW|P%w&Hmj z@3W~;vYozrHRmCW2Qb(-8dfS8-e9&}Du-iXXumQ8hvV@4jGoUO64UPpIrz>Y!c7UF zw@+r_q)90I-}nbcjd}wbLrM!^EE`urdNbY<=&7vf__7Q_JMnZkn6z65dI2)M-04p| zWLS<%Y6B^QUs!(Oz6-y*K#pc`b==3%)hbmzzqs~i;!ryEUd2=!tG z82e7*m*docs=_v0dv$CNy(A1dujxY*J71-}7d$1qWtzzIDZdSJkb zjW+S-EKU98Zm>`}Ry^ZQ9y1Ilk$r{y3|4CrA}N@hqf+db6pzq z;n^lOX1SWb)w+l!Rm9K>&#k;Q>(I*ZV7|iy6XJKmplYcQwV56If_>w40*QMb*h_ZR6_kL|i2fk`UzaANM+q_&-{)A>IE?rSlb0!U+ZU{3>ClAhay zL8=1p$}e3Y}_EWoTk_2JXQUZBjW>=!$yqlPqqSVWQP^m|e&M@=ehuQuJ1-cC=P?_w+ ziom*3-_o_Ae_bb9sp`Z6m2`b$L6q_b)3zikeKp~B>8A@j)k>!*wNbv6J=zRONUiUL zP@QzZs;Y}9T^I$F*yZ!2BS_`|QMlF^dIP!6~k z>6|ZWsw7nAFtkbuD}r(_RW9*R!4M?~>}x1W86K;zq}8n&g70>!O~xDsr%6=I|2~i9*Rd}!UT@6{X(_N_Ke9#b zYw2;=U>z%V4=-UmS_X!$@@ZM;B3d3`1(46*5p4pfGsa9m8cO5QTI$yA!+5vzdxz4{ zoI1@EH%4#L)Z9P{_V1wXuN{vt4j(qsmdE<7<`|O%HRfa{cd|iFaxVVX$*}oa;M{X<1l6rBd9AC_a85{g}Q}%6vEEWj9nz4U>FjhoEBtPHEV0c)J zsl_uAr&W}c)3}7xeqzXD>9bpX#88c`N;2O+QDxtInt8~0XBg#Ne+zqas#M-vO4hx5 zdA5jAlDbJi^lqGTO}wugG~m8M zVU#qmjRNc~+DK)ucr%OZDlGz^FVj~9l_DFUQ-qa+jezD{_IDp#nEkcj zo!}&2NJg{xn$mooCF|T^$NyhqWul2RzS=~z`&vz1_EjWV^hr~&03lapSpaOj36F5Q6*d(3gU^3Ln zc;)-gCGh%~O`Bqam$CEnpjdwEg`~K+xOlFc>Cy2}dg?Y>S$)J}Ip>qq%`IrGIsagK z(Z!FFZ7}5zF3%t2fOFDn8yTuGik%>jgmc5v+gX0)QiZGQhVHO-aqjdM(5>Z05oAFzWG3q(a9-;}n8$*((vuh|2>}yRnfgz!pq6P2aFt@g&r}&#bPJWX$n2xmm%RLSM zw)b@%nQ0k^&&XQ$UCNlB^fAm2`f`fK_^ijdSL1|?_{gKHVTFf;X>yF zo3lR>A_y&oGAS#;V3Ye5(MwImMVsUGV0>YsZ;m9$>O%viWhqg4QP{cafU7OaO~B0C zFug*^0q$GKF)2w!;LinCa}L4L&wlFj(~=~jjB$b=BNvwirIS_ulW#5)a;rWAeoQa0I93CBc26Vw z8SI@5(lw`A#lvL{OkZUJxtT)~&vjngfMP29J+^Gg93~+qpAx05Q-kGT#nOR!!?lN6 zgVH`266L^9U%2oQD)<7eLkMBF8W)3*@Xno2Xf~%i)e!m=3QTpGbMmklsyR!ARX0BL~xI#SJ+V&&j?k`C?`}@?Ie&lg_wFX*RrWX>+(y`^$Ys`MfN+1?m+Heu`j*4jM1Ge=`c z^5rYg-MZskAEQG3GruhgbCvIoA}gIb2-S<}uCcPsR+wRI?$G6iblv3I2C4lvBt3LS zh0fv3qDDiqR>S(nc0SIm;QErd{(j!xZ_Z79Hs(ubkSNDI@+|iLefX$XbYdWcJcht~ zOOA#{30os7{@yd`#1uLrzkV8#^&VVoI%9%M*ymBvKOTx6f(pH!JVF*C8tlfFz*;%h zB=uH4S(w9aeJq3i9sFj;OX&&iz;ztH!g@c+>k4LblQ;T_#;VTUkB*8z*RfAecr>UIexMSO8=P45z4KN0P0 z_QmSlMLj%`FDV`K|A$x?{Dkk-`{M85BDl|BNqrR;;b2_JquU*vl|Goy;di*xHk`7K z4-i6ugZwzSD;J!~cmw14Ma59@t9XMLK_1hvRxSd30K~RUz^ANTX+vx^=bNKBq#|2W|l!|9*UP^$fm)9e8v^ebS4 z)Cfjm*4#yX!2W`Os;y2;ZDS@vBPIcc4^5gBhc7v&!2r&?cHRXF;}E9Xrm1?JrC5^i zGVID(vEMEQ1DWY}dU5Sh6}%4GmDV>v`SjaNa*98~j{<8UUutsoAcLVd*F3^m85voC zo%Ccul>e(ervQN~!i_CE4iW#kOLot#T++dN**J=a`5mRt)%}sOakZVe+w(0 zOF)!o4IVDT(6ZDIWY|Xu(K4t_d~!Dl*7mvM1G7mLXmKiWtz?qEC&pTr$|kRo1y;u4 zv4uG{Wfa(k6NZW*Gzcg36e=Oq<~esNNtev~NjyHxeS9kDvkT)RlEid zkGGPfV;Fzn%98x^XRcDTz*m&41Uelc*FO}3#n+~tZnr9>fY-PR96m2GumH+Ctw3$V z9)TtC?M+>LI)}aQGS)<&5;o3lhxL}ET^4sJdGB5=c&|9q{(%{vj(P1Ri@5k!k;ToL zHR}>Y2BIsgO$|M)&Cre!oDQA&%c~d+A+KuHns==XAIt+DGld0u23DOvU}Zq4Lb5!} z!Vz+;I+kO6{>0sllaWM)s7fr>$`zx|3iz}3enHSHl&JC( z$@i=p7+)eyDKq}O7mxXpxxj3#h*~3G@&|;xj};EYWMSQaCXMV)gM8|b{I$Oyvc z!A}T1BqBAK+s=V%;T6mTnV|_+A0;yLaTbKmb8Dt1*yx$8*@x8*=gDwWhZ4&orPE-j zCgkGZ;J)7@Ux?hHy)wdV>~M3z+zx)u)C}VvV%c`e!>o`d$8sH!W0hTGvY9T1s7&N} z@8XhUtK8_h#at=nm?Rk9oIA*NgJyq=f~i@SXZUmOB@r}#gIa}n9$N}nYA=M~ zR2QfBRstAnyxzGC9dCweNwEH2r3N=a8Qe&Vt5F@@V2B#zl<1+nZ-q)RFd;b7X9grC zsTLcb=Dz{qUKc~?EMV&;7)|W7e}F;Z;Lc*bR&K%^Ninv0*MliUG06xC9d6XRux-9W z9P_`EJ7(GQu&ZEIrUsvUkJIY07TwyA6R!weXuLCq;K%Kp0Qh>~$?&M`;4H6i$`V%3sy zBb8I(DeiAV=qD1E2i4PzGFAHOscVr1A^#Y>pkO_W%hw(Kdjd{z9>iG!?<{?9X)Uvk zshYBnilJ=4CJHVI@bB~EOxTDd|AuTyctx5ekiF+!*EMd|TZLcyiWYWnQ`AP(fXm0g zg{Y%d8z0DGQ5Ywl2JqepCjhl>7{<|W`p{k0=@W}N(QO!K!E}GsdGzUj=fH-;9QtIH zlk;bga&$#DLf^z&lWv&gG;>`9Vl&6JtuWqet9i>|9A&ooUSN~EtQ8|*Yc1a&4h-UN z;=pW!M0jjf;V6UJt5t`Hm^U1mWj?-?BCr}|&30cJ3-YqTx^ zc|X#;Ns}f6LCIK8F?8!kQl93Ldog42dNDe3wI|;`<}1+p*Bw9iFQAvI5#USzo9CzN zuS3NInXCurZGrwIG(4X;wex5dPbXF=~T^-t_1 z5v+#m(xo@xb*!T4uZ*9W&5g;_3CNB4mD;e%gTYf>j2*;nP+8b4AksUCl}PBHWvWe} zEj&sNO{ZfE?iv71Y6g_c&Bfxec*EKER!bH=m?-}DdVSsz6$wr6z&&7BRJ0wXP>ZN3 zHy?!UN#ZyDjtir-Q4<2u-FnQgjGp? zH?_}Ar$I`4%y4_Ny?0`VpeH8PYY%yB<`6bLr8kpJeC{-Ov4U?*7FVs6z#1%9CYshb zxC;f}IDdZ4?|TMTGUK7dEjUBuf-=?rZTjsi3%?0Zf$G8UjmeW2{k>?>@4p+$h4#2^ zR%+iKS<-g0rZ|O$@=N=hEm!A7uu&t_pDTe}9p=MEjRfeFb5m~~=Wy2DFDsy8mw5Y% zo)LGo{#8RBGvjcF&64YRpThCB$7=>hiFUBZ!oje4cCuIdT3FswIJUCobx<9#^gAjW zi!X>PPn2gPj*)yuXr`p|NuwQrW2&R(y{3eK`#q;4A=47^?+3!5|E0PyHZ1pOcs}4B z&YwSjP|>OLZM`YaalntB_1bddrqA zA=;=653ylz8Mo@x-VHo0$8hfBOdU&)|M90g4hYs1=i%L8B;*I#^oA{xSLFY<64(^Y zkGFKqw^PUzSsN%k$S@f;oVd!#Fu1}|TC2fXQa9Kwm}U~Yzuo8! z|G$I1FHQ-Zqjgg*o^CLYTk`VEam|`;gr;bex;FhQAZdRU^La&eBV6IDp9 zZfV6jd>Aa}IbFfBEC2e7Uap3fG}|PRO{h@wB_ZL8@}2B!Djg_4%MW|PT{~@IImq%- zy9mgCq0}zIT)1>^jw2l1<3H?(3vXqIdD&XF>=kn7k)rIZ&2^1Frw>W|{7?gm37?-R z?w5+!Lc3QM`W)mq)5|W|jB-_X=jI=dQYi>Vy1y^pYUId~U5n>o9>v>)+~DVWH1%FY ze)suGLd5SZsNN#Z8CZK_CXf`n*Fl#_Otba39S}li$@w-iv^^Z+j~Hp2FtzJey8>5O zg*)eqRlF9R^Q_wAGS28^mse@ye9efMdpx#4XLZ3-S+Gym+ZwC%<2&{R8_LXei~fXA1mEsqQjlJ=TfT zm>EoqQZ3I|W~kE{nlE*1K>uuU>gkU_)l-!4hYxL!QN^N;A3uKLmKJbFOSk0FD;+!5 zq5hH`w?BuNZI~qmRKqRGz48vuE04GY{)ji`m=~<7;S~8mF?WQ<65A7^QU&5wOA(ah zup$ZO#fF<$Jlf%V2Q`ru$Pi+LpwtqYbj z*LW85CU7G}kC_J#ojQMos7CRP0AWF!R-16&&Y^<`ueg|(K6}Y?xA%^%oExOQo+<4t zC5DQXH-k`S8yIQR+gy=jl~d)IyD49;)<*BTmTU5d$h)j!bL~2XY)#^E za~2z}-cML*9mZg1o^c*`lm{CkGLi+dlr}6nxm6n@7k<L`MaB<}z9S6>68d%$CZ zk2i18yt(?{K3x{1JRQo;92t7Ae*a}9Fju!I%q9Dc-WxKUH>LHuK1*{+P&2zGJ0>>Z z`g6@)-WW{M)nTF;Vvd5k^Q!h--Zl7^M80OKIEjMywJUO+T+R0-2@|nZ-hBCe(1o%H zof#0i-DIz9!NcnYF{Y9@)ow((GM{ZdYa80qcDFR)4l5&HBFeFXWJ+3a)Q}K$KaQ0E zi>mN!gVyJ@ST7M(W;49O6NOKHNhnmC!Xp5$?M^3;mekmV`M1#b98O*eBh~kDB2$Wa zdtbq^jVQAYiv?VVc($qXzc5&h=di;zag2)n!C-Gj;GKFamG7>3OS~!y3u8@;eHzpG z`$csbgp%aj`C4SU2AOgUaScDWw+(i*PO4+k+76+nIO`J!!{(VG-(iooW32#e;s#kd z4U0R^AW$+M=PPRnvcKE$iBT-i@V^@~O*E@$!2jL9{uA-vvU-V{#=b9Zcd2P?teov9 zNKUpRdJ8Y;0nMR3jRr8SdW4Tt#ZZf<3SP;DItM2V1m-GH@27#b4CH$lE8O_k2&khA z|7g(MueA3Al1}V%M^DFLk{h;k>mBWt1_eTUbuH=O0nD5KWhG%4g}`BD zXZiANV7YRIg;kFWm&1{0=oWy%*?VYI<0?XDe-==30DU+B`Tx z!S`snnl9VW`A?x7X>Y5|(4jUhQ{ojNEP>WDKVOmVIRofI{kHW^o% zf}70Q#-`{9bsF|t5~zv_{*+C~Fe+LW^#~&KSf1e@N3It&Xy*5ml=M~%%kb8@A?;F> zxJ!PPHUEprMp+Zz%+@eVd0|C2hhVyL*c)^b2QrhXR4SP#$VXCD<(KFqA>qJmuoT1mnmi03#w4#E6 z%>lt@w{96n7{F%@I^lpmy)>xxJ@{1}?NjM)JTTra(d^S`4Z--4fgtpa!Bc+|qQmT~ zJ?rC*xRMtPuV^W0)Ie1weSu!&PB`MyxN+lz8+e>@FQ2buy#>cyB&@d}=Y8nuT!L|$ zU?pfj#({0xw3!=XPQF_K%#YR%zBdqHebcou{T2aMEPPoWco2Z@iIGvE0;A`htbTj^F2n$ z{p;XhXC>KK%&A+j=`eNRm+waae{*80FNe>!5zhd#)sLoBO*KXsJenMf$fJ!o_qMfI z7WE$V8RmTMVKMB~bwaL86L;!RiH~8T;ks;^>)i;r!)mfUEE}D>%N8YaJX1Cn{*7QC zZ;7c|Z_gL(*i2_q>$`Sd;FfQj{I(l5&ycUIa5SpW4!vkZ8v;sv9en@(b1LvRtEc%Z zjs0l%&?;i=6_+i6!Vl$LOn=STBdenN`;r6fG>Iwq6(Iw_Q%=-vU%m2+jH@eG#%(aA zO(NUzeyHZ5=OL~jlVuX`WL5^+L=2$TsO@@=>x%n4$Azexa%) zlJ4|mUD3Ftd?@>|XN6b*{5{Bb@OP(RM?TmgRUd;GE47HGe`nfTf-qH9j&qM?5b`4K zurqG-MhdZf^VYrBnTS7#?P_%`#Bx6(OP0FGIMMrCliVu=2M5Vm0a%k9M1lB|fhWwd zij}HDG3m8$rCNRmwUK0~W@sHu-BWYllZSOgz)Q_5oHSLM|943kbdd|p{3#zVGAQ${ zY+%4WDZM<8O-Q1=d>`{|J3?EItMY}@f8g{yuItT0GLQKgTb=*Q*ymb2LcKo!2z%SO zS}m4Or$1RgttXxM4O-5%EO}O}IQl#-c}P&YdBc|$zy8&@@U$0I0=@<=k05HENp_1hlgf7Vz zE)yg$f^)nAo3H22h15{tL!_fl9npyVrc<&BxhwI zdY&TfW!Q%#M%rclgv7`?<+9-Zr}#gKCRFvr9J?h?)tv`kQt(OQJ5p@Bd^-lJL$pql zNV%OGZ1F$DdbrX1%ncUg2J7ht^LeyKlr@#-^CCD95B77k5}^bp|j6pOa3E#$$c-;Z&i%(d40Yn&qiz4onNe zJ0?-ub^8VH=i|{h*{|V#GORXEkU?mq+#+?3%kmTKd9Oc_JpnY2H+W!1KO*w~UGw03 zJ5bh`!loZZTFUWTv@MAY#h5;HutB_I07758?6+nOQIrvI<0Dp7 zbI2pG{lJD1rS6 z(h(!NL#|3go(Wrmz9~b~Z%W~5*B@ts<98h+eZrKc<&iIOPxIrl}Y3(|%kp>8Qd zV3t;O4YOKXe3j~!Y~H|e`YfHZw7YkoP0_uh`HMz6Ts+WFMZ57B`e2Dm1qX}vP!t`1 z{XK-L+!Rkb{~7kl7n_@ko8^25GVY6!0)ua3@gbbIhTX=ChKR5npGAdDE{DFeZFw?s z?=fB7Z&C5V-+XkQ2l31{?|l#+HPn!{{TBW%87F7_E#Bl|lY6E-r?&9suKLyl_?y8_}7T2&N)OCr5k=ufh^Hr-hJO=inrc0tlb79LYbVtOl zj~guC782h=tOh3d3F#=o>ciF&3HAouwX#|~ozO6fkmudFAaiZpSY=}<**_;f|@cv}q5o<8@-@nL3+4HDI@I*%1^sXam(EbTs z`E>G&5CCRHytJAO`?vFR)cw5ZA3hV?i1JYc?)_^xL`izDgg*xZmU$IUDBcf$!u5lF z<~&J&aWjVhsVg{5RJm){t_x!Uyq}K;DW@s5>?dmD;k_T70oY_-uSA<6G(IJ+K8wve z0Cqbl7Q?Tno}wy%MHOeY5ZVXBTlECzWB%cnn7Ds`uo_=@6#xT1*fKyvpv#uE7)b! z%4I4)l?npwb3xS78G$CyjHw&Xs(3pr%ZE7z^#G6)qU zv!s~MBRPgn$d?h&33+_z#As=JNPZ9>%6gO=y+dv=d0O0+i`zVOy(w!?<>`1i5qdU^ zoWJS1Jiu93(bA}Fo+5g5reF1P&H`#MWXO=EzwV}$GMst&wUZNtN;SJju0pF;(Z!2Q zVVw+@2i1pJ(%)G{!{5MuF@wR>f8AjD|HAR@7;)X}1s7n<6+_4uF1dq=TA}+Mu)2F?7|4#yWtGd$f(uMBxz456Yi z_)$>_hMqpRPld~*{+IK8TdMAph=^uvN-M*yiS$Ge{8`0flT|kSi4U2^U=<0@Tr+3R z`1b^phu;(C9z{#HLWD~?rx=JyZ%fiioyKJS+mgv)(8D-PJgZoG>Y81U{(jETEMMDx zmt6xbuSFH4WUlDPf;hX*P{lf9!520RSEOJ|k)4`h+Gu2&=(eJKQED<= zaev>%1T&S7DpU10&P!HfRum*NPr)38+2^zF&q3 zQTO(T9a;m#P_9s%k(ltI2+XwsW)PuZ ztrYG|aHwj*SVcmfom#__UwQ{?+Bs9uX4#r?b2G6MTC!em<8>ZY_JOfK7#x2eob)$eF9|dM*#;p49D(5TUCJ^7<7R%2gs|o~M3-uHc(-k8vdE zI^9TD!oCD`vP&>OIvSD>4Ov7J52q6K_=e+5Se0k&*=R2s*)xHB)6h1#@9{ljV z8>u5X1ff5*n`Itc;IXc$T6cJ`(uD)J-O^a~1e-ETchJReZ{ze##+0ol$r1bHSnVu1 zR*$el87t)FiOdkux83M@+k=OUXWSet9cN_`-(edw5A}PrxYpr)fWKN}Ev9M6C?v{F?mf<+a|vHF(|= zwbIGk_Bh!93H5AaHkAl92+umXb=tI}-gLU|}CvyWhp+<4T9$NX|Nbm3zo5ITkRFUHjNdwAdy zj(-dMC+U7Uhx2=&D9LmX3j6YkIS}wvnK6U%U|-%M7Bc*UaWbc-W5u!J?6(;@@VgL4 zmA85AWQDkddUn5!uKGA(fX!3TD}7qq5p_SJw*GMG7yik2Uw2MPm@%Uwk2nK) z$$X#bYjWc5#MiT;#zAn$UI#K$1QAaU&wRe@brHS&W(=hn`)(jF+ ztHVd&|CNG;=FEjx+iqQ%%IE+1qp}65`0EQmKh11>s6pdh)r@d_mVm7J$*AcJHA}gp z9Yf1#?jWA)!-fqXc7qNhOg-d1J=Bp-<*)ok4Dee?y)#44M@V-yRTf-&=+L2%D6Gu4 z!n4qqn=1EtueK}hy9B%Cas+~fo=2g9-wfsZ2cB#G?9|lu8ac{v+c1aM?kS!)!0vU> zdyfmog_?watZcFXp_y`f;3(z1BL(8$i;&B^NS~}z9pC9!E~mm4_5dI zA=BFSeJnB)*(LQ>9SE>2S>lLE^|adc4*ktfuCZ87Bbp}sP12>JwBj#xLE)B+OOfrg zF)e&G)0nrjLiYF(KUp?$bBy?&;SSU&Q&rL25uGZs<8!fm8cG|!Z ze4>CMuK#`oHXd~h|LVYe$7NELEu%(_nhz!-9j_Z$+XD9^<&}eqx2{cb985Wa5i^Yw zOzg(!a>dZ7Zs;L(ap?UDO=7sYmAjxF^Gkz$*E3Ahd@b!*U5sa--sYDAGdNaS-~>k> zTf&0LV{=ei5=<6af(X3ZOv!o}ud@|lH;nh#F>B<2d{c3})lmVx08}80E1&`(gSLe>W9s<706%>F@iOQu^XZlf;k{>m7i*T>qu6xw@j`+BTY>mGe)b^)+=d-?VgQulijLQ2!(~G2)I)$n z9s3qu8!$zet+)ulJ`P381N)_ASYxQyC0N6q0NvzQR3Y3}^fczl!d46>*9t*XWplANcC;>OsG%zJBH^@Zr0O2` zu{A%MMDdZsP0^Q_C~#{-d0Fm==U%O3m#U96nlS_yw5p*h^%& zLLHw8qC%%cp7>fl-7~>46v{qmi+&!K zkOxL~jO4*J^rOKN&qIZ{x>-CY6-hE$I60Otl0=&QHjArK(+H7<`5`7hv+}0@7+GY} zFBDOI(l&A^qLC<1wP3p<^d>Xj;6d*TArpE{=q20^=5tkj^Msfl5{Z&MAjpi?kU!A6^oq*jWg3PWj4i*kvoWjp5^I${u zgU@{eKjI?&@`UygN7e21G`07$)Rhx zyVp)nIRBg7Yo}W$eBh|yZCIm(?KYp2Y#0?@-8MdUf|c&X-knlIZ|j^8^?k6Kn4KmL z%|7i1j%PCdJYbS6Q9HFZ%QF1lm#1epXy!NXw8Ux*i+Y=XHfYeoP%Lb4O0-`Qm2|zk zK2CQyIsM>Lk6ItDyu5LzoKa&{swwes>kN3@oW6JeAMs|zd z&#G`j8k}U<*mQ2UpJW&W-u(YPW^^cR`P0beZ{y_lkGY3Qn zS(Axx90F(&|LH=Q6iS&VY(R2tp~)~(==d%CIY4`?v8^4XS6@65LY{$XP>Z~27dGi{ zK`Z$~(`zR_fbmLl8#~9O-v>(x`Zjr!rxX4#l1urR<*NQ1P*SOm;hQDq1?iA&9?LfN z;WDe}EuH_%)DPBtHycwx(nFSI`a3D|wziXa!-A^Y2@Co>dZ?=uGkBJOJxDCe^luPs zJJ3Pj+gSW)0UxZKPe80uU+?x!Aa;*2_!lVGioF7 zMue(9RFspAPqKL#fjc7fSb6XP?6tbZ=>dk7(J1dFWG#}!cp5xgUi;AISiP=xYe z16})08^d?RsvOYP(fe~+z{u5j#^D)*N{XPDp6AzS;U(7)Q8Bb#u1=pu@z|SJ^gGe` zFTZOljK>aq+4TE}F09@pm=k^cK2)7^KVhM+X*gqq+I%l(Mt|r{2yiAVuluiHe91?G zCF94XB+#4b_#p2!@oB z)@{PLr%f?gyN?NH5-_-Qk0`RU{}x>UUPVy zlKy_a8CZ$oTeB&O@;YerR}_9#V~P?*^A)TpZ*zg(Rn{U@Vk%a)@Gtg0D3?4x(j7{i z8Y)6_2hZpzS7NYn{8MWGL^)oNR|C#hza0LhcRnHXA~5qGSvkFE-yqneM&CDw%YT=a z7%dtc+t`7?aW<8GrT>Q?-dCdEaDZ<`QEVYC=;?}5)q$<2!Oc@yfGxCRgJG+haf9Cs zc-@NFz{`+~;kqC66kFT!4wz<*uPMX|90UU`=6B%Ks}7+&F=KFIa6TBXH!vUAK-bUk zpqx8Eud?BV*U*-~q5xUlrzZ|fElNY}+jOivDrNY=D-W%H5D7BYV z{62hwkrga8*pQwKPiA8E>ceTO@Hyz<+1&T~qob*cbwa2>zw4AuAI3E^H>Pghx28>- zc2-&cma{D~@t2Tjx|X;`Nb(Jn*7z$8b2RLfH3YExN^uSuN<(T+T z$)2#})*1kw`BFl^pUvuz%RygiX&*t~AA3aN6v zPDGCVB)O4}#@a%9%o|Q~lh(F`ImsF%(8;j*YQ)=QxwA^j`t^I1v^Ctws!|xf2K#J03T;w)TM8oKC}YgK^kLOa=?T_bQl(^yA1G8wH+lQyX7#Azf?xHGIDe@Mb3|Iz}uB?N? znMrx`6~0ddMe>@49bnbqa?#EzZ$2KzVVCr5KYGADCKRR&hGBjFQ<=uV%%&ZnD8J0! zpeM-2r)1s`b=)yVO%Q{<7+$Zd#C6j#8ENM0DV!1R&|Gb06S|E@v`=Kk9djZ89wKC8;h$gI2Pf(8UJV|!cJ&dsGVid)l%`= zY@4|w+bY~L6Anmh#?F~8ium{Jxg+zEcm23c*^F?s-vZyAOrjYd(kL;#hZ8CV`%0t2 zD2UUTu~pAoP`7-#1#g4d(Qv1h*H(P0O+*5&Z#SroPW$ z>S(O)^^}xAHq7kz|MWt+hGgN0M%lYQbg02RI6m2aF&y!u&%6{-hx1A`(5E|tME8qt6xhqR26!;p_O8VY(Ba5Y2 zZIZ};(zl$MsK zTy!vsDO|W@cUZ_`dkjYCrJ$uEeGQ-UH&6-c7!lpj$<%z^s3n?OO0=LKiEdI$G#-J* zt#)?xd3u-a6y`%csdQCEd22h!FZh-g%1PxTdvKHvFyi5Mj?jy+RVzXs?>$xrCJxmq z@yg|1y*Gei{%;(7)w5E2w#sLoJm$TFKKC6Z1rRU%f^oV=kciJE`g$H50rzce!a@52besprlNR+t`X8A*FXn+RdvrGa!l zM(uo6dWdH^6(8ct2BT6`)>4C}zX562t?F-|>#+U#cG8wfH1P)4aATWdXVS^$TR`U6 ze4Xg#CDVQAFtyjov9Y7@{YX;|`ta$F-6%&c*)TM~$^$~}k|x-(!sMD&8h<*cWb+?3 zA5Y=UlW$#bsOv6vkD(|Bk)3d3t5}6gC^& z|4x7DDdeVL#)BrdeH2s(dxXjMxk)g&SxJc9RPc@Ng2sb}NU&-^OrTdO2`j$~_>?sT z3$6yzWZPo}HeFhGL% zw14&aSocsJ`j3auKtoS}Rf>kSdzYj{o2&7)6R06n=sf5x5<)N}!#AS3OR!h$|IQNl z@E+NEded~);t!3Y;5F#66WEA+hws&PBxGXaCRG{_idxR5#&ZkNt_;k1{TPeYCgIwu zMN9s0#EfKpse2@kUA&-&bb!3WhS^e|9crE~w|_H9er~Cmk|d~E)kt9D`3yET!{42- z=idwjp+)3Te#_^eD#Y5YSUMoohe&VbhJz!=ox+x{Ql`t%npy}#t=*)uHOVMtm$lRH zJp9A%eSv6?V&DSjzFv&$^JE{gk@lm&ky9OBcV>AM#>p2)bez?(V^27YKhXh_w9$1n zhQ~aNW8boa@4sjIJi%mubI#F(V3rqO$Yb-`N$+Ef-5VSD6OI%$5L6;h2D`1q(t~45 zXH*$`XG(*c5xk}x@+%gYG{utFDBqbRvO})#pW^33*l)1%aX8C79%k4!zsqVhfcafI zCxR*Of&QBthL@ld(QB$&2XfR)dA>^mq8pE>vO-^F>XPVBRWYFYCT zg7}h?6lI{WPTKPv%H=ze7Vx@n8dOvQy=ZKoqJ5`V`ACo}uj<`kn0RMx4<2i_6kf&P z;eH(Q!B3ZASM#bmeC;&h2^@hqJW8-6;I|95d>iCdc;xZ~S7dGHq>Lt#vjW(Y1;eM`IyF?^&@J#&r9+>U@h>~3#} zqUJtrx3|)Ziw}-|6fWF(+O$6W2Q83&xmazFuWTX7abd88lssDuPNHMx#9w=SEPz8O zMy*d~Wo2#q!YKgQlED=!H2taf!0*aCAq1up`S-|>*~3o48UXyxkdI$ciFC)*rcDdT zC0IWDGKXxJ_OJ_tOK+t?XdJoh<&4Ji`QJ6I&R9&awyjp;9Z0;LsnhK~q(ttBbU~+S zenPX#9&iGST*=LA!U^@*k?3tAx*|5$mvGBLcq9oHr*zbcaB{f{ALPG=lW)dsa1BJ2 zUG+;)e}J1Vm=$QML5gyV?=F3moONqV%Q06KoH>+zF{ZbeMW0d$Xdk3@=vx3bMpl5I zWyrBYVREdDn=rRav0~d@7}pb|rD%(7bRK#M+oveef7n&Hkb+jQ>|1d>#V9iz#`=^vZ2;nGI2nnp@J8*dM$t-Ps!Sy~=5@_pTB%#*DWA zaR48h)!Dn>2A)1_YF7B=m*$R^+uISRDff!_uarRN3KdEUdIk{0sA4!Ybn2s1leypm zHarMaA3uITEyy_B8hC;l215l0g1%k}6C$p~GiT16wZlA)q>0o}RZ6I@Eu7Z0_rRw- z!pd{wEWgO#X7 zh8KO8s_2{50|v)KCimOgx|NDDD6env_cy3E1C);TmHQD8_o4HkLCYo9ii*bhHJu}Z zZ+XYe3o~ajLy|nZKxO@(Q@v1rGkGTA*JU8{J(|$VPLzsId9?NuaVZp-zGdK^D|cTP zqrfe{>uxP6SnlaXPbt{J&AyrXS!bnsC{B*Oo-D_j6FD}3%#_7fE7TfG$4w7SR z!)OFE+$G&$S0eQpjM9a!_7$>92mo_FNf5l(s&xGX;#jh_2k}uxRwL;$@~02T)xCSa z=f)js0Iv`G zeJZRRu7!NAL&4qVz$Wwz29(RDYf2D10vfIsqRy}z*|j;)Hkwxzjn z2YV3|R(2zFNqY``*RO}^E6e#@Q#MXWydlT|$ov9HOtbcLSXw~&bY2(2v?&h!l}A(p z#n)!6=GJ*MLC-rdCJt=2xMy}=@l!DU1shHY*}^q0c`lQ?1tQ4vrAdVQCW;U;;tNJm~Sj(j;E?x`m162xY5;+>2K`Cx`{IlBe{rjSRJNFIxZRTW{Wo+$1D z%2yj*C6yhqp>IekLIaZ*mPYy0NjWEWM!krl%a5f|5AxX0i3O8oIwOdzaYArigPvoL zr=%^1HPtx1$S!vD8?4_Ro#zpM_H(Un18gCg#I;s$lT7G(<^Cb<8Iw7PDc3pjtU-+n zBuTW-qe?1$c98*08a3}5>+reJl6OL=@b6>J3X7avgir~BP8Q~1;cOu6{kg&=&WAnU>CONa8Xh;xU-rMOVmb{aub_&=Y&nz zA_Z4X7+`>#5VZ>~3`xgtIK3PqJV?|Es26Rhw@NrPR1aJ=q5cNxzcvXg`F!?yX`A9p zO&(Ea9BV{lz7$%-W~~SAgsdzc>ywpL8hQ|36WE{bVI5o5a z-^fZDgAQjMkA`Hdxm08+qu~ zbM$69v3M30816;G+-q?xDv&gx*cOXpQTZc&K)HS=#`rrQ zM+n0Np~AUQm<$6r?6egSON9yZr%8p~Wu+~@+xXn2#SLbK{y$84G;BC{e@9^=3Qz;Q z1iI#&tK4wcyjAl_L?s3(H~PT#-JjPj+I+`xrsMrar$uD@PcY1EcB=w2T~hz-fqR5D zIG-o{!A(mwjJrklXGfo34KKsQ1z!JgM;;CE*b&9{$Ti6VPsx(V`+{$X!rn_^o9!O{ zLs3=d5E8fTdiU;HIL^QG$&>9npWaJ*?S3Jn8eUJTYY4M%Bd;PpN?t@rU*Al9ued+o#N z%*-k*U8tq(HJ8r=gsEc91bGJx_J-sN01FNJCu8LU&T`*k!0%0p8u>|t?l_^u^G9d@J33|__JMY0`p!<{W7iGdJqCFtM zQn)^Yik%-*&)eIZ(Ej~wm`>#1Y^g|dlr*WbCq1(rX38zRuUNOB4>Msb>NE)0v z+zI0=p#!~oLI9XxS6RBm20QSj*jYE&H8D6bryw zn#@RSM1Wy%*2XhP^GLVBu>JZ+%&_@h0y5v+xuZPIe7-k#u5EpyGQ3^yo7hqC`Ix@B zb}SEA`nJxwd)-%*XVnbJ`T!|Y4d3VB`P=Xy6*I#GliA9RPWsrPz;5u}Hv9W)UrPrDvO=Xq$p4kA4o+^)N9Srsj0)QXUiY9CKpTf&_4|pr*QICS(!s4jVd@ z=6tEea!_x(!CJV%;N}cznEw7 zw~mrlr_7hI%_!pp+d<2*9gp^$k6lkD-sKwc{)$p)tfG8e1QmE3Ud0*g6y-0ECGq;wDZ`4?2E9F(!jMUp;&?~FN{vY<<13;(a`yZZQwZ-Z+ zSiMDy5~6LikZ2J^j}{>kqD6`F1W}_!lpwmqDj`aAtM|HC7HgGdyItGMoq66fx6aI+ zyZ_&t_y2u=-(V7Z&pDrSrakvgFFpvBd#FrdE_5x4L*n}*#|FXT7t1XHRK+5JOnqq3u2 zuEFB_M~^jF(dCa+8kd*i=-GGl@)2@jY@0R%lH-KJ^C4^u{{;qH!L1;d)TjBU-Pg^G zzDSQ!-_8lPm=pr(E!_w0=q=>YbAQ)Cjo)NFpS=W|JKrN-2% z<;$11bqr10*On-`Y#Hsr)o~BAWkCrTTNwb-Svd6r0W1ZtbrgL=VMvHuh=b7Ex8ZGS zN%d`57T7tA7plL`Wd70}gjxU;UqTJW8{1cQ%U~s$7QUen00Q;K7ZsjpKR3!l`si~>^7B60W<=Q5Qa_bV-xA<8a2pE?h%Dlf` zUhj7w2kyedLv$$OKrdNgucqOO*&4LMRjJB+`ZyF$pycz6L6>HL!EfYf_b&Wcj5lw{ z|3eOVPFobTanYiNwqLg1_`lBUgEIqpKbra{&==Q!0IV6;4}xlyi^i{33U0*!lw3_?vUk<0RdAx}{a^X& zCu`4L$$+W_>~VW(UXE@yd4Ll>%qIA$vt@(Cy2H{7!cVPF$P!a(7QridiOGGexKsL= z97p8bgvn@5VlmS(o^RAymQx z@c8GnsVsBNU}&+n3;@|a*j8^Ja8#8&ju7HB0QfFkVCm!~V9v$We-ZWzAy)k&WDndt z+Efsk?0*J( z_P&d6m!e3vmhpJeTa?mW<|=n^R13=FfF>8lY@uBY=Ht}zJm(g;K5$qdgB2c+Q^rv% z&p%*CPJK!lE;CdoGbxh`rjfR)@iCxG6W|nU+M3F}8SX0NI|^l?Ri{JIYlQKHX*iYk zUcf5qW5X}wISoewnM(#Cusif|AGprwhW%8-QZ%)yyQ|Ft8Xm$k({N~Gg1adl@-GC9 zudNj-J&;W!WIu+tdm@;!law$8XuGq25}qgNPxDiTrp?wEM-UvU0w{mISCBo~CSRZO;!l2bctG$Tf}ZwPTHD|1l{u^1kI* zH028>$=}=UsN|hcSiLQU^0x^kk80DlkIl8DM;4c}iK$@LOMuQxUKWI!rvpS%m)DXR zHh+{FvwmUh^NKPs8+|dGyx1WW5R7Vnvdy6_0!v5;`H@lO$O^>q*y3!P2>F#$MibTI z2tKvdkVc__b3`59%H8%DA%9on%}}MQPkeVAg`9r)lRcJM2abz|Yo>q8B^bRPZ0*VX zl$n+4kuhm_v&Ayhd(ejTU+}gm$?>fjX z3EL|5+JlpNc$;J2ZuWB8F8UpGx?upeDhsbu7*91kgy&=&TGwD}z#@r41_RHMcknJ_ zTxfB@*W0}KjSQc1DG#R0D82gGPeU|ZX1z|~) z;|h2xz7x>MdIIepSRI71UM8Ae0~VMEH46vmxTh)A2*B{UKVf(Z<8=arD5kq7V(n;P zbY+(qUe@*@aR(2sY|>qV!MuYyr1UXhYI{)(6nKg`_L>26Idn;>9Tw+abpJELvcVZr zPIj&7h}b{yGt*b$c#+WllqB`vDVmgcTiPms)W8DJu*9CyWKAJtY(Aek;@d)X3&oN3 z9`GD_rlSka5cNCwTw5Z_nHC{W)bD393G?CrU`CM6s^|bYEJEnC zb}Wp?c{0m}UDUAV#D26Z(y$UY2(iDNr%0c-JUTy0zC}9N{OpLy!Sh5J^*Nyf)q-<9 zBP6yrl42<92OXgK^|^d~x$04FN&1WsJpLh;`GGyp3_sD<3@}sa-$}Se@$*}3DyF92 zVp)!s?gi2{0CVhf0k($oh+$k9uVq+{%*gJaVzt7Ynfr)V{o zYPRw9ESn7SUl&jZmzM_dpTtK?ixtp@ZarpVyvQk&v;OG(>!Lo+SdTdDIDEL@-pn$B zuN8w2I&_or?ZPkZwU}lIvlmXGRlSbyG&Q{EpI$d{{QJDf;PSu{)jthJcy@)6C#Scw z8^%Wjb(00`g#Ptq5_>bBz?4o1ohn(laA~Y*p%djFBrDo4yn`Fc)8XFVLq922KR`#c z{de=(h7P?+$h@JF-~HWnT9)9bHewn(&0kQ@yF~31=vRjWi3^DoNLbo z$oNPG1k88l%+>k~C%(cq#Q;+sU0%4OVIHn^H|v=SJ-N}fQ6t+>SZ&%Fn_JC@&zq;7 z14rERy`3`SFwC5N>Hq>pVtb%gBP26s)AdsI(m0LgI#JagkbrcPd*ek)*=Kmh#HwyEI5) zpfv`^d9XK~u(u>}7#eeTATM}*xMnZK3cyPH5fWb7;yCK-6oUC>4ii_T{ zk~UBrUeU6>;An7LTnzu=xPM2iNvbo3ZYbf7gCekvp^p)O_&l#D_MM8l(gH~3bkRWP zVXge*-VRvqK_RvYcn8)0TCvC1d$Er^cEx8yz8sZfuu})_NswV>7tswf{?P8VyG8V6 z@|QL?X26N0_qy0kKvE|}QSOzILiqp+@|HrVIYgtM971#9j8jRIj%xeBJ3ThD+-?j_ z+Sm**#ajycQ#<9J?c<}$&#@BJHO_u&z3P!0A3#&xxTDNhtembH;c)xk92y>0mdors z;Dl!d2goN1yuk8UW0~0-nIs3sZ;&=tRn7TuzMhlIaY)hH@wEcP*)fC`>c`hDCg0iY zOTD}`fC?AOF0@%h{OPpOVj^jSW%DDOR800xWIl>#_k3F+G7PmzB*FWM97EOMULoSt zwJ*@Jfk3;&h{U`-kSfiq%38t;L9HrGx3xj*OjPFhC(64W-IO5T zIa83d6SwEY!}ZY99J9HdEi_bh;E?`ww(Up7Rmzn@tdEd%!TQt8 zH}=4R1AYKmdv8s&yjndd2QM}-MHb;vf6w`2K3S!2gr)U{5_90Ai`bW0b;QCjye+>% z2O2)H%EVR|*Rk3Lo$rY98~P+xiosPs-e|od#Wvtep0Hk3twRjIjOTh~Ug2BH^?U}; zKG!R!?>Mw4(0F){u+oZEH|gSY<{WjxKxvHI_?k=$lb9{O?^!6SN|I&%I^~qE8mBHfRkuz3Pv>_s zi%o9m1oe1f3`KSkCmMRC=uoi>(TjO|SIXKfs-)=k4MGp&Uyn@p0QDDH_i zE2>brYgH7xQ4GuQ#cORa?fFYx>C=vFGtZsQeSmgHrM^*NmP1_~F^?amgW8VzuNY9i z4??@|N)pv%QEEC)eR!Mnuz|}{)e(PaVD}QS0f00vP@up}LKcZw@ZHtb=^I;*sOM*M zaFn06E*7vg8~{vIkk)V5L|!%#u~X3-RKo-0jtHT`XUNS<9Z{`VA{pf@^1km;zm0#9 z_+~acRZsx-J6)GU$P11%yeBUVymq)rV&LDBkvACTBINOqyt@;+*}TnF<}OKsBE)M? zSRN7VLrC(MR9GtEpdCy3LX{P~6DeYqR}KPE<~(_-6C0-L4%q-dVETH|PUVlSn>6Wb zA1U;&7kU(JKKJ6@VMR0BQ__$&OKJaMtPQIN;-~vt&5uwNds*_$I#)@sfVQw>T@9F1 z>lE6_AKSvy1P$RrDEW(qd>}&YrDiQ>rr^l-IV9Le^kPT+s{}#n%|CGY&cptaeCa*% z``*33gi&RCzUY2^Ak7yY>?zBa!bemT+9I|*^Sr2*9X%f6_^-scj=>}0_|^@OFZP;X z48H%x0cZ|}`-oO>k_r7;6}(-jO*O@CbB@lLQ$$*g*?oG=B#nm7-g9y9DA`+BE1nLr z+#?TcRe7fNvCjtd95$xHb=xk9JbTGqt&rPDP6~NBK1`oTtsO^}2^iX|UYVG^OSEK& z=?juR3}xR=h}M$fOd&4mr_PeVHqy38TR1@ZvBT;RxJlaSn(4AhsiTv~qhef08k7AR zj1l#XC)>m(7{I&8I%vGDC#00kaF}~LZP(2r1AU+;)80FsrnrgF$M~Fmoa`>rd)3X+E!Kj`WvGpKjHAQ zT!wot?$n^RCdsu4Z{i|UtU<51=++w81mp6Y;m`1X>0N+|p#tU$Ta0MAOWjHSq|0(? z_?}t7pTw&*CG9V4%`_)LGM^>CvDh$t&n!40E}t=2-auwET@!p>s|Ym(*hX~1R9(PF zCEEcD`#v1kGW96&0ruBw=WM@3;EnwEknJFzoELPeuf_N>4aF4isInVV-fEDDANn_91o%ZUy5DFW^> zCsr9+sGeI2*Iy>tvET2{?wkp=l47d1$FEo&Q@5KUv<~B#dNKgcjDZ!mz2#8NNH{q_ zRzku^3M>JQSSmHk25Zu>t@Ey_mIG+7{$Ur^OMTswOk*%k)4rF?b)Vnjy#5}{+G!Hl z3dmulq00T?Ex=lS{Svg;kJB6WiQ@0ee>&ko91wVAPR37qOf!BQO#kBGS@pRuLd8@h z^}09$)gwj)l1}yO%J`;}<;ENvGiJ=kcHoUf&4G%GPtlHo+ujUqxhX#7>ffW=7AaCh zY=*Xujae*z2T|GB`)0W;X7MI6TND}msPuhK4Y6v`VU8o|Yw30D#r4nshfVx6946~&t13s?i<(&@sNM;;x1R$$WrVp&e@>ZU z=8;tCFea$vdP4RwnjHB~3R%Dj7-kf&a?zwk0>ZQZO1e@;X~=!UIelnJ2ACLu z{~S-mH^mC7GvAQ40EFs>Cw#*4EPX=Rz_Kj8ksN1PmaYby`i~hI3%m&T4&T$O-^uObhd@Z!#(!{}ocit0oFSMtdinqd16xD{U$;x3S$Z8byHE!mxuac ziK%T8$LU@h<8~}$~K2m7=xm69(fLpbLL}31nF`bB{YdT_Bfvsz>Gst%Hkl!~MCux(_-v2k9Y-kUXK+f* zd8Z}oFpHO#B>RlikQds210zN`U%F{iQtEPCn8!>GNmc&)g>}}BbByF#MLeI*RP~19 z%o=Vt#gr%jO9+&w@>cRN1y2o}bbI(h?r3P5MW)%lnf$M+ZeYjgaVam7wmUKOWiaOwHVfoiS*Z zi{Y7e#jZGG$X5~z6&qgRO-WEVPXxTUUB&02NcSG^O?|B1t>@x zcp5AYJXVFtx_Z-s&1p_tW@>OR(Q8 z79&u-5?cxqll4lGbj5TuUt%Rw@Ba_Nf39P*v=e?L|J)&7U-3(6xR`#Gp`AjDEveIb zhf)Z_bG93e6AQ?#5W1@N1cD(;&Ocew z_{mlo_D1&qJ_r2VZnvLHYUcwGb$&iJ*nj{PZ5aqmIZG4rbE*C^pek_t_^IAehVho_ zx_w~(zbd1i_!yRyQ3G*l`e3OMpx{R#A0TwcV${rK0Pqws2BMhT;HjNK(s|DclaY6E^_uvdoYT&0zj6Zx{BSQ>N0Rci|MKU1UHz1h~zYzOX2W6)|0QtRhPr_`|Zq*(F@?=~| z^mPLvpFG|H=;c^x9nc<(4ht=H!yGWjJ4w%zKONf`0s3jisy|Kmn!~~})!v)*f=ztA zD8nwxaEKN0WdpcLx~bm1{Tm_5#Yd!{5lMKqCl6GvHW+n5=LJkVxqB}pGb&Euu$-$& zVizdjThKGpAy>Jld1s{(abt$Iu565efwoB1Xxo@}XnL zUd>I|^aa;#5nFsAG0B!2Gfi_k=PnI;+j zGtWOm2REdL*z#YPrcfU%FJbx5%|T+()9RBw55NX6j2{hWd_yJ2!f9&MsTfZDhylOW z5R9LlI|pn2@Not!8-Rmu-@ZMo6ZB&~0qhBbp>lo9^&}L##bOK%Sh~{)X~psP7BH%B zNHquYe7j=HU$B}_*=);@F4qb1+cmFe&(E@OSo0f6Ntnb9%*07mW@KvgfdgSv*%H@K zYK6B!!AN_*b~h_Ebn_dEaXA7SNIb8*{i(#<+= z>8g8_hL#bfK1w8qI_G!`WzW$o<~R?*jg@N?(#WB|V3H+PmH`F7_~Vb4f3M0Xn!N^m z(GMJdICM+t>6ioR@mPa5%GyPcDJ=;30bODQb;$|6; z!7*~PsAqGPSn(Zf9-#zL2t8CH_%{g^h*IupqbpcBC5#BSQotbm}>de8(mH zRA-)%-Uo{ROjRGJ_ZGoEc$+4wjqi$Bi=ekPQKsFvzW{oeKiqt4Bb}jRwy9g%F+&G# zwLWdqBC#z)Y=)?A^4o+luS%ogg6YN0Xns{x=9_9j_#98gw>EFykFTxnfY#$C3^q9V z`A1$*pJevRQRl}P}0F7vFr za8M0-arB1>*`bu(`|o`YFgaU)-!`HFf5Eb8(P+2 zU$n99~Z}dE?8g?* zQon{*9-mr*m6-If)G_FhH_DMeN7llu4ba(FCI_rY z5BCp_3J!efze0e^O}L9E_f*}$%d|hlIsbhe%Q7WW2e2$hH+?P?@C^Fx`em1GWMU-V);~!X-qg&%S9M3WtVH?=+`oMUp zngkcK_%=z*fOnk;*c@uPngqs+HCJGKG&#tAGae@s=e<|6X3hR{uSVmPc`O9yngtoZ zYYg2K%e!~iuM0UDvTmJ=i3P9m+HwQbK6c)cCA09aJY)!Lkb+jvZ+8`C_etYzH1Y{n za4tC$t9CCMh}bZ#*@~am)%)Cr5v+sQgF^z2$PY)Uubj?-ayJB5(K67fXUepSOJL(2 zRw9-NP2S~LIq{ed1kryxIn$ia=-?5FI6SgW@sT_EJ*r)){?jg64D}6oMzFBqD12IJ zofEJ|vB#{|$40SlU&rtQ<$MNHd2*L~yK=*pGn#77?TXS)ZiV(J@)Pe-w&pKMvLsI{ z`nDQ>81h9Q72&*v-w)FN7i?s-yKG}(kIk!_*$({cBxSnWhB(zU zdJL0U2k^6a+gWAB&nE4JHh0Ny@_mtTmT$MZVsEuI{Aw7z)FA28=jCoD4ucX+JviGm z{%S!+)$8mvlgl5*7PKJlXB~QUku2duFF||_LwAzU`SiF%3@qh)gVLXcVohx0?>zQa zGh$+OpXKMkR)lOe1%YSVm^8{iJB@6x-kWk;(|;|aqDAVDx zheLxtQS84L{_Yfh_L793oHM$T<-bWa@hHYgSD2asq(ujXK^vo#`zIRr; zc0)6mw(9s&@;PYM#kVIWw50O1d?!r;huShJc46P zWbbu>_YXmZ6Z?#B4EE`LT9~?kFCaqp)xu8tva!4RVO>} zM)IG@fw$XEnKGqu$&$^-!jo&K zPfMwM;~TJ2XCgo5Q}@opF&?PIyjXJmhkC3Pr8_?%A*)iz_Nub-pd{QPN~YxyZB%|7 zjUUrOXOz|{K~0**glaKj4n>N-9p{C+GTTse>mJCyMqr^CRbc{)BtB&&IiQ#e! z)PE-W4*WdJiC|YXp0uJK7VQ;7&I%vI=(G`UWvSF?mOpv1On^{W%Er@|V5skYGp$xq zBc=cOL0u{QjTTAiAkxs_ zQ?B;o$P?*{K^yUTc5wYyBP!angL^(NV7Ly%j%CiJwVpEFIcGJabesA_&-wr&#x&c{ zdW)=WtZhIw=P7c8){1#=lE=2xcO>M?EGW+&5?q;ynMP(mM>Y@H@`OC9VuPS-m@iWT zobD>C!z9}OLXk)P&8bRqa>C?H_Qz zP)v?_e|0astrV&d80X$8>&Ah0?X>B2vPrE#*z-tHCkS?uo^&~bnSb^dx*4qQfC~<3 zph{JKvAu+r?fecFty85ub)vu6dqIV_8`|@1*!0mlRw2yllIx-aJGFYR;pr{5xHO52 z-L!i3+81ftC3Rzw_1m^>JGX74ylyli^X4h!z}t-)<*Cr9(bCncPfisI`?jzYGgv(n zkt8M?Kbda+2wJstoYw!(4z=p@Esn3~P#+GsTHF33m5zb4Mt`ym0IGft653X5JO^Pi zi{)8*7$z-Qo~1LNBQBQb=u^&qqKaWjA9BhpGc0Ydq}JAKQZCx%K# z`@UNPLQoT!v_LdHjj&bs-ug#;W)?-oZD!u%vy8x=#V6Zwxp)ikh3NsatYGWFB@B(a8< zEZ?K|!Ibbh5@-~&7J^XpjdEksL;wDSl^Jw&dLr4wjsF`6${kC>zLdX(g^!Rxhf1ez zRH|~r^n)YnM5cchy@(STOs;$POXz7gMCNle+`8RQ%QI7^6K_X_XGMEndW&+(ze|2X z?<>n>5MV=!_$T>Dv0RT*UWjXDO~v+?4-awvqD{4b12N_$*Fj~Y3}^7#y9c_$OXd`8 z)&_3zTTXCIUSx84FnR3Iwn0^$kAW=k07uH+XzK4sjDPO(t=!Y~YK`-kt?f$&d!Vz`>E6l4S<@e0}7GZ6}*H~pxZ0O>SG)WWo4AiPQw;R_f4o+&oq2eGCW%2 zB~Bf38(W8|sS(uwtb=&E@k!{z+g&Btq~T7MmIG?OxSggf>|VV_lAMhiwOBoW<{q)P zMzf%%Is=W#J$rr>^VhL(JJu0eJ-2@z+p(&*9s3o}vkNsz?nf^^>AZS%LmB=h{O(Xy zCkMFf=yw{1Wh1h1qcvVxw!r#lk}GiM;pkP=w*iuKh_dTVse$e__5gLs0EdB7%}*g; zrkZ6(wzcAcPZ7^YX&qv!c@)v6OeN;-`;Z{7&Z9B|2+LOLqjl&eENbmy+0%jIKwWD$N8 zQ=KIidSlYnLfA2weuYhQxaMxqT=D-dZxA0xunt>F2b+*oSV8cJUtR z97F@0Joy?1u*?)9qBFwL=p_#3(FUbF-w)vr*b0?l_t4X25=FnIdh|UnAs5u2L_K%j|X$ zh|2)-mkfgo71#7mw^l2$I+?e^vS9a3hYTHm<=$3rR{af~Q4YL2bm)PRLx(n#=;VG* zYg<@G_h(~o5%#k70^hXVaO)EbR)1^ltdB&?;8=Xd0i=UAIM%--F9RlJ<(@6UsK|510-Q1} zivv0mwt-8!37Yn=8DMZmp@Ut)!4O>z%RX}^9e(J9zNP1j?aRi-B`<86j){#)ewmK_ zH!kKNMHN@q%c*248 zaCV>SR*N&Z2=&k*jBoU0Q%C8h`X>)6aW=49Dt@tM4ct})ciGuKrNTvEJfOfddMrXc z(N~T4gy;s?s%rYC7x^dw%Xrm>XHW7LTjUA+xyudgw%|= z`-LRWAo{b8&3eaa&_m+a8xblo_7M!zE|%m(t^qOl@E0vF#M(bHZ@5IQCA`rc?VrOt zp{b+PQNGsndRfkSK8x(532LWLG_hH&VL3Q!AF4Ms%3Cgo#*2%jHW=YxGo47wtpbQ{O^%ia$Mo#_n_Z<>VzgNSv{Z{S>AOnGn9qATBM* z4*1yUPK`ym854~pVa3q5P$);^h)yE78`npDRb@`tb}F;~|c%d7J}!s3rnJV5Io z6u3-IiGHGqIB`_Xnxmp|n2!z1@k0`A^O1eh8I~>&aKgG)vc{s#qc;LI2U_2BUa!zv zxmnmLn`GCD8@lgADgFj+dtOtX+hm5I4-Pd*+p~|7*vKZ-1$`9fGB+bEN0_r69BCnr zeOkdkx7A`ScGY48>N);rSg8A&;FHB>#sAw=46O{YI!11XPw6*QKaKC2$V6lQ3%9h zo1{8_@3oUpT8aYIk*pFV7W<#TEZ<)*s`A%Pl|%KQXdE6A5)#z+U0aq!U>vd|jP~N9 z0>t{`K8EG1mFm@-cF2ua3tckr*+!iX-Oaf+Zw*1afDo5K+n#;#A)Cw)WQ>h5)NIdZ z_Sx%RUu(P6)+!UAzr(u90jW45K&4-Uxy28_TNtWUN>7rh=7$bj+P&pOvJI@JdZWIt|=tm zwvcKSbPy2wCiTw!+q&o0qrdVk>TpEaSp3XdOQ=(M;AUcXY9~~TxNI2m`e@=%7&$6N zYTGeg^3Sos8Ti>Q1I+riM5RH*o_0fL7^ZWiNjz!(Ye#m2$h1Ue$P%_#VGxY5;^bVZ5<&!GZRU+IKg1^LW98SaO9+i41Z@}(}1zCzQDzpGYx>Hbukp_;7#;5Tcra3gb0{bD7%*O}o zYcWotbzJ?gZUgj$Yb|D43#S+_y0Rz+ACJO#oe{M5EO`g?q0pJ_+0TZdLbcbeTQ|ET z3>x3Uv9_5B!y`D&*;dOL7@S$`$Nyjk0y8&jg~4VEf>RuFsiWMi=ryKcf_mthkfC1< ztsrKC*Khg+HNlVPn#H!J)mZ&$;Sao37=A_8dH;0!$ICy0qpy;Hp-g#^+9+CzabO|V z%AiXw-b0e6FvY3?Ak-!q<8!?%-lVGaJPi;&+{%;~gy({X0DvPgCr>u5Y>3t8FB+ny z0rUIEZ^Ev>TT8($TdHmXWE&&vPJCZle`8C&a}whNc{pz^=3@w;k;QV<&oG&;wJA9< zFz-KtYIi&%t)^X&lC{*nJx`&eU&wY@8sjtl`pulVTKyfEa)FvR0cEv*aO0GXrCBT3 z_t)||J-QsyzLzQ2%s_h&8FGBckfCf5VPdZaQM6)jUpLwRjy*LEcR(&vx7vo$auZ5J zsFCd$IvT!ka6j}(LcCR|n;!g7gObbAoQ6x@8j=#z(A4IMWf*_SOH8gsDqhV0t|n9( z3f~slO_n9H-KVLzHb>~%t16lQq8PlJ3nb<4fUs~JMVlk@Wr1exmjCbT0FGwELa6-J zs~uGdEi#tz*kHW7x)v-XQoxqOtcB(VVEuYJ(|9?4rhdx(m#)YAh00?&G@(-C{OODT zsJv;R5k62!Y3?*%6j1o>3PVFExLPRc1V8@8Y}HL@RNg>jivk7msRK)oq{x?t;;&QGHM`ubUc#`K@U|AZ_%!0pS&Fkd?tOINHR9vlv=w z%7I9?8je({n)-5T3NQL`W&l2-KLoh+VBSjA8@QT&4IvVQ!sQ;}wOXk0+ESsV!*TkbGx7rEQQkiM>JdnZ?{^7FnDhmWK?^!rB~oPd}*C&HBS9R zQ}tf1UBF`+=7!}(Fo_KAgNk*cR+@53c_=KGPZfQNA2a=D9vqm6o!cA1Vzt8924`@qZZICiXmaEysm|fS?j*;!KpVgb>kMC^ z6LtmT71EVY5UH9`a5M5N>E4SX_dbHr!)kSZp>70|$h=|7<&K_PamrmM35TYTl{IN5OIj)dBiy2+X~u*xqmv4s_YK#fqM9l>gQ zm4x9=zfQKT3O*{Yoom{7Q{M23+=-Ra|Dv}na4!)hJ40G}oeHs_TjV*DC zaDgMov&=2`7M5k{T5-0y5QOOIh`9@QiB^KWSzVPLpXlp*4}R8j%nJnNzEW z`BobXc9O3orYdi(OSQ*Dx6O)IvA%HhTRWm0?Ks8%IFrG4Cv{tvLj+uIzYI2r(JL%n z4wfL!5OX`*`DKLpIojzLjLLA>2H8hB9E) z3|f2w)=ZQcd~3&(Twr0WBrc|12H2(yumc%j2Qij6G$GK9@M{=hi%*E>b5UmSfXy;! z@tN(WGDeiW;T>`y2OP6rv*xrGHEY7q4&&;yZaw3S`WewbvAjS&9jeOnD|`hq@h}; z6_=?f5;>~p5JhizD+lVXm{Ho|C^dM&;K2(PEEs(0Qn-S{EUfMc0#irEe{SraZegIw z{kJ`*fqCAh7EQsoOA|N76YSn@APDuQHn%jsP%u_3D}(|t39q87_6FLrLg=<~{9T=| z0zR-K1*niYF6Oy|;7caQ+9NarLUw@QJ|e=zk+myy2|_bMW&xmQKq^lNIcccSyb0%G zX&|UGgcfe^Z&94)NO&((lOsk#Xq`EU#lUZ|&Ehx;(&m&SsNjbq9CC#7;=h*3l)LYb z^sHaf+7`w3t7(Tg;#mx~mvcV?@^o^3RJC99H=^MPz&4em((2_=nGRdGF1P&7(gmhL z!spXUqugvDH&$n@EBL#W-)L~_7ES8eS_p$jL(e6?rtV)346M&nE8SQZKoaGK9R6*KVi$M_aZ032B`;ugoVOhfV`%W|}D ze0h#%n3Bp}hU3Xn8N`y;eBHP*lkd4BY_$N*g$gU_v?#`(+q0x1T{ZN4!CD+-!+Hl{ zyuGd$$~-o`p8!^bT@~7lcNzSvfI-iGj`k&#!4Vu*ac*kx`x?~nPXU8ffyRtIEDh!D zio`tDW~99~z_JD&Lo-9Q^7u2TIzj}jMC9|1o~Xv^NE|T!s(_&j7@yh?^V27a7JVXO zrGA23p%4<&00}DX3P=nd3pIr25z&q&x2@WBD12XrY1tw1Qv={{p3{lVO-3YEXD}Yy zE$wSj-Qu+&Zj1kSQC&|znduPYuBk+_Wmi?6n?iQ=l$*6nPMnZQ4xzK8Gs-jd{I?Rg zaKw@<=pKOtQ+-vy`we5GbE zZco88-g5MPlA1zNxeT&&MTo)MpJV?SRxtR6-7k>Tm^*iQh{OF5 z-xHE_n_Q9FWv^7JOxC_>&a+ZkSHw%3Q>t%8k~T zvue7z&e*+-_RCAb+zS($**si~qo?)yYRO?d+Xlg%WAuVzvaO8-dgVpA|DGx>AZWtj zy68p~+qZ9D+@1?v;tBbJUiy4pyVr)(=nV3J`Cnd+m7E&anZ)#@zv1YZ6mgoN&<&%1 zKAh|ms+Vs`upY!fBGv>e%+u$KB$G~DOwbCbjdZt|EH_B)xgy#eq?|2a9^uYdmYciH z$Q>8#veJ_`G*>j4FzZx6mgSC#Nz!0oty9R4ruUjpEA$N*)t-_l@u&DkYt46lN=P3) zVDnK4u8E#Me-qRYbM0Ng#u%Av4N>EUk_cyjs@FYk6!r zofS}`?d^#HiHV127AjQ8r7W@eU9L+5RaRJn8OqHwz`A5G2R2m+G`z4qXDQOA4b>|g z9aY+~b>mj!x8)DN*RB?3PG1(LII#x>!Z*jOBOZsjMnXf0cpVC7f7- z)n({vF?ayOa-@&qCmZAAbp8blJ%QKHM;1|anE=e~OF(s@hY#{|yG28F4TKA%J|YI; zz&ZidGaCkwiyDE0*l2|L*TDd}ku*FP4T5#x7lnL$0Q7VDu#g%H?T2%Lii^b%2psbRmXmNE zafWZ0jB=piZ1;-Xc7+`8&As|C6-Ka|*|2QqV07vE;W@sNNuAahtJA$h@En^R>Z(mj zA1024c^#6_(Qcit-Ao>jq>aV(WH$&_%oO{ z1FrBG|K|yGfOLxuQUxDSyQ*^RYk-2}5M2OrPo1!|<6|H$>+E7xvd4{+9YSlIfRzmn zX1nZJVrpKqXNiINz^+JpmKf;k@GQB9?Bdfo%V;cVZ64i8 zQYAwXo}0))vv-TW;s>QOf5wFVP1PijsUFLS9#unMX5cS24R8l@$6#nQdRjA=iC{q;)5&F{w6U%dkytJU&>16mm6Dz}25R=Jo znR6T8kJnzp-u5?{EVMjX4n;T9CZ0?p%@lNuB}q(7Q1LXPkMq1YD2A(Yz`Ilu+Oavf zKWK!HSpHLLGIO8&sUkdvrd)*iOLFVt4nn#L5U{N~bm)+`btE|_j+*MKxvr9==5{kx z(vy&j4p5F8?vzmuSV!VMU+~*^rRc{rB}ykLhAz1Yo+XFSEcc^<4$vF1GzW^$ht0*b z*s{CM@w7xvkPSM{PilRr9o+m3!uuhE@CrvbhlhM4mN*0l`TeWni2YXpRn`ZQ z-7Z;)m3!37`=du6i(MsIf%a?4NZJEEK%gBhx)nQA$pPoFhHRJDiAE;h%i%i$g&v9W z5-Z=#0|%4wtg@yb3{evnB^)~t=^ih1n5l|Kks?Jhp?t%_4%k~-h8I;ItusjbbBxe` zU^R-$Y6xAy^UeWQm8TClWBDR%*e6EK@F|(f`;%{4L_bwhYDv_*96UCa;IL~;$BbDT zo$@h{Ko_Z1s}bwgx9@g;w*7M#bzeIkhOUKiZ6gclptkBtbRPV6@sP>UU`>W6DCEP73@!tRM%GXho?zuChz$0hK|bK2 zkKu(ysS@zfgj_<5n0UbMUc&?Jsn0&Bzk~oGNSfhXyp=j_q+({KvkE>gD>AJ7HKBcA zq|<3;)F&OM{}XIT26jOiV8PCD$@@6n@qnhO>FM}^!_V~(v0Q(`QQXbsetM^;r@yT4 zjIEJFh}!*a_IG$Cis7cb%;3DC`Ib>!9PKjl6ENTGMhN^fSKqL7r!?@IuM_8aue)P% z7hxX_t8G{D*YBzNB4wfo7K?bMbpVcFTZ6YJ{z_GcO*%I0GOnv)aPj*4qM!F4ds0yq zm@Tl4A>BW$YH!3i($-vDb&q0YQ|{v%suKI>!?^NrO!;lYg@2`?588*%P zATb^9t<;o1r%d;{$X37U6;RD&Teg@%H%N2FnwqQEO?8u~lJL*$GV-&r;_N3nlL2PN z>c5vLzijsDbrWmKB3K<(UxQ1OoLpG{E{R*VY*PXulWdl7=j==nW*M21EKV7}<45*q zRt=_+yF$n07h>E+ULu?bbAVCgq-F;FQPp!R&=yJ7w8kiM#sZ*+;7^XL9|RSy;jvDH z{AB805^MiW=Dj4XBx48INQ0d#EHlsdko=%y zMeY)738E_VBTvJJi%;3dbh3CKg0>5-R1=Pg zar%)dmqDSlkR`{`({KJz+6xr`%$LU+hos-s-ZQ{@@E9zDJE}?=!&J2B=hpOADz-)v zp0^eQ?<)`?FTu|&!_}ByOvmwk1;}8bfi}UQ`DaFrqPma)`y3iKkOAppF`)b0B>^xW z>MHYL0oM;8EyM4v;my08ge;+VrD%U{L-nM)EZ-(jllTWg55U2nz1ABXz&ZB*ycRXGZji>p-RyeYMp_&Oe$~8QE+D4)rgXxjOv9258a&Fy6>#m_db2t*LSNgIOEU9rZOGWhnWEOk5-j{X|vs0p&9!V6rab`GW1(BLODvP zt|)>>SL(x_Tqb4_1-eHlID8Y#4A@-BeGsU=4qXIkgm#ER$``)|(Fmz2gWAEA#+?b) z!W2fQ;dw=QAl8d2Ud|VS3ar5BTBI*cmA!6P6}Cb&HcO*{yzf9XWaS(+tni*R8djjM zEj8sq%Yi%Tt{?Jzr}=hjxlt~X#LW#%q*(Z0gZUg9PF@Tyjmiw0+PRh&k02C7W{4t_ zk4dzbWIEV`*!#7H-6--zwq;3$bG?M#&*3ji8M@qas2?o~;ljf(2VduNvAfC6Vj?C4; zZh6{4Ip=nVe4!qF8PQwjpDJtOyfWR<=D!Na+M?f83~f!j>$PnOG*lwJ?FcG-pSE9O zM@gVe697q?DNKoKisKX|ZCVqF5s2ax<)s`!=%}Kc(6FqwCU4VdB|bj|3(gp3v!4!z zYv*~coa}qXhGqMZt}y=#{@F1Yn;LOZZGN4#*-=5;7g%``6eYXn!u3+YPpWrS_GrVv zta+gnMVVFw&MWgbN4-pVF~p-1JN6|76NVLiZXfd^Wlq+PQ4NwFJe zrv%FO-4%f~m$b2UQSH!~vCxP@3myTszMvp}&DqIQbF2N#?74G`ozcqh)0Fot)_w6! zILR{~mrwa`Kt|V_O7j}r1HRetGZn#(g-4fR?WIzlGptSZpUiAi8hxrL8~BPK7d^~! zA*g$9QbNmeW-tVLSy95Eplh!v^8^T?o?sa1@lA}f(*A+Ar6EF-UNW4Fveb>F?@OTV z^HW2(M~8c$;*q$552)RJ*=&|4T@Wm9@aKZ#Swo)!w#n`#6iUkIa)5nj!`ehDC)!nL ziB33F|QN|p3tl-O^i4e_T)upzuLFhLf<9|3!ZxCQBr+2b_cy?d@rINhWP^Db8 zYVBA)MttKD>XN!D;TCO43gi7WsRM~S`rf^jrE}JJUrc!}fAY6&yjxeQ0G^Ez4NNSm z1N{gZee}@>qDnV%cG)9vFle5B{M)P?JYS6>KK@Pj$>-smeeSKVxaZf!^{c3@-K=fn z$QH+8q}rFsXwFxb>A_D%)Hf9ktmAXk5Rz01sN`EH@On+(-4yzTKZe>6% zcM-CW9WD5VoNVfu6TRg*^L`RZ9>_wd+*-)9)b$&o zZ*^u+3Cly3%2s1RFwN3!&<1_u_#7xX>WSOEwcGrL4S6|m-Q4c8`U;pQ?7R~|^W9rZ zZZ%fNY~?Jsy5}Q+MxAwcqbjVoqhQ(#JZ%W(@OrpG(QC8D>sAOBY%SmZOR0)`FF4j?a6Y+Hu}sfj|G$r6 z{&r_J%l=__`HsL29o8R)hVwj>bots>v;jxFbYEkX8M0CDd}C}|MJ?R>p|VXFRTd*k4h(dkcFc<+{Mpx>-hd3Sk;YtQW5!?YMkeJv_xou#d~fAhjp6>{?uB>|&ND`!US|Y6w-a=?_bT z5X@Xo7^wO%n5CzhSzdzwECyzNrWyF}=fiTAmjJPbemVok@Bj(U^2CR7>PmK14u7oh zR9~nV90UY^Z5XVA2SmV-AN5m}+c7G!oaVE|GZYP-VL37*%qIgo_)V;&b3VRdm>hs5 z@N|EJ>U!%7?rpEZyhl2A+;+u0xKmy$yX&XWUT{van;m(Elaej&2+Gmr>*4!T} zZNLL+Ja^85kzyU(-oo}~A!|*rU01E5JL`+uBo+xi^)+I)=ElRS zJz=V=4O}+y8;v_)ScvB_jH7GQc-XNvFERd@LZ~*}^6;ff>3{MP@<=Bqz)1Wi7W2Y> zMlYNC>0+^wc(=~xbcu1sDD#D)Truv;w?41bs4!}QzAzYi{|fAWnX)t+9M ze$zv)z_)o+NH}`Sh2vvl(y%+MxsYFA`}SoT2Ylm0-an0Nhj%1mF3mEnf4j`f{bHn{KD^xkI47qV6=k|iBFgeuAR$#%$xLF)vou2J zOJC%?LN18ea+45GRAzh-AzMWVjY=SUm%zzkWT#|x?j?{D5@c@>K}eOJ0za3|)mIxu5!=^*{h{hNRFt0tL%^1+q5`L7nBF|`wP6q!12ZYZYw**+lsiKI ziNz#wp&u&IGp#b7lyNlHjaND6+@kp&w)#ZT&@HmQjqoCddlWn)3O_3>%L z?XfgN%Y|dCRTjDeT;Bz5o61eccn@pm@hv?oHh%c~@4w#_`oZ&AOdZ%zZPh&g(7S4!HMvPJ&RcXxS0OS$pWAM`R$&?tR}ICZGUPV0m1BT=f?V<-%$B01T5Qy$FrRY22rR(B~LWNBNE&C_zj5>85Wg0r#?Y zL3PFgy$$2OJO*8n*;JBwAjWGvc`V0yoC+7NHr|Krg94}vd<$2O5FGqF4C)Ck`-k+B z(AZJ7CYYf2in0aBX&~#--tKa`(wIx-WdI~44L)**hMn2DytV7>4>4T z%;}e+)^^-R6q$VBKg90cFumZ2ET1jjlqO9>_RbeDT>TsUF{iIGA6|R7wSLWHxIDPB z2sS6bgXm&-*8n_8z&;Ea03%&r!ES^)B%~q_u7gHW_Q7~`CX{^#*~a}A)f0E3>@z~O z?`OqgZd~KL)bLq1LmgVeGaqbRP@WIw4M%ez_dNHupIhZqdz@m9tfN(JOhCXIp%$ik zLwnSl7n2V70?|t6n;%Zcs~s?eesjiZ9eG?qZdY_%c&gmXe3PJA5GJ>(O;Zs!xu^_P zF}S%@Hk9C5zkd5uVA@Y+2(qkDY)5cy9!4=cw2eMtc#eEO(i!s(eVT<+rcC)ARp77J zas0#v!MNFhAyaSO!2x1T1*%VI(lNf;+HQuHtI+P^5(t&Rcl{POmSu`e`;F}Xa}MNb z@He?2>9dsm;q>Wf82E693*FQjQ`X0m*i)N7sZ{ACw-~9~@~Bie#CU+#Hv5RZAH6S0 ziTblwX(O_^!@e^}n6sW;!(xCsOaZe(=qA(f8F)rc848FmZQPPp+UX*ISTa%H+LEW`9QefsRnp{2Zyy&pT2WFWzvWh#K$MMmDs3vOItvu%TC-x9H|x(EI^!JZ_|5QdzVU+-V7Bslo~r@_e{+t=Z42(tyyh#LoNL^d9Oe&|s6}A&) zOx4nfMB4eK3Oz`oW7W|^Jp0V_k=pHIIG%(}vfS(mi}oPSacPzAjG;j%Bx5tI&;L@o zT(JAuvd?PTr+6SeH=!g0H_4u~tV8kH@qw@vKeA~BPXYcA;|{RQp~XBfy;^_+Yn{cD zvQkNQI%NJQhfTuI^&B1oi;$AvXTVDFX6=-j8qQ({ObR~0kM&02EPyaKYz#v$6DnlQ z+GpBrC5^5%n$LKO)~f38$5kaaOl>5xQ7r;vu=v@k-gO{fV6Fi7VGS!b|7KYwO;8r5 z^c?%K;Kym!j-~%Y*cLVnmWJ@SH1Jq*S(az%Lr{%Nx3%=w;kMxNbq$2qmw##t4!n|~4s*fr;QVO%lXNOxbDsd~gij(=cHM=S zWMg*L=1N$5S3dZDG!gWDZ;&NJA13d4MmDor2;HEKyEEtx=_AJOulXRE=zSB5NV_Ds z11|3#M}X*i|H$7HHAuG}kzvsUg%*VTY~k3*z2t(dn5Y{jZ}F`qFN`5)n?3k;U%c>P zSi0Bs&zI8AAxEOM7S=W1jAsYg*}{acX@DmOV^gxX%l~Dl~p5)+rWT z)(+Oj)s%jBFokA#EtHrY4LB-$x z`QOTck7y~8tw4bm-|ZUsN0hDE)Y`GGXuS~&X`AE5%f+@vYOM$diG?ZXmrJfs&R+rE zRMUB#g#&hBws~Ef9QjPHM)?tvv2$4QY%HJp`x3$X>=bO7!8ha$8#ma)gAD|sAsOtqn?UW0%%^-6)tVSU3PWNgcMm4(&zGW!qH< zc#Y!xIRs`y>5i6q_l5cPZopzlLw86f8 zzldYjCg^esA<>r7&yZ`A3K!EHcu4vh9D@MJzfKPHVbY5)44zILy%t4(BQ%N}(OLTQ z!)-IQH>^Y4L!GBT+y3PI3>K4lI?s4IJCWTo$g}qhrj7WRUJfA!YtU^mL|_#R%qMU- zVLVx3v*q+0CU7Co=O^Mz@nF~Vm$%9CTw};=9$QHk9fST%2a>=k=6I2Dmpp5Sa$Y6e z*h~u&eDviAFgKDMWsO2PK`wm)+%i{F8!+HRC__4{yyDYVGZcRwhfT$m51H9?V76!^0kfsjgG{HEk&~E9mL-Abzws+PxOS?PFv!`>)`oqWs+-B_AvF0K)Q*I_5O3pXJ09Nrr2;j|ssnmiVSh8DrU)(Ur|X?( z+bMODaPYd09sMD^KiD4vc5vu!3>%kPaP@`eHgThFsH2*;*r*kCST*ps{(d)^=OqB% zvZOhXtx(TDpd1v8V!}3Ht*e=C>ryx^!AAD@c)+;^6SSf-ae{BB1lX>}h3W;})NP(! zpNg=qU~PW{4RS1}_g)OJ)1mvD)`-JUtr43>l%q?!2l1H7`5$1S@cySZvx?`xBfKQp zoHyi4yd=vIVAEvSYr)U9^dVa+8R^O^UsHp!!oI>Otqda!F#`uN9Mii6A2dA-MR0G1 zV|c%H$gv5I2wR`tPy%9tpiXh(Ig--rSw*e%c>W|E0}gj?^)?tLQTPR}YWnQdWW34F zFnz_tur`onvJ48woupWv5IOc~hB`ZF*s&7XANCLqYFK67MB1CKT!2+=F(aF?$*=uV zUwx;Xg` zlrDai#{73C8oE@6QxG4BhM?;N{b4mZ&p1x_vqOrjljl8X!aa8O;?h6ad4cm9emz{(XIlTa z>a!zUsXZN^RC~mm_%$`3CnvR}!4wU<#kR~#+`)co41Qy`CBu1?&ho!?@}s({jQOWv zKvDv**u-x;?jl+HXJYw?hCWCc&Q{IjkLU*EVPX$^qpWu!5hW_<^;?kNKN$#(`Qj z8WLQi^N7)-n7Z9ShFu4Rci^HfrUa#W(O&|VeK8jx#n!9g0L9cEez9*Z48+(@~e19vgL zTUz%p&%5}Kush%-06;|}Jh&(!pNu>(p9 z!Tv_r955YP2JlZXvgirNj^U|Gp9`)SrCNbiQJF}>zi9ojvK06is8 zxV+9gQq7Z(cqN3O%QSVGen6UCpg+Nf=nhrUzTJ6Pp_sOp)~<%;IiRYl2VpXN>Ma7l z+hquoA7}>fix3*m%S{A&pb5X+R8gJ?rCX)pkZl(rH4OJ;~I!`ur9SbsH}mx=Vg z&_07@qJue{+k=-0wojLd)Mloa3F0~3DK84|j`Kwk#Z$kB_9H<&^^et?PhVBNjqlCt z^(S@9czgF)1{=1yeCdw^=okY1$6-}3gX@3j@`N5ZRQeuzD-ul~avdwU?2w36tR<)9{Y> zujaG@Kxdx|Ggh%nhkt?^2`*EtlBP}i<_NmTO=o@Y91%bRjfD-mZMQS}1&C!6e%G1K zXLItbxRdl>#bAfceShnZGFXs-y`RL|)Uj-xUi{sV(eqbNXf54mAGuYJfzXG^j)*5u zV#)Q|f@-ejiip*#mo;@`mEQXQ2RV>^OqwH@?K7+P3Xh1QgOcrR#{bnG+=akkir^Qv z6>lw@ejTtgU3VitBXF(^z_w-*0e+lrG0SYdpho?3bX6bb~X& zb((zwMi-t4-47Ud6#~F~ngs@XxukmC@Ka&qQx?wa!_PLJyjaqE>hSjL(gR3h3A%(p zUF7pEo8VrLN%GITuhT1jLs=}=agFwQv)70s-B|38jJ_%h4%e2JXa|K$IaRfC2`T?# zP3ry;S?qOQskfSI&O-N5OMz&)T)p`4>JHeHA%Ft(kXH?qlR7B z^nGZ#^4H{Q)E2UaW$Av8J94Z-iX1~7b_z>J-R}SCGtZv!((o3L#0e6xEi7NURayK) zoFn)+tZmZP?%DK6Xh}t$j_4IR)1F)hm@2Ct8tn!>Vckj<7k8;>GJHmQe zjg$L2(U$KS0-cEQjT|KR?B5{7P#@+xNbD=y^4~GAytfz(?#T{>SW?#mKF~^ zFIRtJv9c*THZXyZ6fdhDI_|`p(IeMJ+932ZNree6x2B*)qM7`Lv^Pej7Xw0~I@{Gy zo}=XDgD46`H(($bU!Va|*PDY7f>ZawEoLN}FM$!qHTog7D`wFn)sj1LVDjK&-fT0PCfm<+EojDZY=o7*< zybZY_akkII-~-`${Fc>gqw|yLHow(VgLJZbZL}XLZ1Y<@E;r;@9dcPbi2(X_vZ$&$ zlL3|x?Bv#@Qg(*L=O1hFFyv&W5Mba}+3Rx-HW)h`7uw}Sa23vGOHy3sz(E(9n~dgL zdkNVpZNND5>FgO^BQtUQltkHP$*|ksUvx1lY`XJ?el(z?x*>Z7!xU zjiT5RAmLz=W+KcFn2@F1tLU)~;|uN|E`Y_39EMzA!iFw`#8?p18gT3exEDRSxIj?F zCN9VL7vW+KHg>O`-_6~)Wm+)tP7D72!MyuF94xx-%n*k12B# z@n@P+FhfZ+>}NuXv5J+5H5``hvbqn@b#IEWpe)FE_|d@0Qg2a&3wYgu5)Szsj4ENqAT{qV>)mS4~T<)+gW zdUkNqDH3Yd5k|KHE+Bz*QLe)hqn(`s*m~SwS5q;%nCUB>LjsKO%B1xMuFEN-23$;< z83n-Qha~~rb57SQ5>0lz>qI|HALL$g&WlMphKg)YC1*ws9N4YQz=6T!7D-)TKtNPm z9HnS4p%Nb--O374xAv8^TK{;|8 zUJn8GF$~}Dqa%Gh))DG~C2Cd6VdcUJS*(3CMG~139SXU{&Jxfk-i!mKCZrn>T5899 zEl|;@D>l7rB*JLx`o-EhEhXZf8(EQa{|iQKrSA9m)qcjvmzmK`bj*i12I@3@jwMZ< zUXQ6yNsO)H8LPMP8y#gj^;-$D83Zv}&8jZ* zPC2_4ta)-m_qwqNjVHKUKm1^14KMPRBg}ykN0?XEBGr$4SZTP$Zy}4tDOEPcdRjOp z*_K>K_lfYQ$QzQ`U4psJBsY*411J-k&ie&6T|a|c10m>{q>32(4z+maKO z5bWek$96lz;+tu|JJo{FJkyp0*qBbwXTq@yk>u;fYaT!x4{hbDoKS?q5*=m^JoOe4f-pXf4x(c*C! zA$!>p6sDdD+!NOYlRXu5apRfmE+I1~B$I{A;I1lA3T_`IWDVC~SHUv$xUyA-Avnw*{mtZ;y6J^14#U z%e7C=vzMBvA(Vd{+t96i!O&gYmx9m|ZC+_R5mYQMw39hX#t90-lNyFX2%m^SWKqs4 zRca56yUAm@r^LpkrDu?vHF*pbd`uobB*aSq!N$2Kr5Z=?&{}FjXqB%TrEa5 z-+L0ZBZbUx5!ghi)Pis_Qw#~^UoqzA-)^SG0e9~)Bx86YtaGF;e5IwEO4H}kD-9>@ zfg31;)8QgNwKrfSyENQSrA+|!f~%oyjc5c|d#4}_c>ZSSPy(=xPDYhP=K9$DW5@Q@ zg<*w;PIAvIuwn^#7ALPU3SGrds*5qN+r&XDAAu`11`;azTu|PT*Kp=)qX%NutxJzF zTW00JSbw{A?JA&uZJ_779<_ZBJ@>&12z+N>H2e+;AKT|Uv|k2bz*1%wu$hFtiB3nU z_}I03+Zp(H7%vUHLEX(8bPG9-3DtWxu)%NOz&uXLRs+GcG$F&lTSAfp<(k!ppTYC? z9v-JB>_U_Fg6KrOR&dJqrwBb4VS_VpaxPRWQGm6-LSow@1ViKYPYePta2qGWsAG); z{E~gGbD!2W=rqK52ouc$03D^gA8;nK+}ryY#_KBryC`L)IibkKyuaV9gGv?GPkMGR{{EO4(fK|yj zQ*YuqWuWK#8A5eetCO@qS)Ce}TH6Ue5RY%pe*pophnXU<+fRKdcFtfppOW76L_9G zgqflyeJ`#p%Yu?ovtl*f}M!q2Y2Gvmr4tzcG1$% z(5IoG@7DF|)mgmhU4S)#qtl=!E94BtcmU=B<6P8ng(zTKpsh5a`xPGRoY^KW`BoQ% zKIgIaBs`-lgpfO&uBo!S=1_6|SfN7WVA9bJP~RCXA|$*pkCh6g;LSg(@DQ9OIP9u z3H0ixM{}==F1DWR(@FOEz7oWg(}qNjJLCtHQ=GOggscyF8vbaeAS!bp)oF`nM+sUm zbeuM%8=MtP?&dPWaT1*gc}hoi-3TelVj~Dq8|4zLHI*+#0&Kl)%7gO$sA+Qasmmn6$7W6UlsHaa{$4}(y?t^yKo^2a zT=5Kf3A9PD8(;0G!f;>e0nT7o=b-4{@m?IZG@~lzl}lT}L4_i>sJtBy`1g8{*7qwc zSc%jd-uQ3eH9O-d&zZao4UME3wY%Yc{Gj8BHI+JqkcfzMZGg?Dn~i>WJ~u?i4{CC` z;^K)0P7r z=FWu^ukOtil*}dWIS)FSWz$eS?eW_?f zprImkxwb2Jga9z%m>aIKQQ-Z#;OhHb;fGR;v|*(oYjPw#z=i(5Hjm4dyzhdma#y(o zbLk?NcRBuxQ*sI($9DuxB?=avn36PAWDac(>pPXDwl{bizAPe(}yGCAO?C z$3CwM?upiAvcP=Olpl35_6gnQK`c-AA6BFzoOv&c@1CZraEJ6Sx(W8_c2bU^BUq~E zaZau`RUTepxLUh68waP~^?PL%v}oTtHV5*Lc;*+}^XatUKWoA&w;Xq=3F{$9)VnCi2Dgu%BU{{8@=>Gg+r$cu_>Xz{wrG8^jSi&ftc&r z0~htn0;@1ruGc7OB;5rfwCS=geZ)KA;<%tvx08aEA8615SA0^!4FUVjU=^QnKf10k zsjkz~$??<^qJqS24cS=4WqG8i?CnD)Q*(c>%*|Up5LJmXrwO*DHBacN$ItcLw#>#>JzHX25o(nbe!K#YbtF^EpyKyP4<14ufex}cm-`*9TxHI=#bI3&oO#S+xdQt-#aGN^_39I6r}wLHu4Po8j8eth zJo%PYLwUp0>ZX0zHog~*mL|6MXuB$SfN;=m3EU6#lW-vw7s!7u!^h$8=Oc-pLv?-v z)W=`L91dRB$B$~L53j&s6e*Xr{;qa4%mqk<{3I0Mg$Q($z z4~zMMEvI83uw**MCN-rwO4${4%-@G*wx12uFhIchGZ_8h)E^KqAI2t?f9oVU;B(TE zFuh)O5!xz2?Ku9LLjb~Aq`iCZQWUN{1KF`xUED(+kJ=chPHzXjeZP;9R9LQyUWraBPX2EzfrcM??IVBiNO;N5IiL$5Sl^^UkN z0Ey}!f=`LlmU{<1*zgM>NRP6_!bUsVK(&NQXhR|n2y`|N>=J5N)9gIm*8{>59}$U~ z!eNyCtLlRGCmi;;9`*0vzlfbpeLd*Wl7ZsXErZaeZO4BKj_ULzcwT=v_!W6xCfgaS z{f)yRix`wHa>zW`lRE~pzj?4HRwn2g+OxkSP$TM{ChQFna3tkK0Gl47M`7C4fEz*r ze^-ysyv&WCq4klc;I|8yCj1>(OK*<9!{(68o#AIi(`K!l8yM3CD?Mt)rtDb)?qcRP zzRz5sfSP}Kk8Ag{i88b3BPmvTYr1$ZK0+-o=!ecQHU}?V8cNQJYAS@_0(U~1F$zvE z#T-dTdI=iQFx&P)ujR0n!LdhD?YOm^5Kf}R)fL$HnjZ2{%Lq}}AEY%Gu_-Tmhl~y) z%(ZZiHh+;|Pag9cb}|$8fRHv8sKe5ItClWZdRE<|LehP#rFw1s9GcY3uxZokS+syG z*<#t6zt*goRHt!%JMhN%Do>i^B~EPhFjyS(V9eaKw5Tyh%zeoq{NA$^x@>0KM*0`q zmry>&`2Ns_wcWB8E=}J8T!&wr#w{1GMkJ`g=A36qWP;FR&F#JGb&8}H^*@Bd} z0W*VyivV)g`y0$RS5+?$fo;(Y<@JXlS*wHFRQl}hGb$=&%0n3syR$K15Nj^#Ryua|b((jR`Bp2t!g%0dW^exWvh#cAVo zapOsCx)+%gE}HeOlZaQrAa%yPGKRQGz;b(xZ+A8sR%&<*UZ@R|S-Gzd?OGGo=p@gs zBTCU&nlS{24G@3?|M}qre<+pIchoKrfQQ5CnU-OAjh#<@o$+D%m~Ix;)a!Iby?}tz zPW*KS^Bn#VM}NTZG;fKC1l#X~H^jbvjLD9&hSx?M!PqaSjbnI9gpgT=han2y!U07Y zp5dJtkAwOdK8E-#nIucWj|sjfXb)*7{8C7OVDj@{>*{QOZSpD7i4HnLmSVMSA(;Ud3bZ~)sa*Lpaxt}gSUcG0}-di(T z&Yop&(pOl#i)J(?=O@G8l}u*3=E_yN?fBdczXt4tb6A}bK@=OpGBtlOnB$Y(0@wzi zYvK`;{O~5>24a&vFJkXoQt4p8#*5Wd zOjw*b^|ZQ-R|cEwv+-<|6YP-h2bxXfSpNU0y+YZR{$*`v+tS+U?z=X>#ZxAsg~ewl zYi8R0R^QxnR-cW|5hCiMYa$)6G$v@=Et?seXUzhe*XG&A&pGLM{^<8~l6ww3#jy;= zf~^M05f^C@pSO3r5!SAYQ|e-G=w3ZP+UXS3k*vEoAGtpIDM$8gf_MAqRn#O1W|NQS zVYLt%kWu;5AlGqW6?h2ci~ae_konKVCCF#dr--E56qtI;`k&+gOaV#SHR?Q_Lui{S z!Ne4u2V#{qdwziVaTsuXD4(Bqq8u6$V1C>r7;q@&;|D@2MSV_Z2m|D&GY!n2QffMU zoIL#jHeoUg{(#eY#?xPAJ0OKTM&s!4^Fc6ig zNqIE0fRI1^o!&U-R%_O7=wzQ+(wl2elsSX(skLj@!pO$~wx;fvv9LL9uIB1`oV!VS zxY28^6CTNAsJm(CpwgZJP47YcrRlL#E=QG5?HtorIFt>~#6H1t?58ZTQ>GC+l|L?C zS{-l3yX?ZIFULi?Azkbi;R~{EhernO%ZVM_YAvYWsH|J>6s56P35G$KF$;^_FdXP= z@xD=Hscq-acM_+#ljD4+QI1AJ(D4M=jf73_ZCX+05LhkcD5Y9+Y~zhSnXB>6^I#*V z8rtR<#VR^OgRS$rkSU>K+XSVn6FcuX&zHPvc#Y0G8g=3^bl%|rdz~OIWIfP3ZsJyQdCG7@Hl&`=p@kkL25@`{D!#p&C|LcBCS;})Y zP75W}K9Fn?oU2@w1~(U9lVY0$d8wNf<)w~YKC4r&1@&=z0zM#^nnz-Ko z6-IM*RTqzN!mZ5I<~Xk91~v~kqY=HFAGdk8=ZO!TyYO{hA94i=3rYI`; z%z=-ql;uw;XOpJSedQ(dwUh~*=@jgdsxV*KB6AbQ1|Bo2L|+cW`02pvwC1e-G^4d8 z9zc#%lNNFE5adgO_WMP6vl#e0+yvblQ<&5V1m8qf`+J@F zWII_fYj>gye$C<$GJzh3p{%I0a3CPVp$%A@7x(g?fZim+%j`B)#@w_r#V8Fdnh z$v*@iyeiV{SQ^abG5KOB`@n|Tx`vM-%HCI|F)Y)&QF&^5>{O}4a=kwlrKVjPDvj@f zcJqdIPXI z2IJDiw2@vO@={LnQ{|Oy|~1^FQ{avzahZXNp6OyPUKykq{d|H)t>tZ4D*2MZsJE8i5jb|{(yzr> z%;TF?a4ulnuU*;q+Wng&G*jajmSj{0F9}qyf;s;^iy$vBMabH+1q2^+&Ku-Z?=k{_ zns45T4W0?~74rI>X&{Sj!G}0lhJ8cuOIx?W6!eZF(H%^$jhYL0{MZ<#=Yw<{&;3MB zcoxJuKZ!NcU~6r8gf3_TNquY2h%;|Und3Df^v zZPl8-^YQa~ewxf5Mn~8FT=)QX5#SSC>jtnr&>it0SZg&JVF3Y)l>RD*JPs4lSyI2j zf#DxrCXR+y4JYm9htuFB-0Q;nu{11a$Cm_JlvVuUrDZ}biToSFE)yB$ElX;y0Q_8r zdBeLR#b9Z@6oX9%G7Q2~WEeUm4-fUn$`>-l{si}zVpusO#b9fMtjz=AVJVh{UK7yk zE(M(q`e(Gk$_xh%n|Cd&2D1RU_WMDJB+&n1r0wIqp{1LaxZ z>VZO(VzAsM=D5C2*&@|!BrK1l?r1&>S0@YByGd8E;ypUU{_M3Ku#0w{?#nhviq#lS zZTjhw)@PAGK+b&V?8;jaRGk_;!#9aQsPqjAm9~jHJyk*h`g@!Rs(2lslXO&vcl}_* z=b)ft1d?CElHaMkhRRuu@jY$yELR0^MXX|g-E3H__UO^0mqEDrq_wyDn}QP_UA<5F za9-5y4{R04uk>O^>Yl7z+0JT_(%Nr(>a?Z7$%?$0{t`3N*I8Qf)=coFt@)VYR+dh8 zP9yPGp}jvyXPD1+Ddb{l%~jqIvXjM76{-aX zJs!ut9Hueyt|A#isK|F);^06^5mrp=&m;^MG>eNxg;d#2h(CX`}>m#IVDsCsT?o~G14M!BL@*8ed&v4ftAYwo9cMh)fR}w zvx}^>_$*}WxpUKG9i$r1NZM*~yAQVIotj}W^O}(*KH2X`j0zU@Mt$ix3b}CNe+*NL7jKR*mz8$iix4m-~jKq zxmtURmG}rSLc+L#AXTnL^Tn|FIIa+@HXb1m-oas4a~0y_VF z4O9Fr^*_piPQLUXnca!+!;Zq4`oB^3FdEVGTg-n}aBHZpqdl#f4yVpm7$MoZ1@tW? zs8ef}W{di)R((NJx76q{!CNh$uT^#n&U|bcf1z|K^+_-o?%2F(%`6K+XuqUAV3(wKs+7@uE@=*(I({H2pfTf<`z`L#0l z{g5ks^R3}VP3*IDzUSC*yE8|Ad0NUa<|G>8)*3Y$NR5$ue%l=Gb7*!v9zJHhIMX%#1N!uItNJqik zugGvMAC_=QyTb=$Ru(b*2}l->I5OCGP{wlWnljOxStIB4JV2F zGq9dLL$)I*f5Q}fCa2J3bC`Vjvw{^Wu=IHV%ATjpg!?e*vCFPi4w}X*PS7lIB#dE3 z1OU_A!}VMv*bUAlfNN8KD9gMF)^J~Q+Qoe$bjR)%7bG+1Xf5Lc`LV;2bZ#u}1vFnP zvWgUnp7Sm$^BDJKFjv^v|5WWdUgh)(gTZ_1wAoR-bKNl8YhU06fYF;bf1C@>r^n1u z)*m>hr2H=cbc2~W^jJnG)>L(qeTkZJV?RtvF;fcaCN2>TWyGHB4CMH%>JZh@Yb z_M2a_5Gr<0gKqH3;z9d)px5$|b-{JVerP~Oz#O(~82e;p{ z^@b|@8OA-)b@3Xe^CS$Fjv+?`Mk^)awWt=xn+4cHoY{e5JrOGC!Qf|TYkw5RjnUXB z_M3Om0aI8PHSlNhkWni~o_cy;gU=A^KsGw%NZ5B9Y28SkFXZOqj#57S|5-5nTVme5 zuxI2?CMeyTJO8J+i|*l`twn2|oKmet7YpbZu?z+n!s* z_-RtcnsVrmMDm--)Tw;$x1?mdTN!(#uT+7>c$F^CJ@a7g`Y#RuM)ni(j*<_C(;*LC1rh0C0Kt5AW+*>eIFC zxcTd^u9`o8e#JaC;C1tKpLA-dFiqvg-lGHYAp-CsEZK;dzm_D}^NdQ)fThX1>mk=| z99B6nlRRwzl}82cuEk1^2-&9=AZ}j959AE@9wD@&j+Xf-D z5|jG_^X1DoB$$wmRxPT$QeD^$H=(9Qun-(r`NJQCg#OT959aODnFH0nI~%x@F390s zBlR@g3tZQVN=|iw0;IodXA&Tfg4zJCjD z0!1!$atsWI+2Rwn?xw1q6W(6c^vRY{m>ByCrn%OJk~f2;SZ2mN?byJWfUk{Kpl7s25W?z3$j<6H zT-{Oj+|_S?Wd^QNv+t05cMjZN_ZNvdz(5GqSn@zwvgGuVdR`p#mhoTaK<${|F=P1p zL)BXWHL`Vo@;mzj0|Ps>Z{L1nU|=T20u1v5Z&SbN?u>j_$9AaGYJa3V!M$Ht#)`Co ztc%oGQtb8twm!3lQ7!hYU%1oRX$;?EUllk_pd`4Ve}K)j&-6Gj&-dW4;I0hM@IJ-( zgyCU`09bFzuncb(MUJ6sa%^s<6#E?dIWPFaV9SNUtuN5SkOd>rbT~wHen!L$VghUm z1ebP=R%fhJk2k$ysY_XbSHz#Y#~th`j%(FGSh^*yQ@z!z1ttphPQ!Hsb+;#eE&!X7 zQ=ZUJSr#b34rzn%-p{|_z&7}@*1YL|nZr)&G3+0rH-QWpn3@Vv~YeFq+(8r>ndqNB`nnrEJe z%=lVjG|_>7U*?b;r8ELAhlp%#k$$bnT1)V@VMF<15E7Z~IV=Ii$`jGdOE$W4lrAV8 zXYIIYIg@Rx6T`xe@xb~16u%{IP2`6Sy3z%but@cvVA`Tu;gD9fNE(+DunvNEuz*!j zVm{&lc#p2}i)o#5UIEZWk6D1e8akBG%+~fgjsIOl7u2q_1zD0F_5oP@0csaFv}&r0 zbOEC{{I?C?R8&i3eZlYz+ZR6$q@6lSJhN=puo)55y@@q2pbMO&dj3O(NJj%0h1blR zYu}ZQk|b4{s9+feFa2MI#d>f^(j{B-*dlf%i-UbIw@lwqtfXVLeYrpb@zd(6;9TW2 zI}o_rG1F;d8^-oHHA*zn_C*|%7GEXFcqi8|d2mE|Y(&eK!G6P*Lz$kCbA})g=ahJ} zzwy|*c!Oeif+5RbjpJ~z+7qV&42G5(mwdYq#7`<2HdNwwc(1R2)u_?9V~PSJ#5U*t z`C0uN+hbTaBy#z|nGl!e%&zBZu-+2?t{i9>>%hN=GP>=a__P%NJLJCo#ij9RmrN2) zR7QDD5~id>sC^>2|1p&*mPUrtr|BvtlD%{^z~x`}iEYdVct4T=Xa~CVIz_w3Ohxu1 zS%KakbR1UiewM~#N`^w>|7_@rQdq1{0*N{^zY$n(k68>AFXL=?_92hip=dqI+4hr* zI?X=a$p1d(a!GCzb#_+w=Q^371DSU#DetTyw!z%2|vRt6a~5M7mcb7T(N<1$UzXo{Y-VZ$??L;7_$ zU%79NCO3N&Y0b?>it>{#S3bo&(~R=G()Fs!eN0@;2lf{4DmXyyyXvTH&0Fy|>gg7o z&q7eqDCx(dmBc9w0^Ypc=FLltoHx%H>EK1)a+n;rvUl%*yoF1ZD#7rnm$r_tKUS2a zt!&+n5S&=#tlguEva0WH)G^_)#NUh>IWmym$iV99{<(_$RHJ8#qIF4iVapRMceuq9 zI_wDJd;LzVg!7n8UDW!#C_nD85?sAw6}8g7IJ2GAZ>4=Ltvf3p=)(ST3_d5bRmkWK z!FU71GQ3|X3e#vaAT&*I45^Mbk{`LLi~OfN`7snTX3I{QG)pZLy@3-ie@^9=DXcVX zfDY6y%j_XIamCwtMW(ml#EW{)lP)|%*xfP+dF$7XUgk$_bUk#L-v~Bci7c(g@G^hm z1?UC#@CMX!DX5;BT-)J{4CV6rs+LPZb&Ov1c{!0T$|l>ry#?P(m8H+AHdgqNFlwXe zJkX4+YMQfAaOJ5MV;fiVER&2BQFNK~gbl!OQWb$YmF0bkAJ3A>zHa>D+{mGxLboX? zna+la&eETS_Bu$YxQ*$)3O2gc*9C3Qau-SJJhPQy#a!Sx(&SuFVyIwzX-CqJ3JHUoeiFI#HH_O(&8M4p%@1~w9<14s zne;27E`^)97@49Ws6_ggPRe+UOw;N_m(_%;981JaRpsE&O%6lz65F}vthXhZ9JDk& zoo0*PAUE$q&uKHS2E|AK?0&q~$%uiCC|do%)`B+9ThD);1C9OT9*%Vp$Q2v68!kjv zl&$ZuVErFLp;<&RWiNv@JwuU{@bTk=6PQty$`1g^m`WS?m9Hp|Y;$hA0SZ=|{-u7( z&`%c7Ojk%zlpSi-UM3B;Mk+lCIxygHIllHGx8KfZxk%R$+v` zeGC>xdF zL8eE~X|PM1KHE7BCR?RIkNt%ViFeORbJLLdKO+h+jHxLJtQf%=?ZsHDbdupGhFV<1 zWRVy`hhe9pc<~bYIvL+DB~~l`2xD%@#wpqs<29nbJB1Hnyg+ObHHJm1lF(oZ6-Wl_J28ZOZsVAqMh+r9 zOT8iVj-;Q%qQqsUmABM?D+i{M0i65?Q%3=>;M7e1il;j9>V*Vwu>}7M6C4dgA#kz8 z1G5*Y+jfwvK*I5Tg0J%-j;e&JhvJih3ZzmLez+L6QhuWwvOX&CZwC;VTet_w5dX+!|+T-+VIZ8M+}-F3df`h2A4FU z-*Gr2ZF;xKFAIVGDnPJov4ZWzwYv&5t7Sl}v`6%C}kcwQDjtFJ-cooR^oEigmp1 zxMw$nQ2m6oTgl+yCZd5XhHAmqT-T6`*5Zf+O#S>WnRXrkMk+oe?PbLd14*#PkTkfe=yxX&fc8LUl|v&}u6TwuPm z7I%+o!sYG-w6v?uNg!)>9pBiiSFihIh84=y8qQ{gGxCq0I1VF{w{6fa0KzA3nYn4`f8n~!og&U6+-)_7;^w;$S&CjI!!qxgL0BgY3pXPLt4_K<8f?pWX5ay zW|MwP*>a#D>~N9vWWB=_<-T~duMR-$9k5Qb)#)Z2A6po@r+PS6f_pRXtp>WU#g6+O zbwT@c9xS_TXJ_fYys(m=-4&r@wICind-fDgUQi6CnUh34&Z2Mz5#5A?eRNBfXUiGa zmfr#8?<_nknHTOAmSF|q!de#d4IiYcF9n-)(!lCg;3PWz-Up(>CI6^`qd%>+6w>g5 zt5%C&RcFw#a!F8ks+S8Wc)Rd-&D;Bz=fAbfX^q4iM-O*w8zD|~mjDIh*xDj+oO;YI z4ijL4AFCQ~lJBZ05gjxVJih1f2u#k6;L7^4 z@u@Ix9Xz@;*RMe67_5B>Emj_07KWVWD*tOXE5 zLLO4Lv?(9pxeRjm)`45Mk~4P$-}HhT?o0MzWz=| zv27&w+iaR=J2_HLms6kaUp*(cCRZOc{>TM|c-tVD4k#8K4c%Mi%Fwg`QDdaVV!tu4 zVB;r7&G5RMW%mXe5b7Zuchm4)z&l36_)mVb53DCD&ahQ(q1*HNlYz z{s^csiGmaFeKA(w_DQ%1YxUh*>BH30wLC7vVpH^K+Y*>-Dj$JUR#jIO`>=YyW9Jw7 zBOjh?cC9|C7RO_{oi_Lw^KqhTBi5{$2=OfUD2-k0@Q!+O>fN4bJl}B|hp%<)2+OCZ z#`ALm<1sCY>pUaapA8LlRk4G*mBew>+Ay==IiRSHD{Em`NQ&*T_^l+xzO*tdboN^$qJqV5 zBRyBlw)x*M&!>MlF0sX+ngsupO0tP zs&!3g@`A@S4qVFHL56)qPT9K;reN*xv_YoNPA$-mPPH>NU-QHxl9v$q#6GPlQUPAU zQ0W>8v^ry?S^)}FKS}c!a8*`;@L0XRY+-FlQLsH}rm2-bf3J>4>3?0$&PNM2rUUS-o9Rk%p4B2$h1BI)tzb@Z6pe_<6dM$20gl zHen(hFqe`AJu}HRCcx1uMwwg4)BgsRpAfB;Ug$Qb=W>Evr`u<1z=qgWj7`*%kmW@? ztxtqBa3i3u(-e}3N$Q?kB$(Ah$nQ-2g&!NBJ|s$%rxj@n3##1Dc}0!$PqAEg$dK{_=P+W>9#~Lf4vJsnQ0H4WgXNXK4_)Z1*!HNmq0@Oqsddg;p(#Z(KjXXp?Wu%X#{G;FF^f%@{J8< zM_5pWA70;HlB2m+FZpi95G}! z_cq8^kjOS6Sk}luFmR#J(N>Ymk&cZ+28MTHBy#?(V~sPzpyal?8pfUC{fKc)wo{;v zfeqlWWd;U=`%|qJ;dmh{R$YwcUXn@vq78J5`#7F#0&kJAPf%kyTDpHyJAb_h_h{)Z=-VFj%`%*;xYdwC0VC6nSBQ4 z`JG}v7ZSBJF!Vl)`NS{Q19@M`_*$pwbJUEf#+=go_M_@*M&b*G===2YInymx%y|3$ zVoP72bmb{Di8Oanu}upPR+RZVgf1$!Ha}qXb*x|f%YW%KeFEm}MZYs3!3(Ts7A^2;^WDXBFb0$NNIEx)>znqFsH>A}@w>CulXavO4QddN z^~(q#1t}I1??oRrcY>&!720L&x3N`EgBUUy&PyUOrFaZ^-wGeGoJ4mNKnPWP3CB=) z3nAoj1txFB5SmP4Vu%>4`YhV}U*xK=p|uGXc)0o#;cUo_Jz#IQ5G(k29bl7%SS>$Y>a_l#OF+C98YO(tQo9F+s5?_$* zEKB!SP2>-i)G_1A6VE8_Ej+C_i#Yy}$fhLHX`w&c%0lzB3swN<^l}Fp?=z?8Z65H* z>3N0_ylmOB5#HXp1Gz&m*K3DSVg;^|nWm@9eA3Q{Xa9+pxp=VdD<$D~FCu$7L9y&hD_9oNJO@&4q%bAHUnCC8v&LPC<@ zy1vob?0RMAZikjB%%lP1(X?I%`R_q%K-ztru#di7YQ z%RzDI%REzqOaFl@(C7qh(%*+@dwvKLN#u6%;s6-nY((83M;k$2+{pxoGc%*R^CiTO)a{@G*SrL(kk^YJ zg7Qr`Hu569ViRaEk`gYZLLZG0axrwpfAplP$F zWl&{MHo8%)3}DiX>mHpM)|ge${oOOW>g3xeyHn255E3 z=)pb}qqr`FOWm2Hn-wYqC-kLDo8Rv~l78@LdQ4qgU=~k(!CoO9o_0U4PO{G;sry)# z;U5?zsKTA-fq8})M=X+lKb+`)9;482ORm5VI8jg{kGf9_Kyc@I@bTj@qnhN(_31r9 zV>fSpEtzG4kHG-G#I3w6uZ&l&kSM{yu$Sc69^6@`S28@Jv<&MgKN2Eubf#nq9igA_ z6q&__DbGtvu##KxO86dxZarjm$iaiN2Xfy^o}CI#PK%6$9fuiVdnSFk*~>Jr1*eXx z1K(teFUKB*Ep!+^G_fSh8ru?`XCF=c&Vv1IFK|o*p#`t<8*NR|G7=6$^RmrS*1NI%tsnvR%yuM=abrd4FEUa6=88J zii=X>evG95c_HnlU{bN5vEZaMy}Z2|Ko?k8UEjXC z?<%RHlic&_ZPhl%r;MwA3E3($3#@b$p9tMh{VdL$34EeUanHJznFa>T6Tpp084_QU zrLrOaCK=Mjb8d?wdsnE?_$SSMX;`DgAd&=Y)*rTct)Bc34q3f6dY0gxA6)<|@~#+GxE6!1=99%Do)hw;x2nhS zM-b>HQ8@m?pc%q9Lwb59S|LA{t7bHJeuiPVwd_0+kQkB0T~mjZ-wYcpafCm2!w@;F z$a?`uGrGgv&PR z<{jiqUU=K34WCyGf8??b?k4JxtM0Wvn`B-RjB=?GaBNz8tEiPOOr8sWRVtIm|C|)F z+ISUd_lp6J4NH9Z{xT%S;}Y$i;Rmbu0X~?y9d#rqC=z4a{h-zyDAi?~B41C8`lM!# zvx?j3@i<)8=X9Nmv9N6i23o-xHNuo+YrQxc;~lmzG*9+VSJO16+SW%n<@!-Xf(_6x z;S~?rr)*r%f8%p3{aDasC0&%KTDaHoWq+Zj9S!=+?{yq`c{`>2(v(v9al zc%Bjpn^2PmaM)C}_lEO=W!l|{DzA(v#>_k>7WFXQEB z>~=_!-pP~mg5$Pqkgu$Rd?Sm=1(L)Mp=-hw5*@OM+nnnN`AA~2A~c?5CILH?4P~oV zZNV_E6oqqQ51^ty(WdvK(+%y$VbfF=?1hHws$-GUnI2x z%3UG{@+dJ~Va`K_&8auFg4g4ll<1N+qwl2<5;1MG*Qli-Bu4Lo=@PTmgBu{Q)Qx;) z{_O<-?kpKiC&u5pe`5}`J9P2eZ%=?Kkxle)XlGl_Sp>aNX`FNp;A-9jOCMpLTQ%?T% z;nB>ii@pZcnFw_`p{!&fhs11S0^BS({-A8E_Q?k z;hVy*uu@c5{oaCeTBtwcqxkpCH#h8vyxoV1RUV+ZpHo><7%NogE<_x0#rMBcu4k zF4XkE@o(2B#a$7l%_|XF6a?QBVZY$N+O%mCCoJp-k+1^DGk&s2&n*VOk9Nnm6k+Jw zw4{qN!So$n{)YWmU%d=Yob+BOz9^sA*AXK>aGjv?$CVL3~`C9AO%q zSkchf3R1<>@(wrTC;vO>h8AZ^j~78``EPEz+}o#?1C=(w)b`zeqU;!yh%byD{|GPR z>eSrZ)ArGyu7E$`dd*AluUd(FfW!Kd16mE{ex1V(M%7f~kh>F!VtOqF)11@DP)BG& zW^DU7uWK8WhUb}FjT)+9KG03IH0m_020j4aUD>e6>w*sTO2?%!Bf=b`{YV?uCUS>6 zhj8R*7e9U#Jls^@<SSgkZU)&NUS4@Cvm%k}i6yt>bE z7;7anpM>^sz4KlVo=-WxvUmtnHuHQ#Pl9!V*U7O(t~ZGLz%*GJo>)tZ=Rd({ zT>gpPzauUPj(C>+MhI@#miR9;K5o{Fu?0^6+wOKt8}#{WZ%8(A~#>{jI6;@ygLv=Y^e)H>>h zp*Mr5xajfAXO3se&US2ib4(16IkRZd53p2#`vreU{G}k3|KNi|9JXq-)6zSaIPCJD zD%P&vHNL?+Hth@8#&Afvm;Md+3%VRgU$ZcpC`;EnZCf8jR}vDxwe!3DfDTBxoFhL< zo5*{klW&!`nlkCacYHp&cS~Gt`fh}yYJ&Eq_0 z4Yh^pr<^tG^^s>!S{1YJRpPu2My~t@sS-bCki9ljR(KLtLhX^Tpbe)+DM#M5Fl=Pw zllW$P8^`L|opevCi54jE%}87?d%JH`B~5PB$dMy=C)!Kw1a*Lq4)Vc0508&I^Hr1o z;OyD6=d}L|xx!2m^jr2n%K_L=Mq0u_UV`eI{zNzldZ?)hvsvTxXVV->n9qP!=-{pD z2#)=g0qfSUAK=79Q_%HWfZGVxpC4PqXlmYSbeT1dX3c6~&9xK^6e=PWlwhbPn2i$T zfoke=IEyDvuL~LDpVJWI7^c(vUt!4`X!lUUE zVj3V$A5{V8XN$Gd@1g^mwt)Vc0R0<>~&Riqco7+2>H_paILL{;V-!uR}FcB58%loW_eklm(^@U#Uzu<5>09#1sqA7XQ5BfpSa z|IlXPyYjeXmA+D0JQYLpVwGXD`p37W$}2yIg?E>e`#?g9uEh=8C{#ig>x6~NdYi)JMMDSD!U zr^uq$ZAc(ieiC4XP62chE1Bw$kWHX9jOZ(e@*NUvfl#AyG9Q98Y`5uv=LGbM2g7p_ zrkP`R&tcrR8bTGGD#|cBf)I>Y+|A$i_js)Q3Hfbz?#u7uP?$dAe^x42=(i`3h@FDh z!EWW%_vP=iD^C3DyMN-JvIMeL;A-q38G=PMAn7_PGJb$$1bZKOJVIa$4j2A9Oj)iD zy7KVXunbo+j`>a6%cznoTA0uihF?~0gAhYkN_cs5F;V(JM(;JcAwpynVrphzkc_A z_bo8|$ewfl=giK|vpaIez7o50YGAy1J`S7N&}>^N3geF)2E4=>;WNr|a65>y1Z;Ej z^}a0pyaNl`F%Z`1i|?{ni!7{7`gMK$ip8YA@aqDqsF7)heSOz{&tN>4vvYwBE)~&Y z^RCQ}p;+-%^~uDqTsS+jbdHFwW9-92ANaqQ11>YCR_HjlXMq9*Oy!SsL~$dKKWEl9 zVqW7)y_3<4Yb3x~u?WpEW^}mqjYVj)my(z!Uo3)iWQS=9bKV8>?pCP~k>%-jEmFf^ zD#k)(x|Al68ZOsJ*n?$5N#hQhSh@Zbo(i+sj5rxk^7$hbWtl4}yV8&}bgeLJU~q#n zt(WRaYf+kI-@@@0O8?A=how4Z2*&#zR2PrKUICUbxEm>2iXs6fwLsA)PP92E#9U^< zR6hvOmDm)h+_-CNuC1931%fEJNTv@@r1l>zEBq*IUTJX(b8LjNFi;GBk3&Z%;vG3f zmdWY;q!Acb6ky%Ss6)QzYRSdn{>s6yBXN3l4uI1~;xous)e9?42NoV^-#R$bjOBTP z)ms0N85@9)s$a@j8zhMh=U&xP1;w*ovWQe8d6FhEZI4-Mi}vXcG2hQYGdq9>X(V&? zELG}XDM^gT&g2{y3_pZ0&!nCNf#W8}7cpBtRWXdOn0*_I06SE-+^QXTUoqY?_l=_? zN#5kluRRa1@!s(sbSc(^Jz&7&T%h65_#7qDnO$C%kLsDV1TnjS|0v6SHLTDb1|uzU zy`fYd+U8Wz+y)x6?KC?9cCL&aY+$yNW0t7kaTz_JKI|&NN)ZV42lNr(|1m9oa`k=y zcZ9g?|Lf6M?$WLP3W(9L*itm6(4UVW0UGx98=Dj)*vMz8S*l3NKu5sJ4m?xx&lYwB zvw);g@O(`yz3Rq$T~qk(1Dr%lgq zIZ!`U-K8#N;J|)tmekn(S}B*6KUu#pvwYG(_-42oBADsfgVIpk=6u?ZFqy%wp*UkU zUV&f~Q^B}nk8y1bX1sN&+$;rMv}pHki$E#r2W7;hQaxwF!sPFHsmdRQM_F#sZP^l@ zX}txS6k?5y%8c_6-|o}h53B}l8gD@8c@3f27jICSpSfiUx=xM4kZ3z*fI6RsM|&px zYTLmCgw!9)2=7&XGP?e?5cyvbI{h$fmMw9-sA6>9s5T2C1Rc3H@`OHpV&t^=*G!W^ zd4x7{L#e30Jg39kFca8DetA3q-6}#2E3K*iE7DMremhI|)j#^E~!}x5$D1zo(MTNKg9OJ%NT=kwiq=3?%qB zHN*<#08^Mo_5R|EDRbg*Qe_Uz)3d+&QBKRo&*%08TeYF3QCP6hM!iYJ7wJEn9bE)- z9q|@+2M`6f$^P&R*K3I|*dCjN*js|H=wUpL4hTrWqBW|;OSdZu%SN~3j88<-64^xT z$3h-CHNI4W%)a!}y3Tg2&<)bSW5T*8jTOs+H_QhFt-^SThveKM2*)*IjDRV47`7QW z9)$6OZ+HkmIA#fUZQoVJ3;{Us)X^y|M9BLgEB*Ar$`uQ$Ruv7_`Kt3L5x(=aDKn0t zm}y&onKtcgq(6^&ry*fh6TPnJmC4(o*>}U|G}3ha$vjr2>nuZab($yq&}d$y^Mlb7 zQ%RtKAHTHeZYE8pU%x|0+{OZpoKw)tGP)*5_#o}1X%2vI`ZRiKRfP?*nY~#M!N>4_ zKsuT)@{K`<1zJ6 z9+B+?oS}3A1(?%Od_o{rL=$kDl}97j5q!(atUk8J*5j1^R(9)g5*btTY%=Wh>Drvq zdi=bgRA=x*Qsk{*vFfMr%6x<431Y%lVw@U4qmbrqC$~$&01QNup1}2Kz5m?u2`oj6i_oeWfZV`IEQ86l_S6S|h$4 zrK;_dJ5`Q)WHM0%m6P`GPqr#`;aHxVVl$AgMtGm->4?GVNBiU#7O_5FRcJ9r--({0 zGO1NsMWTIzn+{SoXssMA+9Gq1dN@*@NI_~VW3_WW$bMy__CK$%jZq{cR+w368@YaN zi!x(w`;wp85 zmy*aQyh~V7^&~Y%dIOP}B*8=Q)rPJ}FlzWjmjmHQb}5@pOANXKKvvi(f;}~KX$qbX zi;%slto_a5xkE?Z*1#r_1vp) zR&YKsSTgSXBK(6G`z@T6#d5QL%(*H zJYM5fjZ6)+7Kz}VE_(v6HFX{&>5t!F{cHrjCisdxvX;93oR0SkASq8&z;&GXqqr=a zjgw~;)D!lBFmk}@o4sUYZH1sTFLx86*aLHRWUVvQ?NsTIC&SyruTU(0stN0NQu(=y zKM=H08YynU#&^*`lbKzx9*?(zU^=v~?zH5U3S2_)5n2RS-^@!E5L7(Z&{#{*W24Qg z!jhzZ!s%OTTsy3>Pt%h>vbbUYP^7tDIgPyEG^Rxsz9*P}TH=M7q&iB+DQMOaQ(Wr*A>0Nc)p3A3p-UGoTuefd_lK~}6wmERQQweW=$GGY%0hRTDtS9XtF;VY12d{A zM|J@}wAfX{T;~MQ#~bfNh`z^z?cC8Nx2@OwBg_Gj*Cl!59z^=q^)U$ zE-eg-So;_DWLrodsz37Uvy4-e!ev=ioMGA0b zQ8#biYV4Izn{BLF4tm7MqIELXW(zgl#2&S`wV5Qr&1|8jseE?JZp3ttWxR_*1y80u zkJldC9*s6%_t;Dit}E@aS*1sku9z?{EuyhD(=Twv9uZ`mDc=^6AH{1dJpUs7&N^YU zkzc`f#bgB>}Uth<+yS0_Iu?XR`Ma+>VGG zH{ypb7MSxNwztJCu=cilnHG+Qy2;Vb+f&T*uSiS_v;HNyJc!h51}gTVQE!0zML6Z8 z9=-`!kOj6B1{e|_P*Le*J(%3$5iOpMS~BKb-tG9l_~C;xpW={8dOQsA6UJ6+Vi>&- z%zrfp@;9Bo5}{3gN6iLx!eAy@@>5y9Z^AkPboS(^eS#&%y^*}8x})nPS>9kWdxj$5 z^*atwVG}k?X?WXEfM`r^@SQu!GJ4U>WTgt$SuMMUH4@3f<EW?#g41L%?Qr zLuorsRs2&lJ_?5K)F5-C>Rj?>ewUuI zi|YN*S`FmP%(=9{piBITw~8FGpy4_j+t>0D^;)%S8&)~z!4n=VSg=fs3SEA>mo6tz zbF~~vjzKt{0sE;xy+67l^=ahz;R=p=82-n#t-HGnGz}BwaCFG&AmtGMNXE@SQ2!k{ z;5;G8hFS%*)dsWcL{bBTV=^_i?Qh>FA+y`eakbVhes0mV5B=jNyi2KH%--RGAZ zUK@ZlEdS1U;!ugaN_nvCn8(qmeQj&kuDvn!o>40~EA@W9V`znXk7>wo?>jyq&rl6* zwyS%*ouev|zu#mnl%$^MOS_~>5{0?kg}mN%&tAS)3A^iQ*hydAO*)u%Qxz;qLTq=( zbIt>lwRYmffW$=kZV|pBa4a!B5TU^7UprYfo2dJIApZw)z}0;y9KxG!Lq|rrLnDR` z9*4;q6t&QmpAXGPVR>%Ia>x@14@W$C5+ch_XwY{`7u^wFaAK16YM=s7tg-A?3XRET zh0z7r#E42LO_m6DBobhfE1_tY7da6To!t;mXW z4i>aqIT|EiS+=YqHpr0{ooz|lAfMOc=ZL~d)>zIh@-LkFKZ`BU@C3GP6{fk^ZBnXk z5n(wFBY8($R^ra8=H^5-6g35k%4CG5^Ptl;q~ul|*g$3~7q2&Zs5WTwY|hHs&4Rz6 zFEqhV^6O@F5m`LSz$Dn5*hy1_Yg-igkMau&)cFwx*0U?80>J? zCzjaBbPAGspgUAK&tN`pnRAEsp;5YFk&CHw>0#rxMpf()gf{DXgs72_YWMHCoF9o2Zhs zIn>bOD94BeoWx*r*|NbRL_dRJ`;Jnz-`bXo-c9njFFNz8Lj(MJ)_D$s$5bF`ZNG-akb1ab$TF_R#mgZ1V z{m!cE+@BC<{2;xhrppNtfOhwLD?aVJSrV!vb%{GxfH6>+@6c5kY~F+p2(Y7w6fgy@ zKjVsWq8hAV(jk#yFglS7R1Tr%M3W7V5c(ybQ_WxzRtYv8d$}7(Ke$*4i6FoxAPp9d;GL-`wB8|Uk+17B)w5~h9w_aoG z7JN&OohLe=Z+Vf%y9Y;EKKH+}zS7kAYrYq+d6CYykjLmWPfWhVOa7sJHs=n&Sq45< zPvvX#wSwR*18XdsC?(->1@^mSk7aj1%VcJEKi_PQf5`6fd~JX0cG)Ebeg(@ovrDF5 zw!eaPj`>;t=$7gD07wlNytrlZUbuOcpE`9{uneP1Ts>X?fPIJd51Gy zB_>6ST^DIY+2lBlG+l?AQmL!B1mVwgh9m0Xn9`g`XXoRSI?WSzu@5iO_zKC`Q=|E7 zZ5(Y`vGmJkElKMP&DYGw_z&R!>}{RMQ{YH9LcyQtTAsx=<4oQ8BT1*|VGyS?_?5d6 z%c%^5mP%qAPW>FG@OK7y2zHb;IO!BVqQ#P@M;3llox)&^-l3Wb--#?DqmwB)?}KHl z{!^!}h$dU-EMndBRYnJb5W>wE9P35JsE`GQZjHi!O?LcUygoILM=q&Q2A;^9X?$V) z_pq`UH`e0duQP1eKIFk8<5g`4>Ox65|0QhUbRKgI?+AzSlGSO;y*06{v`8- zmRLS}_Sju0s=$jhvn%k%~9wM8IbcM@s;+K(L`#nfb3elak6%! z&VJO6#%1ox@&qcLkrehwmhA(@ifN(g4?fl6fPFsX5jq1CME6jyn~i%do4hs7ze1Fr zVjpPS1Ie?fC}C&6L>gmXXFoZjhNf&ok!n??2t533)QY`+iBvk91j}dzRoH)i{ozFW zvwOgdMRtebezL68Lxq<3LH2RJ+AiQC+B51mvSV{B2T3`~Z6c?{$PbRyE2Slox_;Vf z_JLOX?@HnCDcR@d#nu*&zG`jZN{_jA+V1V-ly`K9ahWMp>cib?m3 zZ{b%K2cihc^{0{ zB_^UyIQ_M8aL1GeoWx*rEV?HuVN?az;0}f+Pc53wOAP+FHI_THi=oF-Ieo4A7oL3| zy%BktKI--RBiq~FE^Is>xPOxaIb2)%KH`@&JLGkAamrr}Hpzk=vbjdnM@a{Rl*RUd z-Qps5xlJtK90S-u#q{3S@%Q(eF|>AGn6y8Nv(wnTNjTLQjn<^<^&99uuo8n?hEqge z5>ar;zjy04WYvp zX0;R0^(JD>^Ee93FNUN6DE?~;s4KNDl~pOwGY*~PzGqEiBtrKrpiT+sl$u1RN?dw6 zCZe0i9=r`qwCFFN_ek7fKUkgPPxLgii5sK$*+*PlC_e)CsGoU15NcY zq!B{8{|}-6xb>nz3imTTWXz(`WRTQ0Q8b-4PB*|R`*3O>EHS)y-QsL znr}ox<`YHg?69m;_GGA{QxrCVjvsb?e9U0XCkOA&9X-wo?C1ClQO_^|J*WDZP2y0v zF$OpRA){ny3|sqCu83T3kkTAfZt^n>wA+geg+Gg~*l+H-B?g7o(^CROq2Pq!>U;Y+ zLi{%CehA$kS*6F&qpwg@9ohfUm=fOB<{)4@TtO4hjUPXro{MGHdOsz;u*%lv zD|&VxKLSDUF{6Hp6g141Dg-8GLl{@G#|27Uq(&kPExQUN(QYP5{2l3$F@9*u&oCp0 zoijJ2S-^a0@c#m%&EOse%ioVpC#6VC{Csso{`nwMA3JEuGaoJ4KIT)>)%*GQ>A!}4 z2bc{8&kN~;Ka@}>ef|9We0_BG17YNV*UXh+8`?8PupRW89|c=PBf%7d0!v}FLCoGB zU6EKcW@LTqdWQc90x|$QmH;={F!P ze9Qb_2qi^Dr6C+EqxD>z9+67&U+pgh`&Mw6RC30O^UEhexh%jm-F$B`)@c6P6&bsH z2rxdKx(e7?V$+eatB7u(5-vAvrX7+sm8!zuNJR;@!q->mRL*w_Kx{gKSvAZXi*{5I znrXNF55JatenxAndzh7ogHfii$(U5Qh1IOPpeMh!TH97oR#tzV_oZ0yYe zz*ecR$lT1Ersg{x(^A2jm=2xIa}K{%delX4V{Wpv`&qo8Au;O!N80SFr9`0pX^7!y zEzcqqR%NAJn34(`_^6pr^*|iAleYWr=UctTlIR{2#92ppxkP$q@{Kb@S z6N-~I%~5|uBV8XTaSnVvAA;Ye-Sd;6UH$``o#aF^b%j2msxlF@XtDaliAgP#a03?e zTZNOd^(2Cm@--_n2^zJQSoU$sJ|@Gejf%DH*>h*SENA?AXiQHXFFbxjctUav_@VVD z)v(;Kr7g0-mYXOs96U%7;aA5S&FHW0+*$Kot2=AfRFOt!^L((8ffk+V`nR!c@});M z_ZyfE_IJ}_dZ>Svpy`trdp3xZ+$Wg~kPVh3bK9UI)3CLeS(D>t*^p!BEQY7iu{kQqzk(;J|M~F-HzrUaPb0A>y#^ zow8%G_6!yUoE}MTn7DIPAO0FjN^Kn@Q=;rI=F%lg-~f0EgG13#zYZ{sh)nNM{_Fjq zUN9|7hV3edK8iR8*Jt^(IH!Y*1cJr3S_s$gHHb`?QUa1AMtol7Ibg)^r3RQDrG%v< zsc>&wF!i>zJ_@0&l2URYJ3FGH#UM%K-Ur6%0yA>z?nDJc7lm z0CKswNVTyTBPp1c4YmZ|fC^F^E?ci2Xeu8e6{Ik9#=&ES00=u<9iswR7o1^yv0Ma4 za6Bh5*dx1d8VpAb>t>B{s_zAR@xq0<6}j%P_TXel0-ZD3;+mXXZLz<@cH-&JsA5xx zThy0|HD4Wxf{gyCj;Ta9#O!*(pe}ys5F?-%z_w~^L9XZpf4{wh>Nq9*fTji4;w@Xk zJe9&y*_JI^jtD{MA%*o+YJtOWK)Mp{(hiq8%Ip>ucsXw#TUvNks8C^opP%2#3KhJl z_&$*T|8pRxvv2Us(v06iON2vXD3D<#ji7<;@RI_;ImV_Agrgmb&cyya2#3RgXCv-U z&pD<8*!nz$ohN;Z)qsg@{`d(~)VmYN?x}2_!7i;E3K34#5*%V%tdVea4aPW3fA20c zcHj!4&Rq4wFI^2of*GG}2;NOO4S0;cAA^n0U=D7hu{P=K0i!OD;UMoa%Kb~hQFpAj z6V?IY)dcJS5LW}{eh4#d9uJ=zkpW7Ib54mw{nN$1;1J^{eW?dfLG4`9K+)Id*nREJ z88doWRsYmI-d}RX1n${C)A{exuudz)=olZn!1D$(Q0xA$?>FkM#U>bs*wx4dPTR%L z!9S>kPB^}TorH_iBAl9_w=%BbRR$z2r_Z&m8ixBASZ^FY)p!wt@MD9i5{9oDishr| z{aq*EXsQ`81mDVQXimTvid6BcUAy(^?@ymT{TQD&An5|ecM{>ly<>}h6$TGOW8;8_ z?s@u@QKfQx14k8(q3ooe-rzk`6ag#@RQv`Mn%mv}S^{Qy-scMZ*s85xF$T||qGQO` zII|)npqLS9=@iG3K0Wraf`2CGUYG22Dhlr27tvYHM{U=0+b2I>FNUO}^5c@C=s-5r zc3&@;ITi1uXe%pepFEG#HrUHD?XoxIgt~%Qp5`taJ#1R6(0>=Zg1m+-S|m)5`+cRi zea3VzSQG*qm;c_g{)IP!=l7E38(=afjH;*fC`KUCDxbPd7f?jCcv-5jBuR)t&+1CF zEQ^1Mn(^q>f=X0OA4q!+44BcwYG`yIGIbLT$Qe+uJ$QDUoL06;Zj?oc)?EFml`%y%ekm6f>1Xx!M9h!@E1mpByv zGh?MOwfrE$=^Dpen_YmFlifrgb?!yc2<^_pXlqP;ID%@UunLf*6NIZ_5A6(?1|k@^UQkwTTK!0hC~qA;a{o{YhOfYoIL6a!c-ie<=u z6K8h!`@7iZOadqd(()6tbOd9h|CSbQTj=heA_WauxtW4twwq0Ym>rNTHcH(4q);kf|UW*|q z5JuEs$U_v|VRX`JlkTnnC5Vh*6U#pUnI)B!XEDOaQjgsx)^VAZyd2%rRF# zYvD~dtG;`ZcD~4VS=eMKa)oTJA+HuZ^QcJj8zFh42`hCWS(dK{0an9=wMdlje^zjr zjCSQRVN$;o|0Wa*O4kk$yg_e`)Hd!fxs=40F&!r1@@+q@{xcj!|S2Ak8g zY84m&Z%o8yi)Kpub0lvBmWrs!A%xEBvphI0xB1V}F*Z*3JR??Lwcy$6-s+ z!(Mj74kMX4ATZxTmeT^)w^`RFC=lkJ9M$6|MCI9`%62p4`6JfWVKCSVsK$s9k@D{& zMvTyZOHShhE64#)-y0}+ev*#>Y8s=Sm^j{qIWGqP-~ReAKhlg%kmW z%;T$?D$C(qoOP0HOW=sAz9{XoX|L{{a?nTQh^iaS?wan`QyyP^;C=aaG3l;pnM1?m z*D>H4g?IL@`IT>TJz}16w1oiE({@jHSLq_1$j(lL^(?EHdM9ttqtFTTb{C-!i2T&B zfDfi0JNZ#ZUF&wP`(^nHsirLZ=put~-z&?L2g|QK43R;(FGz;3XtN<;s5Vew)n_FC zTTG83KUm$`^L`Rr92tuB!sFW-97DNXl;K4a2RO*avdg&eP4_%vE6M$Gf`unUayukn z6S>|=OvU5~wG7WS^2F=cug^9&qHmdK?>00@BK4UpryBzp;LEv9G;^P_p}kNUEmoF~ zsX_J%_#JRXJb?Js9LPhdlF%@Xga+r^-{f3dy0y*_jC!XI+<9W|; zK(P%7?XdM;(EjVHreO(~yQ#KNWOV!7xj`S(sUVFHdC$}r5fPCQ@v(AZGDuE#&>B9RN%-gd9W5QX(&;}^iG7H=zT$AXM8#1k(|;=Gm~J-tg**M^9+5!THp3*nuddrwIVTU<~(j%MfAt9&Lqg ziffVxYnesf^W4;QBt7z6cm5=_5F49Xcloh-ZnrJGPXk8`z`d;Dq?Ug?T1h+jY)no^kfr3Cpxhvs}9)Nk_85x@UuR&K5gn znU?JBtY5S2p1oq4b$&`WEjK0vKM^)6MLxx~v)K?L&(cM_`a91zITa8vTiohwok%99 zRTO5yeFEXJLQH`y?EZr7=Qmn-FS~}}^urU&iHow2+y8zL<7-o_`XyCF*bXqH0?Yu@Or~9q)F}9JSXsjqMS@;UAE%~yk(dE{fj6HAODH( zs+6w37qTvDWy6LI8-0oSgOweI$Eq2t{MAkDM3wPm{(u^I3?@o?dV2Ss@Wa>Mbf3hm z_Wnrr+3@Y7V+#vkwGuJt4MGW5g*AA|W%=?oJc^RPv&yStchEg6OuA-`HBP|0E$j+B zMK4U95>>b6Eu2wJWL9_H#W<8=ZuJmdm=*%t2&JwpATa!V@08DB6A*k_fT^M?DJedd zU@!E-%9|{?yhPUZz(th6wdwP=vfrg0Ox)&fSixWIl$QZl5?_y3&GH3p*LHAN-)bk$ zPP&}7w(Z*27-h~kH;PIh4MGw3k8ZK@v+!}fgM6J$zYY{XR-2bFB$csD1h$Qq(RCPx z9&G~M+eT-+*y`$eOkQZh;IL=K>Eb28Y$&WIG4Mh*?xlbg*K$iGE-zU>(%c?*kyq$X z)u9F0T)WVI0m&+r1d5B(kQkI^y+==hDJ`Ct%&g%l^pmiYvY#;))?P)g-!1_K2FS>#&;26ZBoyHj}tIH@Gr)OFwT!L z+23GaZF6zw)h`_5)NP-b5veyU{l~&hqVgP;VTsOKoZ8-WD`_*iQ7N}mn0s+Svldv9 z!gvY}FxmZ%@fPCgsf8o?CzAmC2q32^*nCLiO^h29Xg*{c#`G*$HF{VLq=v{(O!tGN zkPxv+(30%1?fjFBtKAq6pDBV5g8zCBTnJsY%Ewc3skL-fU*2jw`5B&FxeI@zc`S$9 zpg)4*i9*si9#i-#&9dN>DtW_Z9iH-#a>~{gV{cVq|_1HIsAd~5pfSn zDgmFE`4v>-83kXGI7Ug@jWJh)>6(RM4Uwr`V@D^#w*)RUVb}$GQ40Z>)_nkH*0R7n zFuq{{NyD+Cgoka+;79Sw;RqbgHW&=e!Z-1Cix=%vC=T}+nl$yvZCF6ZwR!A#A?U^jmZX&pdL2$0 z?PjnHwFO6h*UpO(=}gI^nHb0Pv~X57I}5$oy*YJlmT($!*8BzjQr)gJ5?^E0rE+pJ zRZ`-)3G+(qreIzHf~xF#EabIIXMfmSjq8F-Qg{4p!dzI1iUZBRZZ5T#oqj;nIdmBI z9OGj?TpB;He>(?q&)Sc$|7u}hdp|U2{bdw+qM#}I$rvqe3{!^|o6FZiFVJ41U#RiE zN6Obm8QV~@(yLsJn1!T71LguvQZ!e~NbP#Q-2SGg(^c!3 zpH9cdn4eC^R?GYNr!z1#Sf_bnwLFLy>HMs0>`Je)w$mf{?;`SS&N@)VBC^$ZT00jp zRz7K^RVgR6O}F$!N}Jw@;{$2gWNWM~{@v29E$*5Pru4Lhcw2gtNKQk;$~7C*th@>9 z0}`cwfkRB#64+@x0B78ue4T%qy6JDE-VZMS2%pSu9+OU_EXq7j+C5cMr*m;itufw6 zx-s6*BYAJDv>#*g2{w#1Z}KS}#rRb#?;qmAhnt6*>!*`C+!oiLzZv1{HvRhbrp@g{ z&B)=bQ!)k6!b%qwfqu$=$3$V#o*)$7B^l+8jr*<~4 z7dnljNT*^hL>kOJV-4A+%t~4Y*i{aL4V0ArBy324Kj*O0iFjcC{2dpj!Vz5@r0mTH zCJ+S2*}4A=oufBzFrH>I13~dhl?wf4-Uvfe_0Gf#ta=HPFm9vian~G&F&Up1hH~_7 z3!KI%oL-C*>Fg-$&V@88n=#(?SGtX^Llktace!-%4G22g$@u^ znq*;TN@`YC3qkry#Dw?o@M_xmhN#KzdswkJvrJ%^OD)AFCYl<%y7Cz;id2DzW?smn z>(PYUWdAgDM>zUb;2=B)!cWK98|buIE#<8yJ{og1UOC{{&y`C~YBMxGy$5Z>&`obX zS6WVtP-8rTw~BL}C^ScXG(G#ZXH9zr?zo6PJV-(BqI*+-aO?_O)Xw1S?jj^7rzDdf zGMfJ#hhI*BXD1o(LQv6HY`dxH*3>V)5a%g(n-A=NOAh3NZMGorakV=M;UW2<&~paM zQ7br05yPMKMU1ne`FagNAwRKAyyj%*0(5=fw0-+F7h>X*h9?1%*@J&mh*G{VgtBg% z-1dt7Ctx<2jmhAG5w(qtAy%lXs5>Vy*b+}}h|&QHj=7|s=_g$cRf?L^Tax;xiCdY< zetv%@3w=nJNx3uwHKd}_$u_S)k-DUau_7-cC&AMT?WB)`Av+(H&?91qk5Bj?v2ad+ zo(H4*fzflIaHZHc5XSP&c~B_*hgzJWgyy=sO7vU*r@g3y!fw6N(6MXO4p0`rE5#uB zEU0EhJvfYr1cC*>Ae0`f581$#1dKL}Z>4-{8dih+=1OSbT|kl;tdUZs;FwE_uc$w% zTkdOiu(S$7k~;g*a}UsG_1Z&8-LI__)hTBHx>8OvlL!{8cCkmnzThaDa%mj_eyyTe zghY6Lv2F!j4IP6W4A6NdJL^S7-Gn;0@uf>|qN1W`D=LBy#SQw*Qi`DQu6uvL3(kQ;2-_AOD!d&AmG`PNtq3P6^uQd!zD*hZrQ!GQ~ zyTSc>xK8H13pCm?wYg@Zdsi`w7$KZ8Yifnw*(V92)%!gih1 zJ`N?F6hpAVPI6x=Sv2YPR9^(;P@)7|aDRu;=eazjy!qV+ZiLT_Hj^qvqTqdDzdnn3 zEXT+1VjxL+r2M>cTKG^70JaJo@rpJLGy@+b|Cc#X3_?rTEoj)VCb@Z2WuP@NC@}C1 z4qlIzYP+mTssPI`a(DOJi-8m_@3DUKz-#@1LLWdNJi*SJa6 zT`p--lvW67+QxO#b%W-qNe`TOkji?FhLGX5a8z)D87pJ#<_cu;g6Ss@_^EpQiU9u~g!rQ;)uT41fya9atmONnsF_`l*#q|lbDjDp0OtssEIBGH)%SjA2dn`FNHulXF zrrT~e?F(y7_wGG_{C$kLILaq1=_5{Lur)Kr7z|HcN-V{Tbbb?RuhSgixD8oVAO%;T zL(ZJKZ+VTPa5)&RQY+H{NEl(MSf*WkW?xm4*XItn+iMswU0(FZ(?0{m}C3r zNvej6+QI5`+{NJDun2+gIJPmH=gTf%j$||DI2oU@$W1uu4ZpN>!j#D1HbJCgIb*Z- z?4QYIMBwjY^u6CNx@!Ho>(+g0erD&wqi-i8*kzsXia9i0{R-bbJEk?v2|LN!{Sk~` z|I&pNI%7@Pj}yPLS0yk>X*_GEbH!nzs?`W~Uf5WBgRaREWY(!wtDrkHZLH#ip|e!O z4aCM7AsVT(tH8XcosFTiu2Gz}$>}j{{2pjULU{{^-6)u%N{12;^dJoER7Fh;O>LDMqk0kl>r=q=}Y(z2<196C~2W7uns z-_Uts9Sv%^VTa@m8#Z(+&6+5j!%;Pj5xxSj?9SNVr%#{$BCDeSR7D@BS(n-EvmRNN z*=x{wt44diKxB@yigG*GUrYz9=jeG)>20|6gw13f*>vVoN9U@5PjwSNj?)Ky0m_5G z-+ao{XnlruFWQm;86((+Z@ijc_kI<$d!SJU`!4j$(}KETwdmAWPBJ(hylpb4z&XRU1 zAxrZ2&pe_;&Hrh++ZJU@7c>iqV&RE9POB9YZ}!gcrB~W);)2;}KpYeoLM-QIrIZn3 z!_)%ERA@ntwTAj(2$Wk_&AFHB28wf&zRg5&d_f2!w6H@rSiq=;xtxE6LMmEdxn85q zb(sHbSPd+~b_ObCV>%sv$IlL@AYv;B*6MA7})XY)UiQktYVsK z=WrN3;pzuTI;%Xn)CVEHh>)ZK%39b8$IxSQIRG`WoVX|qrB+jt#QvG2{6c}fSgFe8 zY_N3o$)(~_LZtuR$ZAg7^qPzetmJEeJU#BEpy*?hCS8n2YnoOlNae^Uk5PKk>8eCh zVJl?%3!mzAAq`@wqVMW*+96*^l6)SHFF z5@}b~PRbjBVpkP~oQ4+Ty~-R|Fj1(P4ZC)2~Z1rt;jg36R~R1ew%18KHm%4KDm( z#)<@D|Ic)BJ=%rX>Tbef?UOC{)v3V#x|&ohUjORaj1PG-oK8>&`}~bc)1$M{ZnmPU zm4YCW&*oqhJh*`ool337jXzlrr%eAQaGRD14^K-w)|mRZb?dHy2;UdAJSDeXX(;&Z z99@$pV6=OA-t}V4hA%itN9WS&It~4Rz{d&Qb)F^)v~NFsfFSX-&IekQ11|ICdW+;l z=4;;YK~w!P%^F(`HO>=Fk-NStn9>mAo{g~N`K)|F1Y0Yx(d_<}4Q7>})n8lZwG@;M zHZ2>>Wsc?VXOYDBMC{eA+t{&-u3QPVUFpU?ve(!vHWKzM5`0aed%BJ7#u=#Q-S%8z zmoYM!3Dz3o1d~=IP>4TprvE>$8&$i0p9s|Ja>C?)R>t^&5?+C09Tc;>Z z9fw1xESH}8D9$cvoMw$l3A;>o$y!e{A*D78!dY39?UI}5I}^4%rz#qP{8;Q0$Q65& z%!CnVfW1*R0-a{ud+;KqGUE@4lqU*4r;OR}emDj$2sH z!Y>tfAFtrDWNM91(nNcvs+zD6hwHx@F^tFC?LJpSW~V+64HEu9FtR)4K_q!&M4?lv zyiV&}nDFmXaA<3j)GnwF%j!B=fw|7$*fLgNXX;37UMD+j0>-U)eLL?Mj4#uE3tFu& z#@sinp}A*d;iLACSChf@JIKfScWwB0=!^4V-lQv99VOSPCD1R0JzC$P(+mwiej-hI#%F!l-!#E4UBkf)fhAd z*dQa*-c5yt3E+#v`w50Rcc38}0f8_F$x%-Vw)vy*YkeM=^zu!g>lwVI) zX=r!0Yry?70|Ej<0YNB;F_R7`LUqx|EpAi>a)Si$Tttl5Dni}5$PsjY8@li9%~g!L z!UuxMfqG4T+PD#xKoEE9!@>+CJpdU_hpEmlUuI#ho%vBS2#Oo%yNrN(tewv7l9M~= z3`6AKotA1*B!3l&AAG_nYmDa(`N=53ltW3%vn(`ox!`LimTNG6yQfnp;plTSzuUKA z3!9|)(?f+7pku9C-~M_jC4P}*fvz@nmq}^zn6;?S&D-g{ZEzv_keXQtt`oY0H7GVnNVu2JNkZOs+gwzvO?@|POB7H9Or^dqP@D^j{N2@9Fq(mX{My@gJ>Qanwtdw-lKV%?vJip`M_wk_mdv*m(>p_RgFaHL&dq`{3N;+ z9w)|b!T2r~j`KM0v0cqC+3t$$yvatt`LWi^rB&*sBsY_!I(R)TROvct$t?(l@0hTz z&+#%vh)wr{wGY3lCBMn8@FRq`z)oysiWdFzp}XY#H5G5E7^UGtMzSz^e)1N7&#pat zu7Y*r-~tUhC9dhDEoiyLmkSdwMCV@FZ=W4D7tf~>$&%g~^H>4Royn#W8%hs~(njw% zUF1SEw*6UC*pKxh%~NFB4MNG0CTL$Vw<1?fGaBH$lP*_b{u!)x+i04V=`s~&2);T8 z5wuJ>$z?1owG1Al%JwF)SnFgIq&b#$aM(JOR9e&S#bOl_snOTH?C*OT#TixG-VRy} zSU^pTv(e1$Kaz!!M+jHEuPA<(mA0-8tH!C3d@oAvMgWWIzg~u*lY+3$Pt_7+jUew zbsOUPsN`lHl}87=^KG(@FPH^M=MB+g{NV!Bi(oGVtWIQR}Iyf8i+9VA4NO8}Z) zUjWL~tvd?N2{U62_V0g6?kCGhra1p3V!)ElnNtc_*4y|$hKamu-z;I zs8SZ#=i0uNX1vf%W}016>W_gZHfIS0gevdetuW*Q9*k)*NUmn z6?ffzXH$wBE9EC?DK8gcZ*DK|+UF6vm4^qHBjihDxi6qbW~`5^BHL}o^3+lxNq}kb zeH2l~U}>svCeD~Z3v{~B zh%|&3>nuYYhI~FKsHvdQd6*1~{@ShE&L0~yCcrcXMEU)Yd9AI1y;{fHInlV*X ztBgRy#`zO#^4+3`R}UN*qQfH)G?Mc5?AdceXeb$^fWTsQuI%u62)#813luwDvo4CG z3X&1b4j*-Gy>vb3HMvvXPp|u^CxtQO56Bw3j^ce7Ws13uLIe#oRpELzaqjl_Z%;+@ zfmCw9`AxEAPVB;LKa^7ZEFq#J#nNQ;2bR01_XTOLATl4bhd68fPRiUK?`5_JCmA(Ig ztersb5VhE}e8cjbF@thGWO;5}jxti{-9Tv5h#6 ze-Rtplv6vBROI{?pVIXeq5%wt|E!8W!$B;z5Y{G0E)6rz9Oy z-KZTxzHxYVmNjf3*H#5he(%*ciyii^5pOhv+@p6hhF=9xZ14e!fgv>-3yNT|Q0g^V zAIgkk_r+9gvmV!=4g1DDjt~GU)8P?y-OvGzZG6*jw9S>(SK2oW5_lOL zibDaXA!M}>Ls}d?0){pI;i34fK-=zC!iOjs2=!(Xx>Hqv9*Lb?+`aIi7b)gn-tn)_ zib1V2L0pjq4v{1+vV+I@SnI`vIjFL4;u^DHy;!~3Anj#aB6&mbK>c<2`ek0)a1GvU zyhU~KKpG26t7fpyFP<2TB!%6jxZ-bUtaiFDh1JFLD6R>nvHHwWaST@YNJ3f4E@zlg zj}=~y$$+F0?q}KSO{w*Lyeqc>0M#w+s3Iu1JUM~vW59&l_(Z)D9kzwx#NLdYFx6g= zmLk43wxS7w4{Xu)OWV7NOFM!3J1JU;tsiSVGGli4rzF6dpSP=z*OzMQ_S?fX%zVG_ zqblaQ&~(2t34K(oCgldQ$21q&n=>`Zs5cw7YE7M*cngcbroGx;9yQTs9>d%15;Im7 z+xtDmCz#UJm3+S8QIZCL?#?>#{=x1&)D&JIpn-Mo3r zuPr>Kp#n@(7CfH@Ni|W5PVUp7p##7hk zsS1WjPk{^GA?j!;5}ZrzyivnWa8`u5FJ(NLZGiG&7riw4i>C>ectl)_Zok zMrNJi?54GKcLtGD(W1v~{3j8P9{#yy%hn?#K`)B2hT-aOM8>Go`mvDIi;Q)vKL+g; zR<+#w{Qe;E+`M^x1dqqX^KP=8-dcJVr4`ouiAvvOgRM{e*fO&sqAVfF7Hx@j#@2TI zvc-;B#;}&nQs8~|)W|`K-|44IHq{n#> z#p*Oqw7SrT7k%LWeGatQa44X^P%ZaiWeiL(fk~?VjLiOga#CRT39Na!-^e9r7g8Q_ z0mf*bfoQxj^G#Ri4@b5ElRE(4FnS9rS}*`bHV1Mc49fA}{9KGk**GlSjJZ6*51=1f zAqkB(*>yqWc&(4Z(ANGYY!v=Ol6=B!Z;Ow@_qc}`iH?_9nt|Rnlt!W`u5s>zl3PTvCBH`(9&1&@=C@mLk>ZIBJiIzENG=KdT zVQ*fh@ww)btS^n<*=x-1uO1LhVW`(Ro0dF8(Iij4SVj{ za}$32s9q(g=zl|6IqmY*<_MU$-_K1)FQ7^~ExEOarFF-vYJx`SF5TL5XcC7KG%UX# zdfBSF#!02e!rV-q%XdXaiFZbgfG;R#;}cOR>kmCn&}p;kI&9_?HNGXdyTT6C)vfGA z^*Zo@K{!#KM+gs7IS`tcQv`KMMo*8T)Ou#jb$a^Cdaea8%MTfk08y-S14VlgA`T58 z7b;YaLdR66=seRpjx}lP?Rhwz$8w&VuSF6^XD$&A)=QkP(r+0*f}%flrF}kaf%z*x z*JAi^{V(KzvwN@EezUn2tzuVn*8Y)4p1q{UuqYdB z54!y;Gk~I7!7;-yC5o?#H5jlTG@8HG&F17iUiY2hkDi}UG+*JOMe9{7N*CSA^F=`2 z|13pmOPL0Ko16*@4m)}3fi1}y zZoDVPZ@2i>#b zmp5d~SQSi?CqEsEG8`heqBw@k z`6!g(X~xOET$Yw;^p~lnG}3h4NRLi(=+2p(;5}l$88haPZ+GDXUr!~z?NoU0`B3J^ zR5|6ZOONGLlcnPtBwzUw+R#_!+k9hqxQuQo-3@P9zRA9x-Y`sH@0gF!Df?}Q$nt9Y zE7n#<$JLIf9fKuvO37HfSodg1Y&|-qfbA|TIS#*jn>gtcnPPGxNFFa-qx$X<`Ru9C z8I zu8mVuh~#=7F91GVgpI(fTmg#^V8tU5X_5P639!lJG+Kuq&yfJzM_S}P!1*h{BH(OB zm?MI*0DFuEUr9P%f3?VN2Ka8b7n53w&W~|lvUzYWSQ?(qwg4@$pt7}R(VFB6cFJ^d zjlE-%X@Z`jImULdr)`C%X1X52Rt+hsPIMSsCeg-S{<6ksz5htMIBcc#S6gw?>XVW# zby5cr>N@-I;Rmq0B<(S!^-7FNLKA5LLytw)wfL%Rusc@W0EoSHHvV^)3vVhi380xT z(K4E4X!kSeO0C2QHKt9%gQ6O3x-LX(a+rj6f#W$e&VWu^S136wEJgCxN0g>+r;nnIYXL(+4!OLa5W ziBlkY&;Fn7hpKkHqd;jFyBc=oS~)5V%#I=9nt>RUiY*W}+{r$Pu;=0WO8E_ajVcb? zl_=rHX1l65R9=vpz@jm+l_)bwJ42}&}6>pX=(Aa;C-R{K3!w^ zsCV(JY_KxP=xcei4P+6dXN(y^%);uy40m43&Aw&`Yl3a zc^K2Nr*wA9GR3jv9(0Zs7@YHId7QzqR8u*`>Tc2^89G-M0b8%`Xp0_OMmfgvglt&5 zl)$(4EbjfTiL10(wd&2=Rjb;WipknPlLe+qP|o@@o;=ssMA#}eBd&D8OXj;XP|DX?K8mamkt3qFd+$p)79u?%{-y)2@0ECHA{VV(tm zbAV;Pb4*gZU^u3;p4F-xf5uc!up0mSoYUwS+f{KgN-aQFf@2TwD{h8M2jF!svm@80 zm`g6lv&rimC7+s-XHpZ+(B*iHk6pBmuL$P8ZKi22V4FVO(oinn&qkmP5~_!|9; zofzaJyJ@PQCx>)qdfUykb0J)2z0DY|si{{Dt9TbZ9n3lNBjhJygxv~C>? zH%9-$BXAZSRBSLstXFw6B)NWc3GJM3JfcA5A20IieP(%0VMk5!ghP`sj$c|q@Q~fp zaMq0sgx|I|gRAlOiZF(G3y0S-fkXByQ%Q>^iFQ=AYtO?s)t;%z8cuY@SbukT7>-@A z#H8P?F{jhfE__@XUpSj|wijYvzB3yYmTm}6a&LbZwr9m5Kc(C;CDSJhb`&Q*T)fuQ zEk1*Yj}$0VlXz;F1U9cGuyN834hO@M{qr_Iskbs(~$ckv5Rw2FSC zK)lFoXqODZS(Z)VHkjT|0}Qlp9mqB~i|s$mG5lt2a3*uV+R4#cnNsjJcc5J%e|)1l zd4`+~u4ByA;&9p}zSDncb2xF{G?T@-b0kPfi0!B30dvd3omNdhgwGBu&qzNoMJvv~ zu>8UpK}Iz2g^neJx8-=S?ol{d6hk8mD@Q6bFsxyZ{&lb`bUXiIs7-OR_zu>TI*KUJlL>&{DyDmiL z^c6IHqNtagQFA|wab8A3F%4p}*@6B54yIHYvP7U6b6=T{=oE*h)k&)E&)}m`CAnV?7>?B?{yC2tIL)Nicf*^2N7hLmzSfX*AI(eCJ&#V zZNbxeatyF?g}wU=`sk|zjlKzInJS+(~)BdjL=N|Kc~ncU`-9A=eD zm=!kGDkU>zS=8Gk>X4U~zfT8QzF`&RJ0bV+^|5*mADhkB0`rAqY{i%#AbvhVGeB%& zL?Tu~8#o`Ewes<$^Z>K7K12|5F+yP_4Nf6J@{xC zV*s!(oq059&H*2YQw>^VAFltAIp8)h7M~nAa9{y0bsjaRUAt}X%zepX9o3l!Dj43t z0PC(y)24Bthnt_lBmy047zXN39zXu_Uyt`S{z$60*r*5U!vubG*jZPFWyJar6HHVH zu0ugCDX71u2qS5fTP$CT(xG4G|F$ux|_rdYtX- zlQ9&j93Bq7&bykOR1~%pR>OtqlOze&5>a(ofl~J1LG)Qnk3k{+4QB4k+0DUjE*q1< z0hVrXECrbUd@Q1*(-Lceo`LuApBf5mIBmOU-)o+IhMeETD^1B$xmY=HIi~@VbmG;|>AQc^u(IAi!QwFR~))9-vrBHPSKdVNo#c z4|Gh*YBYE45Qk4&we^o-JcLu%*vcW8J>*9NplNUlC$=_NjrwF>YcFXo#=mI-{aVx) zdRAfUGVm=^+uL!6+F%zzQgb_mf6`;p38yo5@bz35U8oUGHHYl((+B$5IHZy$W3P^+ zt3861>0I?2IJ%9_eIOtQ23*6o=!wE^;Xd%CLwGK7L1;hjD?uiXIMSq2rAmX}q?8kY zs_3Uwi=Pj^!80)yW}^zer)!3!DOkVWgb%T7x*sg z3xa4qo&A5<`wsXlif-=#5?Tl~L0TYyl+Xnc0@9lxg3<&*svv?&vCtGlkt)3kNQ(%e zR|5!yUJO0-mJmuRCB5y;^PSm!w#@9z^WN+I-uqt4`!q}6h?qlQ-wue8ByaqngKfU8@vB;>l>ks7n=xP%8w@2@0$;kI z0X0hc&x#>LnP4wL=nl}}qC~TzYX5$Uto!|Ydv=M!eyMo%rmQ%+B9)%E`*cMOHf1d` zVbK6Mf}bVhlx_?N;}K;4*6GtbbSTyelQi}b^(a!r`Be78B(piAXb@#?V?qCu3VXt! zl%u^NY4v!vhX^ISX=OS6o*g4-WLw%Hk3XKM3E5|dP`-UMefNG5mIi3Za|a2ZCB{(c zMtjn5xV^x3hSDVs2j>%nsIul@u9wy#I1Q7?cP%t5Ky27=mYV%Veuo>?!HTtr!z3Pp z@oaV+5|X99zB*3tQQEd`+thp^{dKl>_3+hMK$$vq>Wo;r^a#O|nb898MuDL*Fcr@EXLe0_j{sQ`6B;^bP$xe>ghCxgKTD@@ ztSnj5(;RsZHBX!(cn}k@_wa0kzN)a;QjRtR!Q*0|GvwmzsB!8-RjVPx?9@aE^jeA5 z3&8eIoIQQT=IIqgIrhWtz-RP(d%2e|AvHS>JCjNT1Kv*QdS^*YaiJzK+hO^P?^=o+ z8|h-ExN9t4JfshC8R@t$izYfp4$82PvNBu9uu%EQGw2%GBU7vKlt>@>SUHpHNu^Wi_Z9qH(TGW-b@ z7{VAV5r7@nzgAfVVHI+HEBL3PY|x*}-dM2?pY?y9^1Uf~Pq}DT_S+{Z6HEwIj8z60 zWQcNyY5L4p!VS!Uj~jmK>1tVkjFn>ymM7F)xXfcMo-22C;Z@4tOxXboo`2J^+E0`& zx}RPHtqYd}@srw3fZ1eZ?GYnJjC_ipQ%ZCG`;{jN_wV0-j@A5BV%q2kT&o>>pyoBc z^X%BMR1(OFag3+-Fhl$JU8^Lxu3K$pj^e@>B7A^Mq`!kB@i@N zby{caqYreGh+>RuZ9wRPy0eWFy?btKA#1L-qrJ`4?U^~VhN+|Z8nn|KWc6$JAJ2ip zusUFbFcwwU$CCR(%D-xWSqm<^X&8Sang4 zA1`9+B+%yx@mC#9UsmE^#%|%U;M9ku@Z1za*2=2jCE!a^jM20Zr6S~mS?D}&Y7s^G zYFeoCj7^VqM@+0|B7;>hj|wjIO(NcE{iIgFDYr)V?_USy?GN|rZY9$Q%q{%l9!+~< zR5bi=IgswBQK>tcj2xp9!|H-2c~KDgcVTKU0z^IdBI&81P2-R z<3SkY!JC^k8<+&s-T21E!e45t-~28xG&O-!%%hL_!D!wCv&)E;at|S-9m_JQW<=hM z%_qR>ZhZG$8l8L&o8AyQ*Dv9Czg%zG^uC}I7NL97v2F*3it-&-(3aQu_2&b(n? zd^q&+RBq(f<9gCz+b{xPS{~=yN3uFFCh1|3H`Tt|Erk5dLZ~uKyxZHneDgs`#J+)8 zTiUDfn8xL6P7TO5$F)da7CrE}Cr%B6MH=FcZM&`49GU~31NU7WSU{K;9!F_rKmAAm z`hE)csK?ZdCjxNlGjb0)C;Xotw-v_)pOOc4z?}P%i~3t*822Z~^HZW8d1e~`n@zq@ zh?GS!CVi+QA~u@R9|`+K$=q3a&lH+XCd<^&_qMc~ zq7DBcW?FbLeY0Td*~ya|XZhQsztItSQk%E7kq1XQPWp@-+07?%V>d@P4vcj8sGP`I z=p?7u&EaH##6}xt&bN%TVMZX`9Htlz#%GpemNNp~A|stX?b0n0Vm}LYo7HXBNk^m> zDW`zH!?AHBz*NHFVAAdrN!K9w%-RU9+bl<<5i+O(X))uo(W*&Lj3dGDBnURi2BjP?M+0aopxU2rEE+mu9F-V+xTTh;ZT(KH-hU7DH zBV@}-!?qcL*S>$51K#h&h{vTG4+?~_G+djv;88~%eZvmR?pofnL&41sz6xV?F^A#b zsx>Y&6h`Y{yl(a&kE_I@rCF{`9aO%yC^0?xur%6ZGT98Hd_vbtF~|2ffyM-P;#dY5 zjIS7e&NBi>cyTO)j8Oz1O${AKmKb8ZC)CAwTc|kqRTH7M>G-DQ*)GC!HNF?|hH2h5r_Bb&5YuYr!dAPSNMI+IFSvn)%o%T=lu` z)3q-e(^l&w-PM`S>jkBc)Ay-uWx)kS7yeZFR`(iuIzxh0{TAFho8CnnvI<(EY6mKB zGbkPU{Nv8|>eVaUriYr0ZPlt8gjwe~JKms2gI-(9*AD=8+A7NUU2cM@tYl=Zgsbp8 zw`AnU?y-E_qPyW?qVo0#K*Iz+D}dv1A((+XQzR{u{%QDWt4{!N+E>82H3 zOxGCT&`T$~$)046ovCwN*hD1D)>PBg&`vzv@c-ZR)ZB3{(?K3g6ZIm!fBe?1*ju+A z;Y;reBM(ng@t-p6U9q}w$tQAbn!HL;_VIa9&jz)cy%X-NTj#HBaI&mTnd?wO2VUGs z=bSG+Rz3S7yjg9H3si^TBkC(CfEFe0$|GO{tHS2=@sgC)*pVd8V}xqlf8Nnz&$E`< zE~pmy+^9yq+a@^p432d61JKjf*S_154m1xtb0z~P-#;>G8GVUW_X)=5 z*tP!wAqzR9E1dnv0buuY4y&PcK$pHx$aTKguE-6?{m!TfUDaHLQ-dQhZjh`ei2$t^ zyoR~Q06@sK;x;v4Wb1v`;rLYuiNs$vUO8+nf|%5`yP~XR7$#BT99Cpqd4DOf)s3>s zRH43a(-qm*9hT+>u)+rAzEe5EKeamerJ{VG`}yl`MS=6oFI>2=+*aXTiKD*LcF0r` zy0ChAVw9<<53L6G+2GKdN=}iH=JX=OWk8WTX49Z4cLFz5$Mx^msC4ewg{^w^zv!uS zWjCA5eOUc+v|9xGZI5STiS{Z`9(n$fjFY$8-uJyqx7IyF6=jQH5PG(n>{|i^PT||7 z;HV+84_*%_Zdah=1@)dR+J~D znLte9rlQO>DaJ?l&SDrQku6$L0!)(eby1XaWf+c0WK%B7AXDhIkI#Wx3*%v`!wSLo zw!oM)coU)&CGt&P>7Bz$#An{9pwID)P#)WkqtwPRHXlqA@Dn1-sg&fltKv;+_VlWLYSB?)wYX z&>A?})?Sy@WWRT@S4lG$7;HW_QXCpWwOn8jPpO`cl|5M9W*V?j*?>C$-+&4~>%3ue zfbPI*^w7HTfKz6829ECznp^Nzqxov6)8iXE!BcSvk2QF@C-005yccRI-{OZQbe?&g ztDZCYEylhkPxsY{!jTOMh%xny#;tH41$rp2dOAeHE@89Grw>F{`u^!*zrI>?z^B&c zwUTn8a}righ$~AUB`7C;Wb4SfQIGW0kKJ>+>7@1QwOUyMtCIr+EkpE^a*Nh?tM{-f zX#N~$5(}$7L0zio>3f>c4}$hgW36KF<=sHLQ8e|c4;uDYni4F)(3hJ+94U9c(fV>( zfgI49`Bhwul>b}VHRM-TT&H@Z)y;u6*49bp+T#e2B_KWm*C3WMTYMvc5V}!|vd`od zfq7TZm-$i$5r!&{>+tDc31fs9D)tfV6XpDrizQxUZeAb1Svx~#eVfac2>(eZw6hG9 zi5%v$kJcHqf4+$TJ76i-o*!z~Y$jIDan0?i34tTptG0Y>yLpwWsR!bt#E84JK;S!R zlLXaCkYaE)#J%FWdG7kPf+hDIb$YHGEy9UANze0&!X-`@Y!5?q0Xo56J3$E|*{KY| z!p9r4;!X+{HYovlgb;#V(LzzKTu=k`2{>%zpe9T2Ptad~1>Kul9Us{%GbC%CH{Y%_a}RA9O5E8irKQvsR+C95Lx>k z_VJXSH{U&E+1q;9FY47Zlx+FgPgF~R4U?dXi7lI0n`tb!G!PD4yqR*hzsb{lh5Dvq zWonm}XarutVKsv>KBjiydf(nf+q0&t`3&E06b2Hp&-@@w)=u8zTOQv%#dvp~au0D*obk#SH>)hH?>q{7 z0*=u^c)i8ETejOZ#arj`^H}H3zVYwcG zh@vi8IH9?P>GURH9McG0!uW~3H|Pq)6pYW=#uK`!@jMS0uFG4^rk*271s2=e zdD#nnwh80IQ%Abg7+SW3TxT`0SK%-gP?L6 zF09OZOpB)#S5a-g9rX98bLhUaJ)wnSX!-tM-gg7-NCv%M?cwc%)=IJJF~YbE zqxlIrlVPu9q9V7on>gQY5}`@SG*d5&J5szC0witWiOjt`JbyA?nwa`{p9}1ev}}Qs zt?S7Yi(ZjqXunHry38i%?fN%h^IX`JrVs5uDJo%9Q#BJ^<)<85C%+FhQkj|=6XV)A zvOL4E5VdiLg<`!WZcbzwFCSGzI{pm1R+2xY2|ktKFU3NyN}-aE|CVBP9bZYYLGm^H z*>}@ZrNk~LQKau?YqDId1l+|$`rUx-kZcui-A>Vma;ynSudd7S*Cw|0pr*tM7Yhs4 z6UnC-)Yp?s;xb;vrkMe7z8^ES9&C>NGLe-Y-Iyf)$mOU8Gvde^QDWUD1477B0p>ml zfVe|n6tH9N6A8I7Ko}T>Qa`t=0LL9B*QE{?La4YLLUoCK+hnH|_iZFaP#;%O*oSN! z^%Q9}v6Zz2OL=n$`4klhJViUEE;OPX(^2fr>oixu#f>om@Xa9)3oamW>%pDiyO`#X zxbhngHKX#~2|3O5pOyogUTP%XizCZLTrRJh0-sC ze%1r7u+MWndg_V)i2@N6uHiE7Zg4N?gRW@=5 zR9OWe309Kv111g;q+qqBAPuTIO$TGgAk;OSkp^k;bkh>gne^#4OIz$JSlUU~0IN>8 z9JE`vjVHUoT3<^Luf0qTDG`H|PW70fN@8W~xOPN&iA<6_|z3lM6Bob##Fpl4BoX#}Tp30-vUl zt7U{(jh!%@(@_BVb@}`moYhy?4s~7vCxMZOuSFSJKjD|DQ@?6yS9)bQ?>exwMZFSd z$uM6ylvIW_&H9HJcHEWa`=43(jtsl|&#(`l%k=`FZ>fnSyq~hNaAP?pomUEaD!=Ai9Idc}t{O?+SU}Q|)I&+V}J|i51luRNISP^h;e!mG&XkN|E=h zx$0kwCf2M6vO~V?NdM7klGKC;HLy_+IPMZ&D>k1hGSUuIMzF+UlB>4_7 zD41C1Tv%0M^UVjD@39;U)q(_BDArqtJj%^-OsYc0VUyr|gQY`3`M%9csK814tQ_W< zyIHez$@7lqK{l z7^wUw7=l$@GCf}yFqUBx6lq+#U?qxcyc<^LIq*$`U_G$nPT9(`bc(LHOK7B1?3J## z>&LQms%8wv7rk_fy~e=ctr*HV8Y`*2SZSRa4THtkb%MS2z5<)uJQ030;l9Db&o->Q zMrES|_RH#sAe0S8-MUPFY=84|4UJDiwyrKnX?`0spm&P1f zsybUS;zxJS)Bd8zacQkXPp=A34vmF<@vf{rj%=;$o_av{^!T{llBB3KqZLIC${`Eeyt6 z8A6rC2>B%uW`N#1*b=``%q%(|!JO?ynA511DzhztUR6RZ)MQMqzFkIRc=U2Gxtez~ zq$@gf?4Ut|)SV64k6NML}bnX>|iWeWmuo?3$N;eke5It6mkS6_bxH7+JR z!169q?-9LE_B{?fmffT^G38vF_e90Wr(sISmwI%yn7v%T4QGZE5?)%6sHTUrlp6up z1v55Ee)BA4_4{y+8sWdi$p1E3tJ)G^o0Ar6t@m{>C4zGkA8DD~J!Nlp4uUlh>dVzN zJ*|Tc(ik~!YZEX8u+IrHPSA3slEtr(wOWL1dd2TJ*4UUDqv{nR*|N&*;}pW4#buaq z9{6I=7Ej4buBA1F%$g{^T*r1=e564J+M}Pm8OHyH- z)S2b)F{y7uI~l;G-Cxowhb1W0``)VfzgDgKWR-Xk zfOeGhXj`69#TtJfhrUtK;R34Jl2bFtW_$I!n5T;VMaYjlI5>QRij|5aq?qb6e^%&y zE1<~Tshm3>7S{w@rSTyaCq^6l79s2~^k_L&Alkr6JR+Nzhl|*;Xt?L!XgNfzXpk7n|g&gpEI9&1~p{lT%oU`Pz8KO61mW``1{C+1yFi$`O ze&C4o>C{<*aXen*J2(qv&ey{jEAFqe9fCG6HT&T6tl1{K3{ ztRitpJA`1lY(tsN+2mO@Id)72!MPA}th)pj;Q1=u;RLLe!gzuZ%;o7h zIZnx#Bm{xkG)8&Ad?-}W0kk!hpW5V`uLz%5$eWWm+%@IT{60>7@*v8H->7pFp1U>h29RgOg&}B&?sZgGDwnxCKh{BpNBtxvx z%NmBO5+xiq%)O>|J8ND$WxEsZBW{GiPXB)-9P@#%c|I*uJXZfv^|`Epo8LrAp=X4SZCXY1HbZ2#rs;joySEzK#m zw0&9k0(rdr*5eqa$`MAw&60SZW34sB%h>WB^kDO4R2=Q*a=P6t_8IQ2Bgp+MX5N?b zX_xakLH7kXmHo1u!<(IB-JfB++_0f~I%eWMv|5^bKI{t1cR~O!e);m{5g4Dg?Mwd*%HHZ}`#o4Vu7tnVSo zl(+Af%9X3a9vnsuNwpUo_7Ki*q9tc8jN_^@xm?`KIa|mLwy#^tKqdj(oQBAn9&q;b zho+>}S9)4jX8UYbj_Lm%C&@lp?UL~UQ;_u?!pZNk9D~aDIQ1)oU_EXJ&AwU|L1-er zWWJv)*g6ffWq=8nevWUl{R;+`e=VFjD*5(xfLj!2dx11nIJ#+#y(rVM-wpdOy(fE% z(}UPVRvO}~F|vP{d4-+*)jX1Xpke@h&T7@Uw0BoUm6eCgWT8CU=IcfOfQXU|mTPf> z-ZW^P#(l>-CYE!`<_KG-8*p+a+;V!}{_740p?>$Ym#1;qtsnS;(EGvN;EmfB{F$8E zOE+%D$MdbjJ2(H7;P}pDvA!}7#!Gs4VdvK!Oiz|ovFk0i5U^mScaFADj5qfJS@{69 z(_6NRlCE1NzNzlDUE6H7v2;eUfo!jt&VLoIrJH;P-P~UW8<5FRw;he+LjEdu+xrj70z41G^rADMc$s=~ZH=zKaTymfV= zlpB|oQ9=xrs#3VC{De3Z!fzdEv2sYR=XNYnkOWOv%K(cVi`OMaGe_cF>ZutnR&=FT zJn}EG(tm>M8LC$h?4gI^r|;UilvA(|!Rg-%u_Dtj$q+-RP9i3=g<1$r#+W~JT$gP9 z81@a<3HDkFntqt;<8n%rTnrFiUz1hPs8JNcByO+(45lBeq~r{;*j`V8*%dg%9YIsT zUfmxG7>#9TygUzY*832~v}X3Mb^AYE2{Ewpa`r>mj-*YVt$ z(GY4MgJpUK;is@*7O%@|vJBr_uvZ(wcXAsHt0(Ukyw5|VWfgku|F7jhwp^bco>U=M zF1~h6wY{#;2MxZry=-VO!b4Vug3}qiUuLblbMJs0~H)+!3mZDf1G=~&r zMy2yvPY0;we;uaU6sRaSvGUYe$0{Caty0xarj@LE&Ojh)^NjFd^LZ$%m*{jOeJ-}f z@QYCJPtNM)n-7#T-ntyU4$HvG9)B2O@#+6OW|kcr34H2C zcGIrb-;HW{jnGLs*3F^!Gg%ZzYD|$D7^4yFCW<9&W9c~QgHDQ*jv(C*XJjp5>0Y{h z&qzUBDDJ-zc7l;??z54mZR1JZ40F{s(}5@noE8&tGE_YuiA|cP;+%nfdPa7O6q|$_ z1iRP>V`~fb`^fwFl7}&fzEXiQ0`zQ{3C06y@Nx?&K@+V5#A{TdnfAgQ(svwso*>lw8%A;g``;%RG=kJen-6&dXw*mW z3x8mNaU)d??Uk^ON2@|JsfP0pEHI9SX#5F6)b;H5#DBv{r)DH)lLk<#a~HTDc!mIC z!hiLMT~7;3672^4L>(m9P{?Zu*7pfcUc*7$<;lX z1h81XD}eRv_*OSK3T|FL7DIKR2MOj~VjQ*I-i!3+LVW%D^5x%`L|C1b`H~9XT zY627f30ZW)qq3^H0ru|QTbrhne^r{YW#vxAa$Y8^ZR_L|tWYT@dIwg}Rn!%WCn|Bj z*VQSCDG>%W3L1+~8|q{y219LNn&x(AXUBACBxio63&OSZ6h(PRpP{_1VLTy&?Mo?j zK~aKpA3_ zE@4wDH-Uz82{33hv(EQAAWwT2-=Nsfq`3{y*0&M*K*82_yJ}z!V9Wfj=b)@(-@5a$-$yq5MyP47!U*%t;f9-0aUnOt#y%|5)zrtD$jEDE+9Z6>7Izz}} zSs!$FP-I%+79;P%JdPhNG~h);Qd9dm)55xtpCJx48xVp~X{466mXyCm}URem6%wvl->zs63VRxyqfqkI+oYz93 zMoT4~Z)^`)3PNuAz>R&*H3HD|=j*=t<|0XYbmM6pXA-#&oN;JV_lhMw(L5Vw%Fc^2 z{k(79pFGE;!&aGo-gkE*&oSw{!ohhJ&-YmV>{cNzFozr~oh--9NWGvw_a@?gtHNXU zEsP-XGx(0zbhNGDWq zpF$QEVL|V2fBm(eFXhdCOt$cvl&?CsW$8Ctwshvb&NQwcoVt5=p+UX&{OcU3xtCU# zIrq`e>UZEG@!|lOc9$GLu^P#CtiZW=Un<{*?8`x~Ru|wrY<4CYVr5f*r6i(uFXd0O zpSRndMCPS31xdW^)!mrcltM5E^qP9L{M3z)@a^08=r?`W+t0rpLx@5jLvXexLdPtU zk+FHv5<>3VJM&7Z-KcOj?pRAmjQ10gE-lN4kY|jnl^8+}SxLq}oor%gD{;<+O;^}g zF7%p5*=~?E$XD0je)F}iveaLKcDNYJJ_#D>wmOj}JDNU&qUJk70WhnG5cSdL?fNB? zur%^Vc3ZzGjE{wo@L3t;=E_qm`I?>IA0(sWLTZ#a*JK!Wb8ds_>Tq^-*3-jJ7qBmG zUTxD6ZPJvXpn9_Zp&27jxN;oOx)eIyW&?>~btvWjIPTELUeJEHV8@UTUDA{PiF`}u zkI6Y%BM-&0>-QM*vCd6_7^ahmC4)q4l@}{*HzG7^jWjA!d;b@KO6wz{{R9zfJT);9 zwob91W?p(`5WT^7Ztw769~XE6uaU$fUyZ7l&%V}exE1fx}PS)LjpQP`QHGK>GmOwJL)YpZ%>pOud1P2x3xH?(xTLs74 z-w7vNdN#Sme{geFae_Gl$gjE?=k*P}^QhkyTaQAn^Q#J=+ON>5zsO>k_*lDel!)4#2<<*8Pu_#;zvK2ww%6B_^~f+;_?jRNC6ht?ya`4bG-n2Cxu3mI=dcPPxT zy|&Kp)ex2g3G|#XaD{#ALT|%A#stIYT3m7-!lP{Y;$*-!>+j33i5QCt16AA=RuTW0 zU1sye;0Iil)%Wu)xtn#xtC;VmLm?aa@}h4Rxbt`62WK5%z=CUIv$Dc~ofUVWXM9$W zH5b+bd-GQM(;9ZR&pKdYzVHCvovt3;VVnw7XE5XuZVV9nV;_sz=ctt-}o7;Hx9 zr`ygR9V<2^E9*E^;tRgv6t-dzJ4@gYp2a3i(_p%sdf|h5a0v9QnC}UT85a8x$gjkD zeV^l`uiUKI1Sc_iC7ftC#y}7{hPA+p_3e8Na>#-p)FnA9{!p(&ht6f;v^yUeV>Ft~ zA@$C{&$+J|B}!DiL+@HvTn|zEr`FHT+hbFESr|<}{P4r$7e34_NKc12+TtQ)13%6M zvc2iaqSU2Uwrl3wtYPFAJBA9Zy$oyW;lyMC2CNNotPMT)lAICgxxqG<;6zOiw_hl7 zqcuGIHaC<)Vv9(QmH#ADs`rD65Ypck7W#lLs3YWge|y!f9du<;cX#sS$=|S=d9;*i zIG1OQHLms>*OXB#pk|~BU2D{+9D|`*PQ?em{m249RqFub8iiQI5;`=h`)MotD-p$trnh*E3_3E%02lHilL733IkTM@&(v!2gg`{++ z;|^sKFqz6?pAkoU%Bc#)o#r#~xp*wJQ*$??%k(q2I$4T1scjP7Hmit5_~)sj+w zrW1T@scnz2&+zeMbZ5e~g{Rrt_64`-v%OD{0h~?P0c7gb&Ut_vi@79NBx7whP4J&$ zae}z$R$bd%r;FLHxAANnPiNG8{I2eO0k1_4JX^kO+45(^5zarMs7R!eloU8;#(VXv znU!5<8tY?ek%T757EOTe$%oQb+UTs`q#3yNq^PQ^iWkZFK~u|7+18uxjaBS}-%jEP zvpJ%PkHRGiHD44IJ*%Pb4u!LR60d}H5r^nZl^-zok*gbq@t)plo6#$tuf64~r0+eS z@9JnR9Kmldc@r01O>HUApe*+X|J}}KxZ2+jXQ$oJ8U?0JN zH58u_x2B97IdXnH+wK^*Y16D0Ej%>w@%jl17H!=-o+RsD+qEu9D`{go8Qz5SmSajA z88(b0${_TJO#>t60_#JPd>L7jDE5RbHYwIuoydo;2fM(030W`87Qm!waD^3zw$LwZ z^i1lP)#FN-)C=kR2{B;Oce0ZKtPsZH2RyqLJFc;Vr#|Dce)I(R0REp`V9@P0 zloK~d*qCI9L2#a3iqel`8RS6aPs7i9iY_n4vtH9Q2Rs9=z_v)|Y!wlJ-oAhL#|91j zHlMYFmE(@k7tDRL;4s_oF|CCZ|NY$0L2zYVcLMd648zu)!FV+fngej#OYOPLRD}4dXsu6>At_JsbZ(@5-?44H0tm zVC8jc8w?U8Zq_OG`rA%~ezr|k)MWZ+zKPmpc3~BqlxNhD{9epQ+9LK*+>!d&`T@6K zs17UxuVZCc{coOHBFSp2)cK*u*`^5{I%5;3d7kA6e`+6!+}4CNH{~~q66J(>Lwxf1i}U=;SN~y8YqHbJ@@d# zn`;YhJZJw^B9J^F}3@@y=rd_9!A{oI}It0gx%Sf-%wcA9y*cTNACXLf0XTPp> zu?yHj{;XNgCb%f>&eHqKxZ#A9s~z|p zVzZy&Q=)Jj$x=uPw1EWWU8iHwcNR8YMTmWz1XR5|QO@%uIGfF;#%M?6JB|gAOlSuQ zUA8c?PY3`LdXQGjuu1$`rWU~|q7{BldK^VZ9T`6I&O%E|GtAg1yP8 zgD>sXXX^aBRvJTH6#)GJQCs%_gk~>J<=1u zt6ujTbyPsdeb&Pmg6eGV9*E@f{wj%r&*wGQ6|C2fapI}77$;8=JWiWoj}Z5ckO}LU z@Kp6vRw^EN)je5yb&7@yNhfzudQ;1rvs zJLevMpq!(97>t{ZpZZfqm8@WfPl+apII(rvvO{C;GGAg%?mhaUg6Wk42o^5QxQQ2i zFD@o+!MqxblI6;^Je=^YsFUZ>)T2Q^@QWL=CdGdeTG}9;+w$dtW#;~jltq(?SbtJ7}L;cfgew6<_ra1zf;x# z3;))|Ab-X<(I7ZaSB#a9Ii60w0V6H4%4Q+h@IOEor9uo4{ z{BAHp4PdTZ4~AnB!w89yB>}K-UsIIvg~Q_hLJY?wGUQk{48!@>X|ARgf|?Bpu+Ua7 z#bl$;{|Y-`HDvKqz5W*3>a7IXImgPd`Ufe}xFGba3(RWdMfZ;%FH3=^Z`6GWmUr_* zszZlC!t}D|ShJ_faD6)|{ANbr@BpL5uMcKhHOrqi=MVV=mjBf;-QzYovRb@sx zx#l-8yCu%*BE-kDbixas{4`+IF){jm*$aV!8InfH%;ur+$ zd1ns}kQA@)Ji>n!W~Fs1&tZH~@_?fEaf0j{(C{%HtefDjc@N+}C4r$f___=#9)s6& zmJHGt-zwN(_@)L1!}R3YfK$U@Vq$`=*$?B4@T$bEULB;N!gigq7J}oifo9?<|ju5g{)<-*vJQVaQYMLXjb=FP%AGqezp|skE5t`zJs$)1+7rHX zQ3HAYxDxU|E7lvGoN+!&VSCn$n2lO?bmH3v_1c5n+c)nvbJe{W-2~lZqhX8ZX!uuB z)>PxOs@l>Xttz%^)oKe?Hc9K5XB4G7ujr&#LVfs45mo}W5_jOSA_&n49q%Q6Yhg3% z4MHVgwt#eWm4NQ=L@QaB%pN07tnMC+zmp{}Pp<%``yjT!eW5igI_~-o2N=_cxP{Le;;c z_m&DMDKpDjOj2)-qC=-21njae6A@18MI{R#+(#UN$M-XFHq!(@&gyALlIheexjctE|Jx+rFNU5m=M z81LH#ZHxQ%2GUPy_)@{jbZ>)`1+DR>{>wPNcnioeaF;*ez~%Va+zg!5zCCnBCtd#7 z;{(eR+=3nrLB}iJ*#y1I7$3E^=31`a<2*jS{-QI%i|TQ9Usba37Y`t(j*JkDH~ODa ziw~^q*Pd`Qi*g5~Dw(Ujy}jo?RjycW07%q>BMwe!gH5Gob906lDoSKArxnkeN)OW@ zLX8*qGs%*Vo>VX?&KD+`jzh&(%I9^XAucg<<6|y3G}M9FBw7S!;e+lLl6v3&X?JvV z%&+Z=UdO9A2*H61&N3PQ%wapQlDuHSI#q!G)LkLB>Qt?&-YCbd(ySuPj@N8PZNSPJ z7CWM0XTC3pK1<7*%HHBGs#8-2UtU{7NVin`v~kOH)+>DV>DsL;odkKZt1S~o(xb1m zzmXg`3pDf<#)RoZ^xvQ#Cw06t^#xfz{xqD(4MEOhtq3*`hVoaBtujSt(xa@L4i4wC zNWxZG*bI>#lVu2kJPlFTgX5=|YLfp3b5%2>jBEFqdXO?kk4{U~Z9;Aw*Ztbn)Pq3@ zLr%j?+J5+$sfXy{T$ViSdV*NOp!sj+Asap%Bc}eH?5bT&IeNgBcIUL;<6LSXe$FGo zg7{Zcje3{Pct#hyj+U&K;kWUS2g!mDX59`KFJ6p=LMEyqm&&2PCn`$nlP6CXrrJ8x zf2RdjFRJjna-}@02-tlebyV0Ftg=nn`GA$CSnf%RlFoLX=K4NfQGS6I^GvWko3#l? zc5YFWgvC806eWNy1F2xH>EX0Y&X^{wyH%I~SV~9UqDBvecMap6BJll01%Eh4dDhns zc0Z;lX?_JDN_^c06*vgdUxaeQWe*>n(lpzkLPMKLeBU<3<|CASss#HS4W9*&O)vW| zijuq&@Yr?_rMlI z-Nn(UO&eNSyZuF|&p8U>XG2Bx=Q8zwQz&|2IA4QSP5ngo$HI8H$Sx`y`W&$2@2wpt zreN2Rv`Hgt;jRTNxR@zz^%dL+;2|r=;&;0TpoM0jHI5Jr175jJUvzEt}Kz=s9(~)3J&})O`X~c=nJXe^QT*!FRC$ zb>Ho3SpdG7lc0US%fuL8%@}49B!j&s*c|v|%$SfdW5Zl@}$bT^8!SJi=i8 z)G2#ObY*H*dqLJdZkL`->9^;M)9&-0eW6t=EayYh%d3=qu@lp#1Ey7?=LZ) zTT*i$tf|NLDp!wkK4@whqS%F|)oD);IOntasSy+EsXB$arpSMaH#*>WUWWlKL?ajL zn&0`aW5cW?EAQac4wfJuE;q-23an@MvpkQN8{`7!5OfDJJ^(vvyu!Dx|42@=YC52s!@$V@+My3~>a=;sRE19?oaZ$D?alnZd~9+|-+sJOR9mM4pJdKe>-fI)Kl`e_S+-HAZgQ$tZJP^)4-V^Z zZHtfASL)>}TC`}5jmll~lK@-tGFAL}_@L3GDaUQQn`1X_L4%@hBL0J|k1xk_Gz6i! zj%vDByDm3pg3gU7&SB=EsBftX{1)V!hL+MN%^9mYrDP(hv|&?|*tR;~G-nEEP)7AQuG#Dp|G zbV4}e7Q(BHsy`Aos`4IJ*0sK`d}A?XdYi;ThsZ*sWHABiYxo@RD8sT|KI-j+rLt1J z7HlykYs0RAoy2Tipla^qrl$uwT8VNh&q{#ELB7*b6@{Zez)cjXHGxw|2pP(?JXFbi zrvZ7giuqJHO*B10wbqLamW`oMT=RD}+orjCK*GQc9DcXG?WvfmLge8h>o-iZ-~5S& zEwV?lskUix)I>X!>wv1YU(~NLL4|^=h~huT0c(pc39}K+0X;Z7Naz52Qd5Y)E<&Nt zYD=J3ot^zd$5C0YTQ&Hi_L5}KSlszXwlZW0=8uk$yjgT##UBhg-qQ&$;8_M;=E*fl zXdrS3YojOagYBOdFC0i~1QqVwvp-TEnAU?Dg^MO&=jeqqPoK`j({mVcFg-b@M#E}R z=`KV?Zl!;23bQ`%yTXE86{_bVa{^poYjHU?5DT?XGFOa>RDO0|dZW-cA+P2u({nL( zj~t>&r~BZA02flplEJ!n3htE`oUki49Q)~FwrhBr*)ZV2@DQG3&}}k@6&^kMbG<5U z@WE4rE?H^S6Nxl+YhKjTY5HCgL;dbF?X;xlOUca;>7&18=ioIwSkDJCd>) zBvv1_zkk41D^W2*n;-lPc+(6K_GL;Pz-9_pYb0+<1|1t+?U%1$f+LN|p>a<1UHlGUItUYX|oK^wRe)pMd z)%Vu$rAx<5II?cz(*Cib9A=UQ(oUHKid$y_0F|XaUxbPXE3KXTAm-qbI6t?(sMciL{ zWU1s44J9dOB@p`hPz{Tj*WQ0y4%DHiBuo;T_lr>uFS#mgsZPdpW3eq*pa&;1RHij5 zk=`IRBsgtCpf^Z8{~=tkNdfFoN4FG%Qy_W@^`ZyS?FohTf==NCU&9ez0zKG^rgrT* zg3~5+SyvmR`6bEU={nd2<|4ciF7%eV&|B(aJm`q+><&G3u;-@eE;!-MS4_G84PS{P zy`{mNl^Ilj4bHU7|!`G%6@VL4FFJM7Rk74*D|Z_!HoTRU^} zdiigWTPkmE9~%byzI0Ww&m;TsdfV_Cwawc%8h5l~)q&M$H^FhX?$7NcZ1B=6Bz-%X z#jBwYU}u}Go!|Ri5gn{r<-70Rh0b3RUD&4QWNa0fbV7dV_#K(rBz#f^TBv?;}%%voFDu<$W7sdoL2#W8BY&e{Lx1 z#jG+9mYcwQh8RIxtu1ZA#x3Z(_p$wZ|Z^K37msN`HiU^naQ>)Bf~Ux|jC&aTY$&mbIr*6=2fTocC=#&?3?Q z>%2N~!W7bI_l-ItE+?SM{_J5%S;~fIeJg|7CrFF4Z0oa1$ke*X3r}?Es;wB;&D2gF zm@^>uu>Ia5HVA+w9k?WfUgTVQ8;2P zLKj9cY?T;IKKz2TLp@VIuwy$fic^T!s=irNTF1{?o zbP}Uu8ceLG#w@eRw)DeTQuI(PoSSmt)XuXSuuoZ2I#mRq{SuQDTd50jSHPZi;&?jg9w57Qy2Q(H zohRA8$iHjIp)`f96lm#vJ0exV@l)yxo_U{WAzX)|6uhn42%g+cxK`yZ$WU2AIg{#Z3fyx#El-si)^7M~Q6Lg^YoVXbk1PfRN zpE#6jOtPZH53eG-QG$?OvtR;Vze(UG|1oLOH`SYSt!iyDHJvUEI})54s%G>IKqz5r43;P&`vQ{ zHx?i56(z>dTUTj-3q&@dlKJEGh!LVPL@fRaapBlwd_?qpfINU>kKs>zZpKnr_CF|C zaJmlY#i*y`Oj43U$JzSS>0!_wz3A$Rz(IUAV`b2|t8l>cRqd1=2BwRIlh^to??HYH zpArzuE5Zj2dB8bGvu*MkV+*9s76lE0p$@^J)hY&Oj7*g2Erp?gSUgS`-cmSMhW?8j z9avc^KI2FokU1ib=O7pgfJ3?M`2k@J!iwK)yh#)q^4kLI8)PTUl!?ZQI4^~^UN~m+ znU1*I0pbeu#rRvWknM(WCS&<3=4yM8e~GkHpzwa2)rp!Hxq^rAB0GOzr1}nx5R}T@ot;m) zGa_tyJ)GE2g6%(@Sm8LqPOY%3CKOg)AvmS9%_i!Xd9_T#Ls;C0dmKk6;Tr>m`RQ>6 z5gzH&M8Qu%HEJ6eEcF|oLkb1)hju+a;4>qdG`*FliJ0(r(W>Cw; zSTOiUHH*yOIrTGH;bX+>#q<=LaStyHC|1ZG`-)4hz&w7aGdvh=%jydXz8D-Fy!U~k zbmKKID2G*RKFbt^AA}vz)meFNttdN%6PT&Bi`cP@x9X%luPb=61OuDW3AccyG!W|* zJ*Oy-#Sr=$9tz3Fu!IRg8`hu@)?vlqew-BG(E4wWeZ=t^#vm(N#pKNpWC^LIEx?NP-v! zJ?exYO?L=@0=p0%sE8F+EC8^k0!3h}P5{vbuhfBIfeVnOKp^{?MRTA=lR2xXJJ$Cz zu1b;XH+36sb>?_V&5iry{y@khN&N&hAkNLW1ve)9 z8gf#=)>vam>YFm~69NNg66ciwyMX0=>n%}vje<$c1vnuuY+^00R}G9UGg5D_7FEt9 zBsJ)pZ;p`7_Fw~2cF@{m_WjZFWd}h-+~5YioYx$`+Ks|7-|p^xb`xQbSY3z?IAQ-D z91sicTtksb*k7NJt-^|(Q2fPX*1AjL#7%1NK-y=zi+dfk6pn>X7H}}|Z*v2)a8R|p zAL1~()!eu7BanXsWBd40Z5&B^*a7>BH(50%YYgQ9Hi^UXuEVob)+ctXKF(~VV%P21 zV0=`Cy2HjfU09pl2x+Zy@~0BQ#S^AWX`IiX(aF`!b*$t?Y^&{uIQ6!`o;X}lfNpD8 zjR!bGi>@U)n$1ekgB@kzYTf{hKg?DA0m0|AQ4gy?p4~VDQti0c(aLrDwS&u!dkG-e zLgVLs6gyjk%KWEPh z;rfqMN&lNkZE~P2QH7zKaset~b+El7%rSTYve zpi}7;Q3)14N=WG6;I0#rb$vgJ6)06I8|4&B*;cBQutkkfGqR3VvQR~nXId!E`)n1* zu#nHXS_sbjkFk}UAqzRpMLaEH|90;iH)qXGj~@FBW`de zh^+Qa4=F5ZNHU&6cS)M9F65M`4OMbR*d+2tkW^<8=;i-MOJ5U#%^?XHuhK=D9E6Y0 z{YoYXk&IHCBt_^kjo_x47=)&(b%UjDkJ{FoVZm}nlh`64*$ob9Tm&WPP;%6$;N${n zfC`_7^Bd{xlFJr7z{bJE-ThEqr*CbyEEa>d6tpf>Xi_}6Y*xcSPg&MBm4xO(zVoB9 zh@&)UJ6*P(5N)WmWj%QUu_2e$Ep8346GX%5u9fEMZYW2miAx9xoY*_3uoa{md3_b+ zz=S|qbpoLs>;^|x?f0Hv=^OwUCVWck&lQTZy}5w3W2_ z8>BoISCm0$EB?_cYW0_hbPTuBR)2LYU#33|vsFQhUe5F8CQlZ&>dglesd=7G|C_L{ zb^H7^`)JuIlf2~1MCUKppzqud%9Rr|oeCeIO=WOl3tJdvqciQWspx?g{gy3DfadhF z@=S*GOqr>zkxIj7GY-F;D3ngZS0OLl!@wquekNi))Ry(PgujqfQz5So8dT5T&Gzt&V^+uCq6 zb8j6hIrDGbt6f(nRdF)h7Ly1Lb5`|Xmn;%noyFcuItV^?pnZ1xiG*RpEfK||> zjNhC~F}bt&(E0NZNYWjHt9u4HYhUKNARU2g_9E1cA=bCw0)uxLu{UOPiD9I(?zLU} zxoBOu9h6Nt0yF;Msj?dhixFc}xAkHQCriL3#;1^Lb6~;WYxh6O0eXSN(&vO+ z4~|rkmg8{XNEgEh=Q)uj{i;AL+0QIn8mi`g^!7qAf2zA9L zrQb#SfiZ?29He3%WMgoho|!YGU0uBB|3%uZ^Q1|KCruL7LOh)9xNyN>R}p9({yKa% zA@}SVn){0{7Q+)vh_M=zOL(qXgdCx5S)0q*a5qU2&ZRB!?jDjluDMME7(N>bxjR^d zpbGa0iSOj^zYzL(XZW*;oUS)g)$2p1nmzEo%6zt;x-jx+hPAQkTaUV`YJlF*+axP@ zkyjjfTNo|Mj3Umjnq8vvGl@;#vk_Tjji52tap;_<5aX5HM?3$BpPxK|0lC{J`W5!z z!ttdkyg%);+=4cxuOnv23*SDk5>4*@$lh`z3)E@w8Pg2f>QNV+;jFV(p6<^DwSw;= zaHh13EW8)XD^=TFV!!Eu@Yib3<$5cy91F%tEqGf_`u#Y(R|3_F!*_~FFqm{IQ)?BA zPjVfxx{;P~7`M?0_F6X{LdKTyR{uWJv1~% z$v8W%hR7~_mEIb@9A|u8W6i zJ$Q?xoUHs9|B;(FRGC44^RSjkkFk2~ha)FUgLVIJpmi9Bs;<$3Kxd?Nz{E^zk2nzE9$T#=EqauV5XGn;vYSVIizDV z)T5RtKm5wom@GX1%1`BV40WFta3DH*K;OP4P>#2H_I;UW(HUv}&w4z6ed>t662DIr zi{s=;Z_k2_MYZAVr_@qeq=iZlVi{0iMM{uI(oXFX#NN57YrDd7&Q7bO%kfvY1M=?8 z7KEf7+dcjx(U?YWLN55VT1Ph7dj(LwF=L=3A@@2GA}z9Wg^?M2R1CT$iJ)WKLf4QG z=?tKWgh*N+71t=_YA)8GyITBt{+teTSo!+d&g8(rz(cUx|Drc-Nodf#@5cN0SG?yY ztMIYGyiAmL+qS-K#br)~J&F>hoZ0iIppr}%i%^H}`q^?L1EK ziI=~pEVL==jFF1+h3@CCZ52g2=nb2o&Ew^D+J#<0NT)p&nqr8eY|u^cR|kI5nCEG9 z+nYGb`PeqG-D=O)~M00Zp{{O~rlKhGm3SE8Yshh)5ACz+b%|`NvE*fkE-j2j-&0jJ zC%!7oFWv5oa4jC)-$NEpKSKJ+u+q;+mh|ELis0rl#lD0bm0@|afYUA*8YxffK!5Vo|bg;eVkg4{tcRAg$8L;`o~X-_3zsqvwMQx=0)s%@YcpMre~? zckyLd%Q=svQ@3{J%wT++wpxX*KRzJjQ|3-=)IfNd#TnAteEz%GR+8)L4e=~N(?Uao zZTraTTIk($IW`Hem(_4eJybdxHaO2uIGW>_iowQtW>dDEJk90-f~~HsB_7Rs8>B?>*pqy8i$1V1 zDOK{Js9g%5+?*XxY;y=MmH=_Wdh6*puD=*p?#-QfCpGQ9aJobLc{rbgQ|P8m`yVW z?7DM?N1yh==*~&b@K#i=e4uf8n>%?S6{8LRN1PoDsWK7 zW^uY|?1x|IUJ)U<9da~OTz)o>SMY+);_%>&k+qk~#Vd4`X+J$u#?HriLvZyqc2M7rxVENeCo!eN$*atR8A=X~YS9I&x&sP$!KH?Qcx zagc<9aKI~%f!>h<4UU3k9xFaCONmPbXgH4{v{C&c*y>i3EWbb}s!%THLWM2LYovcb3; zS~?J2Zyf2xglA%1{)gC|%H_coEt~0}6MWo2T~D4I)V}>A zvX{jS{~RtZ1_Wz|*)*7#cQ%+Q^@h@N;G>7!I%y+o;N-1O3=cy<9Wat%8Qx9oM3#X- z(pm+^E-D&HXSA^(`tU;$;uyEx$XAk!Yo(wt24EfT;ijDS7c@^;UaBa_V^V??&8d#|tiB@Ysm_y|d18D@QenJiEv(82uNyMu*5Hw$oCoapPt%@w+*eI1X$!B1N?e z?9kSU6PU7z-Za66C6m}~Uw14tl4Oo5#E$r+O`z@B{I^pCUxYf1=(789Hl_k=WJvEB_ZuwJO=i4%sln<|bA3Qz~awg{qv zkoPZ&a(PxBA@+tT&4GL#9^yu?$Ec-Y82?KE=C1b$ny28ltQ_>QrTGG3@S_f=Qa2m!zNFQHq#LYIsv!nVPvjXe4D=g(_3_J+3PK-s3Z&7aG{r{q^z!h^n4scf)( z3*>rDv$DlPn=(;wdJ8?x%DO9t&^ery#Wld3vJ@*K)*JB>XH78PXuHe;?06=L37VgU z=h~$WU*r2ytY~~zR)xGo^hTmV%Hf zEb(`$!NZ}OaI(A{#(QKH(@-C$qL;sekEuT>mh*hymCD z4r-RTnz4qELj6!VHu6pZe?K7nLYY*nppP2y9zsPwE#*thoHGK{L+ar$SO(F5R~1DQK|cER5F$(nucg<+>t`=;g0y-2-`3UwRAWK!%NfvuR@WAU zGGL+ou%;m9*|Si%g4#GG#;Jc_iC*4~PU$w8`WVO96|tW&yj}_`OKl;Zs%Lty%2#Kj zZ}9JuY5*=DzYtx*v|^|7T{PQYCemx1&$w}c5lZqipK(mFJz2e#TRrNT;QO|Bxac!2 zU!3_9X4->V*qLYe!nSR{Uzly{S0_5LSzl(Ob+o7N|62&Ws6*?vuwG7JcY7e3JQ% z=InS~l}_5w(G+)5^U0lQC$DdqCYT(7b0#->atcmHiL)eSOKS<5v*f<Vg3|Wu#l* z(e<67+8PV6xo3Gu8l}6cZOHMFccU~RA z9dqq@Q+=~Z7F;jDmUq4?^lWJnZ<5Tu-f@Hk4X9TH?z-i%1!)V^e&*W|B#kW&b2`UX zJ}1Q55w=FTXaFIds9la^G2i#U!8>QG% z(h0C)wMz*k?j3?RvqBKtVWE;!GQp(lb|S)lCOuJwi%?Ylz}t)=@1Sku%oeghfCad9 zeDzC#Uqok%#9Ya>nJgGhe&N;7W%A88n2?uj?MFq&WjTI$P8{N2VlikD$rW;_&eA(G z3JOAd!}^ms(AbYeY!rU-g|{T9?>c4<>01IQdMRyFP1G3=u<&$p0;a>F8*yEoVLm+` zpQj$jQ^9JadUyk@=lGG(i7D1mti(o4wy*&B%g3GTdorb;_&C*ucgUr}NQ|MpZ@Htw zWRSq7#_CJ-dWjdADaYKd$+437zB_LWP5U>jI%$Q63LuyOxjJ*qJuHHd4|&uV?#dEk z#RKr7SlMQ$YOe@>W*^fqjWi%}!uP?Hcx@?HXqu8c;>9QZ)t1dVzC#STk^JQHN*exZvqCv^<>zp*BxVjoW4lddd+nJwB8kI0WU9% z20aj!$W-3r^91}z+BK{*2cNDeF^dZIRm6q4s*n--wnWioCrlwquq}`dQE32^+6y7q z)^!l*xpj}Cna0PZe7;ZNm>qCq`NmYQC$Kj>GE#UqHOzNn|3zQOD|kU9ULTgrsA#(R zYJDX>(@M`*VsG?Wy5~lE>SrEIibE7XZSZ0Ik;B97*nGT`mDUC3XGS?YxH`vp!U7Ne zCv~Dz=_Z*<_3H6aglmBk6u0kV6y^RZ!<0$fRPHKa8#ZhVxXCx7*TUYv`XE~6amt6L zhDNQ$jy@{YJ>n0xG(Tos`Fl*;3TRPo^Xj^@IaliX3$|fb(94_HDJqERUPP=yP#=a6_RR?KHJ;oZ+R>EVzV?{Y2`?ai+e^uIJ$`r>;@tauq z3>_8ME{$fRzd;-M7PWWLF6H{LUFph2LF1<2Ia)l9OjR1O24SJ+S+(e#CBnewMbPLc z!P2}@{sTg+Uz&2^N7#lc2oIruYoq=m?9*%NZp$%zG|{MZHSL>o^4J)<9qkHMEURpF zp)XSuCAojmx095ST)qS<%8daa2>HTgXrOXe`yys3v7K~d&S#(!>szBn4QTs4Q(_z2 z!6{J?6-C*&VZ%#)i(}alGhf0!MO8vHukSW#@}7f$iZFXHZ+!oq9LPI8-4Q4%m!YNa zLn~wYa`UbY9LLfxD)Uz!LG4rVOE32z<}5u`uwf7mtbv+|_Wcw~!HLa~5Nilif1^QP zpjYr1tb=k6(~gZ^F}-o2Lc4In^q`bvPaUL7x?+~LQ@z`0c=em>5c&e+y?U!`8*}!4kse+~ zYi^sYD*%?Z;W~yrme?l0`w8@Hsk5nWJ1T6PsxsTw*+lT)EBtzI zO&CHGtoK&28qtc{!)L5E^!4@K1+&a_H8ta=frk1|T}^ETyAsfF{tN6=pv7 zpJ+N*S-m$I!GhIKWp`f6d_{lwsy1l4n3;T-^|;cC1C zR_ecT|BE@`bIn<9R+`5SrR0lI+NdFw4L5cs=ppyir?<*%`_fBiI-jF;Y&PCg#f}vZ zCZjaYcET<_pF-|yQ(qtYv&Zau9M#VU9tpRW+D#5KPI`jlix@0~gweiD>rdywG+36c zg9vv}1V4F}n5e)&Cb;Dmqb2BF3gBKPB)~C{#NKN@0i2ghmO#s9F;MpK3iyowR2%qg z$YG}aDS*8)y*3JLrgXG%Ob=l9O`o0mvlwj8U1PUo`rLoNESp|2h5pXe`$_WNkq;Ru zNm|YKCUdu=Yoc|BB#==2Or)3hEFt@^6A_kcFNtX4(n=9wACMT@NzZ)7SJduj6m=pX zUa&QOrt{8H(Uy8YGER+Pea8+qqHWW0XO+hvQGotUu4&=|>>~L_!=~^r(=FnmVe|QT z8pk?hzNo4RnSXVxcGiz3(@9Muvw&*&WqKArUiW@#X4OW&C6QoJ&*_uQSeV(~Y1C0R z%d_X5o>!Y4E3irYQ$6MUV0~+-XniZJ4OQ2^I=CgQu*lQ7G_(h-DrIvn)L6sWgI$d3 z<*+Q%WX8CAIQ%qAJ&eV(hUIb^R?gorZ9p)aK|26mp`mO|MMdaxSRdW6MTe5*AlVWK z7OBFbUq;^WLcTboYOoB#5$X`dk>ar07qX2>wNsJiOAm)=F)E~wMx=*0I-zRkN1Tju z4u2Y$HOrl$!NUvU=?94vWg0}4z7$JL>DP^#1bccn+gc1p3a7tXH+AayD{cnELa2*3 z>m+ewB_L8Q;R7n@6JrtANiVEo^|RXP9P?>lZB3p|Ik7Gxo3&G@%~nxbnXYR%pZC3s zv|OC9M7YN8es~1*W`E@iUR3WcAwPW~Tt)D4YGgEihY3aVc1hY-x_;)ooFXum4tky- zB9rZ&l?CjbxaERE*_*0CrwR{JpSC~VkJUv7#i9?|*s7;#c$62!qifP}9z#uD;0x2v zke33RP!!BLkhETOsgS_XKaN$je*NXEHynjVG2==O^nV1+U2wl!kOJ>6SrV9<245I; z4%@*-{WT`uv7-kp*&}}WEP8+`;qwPW{ax`stk1K3faN-O*1nyl5TKv1Vdpk1on-js zwHP$W*4Lon{i)%#5`_{V8Ye37Eie!otVQ+;9i3ubK4-$?m$3-=%Z)5Odi3#F@}htM zR9Qm^bBk!jVMY`_W3eT~Xwz&Z2_pnML-2aKF zwV4I4pV52j?7LBm8s{0pVd&Yzd)vCv_i!eUmDNW_FQw>_vY6G#+&4CJJe}bduvaI! zXUW7x98YJoa=>7;#7#`#x+{j{#P1D~BPNdJSO#OFs0K99*OkcG=ot+5O@bPkchzB% z=YEv(8IPdKkCl)SMSCby1XwR6y(KJx4LDGQ2RCGnr_7`3gdGF>C#sBNa;$2k0IT$z z>J@*YD6<)Z2)!MbS^-spGb`iRku?zYR|3z(z%*ARr-o4H5IEN9<`67OAIf{|i&|)a zFzuSDy>iSmLunxhPi0k76l+~;69a6ZjbZTsCX6Q)`7f}Z7Be=o=)>EtHpYLzv+dM( zJ;m)=xF5Vups++=evzm;z96>U_Ex)ngUok@Ek7Cfy#yc*D*h!snhxJ+@@n_`qHJ>;VRQl z;kj(-``5Ak#O)l#3_&<~Lv)I;ir0IL6W=!_tyIm&3YHbGAHrIX%2r{M_PnVm>s?I0 zmAb1aEBM}+CIM+1WtBDQs!$nArUQx}gw<9JO;IbgS5aQHw=zt+#S2AgZhEa$3;E?o z+2td}B!MB+eAK84)-e8-bjbsaC-!Jn6uHAc)|I3$>D?QXu5P@#aWOMa*jQ2EMYbwYs*qZdILs4-T?(B$fc$@2fg z;eaJBY$qxj)#zW0Q{vvAZ;K!G z^O8y~3H8tBjo@s(VW4Hl&QB;R$p?A_#`BP+Gpdy31%jWnqbqq}LgB=&KH4fLLn!!> zYtG6;4^h-Xn2DlbLQCpg)f&(BkIdjObG1{GMus_+2qwaL2Pak-xqWo*?gejtKp~j? zH1jHr3Ax7ARq7ERVSYDmq>_VdQ!#+N@~uy+u&$Y8o;@n)?XH!aoJHgmgPGnB$xo(- zp*qR2N})2W%&f;GL)5;>S#oI{^tgxH11Z($Uv1iqg>^F|`EUh0g!ZLp(kw}T^|&L0 zAoNL(U&8!<>D{m%hx{!WB|e_uAbZ5GINe2t4+^T}T+?1a>)`QL!8_NK?v}zc-xFj; zl{tWHtfY^)TP2#oDVKL7i?}eoZhLqyG$Pr#L8ZEV&Be27LMSmg53DxzLwh$C-5Ns98|ZQ#XPTPVti}Eh7IxDbmqaphyBZ@ zSi*VuMo3)*ug)bK)|+bW*^48aa9B@xcLUnEy0w8`BdZ7Jq28|OG{j(a;LS5CKERrq z;Z=N$@mizx3|Ji#n+p3FOws1}vZZ*r4Ck^MlAgD0X}4mv)du~*>nfWd$SZMIz ziMs|59xNR)rb2&fmvh%VVOdQRwVi|)>(uG@qenmFl2|=~q&y>;8JQ%jJp-1BAS5AR zNeR@9WU_-SwF#L|v$^Ipa)wbuwaLkRFjz7umb~IR)MLq4a8sy5F#NH zEu*Wt?Y9Ep^ojIo)xfa8g;O7J1aOP@!R8e|?wS_q2nx zNr?W9?INq~SPx>fGyctDzNCyUoG8T#jmmN`Hg&!CjuLW&8Aj_%&Q~m2vB{E4&|qSJ zBTqO;DMU@-#SVJF#xwsSifrp$&COuFeneL?N0z9r$yli&2I&r$Gh(O)XzgU*6-^X& z?MV0E41;|!+G-@uta~7l?k?&B10I}$li`cWPAR5D(>T)YmYfTsdy8NX6$#|NKNyk% z40afa1}kAtQgOO}2mW!Rm4V8WtDtqax5BT4hj_xjX{aIQ_Kd(DD6G(XC}6J;XR|8| zr^d8@H_(Bf@}K-v8b|t1G+#FjG~u5(cdD;G1Mw7>6kJ}tVf?@6fY;}nQh#R(EwGxm zp3j!Z40toxyAE=B-GU|Gi8(I|ltYKLPybUD;G)wZ6f=rMC}wqaUITSJZ^+L7xF$M6=u zhNl=Fh8Rk2F#QTcAn$GRiQ!?0Pstsb8XPllgpoGAKVwPH3J%*#cv#95v{PHiMmxjw zdBoxkrq52b!%3pvq$*S=b(3BA@8;_WM{B@1JH}t}&57GEy%3vD=NR}#rf1u>ZHLAI zc2v~sKtocXFjHEIa--HOI(sxBkDc_g}}Mul`)8+2{A-)lF0ku5}Tvd;+N9ZphF`)|Td{mv#&8ipfG=(jT+}K=ia%TmO-5$qK1nGpCH;ho3mK4Vr=$CTo~kg@58= ztc5E;Uy#KDuF7(GDcqf;Vr{UoRGwFV@g>jur*qtwg*&cv73PBHvkd>yPv|?tIrjrG z-JuW+ZdO1qMGXVA?0za;uNlaZ7TBst`M`pf=#Fa2Tg45In+ ztKY6Jjf#fK8`)KHcGw`p6idt^9axs(-;d>3@Sns+iPqZ~A^x3-C8V?#{qD`!WYo&Q zHC3KRh`sIrW-pwgiF@)Ly@h&bYyzIh+I&u&jfmZ(FN1xOb_pu(X=7qnj9pjz!7Q%L#kC4R3$VF2j^^t6+AMJ&KfE0r7xwXo8#=+Xemzm7-hQ{K&Vk%F#8(m zq6KfJ%3c*T7Y_!poQ*!osY@Hr!gpx1EZ@&q@LCL0Pr8IF3-LZfUMDuGlWA%Ax4kdf zo|0QIDG1xZ9UJp)I;xB7&q5djwk@eF`euR7)1Nsn!9Ko%FQ5%~tdq_&o)cjm+?RMp z86Qp!q3U<>?T2_vg7D_`eB&YhBxyLGbg-S{?TM*Icg6_IAl8u|B|jgC_~XFuCf6`z zZA9KddoS(nX=DAvJXM!Gwf9t=>CaiL@|k#?R)o)v3JVX?U+O+Lx|n-pSR$08&-eD{ z`}yBe6}*OPFM;{D29;k=9(=(Eq;ke)ehn|8&~=PBFNmHhIxRDSecN>t)ktbPoo1e; zo;$pYjy-oSo@^e#KxixW9&rH<8H~mFC5y#`6b;3*I+u6td>b>^XIYEm@4lnH(z_qOsLbxaQagf?=q zr@j7u;Ktowe;>vpmHKvUyP^dCOnLb)a9I6cel9?zUFSt`m~N#hnB0_K_t~Be;k44I z>Nb|{=?lACV(44LxtgP2VdaS0GvTl`Fy@%pfMctSHR@RNN@3wzbA5OcMDqt{8;&*L z^$@^iZY&!Wrc;A?P5{W{87k;|{nZ(tqcZtNGnjKz7Ly> zlvxZ01Ifyx;0KT~e0bC*9ovTAb`0~|qFkTvq}bs(4f8S!m75E9Fkv3TuE_M>1)@g)5Epw9Tt$`CvPaP zo`Gf9muYyvyCI0sv>@u{e^QHXOTZ7Uwb_((NFQ~P%f1T6@jWbBG!0+O|K-wiHP4uP z9^fe1jv(8KP6WZl*gshHs{7)IjT<)x0Tuz3)g>#2s;_{BV&KxpxmUWI@R1EesQ&}F zw|jC+hWp0*-^qdUseDlfx3#I|>f{7L8R-&!oZ3CNP+&a|@dd715G^WM_gN^dzqz+R(-GEo%?O(FK z9e?7~{bkgK?)=Hd_TGmgVc7Nh^nv}$*lMyUI!>E(YI1UazB|@rWan1z=R+Nt0bJcI zeU85`o!v#_&*ZR*+UW7b`cc{-lr45uSo^64#?P|bvHBKFwfg=^bm>QDrO9nT&P%hi zL?CG|RXj+JWrKxRl7R=a8G+9plV9w0ko+O*-J|Sn%4Y-qtlq+G(g*W(jb-^#Ib1)& zRv>ZQ5n!*QEiy3p^p3@ABU@yH<@|1n{NuD)dHp;^>(oSj_*cfo+xzRl$Il}JvsSWc z&a+spr|F;Q^_Er-$mLlC%#ep?x^`XhFaz(hnQZ|TxZe1H?b7?KX3xNS1ii%l6ysz| z8*MJ^&cL5Ig>%BP@I8j&JXp3pqp$JHT>?QJ^Mo69PMCuSZv|N}Xh~R4@rUqmn63wn zz!Mm0HSMx=5T?DJrEpDN$lquU1 z_KP^(!x^;xw7ROzPt)|{2dCe*vUU2yk3L%Yk*Dr^^Zb9$0nf;5QX^jG`^Cus){tX5 z8GsFwV#JZ1o=gpa&0aF_XN+4&u$s`mkw9n(yk`=uT4YSD4BMPECQX9XPZ|d0ywGMf ze_xsgAqH2cOEIe886nSWt$5g>(!?rk(k~s8U7q z98^-8pHj}*3SFm>wTjXSoq`2wywT?OmC%yt2O)NcMxzvbWrBV-ME}L9Fgkd{wHM!` z!#V1h&Lu9q5h`}-j-m|bup*!T*q~-jR3J`(>B9G=y8zY9siMoVPsq3tEKm0XR#~Un zXZc`mh@BPrOZW?g-;%W!n@8gvwoaoN;R1=N@3S?r6U}p$Kb&1x?1sZ_y-A%9PxpKB zn>m|Eia}7zvrj$*^ev8({XC7*@mNdXHgYftw)ridVrkB8YQ19b08sr~Po#%||e1HQ8$I4K2@s9G!Q98{GS|T%1hqP4s62 z7kQ->3+5$R2fK9X_T$qRB!eA-&pD-^CSGSkjC=XnZn|4dB4~AE3%DcgTLoRdWi~Ld2(b4`(}51MFI6&A<0MV zAO0Bc_%o6+ks*>9-qbHJtFFE1P`g?U=_ruthP78vk+LdcaXu!WHyIW72K#~eE8oKu#qOQ5sy|(8zLT1_+rsu5)5?$8x+NiJW2dvvL zI9p?YjbZVm5{1iUC)^}czTvPZ+@fN!Vk6(ne8sgAZ33@{rtp=FUpa%JdIW^<`3gh5PB7^RI z0P+(xLl7*c0)rJrTBsPzyZy+vzBI{VFtU^^Hi)K!MW%e$&A$f&SHFnM>)eka9^7}X zDK>y*hxU3#H;B+I>)4mcR;lIqg0$-PxnG)*{-=3cX2?5EQ^aT6saZ4yD+6SC_1D6L z=kuvi{~d=*lHjrnJ0c|5KSpC!RtG7&SA%0*P3kbJ{ z*D%U9Zq(~4UT5g7!tus@17+^8+>pKs+xNrmz&DIR3czgj(++&c2p-NsI$)^{D`sG` zoml|ZOIlX7T*8?j7;!;8F#b)ie!VYc#Sbtcgg(dkYi+{*vkaVW>vX_QCX9F0b9e8z zI~6~eW!0ke!Z_y-d&$`qvRjS3u1jTK14aS!&)+xT5vz*R#g2m7cyysoD58e}BH%vH*a@&>E=!@e!tjfYWSPY@r zcbrF(wcs(7-+kqec+Y~mf_Fk7{ZC@Ke*;6}p9xc(e+Ml>BZU|&LzZD((qBbRSs9;X zwsK4h&z05S86vpn2enIoLC2Sxq+c|}b?T&cM!ZO`((_m9yEaK+vxx%t1HqcbL}jyX z$#^zVl<4DMK2BBy7a+X@eQ;PO9+{rm$&fdQX8XdFC&#^Ri|!nPIg8rx3EdXh)b(#C zt1BpVukCp>t*y;(^&Aub4ywrQ{~xf8>NJZr2CqHs4sDEgSFC{f;=|3@Hjz5Ttku$7 z4eol8wlrdcHipcY(TK~X!_We=b}6g^aY`)LsL^qPN9!c_#ER(S(!_?OB}JW>HFFZz zIim33lh+lPFMj?BXOc49VZOM3u+mEiQf5op9RU=Rx9{Aq$gxRqf{!@7B1Ei@tmMUH6 z068TY>_cCYYbC@c>kSK7>mi2Fz&rgV2n<%f8Ysi+#~zfmW<9swkrt1mlY}FtG?bFR zpQVq2mGw?H_35tpEe}-g>#HHB#`2+lO1>_89p=X}&U4N3l1It@jD$7o{VKoBzo2j; z&OTQfK*tGsF#5B^3vyI_$vpY9hd+3J@j8?&#R~^5)WwbGqAJ}}HkD`_&zwl2;uVV) zsu>B_q;7O}ObjI_QFQZV^YT&_eB=LL%K^_RQ{V{DGwLtT8iiG#;7HPxQPkBj;p)w% zrAMz{PtSVP+(;996rUCaJ@dE5+*P4~6P8~0JdCv!;-wl*@4vcHDa(ip8U?3p7pQ9G zm^J~!=fkh=-aR&_$#hcH>7vruV$^pgwKbct z>CF2gqoy~-1{#NqP(jT#4!t?y^v~08k}VKb)_E-35FU^+tF5rqVuj!M{~I}wqt|S> zv>RFt>FF1~X0o*!On@dPF8xYWHdo#kQBP*R@>a|@Gc@615AZG7$I<|&abu0nAY69h zS+dZ+#No0LqykUyeVJNOm`Xl2>>VNOvKxv{oUln)hE$xre}5zv?8kGOsKakJ0jP>nNP1s#%#XkN0Z2$F0Yj7!cW3=I$VV_j5VkGVdax_Oz}rT zy6bYxvr2rzlPp8%F6}^X5)PdHo$WSI8s`m>0 z>$WGgwE+BF9cUST@G-wSI{kPNV56#(Xa4f{fmuLm}#W@ShB}4tZiLwA+w4qq=EBZrEbd*RoWvuj6Jb%f}1ng0<9T zUDlF}aLX&x3SXox!4iWf?7n#ylXP=C9zrYe#KL|19);URXa_0WumSQTNceGD7~DUy zx^K;r#8yF`#Hl3Z#;zvrG|cL@Gu(#2l>0(0y8yEvE6%%U2a>uS?OwyKl~PghZ& zxlSFi`E8!P*yC!!GCKw#(Xcuo+T&bq!{~Y7RIfeUAE78rLz2d2MR4!ZlPP9X z)6)lc2Me%nG`usg;se4P#pvZ21ast62P=u47!1xtOVqH$VH||eAPtj_^$AqouxJi^ z8Q+A>h^f0OYOKZl9*2iyu7-v1*be=;-f$k9L&m6j?$Kld8{Teb?bMuDPDIv(T%R}( ztZ2_;jmTpUDph11d08u;-RLUP(Jk+X1CM6WQu}*57EY31Qnu{e6BksuaAbh2O=#GD4T*Ad=FEw>-z$e8X(gc#K%J;_RU-~uB7o%uij=j2 zkW_Uo0gwMHnuLGCvw@TMn<#R%kO<1t7TO|*g>Q=|bXk&i6cK5?MX$@cQBwq=zBFkh z?)Z;t8^$h@XYn!W639m86EnqXPa+$oFLt3v*}S}WX=h06%7@Fb*@TP`YoRHbWII2i zOocza359{E+q^M3Ss^62qNu-8YK_C;m?9fIl*Hj5z;^rmF}yMJJq1ZEeF&3trxHkF zA08YC*AeDMmFoU*xs=v;HN z#5IYs=(%jfKWI?ipWs*wFYEckALECb{k%uW!)nl%F`IsMQl0&n##hNv_*|^#54XdC zs@m-2s1fkOw;}t?H)A6@VfCl>=ibBTt5fxo_^PEx(vAddBqVJj zMUcmF(nck;Kb}u9embqH=BbC{ED-D!ocg)ZTdF5Nn;7}TNv4{?+Kot?NtFk*H~c+_y=K?g+K{tsWPW zTE*(O(mDUgW{c^>Y_RUecV;!G(S=Efw2aSrk*IGruLYdn$X7x>Wsczo)(qKqW!FoC zgxfv&f!ols>1P;WiO%G#^!LrZgN&5+AKnTeKCH1feqj#09dn~g$7%}}^ew`_FwM0s z!cccy;B`m;p^#S-Cp{)v9e5Bm|KL3+^j6q!C$Y+Pj*w!XJ|O4vTV+kU{4?c39@A^1 zW->RgSi#@zx2sqow2B-whSzKWcnaJm5z>#vb1w;(g6}O+!lWQ-buPkLQLrI`zkD|5 zzh#3}S}N76wu4Bp3d>`mEm=zt3p6$vYVX9xBIxzu6}z3(P?nl)M6eolfI6~LJB#e# z)OsktQQlC(*F0~BkQo%)N1kyFbC`Hg8@l^Q2o5H%~^rODDxz!isX>ryjYP$b?3czr|F9%UZ)6rL;>(pI{0doj(NU@Je zS_hflDe_YKnw`qV<~Sl7vqR`RqI@h5@45^^r^2d9vA;jCRo=EiTMx_Ax0Uplf?s3N z6p$vqm47!4J6j!t4Voo35INSud4CYAL;dcLo>^M*j6_g2$EgMpK?lgGKbEXzEScUh ze;PX`>cOgpJ#NUaw#s>kj5b5JQ@QTQG58*i6tIh%z6vofi*CO~O3|3maHnL2N97EwG{(YOY#REg2d>hM&|4c}jMbt+2&K^@_H4ErD zr#)=uR8PrAax7mUiBnr*yc!&3M#6Im_>=`$A~&1kl>IN#kX_o7nn}X*P9x8YNHBDh zC_`n~xAMG}sl5JtUwqcr*SDdt^8mZ~k5-K4Sgr73AafaY#NF6F}pJgsyp<%;@9enAMb^7nD z?=(Xk9gbFWM9UYfM1MKe#A?JiHJ)zj+I5)SCMw^c!CflPu$|i9f@W9Kl9lR8!?H3= z+C9*LH;WCTKAlM*l2!0y~aNOd_y3CL64i1j~I^!7>aQps!?g0ASMJ0kEx- z;Ao?^j||Iy%{e_I5;!g^Kt#fSGu}hN;Szchww}veSU~r%&zdJPe_(lre`aRp_OXV~ zP5`EjG1=LguiQhT{2&Q)+kPc8^HY%)+-_I{u&v_GOp`T$Wr}MKR4E(mu0v5I;h{UA zC(9g)iNou@?FC>9gbAeiB1_*aMRCa9>+JF~JFMpUY<`C_!NFz3IsJzFr*fcF=d}(; zFQIB3*kOjTaN?~CY+B0-S)>lTGP?aEap)Z{SlG?KOnD>l4d`qao1XOvqlD0UoLM1P z!(U-F9ETN(!iSseqj5?9fYs|t*%;qGj!&`>qL>m?JO373l*3wHy0i%v{nWwHc{t3; zm~EK~XJw);$~qpXdHOb1+VCGpZDi0aaame-paMbDS!u)HIGg?78*ocQjv?}gVd07z zDwZ#3mNa#YnZKylZ9ZL-5wT1#+MM?iUNL_B_{CA79$e&SpZQ$nwXm$6a0-=IC!JXy*IN2NMG&ARZha30oseMH>2HhsNKTL!g-P9jhj zzz-Zxy>Vmw_z&NDtNJ;1o138yiz@;X`AOCQ-XX(k9m0obS_RJSK8}-3 z0$#&+*cRa=%|xpRhnBAvizU*)(`Hdf%C08d0IwIG@Y~IVv_Mf)s$e**V?Wx!V(AUZ z=0Kf#D;>;of%>hfP}QFD|;X#;S$Nq(yc{RXYnmlkf2!?)TP}cVfJ0ZhPHle-<44I16V52A&zy zK&0Pr(4gO7T@jYGrAjpHqr~O6o3!|Tq}NwV-12O&WGPl?qY^6li1LoL9cO3@b^*rY zZ4A{@aBTVU;}4~0O%|=iv8;1n9N^32K+MTFSvz;y3tq@qxC3xigPeql!b zFJ^~{mIv#y?lGNp()nC&=#5V<&0^^loSeN}m)fvd{H0d+Sakd8;f*1%`p)j&)oq>$ zumj-Bq0LmePIipuu_!;vgN2Fe)P@}&Og2{S6?nW`h8|xF?7D&A08}Q@8y`rrU#*;q^l0*nw8np z3ZXJD$k&?LlHZYeHV6(sizd&#1mvr>Cg>kizvZ$AD_(Cym$k{YWiT-B^$3$nqM z3on=3dxgF);wH-8q!MyWT@M~DY`*MGdk^$7F1f;A*6mF!0<4T*Sw8hwTt@$9DDtLM zhA=#;1$uuHTZ?T?R?V36?{fT(&2RO12@bH)@tQcv*+N&n9j`A<`@lf*$b z3uDnT>&bXuoW(SiG|_6w&5=h8-(gnKi_n^nlrOq(Mwf^j$e*z*YPA~5UrIqk{%5lbDWOXdA7 zt^v^Pups@tlIVv7*vnG7xc)31q{&~i944+~T3)s~?;!ljJlMScO^1^iIPpWR&ee6) zC!EhtaMp!NHm1{4?aOoFONBqXNcu0$>lZ5R$W;mp$}5Sx>kaaS1VT?pRx>f?`YB1X z^_DGSoe7bxtgn$w_DUjB6wWw%+hWB^&L){ttbPk!Fh;(D&W9wxFI#yL+miwHJln}( zIJ6^@q_(mc)5s|#vmB}g+jPiru1mdyY)3`m>h-1<`L!Mqq$?Us94jiM6K*gwj(k)v zja<%il&A+Z*}?>@7a@BN5b}wQPd(Gg!Mn8mlC^~I;<~}DLJ-RU(QptdKX84*VRXwKKI;`&0^wd*rT^lKbT zF49)G;Y!Vh9scq2KPZXbjV71ujhmha=gq4|`vLF7DzXy@8^>gRX&AE;4WgM-Z%o)D zG`u%gZ)mXltt{EpJnBV!O&fNqSjOeTc8=*glPqnKx6a&R%Gs&+(o+QOBu&PbEU^n) ze7=vRQ)4vwLgf&6qUS5Xcsvz%cAPUvAAi|0z!BiCND95@~trhY>}D|t>p0C z*SP@}5UKS7lWQI*&mVDK76pxjZvQP>Jg&pLS*-F?a#rOvC3{$GBF-G4VZ2_~hzXi_ zQyxPe&MX-#z^K+L_xp1{47vp#uC^Bc)uu@$eL^D^clD$cJ!^x;ncW4;CjkP{)a_5zNG2L8GIidg3Q@xlmD7|0xdpnuNNnu zhsOuse)sJu=lK<8;&Rtt9tK-_VA&|Q;H@G(jEp*poiSA?wH#P4uU+fEq}u@zcAy~@ z$^{0P;jT(^*J(|OMPQ%<72;gg@3E4wOjvz%+YE8><1~QLZ6#crfDdog(5O+PM~ym>3i_4pnuc#AU`q|3omc{xc-$aw zH#j(LjqoF^xem0>asyMaNTB--dfM7g_O3vIeZj%&gQIBrV%pguq#eZuX+PDLd*zGH zc@PXI5Os8y49MA2^1AuF7T_n2yT5)YNLL9s_%wL^>EMh&zCWF-SLxDFUKd$O_6amK zR*u8RrC6;vDOU4%Ru75ZySJ3?VyN(3B|`#Ly-0|1Z8G!1Yi8m}G#M2o#dXM@?%!IOwHs7?iF=nbz_r0(#7o0A|oTOx3;tL zX0ViF{Fb`-0*|1_8H@0&IN!ue<%w;ylSDhHN#GdVC!%LHcgXlnu_-qwWbX<#`p^r>j;g>iB^kH z;=uKyHDI&TIXEwN7SnUi@o$X7X2-=tN*7Xy&|~0&J_DWBRh!8*3>&Or3uYHE!a>#T&Tf_8c^*&R$wgl7lRE2O3S$gdF<) z_fNQ9>G?|=;o_(bxmX>|pYH;Zjby%efZ!Oh*1z`1H%Y&O2|^dUaqCJP;L-nFy!N$3HJnj7IT{EbDNNB z;-S^!J7d#Zk$PExlqT755j!d8pRu-NGKKzke!nn+F`H~>h(o?l8h47Pc zSpiwtj@6IKI@_;b{-&sXzuj4w>7;Jf22H`(6TIGL6226@M^Wfm)-McZcxPs1bum14 zBF`^bS$2-;^Mr($K0DP1V4m&N_3FTDm z5SP`~u)z=mva%{LEW-{&^^UZ^1baK{e8aP{S;o z92^|{lTUtLZ846iZxOYTi*cCEZ}nt{oz(SmG3{h9uvf*(%>3=Z@!$F|qc4kbc<#pg zpc9i0pUtgLtihp97zaY)E)U9y8ZF0RwXNV=>K4A4YSCKgEVHEQI8NGJJ%=WK1Sebd zP~GOH9T-@(VOEa-`?!lXGF&o_*K4cY85Cp>rn zXW-1|AcQ{FhRc@_3S4Q6O<#;peL$2i$zsQ|b~v66D6$P$8#p zN)w%zUhFnGR5v$@&1%i-b%`OJ5c){4?Gt1hr8PwE&&9`wl?d;M+LK%CV2KvOoOQX+ zk;;5%lrte>GTH7b#)`+2REZiwzmo*nyHWrq%w;x5lYn1jaal{+6_hLksS-~LxLp2S z7|%9jf6fB0rVFu^WM}oul9OgvlBdu-D=O3*0>9tA4{`~yihn%${4Y_I3uE`+V!BP- z=lH(AShO{*0Wz2diYD6r1%9+|-#%e8b0>Z_PHYfW3rndkfm{|#51BzQax+|_2G~R6 z$Ej1$F6E5}I2rH${4(;at=H+JAJoze2D31>eY$~8tT|L4H+%TlFn=8&+*6$VXr3){QUF z2E~9azp6HI%~K6dP=b>H^9rCkzr#WfoY+tRwS%Mg@S~A6UfuICHe1;&yz+k^s~j%3Sx1p$=deQ>&tJ09%g*MX#ad(&9-P}Gjpt$o4`j1g z_d{I7tDZoh=;_l%bh$TABL}`G=j%K|gW=;Zw(DZeP92Sf5 z2hK>fWAy;jOVrKG4xQ34$>qe#Lwm|;L3@ma9C2dRp%unrFFaLF-sL#GyA6Z+$4wgJ zJ5~*WO$}=pilgjm6nj8-xHSmH_t>sZ-6TwRxV;mG@3Rn$sVVsW(xu@znEn*3TT6f0 z^!pWAzUm(pgIAUnBL56#ulrv~6B!Y)a)^Ms~@@ zFkJ%oFxYeRO;H{BKdk**Gg=gsM^w- zwAKJe@RO~rTf17cmT7>BQS$cNCOGFgxHD70&3mqn0;WmMuIfJ4AFiMk7hPbkX*Sqz z_|ci8N>mNNkG{%p<(TwuI8{901|l1=vRv|sp}G*k04fdKK(_SyArU%8zHttBdozyu9Z5zfzP(RxN}sKS`p$ z8su5%nQq(=#YbbuzSyNG|MZm{vfoGLH@d*JHS`q%?jbLk_AWyHewsB;yp1*6fjrRO z+XJ{ai}fb{DyzVQ6Wr^2$f12CRmpr-t!?^CEi#Mom(>|?G!E|nPObGD0^o48&lzku zEdteY@a%hfYIG6TFUTKz4t~>N4}MQ)anEZ+j$O@0FE*_%XG>?q-q9)k89S5bIXT4> zxp7!SwnDP7e$((+A485KVkdJfgAtpJO+)CfLAbh2NOtH2hb>CE8>wT}^K4AjQ)ek1 zr-okh2Q21N3Ods`_3#&8Y&&U`grI4d9^FYAt+Dj~m*;*4P-D@LYKjI^=Rp z0#wKu35&fg?THXY2@2EdXiv)a@Fc>b5zM2oP6^rvwVcf}EH z+zBo~QnmjqHYppMo^acPJzp#l&E*TnHjCP{R0i60%DrDL(iXDbrWhq|tc77Ce|XdY zUXj<)RbQ(-`GspOsVSY9alEmsS4~l>`=vo6YB=sM!16r!HYchUWiND{a&uln_YTGv zZS%nz<{mT<2rt1kj0nw+r$Z&4_)Di5>mz6h_4O2;w_S(OZ@E$`u3%Nr=#ME@>LC_k z4ID!Xz5g)gT|(;u)=h&g7`uvzj>P)^$HnB}_nzqu@cEZn#Ng_Wm<90}GdP5sL zlFNnpR7d^KW1Cn#qPqK7qrlsMO5CLw*Tz0ZF=$Z%#@U=t z$i_OUG`JsFlL*of;78-RR4@p-P)ox&0fZXIL0BoXID;zV7KD{Li|YYVtn_^vM;u>G zph?5KH{cc7#}4O#EX5KkO(a;*^Qd&6?DH;t)IkIodOsn3b9@>}5e0~bs=sY7L0o{< z7TSEW1zKW_*NIzPatkp{fs%oJ1b1wGFAHv% z{B|g`nMBLfia!z7Dyq0Imafr4(bBuQAT%rs4PC`MWEkWnH^QLHHk9WH@|CX$L%s?- zP@r2x$RQ04q3H6a+&`Ks)vuqV)r)fNe{s&&mN}mt-{_pRo`Xl&5Y##C%*wr=P~Hq> zAu|R(JK8xe^Y)e7_952~FFbNW`NQtCwOK6rYL~OS;ePW~V;h7H#%pz3&bkj2_D9}} zN6?bG_I!M^rCke_D_qCHA@)bM}xdzCq-K#b+nyku7$H#kcPN96M?W-A=9}#9mri;Bpt13Y&@+k=K>B+lsQSZ z$5C5u$CZD#+aANN5*ddVckjMNQNn3_m>1aNC+ENwU{@^moMf+YKI6J~A^3&|k5SGT z1t+LgAP;v9ur?OCJCmN_}Ac&tVZCx#Q>XY~v}9~T2^Av}Ixg&Xa`3k^9t;eJ|K zBl@bT)LKQc3!A_c2R_eoG{M@^sm7~*zHbyBgxGbS)@nxssH_-D&mq(tXM?(i3 z22APymG*LCJScz**}s4Pf&Guy8#Pk7;CPv1+g@Cu063K$6#pigIr_DIt2Gpo;)@ioO7~ zJMm2~e?e?&TFvxR@rQBnJSaOF}xq>qT0yEV+B= zLm!dS--cJ^$*0n|c7oH{W$sKiSdbhm@W_Uhb+_0bL@d}c-{?ahn4lH=09y7W#jFP4 zAPZ+aJx(esm+d%5_8N-tMr&B@=j2Xa9=vBpI}O4y#fvdb?D*VVpMF z`h^YC!fr<#W2n#pvw`0JRX`ca%C(YgfF5qHuR`ENNT)kNepjj9gwStx6^VIAhv2*m zD>gVb;#~s*EOjvTf!@!LALFoZOb9TNd>Py$$Px1NjBU7}@)ep-n&a;z_+-Gzn3%x> z23(9&ze0;m3+eHdmO&QQ8&Z}7<(4c_*YhPUsm+R%z7LhI+7D2kvg7*WG`@=OV-!6s z7}wg^oAUhY7S&Kgy4t~qQAAC&>1=wOqj1C=p=uE@%gw4e{dA+;zlE6F8W{H%_XFHk z(KLvMaX+W&j~30kq17~viGo@asbPsX<)Jxhek~Hku^HU}2>l%Yix;`7EYbKKl(LL2 ztUK4{NytTRWJCXr!j4#qB&WW&`rBUkSZne!Mxo`lx^rHJ`NsQS=0FaY!H?Ft3dG#r z>bsw0W|2Y+mao&mO$j8$&!^(5EC$OTMbg67^vDkyk!u(=)S$KgQbvBkVurtTHjCN@ z5Wy^$Q}d^6u+VGlxRVha3guov11p=zmLCR$IuKfmiQVCBu#gaIEo|2h`O)sT`a;H8 zeKxwj(%j~^de**_=h%Z-t=zK8>-4 zj`)Adw#!}iY7m`n-L1c?&V;__gw(0nxPQ|(+;Fg!O>?wZvtMSLPdyEQay9ItMUk#| zgMikpyQ*Q@Zhy_Higk8@Gg7`5cY z(01zSY9v9mxm;WRr{$2Tr=@}Rmp!+KP&Mm|0~-l3jyQDa&?8FVXzROJN@c+xEq&h^ zp#kBdt+jMw1MKBCEN)R9=mk`ZoA-^N^zj?0RS#iJS2dhn<9!lSIY!7)fvzwMB<-SZHh6R?#Q-imty4S3|-L zC#KV}Phs z2)q50Ud+1lG&SUpBD{Lr`&n^UC)D8q;6%yK&4d%1Y;7pJ{>d(Ozt#7ow$*2+?^m_^ z|3CKL1J0-8>mMI=t<_stmeqR@QKM{#h(w7VQG@8B1tG!eLG&8Evw9~MtM^`()!Ai> zwY~41`TWn^_PJB;KHn$*-}5{P#>?KB^FHTH`P@6@OtXeGOPQ78^rwZ{)~-(Re}T`n z#HuTkE*a0dTm zxnh`q$QqYA#12HUva;5=Tct|x{-vPjQyeI3cZ;kTSQ*Z}r!yjgtE`Slu1NEcd4wOq zqdAj@py6Ll=rG0MEB$p*$*HiL@@Np#K~b~%ap~gs;I5^07?`5@ntO zf~vFH^mQ&5x}FC|Mg*V~F;E0+YZvlx8 z@e(1R^!xe5&vsRlRN!An+(Fb%tt{PMQ7e}&HE!T(y!ZDQJdFh))Bwjt1oz5} zzQA!pb=MQ@J*9vr{chZa7lh9LSd}(PT+$8(A37?51LyGw^=bJNgNL`KK{x*=`7LDC zdkw=F2HZyDZWJ}7{n4pfFK&C5s&;L|}NP?1cRVq@^bQ4L<*lVKIZa214nrP#D*6XD&KVI`}VR821u ztjO*tEglgo`5eDgv5K#}`Lxu>iq>nJ|CDdZNrhY3sY)I2bwo?>$|9n{jd!ytooqcq@q@ zWR)=TrK~5&p-QkeMrP7dO;#>F$Qv(FXAeRzf6dZ^oDzOp&v>$%jyGJc5N}@4Fd?DJ zZ&KX2#F`kiAmjxr3D^PcO&I}eL!h5#aYbMe$c)cQ)T_4?ZVqvDvLN6EGZ?|IbfXT3 z)p)Ja9bo6u)@)csbFU%9Z}#lj9pPMbP7d0kOrzDc7~2V1Y!$Nlt16DW(k?w^0{dx* z@Ga@m)V3NT^j$TOVpj8+E}}kq1N6kE4M|t*-d5UxzEjR)(rtXPWg$tPJPw5@SGOi8 zFPjQrfqTl`@vbQEsHl*t={eN%`0<7+>07Ko^I+p{$?yB5+~3}|I|01qiWsaklW8n) zJrx!-1T^O>WXkJ#JmxsaDQCHv0!>dzRI=V7Sn)7Lrk2urPI={+Nk2uYYl@ZWQh*Zs zDXA?iU}mp2&QL|TDAXB3=as(B5McA2AryMilCAofSqmSctn6TX15E>!OV(HStJ?}r z*gs){_k;r>$@mg$ajm`FydPHCVU?m0=P6X7`a(Y(uyBkzt7A#a2k+l6fp0fHR6EO} zh73)i+6mJ-F+AFa)>b6SG8JHOWFDVL<_(V{$z=_S@yyck8pxp12_%^RX;CFW-u{T% z#y|etU^ky|cw_>+P2P{Mh@&T%YP$%Gr^!OG2?UJ3unDq#t$m2Pk2E19w;7G;=|jTd zt^8Jc#%IZxw@~v>CBsc_i>GjL2s|`q^DKbjC9lLB{72Zess@|zB!uq^nk+63`?P#V z0&UY$ zaR#@iAy@N&lkdIpHCeVLEOpD4VYGH)-OL2ohoHKkrYr(;0p#MzU;Fp(KOl&_WUK31 zsbrPj^(YoYxcYid>Re5e$0_oXuUyNkOA&HRh$08S=HjEljD>qYA&#p>MCkJYM`<#> z`EDKM4AOFNOSTPq2Dzi%wK%bys8pkLP)PV7JFwv+qWB37na-VcUOYKxYndA!PiEPv zMZb`9R$H{I)hw1bh`FP(_S4qRfpo4jB+#n#DY^3J0C3gI4j6NZC^M{Bohu1i$e=ivd4>=!9Nb*5_ ziMCaACN1QBzj#_{hClmaLfkVLA?`UFF44Sk<1l-TkIu7`knKJfVMWGLOIKUNDkqTb z=}<=3fzjj+-;OsohP4CY$PO+#SY@TRQ@zO>7Rv$`aOxC~*hH?w;p5~!O2SyffCc-4 z5VjvS&?#4y$4XrEGg1HpTvpBi5Gw!D7W)!L|LeJe?XwO}aIG`)jY47sZcdU_)dktilWvW$TLo4YRfq15#hA zRlnz@1c25uL*`NVJhV`yn%n{eKPqWNtvoviR4RA{Kt=9796iA!leZT^lin}?kEax zpvX9Ep{DzUh#BSkE5>|nZ9qR`>HIQcKl5xDcam}FU&%$kd;1uf@GO5CM)chsh z8NkUv&<9pmhuleoy~%<7c(lpZt(`nkjd5`0m+~_Y!p2TY$~7Tg2`SHm?%9RO$hzEtsAu&khe4W{*5)VRA2QQzO~r5UlTytH*6N(38^y zlM`9fImd_ARDPa9F3wpOG-uA7LRPZo9}N>^Z(iI>A}Jk3uy~6Wh5FCyP>+UrtStXviu{z4TJ$)i4^&w~}0dH?h!0>u|dplHTj`$43 z%TEK~ua`m7pI#>75X30t=k4v~jl4N2I7LxpH+cNSSPY0J(A&!hu}?kmQdGx;)T1xEV`%(!**gG7=1{^I)*!X#}lL_kB?t=XT-k z!j$8SBTtpXR#vCqeF;R>$r-l#cG3RzPAkRYuNVyF;*-Hbv3M)o2p6*EgxA?)uBYv> zgNkxn?>QN|a%$Cz>p=%jfe*HNUR<<1ZD+r4JzHk9tp}m3H zFQZ86kes=O%~%vXqX+woa@zkb!D8VnZIil(#BHA|uYJD5WXbo_6TX(nR!k&kvZJg| z4ocqKKZv^0VLZtv2v&+93+TsHQr*hQ!mE9ssqdIOImrSD6@M0_{pRlE5sytG&o!ft zJDI~{ugDpV?&oYYW}`aDe);J=(~&} zgwViv5;;m3`pG!oHCnE=`!6|2^8Vr6PY3xd@hD{VAHR$qJ>||>&4gjed#{6f=@$;P zwO}K3X|zRz^FFi3YB(Bm%+6rf<92O7%5Y)6laKR#7A59SXK{UOUlp`?V=IPU+7C8= z3X{HNG{T&(ZLLml;||l3TC?C9GQ=8W{L3HH+PY9Za7~)k^R!}3Qv0C1eK*2Y4ha#F z5fKl|S-@ZLjDsohN2hTjDo6RJ#IIi=3-f#9%}`>@xi|CXwUK2Wwz5%2LZ=E%e>u2x z^;*aA%V82t7(iqkSuHEAJqxWcYD!6IHnzvI9k9o`;AETkDMwc#+3*7~7nyYICLC`% zsI(*%aBZ8qFEX&B2)0zhW(^rS>j{26K*&C7s;xJi{2JSL4}LW-dl!{2!v{p7PVp8_ ze$BUAH{fMCE5uhDN7SNKMAp4{2j3JIfT_!8D^{#{i{ri%qHC~U%lp0W1qc?O_nzxV zp7(xF7i35ZL?gM+wyitI#3(*Caz!60o3q+rr<6A}osesDrymu1rgU`%Kc3Ul89-x| z%T9yn7s1K^CzkuQqW3~5?WhuJ86^x<^sPWBTj9b}f|Ng;VraOc)BuxljvNc=S;2}m zZUk5UuAVyeraE24W6|^*qRxSDO%1~LEGp4qRg-dJe%tI>&_(606?2=vx`w;EyVlfl zn3a#0`#;4_v3X$9;u*l?kHP-cfr3A5TQhUk=Mu9{Yq+%=986Gq@Hw0o1!N^K0sdGQ z`BS#m@H+LZT-l?-NJUx8$`y!HwrVwMK>>5SV%+#N3*(-w9QyXUUcawVqGUBaWrtz> zQclbazQ+F6b#NvfJin*J*0Y8!{?-_;wgj!->OsmXYuMti2BT5CW+PMy9BtQ`!gd3D zg!Vgd6H5$?cNJEaSIGpVGF9pf9^99~Jn8Ru;;$n|=&!Y{5`!W5dGs%SNoBrpGW6K0 zD6unURJ6+otLj52QgFQ`_+1h+f*@px|a~ z+d0pA!WR2#AI5cfoe*}bKO2s;P$rAr9<%@eaNZIrq(SCMd<@IMMEh`A8kO$yp2Akzs zKI(PH9wGQvBMZ&+s;4hLk*{sa09DyG+ccUg{_!3-waU>>n##-*9>5DTREmvJU#5g_ zCE#~(5C(NAKbPRq0%nf`-{dgb;Wb<`r}l^noZ7l|CwLC#vPyQO2SvQy4a3Sz%fM%S zNn6lu!f!uQxod~9*aCn8>uZVz0-r^$_!Gc%s1V%bxYuI5sR9tz!#)@%e`86?VSpxS z-S~d6oZ}}8gkVKsplTj+>kQE4VjLC%y*E?};=-6UBGHwIiyE|k5D3rYF?3|+bbTnh z=2Cxml2u<}?GR2tFIu{nI+OdEC@OZP^GBSN8f@O{RIgrOlKtTR-;}^N16C7qy1%Sr z(^LH&2p%WK)CyjcI6A&f5{I|&=^d{%bt>5PPgq_}O$T7K{`2tIg@ev>YITerTY;a+ zvD(w%CFHS|u{fdU$Vf07h#2}o%R>x&hP)hfZK%k}Zzb_T^xrQ24gSK>n_qKjF@qrY zzlv@8oAC|B_`aEF&XaM8q+AT1YT;s;8Q44g%)gVY7%0!*m_X=fDPPLKG3w@a>4y3e z@g#9~T|$mX=O zel0;(iqj96tsI;OvDV4S`Njr#aFh>0SqY3gGHKknacw`BVbIqBmztWCw4^wX(_=4n z7yodmb=n9_qIvT+Tdej_C`a^@io9@vLWL$C(4>O|5SU#($HPb)&X-@zOR8a)GJ60_ zt{?@G$5a6AzWKsbty~UKOg2`f?7zYAzPntm;7g1Xxj7Qg`({xmn#QiJLM3f zL%={emJy0&qh(BG<@y-J`dJAUfBu^|ys9P4czy5>O!)sMP+-=Yr!$3tt(um4anvLy z|8=_3`cY95mq=3GRaw`u#o9RhOkxdjRV@s#56tdYKxh_zDiPG;`CL(Keg=eUrGdfH z8#}ogvC459GpB2)Bgj*dK_F${r38(%fqqdGyH>N4Vrz>1I!?K5V}5aS;QL?^fNSfr z3mnI>61Z;N`gQBV@5F1i0W($Z;p%Us{t4%bRR8_(skLj@@}Ik_H&|0=%=kvL=$Yz1 zc#IP8b9ftG;YpVUdkIvP;03F*?Iis`NLZt+sZnKYFh2)EpjH+iEMkWB$nyBq)!=?I zF}m~_!TNJAQ6c^6J)*K16vhnmPc2q2uTrd(~K4Eh{ouUGjtxcNY0jx^3I!j^e zlDJH%LK1nXT~;V!=ms5y!-Dp6bQ+9vS=Md&>U#qn-0kJ#D-}A(9X4MzaLt&JS=E(KXfuadBS;&g z--XoWPq05^{(Ee{)Ch(TLifdp;1#}~&G1{Eg-XzJaXgrn-9n_^8o%rfgJmAzULRsD zK6!70p&80$c{mRFl#_Dv88fC2luOA_e2jz4U}ucKGXt!r@LPP2IpDzpm%#Q*#b9b< z9y7~hk(&o&ocflq)ms(cwzo=I8UMllhQlM6V-U@xdbHmc1zppy1t!Jmq0{|pw{H7Kg?JfYrSf_yIQ&$VYYCkwmp1004r0)u~A9-MY+kDo2_*vZn^zF;A499+A zRhoUJQ`1ja*<{7)Knj)`1gxAfy!1I8F!NL9FgV_$mC5VCXH7p$E`v$R47S3`A~S$c zd&ssK9D*vKTt2m}{#BD)=fh4ww#0rL;A7?l<^yDf3*xv8UR%Z$BB% zHsIgw8QRaI{zg-|-zaOl7s=Z17b;s7+PBZ%18PY|k0f@~K+)YUF# z%TT|FsQFh7^CfYe1#m5H4792#@$nDTVXl?oRv3heJ%}mPg4D6nss9$WU><eiG18AOhk~FFH32*NLtqg4|2w0@zov}5;5L(>||kl*SucdaG(V^ zNxr~fXE+W9^CdV{P7npi&r70>l0e1=p_rE~<|j8es{CFwC3cb&1e>r83`qrNhk8@k z&qfq%!fAmZYNu8`-@;BSSY$;(Xn3$pnv(cS5DVMKkvQak8OZ6BSIuExg z#MvM_?7xpykA_Cc>~JyiSzm#gqTL^~N zrBO7*6)o+Fv{B3RbCkV~P@W5ET#EAN`CH1BPKGY+`J<(*l?^QRlA0hOK72JXF^DVc z7n)pX!jaD#@%dA+)3r-8mI+<;i$7-dEg~C@uu;F4q2HmX9eaK(Cd+*A-J?gJLoZ~R zIF>CL1!Lbrm8K;r2l!tCby5HWSHS;zR$i@+6&S;8SJSxihX0PrcG~nv*(MpO2j9++ zb@JrNU(2RjgVphS>6*)b{)mqcEmjtO(bYFvxxBlJfVnHNNqBef;*#i4Cmg$@njk?5 zIr}FlyQK(1y_6*XYw|ZO{Z6IjJVmo3@zPb4(^*PJ`152nJVn_E7mqouT2>}+WotUr zQI5G@P|Bm0atyUop7`Fd!CacgD#}%BG#~uV63E+N!2-D9iS7*Q?W9s))!`4}Tf#Vg zFSy!PEPWkV(w~yFV1%cKl?>hPN|jdOz@2?0Wo<2eKwp_T*7AfR}2(?w{#+w_~S9E76mO$?N_^$kO z0j4t;%LLW0bq2=kEP4#@(VpPzD94^A%tiTNzsV?r+4AgzmGie?tyDn^&G4q56%KiS zL^VrX!?Q;lo6y;e0Ap6RA4%?bZgW>*8c7Zlry`7|6!s5{LXG7-vL>^%J};$mSRCinij zAEXjb_hv)mQ@ANrH+6FvUQDBaLxU_aWzM^oN<}v+48$A>IMRYOr%3G929#9xDidF3 zH7$%Qezxk^F#kCC1tpm+KO~GsXY@u)HHMo21GC@I%15#_oyodHNH_eB{b~V z7a6n=LRPs^>;W`z!O3?98(h%-$eC(XCCGX)^eBvbn2gPX@n4n-Cd+lWEK+x020N0c z8v*)+rbca{vJ_gFf*&~}qgbs(96qU4tDmn&NvNA1#-u zQZtIi@s9p&fp5W8Z~gmAvbO`~wp4d(XB`f9ftyYe-^QyWfrM`98MIcga;6(<3fCvl zp+YYPLkn8d{*#-B2c7qhH7jeD3DpC^uQ{3#oTVstWi1upox#{O&fsI8g&{4kg%4Nd zDSQjCDJ;7lD)R_d-|dk?Lm@7_Mb=l!RQxt1e~%8a@7gzjC!`>cGR-qB1X9!DFs&FVkY*nC3xipG( z*e#}|>*SQc#%yOvmuqwQ@DaFWrlt`&|MXa{?B{7_xJ-!s;1_k3m5VOgRr%di!h5ThDlG&d5ftBDV6Fc&WlnxO~80E;@)0rP%;l| zvdNR9i|M*eX2U~M>t_VmCnVP4#gg<8or9JN!M+$fAr+Ad(b;9KSR|1FBo_i+z$6kH zDJ{&;A_v!IFgm>S_|$23K3SktcYeH_aX$pBjZyvH26E>AdET16;(!c!&Dwh#HaHMm zNhq5My4i*tVJt{0AB-)+gEx#BGcaQfl=CC+?pEQWcwSyDTwvWZoZ8ZgeV%e!#jEI#7^QygA`e0GfyS=3u}n-b}Tzy!c6y z_X-c_y3wd;a|G^`LU3qKitm7CB(#`?sCxm60i)1Yco)|}0el9=lc6Zne=XS}4OW2y zR7Gd;mPVv+(CGJ8f_;mjtj0csyuZ{_;C#3qpjn3wVfd#`qTws68V^b6AcJ6iW-DHN z5k4u)yOryo?ay3d(wY}PN}G32*rgK?ip$9|unCN!c{^}cAdRtQY6^50JcIYi>!K_y)wj59TG}&_J zsvh+M+$l?|=*!e}u!&Di*|$$G;2Ds}%*TR-q0X?gVLz$ewgSZ^l>x8n{R=la=O8o1 zYAautQr^qsaB{T2u;9CW0IgtpwrSS9n^0W$06E`QGiLH27zYQ7OJ6mvZ!m7o^BdvJ zsrDF}V~?dp=hh(jb2QS^*E&vw3EOM#3r1#XR&D*$e#Q?Kl3$!y4t?)d8)@fdzO~T zx_Hfth2B!6w+uw6;gl(taq0v)2-MOJ(#Q_XH9d_Z?W_I2$J{pI1@g3H>aYcGU>nEU zBOZbq-m~Wu_@>!X9SeOr%@IFu?o)vY4eD-8newIm=PXaeyH4#+9(mg2@#7G%_Afpe z9UT)rX3(Ja4A&s7MAeT4Lswcc0WNul$y z-p@cdl`=8K*Gr=ECtSFX=)Q5_@K<`7m^s$)z6zS%`W2HdUe%r7!BQW-)-9Khm<4vGb(0YbUX@8DeJNT}rbs zY2~73xEa1J$@p(4=_EljEP278Hy!cjl4LBw%wCt*iYmTjc78F$eq#_18tDW zUC@@AZorZ}=$H>KMOCv-$A}EONV-sFM}#{p)AnZN4&d?7JF7uneNlfeS;Jxl0?1Zx z?;UCz=f_W@^i$7ACOCLTO;(DAs{FS8xBdh-5D}enmPqoTV;f|@gN}8;ujJJ{;LY#@ zolAV=KQ>S#zT=b}m+raPW%0|fStiux=+TjR%n)pt-)aU1Mv&*pOP!{x{Bb`SSgi=( zPOj?+U2~+lN~DtEU6t$!JCj45ZNY)Z<`CeZIuvzYwU*^|fFbrhR(oKt&CYUmvd+Nf zC({b8a-ylT3h_3u1AD1&0r4~l-3ZM6sm?ueCOoq|e_{^**F_si?m>P4tRMMNV}-xF zUK!r06e|~c$;}|3^A;>Wa=8&@L;)NQ3zjS0O8ku}g%ELKL0Kn}$rcE$N;3L?Uqy6P zqK$yc;vRE2i^f}n5Z-ROmCT`_%a`}aTllCMm*)uyJ-B#zD2ZH}$aGpMSN=gepOWN_ z-@0Zf)x}t^!brdSfg%H^&i~H&yIM2+T~esqcM+F9wbFFI+lxC;*XMdFGqul8R##PY zm7LX`xHE&40OkQo4=H2y>gIqDc5vvf&`U~ij_a@w*Cm#KS9L>b=>w)bF-=mBt9kO(^ zNL~$0-;o}o+^5Oc=!?CUNE(#}^o040I_i0BRyy^UjgDFV+i~pA z)75Y#A3}V4OQH9kSZxXvLDSPcBn6Rv%RQj(#up`6KDw^WYZbiLmnB+fFnHLxCu4+_zx-LkbH&+$B9^T#6%X6N%DiGeQ2pcL%oq#3?5 zWHqYM6UNd%)iX%Ov%R|iN&C~*AnMOBI`aqig4iqJ_$gN{hdtfBYhZs&Hlb`STUKBN z^Uz*oIZQrg$<9y3%pII%y~zwPEdJ8Ej=RK4kd$C(H+Y z&C`tVI{d1P;pd+%)GOzj@7e{Q1@DT6;oBZd-r|k21`q@v!@L`P8wKYE8{KRm=r;jo zv)t_)SeY%|%Z89=BtUq-5EUgrxvV{FgDu2ijqloE>+n^udC7IIgN=yzSvhHZ6=_l$ zOCgkR34Ynj*$0+0y;sz1Q|1rbH~+-h`eLrTKf);wf?(@IR3Bm5lOzxQ1m!B(_;572 z%!8A>bzSaHFl~0^u10bYFX&`kiU&9YobLJHVn?o;68=Bo_|N7RD(qe(|80K{fE z#I|?6!FHIMr5(W`g9o=0-?e=G?&@vJX17&%ap$xoXaip3VG1rlRT(=wjn` zX4vVe^J@Y=yE;mSjfdUpEnV9y(X38)I0D2kbxCv3vCw$}rKXXd6>(V|o(>P=MA%0qTV*vz!TFebI`)d@KO_Z5)Yq?@FCm=~@m|^{#+3 z+d=LRqU3gAki2Mn2`U<&ypOkW=}F4C{MA0)D?Gg6ClH7lp$r_*DIZdy=5O)dVm4y$ z9(lTh>oR4{U}kb39&Gxlr&|1qj5^`dMC&z$Kx}T_MTj<&1op>*#Tq#@xje7=J4j$9 zm5#YXA4b=%KcMTPV?BASWHOG@`$CVn4XWrDSV2cMeAK=B8yr>Msx$jvINSr3U9?o4 z{<~m>&_Fn-x#fiz+S!10i+c5|b8Mtkj31ut*7GT0FFVb2jUvx!i<%R5sOGWigq{+P zU!o4d0o!SXpk*UB)Q=sGTf<}{gJqaGp`cD!kVZ$-AE$URa?U`3AROcjvAzuFaYRv; z**Q#KfS+sN?W$7rnz$Kcj6LGjg2LEi&5PhnQaq>5APk?2nNh^u@BdN-o%^q z&M{PbOf`s5!79ekK*S8)>cEndb7G$fI!(;;g)-IVLo0brxZBqd%d*XJEx!?9pC4_; z2la-B1;Ac;65p|rDj$Te%S{vLhnIL!R$i4F&h`ha5S%t_;fzzmb}t_`tU%39CfoP= z-hORxK^vJT2KEOuP#4cm>f5((C0Ez4;L*3M`D2W^?OocYGz{?%&ooLPW4~9pp}hO* zz8?kxE3cQ4NH@L>op=AyTT6>r^QUyjsPuq7*igT(y8CVXN_;usFuHBV0lkt%dux3iWS?T;BC(MJ(NjK zIrpbZkfrkQwxlK30~}r5$%(FFXF5F;>i{P2Kzux}$;n`K{FGoPgsfO|7+jf|0cj7o zL7JvASIvE}5-HdUp#pH=-whuhA3BJ8I>w@q#@aAU-OY=YqoYKFT!DS?yIua{bMw=p z5+59t0BrFmWK~H?S!~cxe@Xsb1m9r%U{2YOx8gwYD`~oTu_s7mI)<-_f;wf2%`_2( zH``%54jqbR&tft4Lxl})oEc_3^WOp%{}V$q1C{I6U5gV2n_PB6!WOzg7~VcZ8DOrB4YLd1t@G2Kq_(chP%5)(rP}Oj5!xJcK)^1hC{I z@^%_@&3D*PODkuj4t+Uk(xjT1MH!RfgU7Z6a?C$kpL?YZ-kdX_#JeL@ zzQxA|$#`ZtMt`SAs7g4AaWRP6Gskg2;_oadMK4ev&SLb#^#2}xdJUdLUEgHj8UBKc z-fn&5(m94gDa?FcH=sQKsK#T85dXS{i28g6q^H~Is{xU6<3oxWZWkj3H#8UkJgae7 z;Q$~$TR|_FnIRNS)?CB;xw+nk6d6__PP!8z$$dGR5xhr8sNv_H?I5<19L)%>gK6}y zi~#pM3vw|fIienEHoEt7~2@lpD#w+>>saZffb+PGDNy#+}+wKcurSFPKLCr`=TOdyyEyZFX zXCofU3j9-Y>Bi=jNmN#JOZ?WwC3h3)l;VDugh-bL$D_dOcVA7%4rB@8&c7+VhIR>voTHW}))2hFo=J z2RC*v|IEPrvEehN^BHkqMZgTE1_YNk{QR>I-p-TE@CH7WCW6ov{D~#Rc&lS#k12mw z?jBbv&M24RHqHR&3spFRGnn6jodM3556kKZj_LnC=)xHv%oODvxXt&u&ng+*=Dud2 zI3a@WU970>JD{eQIyi>ymOdBm zGPz-OD-X<|D|G%Hp~mg6D%XZuF?!ns*rA8*d659+KFSKAi7>o9`GB63fulE+VIY+C zEIscD4v#y#x(bUxsLb50)Y*Pzg1`sD|7-~~Zr`Cj|2>r%_VUGx7cbS{J=ogE%iaZk zbAsaln=x$ouwj<|Yn$sh>TJTfF;3&Ak?yQ(qm-2uk@P3uuWT%5@bOPaP(N=Eo2v5% z^_CPLc|B2Pz<{k=!I*h}jg54HBAxFm`WL~+3gJ4~zVkgZi-DH@mM2+SuEE9H*vl{`T zyoX=dEtE?)C8)Hig7cIWY*{8lk*h0gEhZDs8+{{_-SAWkvKxsam#`h_3^x8bBw00} z@njm#@i^%-8J*H5#ooPbhn<|*Ikm7H^hm7b^_a6u7@U1ct>tz)bKTh-d){E=pM~dM zuF2EhoA7KKyFD!coccnnb@h_z08O-AA+=A%sdgBZ+hzk&IlC?jl{;@!wH7&xQ*m1x zrNap{EH)VA&_1Q-(~zSn9d4tvJ;?dkVQJ*B&I@}vv^9<2!Uu9_*F~!hIXr8V7zA>* z*sRpEHl=N+?Y*Ga^!v*;pUdzSTWq&*-@23av391tlVI^Z#vLpn#_O4CKZNbdoR80l zp+5KxOR$7|$Wcp(^@ideEWsJd7=fAIzY{^II*zk3s3J7Qa!|NchWdl;_kJMq+_r@) zZOp##`XId6F-AgFNf~b2Z!pRgayx^a9NJ?4KG@2*wtIR=c@ z0;dUJK(O-m{{8y_aPO{wb^Uly14^7G!3^d!ux^QpO%EV*>AT7`NkXa8(vZ%khIaPZ z?JmA)(_?A|rwjLExs6bNth}^QnEyJqIWHWxOkjsym$aFpjJA2@a~)I`84>eOIHr4$ zN*gzC9*3oaa~EM6aw0UVyVWAM;OStD9qNRTFHC(7>+D67|mkNBEEMVxf zxtb=Juq(^y1e1qK`6|(-5zo?kLkzjZnrSs1wS3@`1mc}X(3q?DA(*Wr3H60ZbcCh@ zK;6B$^#!>yYtEiMJ7(-zn4UgkH?+*wWfuv8Nf8^jl1OGlbl%TMfSZjN`iwlwW{3Sk z!gD&Y+$-{B&!Pw2dPK!_cS5KxO#9u~vu9nay?gdNB;g$`5XySwjk)DD(Vw^Gc}`t< ziI9COSA56MHd=N3v;BMVblU{(QC|NYEa$B>?g2|fXW?-B_{u2CUc0o+RTRB#&s=%> z^5tJ-v@imu|DcV*dZ;L;nmIwhv?{Jzq>3r`oWt39#yP4x9r$pjLO0QQEFD0s0 z)w@e`7$W*JL;pEv0E?V6$EF43_&)^y2TP#ixY=Y2tN*7_qeiVx0;jGQ)7p8RaC(qcL8;n7Ued^ZIZ{Jr*of$oz0NVD??HL|!r`uCXP^c$e6(%FB7i9{U*o zZEPYFza;=Vf3O4@Z(3L*9PG(3TLOE;1$!pC$KJf_`4s?CAJ(7R>%HoNq-uu$y@PaCutt@LwT;Zl6Aj73@zwCwPZOw z>tve8rC)O74?$@OLx9$EOR`osZRB*x7S%QMlvC;OSe~)m#iXZ2zD9U%_S5H#Ibhc=3kX~+3QF3x?WO( zo%&hd6s%lhDQ2i}5Dsv55lu4nWSoT^OBsqY07V%&z{MH1`bH~C%DVJciqn4%dUI?= z=EUYH8}m3r|5#tyleR518beOlrh5!2VT$|__WIPwK=LOmc#E#Gg(ZS;&RI(yOVxDVfD==j*_C$MS2(Eg0oHaZ>8g>;zoQ%n;r#>bTFNfo)VYk1 z-!f$^@fKF`a!n&F8i)11NnrILm-t~ZsBRJuK+>EZ+0AGyo|gM2HITGm7LE_z|Fi@; zFni_OGt*?}madef%!C?DK3TsThjn@jCZBvvC1^Oq$;z>uOsLLt zUd}o3*Z~^8;ShsI`}XbCP7{QU2+yh0cXhVXr}59gXjicPIYUBynz=Q2>GN#cc5UHl zP9IV^`p-w7`h;mfQ*M?TOFNSnrU6ZVovl7wX*vx@rvVK=|11J=^0W`(|7Ho)g$*hW zvO?B6W1x?XybolL_E6u?lIK*bKdrTw!Ph~p zL7@(mNYdJ~U0c~=507)uMnL^JTT%yVbv9jGA}+mf;Fq-4g|k=MAi&VKQn#wy95x;R9w?U}f=fZ8sAoVD$RBS8D< zY*9EKy39lJE2vyhDq?9G@-%;jpMSP%d-nZpiJD)vwGXz5#W&0Fg{6htM1kodOuEWi zT`jIC-V(v_4jebmL$XpFtWIE>>PlCNi>taJuIpX1Q|xnICv4AOO1sv8ofyt0wIK%htp49wCE*x?vGZUKTDAH2u_6e;F$6$=pe!1&PvKXbo}<{(Mny71eEj#& zsi6_S2Y!%?)#(gDI&Bve0rs<#ll1}iJxg(hpgjL@hFBlS*?ldv%xtk-n=aeN$HwrE zh1@FkUvw#OQAal+Umi2AtFMNFdvcho_dR%Jz|6EP3g2c0D_+Hl60Tak2jH_zd)(j& zRd-y~wS+k(gI-gJJMF}n_A}aG(vXR7f-(c;f2%A+s7Hu$lzr3OK8Kl$5M>4G5vH7w z83)!WN}CYnFh9$sMlgYX4hy6ZO;F-wnL>~RL)RT9h0Z|7R9npLI+U4>+-~JWcO_9W zng-1T5B9MsN8QqBOz% z6lH`>!ppp}uasbE{il-Q188!&ic`ngXsn|sOKc$2T~S2)t;P%u$7MUQF0kDvqlbq_ za|y$2m`$UQ>VY#C@Zbh z^RSntYoX4YAb)|gEGs}{T<;T2y;+>Us#_}n>Fn^~>v5`Nc<~JPK&a|p7)KU1qcJ?sa5vN-7N?x~ndvU6@G1PTdjt*| zY4BQ~MUo&Psa(BkF!TcKDce^vpma-V4hBnGxgX*1yPm0dw83k6dc46f74XIDdt!e+ z(|jD;3RtJ$T^0e&TNqq#ysjFLgPcez3BM8yWfMk%=*EfE07qF7FBckSElz>g9D_>KR;^1_nsyyiFkAt_@ zsgm~|#sY?l_nD zj8hbKk*BPXj0L1J?7p!mRRqUlMVO&AxE{lC>xQ3uR*k~Zr8t@qY^mU*hM#|qx5wOH zV254qDl5t*N%g5}pROoF_-OQSW*8XTEt6{pqZJ!51dC`lr-9jyVd4CO;%Ug)Vqd2r zXQ%JqMn6UDj^J&#ci>fg^;21f^7!9I*`_BymKaCV4aHMIWPHL6Ze0QpOW|;}I_@Uk zd{yiL)~s=*!xBnzQFg;O^?Iqh(u>7vh9sI_WymfjMwe5T(~8gIMpnUJ@O@{yFqXk` zBv`Lj`}LKFMa~-^wbaEIZdsthfy``SNRUOYF%AKnmF_YvQo0*{cs9ntW++oHJl_nk z*w;((Q>H?1j1^jqXUyh4HW)uGV--X0H}UZmD^~mkYw`k?@`d@OdRRYP2HuM)ElokE zxpO1u&h2hVJEQpB2&9|h$Yht3ju_iwK0xDhs8ovUkF$$1z$}%MPIV%IE*XQb~F*gXwBm4%I9Sv%*3Pm~AdqngF-BA7BmCR6eVEuLQd!8y}Z{*xGs*3(jVD^pO4p48XJ$;BoBw8IlV3DLEWr!PIeaOjZmVz*0BA^PVjC-_k$5YHW*dlU}EPpr*?I{;ct zo7?OQaUj=3_?kNyvUTOxzkCsYur#ab{R&lmxM@)nXESffyypqJlUA9dS}-hh>OBd) zUBE0S#yc5+e7N03MG2M&-ctJJKrSm4WulXx^MzuVKeKTmbZ*VYrHzfTk)m^Qw*BwE z_47dE;QT~*x%-N{FqTFpO0jsWkLCZ{0W((kNu4+(b{M=gA z7*!p$o=uMAa5i4;mT%_0s;(t&AdY9kInYj>k3+B&1 zH=jCM?d$HNdIxAlr<hu*j{v#vUuinRo z67ET2s&f=)a6R_79Z#n3dN*ROtklQBsj5vg?G01b#-rmMMz(ZD!gXcYV>I4l`28V9LX~ax1~e2aeoj=~^iF z$axX?()?yJ3}{*1B=3U_@Bc8lbNJm(c2W56u>E;aqqHODN*X5~#ZP19_)yKY$ z&vhQFzmvgheeS?pr7acZ*^hs>vNHbtJ8gf28T}n%k4_hU9*CRnzICTV9Y&cJcn%{` z_y|*yI*QBPje%rxah%xw{9deIb;A!5$_th@^e;*CKDJQy^jfxWgF8t2-UiU%4x zxaa27ROy){lf9`C69xv9J^YM!?H|?DcEFTje{5Ci7 z)df|n7VU8d<2!kssieNfFkc8RFcJQ&W+8-}ztLX$8#Auh990nG7%n!-)p)`A^BB*c zC`d6X-pN3PV8{6%Y;v{u#IUar>m@QO9V+<*uu%dwi;zaBeiR{rVy`LdB$B!%nh+n^SRvyL8req9 zW~%EiMGv0pFGNNO>9zEgXQ%>*AM{@ar{fVA^Ad8~wK7~S^o@x55_)N8=6#a9 z7f{G8I=<~jQuFhISs$pkoO&D~q&$zIo#asy)Eur-i7h5zb>d0vHP}!Z&ke&>M)d~x zn9&slDN3lipZHXgBJTsSzN5ZvHhYrkwwO1emJPW(AY5JLvLPQz_rVqA>=7ixl;Vjx1*}?!{oO5^$`RfZw2*XS-9e7_ZQnVdf%+5&I?;AEV8Q z+rS@SgX>x=R`fo`gN6(_^+YqXw6kJuXv;v|nnf^e6V%v>?WNs}lfDC5pdJ|CXM2iM zaeSLfv_;HuL+D^;=+i(`Qvwzxerwfe@z;f03@t&%I}hVA48anBqy$)kj2GnkFa%3r z9^TLXJQl3S9*L2`g1@`oT@G=@nwHzlu!ne;O~!M;dl6Gd4pPjnuFJFyuxoNTMBnzC z@~#a+V0j6Wx9$kR;z8qhKSA{nP*5NKOa&ppL-V#%#%0QP8+F@nk8}k)< zin`wGAZTaLo16x=4&&tBHbv6}F6Fdc3eAIf_^`WI(@Ip2~`IKqeEe_aBe zm(P}AxUx)`KfhZoa9^*E#l)MzV9ljE@1*@X&tO?5zj^ZphVCTh=>$wpGME}D1@jWc z&|pmLz6rO(B#aprTXg(^@j6S;>K&JaZ`g>Hd5$A&dXmM1a8y^T8jJssgFm9i1dk?> zB{o&^_wjg#Xk<_&Gd{-tc1D|DY-=8rKbkzSv%rtjb{m=rvwEWO6Y2aq{5c7 zotBK5tcw2`e%D?nrtF_PxUh4xt#C#=OY_Qx{D9YnLecvjpxaerm z#cOU1%*IN@ROYNlu<}46MoD#(z+AgnUYWzuu0Gz9i7pUp8LNbK^^CeGdEM&3w!3n0 zUs%K`p~kLpO?laZ#@ae!xhs7-U5!JE@{<-krEsI9gNkxpGmh22$74fbbK~QHV%PPa zQWK$DRN#>@3N441F!~T`frATbBypHGgY49~%MnLeR&b&jOAE{osmqzzKw;=u4nL}n z3Y2TmrN~muTajF+lB6?qTfv(o$wARO=u_3Fwr3-qO8)PBr5|p~ zY!~|&eR@-ZcSylIY~((MHNhh!B9!zcoXx|pjWAd*V)3k09V_t=KNT&18VK$8T0;f@ zgsRvUgFe)MiDfTXX7Ap;g9=)Id|j^d3Ft#px6NV|xJz}G9jh&)qhJ(N+`8+Yf}i@p zpc+TM1s9Qu@eyYm33;c;46RnC6CXZ?9HO0dj9)jqG@3FH5;VR-@@QvN+)vH$zAboKEKTDv@q<*#CZde|Oa;-|ncs7g0;;>qt@wd{1uk1^3X6alSvG&!?AMYNC=dRq<{9Y zy0QQo<(6W6Xp@=;d|dWLWb1GnU#l{=kVNcVCzaVLo4eFTVi9L64 zQxlblfz^)Tv6Uo9e=~m~$6c7h&Gm?!)Cjes$s`6sgNU)JXB#2Vd$71NPf395C)6#4 zDQXs*OGw-)`d(AFl8x?DjY^)wGvp(SLh$AV+O4BK8+gLBuQv;!Okg^rizf0vAfz;h z8NtDX9ARTK5QHE-Ud|BX`v_Fp8P6I*lI*Y%gdEJsXmSRo5Hi{sVtoh6W81c>q+b`7 z`5g<@dV5rwBljv*W?jO#y$tM{teQuexhj+I4;3?moM$~DzjGubSRx*8v>EE;y-#pW zgO7Xu4DmfVGC}(F=6-Yg2;2|#xFIK_26ID??~^}5V#>%smG%RkXNwKTLADqy%CN({ zQu*0NlhgH2Y?l_-r38DMj8;$Hj&F%WW?DmKhSL`CH;IX;?S*(KvoL8-`6#}#cHI#B zBC*E(9{M*wvdwf+<*Y5%+Ch6vayK?X))H&H%OdP*Pq>H5=6({8%=IEkG{kBebDt-6 zQ*L$7`@UKzPa_)LB;%bXHW*xWmsr;pYpd9OxCm{r>4H&Z&j;A5EETNvTV)J>eln^? zdn@Ti>D+Fa&}tL5r@#9H+ff+Ii{cYbWa1Tmj?EYWUZf}dm6vB%mCndiaX`f0yR!~DU1ZX zew*{P7vy@qV4ACZg${6VQba`RK5mecCoFm5x7}ACh81*VKlega)fCk_j^Dn*ui5Xc zD!!02bJZCssoTnC+y3MaOVVKI_B#%N>F#?l>VkbZ3t4N@_$8VM6)2zKW&eHKAA7nZ)Sb{K`jD$FY%4Cua;o zsf%y8D(yC1hWz;N?ao&S6X7 z^j7m1y`d;KojR++?b6OM1!U4P6ncrHoX~7A!Z@)Xla1tqDw-xKv=)T$6@-z6xo>v&fG?g}L1 zYszGGV-w&M@>tlgy}q`UtogqidK^k))ld<6FDPz1``G5Qi+1g-49~w4hb>#yw2P#l zx#1aHHc0=4@K+xe3w7WtvE*K#KJ;&XMsIZ`^h-1rD=>{vZim8krrH3tJX}!-HTf`n zn32;0LlwBz60UKqFTwIdFJ@UN*&%@t%12YWgYRr;tmWaJgQZd_1eZ5L{vcI?gKH*3 z+x$u-ce9}Kp-L#MgS)3Z%O{9kA)!>;6ikGba^+*G6ukC#v4DMw{pl}|e+rHh`mM!6 z;1}pae~tB2oOQp3!7e@cHDm<_7e1a`+W8YPk*tb$HRQG6m4h5uGsvi8&3u-f3CBTT zvH?uhP}wu?vmiL&BzEVL4!2`>R%Q@{n&U@9OK>zJ*c=Zqyuvd_1Y7+v3~%hQX39F0 zzgo@;uGtw0HP9U2Uwkd>Mck9WR`ur5=CrSm@sH>B`$qFat0Ehp@A-L9JrF7KTVgl9 zQ?%Yy*Ohq$HoUxcu*~8%B2lNb(T`-6Ftmzgv7DxTp~@dHY16|hviZu~KJ9B}_iVNA z7Ubjl21v=9p1~3Xj8}14aI1B3{h=o~HtG1*uT1?`%?l1!=xhyt@c$PjFigE} zm#yP95m-g6whvq#uY&&SWxLR}R2S5@!D{UewVGHbZ*XWo&SA2&`Z7-Pie78>!6Bgv z_Xb`uYTGcdE^^pBhPkakV) z-OhJ~_-GX6`}FCP56uzdGvn_gmDAupe^U-FK$iW6n$mmr{R3#p`kD#jJ=O32Ticf0 z=WNz*A~g3IA*MhZb8LZu#%9Yn=TXbn$AC29o&X#y1`Ze{4L{5hzNt&7S!|- z90PwI<>cf*(#K~+?((n;^@spzge)*U_Pq`E9q4RtgLO#*t4>HvZW}qkB5fc9n7Be$ zX9kQcZ795gSxS#DmbpG)38|MqWA(ah2l6>OH3;q!D>+P~YJa&oh_WxO;6_&IfRwj) zZ|V46PZmR;6wiQa&LA6W^=ros{y4^WG3bk@*=B3)+aRG6WiZ40C$T(fs4sbL+l{zK z#u_S68TO-SnMej2SkagmrX8O{qRp}2B0{nleDG|UOm>^Wrz{5Byv=5Rj6&90rqcT< zgzGGxekXBpOnkDfgG&+WTa&6P15Mj%F*=={kMS zA`;-LTg#S(ZwU#~-sv-|@_WPfI;TdI=^+S2#dWS$4TykMwP48On_qt_;;B*2ks#YL zKS!=w#jO6EuVtq!X&iapO7>mr!ddS7N~ZFxn*W{t+@p?<8D;rxthvar7JiG!Tk`(? zK>9l(Z!!y6qlVItdZ$;uHa4^mNej@B}LtZlhlEVgr7{wS#aV(^1XX4wGt`z z%>$Cu)&ysVU3CT!`spois5Lnes*na|VSDerp8b3y2icUupCoc&_;5KGp!`^(5tc7< z2}oRj9{u)ATF(VI9FtJy{lCbx1`zTwLQNlhBmt|ZsI~j%5>Z_Op#n*7X3mP2n?BOz`{wzJ@!a@arsUsBD>iG361ruqFiJou%g$ut`0H>Y zi5SiIqh05a>y>h+L%ABRAX_=G(UU=X<(Tm}vD9_6fHLJZi>XBHeA6#@PF)a4CgGI7 z>D4?1hpy3kJNYB`F<8D?kx7L7Rhf2-ijv=~Sl(S^ccE5rRt@c*%wy9zGg|G`)lEK_ z1-U(nEo6}!j3;ZMj>+c>)Fa*&s1d$uye6Fz_uWtY*wQ9%iFU62SdvJdoVHBpB%E|A zsrWYOQafj`R;nHwkn#tRW=;frZ_gXim48WoV%y@eWJ;c_2&Kz2ASiY)3!!{-FnN6B zh%Zr2lw=gDflg=lk)+L=Yl+AQ%HJu0?;VaEev`lj-<`y_0*k5bPj^eWPEpG@Z=+$G zG`MIC*Jg1pS1FCq8%uVqX;9V&7#HNkjNn>~rFVz|o*h=Me`WA-&ovmou~AtKmddfO zr&AVg=sFHBqs-+7!>GLfi4es0O4fIydXC!1RwV{wI`WXY+K>{y<7V)|s&1~bG7yyi zHh$r0hFH%h!r>=QJZ)^fyjSiN|EK%95;CizJdsCXgBK25Y#C^pd|9+(TF8OMCdu@` z4!PrdU`_+adzm!dlW7fp(+T!Iz&e2_{&&i$e?x#_U#_;(u*IW)p$G2yuxitJQ$aA; zWE%<3(QK5}!eQSV?I}?WPuZM6I<*-!IER(nd6-M>&#OkDuVM*dx>~b<`H8<~AbQTp zZG_W0DtK!4q33v0CTn5<(|S^Hb$kSuPFQ%BGGFcRKnZbJrqvMPq@vkTp-LEsaFso1 z0(W?NDEyskjg9)%V+LVD4&y^YXDUyNo3JI2;FOzMPB__~{Z2Y2_T-5FAA9csm__mJ z4G%SRLa&j46e$XVQbZsq3MgH`LN9`a-lPZw0g(;@N|7!dq<0~d5K5?_gwPTaNGCm{ z?acF@*?o4OotF1r-|v3+4>D+W&iS2lraZgT%PW%RK(05pU-XHP=0)jo+V%Q>O4m@9 zzk(AwH@T9w!&A^K@2~lHMAx*x1q6E9u)w19`Sd01n`;PujAxgRkha^tSDKVLg9vy}^$cA@|`_XI}AyGnQKDZ^@nH4u)^%jBC;C)xDdXeyWtJO! z^5-qk4OMhGOSGB_mvH5kX#%e#9PY<;J6w__9^-JP`+!Pav05Qtq~PK%QSf;uH?!zq z?3$DWX7ji`7KDP?edP-yTvMW_GTDKKh4J6jFchoY$iz38A88>Rkr+4v+zl9>SkFMn z9lj9LEw>GV>9%r}nl=p%C&zzyH=!BAW(%0RjyKH3LFFz>m^_YV**xGN$y^kQgDn^>$Ou5 z+LhT7Ecax8fWq_=n1{chalE#GXH$A2Eky3sl0Z!sLPvF0KH1mTHWHLpas{<+;5ebb%Q- zfa}h?^!|5!b^maX9kObFbmc{$M6N%*h7};-u-i7mrcSsS` z6gJa1X9Reo@5bY_wLH_HE5;DztsaXo*&=(5KyyI4DjF!y8TB^ifm zLwU=IyU5*u<$J$>|21bf_3zJqM6eN&RAJCsykf^&gT0 zg<;a6e2FIIx#$$=HfhQEfB?Vq!FO?p-@0!0H)$ID(n*^(&GVTzZ{GZQ`*7GOSD`oc zqRUTB9&ospD{(=fhM2t}$cDFrq1r$jZSz)-gKhjD*cg_#)7UE{>`RNZd&?SsFA+Avd^59+z$?Ip-pHUpVRD!ShVI zz_4GrYTZO$J(W4o=+xW3;Sz7cNmNljHV7h7QyH00oM-@4W(8)M?>j#WhO_Gm?)9{w!?Rv1X zKTEY9GPcf3)%GhJM`7B}O1-7xT!&Kje-+5-Q%Tu(nn{kjt0L!5#wdRyfAX73%`K2D zl48BvqYe%tdCg$uK~z@#;e<$k_YVmfe3D#}np{A#N}nV1rPwORs6T$LA5-RXa#%8k8 z^a{_-L^(o%0cB^I+WrUT)M__qiN;{e+jlnZ*A5R zLM({2t;!03v-4t;&66FG^<+uNQ}?G>EmHEffp8;DJKM4Pd|x5o5b6_UOq~ip6Z8TT zl4nbUf@AEW#0&nMk!mGr^f;kGPqY>CmN)7arJYqYy-_$0P}Fa3>u^LZS!Mulfu@bG zTbD23b>S-T;y%)}u;~)jd72imejPNZ`iS6qP4h&klcq@upA8t7LFg!4-YC^8jT$_W zHl?O%TKCQX3FCNR=Cz}Gi|=P?4PJe}h9ka{LShVFP)_c^z@IBA;{G|*;W3IrE6*n@ z3E87iMCclM-cSJ+%p!4B6&Q@j1}h*0J9?%lu-BiFDA$NPBa~wSA>$d2i|9efQWwSe z%7v5Nr5TPz)XyT<6b*yMY2=O*YQ}X+JExE|{X5F-IpwYo6WLz($vxWcesi=BWO$an zAyfPzIZ-5U*(ujk07<#p#fk)YX2H(Dou`0L{Ev@hKhf@Viw3yhfmMYs9uAx&j;tNh z`lfLfS<|78J&;%af1U$%hq^v22Upb&)vmU6TAqyevtbO?G_(7*2=^1PlTOYe{IGd* zI|_Q5ld%YE+lJV&q6akXSsR@Ln8skJ)J3?OMK5qC1Lkelg9{32OG0PSMg@zNx&}>< z?Ja;g3_L7`N(O*@Tu@L@l%R)DrICp+B4G5k#VWJINs9R_)wFBMO~i+=;{X?;MIO}n zJhdRyCKgA$<04rfQeQ(348kK$I2#N?xIxmrN}~fLvym9wVJLZHLb6E0nWst$UWOH2>6PY8J`{r#$i;fza}Wf;X! z+3W27VI$~{_-SSERVGm*#JJ2O533*qgHKmQEEkO0Oq~iFE1C9*Q!e*>XpG>^wQ`7h za9m6r;U~r{v0ae(%-zK;+UBX7^_P1eOfEFD@l0=h0`*B>I2}N;%0w^l$>z!OrQI)4B9{&Aj446XQ?obut18T5y?1l3$g7zH%-##O#1s?k+&uDwO{r0 zTWR9$7G7Gv$Nf9vV30GlKfy*~S@X5lofRIT!+M?fJvWon6o1 zg4tP3q*%3P6-dqci__W3QM$!hoa)95cmrivDU^A#Ww-$Q-;%5gdHP=7IB zZ_lwQdCIuyb0fR_Oc$Jq2|cx;SR{$#6`Q4yi?rk%EUB$wUp@UO^W7rJ{A*o3mH0yw zj2`ncgfrX1r-hPxO#&c#+@2NfgvMV;WQ`Y-2mUg&P+SA;Oj( zQ|^;gQrGnJ&za<`o)Df->6v7?jIHx#5^p6oL;oe@u)Ckp(UYSu5ZC<)Ek@<8$6Yy} zasz4cq;Tn8B2aU7LCW-ur*AOp3f#f(QqITmET2*}u+fj4D8c%kGUP+Tji>$Ze&0)~#?`?M^5ksg0uRv4441}BGvUA%NL{m~<__RCl4^C3fqULr$e zlQw!dlO1kicuvkCqQ)+s6>1L4&c&maSMXfCqb|(XbC<-}m0P4%x0A2@Ru1H@-s#r| z#BoRL2);e$B%LY3n;KZc)RS|?qocQBS1-tQOof@f%Gs z_Jb~q=yJIC`|)Ht{;Qe@8JrL9;KRZfW(s%3xQXfKpE)+;A9)@!tI7=`=6TLA^hWqo=V-jxH)?Sm3G#1Xb-m@-{8KgQTT$$$ z{#M-YUsx=)=#F2wsTSNQp=c_69!J#~@&wQnuB`zX+TtkwqwIT;I9d1w0fZgG5fM01 z)-Ogyf1siLF8@v3VbS&_@mtn~Tfi!7e&4avN@cnL8+Vl2?11BXU&A}4*cSXX>WgD# zpG&1@&l;d2H}G~z8>SQX2XnA~Tk00xW* zzE@V3h_ZKS+U4m(6{oFzFwOiDW!f(~uY>n|WfE4C)GL1S>A02;1L1(M>#{O7k1x3i z$6ZP%`Q{L^u6k=2f66Ncx|GC0v#r@<$7voSoin zL@0XeXFaa0%Wo6r@^Wr--soK5DjC7q>_P4o(OGa2HE(m5(^8WN@+UXmn(Ln4@o@V- zg{0;qtBn2x+Yyqy(B)mS_g$B2B^wxZ>i=+zH)PR; zgMYUCyk}slve}Ieuji#L`n&Y5mY?^`y-hjA=I#{xM{Ys1=TPuMdW_if_*lQ1s|V>? zH=cX1VZ`(?#Io?i?dZF7p>en28kp=K>4yFgZEk=Tx##1NsAi&A>v+RGlOI3x81(d* zq(8lj9DfwI-4QFxoWd>7lhpI0We`m_nGSyyZpC?pmO}pD&Tcny)W}6*iA%GkgfE?< zg?myYUrQ5X>Q<8-ZQmeC!=b@R+J@IX>h$m^!RGKb4Oc*)j+hT?2sO-&`E17y+P;Fb zYOp!UZ7GA^a<~)(BD7yS8S_1Ta5Y?GGvtjmzb%U~C>54eZ!z z<5=E$h8`Dv1D*%iowGRVQ%ls>l)IwJ7n{_-&|B%3FgR~? znpko2M4WHEks0{U5>(NXkJy z++5yRy$6Yj*$YTiC{eL#y)MHSWsv_t}F4dZ|L#@r(Lx;Wl_RlvUqN=y?;b zM2&eY8MmPC;G*~c-?N#>4#IwmhQvBk`^`$l8uLLm`j9FFkLg}1lZy5 zp2Q%qzQp*foXKCkj2 zju5bRSYL>e^G6&iV59J!hHn-sIRQ)VFm^u;-}99q5;a2@4S@-u@hO0wQlwo7=Y?bB ztMd6GaIgR&9129ctFQ|;RfD5jbK|-4XP}PkUrAkCyAt>Td%mlHBr5^?QF0%msScQL zHrHTkjstJH3;4*wDe(X+;X}@9@21sj96D8_sW$!_uUBsCxjVe zXE?Ls3GtOQ>2yfnPT`dR@S>XJld9%I*6-U$YUY#9176Guaf zh`J^*umsWYI{(hbIIdBlLWOEh^nr6w-eIu(2lQWwp23IXnlTWZN%*ZZU$Fm&90a8M zz{ikh>$^$6YEk?}<@CMpJCp?c2Z1x%oPDSF9&M6dkahcH->rd<`wIVw^sC`}8HLwVO}+7<4bG_8(@Z3PObEu11DHwdc+HEpnI zf_rvM(w1^8i-g6tYBHW=ExJXV?TaX|3_?l^`lGGk?xiL6 zvjkDWm4VLRl*R`?803Peua`Ice)?~|)%Xor_!afv%>lP@$)6~68XS{s)-q(_SVs5} z?sGk91DgZTn6cU{NkRTD+=l6uv+zwVS{$~S>cG3e0Ijpe@DU2f!L&nM9lGce%;;^v zA&gx`Jvz$T{2J)-5Nt3C>e^>3y`EFV9_ppB{zuTO6{%@4=@~O_Nc2$kuLjm>(IWc; zA!T~bP_jEn@+eLg;$kw6XtPbP@I0bP2Mlz%?7};uT@Y-&I1IP3^Dpn4UsKv7aE=sR z>s?(;4`62+H~s@_(Y7+lDfYc_m2Hnrn#RwOt;8wL5u56_$-X*vyI;ept`@zI`7u1A zt($m3qE3jft$FjamS`VJ-KJHvjC>5YC0Yb{w(0X)I;X^AE^6DfOQz@tn#~4fcG2#b z*nDj&+Z6m>n`>hFNRLUt(|tegV3JsKwt1Y4`C62Ebynrl81GiM}B$-tNL znkHee01u|WTW${zkD8ltqCKw*?0^jz+qP}nPm7-fUwaP0Sn)!*9#yX!_I_8}GG}@| zoi}&x+zu5hvgtI@S5IjUl-zHe`IdiaYXM(KNEOQ5LM97XG}%wP0I%W1vOLzD5HHFb zNe=K3tP_7&h%)Dr4+JcN?4`WHndE%|TSp#NMFj>%6Ea7@;JTr>$KiC+YM_9j9-u-3 zr;yCIMGTd0RilPmeey&C8LWx2rKnEnnFKn{3U{5T+IOf@N`$n`qL#js+;4A&FomdV zfD>xWE6MS*X@Y+aAdYu-}{s6OzUZS>o|Rp2stR};0^%( z&4F`n5;|zkx!=i?xAViUAogw&UFf5P$hW8`&zVy?ZT~ZyL>b>t$5ZHM(6>9d60xUF z7it=qS=ElfiGGJkg05KZCV!F_LZ87kTF?bAe^bADh*d;z62`SMWww*JRUAM`*c~wc z0Ev|joE8j#6n1<7|Rl!+j#P}k=nZDm#i$-Pb` zXGw}B5QZ&AFdZ(xpt9JJ7BAeVW?6>^|^x9;beE|lo&Q`d`cb+pm3RL0wQM$d?7*R5&G_dBy0*|7cm2%OMCk^) zHjMGo5E+JzpkdlbySEAGxngNY=$Rc^u2`~AHwbMM%d)6*>d+8`=4%PE9>^h8Xt3c) z8Jaq69_I)Sb!8qC8qG-sglO6rVH;7=SDBMGsTaaq{lLn=tWk?-OuFnO z3?0hjBhHfR01RaAQ{VAWR@2rw#e~N=Ev&x4G#D_L&`|-QF^+qlD(r;fWE+tG{due^ zx8U{-#V-na*Ob>@s3P$q@pHI+c7r&=zLvCkP78C7<2DDoX(hjH3h7T4*i3FnK0gDJiU9-?%f;ltqwVd*Ls zUHl=&6J&b8>j^eJ6xeVF9+*Rc%_8wt6cBnyj;o-_S@M$*sr=tKn)|+7R{q9HlW1ih zX`jla{2%X|w5vdya2FA*iM5@#{9#0IqJUL8O@2pR zHf|`@tfqi9(C{gN>0~s3*RN-T{rw@nJy<=2W>_h72v~vXdd`6MPTL5zXh*i1jJ%hL{7KBS9B0Ut;=o>%tdILJ z0`D3t&8<7v$VY$BQO zHkdq%jBPDIDF1zO8TKQP6Wl<^c`;rjw^IT%2_#qbjD$8fuead?=V~HJO=0HFENF)!#?9K2Da(BUAo4m!G#s+Yn)HoH2b^ufs_=vm*!Ti@+hTF`gpns24s2K=|^8vM&?4eR^@9 zt@|Vxe#Q82=RmFVP=Icdsny<+a`lIb-=@?M!HKDR8pG#MG3HYq%ex?Jp;3}uL zjKBLALGLfTIDLeGp>BUaA&yObN}5qTUzHZBmu410N|FC~ph5z_W73Lp&XrNsErRoOCYw2qi=6lT zV;8~t>StP|FAKoBgiVqeXs3`D+0Tnx^g`vSuc%P?4N1e=(5y%PvP|%vdJa{m7@;BR zSfVXSv{58=71M={PL`Y}$p&-$V#)CyPtt&AS#-Z}cgxRv4oZi+4XK{r^V0uzx_Fac zfBp3^aX8LTsLs~=h1%&Sv+K1q3>WF00W-G_I=Rlr9($jJt|`Y_K)~=pg9dr0nuAG( zCSVCYn>($n#rQYVAUrd1idD2X&0w)MI~$skuRjFyV)Kl`AKe3Jv*eq|JLU`+#Ji!s z65QtifV=XgM9+!AnIqzmLG8Vfkv}b?L!c3o+K~oRxj!uFmTfxJ<1igG*=AABKC=oL z(aQzvxBU&T^KbsA=4}LRX^;$t>iw207cBp;DKQg zGdKWwD=>L*RG410>?70iqB;&AFBwJ=+0D&VR#(d=CO)7k4Uj5(Da|@TDkOCftTzML zNFIYwELn&SqlRew;8!(npyng0UrS8|*%S7_2&~+_i(uNhz@(M zn92MACQZXnNk4Xd(loqMT)^B^j4$HE}g<)aA(&t9B2&sesT#LN9G&4#cpUfu@*LT{lK~%)~Dc0AG%D! zP;3H>m(nQGKNFcc7oq7X1{Sk!ow$mkEgXKXT_{6`^Ip0CUvi+)+A~Y#0af1)BSKls z59<`nvy5QvImVxgip6|kT4PWJFEsa-LDg?|pDp!XI2k^OLC|8lB{Z0B(uF49!VRQYXt=k7Gcex>rAy(+ z7nUujr)4INf-~B}Gw@Nikx6mb9EhVwzY~k+@@lYbe9GQG3Zu37x!&OxafH(J4InZE zxxsnOQUI8J2wtYfQj|U4zsO~k8d^aZQl_N8160Tx_E zfi;M~+gky>cgGcNxc0vltHp#s z6(Du(63M-)QUuk3yH|$GA=H?J&lg)}hHzu`#v{~towB8*2aIS@MjR)YACpioH8MV%$YQUGef&=du^9%E;)qmFb5i~z&5N4X37Re zZxC}DUMXf(*dV5pGKe{Bc91py2LTnlZKhNYl}XVqt+OpEsEcE#nfq;`QWyxKotmD{ zsQCiSYJr93aEck(3BO;|0`a#k+4>aLem^zcmOJ)9{}uiQ6DCYJIY>-utMB(FrqXeZ zr!^R`ez{Yju%lid+t4EF*sv-WqJyb|6VrOxFxXdZIINvIdh}>-`)^@j&;9()w-IUp zZ_oCCP`WnEob-KfIy9prr9a;?F;9!8kUOZZT zrJ<*3>CgFoP-iW&Rrzn$==t(|0;_pi3#7|-Yixp>-nHlK-0y9;;QiQ#A6E6+NNwNm zYS%of2d6#CFrMGpu~u-(9ysH7(4uU^U?5d)0zLG=iQTlTQGf4*tmlBGY8i1t-yano z*<$<;KQs>U=CxkY@*K!ty!Y(cr%ueBJ)5mu^L;#UIyg?xg^l{ZV5(-_0YaWAnm)~*6EedU0^{2US9_{jQ+EhS zZO%wr#0TkwJhmvtQvvp^lCccSBHjn+kfQMe*TW|&IzaWGz{Xa~2;*_1`$ZcwEQ@FX z(7Zer$#~$7*AP{k?+X&f7MqObOG146WRWT*?3gL=J8#Y~yxj!LIZIX<) zE{Q44Fl@v`qKqY)A>TkuwTnF^@7b&{-g@LgK89f<#*ytdiuKMk4kBlnPU@m$<*q4s zh$yN#5LiqUZ#-aI$Xlif;d$}CK4vHIDdS?0l&v$f!+LB`>%Bt$%Q;Z2Y}wCSHkvbM z?wmOXpds?8pY=;sT@Qyc>D9XR$9nI-hP%xTEbTD3Bfk1fnKMw2Y3tVYe-m6Sosr*H zpJ9{6sP=O;HcY<^U8;uQ5_Kysyu^Af%$?^s=@PLT-;}Z>+i4F~1uRU49I@nh57yK# zBGx|Q#Vz_DVg()7EEBwE48Efn2!n05SX<7^n>1jDO+Wu^fz`WWdD$0}E>*4Pym|9_ zSL0u(MqR%>4ugc$#VoWZE!TkkFo_2)GwkTvbQXoUq|;vpCw?CSe84^XG<+NdrD8 zbQS9(1i1qx^J5O|-LYfG3Ew1%R{$ZH)HIx*I4Jzlu`GQ5*qwD-JcZzZ@p{$bsHhBh z#Y1`e|LJht;$K>tF|Yk{U(fG=GJH1W>VFrI^q52prxvp=7o5G0V`sNVumP0E%7Kob z2gpmYbfZX>V5I^KsPGPqRSkMr>UXm&8x@m+xjxyoI}~<@*(%lHtu0{PT{F`L_k_@d z*=eW9;sm@xf4?~um@2rLh{LNQ^yyOJnJW|xb9#kg79^r(g+rS1YJ5sZgE(SxpQw#`|!hpsQe{y zk%VdCH~Fxz4wFbzN_Z`=6B&xA*9BOQNU>T*&<>IGj$!3drTVjIe zEMN86Bw`iguv8>jF*FKLrN>=tMp*C3SfTZ037k`#MCXQCVuEM>+_?L#u3@q>W%cZu44 zbSWGTC}L+>{+;-!H+CIzZ1Jfl5I1O&iq|tdlK>2zz}HNYd0xTIYlJDVZurqooH>n= zH;K<+K_mXjq`2pxFudw@j`wdTTkOymtho;z)JTu86R}nytaLY2A7yT(G7ZZ$;a)xkCc|Aq&%Kzb)Jy!6(zx+3p5x zH{T=-a*kQ7(lmYsW*CmtYbqFo@Udd=^mItlBJTwS1!3(%dmcl_65+Rl-)X;n0f8yi zU&mhHJ0q%od-y_!&pVmvu|4yxO43LClTV5@?ho|6jf%*?T2fEG4yd*Agm+gr^zq^o zY1$l{J=R+{NSncOY}8PE-@`^S-fA(}S3YV`1Z8fEB(%t`*jU zal1m2*(U!Sf*)^R(`DPX?SI4AaYcJ%zD+3me5?=ac>%_4}T% z&^e>Z!;R7GQn3%L&>@|Y9=u@)(z%H-X(Ir0rqjlBdOehDHW12I4?kA+D?RWJVnDAr z?ar^QrO1VE;ni3y$G*=bkA8btMh5nb#}|s1y8EXDo0f_9!C2ngeMAhlrR~mxip^T- zY**MNZs1473yg(R10;GR?cLAsLOc`Sv1=Iq=nUvOZNqq*2+@5;_?s~}u7U(Z?{_ND z&7r>0`yRPpNTvq74>O;?rGU^a$#k4kc6`@%4IiS=&tK- zj=6*|ebo{q!)oL9ChT=0B}lMkhR25JSm7q)n$$p_q_cVpNpOJ{OE1B~wWzK`(^zac zNu$8!IQRo@ffWFFN>Gk}&!V+@`U_a$+rh~_^&W-$16~i6s!+{oXPbbz0%#1EKrrFC zAh_Nr8?5*L09G%7NZM%j7`^iU7jmF*jY_Z8sL^4`&Mngg=`JME`If~9Yj`?kWD+># zWXTqiBpK@}IhZ!DrVzd*Wd%_zij1%b&a<6dSB+_*_-yX-iH~l=S+dApc)sQ5Jr~uR zi0dS)u}0*vGM1gyYZB2$_1sy`T}1yt`503AO-F>PrhR&uyNYm4=W)w z2geB5o&I(8y1x;RZ6v>%jhd>7NoK#s(D(k;s%q9?et630B7oq8O#C4mo=N2#Lo)t= z2uWO#EtqTTTSBlB_sItqrF-&CT|B-~MO1QB6h6njYNg;f1cGDsT_&kh^08X|=xIiJ zzK}jn#2QV2Ti+>mZ7U|bD(m3zYo@j@)H9cUYy-Dx!1)DqSfgyT)wnBEym)b=5%qBZ z&hl@RyIrs>f%$r;V)7teEVuM9y4;A#3X!Q9F@Plj|325Gd-v|rR5$T6&hOEeBQX-) zLmiI!pw@l9V><%?u|0IYb6Cm4j|aEA2AsO{n9WXh*mkv^hlB0k+AN~(p>~S;J@nN1 zZJ*ygl&=Ox`GsyDHLCll?U4RZw))s^g#k$i)RuFjEYa-_V0ZVk>4rLE=HchmXyRu@ z$e{<{eY;KEitBubpC65_aZdy5dC- z)8AH%rLJAL$2PM36Crh$5hpOc#diUYf^|2Nm)W8nU2WNk@&ZV{W|#|7gP@K?1kHIQb{P&OMrrL$GUBB>SX-7x0Vv}uHER2c!z^Hg3hk3 zr;qC}7^>5BbknA#b@A6YJ-dz99Av1Sw)?Zy%ibm%7n{+4Y}35h+h)u3g3TSKpML_D zVGM@x$bSr7?HF-fYa#19A>^C&_;EVfE^FU-Wlf`Zr%Q*-KlCexP>w1|S7nLR-$N9W zUQ-6@yqGk;<>L~K332&(UrZ~WW6=%M%^_KfWqGzfmClD3DOv!zUEgYnS)Sr+c4d(# zD?Ny~49Pt<E=_7@4K5>emcWPH{c_}+)Xe+yj~#1d*rR`|ran6niX-IB znz!HxkiDvE*k$8i>nplc(^QG?mYJEE4Yo*udH7~#sy>JNU{ZlqC7KqZ_@x50%uLk? z6JW;`CPzKfGAAoyxiwRX!KqJJj@d@cL|drEY>`H z-xqIJtqNssdwkhwbXWo(nI(TNf3Y8DRtg_sb$|1oX}~gRc^YK?X8C!~jI^da%cMOg zd~bS%=k~Cw0?%YP?n%e5by!jvnQBc*3)9O#i^dV!mXx{@_>#O)0Mc7XPpJ+tONC?Q zfNC}KT4afGHM~l~HCWZui?ftEFAR{|W9)qBiu%tVBjy`DO)t&Y_aWAnd2$Jwg0+xV z_2J|=klD-jV%uflFk`|Z_uwbmM!TZhW$YS|n#J}yn`qi&OSWzTb5tOMP13NhB?u>Y z+x5R#^5AxHhnHNIB{IV zOxpjeSOM?Ex^~$Y$^W;5AEk7~{PF!!I^F)Sx9oiCUyhvve0T5%Ja!RheWCO2;DsDk`>A6L6s;DzBc!zBj?PvWZ1{NAwtX6k#t%i`j+vN9WNzZ$E9)!0x% zIcR_7x_^ zc0^G*#~gSmT8Vth=}zAlIp%&&iIqG~A-Nu05Ki3zS$JCrc{)9V(2GU{S3hh~ZRDLn z!V3wIlW~oZzjG_Vc@U%z_r{x|xn}}+O#G_rckSA>S#NrKkkE0?4+Fm>Ap!o74ZPwo z%5^&10FoY>Cmb>Bbm`C#W!=YPshhrg>{#U|!7BW#sJg4KHv*5?>8%kdHMm)aXzy zdqi6?r(ed422S4Q=6WpynW0 zAc(AB!t=&k4`(dYKd^o{y())c=M}_7?%}ZvggzqVdhb!dtM!CzV<7}%2pI_w1NSKW zr_eb*hDqq?A*Y_;J>qZlQM%r4yYW7kC%XNvPd04W(4PzH75V>~1D@Y4N+mlhi)O0# z-K$>`WN)^=F;K6bXVLTI@O`+N*Vd$8js5cEs1>M@^oTJ9+@{;HI&l~`>Iy1HXz#V@ za~$hsg|`9^Z`1|O3iPI&lJE-8wxFtMxYDl~_OBDN6UV{Pm`6Rg@ip{1CFzV{0hOQ;oOre)q{4!rOQ;Yisl564o*Ls#ZQR@_MyJPl_h{vxgY+yRP~)u^CKPw#6c zH3;`Y`9=>DK3Ik9e=57kXqc&s5o%h9Zk{o4pbR*Az#{Le!pW-_F2KT=t~>%GC5H~d zs@J+QM??wyGf z!bykQGAtLdF$k7= zte(^L6XVNw0n}F#zCUmoG4~JfO*B}3P;BTda3^QE&YfnpUr|;LZ zXM1q_jvn3Bo@t=KAm!2wv$ade5&qpSuyF9;!3%~C9(()HVyIunQ4X0c}8YMas6yd;GHbo-6A;8RC0~uSY+d8>OF9W z$!U4*0L#GBgJAGN>PkLHSA9fi7}@9cL!{mY<#qFgl6z;LisK|y&TTVEpH!CDc&X?b zlh-^xHCUdcx%$1bpUJ>3n*Q2{%G#&UN!6X!L)5%W!XhJ^f5`2h*5x{9l2*OSq24m= z7jm4w5qn88GaaDo1(OTzFp{2_BzX;gpcljyyG-_pF+rssleoUaNV0SqY(NT4!f=Ti zu*OjATPgO&K9YQ&B+Bxv=p&Nct3e706cr1PA}P>(`QS=|_#TcVk$OJvC65HfaH7`= zu$w`|f=T@%MT(3FA&>hBdIM+z2*DweN~PY9F@!w)ae$!oZ(-ypAy4V&y%(JGyMJyD z?N+j`)L%F`8pr(=fiKn^!BoWV6Mb>&M9&YaqYt&Uskoe7Z#d2z=WMz7rfL36#p1w5 z7d&U%KOXYa7wPzZuMgiCe;gVH_|{u?i?9`lHV5v}|DNFBxXr6u=-n4XrW~vk!dY3F zX`7cGUvvTdF`I14^KklC@05cN36`0^*WVvUjIzLLVfeU3Kz)Vr=N7pFW7|7)NW%|H zTNrE@HD*G9Q*UD$zT<5{2(WPmRk&Uvj$8hL3!+z3ccG;F`kU8MA{yBcxbq4wGA&x5 zR4Z5j`+R+Iy`N;^mEdgl@Bo?v-VH6L>G>Is%Foz6yK2=OCdc-y^!MbqZREewdu@m^ z*)=1#D6vo3lQ0;$Pl++#%rKoq4>eZsda|^prkXv-a+x)qcRE4Y#D4SHex=$z%Ls5p_<@`gfR~Yg| zrB@X{R~Ba*@ZTym7%l6Y4fabmSVUzNcnQbVQ(=WJtyMuUH$PYLPkuPHAZY}j%EI02 ztfYG*9z7$mT;=ihMcQT!+Vokz+J{MNRr2C-*@)Q3lSc3S;-EY zO0Kdk4VM}^7iVk#*!bWrk@c8m*r@sBoQ-0=ky)Rx3>Vco%g;q{K7ZMs5kscEd>^|G zc5o!-;VfC?D&l4NIZvH90!4+~tt9)ECijIXYgDvvqTJpK#qAWi#2jzu<6R+uko#<* zYl(bC*0k~c$s!q#uX&=bS0*}x z>%+Pv=iHv{B3NI}a&bhINQeaUMK*B}ZNYO!DejFY4!{?=Op!}v<$WnpmB z;=OOVhL%&f#5=1V!YKf95TVj=M8GhqUAVLD0Y0r5rZ0LHUuh#(E4mYhsh6wV=qJ}g zpTyvm&|jZMcqGekm`$gJ33{ssGxHSZorB`VT9J==kF=h+-{|RuYgcDd{o)G zgsU%9CQ+^MyA@S7|AY7^+p8lJ6S8>uj$aoqo~w^LvT`G6Yad)(bCwTO$Bf?>En2jA z5j}&CcZUw~92cD(wjo$qpP;uALq}JuR<>HTY6V@!OkXp)L=J|`N#Izq6ss*rfjHh@E#h7-;`!fW`@C|%kc zHZT3&A-@cJ*?E;mZVsy~O=N+k=`c2$E^A7(hH%n@1Fipa4X^+@_SDU`b?+;KQw3YDX?RpfFl3Fr|IRSL|% zNA45roMM;G9lvm{EgVQ(- z^WRFzjcEfaG-=X#R(N1PKBnK&)+ybZl8#botZU5J?&`lj>japOU z<$e|qxbcnRJu7`4E}%IgZ>x;eFQ7?jD9N0fkF~pScaZj-1e>Z|FOGT!X<|bQPN~Dw zK%;{3(Qvv~HQ9@62t{f>%ChXLrd|HZlQZTdr_vpqk~?`Q-0(QPOe;(tXzi`^VxB{C ztEg1tDE09SbgQbUSGGKRCBVg}3?+((mlLCeY z1?an1wZpO>zQ~*)4F~m>L87IXkh5Jnb!H@V>*L1C6mNH^+Y4K9RyKO#FKY__L%k*; z>hQWjA!(ZDpXajh9G+*=1cxfqj7R!icalhEwCmG*6bp+z)v6TigckaZTW5S(V5yEpOa^2C2`3&!iOeO=seH>#?z}7wV(BlGasNg4(k)Pp643$ zYZJ@WRvev41->OM<$Az9azZ%=jmS-Tu|$oLbIJk)1qeTnGWh>@pit}{vW?F~748wRj zi*1fI#$QTJgqmp+gVjlQE^>f9ZwJGZ80>4ud7UotkgP%%QkfB$f!NR+j*sL<=P@&J z<>SPT7(RU`u^%0o$h8|* z24Ceqq~>w>>K9NARJw;#-ei&oL@PMAHtO#a(fIaPJcLl8nF}AomlRM^gkEu!IZ)pb z;;91bD|acv_COe5$wp6!mAtOjLkF_O&J|DvcmTGPs-_BDONvs1EczzW22eR4^2 z9PGn1giY-}(8q~5lsRv-*&s6kcrK2(8}(~>uT#W_Dav(;DplO5M*d#+XV^42@6Zr+ z6QDuX_nfqi-0`c8Kxmbn+A!Zvp$HpQ;F>uXVK7rhSzv)x+bqBCnUuA%s@|~4_1QuG z{>waL!b!-{qsNY3CK;EVwX#dQ(1c*xGbAUxT|AescKdF)ZKQXbpwcS)H>Je>Dyjk2ztG7)%g4>fvl`gKz_ zKJ_+nDwqZsc)QUoYT{tuKwZXzGCf9xI$KFMAAAUzzR@VC2MQNP?v*On-T!c|=I zq=QvRp)?7iomU*11AQKEqR!6|Ar#knFYAR8{Mjb-c5Sd9f zhg#=YE)wjjtm-$4dAUTX&{AR8#h<-A>%#1MTPK3;|>C^~(nDsW7eU=+DP5!17U zMqi8!wGC;59|8V)QHpcaE_L1<-ynT-ObP+h{ywN=UPAs?YY4gLfpX;#(w4IiY-Ucw zcR$|$8($*i8V%C{mz&(i(=g`OYu14c&|MJv6koz;xqh>IAWr`n!tn^fcr)9B$Tc3P z|3ITqkDltp+AM+bT?%~&2MX~Rgf<rWMHre*>T7ivyZt~bWTO+WtxY$DGy>A6@rZ2VaS zz9ktUZC4R_F3!NXs%gUY9F!h#73OAc^_EmFf9V-8Qrfrp^5nE>o_WMK!e#kC-B+gR zr)QcrmBzBfc0J`iWgx82q3&590W7gcUm61^YmMfyGKN9Wo1jDa2E1vBG}Y~m@7J%N z!J3aRSicis8BrthTC#x{TeUf0w=DoRf5MV*3){qC4R1gY76xPeHoXBfbPKx)t6@!> zwZ774B(25@gcsS?2|6>u(xYhzZbiXbd!AB@c(wIv*N+4;DF&Rr=pBgJt_EXUxY|m0 zbOu6qmQ945q0q%6_!RxHZCHi-QK?j(B=@UcW)U1&X2T#FL;vy%_-nU58EMZmXY{MS z>-0!4Cjt#1-lm288$G4k{e%Ggd=TpBG@}yxJ30OjDJY#I4RawkK&RGVd6anv+>)p9wxhRxEljKs;MOuAO;NYkr7tFFh^ z7rZgG5`&?<*Ah$y5&F>Q?^xJO)8~8^x!2$1I6gCd&gTl()e^*d{SC}B{Bui~yT75} zfi)I{*sCzy4hLJQg9)x7E;;npwI|hVtk@)TN2P=b5iNwi)+r$EkGBy&U|O1ySA-uBBd3WS8M_{;eNF z{;(L|F~_MEdO!}j#ymYk?(5bK;jc-Yy)Dp+477}(BkZ2X23dz)SZo+OCvh~!g+06H z@>8F8tc#8fa`~xmzfF(BD#ku?$)1a1+Hzl$?_Aho=0dV}Gwf0O!g1Lp*e%#NlibNE zdq=zchT*UHbq3kUv?MFtAt{^dSF6_dRxC-J$w2VSEJ`;9Hd1_{fZ|=hZCtV=(rEMw$?riIfQHo<_`s+VO)+hq46Cc{8PZaL{RHJsSp`OImCa^Ws$VvG zk2I~lEH1$7gS8c|)(I>00Lvy(beUDyanF;LHmSman)1lauQlzwDaSplCujkB3DJ!M zpkO(zX-Qj8golS`b>+a)muQ=awwG{HEfy;lZ7pJr_?v~$9{Tf~J^T?ku6jV|nucTA zE3%|n(gCiX;|#ylWbU>5r`DI&jPPpGGUT?GH2o`5W-f`kZl6bTiLDFCgDQ{sNm}O| zCI-9r_bz$UH;as;UO24Gi8?Mg`VM@&zp*i9Ml)^pjz&A_<9{vV_Pm^szr&l}a4b%os4w zoNZ=Y+}!0w?in-5`Tvf{-D~Z6pG96rxV@!gK=m4Y-R$c14*lU`a90V|s`tJB3nv&JUD<^Nh;^K)V_x z^fC~F({Biw{U+*<+c7#oyg}oC0jjAwAbE$3%Lt5b8j}5n7m>c8{cg#X$(&N~i=8dfQueFK#aqk{8trAXi+i zP)px!EeQ*KPL4LPI5v;_nteCdd?PPgY-0aDFAOq!dwV%x3c-s@yfGP|k5I!O1~o^u z>A<%)4DH)NO1o@GK1EI=7BZ!d4l3ghvju>@Ty?xSP$$6|C0!pjF< z3M4}$!Y>P}Hg(@FrS2oXp=GsZq3t@5OK{@|aFO&6)~0ZnMOF~?Osv8dtd%ke_L+Mw zrZ;p+9W>{UDOyB*qqUSmrAy1uDUq5MbXe0Owr$(?A!D}!>`62BmeKxG#!*{an??iQ zxq0*Z??&IedFv(&vAQ&ihG>_+%wy58GtcrPRI|FREuSxx!E9ov;0{e&WoH=v<`v+% z8}{olU3LR=Ohz8}9oQN>vuk7D-jNzU;c4fY{!~a~%5ruH(8PuZq@DP{B=~2M>OALP zPA`HM&#%88z3y<#62U1$rI^i~Y@yz%PGCdc4F+gHK_S33z0Wf(TXOXx0JV8LMgvqf+o*heb+ zqIIc5c!jDD@O~OT3H=VK+Y1w!+?1#(=XMDPmp2LS`L_D17gX`d*Yb~xv+i zj@OBL24@(Kc}IbLn~HnOp$aEb@hQ35hZo?qU+F7f@ffX&Z*lR#Jlc;ixlb z&RoYgdWm4g*0g{qHWWW9A%X_S{Q^Fy!eGYvK{i-Y3pwc4Fa&3QF2RbGY)IEo1PD+e z?}f%M7~-6yut_{Nep>vvhK=d;)|(W4JM8|XNwRlBlzss@e|%9>73;SyWbIO56)$Hg zvHMwBS*cM`F;V?%aBbGN`X>Me4lY;7^676M_o#M32QKyPOR=mh`(SNT%835}YU1kE zc4lN{rQhjqMe7HO^>vcFDB)TMK`r^!abm@{P_T)qNHNzyReuJfqxmaMLBy`t$WAXi zY_L7NY7>EaTF(rE>iHPMO3oZ|EoYfQW9GAJ2tt22bI42(%vw?ma^}t*Y9T8t+SXR7 zc|&KxA01;4&u%z6(Le!vI@)E>h|s%D_EHpQjj>{A#`M*5`$;i%dx195T+EXIr21whbLK*rf1L~e?6Y~CzE46 z2T=|9w^LFgG@~)Zw|Yoh$~0~Al)RoON4^8eac3LFpC4l>_x6twPtuG<;RV zHC6W__g`cmFK*JF#L?9BJD<6Fe{GDv{7!D!hFf%WD!E&TdOQ<^Q+V6sSmR^%BJo`N zrB*EYLRZiGP}t_z6DA6}xAUx9w*$%IW0I#&8eA9kJR>8Or0V+2pZW_IE@(OzSGBIT^LJs9Gv)l&0s66pmGmH6!%BA%Ox+x?kuU~!61fIj;{dAoFyOeDR>-8dvfl5yFr(~ z_hSGrDBi=eez2fntV@{jm3~Il7lOhx>stX+BR}| z*5sFB+?3A~md@k7lgJvAAXVF+#69o9iaV(RByC7>X@{)vkc{h|QXQ1<2)SEE4xxEu z1|T(;MYa>H*yp}YDo z2cMD108b$vIwR+y+hr$4eIf;dV!iSh;|ZIk4S@4C{38|`-Nt}3dbH6-i~Av2YAjzr}Z z3!$QLb8Zj4RWIa5eP4n@xO0-6LdEakd3DNN@)L9rDwv9A1KUT24Z-_pP{|UkQbJs9 zfX2x#oBGl?LCQQci3#+}BuX}W<~%b=#G1lrr6jzgptm>yUy)%KlJhPj&$^iBJ~1}W zXP(3%W6)liUfWc>xEw;#c%lLY=xS{_W`q!c|6+o&69KMkP3>&m|Ie{)f-RHLIzy6Y zCitKKd~4xSyrZu)o)cl=0Jshka7tFhitp}d+C>R=apzkIxgF57&qUDZ_*IC&$3)D@ zd5{e@KATbfo=6 z8QhAMk1uD^{M5T9T3UBT^Rl-6i!TB+zjNT$a-EMPtr2n$*v!bAM4WbRYK%sU5z&pJ zp~#fyJ7bX{ob90_Q!Djl#Lt;$Oc#qy>pmD{Dn+&7Z5 zyd@{y=nOt0`=XKOkW(abjbupqmkZ}pal#_$h->+cXO^{*=qLhz#nyA+{k55ypUUzg zSMx&|si9%1UJ|e`Av@kexzAo~D1b#mVkXdKIJ?9iC7P#=q4M7(XJ($D%?i6)8BVFM z6Q2y8Ny^#*@UKkmT)0^f$!dkZCr0z!B~UM%JR<4mk0R89+;y=HU$tR7H|gEb0wQL~ z=8MzBWSHo-Yz}joOQc;LU3ChP*8>#nrRx3x)|R+tC3Qo#Kf@eqYzgUTlVrTPeAH>E zOCHd{0jYC4$`1)h#a=#U)yb15-;J3pbhh96Av_}swxNK_iswc*j059zjF91Mo(!ez zUCWkDEwP>Ovl<2FjVxC#FUY%}7xYXk#f}h?*4m_)XY<3bapFscWfD!Vz&4K6CdE9z zN+RS~35Mk)N^MUhiJMBwpgwRVYvLC&1l0{8Y0?+&A52=iAb#=@=W>@a>a}~u7?~$t+vQi5B|tJVTXuv z@ijW?g3g>G1d#m-1lW56)Y#t}$sT%NdE0%DkuA#7FDHkTzkAq3rhHy1{&mb=awOym zY<3e^7U?Oy2`+U$mwU+P^1rJ0zirb~dLFQjH?GS&T~@8Wiu{jipm>3TZMt5?_}~yx z{JS6=4U53(2upO3(9&3@^UuxcK5ETgO=!{j2F#i{^L70j4vURH6U|z5xo6L%9e-Wm zE_Uv>Fg0hW7h0n*4_Kt@m}$asz3V~mFJis1YpNq1gFzS9w^v}WC_hm#-AIq_+N4lJ z&9VBJBUnIRPNf&5tx`c~w5ELXDs}$1fo#*4&{Ke>WN{{(^EjO7JhAU>{JWz?nfDM* znNS#JEZe=+Tu{t+0Bb_)-;#JAJl|P_5E+M+14~}PINfXt7f<-LIICF)S&1+xqEXF;CBklBt!6Mn(tW7w%#mvjM7$5c)uymvK z{T4XIYr#UOKNy0_gs=m=;_)LpkWZstI=sLs?{jJ>Cpas+3Z>}u9H$NAA=u{)iec?n zgR84ALuw1+zK1A#S|hu1e2vsG1ln(gDU z@Ikzj!HUenKV~-R-57T^;|SFTUz8(EvPle!z3~tZ$?WRJn!zmDfgGk_jhk>&Ew!^i z*e1IGHQO45rC3f=4FMKa!=eCNX=Mw6pSwRyDC@5p#)C`>_HM%#F#4Eh&YCsr_h6C5 z4gk5ePoF-ADIdZ^^EUUY^kSPHa}Vcm?SIA}8{XB8DWog4vtO6uwa+j>4%W8IBdreA;#THR4`% zYH^LoYnYS;2OE5V$QulEqjRBSgv^y09YFf{gDW~ImOm^w zI$?}l4^^EM)jL&zKx=xzO5~Mu8`$XNt-J4iXrHAGwv{qu%JPcm6Ai+w#{E1|m z65N5GDQ6nKCHIx3FA{3KpOm)$(?FH6k$8?Gkvend-g%%LL_vGBZVE+I;CyT&71m!1 zRYAEgtFeBX8Vl330F})!E!F)(aH3YNo zO>+k))1J$U4O-fdY|?;r+z&mSW&TAn`P8}nhYEiVDw>vL zJh-(tYmb;dX@?g&)&`-Pbyh#qG_LPqtON)cx)F?P5o4`}98LD)dsI=M*M2ajkev}d zHu<@M#g5J`AVB($p0#7+=rQ(}&nfbX!`DFhV-cS@ItOkMx^Qx5Eop6LK0=~kVd!;Z zW{NlY4(tplvpzb3#7-0^$k2ZBqB=;InzJj~@$R`v?ihx=xCVpH+iPNm1owBK2P{8% z%4{g()KKnNqNSy!1%2Z9g@GJhPD;ZcuklKhDi#D=NxwS$nB1@A1dVP^;kD#$X(woK zyeE?*(mKxxEwT3qaWwY}Y~Q~9PG{r?GYVrwqa`7ePiBmdAtXWkt)MJ0J7I*4q8hBI z83Vr9AVidPV&IXv`?PDRi`8#Yna)3(=i6)PVa9<9TN$ryf^A!P2+K0#l~3S^)*T*1 zIv;sd^*%lY&rsz9&zv(5kMLsJYDd$tV_m{;t{p}P^qBM8e+2yD(ctq0_tqoKpChpH zm4=_N3iF+mjIra#a)dy0pxi~gJBjNw>9$7bGmY`@pkbz8qQ)8a=ydPoLZAE&t?2gyCTb5#%)q3fw{wwIkE7Z`xfz43agnO&H z?cgND1Ew49hc>f^<`go#^XcyQ8apjC4sg47b3!I3z-7jq*Ovj)9n{Io z;P!hL47C&Nl%Pi|xr4Lh^f({t(opVx&{Mt0HS`p~o-Cz*i8c1{a3~G_Gl0so$j%RB zMJ>=^1U(WY?xN#cop04qda@>7LoB0LFNH$Z@Oyy9V4EQ42ki9y>*p}^>EDYm zsA^MutRW#>SC~cpw%hX^ET6_RtyN>-6-Q|k@?v4u@g{EL2QmJkM2YMrvX@-E?c}d~ ziVbMB;GK9U!AXsH2xVFY4jpK4Nsc})gO1||cdn1Q*ul~L12ZKLR)5XWi4n}dtfbGz zaRUbqyn$Vl4h|I83xBVVY3L&!S`arO1?xr=VLmh_CgxcTjHg5hrEm1zcSiMhcVd>P z&jyE{iDj9r)|&~L64P_*^-0yVyLC+?{PhN?iI0R^qBD#^eKQXl1L4&W`tsH#u@pEZqnNyxJHcjbAFItjxNE89w@D@z39SnxIx zFW%(RO`0@G*Cx^mdpqVPTW?;S@4>4l?R}%N_G5NcbZ3lz569Eo^|+sPER!W12l^C0 zX^zV5$NlZv?t||egE~4Z+vUCXtebBtX7^DJVrObQVGLuRW+=h=k(`91nbP*fpW9TG zB)rH}La1PDY&n~P!_VCX177aKoMSaO->tMMnSGHqogI3+Wn;M)@w4FwzNBuw48P(( zGnppz>unRuwGv-0%t2@gzE6K5nOnr*rQ#4a29Uw)AQ8z=TXUhK1^*Z86=3@eS%+jC^T!|pRcB`tM z3kR8rq2k8~L!mWnO&o*L*$H&SuA`&DiCgS2$}9YBNF6ZCFFIQ{OL zwUDOl&egkXxNIUvgIIHhX5E?keQR%*%FNoUtH&D1W}ffn|M0LV_`A7Ctb=3j?TrL& zlp+4RHd)YHp*=TVe_k6j;f?0KOPgy*7t{`C;q@A7rhAVs94pCoTb%E-#=IJOZes~m zcTO@Ep*SG^{pbbPecq( zTdJI!GB3(7xAeudkDPiY_D~5Gx}(OLX`Zk^rOjp@Mwqf*Q7l_fTKkUx8LMraFLY0> zbYN{6d?2O42fAIG-jqUgL0F8{T@yrtFrF!}OtM%serz=jOs4z#8phiNmPLBPped!) z`_%*X8zDQa1cZnun`T~K`~26b;=8g$41VBG4^M(xjha@9xB4--!OU9pvN2xpfd5%% zgXNJ+=VS6>Ll~$A@QRJ2fQLycg&bbR-+n?dieNmH*Fz}pEfZVi>_qtb1$=mV>vseE z*!G!d;T8RVR0DpUzW;tZw3o2saAwptgsueFmwjvEh!vc62GIUpJ9qAUaYD%YM~NZJ zTUF6NEDvMFpJ9HhJNVE(byP5b&?E6wHd`Wh^hKKxVqY6ORRyk27P+JL9@bp@S*AjH z-oaSjqXz69?TPAjhgN8Z z=I-MqV1M2)zovt}6(IEIK$BB`zZr91FP^Mya=Z?)eQ3#9l0Kns;jOTV6}SyY zV{xIkwVNP>Y!#Y=Iovi2p47Gp5SnP5*j4ZhiT39VQsU0#9uv@ecPv~Q|T4w->QKe<;zbzyQ6|=8_k_lmDF`cqufJmw z{MG-uVzn@cbthyvUyYXTThXpVc`b^IWIRlg^u7$oHHhJa1WDLB3y$wo{)qA({K+2l zQyF*}_+H&_D!*iK`sfx_830r6B?U~mNAq7{{OjLNo$4*MNiIgQS{%nFD5e-!gARgv zPbla;Qgy9B&r`i9u?#B-e%;O*ANv>kQx!8P2*IA$WxOSu0&J{J@i9+(Wnb+jMQG&} z@daAUY!6gP7N1i8RQ-JoHGEEJq`+1#;>L2v+~>a!DC6c-W8x^oL^7DaJ?Jg6#^Csp zc(dW*7RkPwxL?xC$WcLU2>ISfc-ETWXGW0<&m$Xrcs)2X7bcCX&)fqJzRhBq zsa+$jhn=}hw74{KjMqXv;MYaSfuEYb{viG}0n2}iT$|G)6P#oyag~&}w%!zKlVmlV z1Z{-Yt6x6Z6EtOGe=IreFy&@sJ}x%*Y{_@YwL&(<$I2dlmuLK+QJFqoD?CD0RN%>vEkA&uj3Bf7mH<*EUi%la%!_rg`EI~cb$uflZwKUbs7?oD5 zp$KzOC0Cw7J+gn7@IWY3%IbK2`|GsnSpin+j zFBjdP2OBsCO@H{%$WITuEi+xmtUu>F*%0z!x7ID}#Q$b=oEDRW9)csDX3o2Dh0B-SdMQT+du7x^B zV%=%1(qfy-lY`Cin?6uMulQUId>?qYSAF^TUvAjI9-S8Xxh}6a18mLAu=@cuZT)AP zew#LJI=i_W_f7s9CxPUCOm2j&STu4ZcPpytn+<+g@|LVqypSB`4B6?ydWEB897}WY zcWz%)Dxv}QCTdQJ5;=B1v3__CFw42y>}<6-6f;TGCT?j|Af{C;74Y+AeZAwkB7E z;%8HCxEVuWyCsJ;)3nqcI;SwW_I<`-+u(gWNaui5LN^v`91r_2jTSv%cUcIv1z~rO zqNjl6+-mPYJqb(V7`<%ZQ`wv$uNkFr`(kxpzfbB=Y42sQZq4Yp=*o@tjh))&DUDFQ zEnuMyV{)w3rlFH47_$SX&6Bn38|e4Mm_&K-2BU`x_sZk*4MlM%?C|`Bg^ajQc?iQ( zv`4~Rxg`mEQB^;sA{W#c^{%Yaqq91yk2_StapP`SIj|!2HhrgVFIZCls7S}Pk#sfw zTFD^GT9+$w?d%b2U27dR($VEQu4_nE-p_WqI_e5*UE=s=aj@a*9 zby=p4yIl1+5NsOB!AdGS>K3sXP)1(Qwh85QaVBA>jFHdc6cRB|Jib=1HAqj;L&bpy z1?gBEYDmNoDvmnRyh<^*bUm4#X~{Dtl+RRxtFuCF5K3bcLTs%|@>mEme=pK+bjYng z%;$+OT5oz9579dDT%8*Kg6w%WceT*F{tobibn-(^;FeA8gx(NVNc=*s8cp$Uaug#kQJpV%X=CjT?H&>aO#V#y?T8ULQ=?K z0RwjcN29=D)rl_~I&4x=pHDu4zqN_^`E;lQhWU>zBT}2Fog^1}Lhdo5eDsC~Y>NkM zGD&%hw`5ar`p`U^;$wXjK1--njwxsVuAh$<-;Te|HRSDD$#M+Z1@2K6n`^}K#Xb62 zd#+eSPzJrLJrf>z+rU%p2b&OL1Wyz=HmS@Di2Owi_CK_<6X0TgBV4hnNvp<@_)#uS z+9q0PxV1I>WwU84^8pPv;#n3|K+}}oZ2~Z!ZwU&KiJJDFz%t1!GwiVrlV@I+Xxg7< zT)YlVjI1c~UeW)f8Yt21f;})gbxOeNQ>Jv*72m8}7!H9yqQ9RhBRMJUDj`o#&=7Hr zPF|-mPsXfM1degDLJZgIC_TLRa3fp*32{Qe%;q}4RCkeLLbu;kL;nKnt9Z1j9-Qta z5C6jEeSSdIwgGw{+7urH?1*Z_>R+U%EPD-bV6Lhcbi@Nzc#m2SeK}TDXMBnNR@8@^ zT|1UYUrZHu;b)uo-^2EDB&*>0&OdGMgS;|#iH&D|3CIGF#)IlcU1bj=RxKly<7XLG>{6wM za_y?C#9k_((>LGD5YJ)$Wnuv|RO%w||05u{FA-65g304|9* zxA?vH-Wy04Z722;K!2mSdDg{Zd{4kEvR#}SLqSR`@2Fc2EGu2RmATIRI~b?Wu@W#M z1M#mv{IHQ0!vP_vGb7w}l-h##C}Yn!$6MDn!|mR;*?KJF$;kr8Cfh_hUul)ALFlsS<_j{_ z7Iep;=c|XCGkhJ`nluVMpXfwDw9?mG!Nu3Pj}>F-MQg51A?x_xGm}7-sU)-xLvvA| zQ{0T;snqk3n_zWv zU@<^$(s2JG%_l7Y4N?$1^)#ls3bT-yXJ0-_JxEoFL3&_V8bD3Tr%Xi=00D#2(gD;s z*wq*=|HP1?@V84`fxUfb7br8o+#(Bg(N4ox2#tNtwWPh40y{Ag{%rMa5|_mGBfR?K zwEI8RsWb3LjA6;pG`3Q+W0)sXjgobWN_e2Ve2_c;ho zc!FkG*IekGXuP4e0HK`VH5`X*kH#^QkN@in00dY%wVP!=#deDZ4LTq7mh+6AsI%o- zQ9T^{y3Mg-MV{f%=8z-V`+5eBnS}OWV_}q~p+^cl$Dbhtb{q42N)-lY_=5(`k=o1w z+gkM?ORu*9HHP+ldc}DwIkN9&_&3~n@3Q!?xUs1??HPI8Os1MM7*2$q z`Z%ev6D+uEN^$t=x58o{7DPV`FGCe-CtP=Tbs6=tI)u}X8YnAgy#uFEgth3?9`u*&aV{Vb@&Dw4|mX2IB?yR+bF8I49_a!AbhvxZ)M zlkl@UFEAM>Vli){oZwvkQcl^ z5W*@Ndmb3b%zL*#QNO;?Vy#}ketkLu@GAVv8t6W7V5Lqnshq!FJaXvJourGBwJ3`p zbcQ!{`*Zjgr)C?2Rp`u#F%_Mt!O2aSgBWKjbGqe_C`r;pPxc^>M^gf9$)CIl{P2XQ_{Y)sB zEeN{9v9Ynquy*9qm>lqSVnX@)!L(N&d2xMx>vzY%*#`_T>V@I`Q=;uQgnh>~KkS0% zzl}9q!=~BTA~?w;Q1)pDp(w2%E6T?68}4LSmKAS^H7o9jsNKlW88wHv#rU7;B%1I)Ry|&#WF905r$P=x^$7ODamDcCdBx-@LHv{@HQ;%*8}5Y z$f}(zb?eqWOGhP-kI4bz%D12od_dx?RiP zZn_(53Qd72+$xaIOg6@M>gCL6WrIfi`?|sIo!{hue*oe8>5A2Kz0LM7KCr&fX0c%# z%DwAr`d^3V`f5j$>Anub2lX3XYsd<`DgzICH!+?Cg!0|?u!JHE$MbqNRqCM<^MYKd z^cui@TxDC~Vt@%7vMspWa{Q>aMRAcgVGqMQ9LFMRJOwX3d?Uofs=+VwL}ruXuC-#Y z_6Ps&H}Q&a($~)>!C%W9fWAA=GAUnpEp0ZQ=i*){dl}}3UHbw&>_F#eKjze()2A*! zc)HliRMBv##v3;R@0!1hn+xrCUeV>pL#NHyJ8fFu+!} z9NPidBc@-=O8p5}v|o`CrG5+D!#B6Ygs(Lh1`Fi-f)Z${)L@ zz5kj2RBu^E%U$PkSt$q+PkZq_Vru^d)GvVE^AM8KNx*tq-vvQn95j|k2|Sa8bGhYf zPCy`I0J+rC6#U0smwccsvVY83CDv2@enIp8Duy2`)AMBWlsdhlSX-{Lc^Ip=@Q1qA zsMHGFRj&hStl{@mdQ-K#W>ZrX$rG#nA@WSR0LGu2aq;?@hc&D_v_w(dq&sM8pOZCC zMk)ujP5qbuTKwwoiiI0+PLrl|(LlYvEA-0U#o89Wt7cY{&l&iP%hzxD%!ekCCdZn> z=Us&btFaLTAHed}t$7dQ{aZCW*31}t9SkX*EKtZO~TV2IXQQay&`qHDC99L*4gZYf_$sEVdM;htje zGiJExEG?O%S)z*eHA`~wDoS4nuu$RWQk?96DN)wdU753;M2+n|U=KS82K*BggPS0? zK)D?TJ~jsgLku}Pi6QuCS-g*DFw{F_2}AMGFFjxr+*rx6W1ET}G6T!>empdz8}KHP zfmJ0*J>N_DQ5an_u&If#qXw~4&xlO3h9`&N5EVqOyD$!34ZPOk9zlvRvU09q#RwVr z+e{OGmR3E~PMl-K#mF-0nkQYV{_|y`v_;R4Q?BpGa(})hCPq5oPeqnRcZexq#l=Yd z2Ngxu%SktbV~S(s>nmy`l4tjb)=W~cT!+cCI=SPdTe`**@(n5&ufU!cEO?1rmo?IU zCD(K9Ci2r`!Db*K`*TRLf&e3ApLF=p=R83Bv&*zlSAdq}ltKkl2ze&&7#E`Z^pd4- zweTfhk5Tw%p3UCJqUoe?Ol_1v_2MmB$0NplokzX40&1|>m zAMl$P#j4ryvXGu}mbT4v$4Xoy%AMY@d{F5R>M$lx8ab>P48RU4AOzUmY6|c$42L8h z%PmDg52p>0Lg=G|u4{@(6uH8G6}Rf)$IuFvhv}H4g@02qiwyl-Uxhta50$q>U$<9rSUh(m?{T08yxnN*jWJ^^_MJ3!b=ph_Cgx3$p3T=WUX4Y zYT(M1EBT*Ozuge_9D|#vFWRv((cqg47hoBL{#@S(q3`-26AMVv*%32ld_SX3y+`En z=LN0#yd>g!vUQLl>9d?9v^SODTC;0c>%I5`eynKr`uy6Sa$v=pcyO zWVt@_7N#xnGQ`HY)+w|3ooeMBXvE`3Y}19aaUE-B%ZTGsVl39KI+$*TCu{{)IzFwK zgteXun_p;HdN2eP2W+iE4GqCAt{uh7!F0!9mS*A&6VzBQO-t{@$gW`@AAh+=sULS>TG1D!)iTp3kz zv&b10gu;mO*VmR1=|WU$YbDts42s$*>?T{A&#NhI_7$Z=t%RJHW%XM^9v{8|D}&jd zh1=>C^0XStdybGV?PSc@LlO>AIGBBs$+52n_GUV1YxB(5Lvk-KY}-!QAn8&+B;*61 zHgT~nOkw5<*uxM)nlLOY`aZafA<uc8Ie$Omh$P4(wEuL!#a>bdN=81sa!^`Peo zlkMs)e%$DfI^0fDN05eR%zBmsN-LAIO<$JBMbDDp;4#uI=5lyYjC7fuUuRbI-O-V2 z*MbX8aB5lHN{U80>YgQa30GufCX(C*M)e;W_1OqxcJh$tPZB6aGG==7AW4&cQ-?>>_whuj8Z@8D zjkX!3SVN6WQcfGrBt3Mcf@R9QCH8MilHU+2(DO9)GI6UVZ`&_&T&}fA0BG>%0sqi= zUk!$Xs1EjNSUqc_al)3p8ic%9*Th#h_J;6@+)lKfW-0=fF_KsisxRnGX>S!g^Y$?1 zD1J4v$h7Xb21k{0@Z5}F$Q%WfeJwem__7uYb_FX|#=h~GtWY+F6)F99v3-ZD)=uW^ zehJ@yP(ha6%7<`hyTXNY6k6rzICgrDm+Mc^aQwJ1uiNoCzG^&N`4{3-9GLSQzG_aR z=D)~~q;$txP0LUhe1Q4L`(Cm)ULsV2+dH3!*_4Tp-*L9Z4_IHzBtjqK19n@)do#B? z-|qyw25$(P9zr|uLfcGPoLtGKcr3#ocr}x6P7hUkfrr{4kD=l0Il2OtZ$Ip~bJt^& zXgr=t9ih%JW^k%8LM=O=dV+u9TZP%n%*QzC#tj&ujy~znsR5Cp7+n;FQ^w`swM4mB zw4(;R1EZWBMDG@nbQ}--Y%CTPGQxOlVr4|{@*V*z@(Udbg5ER?b$-iZ#kT6>LEoXQ zS46D&CD0quEZ$TU)kl`K+!x`6u|O^`$U#Z zk=M=CPz9_tbBXiU_7-Ci0N;vEIP1D1@|N*n0GNL=oS?Pf1GX3&$!zw7n&W6dnYg{T}*@dTzQN zdFW_;nxd`A3^VGuPVj)Oa53L0UNiTD2g;WIAlkW7gm1|d1%l9L9(<7~m0l8{#Ut11 zxn<><@HOGjEow>S+3nLtx(JIyYtszicTSmvzu|@S|@d{3Mv}$L^UUsafNygtN}SJ z{+g{cH<4UM+)o@!KxprsY!u7a>4I~z`708>u7Cd_Pp^JtnX)1o2knQp;MLE#&Yy+; zZ6p4ngUzy4ZEeQf*B18H;i%_)^93=OV-jqMt%tQM{LsZU7PI4eirqA;0S_lUS^3hj z7WTvuY_AS*=g_z?7@b6#YqfL$Zh@_a*N`Zf*zV0}f?mwEYuB#Be|NR9~qNo^!@iB^N=qYrpo|! zo-LoLNUs$mu#3$ni=mksj!=C;{GY;o;-nekM|`O(L%xclM*5Q^b9|S7Gu@02PfhZ* z7Gk3p?wq-63;!~U|E;l@xG8_CTkq!CvzR~0Bg0hcXyDOrWy%!J2Of^BJ_Ef)8T2RA z{p}a9_B!T%Qn0p|xut*7hu8e&fzyHaZLATT@n-!hm&V{n_Rv?Z9TYmNe~NMq*`dWO zvemwz&?Vz5^~J4QoP&cQG&MaRee_?8twp_AK^ToHwm9}2>Mgz(i_v=AUj&Zzg)5HV z#X`Ch1?_;l&bDz7(wDVBlJwf1hmi4`HtJJ=Q1?ih8ExMCc9Ct7k^xY@!Ee}%SF!(L z4YVA7a9PB8JYqQi&8=6iT!+K3W`R~Y)=sd?js36OiZIwZ7TbhP>HS!&J)G3O{Y;8I z@5w?4H5xVyQfWl@MJk*Ej-U^te9d~bXP|b5H|VD7+=G0M;S1n~3c{L<=Oftc+ZJF; zsB$Ulag5J!pA=iIC7fV5%O=@a5%{9qlr{#-bUCjjU2yIa0&V{*P{X5GGj@Co{7$Y& z4I%uABV-1F!|gmHia z%TV|%PJa@1G)3al*9TT+(@*SneAiK_ALHlxkkfXIXJrXhT9J}l9 zgTvV8sP_w8&9Vw*KWh;XnZ!73_8NgxzhS`U$VEM)A{D%Ns7N=bvM#JLguF7z8s@1)C$yxOg2&Ncwt_ z>83L@blrN@a}X=1V8FrEzt0xAl=hz-tv7mp&Fe%TKm#Q44m28!(Nk8SCf33~Eu6PW z9DXsM<X906zR!GXe<^l~TUxU9G9$bmsUn04#G zeDBA9;b8v58FiW-cRkXZKte_28L%}i9bTdLh0(>vp;fx-OPH>oc|!Du!&WRy4u#{W z>pzb7%XSL(lX4+TAZ*Zlhq4xshvhj4h|%e!7F>MRlix)MRsxdq`BCQcL;R%VWm$S+eqDWeNRPM|_%o ze|r1p(oS9p>U2`mZj^Nvp!$97-p*a{w!YOt1S>^pyWuUFwbfJYI@2oF#lFIqjGjY( z4U6C7L5Vm*PpKPri5O}at}Uk)x@oB&>Xz6)+20*HxiQMSPdmYK&G?U6>Yja?_LWJq z*P5_42*M*-yC`c*IyQ4a_}S{(r8jE$_6_YaYs!fGbcxoqafO@PL&UbsayT`2FdWh- z!G6Qq8W?;ka8~PK%NwyJSepj1(xH-Lb z*j(!E)Iun4z`RE@DrIxndkGodLuMp>C(n20PVla4MlpKXa7b2k2?mG15!`_Apn4C!@&KAQ$H~_VxE2(8X`P`v*fviJg$ibhJ z?>Gm9wvb7A9zbg3Ylj--B@#Yj5Qg=hAfnk}|AQWmm2p18Ilnzk?oI2OJFBSmivEi= z;MM!C>q zw1@}rHD^yQ(QA4QIb^Ob)a6C%93%cQv^wwUr>cC7)zh>xu6JIkj%kf_k zu%Vbbs51W;jye_spXFEq%-#|j6nY~C{%qkDsYgl+TU$?nJ0BdhyHR(otH&x_3%yvz&AhZnB+`roKkHGpQqiLuM(5aPSdTb2LGiY>~ zs};^`S`>USe8vYsQrGOXr~q)FBC7pP>t(j^S%E5v84m9kcvp0{jJYE)ai&-0^FN#| z;lll60gGByT~yNPrYqXFuPa4fF%>n?Fm>z4IwX68EWk;vDd-=*($N8Y7n2Z*)sUPG z_&O$06oY5p7>A*RJ1jJ?f^DdX@*=ztC2L*nZ1@nc&FqaJm%xylKn6&Y&kB zQtWmgn`y?fb{aX7VmP(4$>OdQ+d?Eg2=L%a7lTiEoZ5g>Fo=(--djHkF9HMW4Vdb9 znFfHJlh~sy&^s6|R*PE}{FRUgDvaP{NAJ(A2R0Q4T);*W$cyu9S)^Dml`oobd>fu? zx!%x?8~g6TgB|uv#!?UNB9?OBAydP+E+w0I219w&^JMd{V#ML&(#j2-usXydgve58 z?+Pr7?2(L*TZ9-1k0>p&UOKw)u2b%@ac9;m;h6kRuED9rZaL$Hirz4eVB@(uRWy|7 zr$$MjOuI;!OJy0F;P?iF-Y|zILPJHPVdjH5 z(Rr#yXrys-YDH~u)Z3RNWORY1?E@2Hot0Bocc(`15hF`{l7+`D#TUP=D0WtOp?@S* zYt*5hO{67%YYq6SOn)KHj!{{^o%*N-k-U5={Ys(O6HmxpU%~9$CxG1Q)c~y~3&lGT z4p0#7-K~ymw@~Oa0~W8FYCD;b&v>JNCD#E~yFG`hkW0OJ2#T-| zQVfMHZvT?s4RT3cIym)!ld5Z;`qW#3g74vPe*iqx@nC}s zWwIN2%?I#Jhhk?87%I3fjcjyaklyK<$g5EjiLdVf7Z4J+{ZE>q4;@&=8+3{Y!n1cB z7(zWpjy$q=DC2w)^HIUF}$TIJHn;j`?wEl-Ap;*3X{zuVR zx5S2QmAjhqKopp0pQx}16YYwFFHp63lC1a;XNSq)u?mYnYT98{qdZ8{6s1N8%2s^9 zfHqy>HqLHZod4E=9`whp|6Ix@c9b3yvF05P%lp;LSu^_=E9Ut6aZ)cm(dkFmeQ6;| z&P&mto7YbQPDsQXMrZp&b^>z?*q#iHo4^NIoO;!x?k}l~$|l}(Lh$IqXlm|VSc*~k zPca@T(*s`alXy>V1-2AFmw)D9A|VEES7=p_!8eTGuON`e7j?tW9bXlYs<{00fz403 zMSrGl7wQubf~3(0XVq=_kzzgcuO?fH>0);30-U0S#bNxzjA(ri z_EIw?{Tfg0oo<8B=W%hjhg9J(7zj%bF&bJNpAy4(x4I7e6+==3nL1CNydq+9NiPSM zZw73fBT3+OsPtN--_|JY>57<2HSK~UKhgoK~DO>Q|~vDuChGCU{xAcefaYUuIV zglwQ0IV|zj5^%%t``uT9A$Ln?x(qW?DG^O7I?{79AV)A*CJ)z%WVRq*-@eeMnV5D( ztTh;9K1#@iq7%|tuLq{(!r*Fc$)$ASm<6H&u+k602v|WVU20nWTU@(_ z-MO~f*=B{ZeXxa))61`1-}PQ2VL-@x^b3;kkvAGf;?vw)l&!ibOGqNLR<~Xb;acr0u^s9})a>qZNO0;Wadw*>wC)7)k!f0$Uv-H!K37_Ta+F{kuV^UOK^6LlQbC+!EMe7%sKbn9i+? zsvJg$6fIiTKU2dhGZ1i^FS!{`&6C9ZDq~u4N6?*IFrX4BfyUrB}J)ETy z=ije|;f-Y>nR(dJy{&u#AJj8Y-!Yi(y9u8%I=nTKvHig5(!IcKO>bi=V~e=d_G9=c z8qQ|uBm-Hxbk8Z8xDi@Un;#V)9~Bi94L)mPqNAd&moy>$T0-xgXFh@7;@B+FQFSaG z2;~WsEMYR0XV3*EiZI=SLvhd8K!rv4Ngq;<#4B}P9$>@zlKic+vYvkq%>F)ZXVFX~ z{|0#I0~10RmKCL1HBg8I19vouD`9jeOfq(}6YFkax=P%x)QlqQE5L%PaEaTML)v;@ zRH5H(L)*%O9*M?>7E<>&WIfNP)I#WL>i1tyanH&4Z4ey2^uy*s&=odlyzi-+QHkSpJG4fH1$c+tj&j;T>7s^msllF5peqcI zf;>ivCBRz0IUxy9y3j6;F|tE2uMRq4bMo=_C{^<@))p-2B906?1z&cKw`}~+DAa3r zR;fx?cKz3R^X3&=ONMZs*|ax@LwkFP%9-oJX(Ndd5vdq=7qHCJ0QnR8y=|`IFuu93 zL&n#;^i^&f82E637w&MksSat=c%u_He_-~ATc!vYBRNR0$v|kP8Y>aQdHF-t+O`ec z-u7)>dnUe~#h#P&{#EyEh7&H2Xn@A1;8s8GH`Azf11BzDzIlHnRM_)t&@+B|$?EEE z!~3A^l-ajH!v}hWVkR%d-D__NCw}2;dtjQ~9)miG69R_?KYa?w&HmYZ^1uLq6|$Z% zOa)Er?;P#O=&c9GZL_prMWi)Qd>Wi{<8qOm^~Ek;vsuQSzXi2EpV$2=O-otO!r$LN zZ-to;)5dV%?~m;!O>g1!#C&$M18sG>{4?#8y8pD285gc)Zat|XuuRhbx^lv<^g3-; zCR2{TmcE4@ofT8!65g)RD)NW6wv;KxUrX)6*A$;&GzMd#uVv|GjZA5v>cF|FPuV-TX;-1{fz&aM0p z?OJ$`OG&B4RhC6G+@opn7R5)-!l-v@GoEKs6jQCA__wgLW(xe3uCh~|Q=u>FyU)v; zlt&Dn7S{t)lE1b}h4daW?`jqX#{gJc%W~{Eod2La`@$3UZW8FJ4p83@7_%JFP7Px3 zq+soq^wSR@Yz(=|Ni#&|5BE#QUl@^BQM(4beX_NhG6m+1m)ak9ih36wHFxj%RJx)K z0`on9saJiO<}>hzbfRalfW3xs?Agz%>Gm56Sh0xn3(SN?3>D95jSV?4Qwgri1e*+m zV9f@XPaeBwwRu=R#0REHXD6ssKByO?EP@V@)iJ)TFqsQB_y;;Qbj~1XgNXy*ZqbY| zL@`LMb~U#GdyM1TD4?nYUsFJ614(GA!k)wKkC!`?o4e%jBV(YGFNpVtM_~taLPEmn z_jmxPp*Uq*N+8?HUUI*@C7a>B-|%LO0`KC*7y@}OjCzNqxp;}|Hx;ub zAoeMC&KH>4W$-35>bPc__sANkb%0%XSI@|Ma9>lVL40ymGp=7t;y~l4mvvmK=y)@G zI8IJVm^=4!5>Dr<5D739+*e>(!EL~j zfD8mcDO|zu$6|_+0JA6}0JNQ72MGCf@Jt5e$&5O#o-oL&L*8UGc9h&i{;}77A}2lXR+w zFL!l5Fy-#xgn)W<(DAkidVzDakqA|J0IA+Frpl}=eT;FM-hA%AF#+G@2iy1CzH0)6 zZARsy@qKf_S_zClvg|Z-~x`|TcSC~!KoJOo7O;Y!g&m0BP(Zj+E|P~ z1vev@@5s?Cwml6Xgw)1nhM8;DVvE6(;9RE`BlCBT7QDMDLnBWT*$wjuoix)pG!|~k2z@(@T;VfxcUYaDr7v)_kHt;%r@&WzB2{S~l5H6n# z@;8mX|KpF3=9w=ozKktlO(j(E55l{c3gtMDlaA3N*PqNQ$t!^a#gQ}L_RcbF?BYk{ z+LW)^PAV%oKL+FFEQ5`gyP@8g<^KrJWo6lTGmJlBX*Ld+F#*gn-SMm~Q(sK=l>j>H zJwlGkYX~+xx4MEasuWR+q!;Qz$!Sz? zex?mSOH}CHB}=ZruyDlhb%mdF{-6kYb02PQ>Sz>{c!bOrdy@F2{qbwxMY~yfQ>Kt1F zEg{mpypg;MRU+i`44i^NbR+L(IYX{Ui?<~tQxEdQPojm;g~ZFrFKSC6^!5{?O^`## zYbn{MfZ&voJ2@3t?KHy~n*=Tl`w%lq_`u4vgq%@~-lE3jinNZYrQx!pg560Bw??23B34KHa%0gilYOzJgCPc=8x($|P&Nw)zG)zla)eBR`kp>^9FNnEGJez=(& z=-u)+3E>LZPXfy#|03phk)-N9D9ex?$wkO!o8n{Og|;itv8aq2)L3)43o1Rp;-L{L z4aGv#t#YZte-|^;;_j*p71>6&#f=Dhcd)a|1>54HkNr%y&>e7qfYC`<`oFGVyFom- zPl=D5zZ?^x(})^@*O>6%sv^3*?5Lndw|TWksKG_Jx_!Kw5=9a;tu=g2s23ZoC46J@ z={5U#x+EPTx&({P4<2O4(kHj25Yo2+Qr%@b$^R)=7s5CVUvZStE$7=BYfE_@hB~O; z9*9;8TMijDa6bd}E)TF}&w(}4w>|m{z>+O{!*TTFdiCZ*`J7ER>pra!Zxd9V`yQT_ zXXEeAg|Y3%sxrd(b$|+ErVN}Se|6y7nrd*GgnTOV;$g_&QxO1b>`X}KKx)AX$Ya4h zsDVijsRgK0`->S-T69j;*l7nVwQQNcajf%NJg=p+!H&w_ps&si($>WH0KqHyv}BkT z!AcxWg9B=wHgwioMtIxzDEONu^IDm4ZSp=pR0)P@K5!`ZG7cRbs!?~QLWt1xIoiB8 zv}AEXRV5s5WFOp_ir@d6=EjF5j&D-U1k=4NIGPo{SKTc4va7Y&QhZjv*35R2?sk;} z&s*+g&+Fb=SPC{4V-XooO2>3`TN!>+W8UOUW?6!i=S@_@GYE|$ z%8}9Bse3Z1Ob%E2rbn+O3a@zEM&1iixonDyd42R;@_jQzI+3ZIEJM7LNLGrkcpdic zyx|4(Qnh1s9J>F$sYSM55Vqtl#rr z>YR~|o(8A;4<_m~8na9ffx+d4YUq<@j`!fm3nO`O6ou~o*sNJIzNV>E7SE=%yZo}7Gf+H6-nY7!)zp|~ruqiZ(JkR+^yqOWz$?kFuH zcRmOe(Y}rc^^6m8mJsyx@#feK1tI;dOo$WF$~s$`U8h>2Rx_I(2c>+SRG93 zTW(rtXwTc_2-bX{h0oNPK?#L<5GL2+ml~`f%r%bDh-htB zRre%TkjAa7=^f4ZhYYe-gHk)3f5`0TSYMIV;-6o%lV8kEbio8(7yA`m1jl`AXA}HG zmbB;6PI3#FVc6FeY?&Hg)ut+7raV<1SSLtOiL2UCYixSV-6*b~&P8XYyTwX!e2Z|g2sG%di& ztzh^S>8S>C>|P;V;6rtqkegzg!8GNyE4`5!7q4AOtjMzHjYQsN2Z3H`ck)?sLd3%$ zZmx5rqabaO-?1H3i>pTpJtSRtj!k_{!lf@3DiNnH0APJ=BYfKwl)lGa(k zGGE(I$A&sbCT*c(k6g&uzF$at^l55>^aqhW{q~yhR4D5ZMs5U;Nz$Ao2RSo>Y(z4U&x(`;qT>KBXq=U*QZx&wuQ|d>?-b zymvQ{gANGgbRF#f`-S+p;jcTftdGe3xYXbWMxp}VG_Xda7TM(`7err?b`5m?dC!YO zgUZ+pEB5Yg!{>YQQ1N5!HTXFpse$DO%t|5mZ#T6xAd&^#H~YnSPq zhi#bWgmd9-Erk9vSOA*@7a!~4?)rbF94p~$yoAKcS?WxOj#pw?$(KrOqSBuVeEMDP zk)`I%p>xlNZp3)yOeHvB5)Ywn5&D;=Slp5~W?`Wl*lm|C{3kAqUcWE2(01>pSoT}f zVG`l+?VTTMb3@%;C8A>g*pp+)5;(M7mx#I)QNDs?0C1Y-BjE4HEo@ zO$f1@Pm2qjS0vPc@6`46>$7bTvsS#Dj0&SGrLWD*WwOj`NjR3wSVfJWb~2g9)n^&O zabJ(D7(6oQfq01AeoRifTe<~>!{A`=#6|Og9V;9nS1}Qjn?Dz#_S+;9!M)ZuXAgmA zls15^#$nlvJXn9TcsD)@?l!y5NOzpyNM-W0I7C;1Z?WY0$Wmx7wdGkB6$^SN<ibsz{tL(zODB&Iq#Rv;IR z+k6dfEqe#Y-Y|M28E0^d{Y3im3JleP6k#Ynx+g~X z*$%LJ!(|f1k%Sr#Hg(afIM zZw}GmKb`*U(|*UhSCG|0!Nr)?=BmLtQIU0m0Cat02J~pU=3vT4)5s@0IGtS4A3d+^ z{u+6g$KFi8-_Q6&4P8Pr z`__qh1*Jv=-+Zf<8E?l?}+Rz(niY3WECk!S(jejCm3(gkU z*^h=paGEq9d?!z?p>rxkF%!VN3>r@k3LJ}Umk?IMBKSy!@F-R9e|$oeVqVSfI}#=4 z(QURJlyE4YghjQ}PlX6;XEE5wdvGd5n3fPCJ6l1QYZne}bGa_`*J>ucZ-dL3-kdqqMg=IP^9SGGg%>S!VVC1f3DC#~dv;-m=>law zsM(hxxli&w~_>Jtq| zr7RG|O&XT+DKU7gmA4fRA1RT)-}sP_m5y@2p(i14(}$YiXz^76ho0PC2`<8FOxEy0 zGY{^o@iT(jtO=R|1{`QvkLY?)4?(>ogapF9nC$E(>;w(^ zdTQv<(jV-o1@70A1pY^}s*H(I%*&KmpOkp~$}U;$ln71ysT}$uKCcrj5`O7j;C8z& z=}+H^*PG79Kq#-;k3bs*TBi}t^zz0np;J<*DYwpua=;Bz|HAt97Z`9=gc30;6bM4! zD!&7$!kvT4Hp+^pdTUE&wx;V#8JqG-M4XV+moAz8STYcv|`v_D%I^pG1Y;5?)E}h_P+~j)tA(i)Tb-$`Zuft=y z>;ly%51d0A74(L6=1uqZIMk5$(pVTy>~N({8z+WxY`j&y)Dh`03iQNJraTr`hFCVT zMUd;N&qwPgO;09^qdkUZt{Z(&=4B~Tu+?2CVdjC7^10^ z2PYSo6=5Zu?+W2s56NS_2wdr;ou8LZMr3rTmVR)yWa}cR!!-iKC5rF~`NOH`mK{XM z0EJr1IHH(f$}uk%@;c9{S9ZsaQ+hch6J0fQ0R9}R>`*kY#c$6b_p*v$*`p_(E_>4# z9VbK>0R>6F?B)F6Wgks$WD)fYx+JXTUr^O^NaA_C) zqid!1DuOC4e5#+9`Kxh9m>OxeGc|VW^iS%)H79K;!=}-X6GQqGGI$fW3)sFk){kJK zsKe~A2Y@?1Q8A?fUcSizm6~_x zW%hCB#Fk*mPu7rl{fT5)&45atzvg~fH){hy|BSlL`kYH|khezfuTHwsqobc3U&@-F zPcH0)(`O!sPjAL$0*G#D1jnu&T3(jX_ioQ^DEZikCjP#3@pD+w^v>27I%=By@%%*7 z{?N2QS+%^I@}iU1Htm)S8>ekT{)ePCOJ31VcYY{O?~NFJp}+Q(%x1OUFARs%yPO?L zxA0wUoAo0V^|AJr$TI1iuB)oXJ{-U}#1s>+C8KaFk>{p!%+ewhIT>(W)1LqSfdtJr zQQxJgX~EF?;e+3CsFh3i;DjzMR&>Z&5tw(2pt=EcU)^9{Z#C>h>_u5c)*aL?@YqjU zfZ3<;DP_iZk-s;UHHdsCX_)GTZVx@H?uz1ri**%N;RSTbddT$}q^kAM`rF|un_w;V zFJp?l{2MmYROS13Y^t5ucq)62G?iY-xp0)ve0eXZBh0B{#U{qQLl$Y6KUP(KGyi_v zJmtszyf*0PaqjjHTfoBSj0PyV--2c9@ePTy`Ya-C{0ID*_E`Z3S`GFN(BYR)HU^3P zwQpc;bGY7N-YD$S$-h|Bf<7`n_#fcQtWhtRe*NBJ1V>m=h)%Nl~|i1Hkb6I zDtgFsjoT$u^~r7KE3w@ZDq zY+QPw`_2+_Z-RK|eacM@qwxN6cD0(R{6nrm$BQXTx(0vDV;zrKTM2^5OdiAOmh>7d ztb>3vz}uVB1oJ6^-cb`XYy{OcX?k|J8HYC-*s$$@Y`TdVHfCD6g%=~dtOV+((t{L~dVtMQ>(#^|eD)Zsrq-6BxM=?H zD2`@{IqErvno;UKsE5?4jVF^4Dp|9pqe+iYy9B&GBqU11j|15}&^S!x5u6w@2WIcv z3D|hJ2VH8&rl$Qi5PU~o>~=7Hw=SPx$soUz&o9$V>@=qSq-w92|A`vtHgDdcc{QEW z2rwGH3LMoyAKme&KsF9)=~MHUTakWPG75;bug1{V*ZDDFm688LzE7cmnW6BsxE{YL z%md|I0V6h8yMFE-I3NC)2MfV-bZgg;yvQG7_i}Oh&w1ls)51Dulx94`44l&~TN_-_ z3qu~3)FT&8mJf4g@0^HFH?st}$RbT!Xe7(ADbY4g`&IE&HxAJ>e}{t3@Pll0mqTq~ zjfDKSkbO~{hNtG0sb$>=mDZaXuX)FwPHqWF*=p zM&aa#7KXJ8)L?0-7chS5Xji6kW@yp7KH9yDy5P95;9Yiz7G6rr!4DMH?kyku29qH( z#cDHVd{}_LsV4O5s;q%Vzq+v|4odtulu&iOH`IvK_R^=(yrqPd$Pp(`QlW>GTV{!$? zQ&EXVgIAvfeT+vlPzN}N@M;)65e!4S8)LSuvR>!HDTSv-_Z|+%LNaP79I%y38taQr zI%9s%Xp=8$db@`fe1206Z^KS%j1T*;HktTb93yK^=@MIT1S82stEWp2cyLPuVcdli zW{A@`JS#)8(QM&(4okD~+IWj{iinka`QmS`Sm6r#NSg1q33LNo`oni5Xb3(zW8mUA z9N*9h-oyid=^sKQb6`cf>F=u2>eG7Y@rFH}M%|n-c!m;d?g0y6My@ymm8y;i#bY^^ zN%+Up^8YS1(0y*hqG~5 z)^|b^+gK*pNTc*Cab!HpVd8;!cYpqS!+`(DXp!^q-Ig7-2(|I2-aUxE+p(UrYCeQc zCVbd69Chs2Xnz5J|MuP6;C)dSxLR5Of&66HFhe=Kq!XkZ|ErLzx^fH!f#EmhSW7s5 zD5{ba^M&@5>X_6(T9D3CwGs3qGFt}uc6bKUZk?smzYS>F56ZMq!L5MtBXXA9F|^pv-IA=Q5<&D+ATFi)Ap8!FiJb(=#x#-;`Q%TckNj%(dfx|eHs>x z)3j9%?0j}$C5cV_O%?i{0z-dQ&F$jdCI2wJm(yxE;38oIC{+JXIgDh&7^C_ zU2&?p!OykzrkLXzsm97DsZ!eYf8D(%yUm|vlr{9lF1{DexYt8d&Gt)PYwL*How5` zZjg{iBcJD`Eij4=A?mF_Utn&1AZNKT4$jCi7{c$0x;{}C4;W+PRrFuiK!$NHvwNDe z-0=S8$}z3Y4)_5beyQHF<1RQ&8G`-s^}2{xj@S_q@f@e8r2IJCzqP+Ts?~#v-n$gi zuU`!@{p{!P*{)5bO=Oh+R=T_;L5=K6$yyzPRCAYhmZo?YT!e`scQ{Tw{r}ke4)`pJ zt?wZLLNWBvoAfFI(xexu0@9QwAYDM3fMOH^M2di*^eR=lROu!35+IZiY6u}f8tFaR znddvR<=LItncVmD`|f+M!tf(|=KRk&Q=Z-FWyXvdaCWP;Td#@za#2l>dj#&q>pA_M z@%K)eCmLij%-JB5k=h1$F>lK7yKKi344QxD$FHQF-_dvqFK+mUW+bx%C>r28b#c3S zuhRw_V$8GHFY)+64Tkj}^W^r1xww@cg77_tYdb%E?UOp{cCJKU-vlzASA-cS*k=fX z9o?`GkFCUs-)TH^R@sp0?_&(r*f)V0GBAq_GszNHRX$WwCR{dah>$mIc9U3aMzE~k z2-^nzC0a0)lqehP@sw^hME!B1kpZY~-IYw7?kT=%V6Y_*hI5(t`jUJ7>rPmy&3!v| zSG7cnZj5vO^Y53-0%_avpxgiKyWztve3gV>eb|5`2(hf;8SN2r^%v=V zg-?Tp);O}J^*vIJ=6`^pYnU5GSA8oPp%~8`H*rK@;B$;41Z8VwSo#wj;vlvj5Y^7w zxpS^^_$VC#7P@J8wUAGl>GB$&gX6fcgHF|!$xhlqsC`C^?3;#h-$1G@boCQMiwXhC z{2}(gqz;hA@ZSbhSVtV8*22me(y(Ay!}@Y=i`fzHJ9#>>I0HZZ8Q#CmSRHz`!T<%T zKhO^RGKUoa`UT#phSWdFcH4LV^gU|3s^E3|Z}=tNq#CM+MOYMkDX8(E7*FIvLxscf z>w)dt`(gal-e4M$M4M9JY-(U;==Q{1HEPhR->FmY)A3@&YINg5PzID?N*g0lf& zO>cWlpjzJ}Z1|j2mrB)D1Ygo{g1w=ru8VE;J6-Uk>Xiu-V7^)t%OgmDeWy3gd7dM#t!|YEIJ&EYs)bV@Twb!P!h4KiJEuI7+U(sSl?{KP~ z`=02m5FF--)UMtNOAtD#ouT2tf-WFZ4~K!g5q#6I?2u|c(<)HjtnWR4pB3V7g%^Eu z{IqUR-=^LDZRJ6K$YnTbC=A|2|L$Ct^w-PHW zIw_aG(E;}evURCJdJm0XRp{i}YO8(_zpAJzd}lTYR-(d*G2p{1IX+={Ysm z9fGe2p_NL)Cdf@8=HW}f70HkRJ%Y(!kefz?{;5y*GY;BH_L*>I!Wlr|E&-M*O{cmT!No zZ&_QgIWH<99(34Lxn{$_rUElgO}8pZUG3mAjPn5ZwrBxpkfO{5to?aqzfI9IMcGDQ zm%K`_ZEOvF1$P*#n6k*GSXxn@KxRS?g_h^RoGa7m0Su5sG{(Gx6;YqS#S%hnu%e_) z>I>DRK(C`;I4$g>PYIWgG#xqOvck0r_>lkR{+eeb-#kL^ZN!Hpsaqe7aVx|&i8Rq4 z0tm)G=bRkr!>i`*9*RkDtDNYa)2aMK?ME=}J5R0Wf5q$~rdofzz$^6@fcq&g#%OmK z`mAhlHa<5f`m7&{gPaiB$k+_P!A6q;j@3SIO~rabpwu9K1@Ta&B{HA=yEza7YHy!HRva-cm-NWB)V z=7WxC^y${`A5YAM-go1J&w6(+@Z18vY?oG-$Lc1kuXURRf23I(!m3zZTuXhz6*{~c z%D>Zh$NQB#!45e=9Z>ZMeF4)*d=Z--%$<3DHfUl+vQ+?StQG`{Y>Asgq|HHeE}iYH zSWWn9bJSLrLFbnr_=Ni6Ifj_+xe`~f@eIb!NQ1IH-9p$A4XeN>$@W%(fe$@pQ1<77 zHg?`Wh2yr{A$=W2Vf;##PMG47_7?qcS}9fU_+DE@=7&>M=#+ww^0wDuI+=|6#$tSv z$3BDFD0{gLaC%CNy`&7*i(Y(>S3~GWP@!&@S@oDgGecBtkjb%7bt(3{xZ_b2phsLW zZ>Y|~_^||P4Ry*cLymj?0BW}E(q(?dcrqvM^d{hhMote$B;Y+9$Mjxs?!Gd42Gw?- zt&}sM|HQN2>$S3Avz}AhNwC~|$!`(}%^{&$J#QB%p2S}CX_fet$nR2KPmYP-6@+?b zq&BpgvC=b1fYocIYbFrsFFTn$&PioOLGD#=Nh$XIMehbybChl#A6Fk`|1k`XUCEfp z=}sl<&^reRxpVY7A%$4YspN+bo{{ulbE9_TKG(mmLmotsXU#yN9pU>A1ri~o0a;2_ z=;jw{w7Hy?7XU`i#KWI&ojikZ{eyypM10M~k_wdEK%p~yi`CG5`xN9ry;EeLWD0C* zDl{izCJ2;}XA&llcipqJrJYh$5^(HiSz$QjxZoE$w$}p$+lIV&$0^SfhY#}{)4wr@ zd&f)&PEaaf@v-Eea?H(7j&&xE8mu9wujG78g8DnXR^rpAbn{&5msXxme*q&m0iS)I zm^Q)=p2s-3J*@l<$2M#k+|~09<<=$3I50o_M*eDhFK-l|IbUFMQ_qu;q&ceyYs9DO zoI)u_Tp6%Zh)21%!XGJfK!4peyku?J7n@4!}5(V!Jvz+IRj-5h^MG(fwlKEktYS_{t2vn_ovm9 zrDHx$N_{OJq(-M9PY8bcsYo{xup?nOzO5asmkL_| zy2I-^N$|c9eapXS;}6mMlV9O&e0|l*#B6oMGDo!bVa_49xQ`Y_%O2EZ@@%FN!J=v9SXgtA5D{N{A z-NMk%A;F++cTM5YUYu%gfT@yA{gP*VVApvgIN1hnq{ST}w!_a|20ny5)7%pGEKF`x zG640N*NSERmcbTUu`w$2YT70GRe-Z#`5u8k=?AF$JJS%ybz>k!yh& z94NW%3>hc3@J*_Nyi~f|!QW4AO$(b-sD8>F8&(A_Mpz1C_U_?l zY*-C)up#YMbQYWlQRz`lReqT)GH?NDV5)TZa6OrA3r=UaKFwff3M_*21-GCYaIpNg z`eNh`R}~pb2<;@pO%F@uNREDw<(R&iWTxrisH5^hVV5(66E?jKNUG`Ks2yYk$1%NM zg#4{*oSNZUDfQt#`_U-_6h&<@z|jCV)xMmWYIILgl4)yz?#1WZVb6ir6)@PVF2ZiZ z3y=DwDav|_JxYR})Hi)_at4){cPCC=7(Pdj$xpAYj<7YxC}T;!wyi+F};3iPf6G zxni;6pACHv@5&LeMdbG{Fo{WMK|AnA)Moyo?!0Mg^CMJv?8X<$-J$eTG+kXdX75o! zbXk3Q@m>=E%Kg5A6B~Y$s$oIJ7;p{PoJtMPy{lTcg1s`-Z^+?i#>#}}Xy#sTe68SX ztW5+*V}er!ZtxJwHb=)qKUB8*^Ws5oU12kze;id}%Aq~tM7=XFDddXqo6XYX!kqeI zCDi;`MG1nk9kwrBGGqtOF(}(JPoTZuX9#`DbSDh1`gHaCknvkRZnxPXK`U1Iven1Z zJu|^Z9nxjpsAKiUYI;4+LOYG5dokb@iVX|$#?WA1(!bKUw)qOxmgu95eJ#gZq)Vpi@hs1k0?)gB--GzJS&`P|g z4D$Thh#K>(>x0956T}#T>!}^GYr6~068#2@?f)%LyKpyYPzz(FbwG!VP^sDlBFCQp zW$cA4yt?u7PUBbPrBp4B%mA#%?Cs5Lt%>$9>xg>=&tLD51QRN}AC3o9v|GYhY^4R+G&l^8xCN$-7TBQX#8bMf!kuBf0Qy%vdX*(!0no z_fmp5At->sCy($^gF#5 zq7b6|&JSzo0etcMg$A~;-ZG>)P^|j=M|kOk>UmI(>THLsuos+{uJ-Wm{yI^)VYN`` z8Z>soLl=dGW>A6nY9?6t8f>Q+t5#y2$I*ROJxz@6Lo49)!s(J0Yz7SERB&QVF}7eH zU^8J&bsdFRSuj+P#wGrs+L5l0l|yRKh9M6%4G*Ex$afqo{IaQHQ?J0*x_b4GD|lX3 zL&ba!PEotY-X_OF)uTP%TNZ{%mffZHipOR*Sq4@0w1Rj140%SsHO}o)luvVK{Yk<0 z`x^2_C8%Qw%N=++rv<}!chteSg@U^yX2vULyrxfIm4=h}dJ~~Rp^$Ol64W*-XSTr- zicPhB?VQ+u+PgSO9)r^12auI5dXXMoQ1TuxuLZ}8wZS-dbndgf968R2`%UJ>w$%9={ zjj#ut8jKUshK+B_ydi?t{%I1hk(}(knV6G!PW^8)$o5|s9VWsJ)Y?^WspIoH#Z96> z<6o1Hjn;biCigA%@5+Hz(k5)M9ew|rvZg%B8%#HR z@$R&;1`7DGqLSAW)9Y?D|?)BJmLOuD$n{y`CE9Mad=5m;V=z-NQ}W&Xa$SAqaOZ%trmKC9qHv6->)X-!cd!$cAx$k9yGz%)4gw)D@w4g4i?1--BmIB%X;;lhHU1gD8NmMB$< z$x3HFG#Wj69af&%!A71JwPN0m?So|=6kG5$ua@f|9kSUx;bW(LC*cm0djS^)IsH~* zv7)S{rW*C?)vKfxK&W_vda6d<=QPZS6V0vYLj0iW!i6s(ya^Nb!F6#9EpPV&^*yUk&M#=k%m(_2jvmV58R=<_5uPAh^*Wyae z);*P8D#{280Aw${x|tS*mHnUni_URt zLMC$m-I`8 z=ISN_cH&9Jj*dPBO?_}D?RqNz{|>7ez|I~)o2Z!T*ufO=Ms55s> zVp!NV=%N<#K4YtHT}LLYb)$l=J67>US|2h|H!;+~O&S!vea311^))A{5({I^`u^}U zrbeooG|80xmN0|u3+`Edm^BPmBF@uPLnl(LmB;)LYX}$qun3|je_DK1VOfXia=jd8 zdQcl?lV855x+a$O!Xs+{3ZT8JB+*ZxKrE69ELWO*g}A{?m#!t+x!C1Eqg|$rkg@Y^i!W zg)lFK6G5Y4HPQ2~>IY*oRjT&>(8rG-zard+0$9$kBkxs!Xa3Z~oDR&U9v!N_U9Krt zZJ5Crr!JK+e9Y7J87aarES^TTLo%FTt~*3FmXh^na>M$*J9Xexr=LlZZ0M#lNoDIr zi{4g!wTgvhkaNgMS^T@EoU@b%hJyP15GPe;7^WwGOp5IT(omPC4<&mn5Gwlmn5fh= z&HgQ@7Wn)iaH6<=ay0{IfIHJpElXIDKn=qgC+%SClc!FeyiNsnuu6un=zvuj87~?e zUhX*vs_=mv&+vW?@fl!v*ykq@-s4&?c$kMDq-bKa~iI&7k8*Ek5qb8XgMK$XE%yD(hE0VWAcf4UAU}qSw7U0$D8IMyjX% z7=b=4hR_}-#v`!M_yU0NL)8(b;++9M(zv{J|37lTZOW7>YgV6yzx=n-@yu(jHwu4! zJeaUrCOHux1~FK{TflmC`SP9>(}3_{F!cG=?%mbT08W@7dsxiyxvT(8JXwHB0wlwF zXM+6>*rDu32+T9jX}~0(dnbSnu&o}a?g==zV};Yl5LJRfPlB}ti1cK{ogNkAyKy?& zmN=9z`Sz?6BdJa!904|^Sc_;mhKigq+RB{8f0wuXb4i~Hq4H^DjU-sN$HdvF=S3Ef z2eP?*??vTj{1#81=aPyDWU4tnwMeq$ zDDo~a@(dYbX}%j07b!LphNY5b87$}Xd%)H!4&@nfw$UwEgUuOa&3oB~lhID5PSi?{ zBQfm}$~J?1!ei(>A&V+|d^m%I@*~j*eF!gnattAn&24I^{EM!84;?!6i}3r~VwZo* z`Cra~p3l6D5IDx*CWyMH|WQSDk3ldk`G{RC}k-aR#^yRoO$9fU@YRyq3!yNZ8&8bx7 z3tw@Z|3+`N!5iWp&lSEa#qN^O2d~H>X3|qjLz&<4uSJl@q?l0qFENt%sX`w{z1-QG zO>&9UB)wqlA5E0&OrLWkxoikGfuhjM@X+T@Vy@p9M@Uo&6Z}xQZAQK{G{-F63vY73 z6nsA;*m@I!xAjLYJpm;Jo1#9BUZw}AHB`Fk!SuAP?C?buIAre8!^4kW#|Q7R z8dR;hcc9ZiuYQsBx1B-$mlJs%HqusWAc+dR1%2j@YlJtYQi8&6}19}E*UCtD`ZnKP$G zZbsp)=Rc7H)xTdpb>)&R>n2`0HD?qPfdZa%_omZXu>!kE?2cZ=hYaagXGoPHL#(e; zH9xXn@@W>hM!a0DW-Rm-azO^6mn7wSKg)h4iyEr6_;ECOWpCwcGP#O(PP5-y;?$o{ zesa=0QIFi^SqP2NrhA3h{@-&^g{C6CyV_jE4bes5wNqZtD~M{RMAo#2hX$vUsI||C zxP+OO3R4Vs)lluKg}ba>EGvBM(tl4*j=4{62)dMNVy2UaX_v*x`YdT7S}ER%Q#|!R zVe}=}M9{2cJ)Te+HsJ`d;-o7G)f8eA3H=$o(;IS;={licsj%f)D3-`UXiCb}&WUQZ z?|+HM=>E${$}IMJxedz^uDyQ!9Ci#%B@3v+2GM5kk2P#dES)UjoQmcAn2=@lIRv3* z>EEN=cW5Dz`pDKkt&tOrihD*z_S&BGysAwVCEbbG2YJ(pT(p1sFlsjtG+dgIA8l`O zB)O%2hpuz5tphdirBO*WmwXuZc>KdT`Ht_@Q&?*_pI>cAU^NY#O!{;Aa85l%o-!ws zKUu6lwqWFE2AoX7jh>Eh>aHpB(3|5Pf2Tlmt zu#P5nozYtZW4cAbZQW9|)qw-BUg|wla=Nq5(+LZfz4V{QjvWgLB&qO#B&^SF>S@#m zHF|aiYBC|e@{r;G>zE@Gn;DX!S{fH=(>7Dgi0|7cn*%wfUYX8vbYG!rD`6SkNgI~C z;((P2B`i22jj9RB8gk*&nlMM~UtwBw|m-sz5Q%rJrzfHSpI6I)um47o(!1ZzyfY2t-$ z86G3#1M}VVYcdGVZunA$y_?LHaTdX*%<2^j0Ay2b1rN*o5Bai`gkp^l!HpR%eO6DbsuRuVDqAz&&>o z2XTQ`n%H&2hs_}>PUL{-h6_!m=o5Q0!_c0B1=u^gFAOMwia*8&ZIuID&Wmx_*=zV| zRl|hyStJo3c|yC)H`_XS1_5U>FX*E#l1!PA$6)GDm*F@g9Y3q~PThTYDTkpfz3y(G zL2G@N@wAEh*8LB2VCU_7MRa8T9HD^nY=0oFvTn_%c^IH zpV4G1LK>r*IrU)6oT5C@v^@TVa4qrN2T+{W3aj`hgsan3w|Nv`Uuag;^yxI^&=nWj zDdBV*9BfT1q{-30UZ6(Lk1hK(-3F(4nFyS&1nCZhA^lomH2ukJ+Z6IkDUW*6?QB@_ zwyMEArP((h2EG13pt%UAFUyB2Zi%)xdn!iaV^pJXa)ixnL!3_A8AY$* zJGNfzNSJfTI>z%ltUhnRhu9EbZE=iV?Ga(W1E;dO?%WaHYlj^}E9jf%^C3zQV5t5$ z+6_R74qJFe_-)fA8%;sr4ED=q$Z^jW3Re5^99#9y$GEqMPkH%xu zEGDQKJ}7M!l*5vjLKe`Qz^^(14znb??Ug?)HBNvdBH>?KpM?M16gC+L*;nfH zSHkP48Ru&|CbF3$T+dQp;=^U`a6Hby@CqIyyA8}1UekMurwV!magzwZt(riOiz(wx z@Xwq{@OHzBuWvY{PgK5o`qC5by_Jd}4VoINi?8dH z{ZUu(wKJW1N2FLTe{tHS3ja2s#!GUBi2&8JHfm&AF8)*By@4IbRzH6 zWT*pZL5aWNF_@(S?97fi0<3M&&W;^By5|lMV1{XtO&z0`SG)1yY5v@YFb)z!bbrom zwygnzWxpIX>NAAy63Z;Fu3w5?o|E*cC#10fXR;uLFuqE#vW+i5x4?CK7Xc(Vn$toE zuzn4bC^kxjO?V7?4y^4L9N#4zdD3Z>31!+!0sdkrumw>8Mwpk(zqzJs3_t ztE%T=Rr_nXQEcQN81Ko>VsCw!=Rj6bZ__n@{`>=`{dqg(P-{-xwZmm?yzym>?J^G7 zyhvW}ng3}+)Xj$NB~QLqmnOKbvmMv@S7u<>0% z0{GWj7btuO2hmAtn{z9+DTO$KKDD1XkrYtp+kx=QH$G!&G! zRkg#Y0*SfSwdXu-8p#aq>u5mImQ_U!>JBGA(`7kMw+gPRRW`s>^8IAr93_}C5(UBh zR#)WFU_2aKZ@g88B4Ag0{}4!bR*NvorY@D&yQ1;w-?fG<<5_gJ6P#l3oKM$$g?{*< z*mjT*O!85wim)azwxd&?A*O-aXolnT)S^orp`sJHjWE?5NPAaySLg|-LAHt9Sb%&b z^)UPtG1B4W2|izo?ET|;-#mE7nZ|tOayn@s@`Yfvn5Vq?0r6d|*w@&J%}cz|)hy~@ z2b>RHpGA``oQ}2DyP>)pKQu&(;0R`+PSIdI-Vhth^>5qbL(a-%9*cQA!&7y&GBuM} zEayeMu>?ZzcbR^QZrI*xm{*^$NhmBZ5S9`VyfKZ#&>UEZNFq**gQlmwKV7wR=g!(l zT!O6;W(JWtHo_F-sLb{FMxRr;zr8`|#D@MwtWnxJ$*1Hr{kJAsNKbKtu|oS%ZC*xV z1(?&42y^I)|JxWGH|LDA76pib7jT>9>Q5h>UbZcmW89&*fOyZk!EIwU@y#ANXRBAYZU zao^rU(5=ALxmTD9)3jdfIteLhdKqdR3FexXCOnqhaJEpgH63XJKxG;9MA^1<>C){N zmhQZ`n9uVB^tHAK&tlCaM`b*c55H`dHQPadF_~vtVX2PEQmp1Zl2F+y zo!j|owTER-6Ri*$cv%C>ErBl761L~`6Y=ZbXY%Cpu%OSc2MeJQ+RsXqtpoI73e#-f zW?L?7*|KG+bf(`FedDMirQm2j`$mRJjYjX>5dlN&&u;Doz+bVT zWl7boQf@Gc6Dv7I-LK>AP7g~IJcp&j<-HWVlQC(k4vSD^JCFik#7I{}BYEr#4(ww^zK zeg+Jvmb!zz8AEQc{D`_2#|qEKX{{M-8h*8KXpx@)eVxv4h`NY-fozt1i>Y!aworD2 zmsjmHq!{*LieK_bg$4xTn432h9QC`GIm}BE`vN#M2uFVmOS&(B?(@N_H2m3s<0tey znSo;gLddPt&Ye5^8CVaP-~o5BgTb&qOKbpWUJfhkEp6mLu5++HM&hy__mv>P{xCs~ zmG>9^5URqaj3H9Rc@8<2(F8kzqXsvUk%x-(Fbu%gl zuazIQfYy?GoV4j}o(Wcu#8opTSt`eG(sQB^Dw5&FN?Ux5@$VMjTk@~vK=G${fBLwn zG2Z50w5X++tfjW3j&Iz!sdtx+8{zEmnr0Xp28-8H?jJdF1P*cMFrS(=YZj|Uo4cRd zFtZc+le+lLuv!aBL4!su9P}htr-SegI6bG>`l#HIBkvnn@z>nguK~bww!)76S|DiG zOtW|y64u&|Vi=|;=S3yd^syAgcpl3!eSlRreJr&?QJmx7EP~)9bu1ga_!xdHncf&h zIVS5>{iG=8v~CR-7C8zEVLunh+B%o)VKSD zaBeAB#grK98>kzd2unj2EQA4k`&~HiN5kpsZ~`wV^9}wYAy|oNiBQ3g(1~cMv(?98MY;d3j`4aI;dF9cwlKs> zv#v8NSk_f?%odkR5Et4mLa2`)cHC!%FWSRTkZ=}`FTay)#!3&*o!0um+aMUvty zXAPO=(BqE0JE)@D8NUJsPk+91{q?Y(HJ~B{$uy~I5id;-M?JJwr7SiyQMx;&al#Wz7oJtyr+mONOy8FK?+H?- z;+CKyiMrD7f1-mt5o&pd%y17q$f<3;xyrM zfRLSL=iJGEOZ>$g$g=l=RP$YP{c+ALtdz@=O$MX!CH5nAX_H_yO=_nvFr>6+N#zHf zQT+0Gwj6SQmh)#H zOAm;Oxa?OB&IGsamvi>XwSueS!mnTV89h}vO;U`mIw^87L^QmshTbQ!llm0=DIBsv zz*Si}_rEGC!+ObQA`6C|V}BZpjfU#U4i<)m{FH34`2MlvCo%a%S~hUMBFV|1Qv zB4x-oHlEIKJrXa2PveBUV=MWP14$m|Ep2AN^Me{{+GjWCveV!z2$-!XHq;EXvwYG{f^t4R$ z7{Py{r&RT&A^3{mt!{JrbeP&-6Ab1hC53L7=Hc;+BEWj86+ok8?KW^xmhDkaiP)4^ zJtX~W85W{kkU((J`Bhr@3LIQ?F1f0<*)iCKxlNz~EOl##11~8nfPdKDu6gq#iW2p! z0Hmy}Ll41?id^d^-xyumZKuMICA3hq79T>nAMscT|EQ1jH~xDEKR{6eD_XPl{rDK$ zFR?f!)$ zD>-7xVNo&JP+jIBJdM;1RvpAm9C)7`x94N0w2=7TaP;zqc~R~L9rCHC0d zPE$XHx=$i)dO4opCAA7S8yP^hQEkTMhGQ8sU_Apkdt1LPz3q#T^ZRXk=fFl2Z=!g& zcPaQfk};@yvJ4<+DG``j$p+>i&udWT9zhK_P@g6!ow3TMcO+1Yd@bd+4ZHAM>+*jj z$kEqir`j|-M5fyGX2F{KBi{sPkU0As4Wx?1-~?GmdpB$; zXAPM?$divuA4@I9D{KW4EAcn?WjiOYF-PFb($p=%+*@LiysZ9ugL;Yvu6!s~FOpve zLA5K!5U2!bon*14la29%Txd`Vyci;EG(yi(HsYstY*~6Mw21WUir3h&wc)5u%&weW z@f17eh$t8nS_us&AKEbze}V4V-YXiIgHP{H6~F|eS!f|XpAW1Fu{kLpo}m0LgZi?Cm4rM!Av3!cFm&%NHzgJ&AohtJt`{T|gOmAS+!g3qmT<;t|t zt|&uUti_e#ty?d?qGHkPXI7i$3pk2JuVvNDG$@ZgWg#`~s^0T`#_*d{;xPc}(V?S8 z3(E7Fp~^EZc22!FohUPlZtEmdm@R2)rnvMl-kFZJOser5UZ<-kPljPzDN+Mk1y?&k z7ocJ622QWWON`g49f7v{|5(m|w;@goMChw(JMCtWw0#agD}3%PaSE!=6_ z<8X2v9qI;W0~E5_9E-zsZ`r39?`7II2IlG&35oQ!sv)pBb7+$$bMMoyDVqJpTBcGa zb#NZ{5k?ITWF!tgwRD7_P*F;DmoQd!WkLiAwQ`&LlA~@><{Je1MlM%xN zU^WQV7k2uU7hrHoIVMjhmuFIM$hjXmv6xn8e^2NBC7kO(Pr<@-YzZg=D|^+VM@b%R z18Xgaii(bkf|_8OFk3)@o(7i3rl>OVz;Xd^uIX(^z6)xCmI#H*-jQQh0NQEqP*b&n zaESz&4+=LIXCFME7V|-4N~0W=4?q&*&O6JPKd25Y5ScxD_9m6u zWJV~vUQy}4U)&~Z>g)KuQ03vbed@RQ15-<-YLB=@(K90|aKKydzsiBKt&8QVHgMVo zpUpqBqLnIleNLiY!I{2AbQ3;uKSiEMzDP8KKbOD~&HaRI^YrZP>AAjRsazI5CC|`A>F!Q#7R)= z1ADd`xG0uPU@?pD>rAkbnP9VcteCT+>7CBsspS1aPx;7DJkt_5CAX2#k6WOEpRRF` z{Tzh6;RuF|B)9>VtS-)Dg_dgx4}-HnY|eGSZ@-`Tt*iCRv&sC!8SjQ@rJX358%R?T zTjd?6H?T?EJvml3F@kBlSS^goWM*_4sc02tXrEMRRI)#~#fVxxm8AE}&;$F&T16SU zJE_L_t)B1xB6cwoy&De%Z>}Eb4e3M=%Jt++Ys?tBiS^)e20`e9s=}coB(^eRP4oOov1){L5Ma+JmhG|}D-|ikW|Bj7KbS{w zTY*jYNcG44Q2@beG5F=9zP68v3x(e@ojFjv@)t{@;?+qeCr>5vcm6a~&F?WRAAZ&e zuT%j3BwLH^99>tg)Ko|)J)x6P|iMJnL$Z^K`1Awy|WP;e*B) zVNOn~JhZTmjeHHzkHS9JNSZc(55tJ%nYAa?dhKi;Ss=JuhPuI4mQGiiOAV4`g1~aX zc}_5^HeXbn!wr+*uJRoV)#$f?q#n*G2n_m*u$_L05P@#d?+^P)pnn3p0-W0L$L*!Y zVgXB%a;%A0M+PxJYzQ)Ap?jAU8U_8hX%-EQgp~@gmct`hgrVFsK&ZqEAqGgef+;bV}v%d&d0B2jfDXdek}*shCM3dx1=bFpoLRi z-|8MI$kLKAH0^<#wBmw`<4HwXvP3qO$H~4qUeC=ivm|!i6TTAzz&(o{yJg^61@F?Z zs+)M32<*7`0rYx3JOXT!ZtZ5m`N;l9j`(iE{=6RbSB16)tdTG)0P3~6?)Uiqw2AVg z2quD%ue|fL$Hywj&{b_GE1U4I>NwN7v`W3#f z$g#TQmh_F^PP)i~tD>aIAT)?PmtqU#*Xz9FA158+?CX%fop(vBXp(?N;dAVGAz9~v zju9BmlelB#il|?xO8*-3p+xJAXP15CASXoqF$Bjm(m9PJ;Z_uwK}$M_aXCT$^-RIX z8@Q~&^XymwxTv8GLRGrcwiD}e(mNblusp+;2cj|2@NiFx&6Sj_E`u{LzEzgfFubE~ z0|>DZx(<&p&KM+w;3^8xw5LE99)s}}+vL2CO~Tkm)Uu;6tYMPaEPXx^-|VfMusm`$ zZ+-!y87lZ%DxZRE!STmiTf_~L9s!bgRQ!`u>?1?)ANhor7WTJ)B1&5`XhuRqGVazb zTaM;{UHue;|JC@>Aoao?4O13zb^-HG^;4e4r1&fRiXy;%Y*)Htjiw)!4;5fADW$g7 z7yr!J>B>}ATql%CQU-5W)i92)>^S1DNN5#+H1ZCM0 zLXUHb5+r-G2Y@0w8JVpUxU3(Rsfn5Z#>~Q0hlS;^Dm(I4kTz{s){^>?(Kes@Ju$VM(1b5b+LX|{eMg#9>kUB7=r52hrK%^(>@8_|ZXBoRjJcr5D^GRMH` zk>gBUvJ(@VOCp(%6R;RVFOIN_Tmj1%sDXnr9Mugm^_gV{jKlditBLCGO(A^6;tG?B zB>?R#T0vBS>YEf=fDH+h z=b#*`33dN0iQW%@^_E~TIQ6QL82bngwb&|#P+w>>$co5*For3^GSfS*C@JcYmLNQeOak3a2ImS zuIKYi9Yyyh?QK}Ogo~6{GdYZJo*~qd#?q}-D0yL11MF1E(i@=oTqnXvLQ3kLu-NzQ zSl($bUikMZlMrNwbWUX=$2!p(OYB@XlDc99j_e>W#Wgr6)F6*#YADb7(^BjW2D0Xx ze8y+2Fazp(-G|aOVwSyegH|Wg9v=Lk#A~{rOjdh;fW>mZA)I6k_pe=nM!~QY{F142 z=}E@nzi2JwRmu1_t5r`0hc`1AbspTeHXJT0ag7ZKp@m9A)6*7XYipouiqi%v7_5Yt zf^fiVL?@@Wl%mXcdVnZpu?bjTDTcAN+vO_iL^C#7ORiGl zzAh>K#H>;HFQBt#a(Tk0QPKz&SS^LnF13#<#Ouf^YLMR1L#RTT9`cBwm4d#XVQ9PH z%hR#?hYcb7^IK0l&)^&r{pLC-AD%}IGYPJPci9gN^Zc`e|A|!#3-Dac-{GJ;8n#@5 zJqP|4>-THQWpn)G>N-*K1HQXA=H?t%Q}`{FX%6^IE+twVpz1(r{b0SV@X*W^+#ZR^ zgRx8*ZU$7i3!F~jW%^mFcoMnJlw?+TpnM_$x!;jaG9YvbOKmn1?J?B@E%*S-(uh#^ zMDfU)s@sXAh~H0&CdjA3&}1Ae>y@BVm^%kwk0yO&hQactg%(jOS=WIhEOn#_HNA8x zg+!ROqKO~`*Jxp{!dA{(+L;4|KYGpOT6MibuQN4JQQA2LDe-%}|MZ^Ir(Zmo1ieaY z&Pbq^LE!ER?$&$#23O=kgi){F-80=rq##I@M;=^v88P`PwmVp>T11)3Y z^s%-&eknk(T7u$NfC@OY0^GSdx`RLl+qBi-GN)`r14mH!3|Y_6MV+U<5k%Vrv6M)BEsUr!(eCc zMjk>-Lm|^1+&^_{Sb0th263BjtX8dnq>8gi|2HxUzPc!yi&CRnDwFyA7DPT!2P2#l zWNC$=&2MGcQ$mL8*!x~b1~H3no|5>|Dpvb`2CU1xX|Yi+P47#VehGu|my^hHvoe4Y zPPLpa@qmy`HBlQvj5h=dc%m-j&wYrH=~-Y&U?MR`!+s;`IbO|RU9(z6ULrou5NB!_ zEQ$SEuU~cz zLBLqA;ntEgn8x|Ru^q}}mjMb{ZTZRyydZmAP*noAM7Z{bk!nLneYSZ{*0$;NoTP0D zAmlOkja7aMr^cw~#zYOa7}N|@UcdetA^X;ks>m38>p@FkFDcVQb>_*|*c2#RQ(|LJ zIayA^xotlA`86j~Bi6&I;A*EC9;qz29tIqpm=et>(#@cXvZd8*^~qqrzNWkl)lliK zKLC-s$D(+TLcgg^kk*t`Ow3zV(|RjBrtZ<)rga}Emh_EN@9S7-F6@FAl)5%R$7&?} z9Rt;#qIA{#<$eL$j3=g$j+I|TX(3ilg%UP9ZEAWyv~JzH4K=95ZFNFO!zfpy{7nem z^G~G!I2B7cV8IZ&rh|Yb1n*}c0HdQRjFY3yXjnwl-}V;^<1MM?Kw+N}(wrEqpSP9o zlzq_r$W={kwEh0L?3YJt*p|Dt-bXR=g^FeKQ%ig%=;=fo6YVUR*M7JQ3V(1H(x7#~ zxre<~M)kyX901;jbO<(I?^i_7414Imc=6uEN90uzyWXJKq}bcjic0zjWk8`D(LOZ0 zF3Nc;PTFOwExlI`p$SQrQ76`}dxZJHvIs&wi13Y9#d^pG(@_sc2ye>i{~%P5VNUdo zC9=EE_H~4Q>F#RFfkIwBn8dt%8HsH@xv7!($?z|rwO(XqfZE_Nm8(YJtvOV0i=EuT zD&;R@AMNugA8r|4RfT(Eed&4bt(ZHxsdO}MqRQml1_yd+ACwW^LabrgCcudwEQH_^ zF{)SZj|6|r50e$VhwpSln^My{`ub%xj2X{b(9(k`?Z(BJ=AMprx%%?u{zhmZzF~;- z&m8`;C3~>f3BQzn5JR!0UB(&x5zEKI!tfwY+Vm1RHjX67_I;oh7j~I8-aIO6hn+j# z5hXichjn+AB*8Z6>>buA$&{my0Cx&$}gAg>!eGUF46fj{DA*0ns`yR z>aOvh3fzN(@%Hi5!F$g-z=GZrkMGuefbn~!;EJ4H9atS$8crjz;~2FYwPJ-Q0~;qq zr9Fc)k8rYgDN7n*L>P`%TEBh)8n%8toU(*3n5u9D&F7!z*Zs{u--5%;Z?Hs(;-(-% zU&Q0sPpu3qJqmWvS^W$RM*vy;c`ZXxh2KxMVtv+(cM6W$OQY@d!YK3IgWn>LgVd=9 zJXuCE)`Dbu5}2Yc0XU=h@c(kfPqmUH<9PbDRo(tM0s({O%8Lcdm4B6kZ5UT9z8#iwBH)A~8Tw#PS6hSay;=5Vi${n^>uE0~L;L^<~`>wx4)J#HUbhR`|5v(d03FfY~PBi;j(f zHa;fnc?|pwn+zG!yM5F8F0X?wAC*>X`)&17mn zk)tvQElZbCBr*{ZKO zeT%@Q$HfJXug(d;A;4Sy)NmZnWozd|+$Tq~H8WJ_aR%^QhX=k z1&+Oc|FF1aG*u1ko~0*k+HIGJL;sAzo zhj4&XkSA)!#Wv-6PX9jqhm+=seK?R~wfaK)ezHw`nm(7qMk#ko!=dM2@4y+p9E8wI z{r5?oV}lSH7e&z^z0D{Pc%xZM;JmB*znxpzsuerY;5O!+x@mB5wB{aqTQjLIKAi6` zCK(9{&yOzi%4sdr>%tulIdk>wB`8~q+{S5NNqTrAaoVre5G=I&N%pFB3xwdMg+{*E z&B7;L#Rx*P@O~MDn#Yjer>Jw~0+Atb?s>w}asmWc`8zIKmX<6XXF%O{^A~AZ?6^OW zWdIy$_3)%c(n>ZN6_4%M%;n%hU}y|?whF6s(b?*F)#-zSY!EO$^*Z~Tmo(c%8vhtx zsZy))!TJZVPZKUlm3Hi)s|VEo5nTD%NagQ;aAA7_RxYs9({3fbyh@gI&6g7uTg7Y# zVC};!nzWApUC|p(tcvQx%60))V__vhR>|*!0|k5!vN2Va%FfyWX@K|D>6~K8A1}gr+?zSB)4NzvWCmxaYU)i7SnRu zJglmd75V+tCHt;?Gd~Dx1_|k|U+u!n%;j^YOtlUd|uD5Slg@MIwLrxoKqBo9AY>CuBX;6LB*C}i3k zl$W)Mvix}ezIS^#6A(XKqWsPHNVY6#Aa`GqrRc*}y##fFD{diXn;<7DbYZM{Pe z*eD)*=g2&j1x2>K_E->eV|eYVOCetd@OmgGloU}BkiLkTHVnC~gFL~?Yqkxn%Vo{I z8}7a^$Di%$|6tDKXyWh_H;3!P5GEXXvAw4~`8nYr6V+u5wt>YcaC!AsSP{UFry{^k zw|0T8)#S0QJyDEA(uPur1BB~^1G5-W;5*8?oCt1BE|N-SeKzSgl0M896@+@L%Z(&U z*R`8R<2(g=*^%@uq~Ru#7e-{aM<^%|D&6* z!0u=6gD6Zto&vL>zuo5@R!j52jZ=zmVPSte>vf#^rAP;Ou19dFu->5Z^+WM*qN-7~ z^#jJUR6_8_?H3%q!TzOalG(3doXw_`vxUm45-wPMcS_H*#W>YAta>V_psLs<4cjV@ z-|#~16WMFW@*cpxb9&b7=_SxZ_0PkPL&uRW@IO0*ywAh+k_R>OUR{?z@+q2JkN zPxR+dogV47acG+^rETEn%F5#rv9zrbVk?tBSGM-_s#)`^4IxUHS{z!ma~{MG%Tj;- zyMoSdIDYyC{JOQnZR3gv<%GlVCZp1DK~y!1J)Nv^4X$s5)&bWI(9o7+;5$+jtq zI2d6PLbvE2n`@LvPb2UXCw`yuVBD}+rKe2`82M>iN?9j@VE_BPyUHXhLp2{@ElEALDt3|9b`Z zH)#Ipr$k6outs^si#z?daHx~!iOlr;T^%~?qWN-;*9)MTtGXmxu~f`ohy2R%YOsE(XsyNI$_sx{yZD>KDOSDuM{w#OXHy58Vtm>u z#}OgQ)mj`&_hw&(l~cnC=Mlkz#PCR%#XK<6-Ap55ZCP5I}!7Nwvl}m)kKIkffASw@bPUC+*vE<*8+sJ`0 zl@v$3(KDQ3-6><0`V?M!BGJ5<0eWIh2#x9yyu)ftrPa_>&ESSSxDW>Xcc5NWlkWgd zq+vBgB`?6U2dh`=q7e@0&1bP*prv)P=L5xI5Y9xEMMGp`O7%2p(}JN5(t7NKdV1_c zdRiDXzT|>o%?L${CC$?d-0##2U+UEe(cB~#wD_93G?d`&G;eqG7D#t?F?V8LZ@0Lp96@#C2m zdcg-Iir#G;@zU0cMkN!-Cxb&nkFzDGZg~^=4Hc2p5TB6fc1#2;o-)zob|s6SA=^cf z*EJZ9#j}_Y-}V;2m2}@q^uuAST%E2GNuoOm_$sS)B)QCQ8+6Jpw_XRSaqE7jqctLU z#RhS&4b8rUyHeQ4kvMvQigvq89TkO?ZZmwwA`{>T!Hb;3KGx*rX>d3emq^c;tssGgG8~y!wme2s~eo6HEvu< z@*C*%GK5Rj4M}moBV+>aTT}uZWW8Qfu1uY17sz^+h1%HPbW=4vw73D!a&mAXv6Q10MDR3Jt%^h-YSXJ5m@7;F6skXY`}+DC?PVMTd3P9N@A$X!0_QY#26 z5gVuPx)~OhhVO6%O?mZ1E4AyK(A_X+Jl#64xdol~HA@VMK99*`Ee^$I|*w|iBWhDANV(>tmtSz5?GN* z7G=HZJ{0P15y>zgXe^W*ibsvr&jf3b3AQkkQ}HgQaYM#ttUu0(G(9X;Jxo2Tm1XKa zFGsNCt48HSH)-i=-Xus|CIRkEq!Z2V!OBO%XaI8&xh8|q2C}M&4BSA{56H1-X@(8E zC5@)c+~0{mfskdrOP3awF&@XE&w{a!@RxV(He@rb80#cUEOao0dQ|=vJ|R>4h@`fa zU^$NBUnLMKkCpB+Y%l&(2Gu0uaeFF1*KyZY0qAxbq^3yPAt=jP<2rhKm@P1_V&`g{ zB(P`RYk;xe_B@@wHcXQc9_m0=~%UgxV;3Q(0=ZRvNkEJXz?)_kvK&6>+M?pGA) zxW@`bFxsVsQcg1OMA4rVrKToj|ND~?DBF964k;mO)a+Ua4kDf@VpCoVhx`iXNmyQ< zXNKLu0g|RLsve71$)fT(ju-Y=sQmBpl~%Aq@UqM#U>)Tc-(-+V{#OF|>MdS;cJX2l zLFD?=wKGr$T(`G(-%G@=SFc`u2;<&1#fJD8{R~|F1z4d+v#5NHXaR<*(>L#(LpZq+ zl@Ykv7|Y7}Hh1ys4+JW}D(XwZ8;c?I2M)G%D-6*;NL*`Me?$k1UL*L|vW6u0gt*{6 zvJoAROX>3B7u~^^IAcz4(O?;tYhE-?{oE;N5>;EQiF4pRf+2C#iXQcs$dA!#s(s+( z^MTS*z%>7sGIJnD_39I0QPk2$crV}PophD1B~pg~W4MxOe44(f1_Ws5(&~1A%DGdg zc5e=}V4PR9bS?Ww@P?TuLt$DJ7%dt|)>bKAhUOTQ^>SzlBx1A~2n_-xq+;^39 zSs&qj(Y8ljwe*=Kk`X!6_J5qp_lqNZ=19>rSC$?(a8g_v7FB-k_|>?oXjtm=MT__` zk1T^T)ak8GP=7ob!lth<)_b6vH>ThxW0{`EOmlZo2cH!Dy%n5kJ@sVm*}|Fg(+2$IVP~{=Nb@n5& z-AiX`OE^N@iNW<$zghEf1zu?mTIRTepO|2k7;GJyD*|8zEt4ybg6&sk8h{C4{9W~| z+(3-|J~K^Hg(7rAmgbff)GU~Pv-GYx;K`Hct3J!dDwz^*F6CCrYvEXX^2;`AGWO^xkCoB(s z9vmE%9(J9M`Vo2jhSczt735v#xxW2nE3AGc5kWqn3+P|0A?24K7{il=kikw|A)P=0L|o;##Z}C{iF;p-?F9PATqIiUhad5FA2+M2UNL=Kas?zPmd+JCpC;-v7JzD=@U# zGv_&HZ1VhLVq`jKMA;(07L0M&5&a^A;OQ4 z%C9H>MnlBuHwlp5ridoMInVYViWUH1L{QbKAjQmP$r_=s3ta`h7hx|sB%3MI%QyWV0_oH8@rJSD}@r4T!I;+1xQvbO*Wb@q9`-)z^@ zvE_oaY}NEKToYi6pQ)`^Bl4>~%-;y@EV~>Hvi)qKsfl?|KSRx(wo`G`Pp8@{eP>OMHiKO zLtHo-wYnTZel~&wVuMrXJRLzQ+o>pvtyi(Q9-;=I$|(#ck=UeV!+1Yw+B>KPYrXf- zZ_479C8Z`MCBb4AY+LE_t>Wydh0mXw$)bc%Unlgn;EZ|=TUJOlaX3A5jU0=S45d)LD`GX27S>Cy*Ek$7(JW>2 zem_S5^jI`H3g_s8i?#nSA#Ey_$_!I5>HT3h?7!{CFg}oK2^8B4=S$$*f8hAWe2HYa zpx~3+w)tY^&SW0TuMDJn7hT=m`GHutxmIbCt?%~j+pQ};>&*v= zU~T9}};l=r`p*$TRwW?4Jw4+d0jZ?o#L zz9oMTbB$lmhGL;-1X$;S@-#K!yLU~RQu)^yfo$`wRJk^?K z!kGE#vXm&!|Rw)z-9<*;mpoCBph?3h!u;K?`~DHk- z4C8_J7psB`Arr!04xn|Rv5MX$?mMBH4fjITJH$RwsRo<-%Rz9kk!*w}N1Idlf}~AC zXfwvcwS?RM%CQP-p5WBJyoO7@jG6O|f)|mxgoj}J+?HLC`_wfyEjYB8zT4+x1PH|* zu325m7TmkUC`Tmk6*B1_s8zng{GK}}WUI`<$)%-WANhu7)ED*%%Uqu{!t_ofEor4Q z4XjX*@QYAWS5CgP38js7l;sZeq!21c(!kQt%YLtkT=ColuE}IX*9J*!Q%2_fB%7aG zDXGmekA_nZ*I7#?L!bItVW6(mM%uRYvSM?9wd?DJ6d|Og6?1O2Ac-LKn0rkX;C38B z68BZlP3+exH*Gnu&FW?d?I01dflSvsWSKQK(^riU57TF*W)PCc$}xNu;^g~G8x#5R z!2=}D2!khJ`8m(h{j~_`qtpDeXBx|5H#%O~dWBB?+%E}<=EHLOb3TWiz!D6tBmwd& zOQ!VC;k&O2UjLnapoC^1+qd+T&m~z!nHh1tO5H*wlu}4Ih%5#4i*GLA! z38tN7n3rT=pUT5riL^%BNv;`&HWzk-L?TOP?c0P5;>2|??6!Df8PCxHFa}e}0m(13 z)Jt+u0+l~cqRcQXRDs!!#Az0e;b{^?Qoc2O7NYR?!U+;pX4ugO9u{H7Gjd%q#`nIF zdA_Pxa?fq@xT-zl-Vd=7NQVIv8`!|@O7QgqlRI>Lru@~YK8J31E=?K-9k1uPtl(rN zQSB|~2v?MFZYVI@6N39uaj@#|S=CUkzaSZ4y%dX79@)CvwN4}|iFH2q6E8%f$$+8E zqoOWE^*D;15Xf~U|cT7pH`V`U>8l&A!Wu(?X=#wn+j=OWDGj#@5if!pvLidBmK}Xyur`>$tk8`mk=VdM+iK-V{k;8hk4rzc~d_Qzw}mgK7|} ztcQ<*>vL%EbVac@U`|b#+KUJXm?XBL%lZWdVdoi4MocD=_gBGGqYiien^@V1eR>eK zXWpOy8&79U6ii#L6a%va0gy6o?CU`{v)GmFk33D1lF=t0b`pK$O^Y~R-9@g&>} z7KK*(<6IUd7L_dVFrx9~pf@e@g>B&>G!MVImKs_OwZ|K5*d<8BgGva+##I(zH@=1G zi4qB8Y!E8^ky;P*6YbN`q&qlbWZg>F3*!2kDo)1tWna{olqcfRWR&&m7}+5p8OLJW zOG^>|*A=FY`tVH6U;K9JDSP>=SdAcRorzuN!*#@8f>`_?$SpehGE7Zhe=*l)Y`FD< z0r;2q?+3oY8~H-mMB=BliU6~uzBtbbOnA1v0}v+KfrMpFU~$V8kJdT z9iJ%$XNjtN1af|qhp*`SK~1h&-X4A-XSp6OU=ixb=cj@En?;2aG)w)v6QA)vTWA*W zNf;eF6Ln7T<&God%7Q@hT>ts9xyXHmwr-N$cv){ztSc*T(zHPmwu`VGHVi*~fXSPQ z_H?2;I6i;wIWd@~F9&Z*Rloifuo2GNjXa1+jtLY{!5t!$CA4p#{Wt9V@l!R&|5@3c&h** zyv^%&lH5@Hi$w|H8|)rLX{1Iok|Y$j#+Prael^@~5^06d5Bh+9ws;bo+X}AICr98= z&fQiB^(O&CX^*#e3?Y0+)fITY3ogI`aD;rr=^@WEz$GMLZjv2Cu8rD^-7vOv2SOxP z5kkL{5L<1n$8m>T)JguCH-ZR$DwxXzOD8ujjpc)7e3iOaDz4i@Oo+8T%tmnh4BL0@QPD#fbF<& zGlcVLV33yOw{IV7Y)TtcVYm>Qy88ylB)*|Q#1$OZ)a2T_Tt+wOO7Gk# z+iAf)Mox7&b?uoR689|k1}Bc=crb#i+N-~b(wXhB2Z+~xjg#yj_F%Zc$i)*5r4;-g z2IKp`?T7YwQAt~D2nrfplK9sEZ_jU{eJINw%6r49m3*!_b?r89hGV&i<7YPK)Ubhu z9loTC7hxsxK^DtWZ3=atmWIw+%h&_L9|Vll&Wq+Q)HTBB{2br3b!Al4>zso`e>@kL81F?eSvS0vIOr|5UQDA0bD@OTN0?re8LRiN4sDPyIw# z{Cal%dfI{{cyq@7eT?_zgcJBMKK2%0w}2z!@m^};kH-gHp&#hY1lukV`>Msb6t72l zu30u24TTf9RZ)VQAk+)TGb1-T)`c8{PIYaJzcT}MVmW;Yoj9o{z;gOxLdRT>nf5ClUn?8J$!C~tfU-oavM*80~c7iwc!S8xPB^j}OJ-bKZKis#gf zFpAB_*mmNrh8BjmarY}jk|8pT^n=S@Dl;5|%rG3T+lcLC_*tTG5_bG4vOcL$(^KQk zhK|*GS7_G|$9mBa1kE44Wz;g&#$=jeD;PgZQtT+pU})GpA;oUNOWMuIvgFM)(gIi% z^Vza$aC#QLVPTjauOum!X%4K{u=SWV)hcv8>o+qPmZDgq=O;6xxY++sy=qm5x6cs_G$2}qz>*5#eXb?pUS|~(O^&)%hWm?; zomFsL9ed_Zrr@=iU0Y(sR@aw?s_qU|h{JS`HS0=0fz8?~qoJa3?{SBsoU5v01>w?b z%h>5`Y@8{Xi96{M&T$OVv_KUupJiT_%Lc5>(qngni#iMF9@ugz-F7kO ziFsfpKrec7?02F8(X~@6TmS3}9+YLjss~)WeR99OKa4W%+yr1>UU5nam>N&q({)R=)08 z{N&SDWQmH!)npZ0B+wn)&(wp{y5R?ACmo?YS7C}7p=WCExEoHW&FDejG!QsG%0gnVj9UUn=tXdqxCo{3$uPl{Rj=m=7Daie$6<1Q_DowIrs+mb=QYmnpQWj{Q2s)_%c%u zXc7NGUn(6X^ku36XPWY_yAD{?Z@=YpGTyaE&Y#Z0nCas(g294Hu)Q4Try@b(ZlwiSdM5sC>`sIMtR^uXVN6(#mxThcPXH zp{o+vlJP?iE6eoFz__XDvr-G}Snd^_RheFJP6MyE2h-aBtD}iH;Sc^By@?lg>hwo6 zT(Z5)8VC4b9j@v&mbO7C^MqN84$SJ8TkuWTg+FlqW(lNs16M0=X82pY)y$c}w_2M4 z^;F-@hSS>I1$Y*i7*x8NqoY#PF&L~$dwl)(6W6cbxPJXQEU8kDq|sHgH8X3)BY??z z34jH#)wQk<&)l#O!v15?1bRV`f{#fB;dGm{uw9Zbtqd#|8^T1-l4W2>t|H4|Xuu9J zUJLno8rWJn=5kEB>I7wiTFX{TI3vw^7E71&7lO7fd>q(2 zqbOFF139?r`5YiV4ox``M^p|^jbY44D zmJXlMGJWwQU#3-|^MOOQHK|kQ+gPql;V??*Jmpt|E7Xs*?3$`}jkgg||LO(_M-tP% zgSbRs89csa?>nf<9{ZK(VP-HND5eBz%-D^IU+4;$#^qcGI8O$8jHj{Uzlno3!)?eo z&Ua$@0r~3t4zPltb$Yq;JIcqk@8#L=IyCiti!NQn|981GTXNXCao2K#DmLWd3meEFME1`OEjOWz^=C)x$rz4~%+ zrd?uF= zLQ~+SORS~l(6ci8)fV-^Fgz?d2&5HsX0V^oF8D49$NnK+{MsrBN7kAroPMqWlbDf5 zA7M)ZoSyy=7xWK?i!gOsRGBS;P$x)a)Mz1u&^L#c$$yg)o%e+8<#2e*vg++{IJ_hv z#iWX9U}@?7D=e+FNRo*lOldL!voHH`29y?-M)puzSXycENh6(Uh50WqS^m60Plh2c zA0Js!%ZmBk;JbC(3N@s#7I8aB>!r7&Afwa&?-k?HL>F|@xEP_J=a4>6im>~~K#`iJaE^0SFNx^4a_gK63PQ?tr;YTG< z?hqVe?^|Tk`mfu#8>Usw(HK)ZX$@A|m`QL_<5Y#rt1)gbz^+37p%Khm&<5G+pr5^L z-XUn_zO(YF57MH#RT=D9`pFcE8z-Imw5$9lax#={bJgLusEQzMUMC=fzWY<`<%vEC z!2zFoWJ5n!w&|tcEuXucf=>wT1qh^KRA5D0SQ^9iD!*sW6f72;ESTBT@chrhvzU@r z>U;U9MfwxCmsQyG!5nN6>dVsRYDC0Q>sRl@>R(Da``t49gQ)~m`kj=~JN$8P*v^4N zt%?;B7r`PbzhWRa9be==wUhB>?<6+?sPMR9jVxi(C4OPr9LR}g90DvzOR!c-AIE@Pm7;H27yha>*L>o|_- zJugb929I_S+RTYuhVw*v-bX!5W?Py!Gk}ciG4ZY?9Qm!ZLmey%_5E!}HdBF8C6>j( zdvFdnLnFz!@h};QL;q+8=Px|LDFYb z|D_Ue?L7O5V|B4~0%4Df@G8K4Ysc!vVgJb;I!t+yY^&??ox+dRHmX>PZ4ka0#vf^c z-4tQY59p9T-__1=14q@(oH=ui{m=yRsVNtzB@>Q!{g}s4x!(8g-GkXk@vdwT-+*7r zez$r3@H|_9P6ixnQ9*|7$AZ08ns9kV{*$hN|JO0gXce2C0-H8z1H&xypG0R1doayC z7nqp>S6E%W{7`5@_abl3rxGG8m{w#qD(>MSw3%{|D}tCbRxWZg4eaGN9+H96EN~(o zdE{;XsA*^gDM%uE2tzK=vuCf9Bt>pD^t7(zum-X@w3L;>_}Y?ojL%ADiIQU|(uUn1 z?KJ=E+K>K@bR;ZqoE>HSDuJxGMuO0SD9HGWtFTWs(%L*w!TbZBL+20*Mrel?=(+t6 z*(0*9`A9za|H~zib&sV>^2ubQH|XYhSY4-N1hrY;PTk;}^Y9Xn8vqbfN!*0b2CP~Y zf{AkBrFtKZ0q0l+zez$;-n^OTiDpG}-Nt&&z-cRdwsGs-j1Yhbl4Bpm$gx544aR7@ zy3~q|#H6Q?F{X#3<`CK3Aj<#nNhVI(@P0>j88lCPCqJqaot0xHW2JM+sHyZAPguj1 z23CnsYxy7H^7T1#&)Yug0cr1ZB#C}+-lc$VlN0eo!yAXNpvC) zdsDJqvSS>NrO)F0E{_o78U!@93e;<$EY=}BGiD7mAP&garw&ge?T z+jjrABTH1!^$>Z(zr4~x#AnFI?n7YXRv#`%xXNyWLSHIL9qD4j5NZ<+&>y0Hqd@rm zVl~WK!3{c9iTn}4U8$`$}o#vl_wd8qD zf2CLCmZ0)bQ8>5UR`uz@bPBm(DJ7l%K0Q67q#y452tw!(p}=3ZD#ZE`k1Y*xu6FM1*`C@^tz* zyriIy!&{2UXQmO%!AjNs2beeV^7eN42$BSIsfP37qBa0ZaJnky1GB=avnm2tEm3bD z3R)Eb(-~CR%c2SL`m12%oFX(VH3uMNgyF=zC{y_cDO2B2%$U$wq2ieTbvh9ZKdWd2B7Pj82o56F>o_I`xkN+~KYu8`i#+5ar z&;2VV;TyjF!a45L6n}4GzZ2gc<{;PS&&V7D^NQ)lj8qlBPhK`Ku%^=u5>D`ag%ih{ z{-$hi9;U-3eUr`(@_ekR#ZbfF_>s7_48tH@Z^8PX>q02^ZCK3cZAh}jr*Da4cW#zr z&~7mF`;)|k8HrOj8G;Dc0P#!N%&uL#};*FrlX#9}x zD8OxCbh3jaJsVWgqD4I(vo_w{zrnkY4R~i58Rp$$K3Z$GauE_cTJoN<_(VpL`1tr8 z^XBEVYJo5J#|?I361Q{bPW$9j#c6|3zI=IXI>5+u+HqCHr@Xb~ip;cW5f|B5qLx2~ z7#&$&WF%S1vvmJQG4iX?JAs*4!JaKu6)>>rcZxID)}M}siKZf{u2=JAWVIf@?KxbC zsoj^{K0-Td*08K7-6(QLG1QoG$H``IFa!Z7Fz981)X^%rDF8bfR5n zF2dbY$T1OLoy&ph+_G^^~nv ztZIN#)yZk29AYdTU@lS&?64AE%%WJ0#kerj!n(0~BP>DEJu%L-S6UGu^cCi12tr@9o5F{8hc{e;AMao8I|_5myJb-^g&k1AFJCJV@)oEn1o z_96GjB3_hJt>iz5&07?f4qHwgVnqU!Qsqj)v%E|A#nJO*myNWOgY;bFt*B!cFG z%kg@{U}#Wv>-zE#LRBNk{a57p2H`hh7k>{qUnWhq<=VM;C*4upGsrrHpFC}A;%Ht$b*6$OZWCxtjhp&K7Dox+G`sr zXYqeJovnHE&57{h9kvB9x#q$-){hSk9a=F@b#v@T%Wrd>xUjzD#Wu$arG?TQ^OM=8 z=w?#d^l;SXXSq0z>D_$MqD|f1`iybd;>w?J0(ggd+Z>P+2`0aRmXc}k5nK3IRSdYMx!~Miq z`M7#$I6Jb;h)q6>((kItFif&+!f;gNy0w?4qt!@0)MtV2vp%blp;c~Leq1J=Y4wXc z3#h>>av9d`QeTn?`={`-xuruc#b<6JWLaxI%{TC}MK_`U2(BfMbxLur$d4AB;oyD! z2Hjj1DIB3kW&PnqB=IXO1>^9C#Y6PyDZxi2RaS*W5}boiq0|2alhoCcv7lWv52=3Q zY3RBWC(MaSCAB5tBJ@3eBw0M7o`PIUrdSW-Rx)g{{Ggg?;dmw6OuKf`KXuoE5%{$S z8>BaWbFxpL92NT1gk2SHtXcS$zE2zyg<)^tT1&eD_h7c10XIB=OP=w=KmOBZ3*^5? zf4BVX@=`*T&!FQ=$YZ`Hr?T#JFg+~J@zmZOb*D$$pY#Aby0k6SF@&6%^f7V?B46{^ zs8@~?>KFf-{K{i5NQ%}F*|8RJ&awHL3B2B_7;;(dK%lmS$HItzNi7z@eze3lG?o0U zG2mt*YaU8t65CY6su8l&(jt{1#$3lPLabe<>Lj&^rdBnH9MnhWG|oJI6_VQ#_Vhm$ z{F?lx2`wPxCTF0Qaq9KNB!uq@xIaxDlR1Oi!9qRwlLpYos3%9zV&h+fbvm*s_ zLFqe&0(47gUU#J7UE=C2ErFe>7VaT>8?LJWd9_N|K(wM-_8%n;CNte9yH==$vQo84 zWx*A&#rPG)ROe%xws&rXQc>r3Z0I|&FgW(mc2uW^t?o*X&AV=BXhcIbw37$v?j;^e z*Iotbp9gt4J@m15UmeC*`B6TQEZtVs>{OQ5dMEsa$6h+B+*q};ydXDqoJAHWu#-RD zzkmPOAKHZAmt42X45#uM?4Q;2TB(8&c)Yc)WAOS3Sd<=3Vv_7G1Ar&t8+>(V1Um_1 zYx56?{!S<1TZIfkN)*XfZR=lCJb?0eg5Or6EZt@Ep~n#5-I-zE3~Z3o+4PyQKi=e> z06Q_g)8~VA9+uzWpZMVb5IF=}(&){J&IU%)Cff0UH6m%iHVno*t9K02AUwEZQ%#5d zCAddU*L_ZeKH|nT(9vLw&!42cC$L@bUMh|~`GpRlN{eCFE@YvXT7h)$)yzOBF$bU{ zYQM_D{^0q)DS@os*B0?H=Uv+$<@NNO4yV+e=dsR8;)Mrr2pF6kXT!3>f!K=j>kma= z;ac-t{AIX)sa4NFT+m=aCRz9iI$ z976OmJXQiAa6Up}jsi~)d`3NIa)qLa`f!IXpq-rwA%Lf)d zOY%;$CVPEefXL!fllcz+sWm!Rg| z4#vuN`k}_;j?L89!_DYJs5vHflgLgn09-Lv^e?cXGQSk+^+*Xlbm$0)FzqiU@JICR zhI%m^ldLf2apWk|`;JkC$B(~&eZY#gx$gI3pw(CKpV@5COuE45G+59|VIC_PrkrT; zaZcopl{q|CU{`Z3EI1q09;j0~KvAT9nR&|FkN7}!KUUW1B==0$2`e2qp6<;7rj0ER zPOvrH&n3eaDR`N9WCFE_R&LA2VK*qsOg(Du*(5{(JEUIY##=5AN!YjDMtPt_KoAF?9IxedJp(jhTYrI0P?x>?zdcSvo#Nfswd*nqeoate6*$} z3x5VkV7S^d1_}o;V1;LJZB)%06!RH6^b}UUG!=garuSV1KmDyfWnzU{_4Wuba6dY` zn=IB=ZNw60=mBBnoKB))s+Ivkm}Y##>Cnt`!x&uXz~=Cbs`sfLjK^Di(i~t@F=MW# zjKWT>*)T&+y})Ovao7B}_bf|V+QcYJ49gSpy3dRbb~!1^GiScbJcpW_#hTMXQPT-c zpt4O*vGyDX84MnVJnmt~bG~n%X+15P$1mai82L1`%g;=tO-{mtW^7zK+{1et_J*a0 zADpEG>aSX*E&zS04)$4~A+UKYB{nuz!6Pkv>REbjOgGv}-^bq6YjN2!YTo;}qJ__R zDny6KOp$aGvH9gQDwNEG<<~~Iwe*Cepsh)_BSTq<<=fu~o7_WugiFaB2j3;|EuEBUM zWX+@_5@Qh7^TEZ&GFLN+GudQ<|4e?38oT}A5&%De@eP+Tz`vbXiM8!gxsP9LQZ)t; z%;(#0XFin$mk!+HG3u}R&595bGEoFgg!t}t7q{ZRWV%t)^SYblp9Ctu8;6=r2B(>I zI!@ynhx$i_<>Cxum*THwlnYb!&X-?1f%5HAcoj2eD{SQ%TTYigW7AvdyeuM{pX0PH zr9Zz^{3jq(f4~eSq`J;Co*hD=;{^YN@1X|0`C+-_Js3f}U&LrPBflS!tp-hrVfdm^ zS;0b?p)3d!vqp8h8IB!gu;B_et6RXL7;G%YTbwNi>H;U3a@cBJl+Le7u#RwIxCQHw zg2T10awU4rmIXuCFy2@dLhbB_ufKvbQ1uAtvoPEz7`l4k`A8hy0Mcn4Lo0HG9;XWT zpZ9>vTR059z8|i{;y?4DVi2ZPPmQ2{8~6p418o7O3j7N!wU;Vo|5M9a)D{6KGxjz7 zm$5e2aNOq>X~xrAo(D$i|CB8DM0%K9!AJOMF-hVo;p8zADC1-dMydJ3V8!4Kv_P)= zhOj)H-iQ+#pt|udKG7NGGxL7cD7YlLN7@6&Hw4Lkakz}B;H1WBm-M3RG)0_S?Zigm z4IF}84m+_Qa8LmbEabfS7sAAiIV{s2ryk5}+s0w^_y!2D;W$wp+?*n~-8t_gd=la* z{sKR;4?}Fk$&iTS0yTub!#FxTJQ+U_*pcZ+sXxz$!q=Ow`y;%5YEdq8AH1Rx$W*dq z$sxZjfzou~O}{nE&&teIJE`=~L)xc4&h#14kmoyAu54ThT;39u`af2lvx+XPN$N5` zu_g<$wA-%ulC0mPOP#&*OjLckW^b`9D)o_|AJB5uOEByn3I}{(-zH!~?LRPx@QeBL z=U-QpaQiPzOHIxZR}{R}G-b>*s#M3 z9S%|MFFqzLIIH;kINtZ3`;F!);pDxoC z9Mj9fGCZD;hi-@u@io|OB64>i-~6zlQ?783qRbQN0Iz?t_Kt+`0qYQgQ070K zSz=3N$m5$uN<#O_cPw8gj$C6JC zPS1`>V;|r={L;u3Pt3w09Lr_Bv)RjX+=kUpI^Ukw9NFPU>rI><>Yak$Jl^{l&g@V5 zn8#4VyR=x~4qwqvB7d``OP4BptJt(YF#g*mP_jKZt*grGdO*_vR@UW-9z2536ADrH z$ZqTghuymur-BcQ^O}`vBh;ctk9}Yjt;xWHPJiZo@;PWa(IHMPYCZmxWPW;RlsZ5k zeW9%_#(L@`GHr9>180@8!Z7a(PHmJF<)vSL7OftpD1JZGs#UA!F`$yxu^4JSw2{-! zuhytheGBx#^S@UD+5RGqd97D%*)rW0r`w-o_YJal;J^jA9S@Es4_)$%PY+izo#H11 zN<@X1cZwg~&FM8DkDZ)c_kWgQnf8+I>8zlxmlIACA}g(3hywSbCcu&RJ#LXznI{B> zSR272r|2Rba-O%$+6-vka!szMw(^#AJ%}A=Z0bI19yVB>BQ94bZ4T!hXn`iJn zvN)5|qdv0xKWgm)gJl)h1%_ViXn~;X6hm&EKAlVwMcXE_ExPpL_wQR7!@O*$A81(# zR9StWkmOZ@Qp^2YD9l;J#^K;ExYvO4!A`|%@TFy5oq)$#LvH>i^>W)RDsK_~!-9>9 z#lP!}7dW=EPQ$Z#d{9rL%>c8(i@|QQyY{VEiO|QnbV=8(3if4MtWs|yoYi{kA1}gY zQy3yO-457hxgIQy+pvGiH_3{nA4NAvfxyklRnQA7hEU~ise>v6*)cPGz#1|>D|rDg zvN9N7D;(~@cr9d>9eA@*NEQSGj!F;pjv!&YQOuAP4Tj?ZB!xLXsx_4@VdmE?QV zpKQUw&{Zx4@%fz{kb~9C7luPK>v8>%07R^A3pN-=NAjT*g|@ zC{Mk2E^Lh#3xQ0oT95#^iE+Uf_R(F~5S0y_5z+^ODS^+{+$N5MFBy(b);d5h>?3%O z&M=={!${(u&I<`%VDdC7<1eXrl?N*GggnX2V?FU(`pN9UL7(stI&&0Shw5uckkuYi zg2b#pbY%POKmk)1f>`4+^niY4o6!2xv-o3NNeML408a zOlYv+N0c>{bVjYhgo|I>5psB9?1SF+$RKmx_Y&8`5XQUej2RnS1}iLhw!l`sJEi)j zf_wa^UKv57iYZ3_EE%rb07lq9=~ybhv&!IVM02RDu1rIyZ7`gWiGONdg29`Ep4vpU zUaE$0k}=x>3#+HfW-WEu+aUS zUWFU1o+Z8_uOMk%gnCu(;?yv+0b#-%eCTc}UaVzERfTfdtD2UzCOJz;4-q;@5ci&i z3l=PR1_geixCsE2bv=OU%ZM3SiYYHusN*_{h0UKo(4wPxvVHkwvoDzx2t+=x{@W$s zG5ZUoU^nM^0O{Acxms2(KRH03#=`Q!%2 zF}xXk$aKTQ5uTV-E^pf(bLa*e$Vw(|2lRxO04L>7du4ph6C ze9U3B5^gk&!(`7_C0E+8KBO0@%%q>E4O{1cgNZw;fjPJ^OU4m=TQj}8^LkA&i679G z{utc+!nh)sO>2*!`>p6&r9)gYDR%5eW%P-65|)nyaY`S&|DpssZ}*T%oFFqfL*9^F zj|b5aLeCaMR~tMh(FU$Ui2(VMYHExGIc26O#M{f=UC^o^6dKb~ zn+@Q@1Apjp0n^C}y&&jQII(Nw+2l%D#Jbt$!U^U#I!n;PUN@7;Rtbnu9e>hG94v5a z6UK<+q$=96%vES9gXw;f*!u6kJW(yyI!DOaoLorgxf{yjT4!Dy-fV+V;^F;C#G%}v z;}^V}`7$|l+qN1!`-A^)m%yhRuDfW;Zu~e(xiEj{*Pi_-bQUbG6>04Bx3k?#+KNNXala>If=XIFI%1zeUnumERR{Q7MaLyjDcp=hr@y7Vn7f;{j*FHx^ zVDL*qo=k6^XXycksgs!+HOdO~MG>aSly!90g>BD?N;4ZzXUvG!Df@GSsEh6t3!Gt> zcXEn9XS-=uu^A7oe%7~P1M9QW8zxx&tZ#A}7%TU#(Vktp%-gXea7Qs~#x6Q`s3)1I ze|A{0Q2+*B?9#=PUdRZ4#BP*BY7eHRR?HD74iC8V97dnlCKKqeu?$99>M-^Qpk(8BCztJ3~)0p{!xUfJR&~h@?T+nNK`{fm_@JJ?kYDVui}KVhKC~_ z;ycnqgjF)DFl4pcQ{ z;V|VK*Xt`*MLp>fH!?X4bpf&%@f%mnP8^1RFE?Ri z-#4;YXS$X4qR`^K0Atwn-zct7id}F(wdDLa*J}IdI+|txTQ_^EF%{juP1j|D-KNUJ zxJ{>ynx=`(qg#D3=|nl2rh$#pWX~6+9IM_uXZk2oth1_jp3>AgwIDWxoat3*>eq5c zbF7D8=3bA%Q%h|sor|EURpyw@+$+@Oy{$(I%e7cqy7Y%i;v;0*}CN7G32IxA0 z+o<2->gaK?G3gSX+qMU6-)4V3%rg70=+fd`e)}-+(eZ|Smzm0@84It1kt*Tg)e>12V2CygH{FR-24-dO$ygI=_WlX%wzMN*f7ETbh)_2v>jUN zQ;OFDe+Re~1TEQDQ2?P#zn{%9WT$KhY02dql2Spa(%ZP|q7W(X)TxcVTV+3C{nx>=iBZI*Zb7`67KRB6T8DyQPpSu2Z zbE{g77)+h$wc*VMu07SEcjwvp8Qhd6%ueBE&k6P~C&FBggk$o%xbrax+FZfcNrQp2 z!^o?Wq5zQ_#1-5}2%)~1__q{8xi85lvZfI-MXZI;8ywzyPJ=4y^cpAAC>j5_`Asqo z_|9%OoWuBw>Zsv{r-CJ=gj`ocYD(U4A=1{Xw#pkPm>eWnojR%b79Y3i{iR~Af0A%b zpB1Q)G!+)4`x3_ymg}VNr*0kshd4ZR4(VAWDyWm9apL#jG4R#d6_qUV?~SL#IJ}nZ zJ9e4jTPgR~xV4pI`o=4PqDGSn z^iMIeY07IeS)iMmI&dw*2Bn->7Ki?GIMPs?pjWqtv9hS$V7wx~T0x z3Y*_BKZhXnJHO61I$*1()#MOe-R&VjE9D&EmAXxd>DT+BW_Ec2PS@Q8Kmt^t0` z|3_ zjY=IvLyuJG+;8B6LI9X>?5W`0snYI;mGyR$T?=TRqA-n(HSkA@ zQs2rkd{siM=b{+^5X+ROTm@;MgQcfk&?|+QqhJjUjacZAmL(ho+nbX%yq_s}o#Ek# z!-|hAmFS4&C|HYPgBV5jb`Tu>YLR6<&4Y%r-Ve011R9-nke&VW(D510Wo;7!)fu=E zx@B()z_yi_Gdm2w9FM!0OpR*s7W7?1WCL&xWB!T2OI(E0+a4iJR+wXj*IO zwE8@Wjrcm^v)12y3w$NBCY)|1_O_^@21)u>x(=Aj18kVkXLwfNI8Un{Diop}q_b5? zu#Ztxx$(ABr*T)3vB-35bz6P8=Y>B)_gRl0&FW}xr?}YvvEByP@Rsh9)Nj5JswmFo zLA*$-tP@@-iMs?gH0tK}8q~0I#@4UQ=neZHyY}WQAim`!+IsmIuN)S_kwjwsu@xx3eRMd`FV7p=^f>`V0vI?L0M*czqek}b%DLO z%7&S0aOJKsYeBgeF@sHZbYgrEpXu|AwVq>hLFs0IyAD=ZdDAqEYg=0oj zYbR@42acO$1fdc|Z)4^7_NLq6ax$fd6+)=hL+B;YlRn~lSVN?Oxd!f6@XNVh7vijzvuJ z3=;I-{Gi~(s0#%Qo=)iJ%{&_8YzuS%o;s$Ex-xu9!dW!&L)VGZiK;cKOY>)&lhMQY z7npE-iRyx$q#lH$JB|v=MUV2me0uIMmS-9Ff;$TW7Iitl=pBxW+_yc-;WUNj>4aH& zJDe-)b_kZrjnc4U4#C>BE?P>QB4&7$Di)}wC6H++OaV0wWV8*lL#LGO^ObxA|5i=ZU+FazbWb+Nx2T?_5lVURXro;3Y7 z(SIhR(KW}zOKnAI&pZ+KHo!((5jLFo%wFhorS7D!op!w`R4C#XtvBM0|KzLQYF9Ei z1+Uw-1CKwWhtZ3KS$|^b?*6J{S>6!qI7$xxAv%U8a}$nbq6-?>2(rbXDN%-eX86Z) zd)CU3eg-yx!!j;0dqus&xKW79Mn5EjZ!aSVjW}ZDuN>i9&OVQHGk)I{>$oXG)${|H zDyLd|RS<0Xq(^G=Ugf$`KxV8z6FLUl{mnMJxr7Q`ByZomN!ccxfhaQW8hJ1(lNr)G zNlox;EX!BA-y>xZDnaDfX%Z~cD-}uR%CJ!+(PDP9aw*&=&0yUL>B)F4WG^|EFpA%Q~7!-t8~mefO^2e&6UrE!Gkmpk8e<-O6AXD+hcSm+9eRag4;RgV{OsQCTurrJIvRH6(PMrcP^w_M!YAU)CCJaL{*~NyX(=|?q1cyxP zF8&^Lp%2ghdI@~(IsPI!J>J&XelqlcUy61vQ_MwckFsa5I)(>-U=9cmw8TX@7++jB zd^n|IEfcf^pZRNfEoj_JQ|xz3Bi^`?HkXuPJ;kiUn|cH}Aik6Bctb-&DYm_c0f8N%!5&ZFKCht%ZH>Q?f8d<{myLN+{Sy`9Ab^ACev;Mnvt zlqXEP!TE3uM<)yHi3KF_bP1iIKMR&0d=rp(zi~Rpd@hFH5?nqv)a01d+(btLzGPnj zqDpv;_uT%mDf@p(Rp<++v@{p}V^3+}Wfnq_@;s-Xp3<^djH#!z)DvSgv3#}blx!P>Qv=G2)aYR`4&j?c z>R~ZMKM`rsWTf^IA-RUp!(!$O?Uy42qJ(3U4|6vKZYbFC!-8N&QygxMh zJC`r_Q!toJR_A{7=m5$oA1hxd2Zq!=s}|$C=CB(}I-G_o)@8cP^>KKH|``z=6h0+Q3)$Z40^*Vq-1pneTZT1~#Yp=3SUmlF_ z$&vzwnBDYrhW(9VH}~{tSK@0rX?x0YM+MW;8!0IjTLkY3BSTK)l1H1e&YdSu`K|2b zPbDriJxSKDqAr1sO~tamrS{R3WjO0ksoHl(y^kI}`px);4fhfvHj7|o=wIZDtQO2p zv<*X|*YGE~ok7G0UbYlvh6I8gvDal#<0Si07`kjP!k!MUbJ2C*9ry3QCiwpS`;`r* zlZexbCE2@e0h{fXDO0A>FUfh$Y~&RY`kXkt?OcuXIguY${5d%$3lgm&>t#Wr14KUL zdf>6d$dZQk9|*V_?(6tA5se-i-nmQ{g9$o&$7Y(csLMJfX_;u%7o~`<`L2#q93n6q6tm`r2-_YlAk>5uty@Yx{DT`q0 z{h5adys5zG>=xyY7z3{B!PHp-P@5626^FmDgC!%>4{(k$-j1O+4@cxh9y=6)9{Lt5 zPj0@#VU+}WsLMJiX74;A=w0WPUixRkk|kZO+oDhJ?1zRUrmm2zii=fhXi6d^CtziMtifiCSU9DnQ za_w|87KcCRZe-dN$$gyQq*ERygQ3cXzg;W{jgj~#kfo+f$nddvP`pq$2|7tGSq&65 zPw5KXAS5Lj&Kk03u@E5-ekIKy zx9b^Lk2J7NX<%2#Y9kDe$aEu?Yi~?}DU!*MDt%{dcq=&V!?pFQcqmM8Q6q|S1OKg6 zJ{-GA{~KqS$7>xx_EfC6ha`Dd912nw)HC3msaQdnHDh{!M(xQ@brOk7B>}S|st67~N!KHoHFjvF_XQ=9d7{3zR00UFu z*jFLsvKH*A1H$gR%OS9}b_ypvTo2Qum+hP{E@-2OsV~u6fTN>iBuCS9KC;=x2S3XTYd@o%@nj!jfidCk|D5+ zB(uX&2A>iSNNQgTgYi5dJ`+`M?iNiLwn{!AFVxOVhW#X#?;k!O5%hPEVJhUZ8`nHM z&<@t@4G@`7#~SJbb=gS8bL7mnkiL_6j52;EWJ7yp1^0VdNcI9&i^P4rnfz!~Lz!+r zhFB(&P0f!!wbTSuuFZpp`bAn2IBfO+rv~1lj|d4NF%SKU*fCUi#um6&P5^vh{jCzn z+WXP1DHi+02nLS#hU#;X;b(|4+c5?M;3&h=$);e{9IMN0#nAy+uOEb0eU<~To+eMH z#;dC_3%ns?bdLEv7f6lqUWv8?&VYN)56qGhu!U2gcZk%cmlz4LKICzqCpaiVq=)E_ zeCTS+DV zkX>O6*z7d0epojdZSnmB7_K{=c8DOYg-*-skMiWLhd@PT<$t2DyA()FCQAiejWv^8 zmSQMHG^pqlzbjwPhjz>7tI#rXRvO{|Ha5U<+0w&d6PEL7xTua-MO^Or3QaHy)*!cq zMxBZ|vV$Q<7WcQUs0&p_PHX*d=zCS zA7GBSh#-Na!BgGI6d`*RI{5 z2-CAw_+1~*)*MV%IG~NMt&s6T#~QayRZUj!l4Wa>Q8 zdFW2zg8v>&+Hkt=z!BmB5lE1@T(p$tKaYdGoQbwQiVjPouWgh54`aA}4{LGWelJQ@ zpI53OtOPc*p^f37Hfkg*IK)<+A5fI=0Dph~NUU7tZHfS8ZFL%0gFSFoqAgUN5r_kH z()L`WNWL_X3{Vn;wImHBKv56pu!W~#(lBd8;7xX&$$W~EJL z8!=kAW`x-jO+x~U=;`g-N6u|KayyKiEnrECI_;p^DDdaF1wwh(5)$!t!!>ZpT#zuA zQEpg%)lRIMdYPNiFhd#7rP4&uC#g{#7_Wu&Cg&}F#^dHMUtC{>5MfnF)vJ)VgPC9~ zWV&H#3Q3J9^rswh}0TV~) z%IpxXL&{ig+AqJnj$S0P3qDgnYmr3+Mn3$??hx+SFlWRWzWAh|>pmjsI)TvGG{y_Y zlKaB+Q|4;2PlnAW;i8;Fb=B+);m=-D1L=GJt9?o2hG-tTOfqz3u8y$`j_DD*&OE#1 zGf`>j0w12V1d5jymV--Xmtk`QBkydrqWK%m-?HV|{Q#(ESAA{m1#Spdzru*EKYMX) zPv*giB=+FJ{q6XM1EDNk30dFB8i&)DaT{!<7~DlTZZlr1$8Y>v*QV+Ymm+E|wK)%_ zyGwir4<5YUpO81qSgR)1`6smr$~)C;UwD1=ajd)!shB9o781!1$+i7vNUU(+t@Cw2 z@JQam@jrd}d>Ab8BbVFQlIJXzC~v_4Q~Fx7{QTDquVqux7@2ZQfcJu(Vctz?K4+2C z@)EFoH1Ux@2o`C6A;H=tk$dWAopC^8USxwKu87L}nOxhu(eaRoP=+K%puzog!&kUySo%*Kd1NE;;pi0A~ z6YCciNPRN-4h#=ENaRND_0^nyH#zCfFQrPAs{4S9uxNf8MiO>w)m4>vZr>-YjZpjN za6!&RvdbFg(n%Se;eAY)hWl#huR;G~Y5!*#?2w?K9g|_Tgz2WhAmqtIopzlX zZW$s{1pv!~T!##?+b6J*@*1v3F9aozPfxIoEpFG7p(uf7R2nr#!SR#b-8*hP{#IGV zwGUp3K89X326wY+dMS_fgtx_!7JEA5z#*pW5es7=Ossp}}u}`z+zk}mLVuPNHwf5%ny$R|H63I(Y>4ou_lBOGjy{RXe4h4Pr zFk0;rPzJb+XRoW#gnUGOL-AS0E^6dF?YjnrP^LrdN3j@xrgEKse#XO0@9k(yrD?&o zJ+S-&X0umIjIgXg%^Qhb%`i{klBNfZ!#A0aa5#&V+Par5w-M%b#_7L#XO$e>53yf6s}}egV*Fc?o-dVtMiL@gv>hb#=nGcomyb=rl&-W77tOmR-Cd9Pb38rwz{t1ao* zCbzX3cLw2hN;;7P!{}OtEQ+o84G~x4b!sZd{^G`FS;=cBCuIMKX%<*4TidoB=K9)( zs~C|IE7yvfKq`}d$UfE>WYj46q!PzqyuYS_-IQZr#gt_Nv66TCTm9h6=(NN=_Lwd}H>mTB4WkEUTAF1bATZIX{ z$vM$-3{@cKYx0*M9V(XX2pr$KS$4?vCsQ9_azLi*GVm$h$t1x_)<}9|Ww5?Q_A|V7 z*yV`ycT{qRXn=w$mK{eNk|mPA!`7^ygcTuL4tXD>$ICtcd^JM;bLM3Kq24_8mYfz= zFt8Z&A#|KKi}IE0L4tC>yZ3r~rCnr4@UsU{&#hGKKb9d_>5vDZcF~vYJ?ifqlOUpc zI7QHg48cJ)Q0bS7eWn0<+dfK&=Z`64gzq-TX6Q2>6J>z%PAKdRLRP8%u;@!>_XG#6 z$C70(Swg>Y9i;5CXAeT}98nZOf~lLEvlrbKCu5q3DkM+NczPx^^p>FjVd9ujw>-!BqK>!gum@!RYq~w&-+5`m^?==vZwmDl-l3n_N{F z*`2G(7EqcG|o^UjZ18RhqHCR|HaY!B{pdo84j>Bc=M!2t{0|R|}6x03r zd~wo7-GeLw4%B_V=_^)NtL5Fhyex&&O>gQfh$zHk&YvmS6HE%DlMUl2&vedH^ssq=*k8jsmz zCe_FhKD7j|S)Ck(3K{gEk>{}yq`k_@4U2VnY+rnFm6h!!zf}RDeSc`uV8ra@^={7A zIB+yoA09iaVQb@Gk}^E@^NWvxH6rBm^HH`D>=q=TbLTUupSlH|R+!}^O%q;+|MF+*BK8U!pgmfuoJUqf5PUw-u@VB)IJ*821b%BuIMzn0()fMyms5$ zJDiZSn@L`ayyofPAd3s2?pyvJdtU*b#nH7rkOWV0w@@I(p#&|K;#Me>AceMADJ`_P zw-DTlyIY|IDN-m-uwW_f8VDgmlqgAd=K0U8J-Z`$->?5CZz+@O%FdkooHO$5j?Wp| zNnzbu@~sO?Gr~QHpY+!*5lEiQ<~~VX(rr>QdA+>3p@(_q=?9y{molZ{=HY7&dv;>mTyL@$td=e$Iub7 zAs@=x@fPvrb?md7c%Ljn)IFJWkb)aa5@tR072QX-xAN@g8YuR=DM}$0PI|j%SvTl05gH6TYgk=aV z60bjW4uVZJ;cguUH<59#RliEa0gp<~PM;APsc3=jbxWZ6&Y^=vUEx1NpFJHAO0&VaCAe0uC6Z057mg#;0%PH@ z_+o2VlUdj_WClzC4`KQ@7g{5)fKtfw_?9JW*hnw5&Utz`O+`NFg)(mA=;bG6-=61- zvs`D75q}r_?^$Hd&*hNv;9(%#_`o6rZ z=M?Vq%Qukrt-;leyrp?W|8LWlOyX|g|6T01d?yn6i)qR8rJ{q1}-GcLw#EQfq_zWFyfMOpRGRgydqcB=;o85775kcmXMIsao2yW zeul#e(lf2E?p!8sNEo}%zYD=jJqqL~&|(K6Uo$#utVXYOqAgpCYnK^B||BSbyP3b&b7ah;UpX z)%8CHNT=`+@^v_5(Rw=^zA_BNq?rF-R_QH^4rU>pkhiyu&x(QHmRCzE{V8Tiv?b#J z`9fx$TK!EW0C{`+Tf~r42aO7}IK?2~i&O_bL`Ag_{qMwp2?G93$c8~0tq|DZbohI# zynvYc4PiOOA@`TO$#$N7%HmO%9iEJY7zuC*)Wb#ozD6s{}? z!M=7Z`=i@qTYNDy94CE0j>WRQpyOq5PlnZb$;hER9(UkMh@h7kAHV&xT_+fT3CGU| zqW4;SaSf*&)}~i=mMmKp{D;;R&f4k6cx7^CQ??-7mv!9P7jK*Fy!8sTgNq%kJ?^#m zjE5n(7Av;yK-LX-uYnQ!As-+oVJFtZ@M_PBsdDUde9T}bct>8tPoM8CN^N9>S7NM9 z?`nklw=Cm$w+mR=14nG>u9G|i4!=qL-m=NntrXEztIi#F+e;?*R?r8T zwHTM3cJay$ehi?pbw3M-KW+7>DeZHDo)b*N!oHtsYG-^#?1>@J~vo@$mzH6_5Fs*mg@DZ>U6QnkuKj>=W-k z*RXv&0%rox(X^{#Zd0J}X|9;FPSgsRI%>b*1e;Z&=x-(P{V>*W|bbv{J zq>_(uU7^t1PlPL`!G>!+VMgbxbFXMX!DXnstBiz#tw#ABG8&?Wf=Gm}fSMag?I%SY@+1(0$q2OLdxQL?I-u(dO zBrKq4j=?-5EG=IVY&*OJMPf+7HVfsLwd)T>Vq!i|ZFf6+#wqIz?EQy$mo=Hy6~!nh zkB71$2Aiom}{v$67IwucdX_cTi&+pYGdpY{BL$FL+bJe(VJnh>g<0alq}1)RKAUt0oL zP%SIT^sDg^`;gH9hvU`=5%Ij@3+!LZoxEW_JxvmB`NW|FkEmcMvOMeEh3Qz>W-T;2 zmbuBq<8*tWtXlpwCC888w}irCtR*guUr&hhsjY-RH1h$xqOzn2Q}9ta=4xE4FwXD_AK3MCIe+& z0J|8&iE@2n5E)#cVLRt^7R-JEKY6n513`SQXGr3*W@^8UPfH=6;(AH(m=3_>e;fOm zbaO_|_;Nh?oT0o6N=m@3)s#Jt$)2sfTXVaAnp|~+K3&;-!L<3a?taUNU%${dmrkmC zyO|xVZ6F9$eO=#E`ugIN8BK(_)=~+ zttp0reslU6Uy+y@48<9&k-_bG8DmYIN*Lc~Bo9Mz2Ipsh{gDAS|A$OYCI4f-W~8T7 z_j23xwViD%md=+V2Oe%`wuCO>ZI+PTyBt5T6D*SjF+*P z4?wgz%6rnd4;=zEqf$NK@dL&=;epU?d|rL3|9-}6;0c%;JU&>OV9|*_$DyDM4qm&X zGHYMMkqgW4Dc5xz+NpWVJNW9(R7hsBtubp9NAsn*xVaxXW23$X=TbBz=oi62Zeq2b z%a--5CTXYbn%;$I34Gyzj_}>-&I;IBEIF=dCA~+`Rm?OYsalTGt734tpnv`0XsQHu zu0hXT>?+~3kHrW=3-MDilqpXij5~|4Z?|oSr0x);6L#^x0Vt}Xq+a@LEG%0s752d( zq5^O?@Gwz?l$L31`eP3nhyw9sDfTIE5-D3pza}cb2aaImvQEKAwRwPv9M%OtQ@dcO z$PGM`k^20ScY&*-~y zY(-Jh$HzxW11D%?e1NQCH*F#`Q1YCC#SUe`M^xQ|ii<&*Yk?pc3N$@nfaBJ<_l`Uze-iC0XM|GA?o5}KC-u5%syqMWZ zKGkKizVnzRkn4Sz{_EwqYrbM8f~veAR}k7qMEBKJR|u{Fue%6C!w6}K(#a$9m3Hbx zJ{q>(LNdI?PQv9mWfkIW5S-6Ui%IGd1aE5PT;_*ipiK$!8#CrUeJ}3rFKSTfGxIm} zD^uOmN5O_^V~t}KkRM!Fv4N1J?5I~;s~BqhI@J%}-j9gr{tFki|1pG+O*R=zU48_6?U*cv!2$LhQ!Q>?63{|X|%{dWaXq}`=0Z@AXmR6FK@{`H!azn7=?b9`;u zG-y5{F?j#D8; zVFt}*LR2a(v+(xL=1xo0K?6J1NF!MO4}3vE96yO`_kpR(iG9kfX^k!H|0Hj%sn`*= z%vj;I=G=WjI;<=ad`_^8SsLS)lc)TN@kU;f=u7A*6fp9!l_iB$$nwd*A@EkufI$UaaD>-LIatzzIrTl{Tn|dZ< zd)s2gy5d+*lMy^yEq1|{;>KHGiDa7U1FI1tKLeI^lzs~VtPlLN;DnoE13Du z;}AQ9>Zg*}0kFe$@(_2iwOL5^!I!7DIhQ&kE;QVbx6M2v3A&q$?2Ox^xZF>hZ^oT~H(NagXSOio8> zz7T{57q5oF$p`A3BC1crG>FPuor-A?mlldSG|b=IDg=HNqc|6v1>>YF7^@I;>Zuq1 zx>{lcQXojrTnOT#$U6tKqkDVGilJ)^ep*EgX1$G*`N~J*-HVfLgFlOgst$a{60~|f zf*d!CSqT>ZPuOwV60~{G;s@nz1ZSXSEdJ3Mvirb-lAYiT)l1>c*BB`5eVuIhnP=wt zIIS;3GlI~jUN`*gvlPbdS(*`so9Y`Fe&$)>ksND}@pe~+-v|OW%kZ;L!0gQz%kVBN zDuF2uvQb0_+RP(l_s%aqZXzAWHmy65VD(B3D?`=yy&JFn+f+mR!S$rrOw>v$l2j=pw!kkGxX=) zMtdR~jiCLR_lMUc`3pPE3>A7sqRar}=|-} z&+NocpM8v9r_n+KL$iF1ewKv%Sg+pX`S(fc8dkKWe)(edPLX80Ij+$XmM`j&p2IxP zh@UyNtbwD+e!Z~EKe5e21DyX)GEryGN0OObR!DH1|HQ>5cdvejNFswF&wF4*32e&2 zRJQEZXGQ)A;lg+16A3;UoMHDNDPFSjDfxypm0>99FJk*iAF0l-$N?!H7` zu22{|sIag;kjtU{yg39@asoMS`dQDv!169+1@!O)a%&Oyw(D3kc->b?stKO-Mm!&d*tSacVt%8~yZ?q+4R`14G{XPG=`Xtln_ zACRPxqAABdvG5|nmhMZP3R^U3-a%ZYEFN)t1-5T+Ru`vb~mz?`CwWdCnrLsU{BVqIT~d&zGH`^Iqyh*169^tV;HMXM3f&LB#!IK(;wJN;RPr9f@xG|gCT#-M zR!rG%kSO?VmTc$eVo}AH1ctZyqxo@ob@$)!N$42t_<z~+!K+0GrOimW7}r@0`n>8=>M|Z60((TmI5qnQ!8Pt+ zA?l#oOCo}clQsplQ?>O;=LhPW{?H=|4dr6od`&0K<*|j~l~m9@n8(}?Ji0a#+!MTr z(}_@pGxT%V^od!y33%RWQq7n+Y5sm9u`&$qI*?+W2r+&~PJBNhT{xmfsQj4R_mp5A zpu;PH5MZrk*m`nOHli7arR%qa9uh@V571aVh|~m8kz?ejQDw6U>PpBymS%+45;Dl} zv(MLr6k=&c_%(4bjkJLvl(F1zvSh;O&>@Y_sr@bW<=jn|ZB7dZ1G{0_7yiO0@Oj@t zA}RuPH@4pat1<@eDn*|;cHx?8*z&Jn&;Ttoz%kT9*1Vk>=@?$YVFqCU$pEumcxy;# z&nJ|`y>d7K zgenH%ojq&ToT~l~${iavO)dLj5hMb29>6H|QgF@2^Rcpm`vpMzAqT|ttdlh!)87ay zr-pEeH{rM3lji~%Cul@1lj{V=zc4x>om-(7nP&j# zoXB96A~3%6Nt4|G@o8xpMak5yw|z#cj*r7NXfHFDrA09O7mQ;@He_OZJA!T_j(#S~ zNq3CzO0e<~I53L@>jrO8HZkT7zxEOn(mJq4uq*roef2=j=P}RK(>8i|HOANUPEEZj z^rv!mnsUIIo$4A}fr;v`c%z`9@(T#-7??AA84JOg1_r-rpt`VBY2Ry{By)%@>kOS-ptbpXZ z4#f96(t|yhnp!YOXQnkkR9*69Zv#Rjfbw&V!8(EyjUu89ZYvBjeO{_>3QE5HHAgY$AcswER5pR!D28| zsc{dI(pShj->5al!j%iEE!!G=O{^8DWh26*SjA{L)(p$BEqI1Z=lg_=mtjrt3)=4! zxhhfO(RRMVg|m!vh%ScuU|S^E1dJ!K@ALW|YcD8?9bB0M6L1=QTB&ImNA%5=$qpyr z1IuyTnEJk(6#YYW;%amIB@H*36L{T8r#_c&LsN}Cez~|$!p{3H^j|4~;`gK@Hnd3z zBseEZ-u>@{6^K>`d(W_5lp6gP7O~^K8=-4 z%!{OFv2taEMPeHKJ{Iq$rRaKmM$kg$`>1!%uNTBRp7rkfKDfeqG%%~wd+&X9ODPPw zRQLLnx$oh9jROAxySQpq?Q+hJVdf9UQRlBHepPY^yDu)EDwxN|>>Qo_EV%CEPuSlY__gRtP-asVjkDOd$M*Ay-)Zip_!iN}6c}Uz(QY^1uFg}<^DCRL6u zi}XDk4!uARflwbh>bTl1mjFU=es)dQtRm!ZN9z;=y=1Y=<$ql|pYUS_YpwflO2sNF z)5UQC^~WT>zhE%$|JCqu&m7Mtb2NkCO@mE$O8~eUjDo(~9SVCaP52WK=)y zf|cy_PuN><9Qn){w)#rMJd8bOC0PB<$ew)G@H_v%ECIJBI~~u(?@U&83;m(;A|18q zt{6g|mM+VqODGbRO3wYs&liF9rPLMmzXyhIIKhMJzPl=fT>qHGywXS%^h`1blCdn5 zV;51nQQ~FZco^&e3{?3qlclWOEt05iPHLFW>8zbXv?26d$RHyJhv#;xq$~V(2f%7m z>?eh{CL2oBOCjn-3oNIlk#jIguk=`Cm@17V|4`<;7&sQo_p@M=ReU0xaahem=s5im zVBZ>(d^OlN6_C)Of}SG4{nnjX?(FG_#NQH{1D}_4RM2pojwSUE8cuLhW4c(ZWB|xXD#-wlIw#5ZUyBX-fm|1HO6o)2GKx(sg^)aN zV0sYBgkZ5Gm6MeUmGYDPJYCM=Ibx0PsPYoX(f+2xF-3^CxtI{}H0@6j<{dm0*6Jz+ z3oy^~+GN#+syujfhSqKM;X6$gr|a`yvE0;gj+6R#{8?HotMjYNdKY>9T@L$wgU%iF z8;8aIpkbxrpKb-bhM^ZaBzTfAn6xY+q{4n;@=waCbokf~@|av5PeU8PFDcqZ;oNCo~bK(F7VDfPIg1Q(H^<+tL% ztzHte`twvJzGq430EpaTI{&ir=jtL1dHfs*s|FYk7Y_Au7hic4gxd;5VV&W7MS1|n z^O+JS%gszh`B|)zt{$EgLla>R>8vm%?rmORWv{TqQEaWE#Pt(G2+mILhLMNBHGv}8 zET97^$9}k~m40Rd*HFQ$g~bTGehMxw5K&1zGr(jr|B3X1xA;MvkxsbCc7fq%o^8|c z&HfC{2rgFo)Xi)J?9WD#@pghGv<*wKoY$qVEGmp~A&VB9x4waW{M+*5%w)=Rd{6z| zOToQEc(hFnog?$;RB`?$QKPPaT@RZ}P|dwJcyjHN>?cAQof`H8O0+QEYLh}p#o8&q zxS}~?tOFjByMNkicCSPNwNcgqKf8mISqPoP$wf2gdrolbCroSzfzj`)yTI^4d`AvK zS?0hBB+N>6<{_XA^Y>ryRc;~lb`x{FbnIuxeMXLbU^<*De;uTlxH|-OPY71l8cLX_ z4<;$HkLU*lpJUjKVE%h@tUlEIs$7pP!Ox%DyCU#4ki!UdyiYA3VCT(NR4(0mcRwIdn}tLXL#sGlH> zbV=jhSZG6rS;fFV=9!97{BBVOL-|LZq_VF^l=vrp6l`hyd*OQPUQ`xy=IaoqD560C zu(wl`=%vwM(NQoTxkx!qsU>|+jOFH@dMRoJ4(n1cYq7DmQ>H^>)GJnrZoxt{KA2sC zA9orDA=k;u(So(b7%Cd3T!RlgPFP!HaCeY9?CtG^;&*lU)!dNh7CaI6}KP5yTt8>E52?_Gxs4AiTYX@QWwwjEvhg`ICgyQ2; ziKBqYX!p<);BI!35vmL`xPM6UU2XO1IqnAI-}hO%*Ih7b{JtmyUi4NFj71AU6;CI1 z&5>gnR+x@ARWpe0kdqiR-Wy9_FwYcjt0qwQ#=t*>PT^3#{@EL*W0-6C(f2bbmJ^nu zc`TPY?5G4|Bv(}d|F4PM@bU-8@Jq?ti$-ERkXMFKmfGF&!&W7MSjommQZQ@|#QX&B zj5j!S4;cN%_;N?+qFG(>$LSk;jDX#N@o$pw>-DyV;3mFU0JaFmEh^XK!?j0`erc6U z#DBmZ$%}k*3QSKRqBLJY5&^3i3?|sDir)GEof0Tg^2-gEPL>m}u6+6`nxy)Z$Lt0r zgq9}Jsycr8bHP;`P^oUXHFq1#i{Iett#hw@H{!9`z{rGtE4wAyyg7R-k+2c;>o*oN zt_GePjCI_D4%&V4{5^waJl$3h{3~F62;pDsZbYpF+7WWh;5VPGa5C*@{0wz=PLpVO z{-mjJd-Nua)Hg`xa~TP6LxadzKLOS~g+xcCrd070ololi2&`j%1WOydPS{)Cl@6Hw zGO)(r=U8Q?f%W)Fk5^Nja=EpRSXPx8u9lo;`rkHBmR2)Pj=y|od`UiI1rNqQ>r2U8 zZy&Xa!=j&#GEa$#{7O<)Pl<{cOIZXCE;pPmAgiP$()~cNC3=z5hA}5!_Q^c^*xbr7 z>*yTWj3h$W9GA0LnXUd=I9|5p36;5fZJCwV=I<*p=TDgc8*gK_1PWi0W2nuI#}-z` z8!TRSD|Kb+nov>0PsOt@zcx)?YD@%gUohX&7fC~e*{VGBK8#aO2r$=K@k-*P>N_T* zuftn2_#s6(^dY6y!AdKj&|1Cj;=~H9&c=ZWfr0Ap$hR#k;WwmzqEn-#dhSwIgr923#l=SO z&kVO(8@67O^P;bDbaM%I1WS#|)J?*k5lKFM29QLi^Qqm@9dk0&--+RKT#gE?O-_FZ##>Y44_pDtpo}7 zVR{=r>LxN>_MBZ(tCBQ1R?>(~AnB*dfv)=7HCc;R*fa=#pHT{IL$hyRqg(6D4S>|| z9MjOPbeOL;1Zjn=C>|(~K#%F}6oMo${8lQ&w&`pHc&tOEzDW`5dw8p1y z0fgVd$48CJ5;us~Q{$lV=zmU?2n~nrl+HhPW2GTMpG?_6SfRcL(lD|INqFnp^{b$CTR;?qZ}7gy=0I zdX+m^Y0QEj#g)=X`Tl&uP8592;hFEiz`#oRJf=+9v$hPFI(wS!Kb zs0};eW5ptv`L&PIjL$LC%Dr}#s8Zrgox-ORO-|9r=Z$#lo7KoKd8wr5llhEF82KI| zGpixj>2J<(5bQ8G;z$Y(A*+Sc0`4tOkiB0>mLLSm-jV)N31oM7cW*F#`i$u}=(Ou* z=eRQSSBoCP5EUHVnn2wbW&~jJKz9bV(G-Nc5g1Ir^%JC>*mIb>KMh6#oLD~yL>)Nr zNyCO74I6%l@;$I%E;VY@unvc>S}-$Fx+eq7BUmms1uiqq#Ol(*9>GLvBNWagp66-` zO)Tpv%v?p`R1b&Tr5GG|!!4bx7GKt-u=aF3yM^NP76mEhh7J>?*mJ$|GKso}V!kX< z54$hJvt1_?SAzT(1Uo}hbBHW3QJYPPbc{ZLw^4*9 zU}ZCnsS!Vxn}*3L3JDyHiX&@rNpCRguq6T*tQfxjiD=XXF%Yqp#rS~FtvjO z{{?!eM;(|e{Fc@0JfBPtRQUpg{^rQEHLp7V(JXD z3}P!$P@3>}h%aW)Q+frI%M@PW+eP{MShy@hokOK|E2==P+(#@|@fDexLtM}0_yymP z4Vb55Ttuu8<-9B(ubse;>o;68v}#p$+6JNi^dz*}dR%6|iVsr&y0T!wQFui3vPV0H zysDy78VotF+_YhNUf^#`Lii2SOFdv7MqTr!{?TbREc+=u#3+ytLhR@Kci{*5sR%-a zng(f?Uu!}5f738%)A%yRi|jMQH}P`d$lh>v3XT}ebYcAQ^{Q2eg#7 z+<1iOm2Yx7^G8rI(5AzRREb`C1wx|aCzcMk}d zS)cC2X$H5z;Y*dBSo?EoQ66ho(vSM~Tl*8kl*dDd4vp5znmMmSBQbL z<~4k7Cev+z%3S+zv_RQMPfX}KmGc3svKBQ`<2hF&Kj^YJ2pm>!E$?SwFrI*Gl7|k} zJAOllno=gmJI}u?ft_V#EIHR;8P>*Mi5B#isHP^-%63VIw+U8$lR#^u@d>^SP*c_> zT#0TaP9wy{55qN9dS=F7Ead@vx_gUfM{_QRt0YBrD`;AyDE?w8R6Rm^Jz~@&N>P%T=F;SZ_@pPH3qpBTa1JwQEz&07ByxrHLM_ydCP& z%Q;QZ%^xS|0l3;LED&!pA=F$^X6vDzic)QVTt_FiNl}ay*u#o4M_J*7z~Gdkcb7bA z>#@tSqq9(=iNO|aCBfQxD*_!hZJNksG{yo`(~YXfG9e%->UtuGzQ^NFRul|7k zz^}vwQ{4Av+B!*()>QF!dJ3PC{^F>w-0&%yAb+p(g~_oZ8C-(!FEDBK333f&KTgJ& zqgw`Y`{bA-1MIKnJwu%#viUm5AE_uwD8;lEl4o$;P1xl`CsXMye@L4#C)Yp8=UOYm zaqjYgS%PoHZ5DJGs0-qUhmBM~1-Tyy&Zpp$zJE}w)X$mu!Q5a6nBJcAAqA`3%Q^E_ zI3_a)W`L^h#F*W}S|J?--XtU>!6OBDY;GeE4Hq}g-h5Q0n^aA=Cc91W1jgOY{E4rh z>DKur#HvgMmcau-A%>*18dyvS+9LII9~;cG2K_--5Ne zQ_QC{QcX(b2->4yJ3cDbDvUhuu$T~Lc3>n_xjE01v+uc{B)>7Q%t$y6I+M(Q59}=6 zXT;D*@_V+Wj0(r)qZ6o2%b4Gf7#Cuzwce*AR`+}y-GvL_O1u^D@FS|*woQFcnpdzn` zC@nowVf8 z90QLKY{M}yBHibY;DnsP#XYys?pf(xE4?@bRZPG&3(kj4JmLI2SuOmm0BofiKOup? z0?!M!QQ_O25DMh4z?+5#XqVUtO2*u3wABKD_uv(?f6p2XteA0ijEp*MYwO1o0;8$AnJO}Tzw~PqQhU2q!v!P-a(n7dK08ARf zjK>-Wj;f_c<9tAAPz?8C6_O167^88;KZGyar=Cz1{6=duD}-`az*jLgKW@j7B{b#c|EV~&Aq_N) zc3xFyfGhNMbf^nHHfY9E$9ksXW86#xY()JDdF_J9wWbEU`J4kkTq?}IrFY zF)`^0UD@*f-KgWBH_UuyLy|C^s00W7;w_p_|KBwUN9&0wbcw;n;%IZM`MVvZbt&b1EUI`8!XeGUE{#L|Snx&IRJY?9%DN+di^hhR!(2WgJ ztV)_3^Cmw@<$MXPH|wqosKc`?Q0JWfyxR3ra}M18Cy;)?Zm4jm@v53UK^NgQi(CZZ z&r?}22$uc^Yr8IfVDIb+IsrD*;K1|(EDt)9ztH@wz za@rB1bz956{J}1V3fv@Ql}ERsLuWnbOD`Y2V8-$0>MXujgplj6WP=CWP#M}i6PFp@ zcTcqhTxv`|uyFbeZ+&v&r)75?&N0zUd7Q&?pl;G_p*pw9FfinlSdZxir&Z;d_s z_jsjUFl*}~2BAd6X~WAucl1o|;(3^+HtM+T)MJ$G@l| zlv9c8&%^qm#O3#2WDZU^mVzf2W&l2#zzLXytB0k64HJK3f5kGF9zML&w{PFWA^edb zA7}&A6C?ORK~uf%aUFSh_B87Ha$^#f^<7vmfm%PsEcgjF)@-~-j=jG0X1ujv;HEx{ zJ37sRZBa}lYX1DDmKUm4I6#}1eV?B?WllVxr#9w%-l}$*0{J zx)v;)e={smzZQegpF8*($9>DaEV`;12jH@4(UcCw^8*O&i`W5pt+*J1<@vbSelje_ zY3W2@_7!j&wpgy}K`4PP4EAZU0^odq2Pn8KgGB;ScheaNp&_s&15Qay(FK?AJI(Pb7G%KwNZ>)~dY%#lFo2qv;_Pwg~(id}j) z)ch>Uw+1#$lMJT;rmaW1#qaS$$Aq~Sy zSlEjW&^NTX*2hCNwIIKq*E?o1IC?-;(nz>LodC|J5|-`rak{Yw8Iae6v zetb&e0_S*hKtbR8X%4ccCI^58zT1SPj4UncHFyS**9+K+Q&%yPJg6birjkb9r~NFk z8x_@B3;?zK;V4mUtnp`itWQ0O#5V_tsGq6Cfa4-8{qk28O8SW}c&dFU?M-s(1Xqz9 zLKXVV@DL;KsQ;=2GG`q&Ws1LlGnOxVXkgda2jFZrzp8 z+X~Nbr)O)WhdY9>w;d}Q;h__92jRn(Sq7jM#i28`eoco^jO~?go_ny#{oF~gCO~&L z*)dcKK*QZ&GwB3x@FT!%eI9|}{k=D}kI|l1sthsN-}O~H!G=z&mj|IFG+ z=6kE>Z!m1FCs7d*uc3qbfO#qIVtlFttgDr((V@fdL8Waa@)HcD;GLRN-^Cswget*1L6Ro2)6JBx{4+XeZp4WIp>`~eo&S(Lw!hRW=SPtwr4E7w z`Ej88DV#|AJWU06vy8;rrjv3pyj6s~WQ~@H(Ilpv<}?5AF;<_U)Y&2YV7O>+O2>{J z_re@n1ye%vWcfmyiG{jmF$00!n~&h2tXeMYJHfI3oe4viKE$7jGEifHKeeFJhr>!= zJsu55+|y_9Gm^z0f`pQAqAMqaikF20|G`VxIX=qh>XSm)B@07Amfzy>D#;H}AX(WY zfl$_S8CZ&#sHE`OGGgpO@Wt`=FUx>n9}2xY&wq%x7nY~($}p@PRPEI`MV!7aW8<$p zuvZ065Opjcnc{33Edce_J>@vW*2`Vh>Zs&wn65s-76VTHebS_eSokq`YkC88!#GhV zy70fC$5#)OB}={;!o>fN57wTx=IokQ_4ps&rR_}xsz`9d*h0#(5l*O_n9}P+B7a3( z{x^x6)NkRQU_f10@7UZU8(E!t*k!eF(5#|E3E7cNEa$C|J)UBy+)ENJdF%TrB$R#m z3?*|22^9@iD4u&NAv^g=Ctb8bFuC`kOtkzZLZqK)){7*xx{(0(>2{U~7Cee+ZSf8f zcI46Ux;=Z&j39GaU2tXAO9Hnwk@$@sJcde5{f+pq=4a9ctbbe5_&0=%5~tpm;5&;i zh$?i{_%#`v7qOF(s+z*lc!=az&$&*uby0c6rG8wDbMZa3gO%^Qgcc0gASCjAja0|j z9c6H2JCiz9_t(Mu4662Q=QNp92S2i5m0voWL{{fL%Y}$_9ADbx?w&9|lae>?+3MsO zsYeagQr9B94Zr#f!NxmO>MFZ4csw@d9I8gJJM&IQRnqhnK9BbpT}EAVNJx3r_w6X;cz}1V= ze6=T$|Lxe98R+!;uVSsWv7H~;&!sbO!bA0=^dr4FtPa^sX|9(DU$+h?9VwQBI5@26 z6Ox@`Uy@t47oO6(l1H@vpZ}s}uZEHgSNP@|x<*$cP|$8_CEN;X9==U&Pu8IdXW}3B zx=z?p0BTS6k4h&eOQ7?F`5NHN$5TRH4|0L^#%R7;`e17Rl8~7E&-oHF(mPmCng;gn z$(4Y6Ral;PV81?4;*9(1HXS2eyQ?U4rrzf2N5L53>=fj_(`rOaWvQP?Z8FkLmG0w| z)OJ>}LRVDNTIz<&?BV!RM;8%FTiE zJ{FhtsA;(jE_AfZjaC%x`=|9$c?-%k{5qKMQ`Do3hLrkr?|lM>DvEM*wk0wf z$KN>MHD|8>Q&_zn%{I31Bb}kSrtj#BW^5JNQaQ2v^ZrAooCKVmP5gzoe;=WBSeYj)aj^Spd+UJD>kHMv7y&ESZMm$xJweM~)NwGL zseYt}-cG8S)mQ1TY7PgNZC^mC5Jd@@)+=w9Z?48EH!s=bra*>0G#xctWWma1cS9ip ztA5URoTkP4ggo&7O{;FVvRQ&aQd0cWM4Qu4xWbf;-SRUZqfO0{=*^AAbJ zafc5dR)0jjDsd)fvHsgCd+RxghOf-*?eM#fDrBiI4CvicRsw_9+;xO4V`>(aIqx6o zFjYtJvm(6g8hF8W^ceOKkL9p7X(X~wCWK1jwBt1$j$}(qbsj4TmK7i46?}Il*L}hSjy4^DuN7&%v0q zHT>*zBqmE)nh^%f{`DCEJj)+DWK5}BsQ-E1Zl}3g!bs$(RFYQH2-u&aVb`AMMr7bR z0bSw1Mjm#4HB@pp821aLombwi1btUa@N}T$yF$oyX5qnL+yPSdVXc9nn#qJPFT06- zNysC%bu+*-M7<|%_OV0U3{%YrvK-hvgB;}64@@=r2_fH56`d|ZPDW%lw5iX9B&N3N z$vqvwx;Cr}F&11hxwm+I#D>+1Buh-flT)Tw^_(Hf#imWFRcq2@%Egr6iZ-zOYlw%u zilqO^4jTmbhrI$zG^$HJ!FO&N?Y+8s)u>UUS};=Yf*F)Rt*K{dS#N8`@whKY$8Ro= z`+UKwP;UC76iygs>q%RrOUq3Lph6MaaRV>D-USPohbn`bk;#I37olHIW<~`=LWQ42 zk!`CQCcKm!WGEc_2s?)umUM!*zJg~$gC%nLFX9~mw(ggcYYUj%o+ZiwLTl5naL4KQ_9~~w8`|v$o&g&&~P~QOG;!|2b@(O(& z8ej~s4eN5NixQJ?oU{=ql5MC|lS6I|xF<=_CqmgMk^3F8l_RQz{4G~wa-ju3KY`FV z7|20a3NLQRiVhB=`vl0jr||Fhb9VFRR?F3kYy|+Zg3Xi!#9(*-8mHeVdZ9X!!dqExz_y~@Z+9nHByeMS* zcUDJ_*R?m9(XPd)-HiO$uZZPax6RkYgm@xh1}2mb`Ua;dLF!XdJ%WJ zgv7e9poOOHe0!*w80YceK@!CXKGTwcXz=4MQ?7(S>wZOmQBv7CV9s|{ZZYaI84jLt z-2#Jm9mZc9e)b77MuIw0<0=RiGuE*JMtCU3<|2hbgMN2bS}t`7@pIBtU%t_cj$Ov* zXA}jyER4?5kao3P=>HlvxuWVJAhp-SVLxJgZDs4$t)W~vY@J>jSz&G$Ge^C3tm2mx z!qK)#3c!NL_PrJfzXP}fZq~$jfDvfw2tMLn`&=I@gpf;xX<@K?(l;lFh+Ygk_q&j_ z1U`36wgzqfaq$S+1(yA}@HXj5YijLbmgY+TREYV!wevIVVy5qP>aX!9?T8z6KK z2<2yGbm7)yn@x>1@G}`}4ch#h$QWDL8rT#mjSg)(Yvr{2GsK=thfSyl8EyN5tXeCl z#Mr((D~9GjealDGG`I5{pW8BR4g74_5VI0Bf1MZHUSfmE;~sC0%!>VL1nf`Grx^b! zX;`Mh3Yr8Oo2=XwPCX&lL0Cy@YmdYT4TAMX*{kMnzh6Xl&ipR) zuS+1)moTh?5iH!TKE8YVZ@(*RX$su6c3N$!RqyRZ=EyQ9-8-*3t%(Qk2s5@1y9B^= zNS7}2e7bD-aYuagm6eu3aPd%l$sF0%wRcm>Ltnwv!gxC9hX)w48eAvuwB>{YK~Yo1 zb!$;I0|6~XDs!ESr$c*L8`t4`I2|In03D$+Yq59+l*Ux%9!_f`ijva0q+9kM>P)Up zHIGLUzn6GLYDWr|S%=ASo!xv89QF_#7)eQMW)gLe+MiRiKaGV@u4&g)f)VmQ*55t^gb(>g-3zujMTo5dv*3&_tRum|39GQ{{`+x2(rFKMk3sX1jn!McQR$L zpza-mLtrAWT%8h;{S0>F*^|6b=lI-@;Q0p4c+L!~rg}SCw$|xbo`>gDUs*WMX0V&j zvro&w%@Cg+NJ+;g&G7h=ls$W{kd$$%J#K@lJ+sZd^YYG}Q66p5FWLbuq%N>`#A`&D zN*h3W%di}`(gf={8g~KV-HsYIBm-=82KPRWCV~|kJ#nK&t2zG`_My(jKR(SMojmt{ zB&E}Ba*=B{wUmD7xYe@aR&l3&&mribx{MHk-)OIj%SpXKw`BXvLwZ{~d!>b{dUISc z=Im$hVX*@7`tod!3*1_B0irDxXWhS(6$AU+Ehx?X*>WC2qelU;{oO_a2=xzeE4=0a zd`<#aB7W|jfi407NUl3VEv=B9XJ}F^Tm2gh4WCsSp>}W#g5}w78>$P7-a@w%+SE%u zgb?bw6rsHv#aNE>gBm=P4g3qvy)e>EEcbR$o1YC^TtS?brD@M6+=>*os^2QBbECqi zj%VW~vs^k(MF#Tw^%2@Yyr@7ovYwZ_b~rO7X1Sl_$%604eWQ^E^5+;@kaim864jiQ zI~JW&Cq>zp6oDEQX>do~Gr%KUofnHo&YjOAViSkwZ8-*`R@H@cTm z&{4CyMrrLdLdCesb_7Cu{nSq{>&vSggmT{44wX{&8ALR-{ZZ`g2|w<`0sKrmC~A0x zIQ(QE1Rv3VC}lo*(p!?W1qv7$6pjE<-*Eg(2=)~UKE+Q;)p&79gw0KRToDeNz@8h< z^-2@X^=oY3V*C>)pcB5u`?Jch8?q@D5Qx;V_XWa{)P8*44JV$S@Z)APBe4g{yH_0q zUhl)m0+weVe!cJ8`xw9Av99VGNuGhRNlc+e;*o$YhxZU|VW*&;;D^H_@tvZ`ZTKVn z*sc`HWlycaoeNY4s~|DVYhMklb>OYLXhM^qR=2w~@XJ!C1Xr>HG&J}Xg*JT6BmV@- zRlN=s$Im2hnb*!`v>&ZJT9p@L5ohQ{O^WFq)CKDDPvN)Otx3$~5VBDDhh&=ro;DcS?B%KN3{fr^toesAF_YJzgcM8AYP@Ve*9lf^(s#V5zZ6 zCL#8Y_}^awp5Du^!pPZqN1GZ&jvoU8)&#`Us_EJ^^$jp%&ZVv3KD#*lqa17}bR!kG z*UacRm@?og^#osu37I!#N(sIJ*?|-Kz~msf4Xj45R7y@beIBNH*D)Z>?ZPPrI^_mu zGB()MR!9VBvC5wnY$e&YoO;INsNQtLQi)w6!&*KQwuX-$#P0=jo zr_=^xtJ-9douTXFLO>WvyzOK)R9u~`IxM$T`d#{?+yXgD@_b2FNT7Z%$Ref%FgVL8 z#1XQ+s}Zz3TWy0il%PNVj2UC8yj48&U^r+K+5%=H2NIeWs{>;*WT!gvFGkpbu^&m? zu61~dkr`GY@E7$lD%G*1HiMbLvT^qW9VQj7d?}@q$)|a`YMru74NfGTXCUb+a>}5Fbo$&5$ZbS)SmkPvJdgg;kti*l6?ws z8BWm~@7$j!MB2U=_s95@CiU|r{HlSjKzroJG3wk*o>j3pqM;2!`JpGZwMmmzf8vOx z%m5a-{ify`{s}fOlxg|9W>+(6id~}`Y8j0qcb$QqcP%)uSPTZ+uDL4T!5cYjwk~kR zvS6<>6^h53sJH1G)pWm26xPbs4}B8;js2w2&l={PD#%1H4V#4b@;|Jm^A829Gl90~ z{$7FF%v^^v^?5dgL`&wOJN*H_dZ?4t;`<722#{c{=#&R`+BULCp)XWuQduia_s^j{ z^MoG!Z-CJIaCQYJ3{V*hmIjx_DL;v7)Y4!64)y2lzAeqF>YZOL0ouKUZlu4cFH8Z$c{Al@(AB4}9n|}uItwf5jVQ(2pTeS^ zE!E{sL0{?D!fh1 zfFRQvn-fA5^Vjc=+&)?fAsTHsZF{SD6??jx1U`W#e zBMcIRqd$Y^ANnkK_fBV7)(>GNP=*B(EXNpQKvo@xGLRdPL3{%UK4jHn_$y982;_tq zBD*SroH(7WTK+L!9$)KSGC44BHdHQ$I?Lq{x}yY%mUGm+ti^Y4zn%gutvM4aI}9A!7Zw^G`C~zr$s4W`>i_nEFRl>M#qM6SOL@g z_5$*u&SgC6rIgXV_qbo_kGlpJkCAQpC#iG&<7)4FRDS+h<;|Bf!TTU~KFOawj* z(KN?lsmkqSwWU{TXM07$?L#;Vy!n}U`o+TX&TB7$76a^IXQ<`TL?z^92sqy_?PH8$ zqu_o+<8&Dgx$B&~DS7MxtYsWMdbIWd_@_EUVKI7R{1NeF2=xEs28kgA0|@EzWeUcR zD&;g{us_GqB!u=}V#TU&*l+_<72byv zRS5+v!1}{cF{aK_2(SvrzL|RLI4l|ncE?nsV-E+8*}*3U>=h0Q4i4GTKo;9SlU|^_ zmT&(GeEvrTXtWE9cx=}zZP(;)p&XVkmS}~1mRYR=&ZdNvq5}EDG89o*JgU7q$%K-yf%&G)%tXV?*FajZpCFx^?T;tGhKqndxaq z>vb`XUbRy&yO-Z&EeYq+>Y5?DrzF%`{0pk_z~z=Qx%RIhRk`e{bRoZ2in3Yn<}eJy z;KMaI zH8nv_XQ8uLxpA<*2Xb%og4K!8;#A1@eZOOh61P{Yyo~ta*?+!jN>@>&dABgX^Zq*} zP_W6o4I82^Wnp<;re2=-EA%M9a9j}<>rKd=fGy*jEhLw0+b1X=oCj)3CsltYf3RW{ zJ4}f`>qmyH41h&ySXV1q^?ywghEq?(bG7NQ;ck`Rr{UJ=OKoIpV7KW0Mx9}|e8DYO zY?RsxT2&eTDn!uQ>flf^!eHZ`BQn6Qk?tJ7LAd7Nz6Ap+5d2J7w@|z-S!u9w&xJ%f z|AOj-d2#%ID}qarBBK)=_@q1k!XU6ht=1y9MsZmhskSWlz@D+fVWEKStyh8Cjuv2H zbzIRwupP~|NHC@ExRn)6a^Ne19Xw#-cy*6Nd|4eiGg>{K(sW)CLDaA|xRH#69&{N6 z*kdt9t$JgL&E=edO5|^lAYpT~N!jQzTTvzp)aH*;HX<+r9kqrB!Ql8tpu*{K9z*@{ zExPW#NMw1;^J?NPXr{hUW(fq*UImPN&r&Xku)K5CA5l=+z@4+}>?b!*h{WD*TIEAY z0W;Zq8O#h8QWW|9 zRV(Ed2avbIZhFsR&Q!Hw@2|>z@&x~1VVm-LhjAC6T9~dwucYG_kDF>G8<9TIS;RHw zgQkh*d~ol`CPQl&Xz%p&$R0)jq29+AyqRtU&!neYAXKg{s4*}|hN+O!Jm76JFi5%W z4f04&pJrgY)6*ZDk;APh^V1(yH?Y=G>FLvrd5JvUuhJh?G9ZLnf#k#W>!I^9cKyM0 z9A-*UmQVkH@f0}q9~6$wA9reO1KtJxhe}{1d9=k%sJrC0#BGz3`dYQq&d@Xpv? zBsKEs)V!AuoSC^shaWaq_+>&Ngs!}~B#3V`t=!9!djkd7JhBkwd+BI0P%xI6hudY} zhNrm<6zmzAjsMt*Z-HeW0ro!Ze|ZI|2@qhY(1If$L&^i>Cfop%SJ?r$rY+yrfG|Ft zAtP+_bNHeDzHZp*SAvacYJRq0XjUf(vo%^`&oVLO3d^pCT~3fx+2mhwFmk+p{fe5RwE${NhPvxt@^d;a zlc}2(lSE!G$|Z=GCcVO9LYD9~Z}%gV-|f?A&Pt!_oMZYZ;p@~OsPC<=rPC75ZgxUw zB`I#O)*z9thMzvOq&xSZb|n{FY#7;X27htbD;d{2ubb)ML>yAZ=n*!um|DJ?;Z=OpNK9>Y#fSG-9j>q+N z+V*T5RVTo~f}b3%b|T(dnDYcMiTT9wE! zhV^X>e&Ue5Ybfh!ZI8Vu+hg%|u3v8O#U#jnBQ!AWjKRe|KYWAxurwn)9zQB$_?f4B zxcr`#k@&jw>pUa3h}R|F4N~NDdz?kfKh0a@bno-M&i4}hP_B8QZlz98+e3dzcl+5B z&v_pk5Fs1wrJ47b6Cwe24EAeKho8~^Nn>msgY%R|Mh~g#t9o)fCEaF0%}JuWWdd_g zDrmvRsLb6|=Bm#jV8Q-SF|9v03~r+U19_&S7+#}(LwRpfzC9*{D5iDmJ{UnEi_R8N z8kVQ%Y_-RjI^Egv=|x#zj2wB1KEYY@u3{P){yQT4ow1=R4@`i1{Cit4RNjJx1Ppb? z226P^*j%d+_%r#ORMCC8bLZyQNpiv6WJECHV3fQI+Do9=JRE1Im?7_Y<@G|XzwZ?n zT-Bt5r_@y?y0u0q8lddAb^1>$N`IaAcjckw-9@NfqB2n5cUI_bjJ;cXO1Z20iVjltYM)~OOyKW#(y4EdqD?=vf?4_- zMeSJq*D%So=}(v(z3gL0Ak-+5E(a*eWw!pHoZjo#2T346^PX3(bf#jnfgt*dniZc{#w;JOFz(?#itXr^RK5&<)zKCrh zBhOEN35`vmE9PN$dszWgaa$5hZ$kbL&Tdt$q^mav}hxT0ENX`8?Z zK_Y%>&ORC{vWIDQi9S!mo0u9q%U1kn0hMnyW-p`YjP*_tD!~|1f;&m^R$V)X^+`)G z+A$W(ya(?z62)R!F#bY@dE+E)umanE7UFnY?knKa#`NVxj6X3{s8841c$7x?ISIcg zX2Z}NoHFmDGT+RD>nNUi+9Bi)R~u<=HUBH+(oU4GXlumF2)_%8OW+~Kmt~di1K4sg zNGygz0PB_kR{S=043@-K@T5E~ZoYCX&ki|OK7+KBharM2Eg8yXr1P(0{~u|& zX=}oqg+5o%@SevOZ)k#{UxT*KlpBwd6LzO}(AtlpSBz zUw2=L5R4u>CD1KsI6}CGr)bZ)bK|fyy*XaSvQ?{@H6LZU>1RC?l=dvi2zw>lm&Ocw zu^@F9Qb$1!z|hmV5SoW4e7R8ZD$kTp>Qy!rG0!pkTo{TObicOU^mCpspV>RRR)+dZ zjTX{M)%=6(GZQ?+TT975_y}>_5f1X`LCrrxaB@#R^F^;Gj`DEXf$>S01+}|k_wW#e z@=XK=Rffw9S-GV+Nb8aJ<*^fZycYjK4lDE|A)AH`;;?2o zL4y#lbA^dDNn_LE#Qq<9Zvmgh@$C-}5W#{636`S8t+)k>l$IjJDK3RVaVgS5pg@be zyB2~&aS84kAS4tLk^pf++;--9&+I;HvorbK+xOo4FEXD`vS-fsoUvzj{F;YFXjuX9(s)By+Ejq%!=Bvmf5H|D5=!-a1Q_y!Mc5*2dRp2`Q3cxcVVbl{q_{gx3fwKw1S~DB z6JOIyvPqHv8@=neP!Fn?{{@Vn#{YY++j`qq5TBbwXWB=o|N-^^=4Nn6HI@tI`2Pcr`+ zsLLOXrfywSJicShlWup*a;rH|o|y{I@RgxeGYVK5YP0Ak-+#3PHnkQ@`kl=H zoAD1ZVV#VS-_s1j%m_=XC{*;bRTE>8N=J+*@Q>4yQ96Z-w;=Bsm8YndftkG5Z1>WT znOnsT9){d7gkc!GgEL5rLF_{&9k+E8W^b*u*n)jlwr?I_HjS{(kTy$@@J|Tkyd&Aq z;n0O zhhOwJ5Z2t~^Ln*APC?(4Y5zVg`dq~1+2=rj~(oX=P z))`>8GR9g7!u%R;%WW)U1>N1Wt1O%GExGZ_4RhW@+Q# zs?!`!o>xxJ8p&(mnMgi))e^|PY|GXy)P)eE;YNmsDfJHhZ^2drGc_S0J$h9irmv4s zcQ_KM7K|*^IE>HfgjmmPvJ2FQ{XqQh2yXp=%f*f180me4NQw7WyBm2bov7p?yr0T2 zJP#@uN#*q#sx~T86^$ZfjzPghwk6z~Vq}>PgnVNX);*XTAG$gDkY{s|^^gtf zlmEY10=Wwpo-u!ZUBj>>TQ$Y4+5Q}AI#>{QMC;hhz6u=ufC);?Q{$m4=ah zR{aw0DN(WhVRPrsU5Nwc&TU(Wj_lDX9aCl0r&}ONP-*tr0^_+X&+g9)EA;9Ju)-K0 zw!Tq{Fko8+YG@Tn5!u2D5;~R1cgqQG$w$z)spP4P0PBs(4+021B=Mq@G>^tYE8t*^ z-9dn5F*(ALi-^i+fWe?)N%^lvl$@m_$ z8YSERavcYhP=l~PrzVi}h=^E%-;J=ohgH_Ur4`M6OHng{e5BqIfw5%-SuYn!5@rgp z%H(E6?Zwe##>o5ghmb8AM;Q-wvPuN)Yb$Vj%+)NVyeL>yzQ8koj2qCW@ zEgrWqmV}S<(3(F5`+h}-f|S}%zET*R|NGzluQMeM83EOP0e@&RpJkEgbk{%{LW=fbz4@XUx zdr5W)6ISwS`Y8`pHP1E^hQ5b`$-*g${wQKvqRa~?ar>8{@u5gnkH=pC= zsQBkE61aJvHnJ&vCFi-AlAw&R@Ap}&ay1+7c&w<-LU3jp^KGhHU^h-r->>`3l*2;( zj5ad@zUqC1VOnHAF`A-oKMq?7qhrJ1uNZ<(a;0<>D=Yg9xJDku!J;njS7CUmCTAu*VDUvRGfVY3{fY6kOsdcH%&`pP+X5?m zBgo3vCTZO>m5`&l&qPg4!a+t;vJoU$nr8GH=&y+IXn-!U6tJMp zcUtj0*&0cKtX}6NN$Esak`h_l%z5d$vn=0Die%rx{n%~@@xjyCFkM&CzH!zrp7`bG zET;H#_(*BZ`4ECbQBMh=GJ(>Ae0(hHP3$Lt&`rrlHsDw_okn75qQ>?xbtb=;@H8d+ zuqkNq(WaUhoF^6|9k9;`7ajJuWD5Koj#4CZ_j`sP7d2?1;xW=_@E7dj{YVPkZGvC{ zWbjPS>3>B_IO<3(qY}`?V7{I%kq`DXk2z$qUj7o^zkIT=Tfl_%v3Sp&Xw-Ox;@WlV zR>|0@fuBJxPW4~%`B7@A6nr8<{Z1Drq=kYD3k}_(y&f&41)GkPZ=>-Uw zV9u{*kMNnaNKi{do1QE^?j(Apn?9DLnAz@Xy3J45d62cR1tQ&Ff}jfdtr9bOum|Bf z{v0StCS8*J>zLAV-b?d3%wrB$_KwmkmG7|aS4|R# zQPRmSir-^yn1p8;G3R}f6draqEG!%rq)1-wMhrQ3-basShdjJEH`s*8o+1@1wrE(f zqWBlFs=QB}D*MPq!3#Bpc4An=wvxA!?~>O4xFam3EGMg<$F2l!-jFpM%;|fX*&wC` z2UJ*N@M016O(-7A#~gkS$0=2=bTJA^OFLXj=V?^ac1teIt8e}+HSiPh-z$Oa4I6&>^M*^8Hf&g^ zS6*@uO-?;mES#y~G1%OJDFmi`e6Ux$cI_IW>WSJUf)aC+8u|0v)6mCmcjY80>s{P| z!Gb|D|w^v=Fuk3rk~=4D?QCfGtd@sD;52WdcPF zE-U#j^w<3H5giU!{_z%>(wj-&BzSxA#TE1=#wq50PX2p1{jH?bOR)dSSOCTEVY~)b ztSKJ_Hl67UL(tGKP|Uj{M~@t*p`JG=w!<+k5t@1e65+T6R$v$h)DQ7&J#9+?o2PjP zr5mvtFiJ`vpn|YK#h{0pfudI119r!-eyW5Kqm%MV6DNn1@2-vfsD=rfR`C@>vga7W zL^mOneYw@4dFDk%j1Ipsws&sedSELSKT@`2jY@=T-1V;|-(KYgdY_W(jvfW*oFUZ+ z)u(d^YFQuqR!yby%z1)h@-%0VI-=1e8a?=3(cANd#?y(iGqG*P(4l%Vbm$|e=#AZQ zaW|(F;Hq=Qc{8Btns7!_xn5koDBP?lW1b%Nd(O=mgsDX1L3PcT=JN)KO^h9+THYR- zq=AqFv~eLs1N?`Ory&ZRlmpBF;-+3HPY*p5osz@jr!b>@(QMiH$&mBRO$LosSiX9a zK0eAZZ~nrC3)ijOcK$rrK5Yvd?x>f+q$^L=@wYr$dskM+X2=})cmBaGI+CMpf$B+l|euuVfT{R*rQ8Sf_qR!7n-hzn3rnaX_V=6=$n#s8g)9wWuyYxcvv7EwEvexlr)bl;`H*_Z%@ZaR^|H?MeZr^5- zQetUQl!&SV2aG`mFtcE_ZF4aF3r+3x8CJL6-3CbCoRT6Ks+#26zsg~2xj)2hOA(15f8JG={Lv&=b90mTZfM0&^LHRPFVPTOiiHn%rQU3H^d)i z$=(@OKxt?%e_BbrZLBejgwt0ueGl>>qu3|i{ga0Pyp>~FC77UcA^F|=!X;Pvb#d$-J9vsZu(_0oW zLy!W6A?vf4<_ArUW(hU9ET8%<$<&1)LJ!?%rT{ZDjJ}L8Pj92-dr3P@Odz(y+~s1m zPf|k!US!ReV;gE-x*3YY8e2fxOAh%aGZ;?1I9Rx6ao94%#iGVgd9chhx9DZcMpnucSpyW;9B~k%BQoU9g8u;A_=|TG!Y&Ge~uSLpjE&)*=HR$Zx>X^N6-P z7MJ4$tcThIsn2W}RmoD>zJl;lCKUR*_lhm->`Nb7{xQ4ge8FQTd*!1j2JYHf&k{^@ z%N67@Z{_k{!0s$8&FwGr3dAcIJ2?~bNA2zR($}7U$NuKdLG7o>n&p0odd8?C+dYy5 zsGNC^j5d6Sx#{?~$?pnLxi1coi1C^2p~Is9j-H4r(vDWv0kQaERUJWSBC#hU*J%>K z^zB+FhtZTd^nIDWvxrfN(o5w9*mH5@FDwEZw$tz$r)lZf(+bhM@yM=7ND$BExeQwk z`|=P-25d#ZE7=!bk!^*^(Cem~Q?)Q$E=1SQ@^#t+%YX|c#>-puHe*hw-Q{Hh9UROh zW}~+pY?d=}xh%ooYq99WPxxZVvdfZB=^ULZ^BBj)zgxz)sAije#LK$6Kv#Z`s4P_i z$t`|*3;qmM26sqSYlk1fw|jCXe6sC=N{w9VZw;~1c-Z#%Xl~oAR>=7YiJv};-`#J8 zanhaF&$m^ws-ar3%B)4oXwEEHxvB%JR_(s^v3S1>D)iXTFg#>x#_eQ;7Nr|q4`guL z411FT85`9$bvFmd69yZZ0cO-o{Hul`HdOctNzxM9IQrEj?aRtr?Fo+kO_yzU8+%V} zMcv|4J}{NAMu!k`Spat_f|LIx&1ae`xKBL*FuG$(i_56}iT)ohfjq@0ER6H6%n3Dr zeLvYm!#O!Lzqf4G0n5gCR?#g~vGxG=j=`GJNhN|4g5u!W)C|s}7L!IfGlzU}AL`@`MCcn|MF#~Lmr95@bJ#3lj5c)0y%=z{$=G!zV{#(eZ za3|BvpSh`N58J3W%xNH?^#?=9TKtp~pW`Lc z0Kx9!ejF^zQQW}sHa;MaB3Qg`^7`rc6|Y?Z$-i+D-pp#){Y@~r!8M-&-h|k03NYsv zI5zD{6JDUs@EWxk^*XjS2W$h!*C5mtCt9(p0XQ03O<1d99mah}NPW=AA44Xyim(Rv zGz>_fz^xZt3?O(3l^+2KV)e$5INC;cOHMw-LTHj4&87rA*aCg*jNE-XKleJzD}}sn z!_tyqQGQS}D>~-(1z(&HpN{ufOn~mNWMd30b-Rl7vn1639QK~R0l#f|u+~mhdHS;& zbZH#HnjYk)^NiGiNBqwgxfV+xzUjlPgI}lC^=9pb*$bvokprDbI~&mK+}cvn7>P_D zf;AgS(J+D_CoNs<7Ej-8ZsS_4A|%vmWhhcMOIZk^M4C14aH;VIij}{?!D`1|r0;xN zKYUP5fbm})`QY-w(ES-`WXp6N9QBL)7#QCFZ5<$I`sUvBWV-fcl|>C09*-dJ(pJmQ zC(Bm6cxnGUp4KOxumrMuF7zJifZP`@w7hNQuF`Iir}HXnvzi^2A@7Fn%R1=Zv}MAE z4HrKk_g7T+2L@_-2Va6#cmQ;w>C@!S;&;$&xIC2bIm^H!h`viS&Px^uHbTE>I~d~R zc3)`M40`70O)=R$jjp_-Y2;KBRG{)P=%!g?Q*?ujJ16YH*&o$o$yGB)_l=aWrQNWj zRo+RVqS&CT^s63-iK+nk6EzMCp-fD|22Y=t(hh^yOjbT$%*^=ke6=Qm8_UhtWctov zysLi|%ZM!}47L>)8sOcwv{60l0stQDTXpT)b1Gqa;YtJJKprYx>N{|zZp8$Q|6<0- zYOuw9l^%uaH$L5;;iI(X<+%bkG3HLagKz~n^=Ln@FGvIW3erjKT|8G3N=1aBZ!u<# zrZkLSzlFu~kQm;ZX1g+U=r0i8XPn6TCj$VE8{Z9zyr|Eyk|5NvzYl&jgcG97YU3rE zP8Df6$OO~2*Kgm+A>s4y+ta<{hhmm#8(b@__JJoN`RfnG5;{c<#r({^GIFKKB4&m^Vqd=b zHvixF`EPa)de?Z0VRAv0E3hCTE}#c&BEH*BWvS1?_sG2#xsV5_CNdRe;k$S*{q7v# zP%=_lRZyP&Nt{At_9o;{6ILoVsf``GM#vKrR+EI<{S(Pma+bkXDE^+Qktc}x3#^d* zQXVzr4LMsY>0w@z9-2W;Ky#RPZDP5R(kL^8T!To&l`A1+My7+rGAJp(J(Z;1nwX~? z*~hE1J5lCZ!ZTgSu~bM8khfK;)e>g5P7HC!$LdbYFRHI8Hn#CGZf09^r*~LZ#L` zu;?q8B&Zw7o%%zM>B(D{hV%3w%-yi`t~DxC(E8hM!b!!Pnx6}cjgGp_c9%%(b zaFfpsW*QcVW+&uNiW*&x7vl=(GP0hJ28&j9Hg7z~(O;*7M%) zojb#DfN^y5+jxd&_m+dzI7_(i5!}Ix@kwXC8iE0(z?vf;OuSK`Mh`89PmJp_A5e~d zc5$(e((~K}J=brS68v`Q1U9*QV3Z2S*U&PpB_~xvV;?M4p(uzqUU+@!` zmOz6QJ1#vux->thG#W%>{P3P1j(qhsi;jJVgT8fg$kF0BiDw1~=w$pAu!~Yh@L`3} z{^!-|Z-W08c6bTCC;DO>2=>%MV~FlVcvO;8h%J~IAZW_nF==6)(vaaCFY#&7yEG2t z&$TejM7czo@d}kEHTs^KYxCE6V`jh zigArioKK$r|0Pi6ne7-ilyXZ?f@vq1i~TJFb+hw@Y`h^5Nwf;pzYu;3z`bk z9|r-e&C&Y>2HG&5CT<)o&lUK@K#zx^tc8BOPw-`aE)d#C#AodcA-FgvI?Bp?nqW~o z=J<@f;C~RXaw~$I5Cn;w0?B>0GpNZP6dcl{34E9Y92el}i9FcMc~G{p@df^S8eyGn z#|@}AWf?VX9-6ARAs7$3PsivtgaHaBObb9J%z7pacDESAG-5L3ZRBXQoEqqip$&&GhYRJInoQn&&FN(!)bJus-6d%Ir(o>UyGj*qb=?EMNr0uZ-s3qnZ|2Vm z6<@p$GI&l@^`hY?k}q?UDl@&}gjm5_Vr(pD0h2wT?twm>gaVke$6v2}*dIw&s^k@g z6AoInvUgs;{uO>b%ZkvxEPi*W1HYl#^|WVEVYdEVKr{XTfF{!UcC0Y1pNq>M{f>u- z^a_wC!lt$WzRi7YX;^vQ`Ez?;ay*yC$A6(Ksrf`{L6_ga%aFbMHg*6{6)p#Z`DhYO zT;Xa}r}34gM})B!9S}WF@@HN{QZ|H6uHef#i->J=755 zdXsYkF3-Wx5?frY?`42Qnsb9`5}Jf+#Z|71yJOc z7%MB$Nn^gNkk02*Zto1RK`+F5e;pEIH+~Xhe`SE37h??x&rYdC({h(Mx-pN$*n%Bm ztnX7{Re@TPGD5`(&sz(z1u3G1d2qt3O*AxwgG}~{;}b^qfdFoPwsxYdY{aKaiLh|% z{Xd%M{{ogbS{z@u46dL8OfcgC8vu+4`e}(*2*7$XEY15L;@heTGDJptH50}8YnCF$ zP&mHcmx)L7hVvGY*-^myXo3u}03Q^8oQ&+pJwKmvoco8uElhTCllxjund{W9(Q*@{rLxfy3-Wgr$~A+(Ft= zkeia(RdzXp@J%@=k5nHfNcqA!dEMxbAvH{xQ=2xuA5i;JtmSR06D^OMFu66EeM2h* z(2{zQh;KQXLIY2OH!u`Q8JHE$u(9;}z`Tin`2wLoc^C}h&Ow*`cVcVHhUvHy6#W|4 zg^di>>F}(5!jyFS^LkPx4kd$blAz70wjpFa&*sf0;G^^B8hAQ9X$rT)pL?!6;J(HI zGcCi5+}#&ra??7B?VBXm$9QcG#R`c+{~vo4!yA7>xc4zXa_ZrgiU<)SQDWdg4m zxUBmL8KwlT{jW?qP}*q*tV(2GwaW6^tJ3>PTtbMZU?(aQX-@A!k>pyB1oH|(zzYV@ zLP=Yms}cE`)kA|)2zk~5_RbN@HwK&LdRC_v=-os(dd~>U9U|5nL!JspdNT=_#RYCA znJz#On)$kz5c>cC$5PX7kw1Bc1J^IlLOlZaAXsym?=mJQM>XM1#yZ_f4sGZF3ox$2 zSe9|w0(t_cd0MR8d@vwg`%(CoaObD*O*;vtGguT(|hv^nUlZ&^PM($&&!%YBq z;;$*3wVZUu2bF{c!8uPQ-?grqIfVbNQ)L6T1(@fv<-kg>lYiB1+@WFC*2_;XuEr+g zlfUtXh<-T*#ju&+X#4lm#=DVVg?IPtXgkhCJQDQ{#>KCc3=m;Yim_9)TE84{XL9M%{(a1a5U9J|3enQ4?$r zx^Q1=N>=(Cm#nYayDRF zV>w;W%w6C&h#8DJb86)ru;P2a2SQ(4OU>av@tsbi`ojBFpG@XBze~AfHs99zGS-L% zl4hDWe+Y}M(XjEvoQFWtQpJX)k;SIG>tT+MA#dGPIr&+U1QwKu0k=uKI=r$=Wa>j! zeAa5=!jR~AVrf`h+Ma`-h>$*Q7qRUTsKY|{b;}xY0DI7%9;On=G{ts%nMb)2CZ^rv z5J)Re9CPyIrnVM~UAY(OG7A5K%3HLn|M0_2p9CrpQrQAhMy+Pe*7)HQ)`5pz8n)%B z@4iKULk1YcDbiaEsS#i@L(^%r|gynjcF%VVH}y8Wh(xhur78lA3{x2ga?@*bovc6fFH4IxbB7R zcW(aOR>L}1{D9MVpeFwK$>Qtyma|o{s8`x~m&}Loek%mCP7u>rSQ2i*9R85*=FEKo z*5*yKU_^YeKXDhOR5TXOYBa)_HSnn+mI%O)ME%;nn7b20 zR^5YB)F3R+!dt>Fobk?oEV6ct7v6h|&;@+K#Tt>!X%a_g(TlX~ckkZ(mdrbU2;-TP zPCuld1ICw{n?iV^a4}8`2FlxnDH^v%j2MvRP%4A9g}Q&n45h$oN53d*R0M33=6{aA z(P$vDugB>tm5-~!ywq^>+g%Tm@FjfA&dnh)dN)qi&)X*oJ$Upr{F1QZI=k`yq^rWb4u4ni}_9Jnv zxO&%N!Dth_jfWME*bY1A-oiht>mhHnzs}VgC-2=~_YSnOl=b|{^eMW&83pVS*tx`% z+c0!Cr}uhDukRaf!S@5;g(BgFOtE&R>t5x>uK_E1F)dQ&UCK!O)=wP6sY~BYn`Xs% z^C~4Jf@7zZ55^Ro-E+)3aiNJFw^=4NG%O>%46!Smk)b`*3CFbH-%}#oc2v}+7J*&? zcbouO{S97+jIh51#Xx?NjC<8q~e1)Jz5~ZaiK<_&S2flI+*;C5t6vYJPIVl6o zX$^q&#btd&^iBv=J`Q$U-`%2&j!q=6(P!M#hrf;|f0siCNLQJ>zV*2TMs4P$)>!&2!AaYlg`-S{olBmJiqI zGKnooMI@rxa=|ORyg?+^9jI00g-h<-%}1KX0(~*L(hLZ1LgLeit+ z2#J04X!%{jEQhGGA}*ESUuh3(;Hdm^OvZoX$x)-%MBk1Rz165g;y#n8(X)~)H+oI< z%EWReztOXj+t?ZCxiD%NC82~REKp20toe$kHp}j#r`J5 z`l=|Rod|izn~tL>V28N@0&^@$>ny->1Q6Pn;<^EZL~;ROf-!ZR2)j#ODF#xjK%qAz z-rO(KW$F;|Aue@nHrlu2I?($^n3KOaOmvW##zowS-)ClyQk!X)m)CF4xeq$e*Dm6a z+?EVhhvC?|Z?hJ{nEinrN5OG+psS8sy%SK~m%+AV#6Z7+MYwqix(kuh}X(_i#s(IVGgtQ|FK+KU%4 zHnKug9aLBugAcKqntw{-Lyfi&2c)J(-sl+y-!ju>Fgw#X>)43Yx0Q5XlQez7p;PCe zl+`+f>L%d_RUA+*CzP}MJ^Xfr0fLh~{ouCbvk$JE0|W2vFHI2K=dzfdB7qk#9`xBq z)ngiauRBu`y7!y-q$#?Op)N{q=yDpaEA~{nn}>@4^Qt5*uw!{luLCga!*nrStN{o6 z-egquY;|`XC4uhci>UIoEfmN4~RXGrGZHEa68azda+Y7-|ZKu_&kL zOV*n&F3?xPCjYba7sp6a+@HJSsd9XOIm!CJ?w3RQAyji`IHW3u1(EW>egl{ksOuOh zni~;@+CzeZjM7FL&YDdXjl3Ym(rBZwfgYSH#?Ue;N-&LL2;mc{mO!s@)Rf{sK=tcS zr|Bv5WrDi*23yzH+)VjTh7TWp1H(YV;94Js9sKxgSC|0n(8t+mO)1nb23CO1X$-w3 zw~+~HJq$`{84YeOsrVBOO=kC&FPz;?2Of;%hqiSz1(*NKRO`pGvDFFO8 zzex_G4@Eu-JalLVY!$=L+>Aj|x9fwm_*F#~QvB^eP0&Lt`!}5bX&JD{YOY`b zPHfK)ks1t)?TbOm^{5y-0Z=%vNdT zL5_m2GVVvlxM`Pjt~vQBc{@%p>x=StctS3khQ!A33+yB-jeZkd;z^pN0nh{nkV_iP z5{`G`n69Eh;yj@}P0clLtC1-4r4&PF38CqcowPcmCo@8F^&z|Z<j_K2A<-{7y9bvuJ!&jE#hxGFRhz_J^nY3wuuJ=|NqP zrJi|Dwv4EB^oI*N%}`C_zG67K_tbUMgo_R!R5yL9(QBd`imr$;Nqv}} z0?K#rl(0iC$nI{X;`B9*{p`hXAXp}NSk>56I!Y)J!db(!1>@m>^}+bMJs|x7^RIU7 zQC^)ZQ`N$8WSI&T2Hb}Bzk?aewh`m_onR86j=?(0Oa)8(#;j+=*tAr7W1}-}*XDrb z^rl&joAXm)F33=q$?ptD_f`xOH;uZ~drJ-4y6rI`uSawG&~AQmwF_Ga zti36y9b>k=c?(BLSaJ^5pw*yIgom{vF>+Xh?6v4Q-=7RT$79cxQMDPDTa)IH9>Itc z9mgc9xLHT@!LHC1n#W93f*qG0W|r!6e~IyW2i0eOdO=NYEfiVC4Jw3|W@**uxSrsY zdaBR-EDU)&V`gc-?*VJA`OL%vVz=j++0^F-c`IaP%baXav9F5&L&HUR6Dhn`{34U| z$*)G&u9?z4ljv5Leaux(XKj;I*__Xa>3b;_8>-dC^+>wO=sK5ps%q#33D;;K+#-_o zx8XHWjkdB#SF&FhHDiSz85)cNQ6{~<2>98HBaj%*TQpW^`Gs&#KGb{pOPi2R~E_Pkger?oVvyYZiLMXcE&E)YGcGErsJjd5q(xTW!QxI z;M;bn_A!Wds8P?yewb#JDRfVh*=&3W$Nb=o8cc_&VsPe<#RWdCmvEvC!9G7)Cf!=R zrv0U$=q33J*$DgI=lvF3cBteBVQ*(+QjGL$?)jgJ#3C_PFiBt4VGNGau#eC3JE$^) zaQYW2%{~X=0O5x;NO%+}tU^d##Rm0n^1Jm~_?oUt7-AVAxh#pNRS*3e!=$)6Tu{3K z%t!S)UXj?Af1%_{&8gtJNURZa+6`?W8BCTbQr7?9#p5ehuFQeUWAP4sNMn?m7E03^ zdT_9jDbu53;p=<#8s1&9mVMLU;@@{8vSshQHwjDn_(Tb!C{k-B zNi@@kW^k_9RBFXxQ6vU;W`&&<2};>GW*@xj&yU(^M{jGLdAMd5nbmZ<&_8sjy# z@xOsjfqb?W4`Ca0>Zz(m)!MJ{7R5h+ss>g!fG|a1$1)e(1euAbqJzCsR1A2H!Pvgu z-j-028~CnnIBW#_LkxvA?v=GH1C?5WeU@IdV2D2_E`dl zCP8?s>9dBOXF$!YS+jQD_9v`pS)heMi8>)P*NO{ayMzs{(-{qLY1iwUv}8}Ii4>a9 z+lqYDoX_46+v$4NZZa*DHL|@VeB)P^5_0XDMuPp}ge{V~+VtbW^*1j`z;O>$cKiXb z#f&p+!r@=}vSg*a>%?Gdl7#>pLW%tQF^O=KS=zq>ci}jQ%$a)n67ty6!smxW@2>8E zq}*rwC{%wD%|p^O?qtDIim{EO66s`2LT@G}ux$zj>m`zevS>Lu%L#KAk$S+9NViEH zB^bm1Z!wubz0JuE16Ls-@1O=(KT3Ofm~5o0nU=)E7Q-+m`$6jl5A;nk*vdB^3L?zy zsd6B2HKpw4XSRfivNYZY*r|@3>{*51M^2HciTEK~=PDT~Bag`98QUPmGWQCkO)7Vg z`m-eYjqKbx2*0$9DO;yX52$V85tb$nGmjCnZp89!H97v4M;8ZkC`pk2x08-b$6=M+ zUb&5zu$SQ@t977|B<Wx%0(WiNo(3GBO_>!cl9U)rEyCv)}n ze}MhxRWuZ|Rp{g7WUuD2>K?I$RIp~h5^Nwi{$r0nEf>Bav?ax7Y|bq7<{ryzY>&|W zN(KL`b(!_k7fN^h^YCPMHoib_h4WJ~vpfyhcC1t4VO9&Uu-Y&Qy)fl4r>-h8ur2)l%;xfLw&%G@@{LY-;T@xl)*q;t(m)K_myh~%?%mn8MGV(^+3 z%$ei1Bo*Xgz$+!5EI{+v;j$qNzzl;C0|4Yd#a7~E`{2VI9`&g|h83aMARb%hVX37M zTj9f-coK^L`+#y|?ql0M&GutVV7b5LHZ_!1P^=4(B;U*MFX?9%aTt!{#uh{6X1Dy%m+QDg!-peCD*&iqlF1N=PXMHB7WeD-ErLG)yZE*ePWzs6K)E5bZDSk5O{n&~NB<3N>`OZaU5Cp;|MQAyh2fOuHh(^A?( zs02A!eb9PIBeG(3;B$Q~SI18zPb#9jnlKy*t=w+*oY}J@n6%KPotSQ=ktZO6CePWU ztA*3okGfk+mqyZO`dAg*m`?rCOWfRGwDE+}leIqD0`Q&v`ZGlouwmtO`&yBywQFlb zsUwoqUJa0acKqkqb~Y^44`Fg94;8fBx|iitxsU5vC&ps5(F$N1;bR3F(*r0vYH~)R z{4s%>2Bs7z)XW6|ira5TFJYfLJjpUKr<+iCBn zriL1m66JiTndO4cQ>j^GK{O#RXEfoos%PZ`m}H}mDy}`Bkd&3tgfr>@iBgN|B0m8} z1IP$F#;%9bVnnFFpj@a(MZC)($&hOj`ZFBe+bM?A#nj>Vn(BJBYcW9v#^Q9$u`bEd zdu%WdE702wdg%geEY&kqswOe2$MlpmJR`mN8R&I^___#kSnNthIV6~L)}l8PG>4*j z!?B1;So#?p1R>z4@zJNu8#nb7RsTCjGN#ND5$Pp=u|YTTnJ@taiK zz|_d{b3>A0ThOy9P8!Qdbi7V?WbzvdMaX<`yaPh>lfAGGo)<_A8*E z6&6BjH|dfv1s+W9{3W|rkd!Otf!vfdnm5HovNc|h3G)5ggdCi}&z&)v_ml1cBQYE> zn3wpeNwSGLHOOi&atoDwC)TUmEnIqSG2E1kkmS1as~C1@2$2LmR|aVdI9T`G8?d|>R{c#Q^`G&@bF$3rruFU>#Df=94bkDRGN8y`HnM8%~QPX zo;`btACs(i(dW4>Pldq07`8W6Up>nM#wF|;$m5cjRG4SmSVp$C89fwfS$tW zV|H0oI|PTXHG=ss!r>y4zx*Rr!*TtL7;4(|!1U3|Z-hpFZGt{|ge3r1dV6~CQRT94 zPaf!L108x_IXqY=W5Bd|vj}A>8q96viXhxq?ny;>dh{}L5BNs~tPVhLZ(dqtQOE~3 zNEw9udsqWhIG!0OdfGr!py+Lb+t3A30tTQbSJRUQCeLy@!C8y=GQA4I-YQc`h3}HKiLo`g1?*3%%Z^_oi z(W6JhEHX$HwS=oM-2I@@wOE_&!lit%WKEDAESUk8Cj$&hmJPGkTfDg@8cc2GPfIch zrN2>hFr2R>J+)h}bOG5ED;JL1Uh7!7XEfW=wa&aBsT?hr>1=80${#%C=9!pSnV-vo zu#b`6%D{0Y9w!jNIrMJ62}3*+?{buo+l!aA5DI<6!Ft48r!VFkE9U%b;w{-i$-(}> zyXCLaEykkvvu%YEO)D~wiLXcU0=tp3m1Pg=eV@E2f8iSAH{O4Nj}OgAI~*HZ(|7HaVE}uFx$5uxx?gpCMQ?wgSfAiBKld<52>; z$)TjYoHYCldrV7DPbE1KV z%b)nNi&^~r^Of9h6IpkrhD*O?=jG^&{l0k74;*CbcIfxunH&VU1`>RmH{nf%r|@+s zl;g>5`rx`=k{DY9Z|<5k6}Wn9pjUvUcieETxq8UF2Cke1M%JhDo1;|23`!eL1%A~6+)=v>M;EHH_^MGh4JAM9-f{s ziu1H)(1VVsWarI*%3uqWJgBM}^oEh9oh2IMQiY5#(fE(*iN=2bL8?5c2+zS7m&cZQ z83YNL5vf7x2!j+3ndL-!3W9{lpy)iTC={~l%(~QUAv?9ibzKi{1u-iqxLwCXm)0qo zEl=J1ky6XAj}qiOtG7fFUHM>F=pUS6`p~N6a&qIac^jsRpo-zgO0M=z?W-{iL=Cb8 zp+AVpbg05Ll1icMkCVEne&e%7Y=IG%1gHPhkPYpVjN%$iF}%oZowtLIa3s|JOPZvS z7;&8>9^y7DgSVuUxBS}^>O3Lw-?f&S83VG@yW+@&YN!VJj)SGAkA=p$Msj%`Mw6Gh z#ybv#wgvR9gF2n|6UcaY?Cr1t2iEK@R`Ztm|G3VLbEf#{QfcK zU`~L+=ND)2Fr?pRhVjWOmq4SYy$;&E2Xaco^#YxPjZ3)5!A_H?(5uVJS8=vtyYcZV zSu$Jsz^Rpbp5M<$C|^XR@YU={e&q%S%o?F&@_2CF3KYo2$~2H$4f$Uf`~DUgX?NT1 zMvE`gM8A>xY^bW=IarJpC1Gx=9P`ZoCppNlG;eD{>S-P`Q6WnDmG^n}Y>cY=5@s!} zUG?xjmvJOmw!WDI1K*=WxKX~Xg)KAY5t7o|k&k`M+>s+5kKLq_N+?xva?txY132?&*P1yr;HlPR9gORwn{j(HH*pqJX^!0 zXg-ACUI@v&PfraZ&j>Isd5z@GTbHHjmvF#XHh-Y(9wlSeJkWrfcu6a0{?4nhuurfO zd9ysbzapnx>`=8AV(b_#Z;lBN&hcIalS_Z`W6KTG69MwtUk>h{^i))Bp*fb{hZDeu z$7;F5Mp8O-=y1G$IZNi?5(B%tU6ch6s}RPOSggPpIOkDu^H~h;4=q)ylzg7RGb=_p zu$vy^Sz;{4nowDo>WMmp|1YrXf|)Kkf0i;+^4l>LG9kba9AqZK+Ge1aQG7$`!9b$; z+8)DO-+N;#|2_K0+)VlUJl_$$JO?j;RZ2JI3I}VGu3+&T>?h)TV$dVP9cceVxBXus zBiYw;D6B|K;na44goOLiD2G}VtIMkx33+aX5L!wPC?JI2X~^2|@{}k627$pK zov#Pj6hPX3@zo~xZAJcm+-t}De6^}N8vGSheZ03WLiw)uk5zwz|4Yym4#UBa81K&{?F=ea52 z)q}b2-G|Udaj_2atw1YznZRQLLLRlxl z_s79pNqT_1_LYm#59Q$ko?e#z*CWC|&smFy!AqShAB>>*m|VoQY@GOH1fiKEth1Ay zW*@Z)xtNJ%+Wq-fMOG6)A2Qoz^5jz|=6G|=YaKk{0H5W{PUEyErI->p2FEB}1C{L0 zaL^B>&EO{duDiTMqAl#6|J{t`s;yQ!jh^9PGp74mU@_+UK#cXiB*dy+cq+s?o<3v6 z3QV3ndCKI;5pd_%D?MeD>iRp(1uIkR7!NdJUGBq0V3*doxyd(e`5UJxOT)>6Q61@s zVFYbbql60dn6^2Q4RQ?Q1l}9ZG-(5|SPLS6|&eNV_Th#Wt z^&wHqHEa)HOX?kj|F32ObN7L$S=tD=*0y(W8dbu(ZNnAuzJANDYKpK|bkZb4_tB+3 z-xO_7_(U2@Am8}wF+Gh8jV?RoR?tMtBxi?KsCVRyaGpFjVbJ1-j@ z?%f6V65n8!59$%*9DEaBx0I)f=Np&uKnS9mwz;aH<=KcdweVENoZy@)$vkroP4COF zRB!3ic&$qRKYaewQW$x*M}p^J7rtJ5sCl{H@)1YTD+ zc+8}mt&o{v@J-ix!IkFClUpVo?0wZi@zi*E;mI7GPpRoA?SAsJOGA~mvre5-h@XFe z=W09C{y6EAjZ!WF^gm;-TofxCDP7-!iL+L3DxkZD_8F2Qq-VB=4RyXuU5>6RKi$q* z`}<$NjDWTn4y8GD&uX=*_%!Ol#*O!*cgTs7!_faZ4|$FgwhZBYfV$8p>c3V3O@5mi zwPHoLN|h|;c`)hFWxv$4_=vtRjLYfj`u%rHLf<7ye(nsUdP~C|oY|_!{48@jM#8_C zd5Z5BIFuOU#}>;JMd27T>B=u$2n`EMmY8?b5d6U8&|(I!nLI1aFf*vH$ci!h;4zYS zPVh$Q0Ihol8xPu`I^YIi$(25*bFg7}k2A$!6*_$wU7eHiHlTb(!=xQXKBY&<$B&n> z9Y~CC&tjEgf?Tt%kArd<$wCN?!_jaq0+#;ZOty9a6|nn`loQ0NHVS@ldVsbTaR>Fj$+Vs}y9nfC^4>J(Xf9Iq#l-Mk7}4t{zn+0C_| zQMCS3azhj+YW^sLL38W0L}txKRegxEpFA>V4WWlxW7|H7B$zSso1;S(N5>jJT!<&+ zo*9Fq#>4N~e~Gv@W~?3kX=N8P&G-YzQqKK1UJ5z3e|i&UJZTQ%laDQdEE5hATR)a7 z`x~z#iN2|wdDs^>-<@{PaZeV*R4^xjm-J+2HjrJHzThWe$UI}LO4h1>I2?+@Nfs}?ha1KrB6KOe%EpYzl!>b z6lHE0Go%Q);mJm?i5`=|Qt>BvsY#Z4rd?5XLucYl32%*aK zjC?q7t_TN1&dp$seY)6A!PEJ~%cunMtYueZXwqfis>S5URbS`RI2zFyE+)NCPd7@8 zd$3_$RgDj;n|7y=m))Ee+8cUXs*dG@6Fp-4LF?h_{u8)Sv-LhWg^oASMGaJ5fVMH+ zKoy45uV)D$1j|%2t8(nqi}+8QHq1I$rgC}C(!OHCAFPhzuldc0o#YlD1FokSs}dr{ z>ZXck)s7MIy%rNwcM6k&it#c{@MI(oTjY#nKQ$(qc8D8OH$N8 zz7(EJg+Nc-aD0jTt3g~RAVL{Kk{NIntd0rKbtPtwAjtxoof0+TMOZ^KeXBQW{ zq0*YTTaxrwL(XeSC1uk@P{Xo3<&{$69lDME5bZND&Y{zA)KNZ%;80_(WwmOf?T?_D zz9#5px>g_MC&lwCbco8`Px^|9QS*KiFT`>tORufH399MT3c8DLX3Yx4i~0haFw z7VVfpa6jB10yPwZrLF?3&O6Kb1e)Y1_5=bAfm0OlMfH;~aAk6+gio?OyFUx8U=?Ax zpjjL!(CYzMH39aC{Xba(RlffoPSc~#Mn)NH<;;1P_`$EBxkt0~hP`I9G4cA|2*3>d~6 z=g*&iNJ&kIp}G1lLQUa=GiT1g(Z<76EqJ!tu7E$#`W8NzE5?3G7H8Rkjf@_fiiOkW zpTn9{;ZPN>6w`-4G$exq?5M$OBL4&CEs7BI^s+XE2>nc0IIH~*42A+Sz-k4YXv)fK z{x9^OUE{rPM5zh8IK3m9i_)tl63~U0pK3SKNb2&>I8d3BDa7`STVkc*oX72bjc=Kz zU+Mx$?8NWycDxhxYjaJ|L=2AGTG_-fcmj?plgS2_N|s7!p^}zoj!U9h5)fT3C?^`q zL}rHE7;=X#MxUAX6o>hl-#2DigKzZ?gU3K-an9B?$lJg$kR4&;%01q1MrAGshzrFK z#`{h-U9z8?p#xc~>+A#7EN4s!2fR#*lNZBr#+20}VV&8YHlf-jxrT7Z;DjAD5%R&S z3`{$@<Ht*zsXx{i8jaVeh_$1Xg$x=_2n<-O1Z}iRTw3!wN)svet z8}|Rgij}`j!Gz`9U%h7EZF?7gYgKyxIGO9!lh@r?Ql2?WX1H4CcwPIvKSt#*Z?Cm0u?gw^!BW_rEs9StLSXj6ptqvAe8M-Tu1e<#pmVziRwpfBn^v9W%HXbN0lSTR7!m& zu2rdr7mX>Q-0Rm>Y@NjzwG^w^mpF-bqjcBjtu|=R>y3{W(Gk==5>M5^gPo)Y3d36;XV3 zOhj*fj*C7fzR$w>=7+CIQu)?jn_nt5lvQNBO0v%){_kKOi0@|F9`XU;&LyIOC_<5z zGs?7J+N4`vU=2H~yxbLQm)2MsA!D7lCy?l2#Wkj#04&QN*n33tGtv_FT>>l*k-wfl z$pS_ZuuPrhEvUKu@b_kLz5bycXJ@x7B_@}#OCPr!6S9NcRj`7gPl}quM4ghQRbZ{l zT+Kh-P=nZo>fa>30|p)@$$c0t>di8ap3#1=8VCBs`kyQT$6kNaf~LI~#%1p13oY?q z>3FQAYm<2dPK#Vt0(IMfpSUq<<#3v(%mP~%Yu#RnZ_3aV80xavOnkXRxpFPGhTnRC zcQaqSE9_PP7q`D*cZ>@&5!M)R=gyt|Fp%b8n&`g?JCD7X{AtOAWsq#S{Fks&uf=*D zt!1r+nGu$GwQ`-SCj7w=**xcO-V=V)voJIS-C)Yg;9L$U#(6CDLwx@ zPMp9}#BWdWGgD^@umxp7xE{T=F41gAaegEnk*!Eu0dqBm2=uvh8@=7J8^*V-?PoAz|PwTcNDv9z^E;Dq1|5`PGG!Zz`DTiW{>Yndd!4T zk7BQ{?rd}Q+SPY-sg4nAtK5houi&BoelUbd(<0Br!Ck0#fil^k+}A=1z`@NHG%fXv zdMN*&yZ`k4^UvKCooF6Rda|4{y5M6rkj`xu4CkY`zgCEsGEgz6qRPF!>jI|3~6 zYhBbtHO13+niwCJr|DiCHiDNW_i_Hw^yT=~3c5Z9e)Q8=X^92<@gCK=zvP8_MD6x*Ms&OPKg zYn{*ZNE$6Ce1_>Wl3AG~x1 zl8%CCA4ytgF*Pe#(`ae8Auu~x7QW1{kPS!6qZu>q_Ck_=S&z?^FtZh31-PqJ!fkmF zoKh18N9nL7!WVtdxf}lAX27w)3RFAhcOKT_(!>MkGU3$)1&<|cb@?JCVTx6+

@j z+5ud}3OQaP1fl#fp;idB!GDxT*=HoaH74-iA#|~U$DhS#TZznm;rJ#oE7{uARrltA&BKJXjzEJDTShCyY1vngl8%r~&8M@r=0<2pdz zk5^+s;y{bufF$gnAU!}e6D&(1%458{ZDKrBt8hGf2Xm6QNm9|t@&=pSFQxeEMzB(x zGW^5Ino!zNQ1bf(}$HQ9iKpkr{($)E@+knmjl*fk%PObutYL%-;6`U)Io&@+=O zIM>6g68{TW2OBn}Q;iCq^@H#^M}uD@Jv;rLBn5WX{05>5ZN#rLWv${vkFTHXta|>{ z&u(Mkj#yp_bF6p-lkf6sPZnk%NIF&X( zbM#HY31*hvSAQ~Sg;_@j06T7ma>Nhpf}fjq^i83Vg5~~Z+iWNy&AC68u`u{NyL)5v zK%g;&?xtWI8w3CLnqI?37{5DT>}ou1dBS#>%>s?_@iq`ahoL_X9m-9s7W*gSf20JQ z3(uhEj@d4lEl&`(+vGF$gIq{-Wpi8}f$-}FOljG&<&;1?*o6I@N}{$lSLUqBJU?l~ zJW{c@-rdQa$B4})334x~@cckxGXk)0|25v+U}5`h+n&&O%8a?d1g+eENjV9#>1GTy zy97(ww{G295uL)17z|}AR4Bj9J0)JX=Xim5vU;i?PT?t}(#+HO3_fjasElx7Y?$UW z0zhYkbtBNd6F4xFRTV(!pJLs#mQ@t;zkuJ~+h!TV*^|{YPFi`(e~xVEWKx>vm=sD4 zk^%EAotsRsy!a=IamJJ|-h7JCFBLj@OQGyUkb*%xpv!hOew1Q=kW*0dp1x38Ns{Y5 zdAvzIFlJVG>VFth{;bl+nVUPoa;xS07&F#BX2Q(lelupQ$`Lw__3`j=X2Y6UZ>X9q z`Dwt~gfV#-AW8N-z_^*gT<>GN63UUDHftF-7l5B2?3sT6?_}FdvxDjH17q}Bri3V- zlAdsq?oU5)kPnB|bhS7yr-utMr>A1f1OGFu8Tn^=TQi7n&p*Qo+Qez8k8x{Jxp?9Y zA_#dJ4h>_4GQ@0POb|HO*ovBU_jB_!5Sc-JhLmo(ijZoz6K#=9t3kpNb& zp1L5<MBbvoIos}+zNT-Th0LrNPmlQsN`Ej^{ z9~m>xf|o%%>T#B2KsgMe+Z)Il`}<@rm=Y6Ow%i8Gw#{7Km*oe80H?$Vgrfz$cy{p(}$OeJMD`} zipUP+nJC=tyjTn^C2`;LeS3OqZ%!Yh7A^{VUl6I16~} z33YiWKINsaBpKHm8?)9n-n?GHfVtT4J#HHSGGnm#w7gX~ysRM@BMCPW^fUU6^fl{& z#3~GVTcy(Mv%WZQa1xDhP?g6IFK`(88cw4r$%cpuMo2r4%Jzbp77Xo?$Em(YcvHqd z0~Yc{?&3VmEfABn?b{R6mOC~0ee&2BOXejY3Yz~S9T(qQ#QiB;7ChbYITulb{`CBB zlt8hD{pV}|_w$C(5hgWcD}62ZsN708FSxL%Yixe808& z^W>c0&DfT=7uy=qAwn98jyHfgSb~GMb>IzhI{Pb0jQZ7>Ks%iyfByX4_Pi$PcLY-* zs8GkZ_(c_ts?5rIg7`HygSoT}}o~p2iq0~2M61N7h16T!NFs_ zx^}f)D{g^`2L}Ta1gsG9qRisKw)z$=go0`Mu5lq`gA^hfsPZu{NQejv&H#gS)E8yqTCkTe z4_$+8*F@Rlr||vbmV96nt$;!8Fg_v5(SN`^#d;B<{uwManjum{p<=9mvJlIANqn3~ zNjR26l=Z5x=t-26Q{qlG%+rY$!yyEA)3zCe`9F?L!gw{WlSR`|Bm}1n5hdn}cl_mS zBKZ%C57&Bod-AiS-1yA{;pT2|p5ES8MOlgJcvvuRs$^wTIT`Y#l+{r!PDHXG)$_2b z$Q&glo?KYTn&38e734`a-$$?Rbmj!PMfU{^(hJ2U1Cl~tQnf1NE(UReG04Q5=#VzHaBD_w;Sg(a$<-QcR zFCrtn=n(Cq*lfX^{uhEC3LyM`8||U+wIJ2kC@4a^$~m|3`e&e89Qp>JYRS5t(G@@@ zLB+M61b~d9m)?tlG--k~Fk{CBQe?`1SKUhs&ZO7X=B4~FU1=`O9Wk1KYhGSTk+OYL zg$p{+-DQ8;;>z!H&1S6bH2lJsY#5L2*RL=q#~$f89UQ(p%3Yo#Gm5xRn>Ot% zV1V!MU7Ze&q^L{@-Wo5 z&wfbDyY^fVn1die{~vqb0hmSc?K?mcAffjbL6FcDK`DX|0YNN)G^GfLqBKDeMEXZl z1cLM?(osSOMT$VEfe?Cc0TKcvA*A>0%=gZ0pV^t*|MlJbo&uv}&pE$y&XnD6clz{@ zfzjF7u`;mkZAh)mu)YNAuwuo^jbf}4l#5z80-yPQ(aQ6Y07K1V>3z5bvpoc17sVC` z01%Zqj34!K+;*|?m?YgUUYP zu(t@gQCCa(5pplTMrnT=N0X$^8aXuMZgo54wVRNk21LHHL!PS%fjrYNG@Z0!#)S(K z5~+5{l$)GETQd~-|`P2)$qMR-`Oy& zSOCIW1T6@_yhi~#xE}tDwMC?p2k?RS3cM@EeEr&V35*wErQ5gP47=q)$SB46{9I3E z+OBQ&I0#)(O>pc7JOI3o;gf>zW0S!lA?h^j{sKb~6=?@qoG8W+f;sXrHmvBXK~|?` zby#Jj{h(BhGZ+^)R6U!)&M~%*ZTKiuEm4A+dX|_38L|6>+20UW!QQNal!(&iLTa8G z!#SBoP}0}bG5o97H^z?D$`KZUGr%*%wEB757U4*Ho+TF*LbChi78J%T`tmt&OSG`S z`wGdJ^~UGPg6TG>9wC9?t;+AeIem^M1ki>0(6nPXzSIs)hGOsZ`+u+eql<-A{1YE&opI&y!7u)G1xyYY6y zCYfc2b7@2^AX`*AS^A|vNiw_00T7>YaJJ*YM}(xk>oA!}^G?Y1Ke^dpRI&P)g^$RV zo`Nrn!_9NS|40c8m@uJl&j}NLnb6zmE|kuGf+<;;MkMr z1>o?+fgtTJI;_2B9GyQ=Xgc}XVV7&o9r_}J-H;DCu=Zpm$X;426+#4Gr@7)hGez!c}|n9Q}2^0cJ-Z*BJ>zun;zG1QW0|9O+l^ zr#3ff=V>s9nJje3>Pn`_B)~b-hiL*pK#KStM+!F%(7K_AJ3uQBkYF}S@D(tec6|;H zpe11M%7pIEU^SC8A+$?V?J&>RPHISnc1qQg}|E*Eb~rC{MN@=JvjR52G2_Mn3PK@@Y@ zq+!WQ_sKTc(uhdlJi1}E$#G%kl zEUNEUtqCrg6B6T$?yr>iVb#$*;pCAWP$bFgVM6%4w<~dJKm}UP+5R{i6do@US57x# ze495icvx+*)}Z<8T#VQ7GJ^+fn?du}K{=c~Q)JDqcX<7O8DH?n>+ar?G{gKCoW9}} z5t{oLV6e5r8v+p4#j9bu6Z6;)$h~Rc_Du))6+m~Z=NXrccQ~+p7(bxBBxi95-|sOG zdJtcx2C!0qTgZ|JHo)Gh_Se93*oW#^p*F(-wI|`j;_ynQ=LJZ!;c>yKPb*EZ#G}ZVIf}@NqXH(B}ZhDbDYFt zvq*;XwWPzH32fK)JpAV+-~(I3U78`*AAwKxysPkoW2$beYu8$$bIJ&TVXIJBV%#`I zp&tS+l)84Y3!F*C?=Yci4WX}T&mipLY=A9%>o54Vey50%qHY45cb^bj^%w>hR>3-A zXBJ+kI}Z;`uD3^kjc{KoxC##}cSo>qOiip@db||9q8zq$5ZHA52^QOooz^C4aBL=?oZwKRJ?(U#bPhv zaTdc;9dY{Wti<91l}i@GQGtqV01y=pR|az0CR<8TikS>YRKu~H#A53z^DTy>-cwSV zaUzrLXKwdwicF&5jq}p9m`cwHrUV+SBkl!^#9+La$CK2=gfRwhyOw~ZZe;e`*2y3? zj2^Z4QSL9uN}Eh4JHbHtn7n9an)A0(EQXK>Xi^NyYV5G96MATn7rb`2;F%6=bbQng zAZ!sQNXuxl?o(>;Sb#N4c=P~jLOn4#>a0%eASAAAVfag&(>yBtcv-J6IWd^y@y(fw zyOK$wWB?itXd`>LN|u$SnWFe~7%;xoVHyIax1dasNdWep$#6tYSbsu@ zZkB#_-bNP>7uK^>jgb(aO_d=N73CBou$Y3do^qDOG8C*HSKeYI7PAN|_aq-OSUoOU zS*_Z3fiAn{mKTPi<;oP8h1N+>@Oi6^V*x-7g8R^ikys4$2E_YWtewjHmm*!Q?h9o} z?~^DLxpuX?NdC0QN}Qf7%Sz=qlKjpq&R029^50EV-;ob~tlTTaMy*sSvHjpRXP z7A&`nTy3I>-q7d28VaSBC(SbMcb=eN=8Zk@cq>B<`CQKsrANizAbU+co)}41@gjrI zfBp&I(`7(tELmdG98vCSDl|=mq1+v9o~r=#JU~{<>a+pms;n!haw5?S&gnBsx`PcG zm~ukUC8fH^PwvT{c+|wLPZxGZ_FVEGl|YTxUUTYsz54O+U#})*ANYX9@-_NlYcxz@ zJ~O9B5f(u&Tp>4p9^bi+prwk2E~p^s9IG-Uv>oTjV7uekQQii_T|2nXRpmq`n{PRe zKg4zVYG47VxOJRIpe^nUAyBm}x|RrAIgfA7oqH`~gD^3zf>M)CN}oaFJ>iV+x#aJZ zK#g~nELl>2YDb4{$=#vJSboo{1$l=9(iwGBdyY-j_!Jv7oNg7 zU^&>;$iZ&xJ!x7>-VNmwu=cfznrNzXX8jr*H5R~5sF1ncR?4umE4=?C?#rH$K^b}M;_dDyt^c=XN1!tbZg0so| zqSSuY5h4uLx=s6DM!1FNov9Iv?X)zFz{0cFC|LO>cO0E&q5eHCI|mLyr|CgS|B~l) z<+0vKePQzI!ZvpZ4OXK4si0izy^+xY@KLZrmuMvbxT2qgDycJHwB(f9sTRqI!-_JW z>$A(d3a50P@dtLtf5V!*KB5;@hNAb)=Ws!p2;Ql}g7rW%AGM#nrJm@}iw z=!HwI7MZ_3xrt3s5Y?v9_`4|SqNE-uVhDmPlA@H=A;|Ak zMP2xFn3@R+u=9UZiTOu$ZWvk?s+A$uuBHj+kD^+-As7CdF8dcYfe-_%+H>x|Q3Afb zRy-l@t5b{`iOqCCEP1lqwJSX3SDR2HKg&*^;!DZC$u&7}l#=w7CaUAu2>BElqHA~L zTdFmagY@Qs$8pk`^|^@rrVCn_z*}V*szjjd$ z^CE-Kwbd+ELu6iCkO=3eUq{c9WJh<1VR%+Fk>3FSE!XW4@|1?Nou76^-x$n2fEN0_ z5-II{$zkhBzZm7D<%FeR>&aoP#Nq&JZgC9d@w;RnR?vbD!uyP}je(BX*K9091}I7e zMqp#y_=vD3LRF+4qXn3~QXs9Jp#rBSKvi=^0vpwUgdE#>unC z?4^sieE6ny)?c^jrm70-q4JOhCC996nctGeX`Tg;Y@u=eET| z_g;_KcLCn(_ zi0=0*gPO+Nvjz+}^C0O+6@q=02Nv{&*`Fjbpay3)11mqO=ljxDXE_FJnMP$P8zwgz z1^H(`Jn-_IICG}j&z|>7Wi4aZ6}!!kVpr~9y)L$L?BekG*!-l7Ro-WOdPkZc+J0%L z7zm-^?xkAIrRR0W{?UFgy7zYD#=Qe^!iSt0LT}>H8lzIUqR2bt$yA*L9bE$pj`( zy{LGpe&eXcA%eBiy#SDhFTV+4 z@J)&fd)w6m&oCDMWX8kZ4;g*cnmrRILZvIlV4ULUe^Iqy|45Aca|S9~>n_aQjw&T` z=mB#TaoPou75auc>?efAr$I9Mn-1SFe*q}Z09eA1VWlwdrO!+cuTY15P4>O5kqu0S zVjJiHo>#MG>#tu=xZl`>kZN~l&6+hZG!G%eK3=Y3s+j({&vcaKuX9x2MdSX7K6SV| zkI?&{!4aBgKdWy=^qit4P!h%;4wEZ~m+)_07+AWC;q^lQOLo*6U}g^vg#cp-_zSKi zz3cT*E4x>~lE*aFcMgMHv@=G8n(e0XMfc!bs_YVVU{yEJc>;h!sb1>KYZJ36`X#29)My))D2V!WhC;*sCnX+4ilW z-8+2Q2_X~%Hf}5)>F9ariqfN=$jTZ2Gbbr@IP+aerVHN|Xn_eP#d0L%f*XL$` zDZpM$>yFSSLSAxW`Jw~iBh{RQcsekTKNWh1CJFWhK>bKhfbyOr>{m?nvHu}`kr#uF zV^r4ur*gPjb8AD$%XYC!4+~Z=*i_YF{%F|yWECUTm|^!Sp;7@! zq>lje`!izWfeq_3p*i3T9Vk-?T=XK0{r_7Lyyd!EdYG}!0&Jr{1 z{vTe89E%WF^C1ne{o60Hr0gf|?<83HC*+Z^@dx@nh`jR;p6A69mnfBxc5>`Vc{!FP zZs34HPCnsiu2FeE|BHUE937G?;E*3!(xZl~1zJPii2qkAjsEr5alal1f^BWPK(a^e zy!C1mO0wY>Y=x?Th3S2~LkY20U{K{uLi!h{y7{K2lZ3986;ORL$*J)xl)F#x))+GH~Aoq$Uc(qO$O|=%&O^5ifQ zBf@muoUpy55%1C9$EHiWy8Kebhj3BT`4~4bTo~7Gt5>f%I;-0?x0e#?|^~*d5>AfL1 z!C?j7Tc!dQe}#`ri?{ZYBQEK*JbTifNxJzV{;gvcgZECn#AG!V^L84BJJ?woHV`ly$C7}F`bJeHz@%wG zf%3FK9un2h6&sbtLAf}7&xRiKFiG!U!2`IPq4)gypOip>e)rvi4Zy%O*O%&^shNTr zPU#J>1HsAV--}j>&BXY87ckE}<#=-iX5d4`Xrh)lPdzz@gSAe>$#fkj6RJGK@2G+% zX%6hIObjCoUS-C?8=bd9`|-K~tKe{T2o9|L1iIG+blE6Q45235A$;&+Cf>-T#Li^m zzw9hSXNr7k8Uy*w3+#qD*pDRYw{iEqh z;q7JV^SndG$*`6RX)D7}YPz5rrE8~V3L4A?mXl8+Z6iS|LY|hRWT7;jYl&7x6Db6_ ze-?>VSzr!6b4ZJKn!H>l;wWi!Pw)aiS!3=AUesG+*fbl9+7+sHcZ@4Z%usK3 z5YIIWZD{rWtbJ&bJ)IA8(QQSa#&i~%{xrV zoG1Bl!i4Hb!IlAr>zBzN2I;sKOuXs%8JS93$m=G}5uV2cSj8%;R$;eb|Kuv6^!t_T z6Y@RhiLy5iz<|e05+f>_TB&gnvF@1q0yBi#?Id?+X|W3Nr(5_5bOqk*BPz5>>(Z4! zH#}1IIKc*3`J<5sDzY&($Z_YV;z#eQ_2AjcRIca(((sW?b!w2$%}X2>h!+_BT!Z-S zECZGM_w+;z#LZd5Kqae%E*Yq|txW~nmN5hQ$s;*p)?n};wD$6F{0Hovg}3nsWqc4x;liAVCO@oDR@;qN+z4SJW-fL3hH2*R!u@)LaIe_qLa6p7b3bQ8({tsC5w#5F`Sm|2fig2@L}PbUL%|c%`!dWM zg*ijY51;XOeleX>dKBg%LAd@I6V2x-3O@Wne)RIFySa8?)$dxh1o5W28JjjJ4oH-Dk1Yi)UW zL>v?jtkE681HkX4$@mas0ha%`@}uW>k;)^%&${3#B`gS%(m>!6?VFrQl_UebkIMw#a9}oA{PbV@Qi&jttG;nRG>o7d-REO&lo5Lf)ZCaD!v} z2_O(vxu86j)(XTX|0?NxSoZm(gDAn6k~vVew2_i zBA=++0od*SzW5_f=QQ7WS!jlC1IBzAY-*#RC+LA-Xi!yYa|DZbfT5`8GLj-4b}IXw zG=B)y&meExlE9LGWHe$07MJ&WW@C$Esna;6HYbV+Q12^F8Ro}`HD+EcKDug&BQAmFGbeH(e_5XCN_Uq8g!S$2pdcX_q;{fHTYnyh zCGakg`3JdO?0S0;LTvtU0aVvg8SRhDZ8GvCfmd;Yz!uWvGF`9)#49rc$corum4io_ zLjDI%hemZ;Y%HigGH7b zz-mT?W4MzbRe@mF8P0AK)hDQ($cDPn?F1eX%F&MCz`!oT1}wGP&pGq~K0GOYdRu@}s40@82$XAOA%y zTh6}r7$zUSX)kNkFaf6q1i)U$FuQUs--f8OQ@yb`eRoSUW|JuJ{jb+kAI_C^h?si+ zY9d(jv4u=kzI#-fwYEg~ZCCZ-y!JLS!?rnKuf)jh&~Y+D<`b~5Wmw58}NSF>P3?*+#v1b_Qc73EY z_c8qLU#4d6iOPz+-m`i!?<5_qM^dYz;tAw^Q`;mwR+F*7Y~a?TQ5>MF^ldj*fGs5V z{He|tPOMEr*0&TwO&ypQ48~>0+@DZcfO(!gc@oa$B4N!0KEaz$gF#^cJAA59A>`d~ zRW^bGK(wxhv#2hRLi8aZL*Bd1!5JasN@U@cx|@b6@i0S5i- zTtCBZS4DAl2PDBD#90xT>$4<9nU*d*K&P{!JQ|E{D9YUajvvb$MOg|HYv|y{BW_ZW z&o$fN=M(aNkiH5a^iq^%Pz<&JWu|?Gn?G@E z$kQ3)8=%_$D>r`9%w|K$TrMU3#?2dW4<9){;}y@+d!Rg8R-dz?Y{kKYH@XH(`n?7E z|5TChM*H#LOe*Pl;1P_(Vqi*iK(NKyDVTq3udv!7IC)$;UD!8=sn7v(k0@A{L^}0a z8XL^KmL`(Ul7=A0)g$Gh<1xUO$(YIj7SNR{2qwIP7<6cnI@1K0>J19jG0b32Ef*y? zLZ4c`(P;-ot)@aa!5)$kF&qw%w;ld& zj}w*4R&&2uW39I&-_JUDHO4Z$B+3`c!{&;8Y%lbP%p-06-s@KRV!SpN@^ttYS!1v1-G0q|jA8*cQ zaLhH|-9tX_XFER}RH;`s6!f|f;S;)Z2`J1Z4H#!S^TY+jyhoz@P$c0!glZLxRy~KXcqd5qyZ}bTj|7}s z_WuF5gU|eb6PuEQT{pM;Z{=@P4nA{Ar>rdhMe-7(gUKPu zN1!isMUx=CImhIw>|wf}3BmIismhc)4trhxx`g1BPHZH`VXvSHBCKyR-rES}8Bg#O zhg~GbEnp@YCb6X)*tAUCwRD~pSh(t}dq8^l3fRg~{Ic_hjg#^B4v(6E?t~;-GM>FpzuOMLJaTac2S2%Vf*2hE%u#A z!Z`he%fMy>l03Yu&NlDR!PYj0<1ADA7>e9A9VdRmiA=Wfch2gZ2|g#F1ms6&xPqjU zVCbxxAb(-`0VF}_^5Gz%4G3W}jtl}bHwuzi0wy(e0Vs7F1dvM>C4e%BPPUR_L2{Rn z3u$zJ7xT}-XHHm-@%c+{pETRg08nR(o48Yiqc$Ct_^I6k$ZgNZ+fRfhcl3EA=r@;aZ@fWy%6ED|*fJ`A-<6c52Kx(nn1p})u? zC#Fd}FUZe|u0oP3%k0{dNEw9AiMH|7wa>}-Z>yLf$0m?R`nb3=)|TWer|@Z#4Bhb; z`EyPWXEUNe%Wvp>Vh9O+@^d+!4if>E4Lqx&-?3Q9ESxeBc0Q^y`p%v%kf{jk# zP)ScoZ;bztG+?)-WliVfH=HKpKRgVYyVi#JB=FM|hi<>Y(QC2}ma+?BhCFe0ooTLW z{uPUlv%?^^I6lSVJ*%in?f55EZK@2}4u>(kjd}OF0PA0)ebdgXqEc~YOPi`jjtW!n z3r-MKl8XhwWEp&x4vacO;fe!(s`RDxNTO&+)k{@LHYuPFs*`lnS zo}c!u`_cJ(jujUx$@Pk=LB5W?Im7D7srsw9#P8!d%%2?4Bn87syaP+5t@_+OVZV$( z4lA&ad<&vgG^LJbyXoVs6+it%p%~5#*q1MWJp6lDZ0f`is@}9LYDtK6l~@otEBlF} zAo-`Ga+>^0y9muQ>{@%)ze8$(iQ-F~iq0e_ge8 z>(&!V?$dL%=bI@H+DcW!ZKEA%!JV%C+z7%!lKq+`WT+R@$ghmR#w;TbYuZ>lSt*&w z=AGo4MnYxJ=gTBZ_5~?;+V~mTPAZ z<~{;%q(p5QGiJ<3W5$gCBWp67)$*6k0f{O}vsldHDjvDyZ*dIOC@iceBhZ<=-rde+ z#I+MaO+(>?haJLtNTC?08MK$&r#GNW>&B?OBA2kC{rf9dCIwd#gCK1lAHg?sEZwpT zA8oZbo@$Z)DKE14IpJOwqf^E7>*OcS#171(f-lE5ahRbLwM@!gIpu^<%E=Kud-lGb z^sWFK21^(*zW$B?f}Z4RR09oa8&>% zE>p>68V3Praq1zs77L)ofCYRI*|Hf@Cu|>6HXuKTL_~+V@ z8}~6JX0Xozt4iec9XJQb7CB4) zZ(!x)?dXj2d1 z^^#hV11ID2JJb+{@j?zO^rqgaR4p9u=NjUsYMIOUxbU}Bpiut{;xPl)IeaRBqsWPoL#Nws)ubUl3?_(UO zHdh&`#uWGq_7tch0H_EKo5r#x0?NBrj@7vD#Qd5!ANp~9^wQ4`pVfX>kBE)`Jq$Vx zy0U4R@HjClDvExPlVO%57mCojK&9DnBbsu+Gr~Grw?@8cLrl_M3{oN5^5dJvbS8rp zxceStAwV%83jykHB!jkujX-CQ(7<9rAfe9u)woTJav(NSsB5V>&^9M@ixrCp(q%dU z!rzA3^{7se4WoKA8G4|qRvbZ;(~DZmh09P>BcQMqOh}8}0+<*;E64@~`PSrs0i^yijjt9cLF#Hvo0z zhZ0Rz&knZ3YhkKtJCwIY5V_#^k@Mh0{)oe7Qq8_)P_AjnAHd z=QL9Suh03C;cZNrhxcWx9MA-Dcb;m!6xX(SVaT#XjtzB(IKKe8^-%IB^Jf)qlhU2^Q>qjKzNK+4@ErzF|$Mt9;#TO)dQN8ZJu0b@EuhFU$HMqyNrCtK(@ z)A#2mZyGZFTIm+nx5Uo7GWm5DoMt;iWJN0TJ<5L^+dkgxWQg{7pY01ZCCPa$wv+j#t76Qra%Cs*0G=`GB5+(1or9CXWF5?N81@7S^O ziApk~=W>K_{-o%M>qhL=OtRy}9%Z3&44}>jaXq7kiz`-FkZ3t?x zkBSv#{?|1t+T}2KG#0vkj|^-!P|yVb1vX7_OrzD!v63=-qHE$GQBkhCrMO;rH7euJ z86PG>sFX*{pH!2E(J9I#2D39R9BXG8`m8da;cd)Euu-dxwUd6Z4UDiYfKZ)SMLFS^ zzSM95D%@u)cH`B~?%hBo=n^e!$6y@9*ahYeWS^N(QrJeXa&U+w5%#qHd+7pxKZWB% zEh`H;A!<*dk03l3W2^yEBcrsfrd*)UO!8Q02HHcnOhviWr5F(WqXv{BD)JTnUEY2R&=|HJ?{9b0Bs9{ z%dk%d#@z)YmEEWz&3kN1-n3K*h*zt>r6>F^^euocmuNfsHe9E3hO|6gAZr()D1ibj z)*pn>MxP?Ul;o&oSF#mH=fFJhsijkKq^0mq6YIpegl!hO&b|lvTRppt<2UBeeJ-FS z(59Z?_oEffs|o5Z8G1PtTW%kh8bFBcn?BOMCZTIG*=Ch~gH&=w_W%c>og>88zU`MG`anV{z`l4wP+89G!C?cCP1Y15kZ zo3{9ikWHo{s=kAsE=t1_b(x$UgLQZ{eq6b71FRKtle4fU!Dgp>$Wxkz0xuBaZ~0`Y zc_d8m3)FNLkZr88#pT&R2JlrW1NGP`N{fyTA<<0@MgHnJtO+lArujYlKBxIFCb&U8 z(v*1=yAb;gy)YqId92o0lbo-mYWJ1%s&0~U)|)Xxo^TM8_SQ^tbVrs}loYk$*gi{y z?N>bwP#joIC&yGzt81Cv9o%{@c zI?gZQio;@SWlB!+0~MHUR^QTOsri`g!m**PiF^^uQY`Jnt@T8DoHANT@Q=0_>}25w z?(2?9kFGEnC(2%(o~xObyxk+3k8jyq@^-9sYI;38Z=)-xrU+|_pi&`0-PhKpY?4J! z;4f|6Yo?qMlheOtc#A2zE@_#?vD7E&QV304%<4X^Tp4GVhMCpIsb&Sllo`ZUEPE*- zbS?+%Jo#I8o|ol5J76q(2vM+n|7-M6z71XDO#HTyQ~nC;!=;$)Ffi(a;E#D%CQsO2 zS5po|4gc9O{lidw@!~^^!QS>I_qigP`k~qORPZ62 z7lvE{v5?J6+Au<$`C3ooZsA=2W{^s{z@sNuZc2cYiS!I)rd*BX;fDZ1+_tL0Xb2q0Zh>?|N+(Ll~;oYgxnR+}|vL z;vqj%%QwI0`j@D%E1pj;eaRSlVM6T(;cCZ=i|#JNg{cXutW?B_JRE{LrEFD2-{9|f zsI>bQ9e?(0vhI-|kIg1?>V5m|wHvAY87Bz6@t98k$J=@aI$zoc;5kYNZjXF!T=(Q% z!cw5|^f{V}XYdeO-&Ye|BfTA%F7Ui@UGg(Rs0o(8vqNCghAa?A|BbkZQcT!B@w3)H`VK_G|TPb?ofFkA5Xm{%LHBUy^31E&fo7eT|{T;ph6mL!j{) z_vYlBfGTo8Gk6JuY|56uZN79hh8 zoY2-roSg2AFDAI;Lz&&$;HnsUf$F3RW6>`})rr7&t)5uM zidM*(=HJIdds+&K#F}YRXd&$+-E1apj&*d_EBi4HnGuPb8J4f(SpAb%=p0U+Daw9?|fimIG|C2k(P91`r~h zV9keVk8w0ztKtA%QPd{nWeVP7y}DpGRf?gB@Hc_MCQ@i=omC+y@9#VY$Ex9_KB&MP zm}SCYU8x!U@IyU}$G!$Ax{4ah3$O}_iH~9dS^{7ZXy!P3T229`Rp%-}kL^V})SgDC zVlV9ls=pnpNhiQitn6GMSPUhC{miao?%w9sOtOdrjM&1p+0m?3((}g*vVlBKd;e2^XK=ENEs@?o{Rog3B34Ol(_ll(c-UILX@9#JKer~ zl-64yYgXe)I*Pea{)JswI_hAhWt&!NmXhPKL zf5{L+-m}Rm30P}-{eTch?R&JgL8(VHA92+WWO$Rf$Nn@hI*Yu2R%^2*`Vg;V91?atwWSjeYOhZ1ZfCcj14l{3WSFm)nYOa=#0$Hl`3MGcVF`fsr1WGFMkKYX8!8)pG`55`A z&BsK(g~kQaN%kIShm&PBG_-=OG*iqGowK84b8ygPa+T9I*}^e#4JcE(-KVC^AeL)$ zq{?3=SzGfNLhb5#L|yP%_D^zk45`Ip?iP-MMwsse-_*A(T7P0o@N;*ze9Vnr7BF;?zboj;abrC_e-OipC7H54VG zzR9tKFT9tBvm%qD`O)h3rpP4zD~xSKmG;#Q3!aAfOed5W9;0lW)3`BEkU!;=9rHe} zmGuu5VBsJ)Z=24N0-1ti!ZWdQweax$;bjfmNf^6^4;yxceskboDEu>rA-s<%E~pRG zS8b{N)fM>-JJkG`GXMDTG!46V=4>Mq0m8dok(rSY=ep_@DiklMe}3!=&*}fk5~!QF zow_SNvVzm=5G5tBW8>E0qDTI?{__-INO4p#Z#GRSLk&Gp5Rh9Me8D*V+C6rWoWs7^q(k*l@QX zKHc%K9PDz&?pI{eW@CoCoy)Zico_c5ARX6Xc!fh|2%7J-ez1n@pLcCJN1mp|KgqGN zIbiKp%kA1Zmdsna?TEb2mlIYh2Ro0yjV-Yf#!lN6c>q7aP>S{w7xbu6T&g5y5l8e_aAzl`Gc`BdJgw=0ndN2esj&^*jPY z$ncU^hn9k!*a4jI=uu$Lfmnc5{8$|h_*{hPp7zPHJeToYXMCEZD^Acx8k`DcV;sA! znMxgV7O zml<>cjHPY70(gxqZ>RvXmfi67G+k?d8y6w&>nb*qE|xhV%50^3w24P92_Cb;;pD`N z9t}y9^1H*bELjWfpFDdL$N@*Qu`Fpz^=EhsmpJP-$`{+5c&ViwNgYRAFp1)Wu>FC6CNo=YVDiklr+L6D9xyVCV ze0jDB&!AM*zb52$ncdeU)JuwmzaxX50{QTbwoG)JW@Av*#00bR+I!WHE;|N?o)p&j zyq}(D540_IgD-j$`tJ$v^zxJS!B0bKN*qf7!vT&7tDQ-Oh^dV+u$Ok12`(4MMwbm1I&Gikg>UPdqJ$^ zMkNkQ@8}L;{u4pe)zR#xmZoA%yI(WCm4z^SVisU^BMVhK7W@enCh# zPGqn(Vo9{4O{Ie{TqEnX@YqKPb7KsDaP>Sy7H}nEL!Scjt2pwZBpbyqLIq})j|gp~ zP6r^to%q|1(2Eb_*LCh3a313)oy=d1?xUTyU8=`B^P}-V4h+Oib*<{_u=cw!Vtyg+ zw5eR+%mzcOUaMZRRV2D6GVQ~vXKbo%*=ejxSWIgp>*_1c+U%-4>}BK7FLt|{;gzIV z4>p~4J3bG;B$&6LzR$? zzv{a>4%m>Eq00fyH6j+4z2J zcD57SnhoJh#fbu}I?m2Mw!b(k5}wV!fU4iX*_+i{8kT*t8tZi&cI$2Mwb;$pdco5! zeW;^R0=~`IK?+tFf)y-Q0a9+>?&3JZ-cqjw$v4ap!r2on2Ik7*-WKb|TWk*@*x7y^ zkW<_5@BacjY{kd=L>-dMW4y~8aVNI76oL9O`{71)GoB**vhhga$Fj4d?xtjCUouO`QYo+n?t6CjFhQl(QhLTHzY*)#V|RRf##-p&W`f_UbmQ|* ze&ISx0s*=4(}>>hju>%`oOywjfFiVrCQ4*WwuJ zHJBh$m5~@s(M14}qkRnCb}jlq%ShJTN;auRHpwPuJ5{XM^%6PY{6LQXHXqgU{*(OR zFf;@`)nPk>W3L1FlOL;mWftTle$~%sWUBtAuKa|@3O^y*(Gi6YlHd7a>x{|vM&77= z5J`771t!7X?bpx5k&KmW(o`-WiWW@PL;-|Qp>H>at?Mp?o^oNn0l$a1Nl0a9Hj52A zi;s-z_C?fLuHp^rgDxwbSoHuJ+T;JIh7o z>CpTa3ObFh@9!^4cje0o8A@te`tDXdIyd665_R{~@fBD(%oX&UEJfMhqI~h9Xt%=e zT8x$1uWR=VMol-fPETyqe^{RZ_7jVtnmRuXFs_zmXcn1=l|x)wbgamE7|L60D6-eS zFsgghRvogTC1Cj3&Hth`y!1&$Ioe6^7yD6PRq;a-X7v8n8k^3Bwu$U@zgdsAnwGuG2?t5QW651Og z>-rGiYP~KETg`C`f~^v0R58L@WZMvcPOAOXHjC#Zlt9O3^G><12w%J9;^_z(PHQ44 zs3{p4Yi6!j9Cad7)%PkMXEH3&H42M+4?XitS1{hhYHM8413Mron`uSN5jN6PMpkgh zso-^W-_xbymwAt+Cr&)Zv}aWuT==vY0IA1?2q{+mi5#1crC5(F0alWJI13GcB|}Rb z@ol0)%J|5xYok4uV&xATZzp}>{VD59_k~GolG+BMc7l7Wy3WyOPVwb{1wvY& zx-SfYIoTDsiRBH#ImJw{#WQ{{&P{5D~2f%T|Z9{-m9BR`lv!k*e^E~D}RaHfvh9u z`$%-`n<8q60^Bf4iEY8_>--@F*2am$27<4`;yDpmDjeUd-gry$ z!O0HP=aiB)vU3^~*CPj33Le0(VQ=Bx0u1I41|%sFWflmq19<)dyb*P9!yi6GDf5RZ zuXIkr2P*LpEV}!-?8%rk<#&GY0W^y|f+Q-j{e*X?;bVMb#?#s)b`;ZpPf(_hTed$y zk&mGx`gSdmzar4D4V~1t>k7bkpkKS<8`;^@oY>09Y?!P;yZ;?OzNT(`hJK8o%iV2j zP*NZHHe!7yX72=R;lJknr)+cdZiTUWSwm2z2iXr^(dkh*vXV}!7Z|v(>Vb{{2-`$% zws4q%ixN0}h|MR1af2ZoW{$s6bK2i;xT${QaA|{9uP$>^IZ#}gLH>f;!0V&u!LaP9 zj1@3paC`PooCx=5mQe<#O3O$P!~IMC%EOeIL=zP|%nl2h=rc@sRG6%VC+<*Vd_XUb z&X@G+DZLb9$|yIS=8y#~kBr2)$B)OV9rY$&7V7z3$_yCrZe`YnDgbuTROAT27IGq! z1#G{`a0FnZ1g}n23oso2$HGR9oc)w&q>;OoH8_tj7JQh3wALQwY_jBS2%*W`iw_c4 zb0uc_sWvUjzMYyW*NDOFh9L}kSdP7u;lO2Wv9XyLzm|u^ zeloI-uUE>=La6PegOe^jn6wfvcjlZ^edgGrbH>T?-25_$m$VRSohIb;ZlPhbOp-9J z`28zMNsnz^imK{}CnVt$goe;jBK#3+y_u-nrFy*Bw+>+0;4#Ed zbFPuRwq>S0fSA)sav;3z(M77-SM}q&mn4M;@S{(?(Ge{)1E!= zprD{FtzgW8h8uW+MmYbrOqFBfa@Z67624Q^=}nbX2p8__r(z#sb>LfQ3Cjv4A1j2; z;H&o1WbDu2bZLcYKJ1wz`-0?Nj87M4JpH4XGGos~L`1BdDryqPkhGMP4A=o?E!zU1 z86c6+?5(r&F3h}kbjG$DQj)6p3`rzgnTMK6jW8gGZ3@s`a@*HXT`Xc{BHWt2(Lvcgv6W~<5xJsvB+T&AsH#KCl0xlK|bc}BFHR1)O6s^7=Ryq z`+n)7txSbxit;vPyw=0P)esUB()Jr*GbM$Ro+Ai(*z&zuvu1r~8?TGV9_i;d64qQq zIcrR32+4$r?CERh7zGzf3_TJaeq`v2ocLK`f4M2mY3|iGq*xUa_o@Ue02BSWy1J=Z z9BvPNEsFwR()el+a!h0cvOMdFx($BSdiCn@P0@nz47T=SR^tVB$s<6qE%i805PXEmkSc~73S`H?z9583cyrDdpWQ?#sd4`-` zThpD$Hg|V^k0_XOVJ+RqT1YgHF%g|ANB;9qiy%cAhsxu|jjG3H00Hn53*mub4*=Q<%2 zA-NT0FAS(1r&c-yj(sMDkx)UkK~rs*UQJ-5W3n$6z;FL4HAA~vOR@f0(i)$4_&E=m z-7Cf?$*Iuc@dl~cg@dwR5gH<0|DAur1N|H4h%Dbl$HG5Dr%>qmS0%UHPW80#1|LV7?Q>XTwIxiyTQfD3;dV1I0leFrZJ>Ux-YY!EI8s9~b z>>fO#^Tn>D%WhMifUNZrE7XUWEl^g)vnaZHT=H!we(WpJQ4Fes0ukgO>&eFb;ZCu& zYHa|lV7U3{M6^F6GMP`wTW#-N6Mq`d9nXVWlIy0fjVK>I4Y*}#V{I~ntgG%ZSZq(K zAd4;I0;yU*vRwe4%ihqqXU7oIUGPfpNN=9|@h99XOO4aB#bt8y)-EIdr}NrDx=b3? zO~M-_na({<;r6h$6zjs2r{)&RP@9y|7bMs`d|ld+cM$gImV|2QN%bWV%*tL>#D7BI zs=5M&SS2cqPUK1Y%>g!}yWYiKp7PBd=N#7ntfU511rvYe5@+aj4J*No>4W6N{1tpA zOx4zT7WYr=EeEdD$P!4VVM6qQPclB+l{t(d=jBG};DYc*a`ZQ?bYIzjMz z=%CK{PVUG%RC(CjJLpSCTte07LbC*FEQyA*;9f9!8__Wt!*hl=+e8N0k>J^HmRv)y zA+WABlGVdLW@E*Y8B~3GXlKbSm`pJw)^(~<0+oarwLQEonL+i$H9B6!p>Gh0A01UZOt@wLreTdM^}dc0_rOnuIfAHTjG$CtisNOP z#x{!c15rQvo|^png8Q&U8KXvAUx{|yBli^w`SiRhNGVooz_iLO%sG6jBly!3_P`?e zUa072R1wbZTijYwnudd?{2Ck~&0s)qa91(t8xi5_8z2UQH^S^@H~evijS;@6t2@96 zAhZ#ZG29(2gxu6h2qAY@?wzWvsTGQKikxdHb*N1NBu_Fz5j{l7MQ*X0}k(-zVF6vw8S4Rpfmqf*+Tv zMNWCCm>)jEn|*1V3QVj zlx>1z1X4}ZPu^{Tx@q@MYWvRsn!A?@YLIH$Ixd%QcMDqxpBFW$sNr!Xv572m!Ge`s znr`vH80DnI%vVvaN;*@KD~DaZ17I5{iAw}q53e8Gamt{+n;8RZSNljdAJtXtMQ=5Q(~0kUus(V-?DGt)AJa8=354# zOs`1g;QFgGE0mJmV~53aL5?NRdSmM9HLF)2U8B97ZMtJ0(o_5r&!%9KIl(5UJ#YK1Zr*!J8O&78;@YVK@Z~<3jag$lhL}CITuxosd=e zI}w4)q8o9>OxVHJ@uh`N)p~Llz9*{l;>hZ7nnZj`Z3i|`9iHq$t_xB*1Mhuj z#{BdXq7s=wx6lpmU)13c1Pxamnf^9^&qRv3ZvQdDi_ zHaA+ACzABn)fXs7y%|eSVr>_Cl}upb25g|A{2n1prM^8OW=DU)J7l}vaFhMis{ZWQ z?{1PoJBYMUF^SlJVs2*Kb}LD=CDj%k*uIvfovWp}i6gPoCf2WC*&7w5k4y|XY^7%K z6WWJKlJAE_MTLch!DxFv&4~Ujz3GICntzy4`rKv9mhCZka0|GUEgLVbQ6Utk@91ec zwy5bOQ#xknktFY4L`^fZEiXLfA@#{?J_~%=M>n}A-pX}#>^wHzK;a~{Y6i_;|29V4 z|MNcoZaV)_X*tFhvB~FncKYAUd;X2nv@g6F%Ri8)bbHO{`jT`Vfr?GqMlrY;AAnPh z*9+TmFTY!`+AYk?bYq_43cnV>@2|C*RFitfhp1iI9_=5AJn*);~v$IhTTXoR@MwM zJlU^vP{|?_X1Mu%8?6>#c+edEN>L5m( zt;jW~3l(TX`|CWps;KvE5~}M}-^5MlK-J^ZXHw8>R7UzxUCX@GOi!DMyt%tU8h*jF8ZvH0tZq{vk zQ0>!E209EkBtf4}?EF@W0HclbNpK)G#?F`B)_W_P`v4}gD^N&{#^<8Ir;&iqa=`p^ z!tiCoh2yFZP1hUU%lVi#$;^89z2i|(Lh-LS3@_0RFSUf`b6EbV>Tz%9=YKt4`O=QP zG+;NBjvFU-uuCc3?&~Dg-A%`y9i`4@LoBI*B}>j!c5-I5AOR7sMj$QJxh98|jYyf# z%Q%&1k}cG9`po2?VT#MC>8<#x%>npE-@F-f^XAQ1{Hr%xJk7=}g1bg5Jd<%UEplO4 zOZS`;hiQrw>z;rU-x6ARf>o-pbGYnmSo!}u(|9#Jw7(2bnPab54INJ*yr+_(Yrp!A z-`;EC8GKh-b1Sky$rSVk={~yQOn4lC!&*Fq-hxdAoRD5MNNeda$snf?%Mi-S)Y9)gR32mTqBg`%;9o#@jBfV1X6>yp9 zB`ke|3^Bj#b=f0r8W2)R_u%#Z83%UGw+w{0XT!n?7AtW?Pd_2|r*ar7HR>oBTseAl zw%-C0UqknAUK%xNq7L#cAO}ntM|kd+V{egYL5)vyFrA#^JXvg(`>@4uRF?F(6gU}J zj&&!Gn3A@8T_rlWMOTO-tL>^!Bi--Gc4@Y@k~#UX1JCt^tiy0ycM-D9{Mk_7 zu#im+aZ^5rnd>XG1Z$DL3M=WfaG&m!&-hfaCu<;d=mgL-yB%sietdbYNdyZ&drF3k zYry$jA8HXf{!WJVP_mx`VD}vcy5NkPER|vLgg7g7x-ww=8_RT)6V~I<0H!caqom&LceXzTKa8EYvo*)VKl5OPIY5NgX|b8Ohat469+ zq05dPVAEp9UbhBYG`n9+pLymbv(KpOn2B|#a~kcTx7oNWboh2TI|6xsZ177n_>sdr zr?fj$WMa~HhL(B#Ab~c!3aw4;W{OP0W7IAG;@uA?Id3dgnVb&WU2(}UO`mQ8ehp#V z0Zm4Rn}scXyPkcV$^hUR+!p>!7QV2mtB-E05YfA{Tu2?TE1$$Xv^KX0wIw-Vr$jzA z^HF;lHw<&?3x>5bFOu)M4lolf5DCkjw{yQ|9bFb(uUPX_Kbg9Aq9yH`DRo2Z0V{xhG~fO+5Y#<&q)FR}!oPj6DtUYnyU3&q93cyvncQ>Yzbb(? zJ;p*SoMiSGM8@>sdSj2%Mye4Ou$~y~D2vr@q=)yxn8QrXvN>b->zkS^F#yf1?vhkHR!`#(F>O?ffBj-=e8E+AouG#pjD|H zZ!3N)*Z*=qz$aS@ZQ%%^>G9;E^d;FUi#R(ybWh)rq$*;kKORdaO9YTt>j{@I$+#wZ zN4^c)T#%a|2&_Ov8`bmQ5M%kiicTS!fknkAs7Ly2<)%o^r_i(hcmAQ-CY!{nnF%VdP_WZkc1L?#QeoY+_Ah&c@0Z|T1%;PrGoPTK6QTmD+f54`1R;piQNkkjp(pt)tR^&>}DVR5hpzzr}eaH@{bJXhoO+#ADy+PvmlpVMUi96l`$~w)03C zENX2pQgZ>biJVoG(RA|9mQ9;}$4VMsHTW(yHT5T`3+DSd4Ij^+OAsj))dUCaC792` zEd09!L+B2^3_mw<7=f|&33bA6$2qY+cbdHcp$kC!nT{|phq}HVetnPkW@3w-RmpLh z)py-^hrE;L{C`veuYS6IyBiVFB;8qmnN4n} z-X_>OUUd)NH^?HjdeY5#{N|hFCOp*;0?A-q-MoaP>otSGM~+(7yWKUlX3A<)pC@)0 zGvavwRwUe(V+%=2X{UuMDG^2nNFcP7T$g+~P~m(0;HKr|XR<;o083<01s}%#ANJk@ zJd5JnA0HqPs+78DG@0GA|i?)poj|6dx;1F0--kn>0Rj^lqN;G5K4g15^6{Y zfmA|z;oX_{e`edeJ01(jD*WB@8 zvVy>BDYjv8Nlzi>`b8J<-xc#3xG@zRk+Kao+(bFwM4Y&G!Znh4kQtAmvCnamUj^V9 zl#D;I-*289#V=|l* zs&1QMb$a~x9EMGV7$=)r@m1h=V`=Xpq2w;Fa}_>K=g|wFcLaJ_WoW$C2)#Pa;~gw! zrVBqN@0kfBQoNiNTZg%^TFXn?ygjOtwwL{J&rQ=m!%(;EYc}t>K4cn7Zn90&cpT6v zXU;l~w`I*qo zAa&#Y3HTbAFSrL_g1=KEh+G30{@w*DQMl8;n~$gOPA9Jt_R{NNCzF|)^qD`un`bw< zO93=rwiTbc8}JvYRB5788qB_Yr5F(030IjW=FF-n;U*g!$*L$jvnUF6`tW)N&#v>a ze^(#j&3A?4n6P8J0Q2nXR9%)3%uA|LbLR;q=fe_Cc=LP-Ci7Uekk?#Fqj@rzk5g}p zyF#w^9DTx!64HG2?~g7{xwWV(W@x6|I%dX9%#@pN#!O5vCGs`OYaj?gE^24O^E|=f z_M#xj?;Pc%`LZ=iOXpt}`9Q7c<#p*Sdk*qBNAFUr9T!4l{vbjBL|-aZlB*L#-sdr2 zMgv1l*qStve@~>qnuHf?Y6!=L4Q`V;4YzUA{q)|l|4!zBZLkpgv87m3a-KCCQnDI` zOZ|VM9Q&2;3^w-KROWvV7zYvKtHVlBj2kSPOpB9fKcw=iNgX+}zT3s80ObyZF4IzV z{9y`#!*4<{UlP&b7`J(|A6X07E^rd{CAX}tA6W$04cNx8fTS~{lFvv8#Ucs;#`-ia z@I0j=LeoR?qRnKX);9!RJ&Yi;p`2^W48Z*GqJ3OKQ(!B2k@Vnh5LG|r*fw;+4Kh~r z;Intyb^FEY>LSR<_|4T;19_@#m@}dRU(EM77-i`F`maX$`Nu_FoB|CgA=7@;Rcyfm;MFL zk|4IXZe-qwq}Dd#?DcosK5aYtj4j8KWGB$?}jt|H_T#XRGa2qgz;1K$UXc3c;;dn}n* ztm<%BPfJQNa&Sz29EnM!k5{zexAJ@tx_4=HF;47tC(M58{6bO(zL}VWeK*a%+gIhy zHq?Rtppz5=r%4__egDygJC6kzSiQ#|_|v1J+;dQpF_dk#YLrROJQr0uH9s7ceizpR#iE@pE;CATQ?cZzkTWc6jQBL~*uL zUyLUe@M_fPxL|)(H@NH6^p}}9j=u-@aWI<$^^(ZE>{_{MubCL}bOhfoU`zeVrahM9 zS(2N}z6SOk(qE|{6o5U6$$A6K!g(VVG=$bTHTFigGhA zLo9&+gtQbDyuhNAjPr^3ga9jX z6W^(iYBpgfp((2;-X~eX37EAj%;@!$dKsrWV~aEFX3`U5eSBe(%!nr;0~gF6*pX{J zfdk~!&qL~t7AC(Dai12uZwM@^J%D51Gia`BarO7&*6^t|;qC%lvC?70m0)B3m?=;9 zeI|=PwXs=)ufs4GG)Twn7$f|&WNAC5+N=PuWGE;>g&#sIl=~Ed`8Ha0kfhP3vT_}XKiV9eVkgE2Yn`L zw6qaCrc-jK4U}S?9MXPk_MOM1V$FrVDOC2alJ`r@C|g3)<5T*Jb#|N4%d_9JnPQMq zzZ81B(D;kSOTL=`w_&Xb{hs`)Nl}dHX9f4qWnf=iVV+WO9|NlXoUNECPui<5LH74f zg>v0Uzn8aW4H)2ij@;!JH=!o8Ltx?H=6@Czl?AGeVlOH5lA%8-)OE7RJ6!oKEJWAQGlJw6@ z=MxIn!Q=u1?vX_u>N!2uPkOV(5Rw{tR^L=)W_dVE#BbGvFi2UU%ahvS2{HARh zppcx^MrSA%M1GeIc7`}#FgANrYttmM#Y`}f!6Z=dbJv(|%EjJIAn!7o%;ZjTUDk*6 zNsy1o2FS&lBuY6?op3mQ z73YP#9FAKaQtX!85+IRzEy&qEzd@W^r&e}nd%@X0o4u3{rDrS=j zh6ihK!ocBoa5(?6Z-D*#Fndybc*>KRIZX*I0@y$`*6=(A9$R=H}%$gW1o$o^kse_jganK8CsHypyKN~{<$@-)P3zwKh7RBi#)1;-<5M-Q5c$5T1_<)<3P zn`AZO4f(8~v6Ucihu~nt71L-5yupL^E*8_$`GUCIOh)h#$>yeG`Sw7r(@aKNQ?Og)+^&p;Ui%#=M619FG$Bs10E zbo2^lA&QCpBO{GZbrF`U-6x-bb4lS$LUpji5VAqkPUPK6!f&k_ARJf1wtv1w((*2v zO5%hvu>FRbexrH|%lIWg2T7El2s}taYPxkG%EtoG>+83noxCXZmj?@j$X0=zMj9%2 zJ6Z5P86%VHFZaP$GMKzC5&Qa%^J#7&)@x51c~*yoK0Q8v{tXzbC2!@Y%3=K!gqKG? zWQ8E@cZ;l>ROL;NNl-QaLsIdX4+jZU%9sWN8v#Subd*!NCwtjTDl-~ zoQ}@Z{vPpmco=6xT0-{BYh3}D!-rWUv}mp|dIv>-8O${@M869SZA`4@R6|0$_RIpC z`yXN>{zJLBiL&7Uc;Tpv!nK+zHF z2P?M)oZ9wT4ndi|R98mAKIjE}lT|zQWUIo3hn~4%JCI6OQbOyBZzHnLDr)zVa7HOz z7|bXEY*$`~vcZazg@S@o64+>u%ZxqW5$E(861mpUhQ`*DfaMoICinA6KvZrsx%7?< z%z0h3C|KwIhTNCQp@!r!GaxZp^XwwedCNsHI@Hb$n=NjbjAmp@#CQ2?gXfu8?#lw5 z#3#@!fj1$w4{A#2k+**bD5^h8{>P=iJ;gVVMj`Jh%KdL72JCa;cd&9$Y@{gfi-txi zCq*41Rdw|c<&?DXDfJtce|CQn?dQ^q+dK=u6v&C&8F$59u_A5h2jN7i{qPq)ze2-y z!I;r`YuG6#cMp|e;h=VY1G_yO!4MnR0%lDD;hO0c#6k31M?v;XlHv z1rsKWhoZF@54YCoN6J#v;@f*zIZzPgU8dmQERw|zDu>`m4Saz1%)R39uNDjyf|Y*C z_Mw`t=K9sj@EXUbfWwug9~2kXK(Wy$;0cBF5rQaJvB|fU^y6X>_UXJ(q(8#ZnTjGA z4Agi6`}HL{VGV0!BO#V+6;`5IgO1KQ6YfD`9bNuH!QTqM5VQ1|}=YQ4O0GrL3?wTrDpvFITlM zK73J>#{^#(LDPbO4c>-&H0|Po+tRGC)*_;INl>9 z@%go7YS?Vc12z{~LJ}PjnBhkY0?z7e))d$ebhf4%CjG_wgl`UgI{gLO2;C-AAB_M8 z$57GGFoQU3ORUg)7?i3QtPEPIMqK~qkf$|i>az?I@983Iu}^BN*So~Y{XTWp{+OKO z201@m;`${KSF6z4iUt_4#(hR?zEc1l$&Pp__*kz~yzQ0Ssf)qNQUDsj1 zdDkjb07ByzSW&6|J{UyBqb#wfgaVA*}@KfbR38fDE6ef z9YY1GR;@aXVvnY9za+{!9k8%EjF6sOuPC#th#>@+1VMlul47eAWvHw`fboaKdXyQoe#83p z>!X!$ThjwdhCR@qpOQJ1)!BV4gu|2Km3!Z^&}*J{Tap^rK{&KU zLI5>(FE}x8qA6kP#e_iTe~Mj`7%0GTTqNuBz?C0*mIW4YIG2U6;`Gm3a7WFX0Tm{D?2~3z#s?Pz@7$-(7034;)T)rmkO zX}J~)#!fNjy(tv#(%!E_-W#2}S4BHvBFxF}R^LeLQ~kTm8xtnL^e6lU^%qw7iWR%- z*O%K{Ed_oP{r_15o&)#eq~QYQ0zG%o&XneH$d32Ep(rWar#9iR(xZZ~68sf(PFFBk zfv@l4MC})p_o?%|RbQ>MICz-e`x>s`aTcsrf-=}cPkY=^&Khw_@=@L~Ifp0;(;qY; z*qJTsYn8sM?95{_+9IAe@lMI;q4Z5eRZNNFQ}XEU5rfZ7ez2`*LikKmW+KE9shu2!Nzk>O%|7<675Jn6JlPEl<32U z(~qp;E4;#ee5NHrwPz`NxW{{5Ij9cdN^j>UjIZOtT2^iGB{t7MMStd1qPUSlpt4w( zQ?|2mqm&nFKOZ{g+&n{`12|)G`-Y>>C^z%7a%eQ&EdvcGzQy*g5t{vC^R<+lf!D63 z7^QNFUx4arLOTq7(k{5DT5NPC?JLso>;Wy5BIkb zjD(MGxYHTF(@1JpU(~JJPH+th$8DXOMhH=a%*r;rRp&n!GS z3jI{-iaY__Db5Tyd;ksimF0=xrkPu|vd+)Kw@-`PQPTaesfc z@;$@DIS8Dv!9xQFpAw&xzB|L^l_t>k?<4J$I~(Y+3&8ky{@>onBmCx^(G{iyYQK$=E_orseK$<1p0Qo6@?5UaHAsDrL0uU}Z6s zbN0)Fv^OOP-S0Z4iJ`J{G6L%fBw&^MH(_|cZ8pYWEBRG04t$sEud4799N5F%U}Uas z#50!+*S|hFc+7*uF}#rh90_fYg_GV0Nfj)tgd>l&z)w5D(rU7{S+h@I8}VGOa^50j z91t5kClTDwBG-VF`?L!+k&womAZqke2`Q#>w^7Lb^1K|SlmZu;LK720)nHbQR1k`N zdJ&+N!rx7)AmWVeE-*-Db8iEAy&NJ?Sa=$(vB=syL>~n*90Si^QNp;vJL@*ssC$$nb zqgBo?Iv0YKsWxSnM5+DCxxALNE$XSr%`o0LrId}?lGw@{3kcK#d0vU ztLzd(2%Nu#i+}K_Q@mm^XWHZoUsaTc_Vqa?UJr6}SwT&*8UgHgH`H+Wuwh@?0Z0M1 z4K+*zJIc$$ELacY?LJA=hJ>;GML}o`xVED!?{@r|qJ%JJ#GX(VMTza@jiBc0+O^Vh zDr;$b3)mn#_SSB|==ZPjQ%(*Q3{({VPd}Rf43yR$TBBf8jO|YQ`hwt3v-97x zXMk?4wX%S(O)cE0zzs@jt&WGqh!C(ci~|wsIriqZbMziW(<^Eor{EoHXwA(M&y}Dk z!z^iAbR2lCl(n*Or;*mmvm30PHyCx_Ly}i8~?}4Sw${$SK z(RF@mz)D0#yBO-9tYZm(=3^i@8)@v=drJJ+u^jMEBMhH-dg8=hqEgk1qa9Bt&dmIr zgJA)j9@2kdz=5#b%?Jtujs#%WS_srpQG{Kv-NgrW)dtDENf?WvLM1ik?st;z>F<{>|Nh}`moG;X`KD!`Sk}e2 zCI4TfnA?auR;+ZHo@Mm#{km;Xrk@Ngc{{28NQ`1SA!1I5T`;KTHP#SAhfJCpagulw zLTEfaoR`4jNA>d8zD5@8m5J7No|E3oR4jjKr}C$`ntC?lnP!}g#QbMidxu=E3(gYL zW}36N4_d{PWe~>NFMTCAt!`ik!9AUdwTEMMG4s+JSO$*6sr7_%A1innjxQ?2&S9L+ z`4(A&F&$A|hTNWhWfwzme@DS(9vq>X#66EP2{_|D^cje4`-Blg=ogHy{+0k(EdSGO z31l_&;>1wS4sh2emi4GD_{QTAs$K$FCG5>kF4WUzHIp6dVPXp2397jQpK}==ogN zYregQkc?Rzgvy?TUpxfnQ=~DvwY_yKjilQ~TUHf;WUn=8i!UVdm-aj7_cmT@qM)mT zWhJX|?<}yADRP~t-B3=~D?BsPoE8+@$XklyEG<(bqt2=>pBGQq5{aQO1eCi zCt9zN=a>(si^n`!rGT6g`rpS2!Ghw{aT2)}d*$Vnh`b?-Y9QO^OTih27QV}7=P0H3 zb=8YLel|Gr9gEe%OF$XS;6c-~z&gR?gv9KhZyUy|O(ph7FN~kJwv&w1TQ@MCZ6xg1 zw{~J2Lnjsmp#>CDB35WG6p}a1s7m0>>qyCj;%6^#WOG4IK&qU8qne2!v>f9_5~y=B zUXxplb%IT_?Zr^ZbSR_5&_|!Gz|^5C%C-(id5cy46RCfyV?c4q4zUI#7hA(9IR@M3 z8N-uHZe|wPz5fI3zWir_AU|fbY?iZQ5^Uv{gkg$uQUW3BilB=atPTzNO)&(6W<|Qi zEh}u16W^1lq&n|pfl0sN&9R?mp^yo`zV!N&*RKzC5`m>X&lI{)Aj1E9z7ylN1K(KQ ze~Pd}F^+7M*5>Zyb~3C)!WtQbejx*-SRfG(;i*6%`LO+jpW0gn?=CgF!I#%>>ytOQ zD3(}j+I~*w$44g1;uJH=M#?_l#*)l*YtqDwGm#?K?z=H0Bbj5!%brG@y-p_USQ4aj z`+FgeQ7_I5HI9zF_mu3Be4%~g$RCoAuppm*Dyi=Bc;a07QE@@}eBcvE!!1GgyG7=P z58C_sKES&Lf=yLh(rL_(Hx1^~c#9EbulaAv{l?705BWDtSCEOnWmW0vQp@m6iCMAK zT^uNRyrr(=I})fHEQk|BdB>*VU1I3nD6II2OW!mWM}8(L{3#q#L;|4{{3~M%c5yCq z;N<(uzo+57e1pDk<3b?z!SOil(W?Jf*)VWVGv_{zqHZ0=)UGXT5E%Z~CYk?0AL+gJ zClCGo{Y4FIzF7`+h_H|E4A-C@tJLrjtGLlwLY~i`xFwnp4m(bqN9a3Q?zsSq8>BU5 zXLxLA4LuhDrXg;*CZ#3{d%XpIz6S+O5>5KL>+^WW1g&8q{r=R$*X{RMdiKxFn-ACu zH<-wdE@s7cR(b2fXO%HOl}FWn=$M0RbD?XA2PcF(%Og0Wp{au_*X4-bFnV zm+KM4`QaUf%`zTlw}MBzw&C@+`%i}BLROeJ6u|iXUEtc_+&MYGWTTOML1x-JINDy$ z24>lyPJ7tI&^uU@d*=)ZVxL6$sL-OwyZ_;6kw@bNs((>2hp+8BG z*q#u2>nD;})gobwX6r^4+X&V~k+`SUq&1#nJvnMkTjC{tCmBALv>DA&XX-Wba)6n( zMs~pG?=U|$E`Dap&2Z(#DIS4^^H3|H^F(!GRs0IabN73=wxIa_@=ODd>BogwRj{KF zd{u;f5CL6QA~;t7^^C~G_%LAbIB5tB#xSOlR@w{NHq=i`!PJfu;6#H5uB zn}7+kMAgNa74|1_O6Bg#b=FG7mvgytu*H0^q&9&IuzqkU!}eebH1hC(^V<6t{^s{6 z)|U&^84WRDBE@O-ZCN25gHtW51&SK7%ZQg z%7J;nsIgJBj?^K6@v3rx>aWIdq(MS~@XK)>(wF7nb={QnQ9u3TM1b@eA zH3&O+ryT|aEoltfC|fZ7Fd&m+MDlfj8Zydd5RrH7+ROj=<20=w7F%W18jp2_olZu0 z$yi8N0}%CungKHxveVw*Iq-ri6QLY0&zmJMBlIgx!wi$+iu|e~87nKfNM@`q%r)Yb zUS|5A94WDRr?hxYiS)J3buidNCO0a%s|?EVXOIj+K3RC`I!yXXIn%Pb7V@zs=vrY9==zj4hUMjFG*&RKxM`DjFe`ae3kgjwa+>uR5w0} z>!USICE9U=jYuFXNWIXi9ljd6<5&xWFJL`sdS~i;7P1;G@FyX^_Mfx)A$iO~2)#RN z)-5M22ske3@$wRHDF25w;I&iY$h7giMPc}ULoVwI-*3G~4{A@S%|Q(_up{=Dy*QQs z2_p2xlx_&!#FD-SLhHyC*+g?uf~#|xX@nf#lgFYSVeR4TF9cwcc;U>j;dSh?wWIWN z=HV>*O_doe@TVT%6Vgif2?HyC6ZuCf_del z#(23UWsf$-ee48FsxfY4N!g=?p2#sf=RY=8J6!tRKs$)Y{Gi@S{^v)s>-UtuGBZE1 z-tAxNt&rK#}RTgN3p^dtS78N z)siC!8D;?>+S5t&cVsDv$dBBtKOB(LUXo%C@~q+FP-}jGMeON2F(4pRH9(EA_9wkz z;@SvNhYA|CpkSHdk=v|QMQzp}9g(^sB}Sy@bUf8OBxb61dZSb)8Q!#cqZT%1yk z2OFp>g1(jn+silAy*BEZmO))s6@pRj2s6I?F9A>@| z?_h(%dt%M&vd0t+Qe-7UXcd-YBeRfem!%x^w~WwylM$oWVz%1puT4H^3~+R!)m+fu zHKCO6>tJlr2z88a_wV1lKk7UoAV^`RiM#{UBPgjy+^~&WJ7Xz8(UB|gt`#fl*JrBI z!t$y|Cp+<+oZ_48lmh0LSz<6yHO7_}3S;cCA%2(NWir-=ev6 z2$+!8<+4y*Q80gEXOu`I>JG)Y32U=|jW&U8=NLhj<)I*K&BS2G9L= zuw{mltPLB$ALlb0R_PH|{dng4VlKpN{m+6>jKOv4e7XVFZ7Z?%R-`1{^+{?uQ}Fe^ zw(l@(2LU0b)v~V`0ji}UUG8z?~{~IfhxlGk&H1^K!AOt zsJn#_`k6dnbe3?C`|1xm?@O|Z!Qk+?W-1AmW_-+G$H;x{*D{MFGoQys3ekSn-VSa$ zt~qhQ%K(n#Clb}mhE?k!vRzGnN(g6BaA-TszawLp_%A(?{e%ek)mxPbOhL z<@>M&f`HT-Jy)*Ga+|H;w5rJ|P>k3`~oZL8Tw@9+34+!Icm+#w9#OrSw#k z?>%+@t29eIICi6FBa!>t)YYoY?Pu>00az%$ zC$yfn1Z@6Gk|qLkdcMEps6wPCH0LTjHRuGBn=9!pl|#Aj$g!WCGR$)-CJEve&y()m z9_q^55-W3ykW9ba7K#ydA3|3%{$V67*8<(I)7?;l!=@^I6#z1@p7Gb(Y+bi~t|Bms z&v4uuGTz!($OE`st@5c^-TXe8HLLGOlV**#jyf!b zeG?VcK zh~>K|*NOi6Kf%N=G_9<^NT$rbgr*R(M^>R;Va`!9>>p3}+K*3b9ap}no#CT-jwh>> z9ZGN$VfP=t&es&CbL`RqM}f#XN@#u-{ur~yf~7M`^Q|2P4^PjImch<^mmkLlKf>N@ zeBJeS&o}%=dhAZ4V@s^Wn38%~8vGFn1J8K_%EB&d^Pb>1*0RX`heVS8m-?Id8ecPe zTg77(Kk&t=9C=@@kJ4MMrwhTVl2(dhe26aMXiKB;fuii+q8|%V`eJ6{Fjsw|(l@bl zm8Tm}O2ce4a~w%4TK4@rcI-%o<5k%i*ZOz0v9WS(fh8|pb)kmy5}-L*=V_G2BX-|Kt+vEqF})~7k*~eZdrJj^Lso@w3U2CBdklkVe+w&dGb2Sepckr zL{;E6mXHrwRcbm%`!j^>7eVd&-G&OfE`nZZ+BZwjY$KOi3-8hY{+}?18!rU&<##LA z4(xMK<4sT(IYAy0^?BX%y;8+UsmG+g72ukunjoL)s0fQ^4%d(^s(mX@f_n% z?1DWop^bZky|kR`?bv8S_c-^2WlC`w?9A``nEbiq8NnHY3omBna;^qlm>hZ+p}8!E zN`Ys=qXTk5PIJwJ+3nfV6s&RLi8`f93hpWe1Fii{hAR*sVJNQTGU;9nI1elfxdI`H zq9?B@9upz$7rS!)2gknsMc#;hL&nNVUN?s8Et#y1iKCsFU?Q_@)3bJPli0BuD zm^Gmfi*4Ky6NNe>>O= zByJZ4S}`~`nO?0SIA{To@=XuMVa=>`8qW(u)8>bRK)MqP(X@9kY_6u#e3$^`lx-rO z4x6zXfM!w1yPKAk-i9bNKMeIUO}HWq*gpgh9P&-#os+XzML!-ZqWn}EY$2Cno09QV zF;+gvDL6yCGcXtH9}Q2i2Y3H5Jw~mhr&do8C@eP(>|bsF^`};#<=n z|FS)Eo8aaVIzgZKSI>lkwd(*@$jNlsEous7;YN2bscPZ0M@I*UrpHvC`jOl1yq47Z zOxwaA3xeLq^Q}p1JlkIp5@R$%a~#rlkD!IS7rIEH?KU;lvbrWe1)5`h! z#Y>#7CcWvVB#iCYn7r!=`OQo)k*u&EiR>_JgsPK$)~Q>YR={j&Yoa=NSi+jN#;X$| zYv)mQ=SAtzDa-tvS(W8K#In>G!C8fkd(7(oJfF$$9qlIz4ISL|r~BnN+ABl&2>RsT zfq6y{KDw9wcLoU(S#`>X;a`y7;d4&~znJ6X&s?Zh?g4l>r?b#K(uWfBhyK7})reF5 zFcb(AU|9QTypMUTY%Br8XtN*A;d-1-I1MFk_KFOG{j&2|iJ!sZ10A^A3q-F={jijE zs7IX8%02*J19fFivnNUb(c>Kcf@U>D;EZh~zNuDpHT*Yav4ykxR;TarIvX7l&76tq z@6Y?v85Tml$*+`_{m{$70xTM6{SV>M9E5VmJGRcgO=3n1>IIF3YT2iq$H+^*zLdIW zs2NinIurTk)UGO)eW*7tnj1#8FvU8OJgdur9SJ!MLtNnCCm>dm%y&Qlu!gK0tdvcm zG{9!DSPeKeLdUrLU>}>>0)kxK?6oS|h9yS`8L7$LEz+Agn-lg3sjcxPlH?21i?gkH zhLVRBix=;(TJzPm*j9U!^f^9y$=C)rY6)(44DjR!To*q@#}**1(2^*yslnbF4o zAy(=Z>1QfoBV|(_7Gr5E`uoN*fkyn)$L7(5h~9C|uXBhjJ9< zYPk{?G_YGV=xK;gZ{1OpQ{l=YRwaUobo}yY^HNU|1w)926Q{#1*U)d0lLf*&<&lW2 z()KESWmqkIFTV`iF89k1mBT$ALrtzbazEBBmE<}GAA8LwI+UAb`p2g|M*Nke_DA@V zmJ7l7GEb(I@^_qgS9>A$_I;c*N%Xk|Za6kdk{5D2f&GN~fVdU^nL~mVio3Wh=#n0rHdea+Bm@)K}ktahSu@>Z#zsDtB%&Bh)+exo1LGPxhc?V5B1ms@m(_eE`+ z;!+rINQ%TbXvc`{kMW;{tl)=gA$Jaa;WiH!mezpgrc7M!vLDEUDEvQ20ZnEK@O-8gRO0f$hdmY@IMmc0H2pi_$_hYCddlxik!(YHzSyECIt-Xm_4Oz0ulW+X=b9nvet*@#d zCcjh8Q+}2kwnUv;5TSlL=2U0AEHV%U2t+7HOFN)qngDrX(9V|vUrAi5kqTaj)w&XHYH9}pBGNdxJW`Ktiq!>UnS3kJg zg07RY_}KuO00AxVkZ}_tgo+}+Q+_Sg$SeD=->E9Hd#e(2N!ILmJyJGH#N1Zl1AIfT zF~j!gG7>S^m^@zsp@E9>tpw|xpvc4uL@3sk)iwpA6gmW$#GAT+%Sji)`^F2;p~6b= z{>L!3$n0xVrzU``Je+Ysu`c!2xe5VxuQDn-PT|KnEwJ*CuAlP}9VVuh1yy;3)q%V{ zPbf>-x=Uh|aKXoVY?^ZC307Y8vWsY`i)paPJxK^5^yO7$q_`(6QuT(W)gaChu|5Z%8wiy>SjYCD0e{SCRyE9;*PI%aekWF+m&Eqr^8i(`xk6?9-#_J z>s4$fPU2>zYN{Lc(UJ^&oGWQfO#6b1;Os8G<5!c+&ei#eb5%0o2h@cxE6}lv_cA55IsRehNU1>P||KiOGOF)+Aplng6jF>7K4 zhTll8C;L_!ar-szw7bOjEj!IfeG8@i+(_83;NL*F1r@kF0ttB{S(@DjH2T>!nW+=b zlZz$elx8ay3Eo&uvfGJ;f0;U%NH;>RFeEcs`G+jtlRVdRnvAbeWJ1i!l`BWB6fXVg zq%Ui_y?|O-n6PR5o}dW zWmqypdjow*m4)4i77G?SpHg9P2o+%PvDZzofQzN+X*jDwTFQ2?2umV{Rx0unHCAHg zgbIt2Xn85o8M`|tixh(VY)M<fTYyo#ClM>6F!}ef8rqINARP4 zV3^u2_yXhxxl~NH2_SIdeGzoZ4)x3l=NviHKIF3l$_V^2It?fG5r7{i!d@WwcZA0Z z-M|OogSipMdU4<^g6SaUGyJ>~hn;io1=?F-WHkq&zv%>Jp<_6`tq9xQacV3PnrWfV zAUyp^TrV5(#x?xo;dA)sQijr>G&pt;eQ;ywt;1fns)FKgz;TIy32GW#bhoYpR?fwq z0x>wQZ#zzSPtr48gyV!S7bx-wlDUFM$RF<%W`$6;&PfkteVWQx?&ex`<%eU@>o!`R(8)6!x57OPnHwd%Tz zViFRL+0^8-{Y_rd>Jf!P7@rW)DGg5Z9wEcFU|e2??ZxrDRYS)7 zYSBw|{w0JgZI@egSI5;CLVOOhj(Q8>qt$r}KE(HACf>mq|0Yt2P|oh@ z_;+D3VP=fro5GI4C*yugbz*$z(;sY8Su}@FX|t@pG5j$WpMuvZ^62yk2=B6`DGBf2 zA1qN%cZWl=C9hD`P~{idwEb3`BvFWbVzG4O8-s7j#!M(#uoBV8BWvsjgYBPw?R2iD zw1~w5>~oiP#$B;p?F38etxY0dsyaiFkmVLuCOSDo+5;V(m?pF3jl=SDmKFIfFq9~N z_UJnt{vJ~}SJL}Jw2v#r#0uZqEuDTwpA){Tugf=#aB&4DuaQjxC~xhLe*hy` zaw`G$trHG^a0a#!KzD~rVTcW1<*c5 z@!Pa9PhnqNzn)G>+){>phq2%d)411?tIQpkT57+L&kSxM>5WWACh|8~z))Ptb!V7Sy$kxc z$0|<*pDO+O@$<7N&#Z?yA`om(85b}1E^WWhS+E+T9y$u`B!nv?tzhMccnEyGOLl7X z81H(79kf|D!bBXY_u^+abFUwT9e%FP2*E=PHn=uiY8^bFeSu->Vk$^zSy`f2VlW(0pyBm=N^WmywA&-%jVw zZpg1W(pmgvwphS-QcR?fV*Wn!!^6XUbv3rjPG`8&>A%w{ z0)3oLUr@O-T%^}uy))17EXvf)DXJMQd*5&orV=6BZniS22_ITSPbe-AA&U8iJB2C{ z(BV0W#1QI6pP;{}B#=utfB*TSI~Nq-)gomd?c7vRd`r2%hchizTgiLfm~mN-?QlAr z+W0k0z(s80Ieak=(@b^H6X{{Y`a`4Rr%@`$+E@IQzk_k0@dQF`Sf0B$V`@1=ksa%e zGsYSSLZNt*)>^8h**NXs!Gpb;G-*-*(xG^-rDY!iCDFpA#omBfKXN&y9X)#VyoN?i zOJnX2ROM~lxZ8nCDueyrjgl1Xei7q`GMmAd7%w$A+3SCSB^F`@^fbub5Shg(3?JLG zvi?*ZI4M?q4$&}7E~olRi{kY>Qi^4@m#cgZZ{u;(ZJVZxZ zm~ zeXJPFzE2ES;_u$=HG*PB4Vf$@ySxMOx&U2~y!K52b3GALP>s+#m0|B^fx&~6%4LPQ z4^%=$s~zm6`j@8uNP@Kjk^lo=+Mf^x*d5SB2mmoFEZB*qa-*=aU6x^~ElP~Eol8`d zd9uQQN#|!77NICxWEgD5P-K`VVErVZC%h<94CFe<@S|GQEJXhXd%O1Q@W?$P7+I-Ek1NOOk2m;u3#==Lseth%oG+u=r`=xR)5BfXE=>( zAW`jQZK*)3@GSga_s>lKl-H_L7RV2GM(=UUHC$@kPDHp8Y;1=d%eG67Rh8tI%eQ_0 z?{O%b3r*+Wk8#X(vCY34R5q+waTm!^41#d@UJ<4|5)yEd&=&LsyqQ(kkm#>OTHC;I zt^5Q0qX<)J9l}17Vy`Apef%}z4ExzK2zA}(J!)nr)eD`-ji?-(`yJZ1pZ(NiLECFTP}r@ z#NvjEL6ob-1EPE<0nv|e)T9hsM&uJ@f0Ibr$g97D^Fd2=-Cd$N4u3jX7 zWKI^8quh0rTN^tufF;Dy2)DR$C<9geHN3=*J~9TamolJ6bm z(C;0NkOgs+;aPJQyytKeK0&+62 z^3NPN(lYw3e$|DcVNf8;+uJb2f|b9B9h)u1S%j%`10y)`T_XxtOIaX=9o9LypVA!R zWlUaJwrKtR&UH9$n;lc^i0y1LB1G%+W+{y@)vgnjxeZ%F@b55l(&8g{TGnzR^{(JK zEc!*QaLfIHu7aD@XQckyT#;=^7HZFE-GT*{a+pzgMn5gdYbIZ(Nd8{Edaa4>W%&UZ zcVE=&SEy^K&$yFC4Vr%Sy6URyYhE_c>n0UBcl^XTD%{_OO;**Fht9#bGaNXfqZNdu ztMJ?bL#Wz)C!S=%N``=3`p=qOa4vStw>0-7X)X^9X2@C9prubz%p7O>ve?R==3u{< z4LgOgrE%#>&}E4verxP zb#Q-IM|gR8y%PelK+CPe+Y?8h1CZ&zt2PK01Me`f*zQ(yftpX#p0}x7C!Vxr`53h#Pl1_y*3#}qO{}64}b4ca!eZi$96Zmq+@(?gu73d0rA}O)>HV2 zHX<%^kHgwI_GlSTAkMCA-H+6Y(23y7);8C|<_&9#+FR0=sCPIfJB593)F}+(2V&cN zGw3s%wrH_LJ4HZ$y|RViih74Rv1MxA1;F-(Q_^A}I5kdE41{9H=~|ke;x)clwsc-W zi_&O(xLddS-MS4t^@u(ZTcyIS5!mlU$?z}DRs%K8>tu{?o!rAb-?H77E;+qq$<*rA zt%gHOuK)OGai{)U5|q>z?-o!s()AcY*HY(xbV@2#D$3sMTNyhrp9CwmFbnL6iFN+s z3ue%)V;!Qw2|IQ~FR*^dHLPPAedshSu$U_sfljyI67ks%jXG|)3E=mx(sY1Ldc|iH){PSF`!0$M zj94@yzfI#Sk|=O`xb#luO3x6b#?Nyyxhl_bh~97ISl&x?{wBlDE4HS{DqAZ-S<8Kb zb%u3W7%<_hVpU^}H_F18I#3C7^Zh9EYKz8-hr+}1JM0UzMP6!jixUiuj+`b1bBNc;F&$WdAPE^R+?mP-Nkn3^MW7M zAN+P5hle3Mi#BJ`qOC%jGs~u|n>zv#=V`86=n% zlx#5wmaB$@4JvG*8PTtIPZ>5NOxRFRmV&{d1}ArIOeS$OgRnRYmzs;yjlP}1?YiFG z>WVY5T8bR&OZqb0u4L0Q;z5^-;~x;q>2vBwgbHt5$G4Ggdq~Pqlxw5n7|K1SvE)T1 zDE-Gi-#q7j-9e<6eq%wF9=l5Fn|3y*44ao?_I3VZ0 zl^h+SzRKSuk@SX)N>nKsG!-6^LdaAWLTFmz(H(HuUBr*Mc&yld`pW)p){c$Ct@kef zvD_24vAn{GT07ws1EKk)-0swrTbPI@FmrCe$E)NVMIr=!6klzho4Wsut+&nE8MU*? zAQnL=SldP9mAIP6=IZ;+p8X}oO1~J$WAn89dXm~aHW%Nb#M?Io_fS0wk3~5qia$p` zc!%I;23zD}$@AwCd}b=8KJ2O6C;B!}bSI1~9=A7I3!8=t;0O^$9D;j5XsiO$~7*Qm^n{hLzNPtTFQ)}In0tZTTxDmzJ} zoA5r}7srwaap$KFY!{UsK{*MaW8&O$fE$d*6@{7Qf&FEU@j?iFMaYYeVyG54vxtPr z*!M<_;o8rWgn(1Z&uKR$qYWdzn0lHk6sT@#JI-M32$_;^Hb{}nB*M!MQfw9=7Ynt# zNItYH2jZ4w?ZDockX zw$@1g^t>%=$a#V+X*_rL+!p1kBp+hF0`pbF{R;<<3t`;>77oK?``8akwHOgW;+TfF z4vEnEChk|@C%VC!8_LAy&*1_x_s@@%)Vk9F+ZH0Q0tJlC5?V=RJK6 z&7zA&-%TPUPh=M2jvLf)Ukd*o8NCXs{g=y;TA z!Lf*z4GIQwAJWM}Goo|V#jWqWJe1v_nAh@AyVQ6XsbSKL$QSx?*0Xsm*VRnz^{UKc z6^Y(CDa&KOJ+Go^_vNrp@Nx}mkQ~Ae#aE^4t?o}5eT>rS*Gfq#T5L`#*BzWqG?n>- zgM1hVSWn}BUt3QTYWpR%oIJT-rShmi zrAn1Po}7q9uZpH?6P|2SYE5jya+}Db_|jHZYrLq?QIy6pn~bxv+Tw>ue_Ps;a1SJ+ z=`5AQgZydXv`0N~sC6xh4fMcS=)@T^s}=IVhirPRiQ!q4r6$g-WaYKSk6|L~zM%_Q zVB2s+WviZlW*kmh1Q*_4i3+zmgns{pJ`sn)sm{T5=iv0JoM6dEDQoh&qa2qo+eRYv zjlOjBf&j}qTkUigy)VG@OqvM~ty4j_L*k7#6r790Yw8-9OS#p`Q^{-eT?kP=Vc6AV z{??nIU-aBu9c$sq3$9`l4`TeKg=R#v^+1z*G zc+M1CqgJh2qt>jsg>fS*FO7e!dqKXrq*V?UE3ot`Y)e|$vmgt+Nn2{*Tc`NT3M?gW zr#G{3+M;Vjjkz|M9HT^XKPRuVeyVsR=33BlLD$upubGZyt}EOgt17ERV@=#zgcDfp zEP->>QC6}V{~nLa4z}hf{3l$P&^Q@SC<7@lezAf0r$hVjVO1WnDP-v zGYI2ZyR`xQJFb2tb?WF+Q-`<lc@QiuTZ-| zf5&3X_vZDA>4ITOOA=1Y-Kx9|YfWW3k74XD?%3w*5`&+M*LzoAk8#|`!h(3hNt&{= zL}mhXMVMLcb?`E57k~KMfYh0K!pxe3H{+e$+pMy_2Ohpoa+4=2A(VAT_mwG zz&5#;oun$q`KsSCAwHh}+?afu1atN}I1cwR*_cR<4W}52E7>MqFrBZ%Uw=1%YXc3* z_7U4n!?i&(uR}+h(bq5HGavS3Ip>LP+$Rjf<}2)gBRW~w$BD_g9ou&_p|e*ExE(vr zl?9qF$j-H6-5@VY=?YTe%uHTao%=lGxZN&>G&#@nAjLumht3#~~3MCH!W zIuT)1hOd8(v+UApPqtCjBCJHw0|Z(-PzJ(4#$`Do_URl0x8?9a1a;1Sl9}o9Kl%W3zTxV@yiaZMY3fSepa*U+!!1o_zb|AA5Wj) zm@d_A`m{t7wX1PNfS~t}sMu-V#EF_fPbz5`Y))Fjx4oO7+tv{I>;eBxtX4Q{D6%mS z8$qX!oyP+QtJ)y@{YV@$$}U;z3QinSiqcv|Vb&V!2_2>z!>U*Bc;E?+&Sw`yo|B-f ztA!sK2$F^TRcI5F9nbihQQmQ?^Jc|SP433u4#n%-+Af>%TVIvdmE>}0E_G5qBV+?YH$0^qwYBMvnl)M?JH;D*Q2?EQ-9^D8f6aN zFN2B)<4rPb36AGi1L@2+@NZ+6Eo)N0eqK(xxVaxK_{#U}+qXW7#H~Ja=Ioi(*KtHE zMz(ZS`dNgKw@2p77FtyBe}{eBtF;70ZbeqHO6+tcJ`TdYT`7p|9;zlQj9eX)cC4uV z?R?-kvEauOCtkvHh-zSyLa6nrcv$mAZY2k{sW%z0VxAhc*F{kCjps_Wa4Cfd2>$n-f2e!EhfcLS1@uaK5B|F`r>;Xl~c4xkGD>Qls6@F1RH@_0&@QAw`N#O7`H zNylk4tFw5mNz)^(V28UpAQNC+jjn_cyQS6gS#0|jQMI}K)II}hl5vlHlZ@<3-jePX z%Kig!3^e%6YqRRmrsjan%-rIGChKDH)^(Ku!ta^vTIB6#YE9BQ3u4C9dEh5c1I6MP z`&l~`(J;KHo=xdGE5_V|fvwv@ne0O+4O{&M%Ha*@4>p~p*5LKiH8<2bs`a*iJ8X<^ z694lW=;K^k5aq8^NBz*d)v6zY7Rn6iJz=6%Gb}Us*7d(bf3tni7<$H>cvORWHre=%oSMXDQt`VWO zL9~!Ke%0{d@XfM^w|l?4i-Hh-w&w^~9?`RJbL12>O4R?jZ7rfr zFcizpf1%nTGB$oA5gH+H#m{B2^7Th7{o24$O&NxI?pl1_CXV(`CCm{$Jgu<#V)x2R zz2{aI*a<1-e*1eVR*=ZCc3EI!iTGWh83hs#X?}r+q}KOpX?>+)^+;zaHb-eA#X>Gh zp^~YeNwFEEt_&;m`~W*xHd$-Q#o%Oa;pB=c`}=9(Yia6zO(XfnMicUc?G$L0@gr>m zNq9v;)p!Nti-Xz^$~Y##rr~t@WS=}13@8J&sj<#jFm!&9p%x?m*1-AP6vTu3T1I09 zb88P$I#4j@S{!TpQc>bctS+9LjU6Lt(iYx2gC7nfSrIM$J-*_baY~3)Np;MAD=k#`16~V0YE!9}_EXR)oBSWE{e zURIPNO+*MBqzntpGsg(A;wj4Zk8y_ZgY*RkgH8L?N8bs$*S8e~`dFVOD9ktjGHHmF z%LU-tPYL0&Y>0!^dMU6+>B)ikiI+-iki<`S`QdJwB|7o|C+88Y>>Ea3hG)+>3>8?J zpj>O)K#0K&q+lf>Fhd{*nu>Ls6QU@Sc%82ZrFrv>)60wRrSp8$3`cp3z+$8aR82rk z0|D3{(^-lB__PQk6f5Qo5{z$~sSeT>V5Pr6kbn!Z=`iRNl_p3D04e;HKnyhi84@It z0tW=Jkzty6%yEWJJ&F6ZD-}F-ni9$ki)r58odY&{L#+_*v(o%<^5ssHr9Y0M7gxwP zo!|gXSATYjtbr2UR?ntCR$MX=YaVRY#5>W98|41x0;JB-N|62jI>RI?j#;^CWiU?J zXwwLZ`aMRj7uF)lBS6fghpYq zLWaSQZG;5d1V0=JgaWX_Jzbp_UZT?yF>kCy)7MiF%I_i3;+F`aGYW1i5CKv?u${{4 zYr10oOj+U1!T7NHyD#5BySf;fhibn3njemy>Y}Q#VldY~t^C)kqEp}{vzzac}2+=SnZ;v45^a#P^icQ0t#DBjAa@36?B?V#yN>yJ(4J{nzRe2>$ zKGSd}k4vub$elZO>_~!+_v631^m>eExFF=N%?9JYr^5T(jIsPyd2jK-pWk~=?b9^F z$1N%?8X)=`7EYB=rs~O9I#%tMMOS&J@Rb-nW5&!GGlI!O%>ryI#WmfcdQtGvtlX>D z`Xy)aUD-@m;YWCfO_?Q83MbLYZDAOLuL|iv1P7W!WEjj7b&+8+vcNjv^^%d3Oxyo6 zdfUs-1QU+5I8_#dpRl#Uf>nD4dyiM>A9IFdFzovo%+U1YSWq}fTrs%<2w9#>EY^{b zcrgNl5<*r>Fz-Y{;0uYsS@LapxncUfu@dKPFQn6;F z;TVR&3T7-m?z=_|#t~;z+i)^Km`U)$N^S5_9?RA25n1Gp+TalG6?AU_=Mlje92Qi6 z!wNQr$*6ijY=bjd+l|*ltoTy?kNIQJCt|(Lz4W*rqp}VBz*JJzCzluqCK-Q)a=?7? zD(hL$D%VFDddF-bj$ntPXYo3fXGSJIrbaCPf^jQ2uDZ=-2aaMNL(xb0)6#9gH8_q2 z9(#a!)LSr{gPnI;+5t#)rOuDB624g*iQDmDj8nqdd)8SN;>T6&+^=P7zWlCRpXnjJkSwPBV0Mk&US{2Q^KsHgj1p$~LYyq4ZUyNEp9KZ{0{(rMw^jYNna941k* zO+;k+ zS+FJBW#a?*B|hv8X1ZlGcm#YfThE3q;8Jz9TQ{ITHR?g!dF_kh-hSb8YcA5u09j(YISMnn}yI2+FgPvERQhfT~)qt^>b1~ z8=iPLVbxNmJ3(lCRzpYZ$D@vrcjS0SY*?yndWb5%ewL$JohM&8V*Q_bJ7Vh=Izpuq z9Xf`f;hXMgZA8-@yMGAH+29!6eg@s@}vmoMPL7<0~uC+JE5q^grxeh0{FFRTY%ThOjzQdk1xmC_sDtW zi^BSdLK6mNhkmF?e+zT{`0h-p`y{M_8qzdE=5k>+g@r{L13I4^=C*^Rg0)9+B37E1 zXDGrnbgni4Odln#_=w#1(1K7dfaz_WKL{CWg-{zEtN24Yxy!#z^9h;BggefG8R5c{ z3fL_`CbJWezTrYds3%N*jErOmnUG(=AT65vUMOc+fw5SHei>+k;0%hclYibaxt9Ea z5F&ZLymNyB=KA^uaF3Bz0xeyd3$ho9uPcDLxh|I-Ln?2i6jQ^BaQWKwyi^W^Y=h8T zRo)e0hme=c1=gjJk`O`IHvm9sLRd%Y|qN|TdD$_Bx@&7XgW z6~SYFUujL*;>W8@+o9E0@Z+Pfb?hfxbf%~NLpa&m^zu~A$KqzPUVFxABBgG)C@lq&4_$S%4)DgN<{By_E&BMHXQE z%#1*+D3 z{STbkUT5mpWBAC*vv>z=mTUi{4pef0@riatb#deBkqY32fIha?tRe9n5ZzruO>gA6 zdCh|fqjtrC)g{WS9hxCZ+4MP z^;!a?QMM&U!FSTi9pnYK3S!VF&)<1OtTRZPQVp{ikp5`mDpT(53 zj=f`|gWf4@z6guv-xCpp8WHkj!Yi|2JB+t%VE(dQTEG*tE1e{FvVj_7bUHa!&-aj!}8Yi_+;f@Xtw<`oSy>dv*xta`(?5_Zk+= zU$7vI<>iPiNys}PY@s@L%CH)4p&vCn33=GWh{+&o4mbcxmj*~6L*^MI>fDFtpPv8x z)me+!*PnCum2xB`B9lBk6WE9|5-RI>H5@KKSQYd6tzSR$v-RNonM6(xE2z<)wU;Z} zha}ik1tFxTGd5p%!xTwHFSWbyaZm&C*~kJtHC6iIbf2;-70_r&e2mq8FJ$7I(sH!m z%va&GcEjJ=FhGBQ`7ob(Uz?uNrwH<0x9&WLiQb;u$%ADrzLU{W;vr5MpK|3(d_39L)l zesf-#HXF^shUMz8!vxTnQW#3W^E^4ON802jP>{#e@ob2>NR#d4d}|%6dVB(cJzp`) zyyv`|_~usYhc0+q&uK9oJ?oBGzJ1$>sh)-w(=I%frEVS^c75}+j+0hf)x-{=%__D< z0-=Vi2^Qy)771Dd$*4&%^gnEF2*F$3(HYqy%nk_zLkTaDVQ_@cOfb2{NwBgo;tA1w z?-IuTSkz@P-i$t2l}sMkO(kX0aQ2ZLjH6{=mU+r+8_~g*eqa>wy^2>YmXxJT_&MWE z4A}LAx`s+~{l$)V>kp-}w*jH%U_$TUfR#!>X#5`z^-~locx{6;I)tvEMo(>B9Zj}d zp4DGEsDVjmhqYGa#Ri>|bx2g1OulbxRs10RC99XCm;c3it)6kIj?dXJWkXJ@utAr& zb=EPFwe9OH480jwN*c64v`YI_;F#V$Q68p8p!~&th=Bhyyd|3czII9lX10)ejbL>QjZt>wGtl;w9yB}^ z9=NU<9_U7MXPulTS9xrY={-%-jR@d`swiUFm*F&t^fo2oxE3=laKH{{PJsMvV@*uv zK2FYlQ>E13LWf}+xxxzFC0*PTqBIza;#LjmHGUOX=gL~ufG++OvjI~0CoApmQs|iFAr1c9k}8 z#GXbtR(JI>tj{wa!aFoK>?dB>;wzhc)Z*jG+{1K^uWv4C`H%+kkyw07b2-y%!{5ZF zH#)cboOJ#PeBbWAr-HisR+gldozKAjKDJ}*yao10C2QQ-c?;@axc%eduj|on zwoqG;S=~NXG*8+vmEq4ehiNGXoljkWvtgOuNU5HB?t&a*T2xDm7hgh3Y--8)Z<)(s z>S+x@mA$%m?=F;&UZTp$3&I%@N*a|IS*%>?=;v&xrP_^)&Cmd?Afep!`vBKjl{qaq zieihZ8L>rHF6@kllONk}pR}BwIi|;*t3tJEW)X}O4wD=e14f9w>8a|1p5wZR{QI3T zFqlxooMFVWNCN1is>(gvs|ZKJfA%Ag+%bFqRgn?Fr=n zF2>3wL2iP8cN(gn9~=_%DHwz%Ibc4yV6P<0?O;k!T>`(!?-1rQ&hE8SX;VmZd6>$K zk*ernx?8Hln1?BGG}|1e)bV2rSd>$s{|T&NF7eHwG_$8eVjwM!9i7IxVBY@$tSW4; zajm>VLZ?B5T=(1}$FOAtPB<^3gxtLhCMz9)YY~{X(aYlJ$Yy6&IdnWYvFFTF{H(nN^NBVs zdjPfBVDkEFUC_^IAF-sm()3pq-sSA}cI=|UDs%s#2%%|I#onZL%%8@+R{=D(NHEw% ziAJ1UeKb~rxmP?DpAI-|&}55`F&g&VeUVZ%xe|f0l*&7>Ap3v8x=MmmSfKY^F4)(O zn2XkO#BvFNe#ux2K9Mf}2Bu&Goq&a^c3(ge)&4y7}U_;|e*urG+-#>f`*R#LhN zRcX~~RNvo!C$7X^tt{iK4mN~ZE=OQk4(`@E`*a&cJpWS2hUK;8 z!WfGeed%OO;RK&0PmkkH^~#dP86^H!d81$fYeLi299YpQAWr0hMUd=) zhM+)1ggQbasdKrEB&}^rY3Gbx z2pixC&d`oBlnLa9&D2K&B#JZ0o#GOVk8X+n;uJ z40M2akfcSjc=~*cPas!65f~P4ZrFFZ=vjjJuO@2-yPPVmeHn|yroNt)ec1uqb8728 z?)qU`bUA+qdtDTLi<7l@Udp*#(BkFDMf82nZ}Aj(KucP@99f7yb^5NOPv{^{*6Nu< z{kQ#o?fh7NFkF$Cm_TWETwGjMh`on<8a8Wg4pP22*4CwdjZ(GWHP^mlLZO?QHKA&j zy+t{b_EsW(S<>1pOZVkt;1BjNQK2+CxEvgb8J{63@%rgB<@g6Nw6dHCZs zg?^@fj?_b?b=b+a+8YUk&V3+P3al(pUy7>BjxnA4z zPcG)4BgclrKF%}qPqx{bA^pu#U}c=G3#1fDQ8qu~X)8uIEat7S^q^Jf8#-blvEw0K;J%-F3RacjPas8i^ zK(D)Ws?#(51UdpRWnbo|;w`mWWctaTc&{g!aL;~~E+MY3EWvM_woMY|QmXV9V`x1) z_()xC5JV(cx{8I%uqA8^q{zSwnF+oXc~C=H%b***tkI6janZ~hesqbIsnhMZOl*n@ z9Fys3A^~T0S^L$W*m*ifh83)!esThy>Qd%)g1Sj(!5~RmdS>qbylf%Z*<6;E0Z_GE z^uIwKnqirg=i7_ng?cC{Yg6V0#g#z&MYmjO(hfxaeykcKPbJ@PG?d_^+0DIoCE43I zZ>6Y{=vt8|8+eq&*I}`@($227q{QHHA zrXB;0imP_cJ!>0@f#2&omKLv|tf*z7;}cs5$x+ZpWxDJdyH;e0~f0(6L%M zR#Scfzc5OF(J_=oe^V=Y;56C?TI4GOgCc9r)+bba$?sQIFxuo=1%Ek)(z|QctceCb z%p!3YwOb6gu2m(yG*#qrp|-HD37s2PNQrJ9bA;xm?k6 zbp2&KP6~eDiY#7oS++1CS`jUl;(~X~Gkmo~aT-0ttl=LgLMumbm9x~|s3&E8S>6TG z{iPYlQ#rT_2$ad0%mLt8N&9K6zeKF?{WB$0tYq?Mg5G4q_~2$}iihAZ=+8AyA?hn&lj++UXRysSHJO%Cu@>pJIhi`vD8n*lsD)JR zsSl$*i(Dod{qsv4*kST7A#X__lpZ1v439u8q0UCKEShA0 zD^>mC*)%{1$?#64_+`Vx6YhcZSDs_~iqU^RRy4*rOf)VR4DFEYU~Q)LnW2_DoIA@h z*faXPET5j!;B;K{g$#o|T40ks&+{84dh9&i39vUc=-S*gID57ZnkLzx4|xVdKeX!h z7+G(Wojp6@3I4OOEkJgZ+tlSx9(*A+v%vYbG)ccVA4hwCfot`C(T0L z7`A{#X4HU?nnc4{yj)XL7X0(cD>m6hHpyB&P#g_!jsPRQy=}@$s#qts-EW|*(CS^I z@rTaPGj^=tS5euEs^;-yhhB?rEZyE5<$0gxNIp6{E);0J1FG}Gq7odkh#wBy3@M2! zWXB*PaM`yrKeS`0;ys!^(W~fpsnzXZKN_O6=hBDUu!eDAYOCCi<(Y=NtMYd2WBo*- zikYv8Vg44HPi1{XSuextJfl{r-aJceOW;a9j8?HGs@cw}ht}h7*#loH=r(Jf@~*~x z8oc$(U3W6x;rWWM%8XD-Q`WvBfnKm!3EY#^X?@iO?`vd(t&F;7tBtR(gu}%_u<-SS z%8LBa$6lh|IBlYSv+Qdkgcdxlr|{a?*B=)MTcV0jrNQL{#im*c-2R~Sl7KbAS3umo zeE`M5MFk8UrFUk3at_`kNwer>7^`!g`7V%-6t%$LX!Q@h@}d3WDpOOkQT9n$n_Ut3 zQ0V2GS_pke&Ca=%&*<5X>#LaFzeI7v{~?`g&?3<|^SH<|{eF@M!bJb!l=qB#FwuXh z)rOU9o|A5{+(mSG-`ud*2+?dW~2yK2#_IhHl9n`Tp|5_P*y z<{MTTiz1NTztWpL$M99&M4hHDb%V+-W~{75QE&sSvH=%k8-a$sZD?ZK8mMsqeX4#6 zjF^Dfb+8rlx?Pi%ize7Fm&N+C^bdt5Yq?a)q)jbemGoDdN)03Efr=tlE%7~I4NIqw zY_Bw0N8hV96EZK`Q0EwhL-6QRKgkyrHG`Gf+dpMf=$~)5WPq6eLVjAQ)Qi4eOaQy% z`6}mA94|a<#dc^0DW4~p-7dow>bCDJeykWtd|<~i&NkB#CR$=2CR+Ik#*eJGV@wP{ z^OYgPnm~0h!UJLGZd3l?OxcF z0o!k5Y7D@>cEVa7&1~s}{kQRp|MHVllFIK3%}^>6yFi02aC1Mg^BJe<8?ZB;0|sAX zlBF91ZR)$p0vk_b^vEE>dtykw1^cNwd;`z|*9Ci3r)ZWL{s*09guxTd(%0Uv#$WwNJj6KF`jmD}#6&&R zq(Y0T<1tAz$3HzTK`p*ePefrqV%e9pC&aOe)o1oI(sMZ45xERkiFw|f*3n$}L z$fF?m+(B*6*(g2>IR`xTYejZ*kQPLb5tDu%F~SV*1@%8HfjpnP{Pp`Ks=&5*j~a?h z#a{*vEf2L+XBMI6e-RR7Z`CphPdFXoiu~hI3icVgRMHZRNfti~+Y`y5Jg^sjY!6e^ zNUZ=rvA7 z@k|6hOq-b`Yk_%%1(7*Fv7X!uCn1Jpz>r)`5`0g0$i7V15=1o=&W=e4})pb}e}o z_Z3)%w-LsoIn}_15#sPlBeWqGy}yeM#iJYzT}GmwX`=4;OI=57on|G=&7U$u3%Mb= zBa`pZ)GrElnjGUN7EbNaar9Cp#w}D+z-qzdrd^W2nAl0Meah-HfDU51%K@sD?g$mz zNRu6UO{f!fHuQ|96uR`)#7=;cm38ze^l&zZcq=~sXC3_#7_Up0kf~Uk>@=}NKtsjQ zEq*I9HSCpi9z2~jQjK{VmM9x$fkwVXG*o5+To!U;&}vF2S>#P}2`uBLfig9a>6b<~ zIzVO!|8UANhfgdZ&wE9Ep-;T zix|(dcsUXxwco#k~bX|w9)U+>sr zwTk_NX+OU}m&?!3$Cd>j`d>A35l_df~RTLO)RRljMNTLEEz?^c%ide2>4g8-=drZ0HdNO5@ta@};7AeB= z#u?C77F>b7_lFOk7Mn>(XiWjqz3-jKAbVxuDgws|k=X_n4C-=6>}O}Jehhh9O^=e220LYekgM+aM{yV3D`bR>*P@eLWC$A=C_2kKu zKXMa3@zxk#(3TQ-C6FH@ut2Cgjd@xMXx0x z!A@Z|2*IPm{I|bjUb)0&a8lf z8lMi#lx^F#Z##?e?_9}^gW&L`zKqu!`jws*uvs$3JKCw7PO12TWr&T>aigi-DxSv@b8e~$FIdd|3yibgv*@9b-zjhU2PerP6k~fI zz25%QT%CvEqjyWcj#8A+{gjF|#La382Jb$U|IJ3&$W!g+l&f zWzbi!A2D$qmRSVWL2&r?5b3v=9W$BH$OxY!0K3tacT3P zyOM)6)hG&IlFq+Yz?F0j3?@ij{)>M(wyZy=j)S|kBPpsZ39$I0wU4qW&B&Z;2g^P= zpF|^%|MZc}E>+I$T(*y0N99z_aOyT8Smx$%XF&COn7m5`Q0Yg5oMJ=6!;NpQP3A%i z8|#^3lxQ|LFnR9W&%C_6#0T_qHpz$8G4LP4_XNFSfcHZSXkas(Z-h2VB>4S&FzM)= zU(-i8n|-ZK7wm#_r{|Ktp#BLGj>thH2%dskovaVir*OubrV>z{363eNaA1jf zIB8@go46HWZSk3rLLM=eLo6;QY!}3Z@h@gL29@7WohTMza7@ArbYdWn{QXh!(HI9e z?jy&bqc)qB^RKjeHogwVok1Qe9pg>>m9mFv*ewB>^nH1@fdI z*3@?xHk=50*W_vi)&usn9IMIRbtjBJA<)J^sx5Ocx4pBWH>>}fjxspdo8x*adDqn!T_U36JznJ)6`@-BA{J6PLOodnB z6R*L>e|=yc=Ob?(grYRu+h5TeIb5Dr`Z*- z<+}eJyqEhJTf!`KR5-xc#N1coHF^l@wd6gV)Ps=?*Wzu(cnmdze)-rY{rWw{JBtbs z%D)S49CZ3Krx`_Oid0<>;F+loW@A(CpG?8njE_V5m0_E|fd#sJ`~u~AJ}^`j2!lv6 zREZ7-ie##607-Rrl<@<7*qD`F6PibajjLn1>48NB>K;co0yNyi5XNt6Ky?ru3}zRz3vds zI5#5{j&LWbEjY$A>IvdL>|7?>=d9xVR!{RxXAH$&v5N9^Eam-HU!1LWG|=`r&U#&F zZrCj&43Q|6kei-!T5^vsw=n-MmTOuZdPlIhHHi)o^KAI{)BQgf9)V~SmCNA*g6u!d zTlxa^b4v3H61_=lnTsNY&SyH>6noLxqPXEdM87p?kvK?wR92%YZ9g;y(iB#{zzoHF zU1UGA!GsU7R#Gj=GDT)0IWhcwzkA%~#5+_IY$JMtiFD6AZ`O9hvQ)JxiR$RrB4RXr z-J^5bDnagzR4!ANTY)#|i%4cAtNo@`iB)yI z4WyY$wk78n;U4{m4xv8!Xuii`!tTWkGSk2+CZzRIJ>}`+;^;fqX-lb%PbJ%$R|GiU z96Df1#%bu8neM}jurl@XmCKhOKzW|CXelDS*ZZ>}o4XszWeo zh@Fxe<5cm*&Y1fJ=NSSmbDLRU!CG!RHOZPTi(Y3i_Hl+R7`>oca+8*WUp}Lc=`%!porH!($c0l=xPXzgROXBB7QgOfUv3M%rNZ zjCD=<*$SayIJUCaH6@@=Ejm4V&>z*U8YT zw{y~V#AQ=D#HLyL7M%)J)yKi~R-JqT`Zc|w)S2GrvW+cEHIcq|jqQMD(_6gVV=28- zMHBOm&|XF)XI#HpV{AmDD;d~8N-crr-%9^9AjD%H)Y{6JP9IpF84nt(4t6NY z52$sh*@HedgRBxmOPN08VOf?_^&0)nn#?z-@#a*yMz_6WQA3q!LT$xgX+{k7=j(D0 zm+J<@x?F~>ngt_Zo_?^~^oS92vT0~NYg|fLd9g+CdaBLQ5quLT3xcjeM%i-gVov;m(vCL zYrZiwV*$@HeC4V0q4KX$*HS}}C-Uy5S4A79E-{4CzB(;lf2VQvMV{s_km^*DFz?Ix zka`qBoqK8#&PUvV-Ux@3AoM-uCW&!!U!S%gmCOnJLp()YB(AYMt!0zp!+Al9wNAk# z79W;jbq-=Yw?Vhc608)AUeA#58EX^9KicXmRkm>w-frzRSVI_s@2SMxzLMm-kCgv?IY~=%;e>eVPEi^=+TyTWN^2Nkz0uRRz>DzY;T*LLRmKp%V z;(h?S;O8*cil6z!Fs;)C6InN_3fga>BSty_o6ccuYU}oRF!efoXF;2LB z8vy)xygQGf$!CDg@({&!EEK7H1%^#c!kJU2zA7j^4_?@<@hzu(_B~Fr#yf%e+Qp|& zbOKSu;MB8D&o8Q)K%KrSu+KW3=I~BHWR!@VKQjflbHRSg1v{Aw=5jumt~q@owB@y= zxVLGumL4$EWl%-tKa7OdK22ZP#+Lm7B;zVfv18_fD?KbtFi@@%p3xr;@*x|h+_;lT z0ywY@xr&OO!@sdOTFsu#SwCLSxl!e3y*q9sLL=A~A(#0UmLbyS#HJsF7u~>~Z^EPJ zqUbBGn+0U0Fct=5ckiAddv?q2B&);@4#rK(u( zMq*1ILIub#9Xo!#XHR^_f%XD~^0e3suMvqH%)NJ_)U)khpnb<>xx6QBEUA*@-;dSK zCCuS}6I+mr-o#w6NlqKWL+&83eSwENVt+Ved5<|`4RNm6 zTBrC5EWXgz346i+_m@DiTD5+-028}s3PBg|+#0<8Z{H_>IMjDlgYnjimZ&Ub`Mu_tgoUk; z8_0f#UO#G_a<7IcuKB&Av)^%m^80h6DxA~^vMn#iuz1Fjz7`)(Ubb&et_!qCVjo<& zJ4&X=0pK3ZdfgdIafHyw>;aBo(Y<3FvHu>Rypfbr@hc5lA)3S-)!Pv7(iJ>bD~al@ z-}xejZX1U|`?~}^z;x54zeLXw^9VN%n6l};PD8YGx?K^&G`C2CeaMBhyl-ruWXC$w zi|j?nQ@rX?O26UrUN?n~9l2m8GoMi^Hc}2MTpGT1wHKb9AgAZF+_K2%H@ z#y0WexE=G%g^B6DCRe52iC$Hyl1G1ne=jaVustNqWj~3@u_AT|#>K9&Je-qTRqMj{ z%SA58`l{v5;Pm%8A2YXuwFLep#zzr)D>=2Fg{hJQlJOtRjBrr0Ht-BidW%WX46OJR8?NYbgj1~6Y-k_R=U zh4_*z?+olpV(O?u_Frhy*_kS*7s+y(koayUSh=ZkWq{%e8>=Y@~WK%@%Y4>Wmf41snDs!S>{}B~W7w zqs~VF9i$_i)KKsZ<o(2jnX$QzH1}=U{aKzO zdw5I5M3!ZPsZq5iVN8vZ2oEPV8<(=c0vg9%;6;wv6*JI<|M7Coy@!#GdH zPtGZ-FCeyK8B{kT+p(SaUs@aRD1A>%%$S7K8#iujnKbDTJu_)l7aneMAc3Z+9R+%# z8;>F6^;+YhGiL_UEw9-cH=5`ex=2(q{C^i)mP?rDbHUCT(`Sq%7{n{596yeR%ri&a zNFfi8*RP*nnz0|YY}qmk5Al(Lz|8L%p3&0*EHWS+D@_AC-f$<32-mao5h^x{7w z-QQ2ec(P;eUjldGRX<-(jPrtHapQaHSy|zY;DT)BO zWyNk2vW(3@dY6!Nc=Ctv*b&9sDC1!(LicGce^ug+egyWl6TZ~Nf94mFeX7txh_Er= zh$(Pcot|AYie!(qM#ktr$z+&x(c}Qh9w$Pm*25Y{^i;;ZUB*wRA!5>VBD(^js#VKa^zE z;Fy}nBPn|JK0?2iVW{=VY%qMw-Y_Qq^;x~drON+srbmP;Ywh5g(p;2EW6grZHPT6R z^J(S-Kv&2#^XAW=ujPFTdud2r$=}jxY!xZgIf~N9y5ZF-;kGOd)3gn>tvsDB1L??o zRrm2%hMkoT%p;WdnZ7GGp(?SIJ}50jqIrvj z(^HM*&dYe(6r~UWk5s#WDPKTI<*2*jULThp$Sv{ z6q#dUkGL-ZY`SDrb+8ZpKwXYqdlO>Z(@;XV5!rmlj4&r1ot zp$n`*f{A&Maxx-o-;nf1JciIG`%*GeQd2JOB~t6JHfx( z7`Cw$wyF1bu_0u-8OU=)ZH^x9@MT5a)8V{wc}p2V&*L#&Co8A?KT^7?Qb>}dSzB>F z^jE5&xpspO%D;fptfmNcv@E&NLmvbW=2q}@q))_7_3O|ENnl3yj+8RvmBkgj2#tnX zj8QUL#MtPwHl7wPV)p>cxOj2m;01%9iWnHXOee%wdgyG;T_U2MC0XIQSbV~B8EIZg zk6A+D$w~As&#?G%$AtIYqSxqvqpiUr^^B3N#~dFs-<30FObH=lokqo|J8wWmC@i_~ z(SbC!#lsP<@6nl6oXm~S+d7!=wVjIHAJP?CAyBb%HDOigh!bVqF>*gluJT=v-q!)U z))&lO$B4dy*+_0VHdP9T)^1P8?WzV>BT7`-0EvZNO70+X5jvV8dB#a%`gV*^yyIH^ELH;Lb|ogB?c{CmST%rb5@fC3*^$ zIklPuLj6H+N_QFZO!Hd3(${eB@Hq{96q=Jma=^h)+_9{meINe`m}+a%S=zN|-x!!eL5>P+RKnZad##cn*kY1%ul#US zPfKiDE8^|r6Qkt;1RnVmG{G_#brnqj%uu@XhR0#u+Ag!#DvWh(8H5g@f^FKgF+A`^ z0&R5Q^Oq_7voJpGhFMy080gJ1MptdG4HnYx5CCn9oZ4%Ysj9Zo#w%?F{9sz6t%+)Hkmo<&7j$!a9Fumqh zKBJdI8fv2A*Cd$7Eoko5?g~qmU18+~y^`<}B%V=L`~(RQLcc*^gscpMZInbk)I8xy z)Y5S*Ep|OrRe2!+yXMpkk>){5!2bglr!*OD8A0f^`3XJ}_6wH01iEgYw)`8Z_Ed-NoZbm;@b`zf$;w*BLKIy9Pg2@*G z)&vu+ZY5a6f=Q}si~NF;x`H0T<5kWV1Pf4Cs&`I*q04y8Gt8JMeV%mSu{J4MY^drJ zD&)Lt*hiZ1H2lO?VtP2siI{U8f#DKcshAkeMUOb^ed!_x%s_Z*p1m{;fv&FOVrd!} z+9s5kiTr;`HCYE0lgqDyEK)cqgiY-F(vCGdMR3B26Zdg~)_pWZnmxdYyP)#_JPU`J zT$MV7vD*4rgcG=C2*5#l6QVmw6tSQ2_AW{YQ|)1TG*@fz9_e;WkADP=o9eW1?GosC z4yqS4vK)*d{U2cxR#ON{@mAcQ2-D|YlR*gP%;Gp{-=V}Dm<}v-sFWa@jJU5X<9-@A zas;@MBP=%xa>Z_s`E$Cm5v>iwe;Qb=Zruiib?dfaci6_OVPRpg!1{`T2}I+y_oTTL z#9ny+RtdE9?QYmAg#cPUAUWY%{NYakz#9b5CHrGv2TFp>n+{mzlLXqj#^1-hHiR~k zg{f$E<1yVg8?;YyVd@C%UFD9+|a9g_wGtMCB4T}MoR5DRddIF{kKF2 z0UP;)o`nEGNeU?gzYUDF6Clr?*3P9`27rxmb0`kL91z4#W_HBx zz_gyBLjzr8X`st*=uqy9)QhFkOlSOU%NNqKKkRTF5^_5vBqUmqNwN&Hl=%AV_th91 zef{;<0dS&^Q~X<<_PzJ)eVgDt#btUm_d%NOwKkx(gEX?ze`}w-A_m=3hZSL7^ z$hduHr`ThLd#zv$Kf8}thDQ)DVUL&cD#`0Y&-n}B!*6{gxG<_5!;Y((iv(h_hm$rv z??Rjo*f92}?KMR$RJ|uGtx~;4q3m(I-O(bglM~tLR`OT4(G&Jquhb>2*NIA8OSn2o z!z;04Dxy}(AgG!gkDK_3#r2Lg4wHr|hP){Y5JXPmsN4M8W$L}_bhL#j@(-a(UxA?_ z*F&Kt!V;f%)Ljy~e*Go#fH&p=ROpAOAB(yp_is?bG zXIil~WW5FJO}6DRy$`uV*?W@!6Y86B&T7%JV*Rsn)UJ{y-J3+})xJ-baCD0=As;GY zCHp_k`5~VfKBI1tw1I_C-X1W{aDqn=Y7FBN_wTTwkYCG*7*YpqNR(za;PLX`1wC52 z^i`hueEAB+_&H{HB)R5+* z>_?_LV$Unk7bbDKwyy4D%YU_%A(7{Q`f0{b=i_G= zT=ujfhq?9D`wj*DGRJU`>3QRDte@#KsltuN9H(S^B|QieL1+v-e>-GTh}@ouMtc7(D`9j>ZyZ zx)Kwi`n|vqB${$`NoERiN~a4QXhkeT-1I%H2-N%SQ`+WYBCULmM+(S>x@_ z--DJ`QxZ8DU@1xe2iEprfNE3&b5-|K%xD#%+!;N0-99!=R%DhX5M2PZl$!bs_?aZU z`|f~}O0#Y537P#8I;TqS?u*@?do^z&RDZ_tqE?A4F>umn@ZS>RsR&WbWC`my|Oc_RgrFvYyS}J zYa3xS+&ccn1?eJ5te;T3{*)!Kr)8WK8%6N)vfaNt21nKtd~Ggkb{P&1gid~{+(aDE zNN7+UVm)_Q=oYfEn<1|gr2vaq>|6QStm*Y!I$sOT37=#8*s9`HZ(sFk>rj<#zUUI`d*gnFz%>%&e+b}u=z}{=tpHG>WW_1cpBfx z4l=BHV%Yof>+IOzjR@`8SF2K@z5RkZ;<0ryn-~5=9H3T0=@9L5?TpR%${r+eyd$s9 z|Jqv$ArxkB(HfFr!Z^7B0P%h5dsgoY`ae?wwWd#>erVS5>C=bjw?(j@bv5C8MI^Sq zUvt44CleB#bLnENM6dW2va0UeaG0p%*pCKr#19ftI*Q!)vL$8(o7#lFw;mX3$h=Gb zgy#Q3DdxVGlt)EV2!Upk&E+qW2l+|!r-}wqYm0|dFG|Tpj$!ePr=+jN%aP;hYHyBV z@m$GeE0g40vEY|1!Ej_UO>V+5ES_UDu(`#{kp;3GYF$q1-|P8tp<{Tx(>gg~>z!xM z7r7YYG>r`HppHF(T9Fxim)R0`7?s-jm_&&js+t!q;u=}vFS^anRXMF_np4v)Zzv5f z_jW6(rZ1&;=h3WbU^Nz9v9okb$ z7A>Q^8|X!QPaC%OD~o#HqT7q5!@#G?PKAUqS5bVm6V74EgXK(c#{+>mv$QXH*3kjZ_-%B zGvpUHJ6IxIX;W8A);cd%iFfEPiub-`1nhhAhJwxf!`_5D@K6nnc-Oh!?E%ZOHBez@UBe=%;>>7lI}XRkrP;&lC%N_tugg)gw7nWhB*D-& zvbc(IMo2d7M|@m=VSgf+ujwyq(+(jh=&*8Oequ8^j-DVvHRDIiw!(A8>(IH*mLb9UzQ~}bf$N?Qj!Nk4ClYsU-IeG&zw@%nI;N_ zWlFxBChgoYfl`rly1h04_65R-b5pGR;9}) zPK>kM#45yS(Y$(xjiNm<+r1;Gwop0Wllx04?b&^%A62x`8a<@~oPfateT9|_&z*6;((phFo5SmT1zJalt6Evstm~i@- zYZko@AK^tmwR}h^Oos^2UmG>te6R{db6IBUwK%=jhh;xy=mg0p+^uBemzww7G1W}p z3+lhG1PU~2)M&yvaHkqso+RYE7~FdO&ckjfuj@(A&cr5LrC2vuaYe|h7OkYycqAyGzPt~u(`(OBs63Fl6HF@QpNa|s56yl3<3l;|K)htZHSl#OrV5q@)H_q&m}>5u&)}uN6;EIY90g zDW2qjwRBoo4f1^m>Fl7^Ih8DTfIKeJG~?qb$Q-4PBQIXD&RBP{;t~HPGQ#zaq!)t> zA5TEu!oK8LhVSe1`pL%z%OKo8c-+?T{Ff8Mo-CCZ*;%6Bg?Y(%i8T4|LJt6%ru%2x zo0)mo1j%dH0bglT9ja{k&L*lxiE-vxiu)E<6n5fhLDADVozU|v{)z_|;A>SiPJg_B z!)g*zU1!uJ3w2Vt*2MRWN35o(hvyrzujhj86EX7u71(Cb2ttd`2=f%aCSvQ{R8GzN z={-dZf2VM|5gfupia~hkP}F;}Y+`H~wqyStHi##g7+dv361#u$iLt0Z4!HL9%VK0N z{QrXz@EY_x+zj#NgJP{d{_KT;|7CnI?YjrXD14l{gY2T-w{r%=Lby+XBQx+}?!K9D;mV)ADKT`J0{>*H-(Nl6c%$p;)vIgRb8${> z$x~`?3s=>lefIX`06KH@=+UK1mzH$Yx6|78cvMc|Yj=yI!f%w5;dN-(q}`!3Dr9j< z8(c?E3cXQR1e;SD8~pv~F%y&Rt@bwbFST~;m`-hvufbSuJ+)m3zU)KeYak%tJ^8ef zovCq7hB;25D8bK<=YnWUp@eL1!~*0|q}V}v#D*ZWD|uJ=ok&XGl3*KPA}8!5CG9Dc z`hng~|KwGP*0aybTW#vpsmG^EI*obzYMo#EY|I`Ck{FjmX%(S}ibLm*Uj3>f>i+n& z(6vAn0Q$v?DST|Jeaj|7_m2&c6s^^*mJlYIoB&VutPi%pR{Ej370QrlvJp_#l{c6M zv6vxGgCcsk8!UsE%diosn!&ITI~aDNsD)#Y)t^%TOH_VnMg#iv}-d$pqJRjYPY4;4?<&It~-^jAw7F^ zjV+@j6}Fns8BT=;@SpUm)7P=)W4ghqpum#iSiiuYzJC)-w11AY1pGmrI;yDNQ##ry znV(wivx3k*XRO2pdfMKpQuP~CdRPd_@aBdMw4Xg`=(rG&CBg_^@_qBaD-UNvE*5Xsvo5U;$ZbYwni7NSE$Ej7c!}-8pDt6)p;+ZWau6 zB6y=72)kM_v;?QuGeNgNYooh7Awx|JQf{OLq4F57H?eBa0Wf_$#>H2EJyuV|)1<9w z*+TG){AMU@fz&?b1{7}&2d^HnAW9y{cCc=5ybGz~A=LPYcK>m zL!0TW(RMe20BmD^)G;2u@0|>$MgVpQo|boE$SR|q0G5Tu0_$fpP#G$C?V4%ySwQJz zCJ%eAo_P1&73ZTvzBSZ8$)T&kQ~CyLGf|gozO^qf_QW{UWb+jTqIbqrHncPX_A&#P zw!fndL8#pa`%@_$BdX|rNQ-nxgW-U2ud}Yht_LW+V)a|;*4fS&8kuB!Q>?nrD((3T zy(H<1vFw(=0N;n<@{CUd$N{VU2p`C_?G2^|^BYMyX6kZrs9nU99k7Wo|Y(turjw(%ZKWuiaz&(=?fZLXj&Q;=B&$Ba&?EHEV$v z-y@ArL1BNDLzXmH$qvcnvZU5kM3M**-xN*N2Zpq7$<;b!P;yh!VgStw$xtq}t+5+) z3x9ab8e7{m2GsZj6m$0uZ@p!&4I0O>TX2v4BnSrO7EFunh5=4ol)Z^D;l&H+)vK5I zbqppXHDbt+mPYgzBABeSnI$an3-W(o0!f1OKZe$M3Yd) zPyA!%)}43yH{SfLwQgxnj{qP)M=?CAsq*vPp!iZ`CO4BBx0>{-n?se9KZlnwX zUhzkiBznuiiJ(V*l49>rx;{Z}gz)$iPPT|7>t%Z1kmDXs*ak8a!MPf}WqKRoOv@Ei zp1%zwW*a5)CRpg8ok#E%X^S^cfvfV^8$#$ z)NHE@`V~WI4}oQPn^5Xl*n?@1leGjrq-%^Y1fn<1&MUACZ{J)R*J~ZlWdr38WovA; zK<6l{Ba9e0Vvb8|GI3nh^F=OtE1mUxa;UxSsRciX#!J6q3?7nTA6C-TUR)eXpy5QA z{Yf89ybhh@iQ}z8uWo@O_bhIl2@Zx$fxvB^cb|~`^T3&(moH%xp)I9<7~zJBl`idW zsxT@ObmX-aLT3R>{=Foxp!rJG>Iv|Dp#@@ymg<>Al6E?^k{iJGeutc%i&sVx5^V4K zSA3%YgkHLTyremJk*MFAZa2v9MiNwFTlU_9D%F$(3s@%6EvB@JnSvSOTS5lqMeeQlK-t*pGbrno^I?uz_B?yB?SQfdmpNKUqv9Qt3eZC7 z_f#hSkK~O^NgX3Rn_51qY+xqWPi48PwTfBmaLhcrW_`BNoMP(J%%>LpdjyBpFI%pD zD8{zNew6E^D%m|pwJ(}_tx^;8dDT~ql@J=-3op_IN7=DaxnM@;rie|?(kgTH)Pqp3 zy|Cf$WYfdOqqj)J-bmHcQY~J@P~<%=&;?k3Ym8W$re0TS0{^5$pyKCTYJtdgQ~t1BuIDo)F+w3*=8S!_R#9cO^8TO*1%n4yyZ~ zg&;r05K_zT-Qgy}syyDUhlzzhsgt6<Kbw#{ zJy4;+k6m}FSiyqb!^wknZ52b$RDw5Hv8ot{>8-u<1mCw{Ew5udSo7CUAb6k!>kd0} zms0#SzJ>iK_gf!Cu!}*z30(b$kfKN~ouIec7q(sA&K`WBTmaMao)a}d3BmZO42z4@ zykGP+m^x8q@#0OlSK(iMZKf<;;u*enfI|UYbU~>+_B`e}OvZNUvM@4ZUQyVu(t3+v zN=0^z!YH=Tv+CBcD}2Xmp*CG6|JUg>ex24v(84c#{Pvqb=3h$bH>}mcxt9VnM!C5y zrHMmr5SV+u%G~@5yHXqM)9V{iScwsI zA$mW3nw4eHBbe=W>tk7+jHb~y*ye<`*On>oWQ(?ZVfKi`jbO8=-j!pYvZ0dcaxCxf zaK8Im+DZ~6LQUgwI{DM#sc#+-v{HYwrP}{!W|{M1i`B?Z*K8WU5}ai0zIB>nexWpH z5N9W1x^TiWbAM$@&KF`sRf(HA6|DaaO&@4Pq!2z?lpZM0$h_-mMk5Xct7w+il>dxU zu4zy;f>Qm1RB0)JHPEBj+A*-y(R^z>7YT` zh>C}7ES=$YRE<~n=X2L70&d{De*L5V7RK{KzBUo67P?|0S6wODZ=S3hiLz!0<*_pZ z9=@Ak9D)N59tz(MN>=nO4UH(|Hiv-mn{yY|=nbSdz&OJ}sDx2ZZ3pucj~TwQ*GYT} z!^act2)WF2OrJloZoF;sfhv8C>`|NN99!{#T1Puq;dDzNNiF4AiQ8bkkwa)OAy><) zSh?Z;oKWXPlG+bA1zsBYOE6wx#omMA#LwL;jav=nO` zuM{o=5?4c$igPNKd24iEj;(l_Y$x+3OsH%JUU2@6C9rsr;X2n{v`Bj@)CiQZSM}~? zgSjs=W8b?*%(vL)UYtubZ?5OJr@z(Qa!tligbn$1I)AZZ?=o2T^Vja@0E*#xx^EOy zGvm|Q?AivNQnK2J!wS9n2%wa@R+d380LZ@W2!q`huo}qTwqaO#KuAapM%tW$kxlJw z05DW6M;d6kEJ#V(0+|||fVyyD7di6Wa(nJ@k^3V?7?wwCLHMgSh@^qGPccF>b=yUA ztA>&s&wPOm$3$QUx7))9?>4bsa5(lgmV3M>jY4_iqu(oqHF+-&|B{HeiWiVG9>_v%h1^AY_k94Sq4C!{O0|F(c5H(R4H}%q zPg{$6EuPL(SjCs(ry>^QuW`yO%oLxA&4v}I2Tpm7*DP#!3qIjyLmPaBxFN%;%~`u; z@}v*0+OaZi?N?%W2fTC-yN<=*DBi-Ie$K*6 zi&-JmKP|9f!-hUX5+Q$I89`_wevn`0t}SYpkJAE=$EU#_#K2b0wOB3k&sDda0&&Z45R=m z*>(*fkHpd6Mu~*%-E$fwh@YT_(7zZPT)c6(hAC3wdxkt5C94KasTY((2@G<*?SP<` zSxHu#BZ$2|=v}RMJeN-4)tcO*k2L#{f2N@J3;m6C#K9F$xUCZUZ^3wD9OGj;N9U^7 z!lrrMpT5UqRV`S!(6swj$0`<2+Q6%!Ahy(?Y@a@3GcM{If?%7?{w#_c z{#$I!L+(DJyTlwAf~~0V^)`^_nDFrn4D^%d-_OOI6bn=!SD*w0tw0|Hzdm*lwETbz z$Aro-KOf-w$pZCJ<>i5DL8(D&9{vKURRiGIK58D=uPq-YBmoifVd<3SP>n$vp9(>& zpe=V0rW^q7-^EZaVZx1Yj1MC8aR#4x#OwWEGKJ9#zqghv?pQ|bm87wFdxTP+SIB+S6A@MpowiH zx?}0B6uM+Wsy@7C6{(v>|MJO)rphohcpz(ePrGJS;OXm9Jw>KkvNQH0{e%z4;tM^K z*WxqC@{sMX@VAEFN~~>7dWPOf5_ZA zrjMsS^1DX%)!=y+Uzh8VZ(6)O>9IEBW1eH_o8@2hs3HfhtYq;X;^$p-y0O}{SIpuu zRDRM88g{^M&tFFcN zC+}%`1S&V|UM_l3;@n+5+$xP4#TYY+b*6S@hmS`JJl)GMp&_9|sQ66W$MF3BNaQR3 z^Pzn>V<{f z;8jKT3p;7JE}LGCf}J!R^5X+sVim^<$6PY1qj9lyVyiZ{EE3RYKPAYH-L1EbG_YcOr(0j#v<# z9UVP8o!BuZ+zI}-IA8#kdg_doCC*sMD9IUPEI#J8kSi)-|1F(FBJ5m^vn3a7{Ef+u zdj9~xH^Aiz3h9dyYO zs)8dW=`_@wgY?ZM$cP|40NXXdSQ#FuCV75`Awq5Sc_nx(aUnIMI`9mm18?8y+rAJ379VclX2ehB-PTr z*2Sg}a=bWNMMx=~V_dyqB5_Mp=7|hDtjubH35(YY8uA)ZErnbui`);AOdkt zZM}*+Ucn8)^z{r_H~E#Hu^15HPtfflP-axiKl2ajI<`m|w(C3m9BXYo;DPTDv z`}T-A)fVGlU~uU(*ktxPk7Zc*437iI7na!d5+FE#?yq9dtvQJC5U!b>xzGk2I{~D# zABIDS*umON73RT9M1R-ZZ9Vu@5yoOhn7n;Bg{I7JC&n|`;UDx3ybpU@wk+{x1$YyM zwp6tKuHcBrQ9z`O`+_lvm}Q9>~n9{iWFZu&Z7NL#*oaMssh0G#viCW~~M8vw16@I5NUwPZlh2wC zVNH1k<6AOTXbUjdkdGAITId(-d_b`hSy4ryRSw*slP%iq`0Lc+?a5cS|6YbM2;>Lb zV;(^CFRtph5te~=F2SM|lVC~c%o;h;ql^W=d&b`rSMg~VMszfpXw*LjkLzaoUBL|) zQJ$=V7xN6pR|Ovs>oOayf{nJ5!3g;A6DQS$E|Y$?91ta*M8gT*w8vHD%gZN&Td`Qh z3$#PCcgOZq&_WGn5uo$G7Y&=1=x>Wjf>^g?@awS|lgK`ox;8H;RK|jtm(H8J#^kuC zgZ*j8Q*^Vh8go*@GF1?(Jv@<4O2Pjy;SEL2;rgbyNt5WZd~E=4aU}iuLVyRyWbqgC z`A&HjX3A$xo#Cfh&@nDiRlcimH$&ip5jAygku$TV70s6FOC z2($}_)G`BkEsC>={8|59>ll7R_!lOO<|!N5suM0Ew8IE^fP0wM^#_gj8iSE}mTkq)@ zT7Lg9oC1TnwksO%V5mkIeg!SR=Uc^1}uCw8#wsXZXG0!VsTS?4@F6Xx%!4lQ5CJ==(FRpb2>`@ z#4RhwLO@se1ZEI)cU?fJx3`ID%iWE73&VJ+pjo8pW6=AvFx}?;NWk=+JIj606gj5N z&sB0FP0dAKFCUaE$%6*z={){Ak7fT8b%=E*t8h$v& zYH!&F>kl{hJ*2^Fcb@X*u`;RaEmd1-4Ggo}sFcAw3&2-q1q z+oHuMgejj20YPYjekICVe!yg-U^@KTvJh21Tk8LNG}s_n1?lgz!gHpeD>e$yt) zx(8ICqLw6o8vy%6+iBYni3{cpB_bdErLZO&&e0`%;{;_V^C$6mOUCv^Jc9A@FhY0cm*0}ex8<4nxmX3bEAw>>=JyH-4Q%E3F}ajKH%!vucuyQ75A$p-(M(#8fc8IRfwiY4q)kNfaeXN z{hbYtWugORTf(<>S##D`CCsHz8q{>E5Y;HQPbSm3HRg@7!t&lEg0yXATDo)yC9D1QeyJ@~3B#em)a zmso`A_XC^c8->xduvrk73<|xlG~)R$G2aL;QFT=NLlRW^LNQe>2H2zOiX;GbMggJ! z0E<=i0DEf0(?(_VPcl{oy#V}=e}PJTlx!X)Fg97Q{P(#>2hk2~*OVef7A9$~&L7N~ zeV|*5)egHA%@KxQB=?$FdD$mT?1^j8%F^4bt+hzkGge#X;+c%VM6Ij>3-r3~sIVj( zC*re`zJKe^Kb-Cxr=6ET&EQ}=>K=XKsyW*w84xtIPS0O^tY3pbD;R{JEd=iRkt5JZ z(OvQm3+zRIo@c{gWku^&M=tg0d+E~YRu%@*&-OI4eEc&u@o^`f!}wHR2qW@}{GZK% z*CNQxS-OiNWZtYVb2Guwt<0?3#SDj}|9s%Q<=56sK3`Xi1iV22zZPo;&ulZM`psuO6z z{Es;GJw6o2cO5@-JUmrB0k7jZj;~c3NuPo*$O>g$`3r7l)3Nt|h01P?Y5VT`M2u7S zdnPB-Zi})-R%x?LdKJCvhjXj!F-V891RRb-nV9c&dr!+Mn=-Ki8e>zqs%WUDEilD~ zXqYb*|8%b82^6tN&5C(9xJ0Or6+`_AJ9cJ(+eiD%&~auf3I8W%H(M{}`ElinPjxIQ zBJz)saBUJl<~(Ni)V6Kg8u7a*U~J$cu%>)_VfV!-R+gi&YL7TbVQn=h%X-q%Tc#-+ zTdau}k^TlICA}pjDa#*xjsEts&AZ)?8!rcT>E)lI>rg!r>wFQK6YJqC>MmmGeu4JJ zt(q{FRsX5BFe4Y2uW1|ON6HG;B7~mM6o6JzsD4bu8}!MzbQl|B{a(xuXo1X+T0|3g zWS@(7v*Tw}JJTZLEBjT$&8eStr8SMFsY0l>*VRKRjcIzTJj8oh4TD~+Er2x5(l)uY zQ1wXdca*6#j;rfdYo-BKS`*h>>Vh!UJ!KrW);{sNpcj)Aw~1$(zWQ;HWe24Y9QLPa zLB$o=3&NgtrHCpe6{AS%jL)TLr3mO567AWIE^hb_3Q?!c7T!)Y6_y!WZUGOLf2IQ; z*I%;aZz6P7KZL7>?)CgBD}gYd@R))gpIu0W)(N>k zr|K3wme-pANNU6{b+Vuwm*9M2&fUNl_BYcxRj_#AOxaFW1b)WLI4#x_l?L_Yx)9RVY(Tt{1t13806#8j3kt*nJW1f#-U_MMUFDc4EQk{8K3gws?6j&+ z1&gd)RV`z4m`#hs>r0d-MbYQY?_Xo`UfQ~*Yk&COQyW-fY__7{d6sQ|{se1&v>hwq z%->qI#zbj2_9Hvl`V#T?tn4bV5gQF49f!^v_9j^!7X9pPb94)~d@nq7==MB!QLpDJ>cEN+Ncb2tQ{s{Y<0;>wS(WuwKU5Vs10knR2VA! z=Y5q;*8YDdUG351?kaopV07Cm5e1o+9w@KnrAU={sM&w<5fpT95xC#)l-OZ51@{qh zp^;1pq4zu_@ohPjc@ZHkooTqQdlKBWNbjY0^4KKMT(wuyLm z6ptcjGGzHINyO@fk`&0aTWgPl-7dUM*eh$fq%Q;rWgC7+2cr(lUc>@T_lJ-e86w(w z7K-m!e*b7VZ( zCh}~5joV4`t`(ISisQxJyRG2IsZ?0gM=|NHgV)AROT`CxpdS+gH;w`N8o+{%y&Q>IKQkJ>IW z4|bT!RuW-wq{A22qpgD-a0F90S!Y3<`tA4M;3y6333oINYhW$H41!Dy!e3 zt)iLDDi{%o~xs>vdbv%@Ke(HtA*w3^UpR@Ed{i;-^mQFqlT;)|4rG%)>W4 z-&zJ?WwP`0fY9B)O0u8Q#{lYSz@GWPIngk*>o#dJVtSJ%O`0|lD_h6<^F$5sx~3AW z=r?+Dgl*4TZ2BDVsJ^0HMl;oO!UeW$GKW)GTL#_WLP*eSu)n#rV6@^^|ysaCBmAQq^ zq_Gj(|6=NoP>^SO%eKT4^KtOv#an_{mQBC50j^yQw7stgE(ey&2i~Ymo`+6{mD2%F zf7$IbodR^R0VGI&vVZ!SJ0t!g?%w8fq8IIXBU0XERVbY+e7oNFYfVB#2u&tN+4mip z=E4q>20CvE>EXg26MdjL?}JqLyL6X)9{>t{xFK580<8N{t&PkCNIxB!a)U!S=d%|R7*1~2!A^o%^rbEz0D6i zgOL<%lPi{)Yaf9ugB@^x`JvjiE3vAX$5ItdyW0f$_`_~}rma|2zpYf$V3|XIIN3nc z+B%AKW3?BDRY3z6>J&SNMi)e3E%7dl2I&;Lkz>EkvHl!t%nq06xoD^)oMXbGp_ZZN zq*H9qx60;%6T6phTrslN@DEb96b z|E6OEZ{>8T=b>hds$gMF0zkvP`=|t}M_jw=Veh^%!O#Aw(s=Qcbqw_#qk z;`^|+Z+4T$+1|>R@3IE-=-iN1Puuqg=-Yt_#2*lzz_PtGY}+Fc)zZ}CmmRXIRIew? zVCeF2gVQO-&yhdadCRe12v61^@8*e>q=oDI2Oz^Vt*a}Y0f9rKw9su^PiUb5A~-)K zTDx8n&Wu~Yr?_4|z@^?Y- z!*yM$O)r>Ng1ii@_qKSGm+e2g>@7)RVY*azKf1Aj8o4oeV9mjUYrC+Tk4ccc*Nf6^ zA?Ns4-O;W>=uxY3x09UW-V#Qt9GpqHGwS3-hGmn5;3!pa+Nn<^lS>`X-;Ir=@bTAd z1&7F8yilcqM+h;i7zePZ^aJrznWB!@@en8x^zA>)KXD{%Cv z^5x6_avRcc+W2T3HCT{fIK0BudngY573yNXbL4HR#5aG1l7-Fl*o;@i|5y%`Y|*ZC5*+Ju_wXNuNKIOrkwq-5nrb8$|J%cgO|k z=Mv9y6GHENTG}9ot|sR;YzQIeErfYy$dCo5dHyDnvd5IVNa`~399cLjTvg1VO5_qJ z%X&T`lUOfDAD0YLTLOQF`dXyx>08RhdQlkpOO*Ix9hs;P)C*}EbVr}?$1x2B0L~Gn zt5N67nR5mo6T8&)lVJHkHdr>a4=36!YSX}S>={hSwHR(#5ZrS7lyVB)#TVFNMO~`w zEp2KBlz$%9nAW_dUosSL?sHLo(ibWn{16)Dw-vwNF2H(QcDQHy>i5X4Nh!@Zrr{|B z$J+&$Ko^cku%9r#T^0^tigi~V3qADuBa|rwe<~{Gx{VX5LIW(pwi%~x{)yw=)q5@d zP@E4#@H2N8_l>(LpH`j>bL>_Vl?}BZU8zGJ{v^~!hDh!&gYjr{po~>|?&!=z_IkgP z7b0+q?tQF%Bu&!$+MSBa6iYlOYo~qpYO+cfPGP5cifc)2X6pybSwmDO$4uAagE)63hlkV&an-mbE4w>bH>g@96(u z-gCkPEaXds3PZO7usi$@$|$O#EX`=Eb1WgQ){-e&HHD0j3<>Bc^v_`} zqtsor>yEp&wu8bVeT%I5>FeH0nTtD!kWUmt?9+#%b1Tv&IVGmTs+EI?@Z zK7A=wNiCs`2wDE2WQ9eF&)m02Tajn^e<1E#LM<$gR%UY7KJ}s;0PaRoQ-$Sz5~Umh z%SSe;)X)#4s|u@>U`@fhB|f#M=iOKha#`M32hkGxW_7pD{~OM^8Om@gM>7NXf>h%) zPA&Ak;+lGJv|;U&;}NKHI6~k!-n8`oC$Mw)p{i_!^;@{36EmI)P6O+dHg<@&|Vn0^8OvD*FPR1>+3j%UsB3%`3>bu@ug~89pu$f@@+ar zmX(bYr{WyJ>g2NH5vbfZo+>N&D#^+=1FBBqjlQa2k9xa#M@qN`YaXer!ZJQ0?naL( z{60CNYT2M~$Xu04w2Zu?#6rm1Dy(+ugQ6kbOvBz4{FVN|fIy$JKI+VIE9ASiqDn5t`3t`ZsiPR=S8HZj}o^}F*R@xPX z9%_qKSioplKI$%A1DZ9Pd;LDd^F4P*r=Kxs6EVjPArsppiwM2Cnr;-5oz9c1#imW0 z=`l>3^UG9WrOIZ=7gcGVdyg`GC^zg^cc%}bdDrG0zNO*a)giJ#`QjsC$1~(DvT*2#Xe6W+C%wJLzhq-{h3q=<%e5*#>ydB zd#5^IIO8--E-2c<4WW1OwcKK^{TTO5-)7d7mi2`03S63t@r@j9>5(4fhB#!ffsnV` zYG4<}jKAki*M}3l={-~=>0&GvGHn=q3vdz9Z*8lMk3S|fmxqD1)IV~fOy3dLoEz0^ zhN`xPV~f`@W2$<wf-CXSH+&72VSKeqb{X_? z@XCi>R1{07BAodnnaQI0l4&#KX+3EUrJn-OEZRGEJ6Lf^?#pZOHy!~NeJufAa9E1#W>JbvL&VvV_OV zKBRz`tnZM%{N~*})|5gd>@C_qUoK#c=qGf)991ZW1*`(3+pfOx-M3wqzVsC|#b8 zORtanSW$;_!MuQ;V%@I(AW7DnKh^2+Qz(&62ZSfU4uLB~JPJa$QX^Z*cI|>l%sUdB zl$CY8>Yb;firZA}>vqXWEfp3s-H_b-ZpyAE+Y2ewa@`;*i)cRiM<~J_Blnc6z!AD9 z*-&R`E=?6`6AOUnAREY?X6j2PEG({af*_YVWREoSI%;~JjUc&qr^OQil^v!wDFMK|{$t=8Ls7jOPksd}=&b_hq?|D(To8f|W>$M8jYW zO9T5N4J=!*tTCYs<`wWCSi4kwr)tIm z=VaJR5u6dPpy>F0fCA<+?|))%d(b58cAStu{TqutJ7)gv)?&Op9O{h88`= z(JfK1G<~T0dsX4gWvQN?lvg{O+AZdH*69s5chPgL2Xjwf36 zr!o!C3o!7WIQC-4e6rWu-u7^W|7x$-yP9KJp4x!iQ(&MqaJ6@`CCWbism^M7ct^Zm ze+AYaEW(|SQoVa#FPz-x_0~rI{%lY{`+L1d+OGxy8dm|M39y_ist^_3-5V&HM5sO3 z16+|U?fn(e)PsizDY6+#*Rl7MYl2WeP2x11h`*x(ZxMW%*XmJB>h974@I#6{uJ2L;Mw1kZ z{Vs!s(;6;Ddcz9reA6OY&(QvG>1F>j1(vwxM)Ne+mr`H_-1PHjX4C{nk)7jtJ4$4hL2$fCJk|N=kNs_hCz6TYoZI@)bgRVGZ06}+m%-an1qCxhp1*REZScAKEYiYd;Af>2e6 zU%>F&<>4g?kapuhB!a9MhO8THpFFX(JW50;j{P|YH>m@8L0%933_ z#=b|#1;drBa(ncO5v{ADhyIR+Z`O6$G8kLLD^eUexb{Q2h~S#0^>QRRD)%id0vP#A z7vb2t2PUB*{$HQL?lo`e*1$C?aIFbUL^l-`(?NX**P75G)>SU2o2kWZp*5-mGbg=Q zYWRZdy+-J|G3kAd8D_Nu-azfaVd*lgekfpxSIXPMECCbVLDHX<6?#Sg|Hy$1^`<3z zz0Zb9hM4MXrezGc+2Y_@x@MtJY)xwv@Y#xFVI4uvsTfE8Djy9Wg7Lji<#GEg35P4z zHThh@Nzm9pWoM0bRS+F8J`E-LH!#~gRx}JHA-pV0)&6S2yaYd9B{erPzx|MaT? z`|(_#0~|@5JGT#dI~Ct9B-%9nHL-Yug(C>J4XZj3>DS_?Il71(vDW{ zaUQ7Ejo4}Gvs%KUpvsl!z#$ub->A%I&RI=g%GZ2CZ=rhtS=TPkyHN6J8JXGzYwXc< zd`?f$v_rz=vn`Nu=zVR0;&Xu+3r*YT?sAyQ6(hVCRc29z&DwpjBT)Iz?+n$d_q9VX zl*G7t(RODEE{>nTAP7Cv##?Rjj1#n{)md;0#uq0RGP^#);@_+T?#FBRK)>&+R4G&9 zinwSvpw_TkP;tOj8gSplG}fk07jCd* zV(;cYg@pEJu`0jnxvYOLtGMiXGYoS7%GNI%frI8$01Lvwm%+8nAI5hWe>gFmP-DF= z&{fy!qks==Rqt7wM5q@=8TUG+C_ckrb2U^&(}q|ae1n-SJgcEGnr7Ea7qump7%Fl{ zgE!g1+G~m9tVKVt-W|@!T#XmzgXX8fOHkiL?TQne0Kw9rPi z7=}X*gx5q>>`v6QK<71abSQNKCn*bLtZn6m9UqL_%yxV{6^=txzgoN09zBm zh%5uY>%@r@U5ldfMA5AQ(=WkGda(alQC;V+SItn3?Ow4q7o-=*6d*;+raj)-cr;;G}O%()C#2K9<9hsTGUms}ezA ziD$oIJyAkJA?7NEZ8*KQ;qt|!vFqZp6~_?*wy2?X}8w` zPT}ZL&U>F@=B^penAybTU0)vu ze_$CTxRi$joGn8G4mvK1M8C(!)A6k&_Z<&U-`cPt&beM3 zg3xD}oER(cOm9E}-l+P8rnygZvW%2V;~vm8(QYTUCuGIS_y+d%p* zSzQS$ESUX^qS(_}G48Qg^f{;`jxLffT!MAFbtabz-UEjx&S_n$R4GZT6)?kX zUg2t^0JdZ6K^?v}S1=A(c9f+`m5$3UlEg20a1S|e7Vf$FlO(G>rppw)$CLXeegB;IC9IEyt7cg{X9oO!TF@Q@40D&6mAVB5Jue(uI;2~nH;J?J` zdCfbESX(AN8ULwx2~j{Kt}oHhS%KPJdDRFzLw0C(TT@hTi?PVE{Y$iKHZ2fiJ(|$% zum!T8(Jth)eLMk6I(qON$G04>c02-=MmBfD2}K2I+Z&80+q6iGh%PO%{;&FLua2c| zMp;(`-(3@nmv&gN6?RdJvq94yEGt_UMwqfUxUXGj6zf8%TgooM8){DjY_N3#7ee-J z+H@NWis8$+MVe+|Es_>kr1501VVVnDZwc>lV|EMNix*mA`ZM3DSlf@auWTBKg2%Lf zY(LgMv}qVaJ*;iCDj9mYG!vJGhqPd(hJax;OVEEveAIk)&SQ?IHPDUv*Epx0ZO+(7 zsAsBn{~eUM{C8LIqb1@9+gv!-d(nC=_3k~Z%5roo_rCu4@#8x}J?r2v1yyR0xPj41 zc9wt;xR%rM@y|dyBBH=f0Cq$E(Zi4lwuh2@PJ1$uG z7{N%{(0C&*5Krs&DZuXwN%ibsSh4_N#A~^bx2KG|tI)y;mIkl%bp!(~P!%Fi}t5S4)Ujd>FQ zKjjEzHYiw5E6*#!;1oEzmHYUeaY8EwY=XN0|2qv7Ae8S0#W4JrEVS-;je=xTbEd+v zgKe~&Oz-oqY7oK}dqwh8>#pA5D z`aALXmN_hINko}g^+y;Vw3x=TZVJ(fI!_+mcWr2k!gTaC%kiy6$K!6i9$JpK=BPR5 z^yM7rlnW~#PhygA45T{Bg`tlL-u_i7uqMImFdn($VnYp5Wfhw^#+ zE;6uA9dY$*o`WR*&K-|lEMFJv4xcu+p|&OA3x58&ZDz}w^Zc54hKVhG3-u`LG4vhY zY4tEHY3upArre$Cd!2j_oj9qRO5!AWtc#Y7Pg2yi2#v(jmZz@Q<(M?2mxG!6M{*E~ zY~Sy``%Y|5^@@g8dE%kr^s%=YmmPt0F2iNfJBc+KD!xM`N| z;~BKA8`?!u#Lzym?!I?tK+8v0e|q$UqVAa`J@@@@0=C@!Lr_jrs^{*(QmFrZfKG@X zA4M{cgzYy9wK5dJc(=9QgUVY@f2jcs8)R{qXXQWk?tKj41EJ|=iB#E0L7|;xfz@gH z+gU#03Hy4mJ>kt`^7f8OH2-@rBaC1YGgvIM9qO)#PBRK z{ofS1+R2`Jw*dO=aBa!x09hHq3O&DcPvSj57VV87#NF;OcF57ZStx!Kc^6W);lv*o zHZaZ}8x|I}d)chb*@T<{ldT1o?VXDsG_*YeF&FnmZ;o5hO<+@RvGq81{pJ05?=PK2 zH0NzAj_#M<&xYW=9>{A_?A(`i!7Y9&zVv>8n60Fl&+reNqR*R7`)MP7DEkO?dDy@t zAD2VL4nYwt#hQ=Tm;7 zRZGI&q`M#bo`rGF!vf|Tw2j_z6F|chZTcFGZhGI1BrXus0hei*8w8Wo>$6Fp0+ci; zV1>95&nuF&qse9(W=U+mcEw0v>W2)N`Te~Q=xbMGzyJsm6E=NqK;F!YY(F@(uDuHU zS8D5Iw&4QS2>jZ!y8{OdSo(m*C-E&N!0q~GP*?*P9Z=w{j@F1>?g%QwksJ>-g!!m>OBmjx1|i1jpJd=|b>zR=0v zUCRKeo`EfPVj6ZSuOlJG2vklTET z3=-x0&fl@-lL{Y0f4ickAU>C+fx#8`O1-nhn+B%V+fQ600(O-Alg~QqU~R5R^uEu2 zeIokG&*nhM*|Tq6oZUYi%QNX-aC9Pd|F~8!q0Sod-nveQ+FPI;pHAkwbJxkE23b)0 z-f+BYZa9OnF>5)2M9_9_kudVbR-zqm#A0yTW)OX6*U>PAaoV3!2^pOO`80xo{nTGr zEuiUS$HNudshX>Ps5+NU1wf%p!X)oYqwd|iw>n9b3l=NH6Vgfu&GJ?!uX;{#nHt?{i6J zA9EId`+s`7s{vH^m|jg|$$cABV&Hnwk(DYh$<-gVAK@XEzXN{E7KK%xU}sRV%Cn1XOuxtRl`S=drsDS<&s$F&i@?o+ zzjUyrIEsDIb1+Aa`-Sq0u5)y~1Fe4iWm%7L9d7uALH=mGoP(wih;nNB#^6ahnX zvAwLMw}54h#CBZrUQ4KN*{9DO_#Y=@{^n20X@&baqFuTBXuiA=`-X#MUEw)w^%b*i zO-kX4B}eS}r$%{esuEH9me6Hn1UJK8uHSn&`OH8Wcj|q)za#@2=sk?X7vD<8%iWrp zx8o3~IlfQEFtRE*7!c71Q?KD`?AuDEvcN$EeJBBk+lwPU5ZVsCt{H|mW}-5V%d!od z=ha`sGaR-~fm&=0N;OEp!tfKQ#kQqTp~LtNyVeL;g<)8iLI_5K1T_?d@d^qR3B^B) zMbtu7&t{UDfVh3q24wD^I zRxstNDU|Cfjy*EO&;7Oo-kc;TOO@tca{GO;TVVx!2sUWken)B(-j$;em*1?S%Th6) znSOjgaBO>lYk3R8uxb4FmQQ>JMH4biWLo|%(Kw-{_#WgSt z0Vf!3cbn=Om9+D{{5h&broJPB+0P^y+4>oV+)y8v?^lUSjTj$ z4s-72ACVa2K@Jz~8Mo$>V{ zp(M=lJ5+`C^tzav6&#L973r`R`r+h!AJ?nj|Jp;6w0Ugl(vs%XFU$XUznaU|%ftBK zlfAbtPRuSzuy2R>lrv}IwecbrFucrKZ8wzgwW3|ePt3=W=4lV(uu$p15#AAICa3mE7*pZP*w4-Ut0u!#aTl{vC+5+4^h z4JXPjA1(=cot#58+F@ao6OQxfXeMH?>vYMH_*#Gg-i%~gQU=Rw9;PuMZa)=jv<mL-sA# z2t4wOiAjxEG4|H2k5nw8HzhSkYv4`XH}e3svmI|D?`O^ky0uy77Z; z;}yZ>K;fNq-dOGytM3k~iM>iaSWd0Pz9H+35fe#>CyA?dW=VBTeq@inTRiJIPknb# z<|lMvx7>{-Q9g16p%C>&(%Em4t}3o=krSxF`5BwhY9Sc|U5 zGfiJJI&^qN3U#KJoNM=*Nx*as=tb=?)(0Iu(ZN~q28I`k6Hl%7(&-M^=}iCkwM}Ly zO(Xd8=_wYm$Xt@%4dTdf@5rcdT~d^>VOms+)Gu0 z5Ipw^ih;JVAQ5vQv{ww!F$7Y9oXsFd))mjdAWJk*49x-%f^^to4%eWZa76^-=ymZ- z2E;K)g}IXE2&Q2%jd&n2LmY#UG-W(o`N*k>Kbr%l5t<|Pze?r&%6pj`jbuXa1f`Q= z2KNKFyK1PsL7xHUc1JT-Sn?;hvBo{Vq)WW<6sIVfpv5Dw@(kAYa2}p78-zpqp2F<< zBL@KLdq~>BB}*pAn(cIF4s{PZb1KwR0j`C3wq(SJ5f7qV0}5?mbA&!fbOwJUDz3sI z#%dA?wwqo!0Rv?}YWK^CdM5T3<|-;f%D`H{_J8u7asca-^OISp5?1`T$x!?@bJ0rh>Re!yJ z?~hduI)1q8?gp2p#mLeysjfx4p9>yNbTduPWPTkUCl{&4O2@0Qsp?K{hJEC^YHaE^ z!rfZU#spRiURJgD;Rq2`7jL;1HCSF^<=aX~KQ;u1_B&3z2kprchfk@NNlSXE#ycWb z@v^LMrMjEOioLjW#u6=HRla0cBu9fmyY!+r)m0@`g~h7`hs>EXXQuFTl>Hf&pGEb_ z=9(}?=u_C}c5?_Vc{7UNS;^b@*0)AgR99Tud>o%N7ev7h&YJx1aKShZHD8e*U^T7_ zo7l2t%WtpIeW)8v3zqg0JzX>n{4!V_ue0^xlc(XK`-${3Dq5~eKD16)25Z@cXC)#m zS!J-5Bw5t~toGD8(wUJr$(Hg90ChBN%&VNEuMr<#!yS^zS+`CJ{a*v}9REcXrQG{S zumY=@K+cwyV{h*#a}^_!8P1Y}?k=-orXSfZFU}CEm%62#JS>#`j;92wH@T5)glPsD z;xif+AAIN5t^Dj@`D^6vh((h0eUMyZKiN=ODFv{3fwVXnB0A>x190EE8c6fZ_N}E*nIcEBuI;@QSYW1yy?Z{t}=Yp82tHM^xE?zT*z5l4RG7i*V87W){?^1lTaQQS=r5gE$5>%#f zFX?1!6}){CoXqs(Q%Qg|VS~riuB}$Zw|0YT@eTSV_(e}}V-evxuUEnVH@5jH)L&%= zURoqcNPQfA?rZ`M@pr2s-xiC=iA9~2X_TnEV*T43$WV1tRB@DNYI}(Rm_OQ(1L~YV zCD;d~qYtV;NOLz<;|75-!=WTzQre9om+~PrpM2m}Lw|eW&GgsUmC=^e`w8UNUbXrW z5@>OpXHh6Tb$75#fWtMYTyTn@M#0o5ceCBUd-r+(ZOkk0BXodMNmL&^tY^F|hGqF- zPg*yN7M@KtvRF};XFNcZbA#|ZJW$l_D91_lRyOoUqR>iY;O1)7;jkQYyL#bPpHqpTgYHXILloFgpy8JuL`!Dr8 z0qXElln|Pg2KFosEOouwW~%ykKxtuWi!UxRYFkld;zp83W{>x+UqzvsgqS^;b5fd*}F!KYi_I}UF>YSm`jIS za%Oi~i2lTXvfT?f4DjX|deExrK4vxjtL8*LRUsJ6tFt=#9qynq|R9mPTmdw8NW_PRGZn<6dK&J#(O%1}%rztBI}tIEr? z^0~rs^>2W3@98W5Ecv9ql)i2cdnnUQ@YVbZFu=RZJ*sHPmbjs=Z#!W%){F4Vlh}~Y z;rXnWqtD^NoS*fa!>R$c6B)b6X}wnB}2Ii#uZsJEd2+@1zA5! zFC~jvFGnxI{|;-IhF+0d{kSlmM^DBvfB(I3;YYHlzj=;4zIQJU50`)!*EE1Cwe*(g zylyaqG2Bs=xOxe;Z2B!%ZQ4bwN&{=22G%+aEG?U9VCmMWZI*SPzk~wD|N83>Fc3EU zikL3}vttt;Z%WeEmAJD}NO1>zb0ADiZ`9>)pdsuc%7b}O#h!2TW%v_<3q-eZ``NO(50^9)}!$_vvpMm&l9Xx z+JDh(?Yc2r)MvH&1dUJeep^l;O2$8_FR*OyQ>Sow(`FjPJntBT$l39LSi|h|fV5A! zHp`-MB%PdN+*_%khF+2X^&FU9TVkW) z5<1^BNIN9KJ|RzGV16CZ0^Q&zgxs_?-`raJ%| zQUeC>W!NNO>rOH~2653{f;%`==CXmElVGS=-`^j>2$M`t7ytHOVkP0&zechEfd?}- zvh?ZFh0?%$_7deLTOU{yrJCdPg>wW|82$Z}m?Hkq6MOkYA7ym0R!fP^(?%+>8UGf; zqyCl6gfzm#+LtPum9eJmK#cINRH+rXi#w>WK+Sywk0txL`q-O#PsDbVr37m=)T32s zl%`d7BzfwNbMYh(fG<*;>*86ADMux1$Sm;XeU|9aqsKY#Q0d^?Kx0|kImu}3NA#>K z>P{69^R5gWD@NTRjCYDyS>QkXpl;pwWASluIDG_QdJkt67I%XMT!yPX^q&u~7~bf& zpk_>T045aY5XtjKTOGFGxH0onkm?!On_*b&9fM5+n*srM8Rag|{c~7O+m* zX=@T>T9WWZbaGC(`9M60r;}!fQXQY+jdrp(eP-R_oXKOzbfWn}o$q>WoI%-t8z$;! z0hRguq$OlS^yawRXV0E}sBM2=(rzf&b)`0a!Vu+}Hpb3NL)P(q99RNR~mpjg% z15EYuR-(h#sY^_j)%Y8hdt-bW7K;D#H*5^zM>{)y3$A>gZ@J(aoI)L*b|(HiSZv}sx#s?ndd!lIc)E9LHJ&0&k5zDycr66o@4onFY&0bCf7A> z(j2K?w=k?t%b9nCWrcYbzYYh#N@^7nEcKRtj5|r#lvU#aUaU}Sa0)M#l(`6{%QW=~zL+yprgSc&&6b<# z!;9MpDJ&KX&GNa24g9Fl$*}ZuZy!=B14^F}-2A)Pq2E;!l&Cl7gqa5- zXS$lK63JIAD+fxqwJYr^nZp`@AYTNIEDFTIK4?YwlT+W zJOK}JSI5UwxwjsdwX=Ak=h+tshe*gzMlcWn_qx)zm+F`xRngk{kXv~7q-XMiM+rQr)o17oeY;^OE*aDk4G zJ;nph9q|S+5R<+@Fv!{mDX;^Fl?3etB{rpoK4lt?$pq81{nK(m*`6RceIwBJy?{iW zC*C_fQU`fSj8@!6nV5PN!cOPLv%<)HQ*pO<-~ z?1|JMEsn>6PneU?uz&g_kJU{ciMKSKZ6wS()=~}2Ta5`Q)tgpMv zFwK)Hb}q7R)=qy~xpLpl+5@ZFb{`3xlNe;F>)~1WB zjpeY~&UjLJym2`+OMbOw;pR?r3Z(f}u=mR$$7aDOO{=d9Hn;`$zCx=U%pYC{1KSR- z#orm~pJ6bJPwHxLRt>CJjDzrktnlcKq}8ZrD1Dvi|JC-;0LAY5`IYGg;ZiJqr8E9Z z!%K~bh%t1u6F*u8;pq>pCEC=||0jLPAP8k!V}+w>hri+=7)Sm6nQm`&E!mGz_^ZFe zPUzR?32Lvr|1t+EwnAML4Z<5qo{A^=QqB%!TwJ%%(6widjj}lmQNSmE-hfadT?awM z29oHX8F7XzIy{lwY{D>X(!bSlSh4W9h0Sn?*G`8&CDFUf>l`0myE}OlAG+HdUCMUd zQ39$kT*%$Hs>SL(+@kbn{U%N9<M5)NZMUwfBY-hAbt#$;U1>#0VZfVYqIf8EEy zN~~cH75H`$j{mD-(V~8U`&Ieunl^`>jGi}fN7$eM)G@fhaAwrX*YzuO^6erJmc952=m!UJaOj2Sk2}!g+QAP)q zt`n3*4mD(1It`<7pPwK}H^z%d*WfvOgM*`^H%NYi4RlTAwP5KiL*q3E`oCj0T}7)e zi$C|K1N$aaV@fb5;ek)|cb~2OO|ZsVxO?pZnf$T4D$fgLZ`g+=H~iq(v8W7-2)X|z z>icM!#c`gQAgI4l)yGfG(If{!nKlw~t0cNlZZS-Q%=&;3Ph*rd3V-3k;Ftjql>CFp z3KxXV!S&Jz)qHB+Qq2k!xJ5#sjW&?nbmz$${aV~v3Epn3hEBJDyMzlMze|J^6fwUm zgmg&fI~z_0a19LSyGn?Ex<15vK98t|O2M^%#UK^WB%Qcy2T3?x zKNFay*LU6>IPId297MSm!opd*5hDl{zfFkQED{j#)=pL)e236P<)zOEjU$SfLTf9M zNZwE*>=Ej?ycL_=OjY{+Ot!h>Zg752xtmXcO~j#{70}kys319%y>P6zksLy!HpF#x zeX^$Pm@V#-N@3mYQMT^f-I9c@_p}qKsC~o;bBv{!enc%%=iHXmg5k!eqz_f)Xcb{S6Zg-lZqcBlb z59l8DC{uS&TpP#)y)g}JFplz*o`zoK+k(EqbCt}2hsaKZAD|DZHJ<;n)PJte^ zCnX^vVeW^SEeSYtk&uWrh6`G=1`f!cZ(#vH7Rr~;=_>nv6-ypk82c>p!Hg?JTac6G zq3pSH=PomB^CR+XXCI+Uoi~gIO5*oP4mizqJtYMWEK44z=;mbTJ~5J<5Z3|PAr~8y zlEztr?;awPZBdc%d$f~h6>`S2M+=*%>O|WOrJ7O6d>`p25<0R(ekhZQjf^2{p6W?o$1kGPv^MHs>!&u{XS=U$FI2kc*jm+1$+ z1XW)<4XiZ1ElQzR+T+11o$rDRZy#WNIF94FrpCUG^LUO6pNXY76=sa1T39~*ImP4g zZ01>(uYNROb1WbKYzC0$n<_lh^ywJBP*?^wgQ%$T#n6-IOFbHwzZ6+U(;y3s^2&d) zj-R?z3BIuWT&KOt92kRfV_Cv|Ym`8}rC7P9tMG$rS?{>@%1np#sj$Vyrw?8(+Pnn7 zZ2xBQ8H?dW{-r4c7p^_|1`50P(-p(GKdV>_wpgw;JK%t=W--`y9BmbU**D>B?24Q< zY%8%UWqk;6eze^W(z)vei%zypd@!f}VrrzR1NhARb?}%Hs6jV*Z>E zh-Wp^=w}%3;(Eu;V(=YfIQ89Y_~P46*pzDa7>Dg?8(5_6W4xEsqM-jjkk<*YIq8t( zYsviKxC{8&=XtEGqYAHF+Bs0V&w^m$J@K)m(^VrzZ-)>P*-*4G;t@bAmMnqkvs1!a z550V{8LeSS(2u`(8h zP`HSFX=81YIL!Ad(bkw%X)Bn%X2U~`k9$b`(f;6$!r>G=2D5&VX0{NRN8$7!u$&(b z8Z>C$)Ovn7B3+mr7a^VwpHh4p{?nL$tn1WUTele@pW7aRXhuAh1(xm2d+d@;zi34D z-6VLnJW-93A0Ih#TZ#o_nk|1w{;6zJMU2;$nn-G z+@+JnxrBn(re!ds=NusQdA-fnex(mX3Xr@!cGTQ!kndW_&qeImZe2G2`DN&ze|R;t z8Pkt5-}!$sE*%t~Z-6ed8wZhVEu_`Q7T6#8? zp$y%-6J{A5MPK&&3X*SYN6M)TctHI5O!wLdlvmmq>KbienzD6TT+Z>1R?o!n^2qizA zo!yb-sgW4pZDKXUcnD=#1l#HEHWRp(xAE~5oHUQ`;aC_#RYyFA#>S(4#yW% zgPh2JD}FXorbc-gYI%awtH9!(Jx;gA5UTP`{`4q){({pU^F0!Zc7|@ynqc}H%yq>y zXJ1G>%%(nDWOZuTK)>qIsZ*!wEaxSni_BeNylk0#T&Z5ECBH|RZ#+38j=~hU_V5b| zz4d$Ck3uWOXBbIs08o}?}|+J|hXyUz9WM)jxd+xu<_RXUJo5 zcxI-l*8B-soR1$!$_dT*Pjb|*{TVDtynlhO{ojJ7{smYvtGn<4Ohn*9Ig<^Kh#hZp z5Xu;|iMk_zHRci9SD%pGs*Y-JwHn$hQK8a9*V4dB-B#)#q)S>Q@&Jh1N7Gt4X<=APz;XScBa=;gnIy{kGcUIh&O=I!IPaSW)B(Bl; zv9`&4&B6HcoR%{I!FVi>p@4A8C3tZyH-^g6qg`W4pn_h>1#CVo zTC{+7v!F!J3Ik##hG#)EHN$O>KmaBg%`=4l159Z%t+=F>2Ef`1(R*3Eb;i#ZxAhoF z&)Dp~hlF{4m1IPQ--tGCWc6ngB-nIvw;MvMVqbS-U*N~35Neg&(+#~7n*zPpJXiX; zi?iGZ$rw;rGt{jG>$OP^RN&%zSshSzUBdOAXKp*a6i&Y-oC&XNpwuSbLy}1926{hv zds@P-cQ|9Fr)1b{XhfbpFYDL0BaJ|+y!85j3Age9mTp68CAZa0$1_l75E$puKlOqt5d!7DOguNMvgeM^$s z=Eq=-Qt*m9F;zt{;QK@^^uf z?CnjVGE?xk^vODZ-BQ)*QQFfFSU#l-+{bf2J$xT)Pr8Z_LJ*#o@&s#}-4Lq3Uc1@- zSA0tBtXQH}ge*Vv^n;sz#H3j;ByE|PB^K69iykF2R>D zJh67W91Fe;OABb>nZIYf-x$Z-ce!InBVYJjL8v&K-DmxCRUpHuPW%#d67p3viki%x-5;{? zB;>0LGZ|7n1IvFKYg|S%Hr7GDGG3M}4{=??GAw#O4goEDs?%cY&tjkdf9!n)U>3)> z??4hl0>NDa6n8BYX`omsUbIMQk>V7$LW35kxEH55lu{fLT!L$G2oQ%PBt&=SduMjP zm66T6x9@-NYk{H7o;kmB#=hN=Gqx<$f0VfRr5Hr*A;n`FJFGpA0SYc1uGSE`rS_G2VbxP;BzVe zgqf7E3XFmv*H{?_oo^ge^()dDev`=BEdcT$yFdpugCjBki~L1Wy}~MxSa?~$iHBEs zbnRNDYuBMy;}pD$8FQJjqMrA#BH7kdwA=M-H4z*Web6GSlDS4aP-5u;!V(NlYCBOK zArD`Nct<6i3k@CCqPrm@!u%#+j}IS$TqX<_I!qobojE#Z92BzYXOsdv^1c>&=q->MIPiGz_!bw&MBCL*h~k&wk0x5uGSSSOmF0n z`%Qe>dFO;6psrIDxEh0E!8X{sE%=4qw|D9}{?$eeox=9mA{^*#r+4sT9N!T%L|Y~P zkjC(QB+L@%bnxxDH^&;941;O{=Vt`&J@PW1T1;3si`@Mty(>zSxz!aGfFpV1qnw?u z%%Kffus$X_X9B;kU<_HJ8dyN%G-=N2-6I2?jLa`JQ;UhW*5>zsF_!SV=NprtOsZt( z1j6eTjaQE!$h8Wf_@ZWbDmDN4yI&@r4@=tng1qJ+ID=-_3qlUoLgytIY-s+jK75yQ zObrU=55+K@krYTKcHa{6dSbsqu%KceW`+m$SegqY$)@E*p7+V2_tyI4{l)sz=ZRy0 z@Z%!%nIBY=&jM3o+VEhSfeJ}TfK_&lBewC_0z&5J$`!E`p=&(m5lFs+SG(g<Q?ifxlT_Az+0d;Bj z@oV-x5}c`XDL_b1P0IK?i!7xEu-srb7V=Oymi)DB*%4X*Q)sy|t{;51^kU05ef5gQ z0=v<<_u&0DeN2nszn09o%Ml{0#f^y@0rXX>oAPfJh;jUf}%r}fV!ZD^C@*;NlK`y>5-DS_e})jH(q>d~U0 z$Cj|L)4#oi4)JzL4MXKWX*mzeC;2Gqve5nz3iQ3baTWdMSVr|_u4CL~Fwn@H`@)1L z-^&10c;;gq(p?H=xer4bs1T&CdCy?k?3gC&b>IGAfFpRaT_T5*7oSKYqlb==x^l>E zHIa{iTK$2B;1_bOEqGSU%d+wS!!bGFC5O;BJdJOGZ6yD_?Do;bv6{CKY1x?&dvC$G zH^-%=(|;q3z!%GhzU}G7R3-lVSeAxRsg;-OsVO>l*KU3c?TM{u^BcHMlhl!#?2o7M zc6Yg2d#DR`h^84;xb(PjtI3}>?-NM0c@tDj9x8Af;f1!C%f$rI^sP&uedwu^=CieG zd#D}xqscO;TF?&UT=wQlQG;U=E>lil3XcC--azEq`*v+*Q}!ceDS^^MmoGmVUe&^J zlJ({Vz{%6_FO;8P%b-nU(MdjGQfe2~aQj0o4E zsB)#yc$&f-oRa3P3R=&Y6q;f*k9|z9l~O19tPGQGOMe3~jjF(1h>a~{L$58(pFE8S zh0_T|8`sr;oDK59vrGHE!v1umAh@>M)Fax%hYAR48?9X3x^?S5C0wvicwJR4(WWTN zJ;j$-yo|4Et<-ksG4&P!taQ_S+mt^nY?XwY-k`}rs7|83G7PyFXjuSqjqR@(@FKQX44}{P3){ZR zP<&n5h|^?yrE;juUb_RQLGJ=yYt1!7FO`oCRhh41>>6q&h<~o9^6c3G&^aKJ^6*`U zd}Ci}uLZmp^VkgdJjLOMrW_v9s8J(79Kp26qm#&3eIZ}wN0w_G5E_|;o11-*PoAtd z19kI{XYAoeZkxaGSngQ9!`K*CW_=Z4%F)m)SRVY18NP}=)J&{EPr{8j%uLH{&i{GnMOd5y%6%NZM(rNYCI_A+} zwOYy7@Tl;HuE6;I)Wco&JjHk=KVtFf^p1Y*m`JZu&N*u>#*3Ou%_vO#|89?u!`CJQ z>a|OM1EaSw*@a0ln;_BO#QajxqmWHfXzm<7^0cU!98xc%@=FEtwZUj~HW1CZU62&B z3z8<&4g)Av%q}Sqrd^PBD(?^fv!v=|sNfFEG2Ra3zj~z8j0O|DYa5y;oIlfYh1M|T4qg%B3su+Z03bP=b*5b7K!vQOt zfd)A1(x~DBM)$xur4JgEGvv`2Uv`=pc)i?D;ATdr7>^Z)l<3XH0sOk4HJuc5PH$yA z&$V~?pcx*J0ibxYAJE_7A_pN<>?N@2Z?r~Y zhb{-3OmNcJ46fERzHfBd9{b zBE{n_s^hVtWT~K6mwch}WZ10BS|>t=Wz!%yB3rYN3jxFKi2EmmA6^&hCrPFgOLx{D z>qOq#&BK27ik~Xi!poc!6}(OSoypbXr_XdvPrN<-oCH*{GBw(53+T z(*KPT@bblupSkrBntJPVFbc&=!dd1gP_epjaroKa*1|2}XSkXU<(sHPb;=4CP6dq%n8>{54pbBF!;{FO`9bmE+|nxh6kY@NlJCY3!63e8Xh2m zOsqyQTnWcwScdn!qWBsf zj%c3rxCqBGy_0-R`aPm@&87$D#m$;kPN?hZ#9<}+Y9h51-C71OvDGy^xT{eW^m(I3 zy$;6XJywLF?N3x65u6+=HBF(SFqVt`jR{8ec(h!<9ul-kQt`U4f;1*zqtoiM!53~$KV9(MmBCghC&rg(+_>>ny5M^ko0f9xE(M%}%tHY@&{uz% z${8|zGBb41%#pba-*lDOKs307@t-SKu8hQg3dOet zE5FkD>}n@cMyF-b%ujX0V1=FhCgQ>PiT>jh->g$k^=WvsMpb|L3k}-p8sPo3)=byz zwYX1OrfLPcQCl4!i5PVAhn#%;T z^CrH)=fQw)+TT=BJh;&4XxX)Be3;Z38LuIK^@wEGl(X%0M5WDbWgXRei z^SNXSWIn)d=$m`f!1CS32brH~-%IC$VATBue!<$0d*kHgbNd$gVeT0P-%_VpjBrre z*^yd-;n#D;QYp}`-vYk{{fjdrepC59r!rJsz8vOLcea(}^A0qc^j~Z#5!{8JZRk^X zs&vbxXB9e{c5b;8Re=Muqg|u`Y|(_-X32s#DqS^zHpJi=#Q0cs?j7dtC9YJHW%%|Ko8Lep z|1V{^^`30=$-9&SJ7J&{be*WyBwJ*89!a72Nb3xdF6Oompj(Z-xuFGx-6jJR_q{G@ zeY!QKAr7{(47v){vN_d(o*8o)B+J#L&fCxd;*;Hgt@`H35$*85XGe+|sOJlS7`H*k z(zY}Cum1dU6ZCNI>(~G%bY|!5%0&_KhFwFGbc|*V<6&jh@z$4}0J>u|tS{xxsFf>(sGc_CNM6Cs`c3Sd=lO8 z>@mx-v?S|j&CU!`P>96_v#KK7-i%Oah z+IC4bS5Z#+(WARtkdI_)C6NBwmyJ=Eg;J5M@nA;3@z_HKenZBhW+eI(8TK{tKwsG0 z#XjswI)n&+4!0J{++*!8I1BaZI>}rIEEpv_(zt(;LUu^fGMB`hxfTr< z1WB+O7pZ06=Jxlp1-gElcZTB+bvcAY8P!T6TV;Hex13y+e`bLGZhz?~+>*V|Hp~WL z(Y5Tr-u5@Bq7pDgQQk%|-3}5$4GvQG%~4s2N<}|1p#;jTj3SN%U$HE*_1LeF69aqR z*e_sZFOujPxuG53kj$C~Vb5I5o3YveU?{VK2g2xx-{{8KwH%i1b)aG4+Qnhb$Z;b9 zgE*|{t7o0z%T(PVa?y}eiSl>I(?@=Lr%jtSFP>~+G2~f$!odmDjo{N_72HpTTD=T? zid!FL0bMUfbLKM>%tsaj8{7rCs497Z_Of_LnT=EU0J;R0Ab?Bb8^=1~gF?=3H24 z>NV?ml57F!BpgUjRD-i)#LMF$KIqyg3QUxl6L-!OyF>Q|u%F946Bov!ZHjVYb~TrL zu_Bfw5XaCU3Swp=G2 zP-pEEi~4`A77C^EMShsfBJm-n4?Z?!7E z9>21Atx=0qW*_$8lXhyI3AP!dqtfpje@O@1aLWH}{0NLvQa1}H2}R-*%n*YuLuFQb zJLYd5Gw{MO_MMaQ_-O`1kRz^O7}eW2g1v1Jgl?V@>rGqXePI|(&q!K>RIuK7x*^9Cy~8Xm5eN3Z#xX438mV9wv41J) z*4uGb3mnE?g86A* z_~#U?>Ki>sumhHR7Jl~JqO0-$FJ_mr88>PXez<>UnY*xzLin<;M$VMn zFw^gqh7BNohP+PnJEKvblHYWe@!YaN$JCLf!3V8 zWgohC&Cn)b-fSphdH|?nDp>7Qu-s96T8tp!NTF304@WLkns6M`+x3`p;9{~qQvdxD z7z|@~a{i^n;(^d3ZGa~|kL3}$|I6UPgO9~pN0-j%A3f8WH-AZ+^T=NnN^^0MkXFxE z+SIzctmE_OhB|@kP96$+XonVNaoMbfuZA_(KT@l9?)Iv$Ir-YkW#|Q|V8t4vI=>l|9g4*NI8J6cOz@9d+ zFidh8wbSZ-F_TTH_LziMSw`5s)J~DXN;p`^Udr-^&Z-+NsO?yARpXUC!1R-0wJ@IO zUhq#6-b+wJ+3zWF)UImu@2nzg>F;M_OQ*lV-ETg;zErzUj1pRV8d`FT%kuoT?yK~Y z8&Lmj9#HL*!eRyBTxng8$GqWKX&u|Z>3PFDt7A{GgLy@*dXITMOPD;C=TS}0b73L`DS-6A(ciE%icJeb-@>Wi;NZCJL_rU=a-O+8QHT#Rm$7i+ zZO0}R&it3Cr)M4UWo7_C_y}n+(VEft%D1MMrGCRH6IqVw`who-H+?Ks8;@lfAAR;E zkmb9r`=MX-u$d^*5w7z*v3KtQ5+z{M@b0SVp_`J6#Bf-tE6N_t@>zk$d?MeBQ@b|l z`#vM<7`?JF>eO|Hy7MBSC&sQjY)00C?CdZ?64vhIjtZ=u@@&?cXVI6|_REJ3#d$Mf zqCpSdUOiTl@^Z&VvJgU^>S`k3rZy+sh-~8Z4FAxSrUuOu%R_mN;m`Bd9xF^v8*)5R z*nX!hN)7v5J=2*FP4kZ=b>skWQ^RbP{+9ulFHbHFcRY~x>wcj%q4Yq3?6Va743=YF zkyx>>Vz>+>U%oHEvf8{ao14iBp6{-*N?caDu-F=`H76MdC*cRRS!^m+t(5MwF}|6P zh0sx~&S(FQahT8t>xuEpcIkJ$!}rQ?THp;=Gl$>FCK7r-RY9X2WVDMsRKYtk+YD-{ zg&IFfQleu3i=lWMCOp*xSYX*HFl!Sa#a@*08VWfSu?qC=$4BtL1Vb%oWUvKfmZ*m+ zKUT5j5(w&~C13O(_~(b$E0Pw5&a8Fr9A`7s5!fvRN151w9UQ~9JI>>mJoK1vt9oqqy1*!2;$2!<5Ivn=ccE@&Gz0?xZA(g~H zso6&extA9yBqPY-m}{4sxeoi3LSpQ5VOQFA5q%K+(r{Yk^3u|*mR66ejNKps>%n1; zecFycX$%Q0GV|yyaXFtZhrhgoTjF5z%W}M2vL$G_(!~>@lS-IGZ#ms+lM}YT`12ux z2E`!GJB37y-YwTOj2?F>I_y6l4!R7hA|iC>AKhxxM+PC!E>o)59|Z|(d#6a%D6=h= z#zvtGcj8LXr_5DVB&`jU2hCMgNl5~`PwcqTXqTiUDdwQLlczGrGPpbM4*U)unk)4- zD6?IjGtN$Fnm%7q4>?{hAQ*0LZr=dhcRsvGwt>5MhNq||*IPWM`s=se^k=;7x+mnL zkQ`DyVD=^UO9{4<-F9jy6)ZDO?ro=+g*c~RBmyPLRS8#PjUbc$CblmXJunN{xDjN& z4FbDpN#bNXa0E%NZ-*6r{G%Q858`L6)M(kV;9s>dDVr{@+nU*b2+LM|%_tQ9U_&bj zHkOcp9fc(TumXuvNsgeLVI;{0f=v_l*jz&XveWwmE?Kd`(w!u4i`ZZ=7ZTX3*MWfF zdx@Qm$y%YnU!^}^YSj#kkkMS&X*-P>)8f<2nX8QnBqKUD&0drlb;IAzL|Z2Tl<+8#6M%@L~8rl*W3GY;1Qn6sN_uqn~`F0?DJ&YzzG zPvW?)jmR|#mklIhuKHQFr5IelZn_dgJ3ThTFZ3=Wa?s6$K|*Tk276U)VDV6Eo+zpB7S@7dCtX1{)`L3h5rKD6yO22(4h{ZA~8B zq{Q@~ym5-sfXA}U(8S>!FPd&-M6)NdMyY0-Hf?@Qej;f$I$wyS<*7*eHg(?6q6X~ckv4o?4#$aU82sH_ z)QDas?x@h4jos#kEAhu!>>D_~EIEXZNQ&M%#zL?qe9^iAJny5QmO$kR5e~AVhoms7 zjnekVD~Zi{bST{{uepmnHVXLnmXygpX2~<*RuI6x*CxoO3X`UQ#XM1Ml9Xw{74DBO1H`~W44MIA}>(i67Z83;ekasdb z&Gz?$WZDG@sZ34HE;f{kny-C`5Sv{>Am6qLf!I<}qebEi&JUcgFL(?G(OI330Z_t; z`1!&Q$s#b>?F&CH8y2Jcp?cCcU*Xu+r9^sJ{$Xz?b*o%Nu(mqo1YkcAgITA$H{$?1 zC}Jxy7_Pef35SOBQ*LnP*syG%kTY32m8Au>C>1QzeY{bOP~&`>jBQ8iby5kl4t`s~ zCd{;$k50D`$m+M2{LZO6$n5nS7N(3l$EHXW8I$Tc`xh zDFrV!juzgS(U@*f+5BWmoN!A=o=14C2P$&37+NGW)+2E|3~O`1nyS7$R`9OT$rrGi zI9mVt1gtL}si!=M57Qt2;KYi?;g!0W`mFidz$ReK_TJz?B&S}QS@?W*Mz1+mdZ~;w zo%J*L4ZJyisL=&rdOEAYR*B{~<$INAhXY{5%{b2sT6`VfnukCc0&DT?!eEMsia%Pw z;ORt7=(m>N6eXJrM>&tt?qK2+X-^6@9&utsdp(%<@mXd9HL-;B7xPvj6slwD#9cqV z;wk_6ym=e2u#oyUj2{fj4nx2E4E zJgGamut*W+wa*CaQNV@0P>VdJr!`z!mBYbrc~GBl7|*S?LU0)p#&4&#qP(nw2bX6s zXuvPf_EzS0;{aLhClh@yc|Ly7mE?M!YDO*HPhURgzH0ZAYKk|>KxjT7?;{%uP(XFQ z_FZD+N4vyw2l2`QSn({TL>C1uKb_{EkO7|M^wa$N$T6CIn-EjcLe7$rh3RL6=gVhb z4^bWI`LfE8X$SJ9$#MAlun;W})%kHcR7}+XR01I%2PEbL9X*tXvx1(Jb$w_VF|OLE zt$O3It_*{qLHh83)=hU=ED>1umMkfsz4CU9Q@&xqM0}@&R`aAg#4C19TH=(=ei`Ha zj2`N)^)pZo7<>pVhbr3Z23=tn#Pu{(=<`@WFisd(hz*qbYQxGy)j8WNMk0HCaO<#q zBLkK6j=+hn85N7?OQ?Y@UWP0J6*pTu7cyo>05iLBRI7g6xcp8Ouy;&7{~i1iTZiSK z4$kw8VOIt8bmmQa7+pg(CFMs_1CrB4vwc1g=rjJAitQYxN`L%gErH6Lf~<2~2IR5H zZ%y=b($HX72${hbil8XCIx+B*2&b+4|MX(u~6@&u`=GxehWT+E~O>Q zb^6LZ?v32$zLR~MXc>LMJd=A!6l?6Gy(pJc`$R0m<3B0WQ&yhYiQ1p*Xl#D9sAnhB zsjsiBJktz#1*>z*y7y%-fXa#0Ge(PU^8gDre<%nuqP9~n z;~%tAGyC4ru-01}6P9n#08H^#jBe?y3{c9i&^!Y)q*dRrXI8eRZBG6A_d)OoTbmn_>Y2!$4KG7v-VKU2SdJ6+SbjK=S-KpYhW;r%7>J3+ z;;9P7WAU&%(;KcPFw|7`oC_OF3hd$DdBP)eh;#@p6ji&vENcNRiB^Tgx zttUB^1LA3RO<7d&$tvOfqcNd$lT#8S^Qxre&s9gtVzaej1U#a9Pf9qJf#K<%KXQS9&DVdU@A(4K9*``>4Q|kaKG-n)> z)0uR}^udgxMT_RmcLOJmwSvD^#OxnGTSOeVGL{xfF6TSHDjc(M%gO5U0em7Bmno2hgv5`_g#d ze9fvBx`A=XrwDx+0^r*&3`oU1JbGukQp7-Q;QJ(vT{QRFjCp@u>_pUyh+xZpi+Mk z0UoOo|`0#~$U6@25+EmIEF9pF3brg2tfW2WXKQR2i}Ts3{X6*O{c_nR^da79gH?E?*j^w_ zyD59*dP`|v>N6?Um(BwHDQQ&T1{Hct#8i1XPXOqtnF9~+@@8$f9^+@_osm^td+FNK z5c-*F4&J>b8kJ>jB!r=T!W`E6vWmcpoq|p^1bW+PA{W9U2+buLZ$9np9I98i)f*kM z^hEl@0&rNxqTN+T$!C_=?FVxPj6yM`^w{VVzB|)B`^E~P3TyNU(BwOP87(SSmYPeG zZw_YrU(NuQK%9q|z$~7A8<%{vE?LUs|ADOb1>@9izaHE<^M|EWP$M0H=LvNUjw%pO z7mWp-vw$`J&|U4KFgsyq_|ESKklNR_=xU@F9l9)+cYn446y8x#0md)O9s<@*gj@?Q zrsII_P-aEc) zBY%SZq%#Qx=c)VZ4oN^)fRvb!0AAP;(#q{2ghZADp*&_f%=(KcW;j?jIBlG8eG z!}|os_QC(+OZpvEQ64CY?98fT2};7zs)}-4ND44MZ}&MWt0<#o807&b`J6TB#nMmR ziKU_k`}OR@RNmOOEO}eljSaOp|KWdoz#TZmv3-mrnR!F-jV<@!W~=Eg0-E7Q><@68 z?Ma)fONL}XXo?Ls;!|oxxs_fB6Bw1hbpIhS(MJZMs_hRDyg&-Ig=(BcEtFzj2cJa{ zocOJzj;Hc@8-TG$Qp;;$W%`AXCemPm>2@0Xacz;iF$a=0io5W|{kb_&vy;2UqMqdf zn7#O(n>EJ#cn%b%=AaQ_nilty_~B4zPwpCi#`Z&97Qe-b=a>FmtIj?J57mRvpCu+g zPJ**zz-fmK>U`(3=5)YL4B)cI3B8xz%us+NXP(>QV6Kq^>Fs5y*pyJ^J5~*)TaJ~t>wosWnj-s+7QEJe+k>)h zllQD$ir=CtlIER@V#S^@tliN7`-?4guokuR)$@L>ghUztZ}cN%IS-*rWH9AbB9b){my**qc$UCvmcRHmu9E;TVt?XQtAtWSSUOM?QiV05j zWVu2@lE|*r(zDUZz`08SIR;8E*hcAd)yRO3r*gjV*;KFzsbB+B!CIt(iJ5zUIG@j@ zE)cH}vo!T89UjvEMH}f_Wh*#e!14-;p6W;pu6n&BK$MYvC5%Q-3Eu;Syy3cnCu6fy zl6P|qy%RD0T*c^-V^3Te3Juq>@__cwJz0WlkXy%%Ecr2F0zTC+rk}GCO9P( zz5f3L*lqrL2Qw*Pfa1FOCI(#_TP){udkp=Amztq))NRKyj$?XLNlR+!Obx3MpGrE- zm_Jf{2^0_Vt6*-_B^gvm1qe?=rz0o~rLqB_mDanW@$euW^un;CydKH zwIFyKYppE3(*RF5(mMsenj!Be+Fweh* zLNi$gl@2g)NlguoNu;5rBb)-_#M5qpr85N#%d)BUkrGRwC9IX*)4yN8{$l5|gTBOp z+`n<-#?8re@T@y+Z4dkes!1GUt7WP#{b{IkV%FNVF6B?#zHHQ=`}W-h@U_(K(a#Wuy1FX}AKg>kLpKXsFqE5qL{10TR%=3CYu7eDIKVdQa@?~iEU~b`-1kBY zV$GjLbvC4g$-9ZU!iID^tS*I)^WT`JTL+*xn^6+gyJAMcP!wy%a7+)yW~z2xlc!Tv z=+XkanM3#8I6`LN)s_Dl&+jHoSmbz9NtT!<>Y|(VVm}0gCqc$>q}Y7{sEAro2FnJO zzLEIl#N!yx5u@`>!uzZDjDtFB3JA%)t)z0 z2sS31f=|QT*-61MN!V8tssO7Y>T0C(FTBj&8kw`#!E!R?k_-%P3 zKuYw21u+ljgWCuP2CZZugv!(UL3N@1I0!&!0Kf&0e^0wTLWchv3>ROh&A>hD$}739 zRBJ3+az<^c%V_5UQ3#LFdHPd5@8aZv11Infp}YYL+XS7HbQMJl(@Y%snH~oJ%#fl? zm435Sa2{LxGrB%+@KlCj^{m6e>b!=Pr_&QK7Cu@XD}#lj)^rE~c9G6($XuFTlC>3X zg|vFV8SV3N?h|}$LZ!U<$G?zZ`7c4?KUC`_K@VlvM1LCUBtr|&=4#b~1Er0ad)9By zZSQ551ulUflGg_|kNMbSSlu5c2Vn~t{O2oE^rLLLB~8?XZD~}6hD)D}0}b#~JyFq@ zii0vZMu&RniK!YS!&Dvk<0t58yWo65)mOkERA1miVtgc+$^y&|qI&;vOqO*$62N?Q znt%S?Jizfyd{F;Hf3pZOQS8&xl%|_ND~c_$MCZB=G2PIf;SSG#79p&04)*`vD z;I}`}>N*!U^o8?OcH`J4lF%sYXB=zSVg2Ndal!_#?79a(FUd2V{>C_2AG8--vSi6O zR<_3^=JSl^uN!4(mR7@`!aLkak}fATC=$Cj#ajr$<|B*i96h z4okkr(e~{kv)X7x3M>+Pg!ik9FUF?qwzg;GV?$e`jM}Eav7ua(wFReKoL;+_d+uUe zQ}9Z&V+Apw!m#xL+@)X`U7g_DRF}GEBGob1(;+TYn048UOkQz1c!jjT%SwLq{ntvs zrCz=Ac9I@op_wyhP97dlU#?s^=oU~X+{j)|xXB-K9c{r68NXc~_>Nr)qHY_WF?W+Y@J%m=% zH(RZ+jc?Qtsno?DLus>3xO4AL3|{YU$aBP?cz-@ArbLANP(v!PG+BDvu&TS4JIL7# z5b_>k*UAHS$13@+rSnM&w4ql27o2%T$X4;#=PGZc!rEUbbA|Fo#bEhpH7d}&z_!gPcAT%CU8uT|XpLp=94$sbnW&&kmhv;jo zI$GgV7j5X#^$MEPDJ`c|K<8+ySf~__Mg2B%=dQaucg|R8#b8GScstM_=vtNN1^FV!)Q>bW;)^s9H|%azzQzA*h#_H7c1;#tOy@L$>WIgZxO)5*X#EyTf5) zGluN}*kA4Q3T2fBtQ61k3v89q3*Mq)QYg!4m|F{#LY`nyO_F0-{Gg-KS&l(6mb!f^ z!QAQ}PsFF)(5E;o9T%a;I?b%I!-oyOb?nF;l{<_g?@D;59!R81d{f!W7 z1L*nmkfDVp5@w1a4>3b*7IlE>q~syJ4ZZtGRScRE>GwN=HvdH3K0m@+{PXO&M%}NI zSCdCM7&VLMIO$>WF=T7UX=`CI*qu1(}-fNhIw@lZCaAw!QR*D?2_Z(7HoaCV z$19xD+RCudQ1@D`JQf7y48iaBAbv_4=iq`FRw2}i9?t*{1|G3{tY13~eMq>5 zCHR+OB2zt?x@_KYeDfe{J0uEy1rHa>(a8XeH9uGc|1S1BA?GZ?Fl0GGjx!94C(Z7=^)22Hhs;!| zQbl=g3-^N`0iQcpMt}>RPK0B#XoZ_J$+BLE$~B56m&sr_QN z97l*UmI>C|^c8wd&TCV$CeNULCB!0XuvMZnA(L1R^|_@>2fc#KZ;5W$GDOmS9SfJu zudd-0O~MVPMhv_`a|bR^;jtc=#BLlkWV?Fg+UvrM;#~4h9Wmq`NAIV8<6{MVNvN~G za}qAFCW*UrV;Tq*CuFzUvxB?`SEu)Lo0_gOup_dUE6RG5z|pSmUru83I4PWv!#m%= zQBbCaL4B{CV|G*89;X|9_Uzf2OkdVe{J;tKBHed|zS~_yC+0m6!+d| z82Kpb&#|>?rJ=VdaFYymlhy_OLCa)_L#AIJtyKvsKIWR$P~#~lY&|P zAZIe0fmkT-)hUFmvM?+p?3{Z`UdX>cpK(p<5K_q^&5#~{6Kg<%p{r%OwC#MooIbCY zToaMk_{OuJA-}WPb308gyHdr{=gHPgW_T*qjF2U1QQ7Hl$TB@}Ln6yHLPB9X-o@II zqAY&WL6UZT_aTp@i;Nm|a@0w&7D@O0_m82z2bahW9HC@us(kg&cB7!3#B$2Md;TK) z-N0k;{_Sp?%e6FM&^2dWx*vYXfLulZlw6HPG~Xwy0J_*t2K8DB&;{O5L?tUORRB8A zzb}Azwg?4;M0FAaEPaL|;PBC-&TrcgYN7%Tby*ibRvoTl+MgYUhDH=zM95S)%91)B zLutLfh{75s47@UKf%+c~K_O&}F#esd=@2|Ys9Zdcs93^JUvdcnZ%%p`X~LP7A_AN& z=gAn0VN5FXo->OMi9AzZp2q<&jyv8{hGjdDNN{UO6$8r%U~T1ta#HB)c#PM`f&-H| ztkhr0SaVD{y5#cmxPcjEVN#5aH+SYU<#lQce%GMEhNBqYU*-Tko>YmZ;BRW==b4^zcTy~LOwmDSXi0G0>nH)vQHS5uwlPJap} zu?5>kO&nhgmAnRH?lz1L^|&p?{mZ`~IBAyv!C|7XP#3n}PM1IkodYbcr`#fv^CrGh zP^$Hjsg}S{hwZZU(lK$x#Zs!EHn@w#(*_XQpF%rLZQjHSl~9^t_z`r>()=MA2vj6b zi-KA+k|L;O2_xPBrMpHZ!h>-c4v;%_!G1m>j#x9ev?eIXlP{Rg#&8>^<|vWK){@gb3|xQbaS|($hMp(C>tg(~ zbUcwZr&MkfxoA_tAQVQ%@Ie{=WK!LrIigU?UmhImqxb*41Zs5{wtah$!x6*>RckI~ zI~?2RcBsW*wT4mt_6{9{nyZ!uFw(lG18C^<|M;`RTp?{noI#Ett?4j0CIR`HYx-Df zuERe414 zTLkl-Q}D);-lK?6@gf+02T^WM(o4|uB`?%5c2Chp*h~pgyBIEKty^xi5ZaQ%Dp7~L z5Q5xHzN5VKyT||mn@KLXdSw0K0NKQMY~aSvBy#9F&7Rmk(8~)+(uN2UX4nlZL8r-* zB{RB6x>;BZSv-<-WEd9Dr{r~3iV|Od`S(H6Ck^DWZ6`3RqWUO)i zZ_}ZUhIUc*u|Ik-V>sC^{_bi(Y1fk*cFki?lJJR5Z0@h5cb%!yo#T^g*s0wjzBUl_ zlwR3E?kC9zJFE;z6h;oZ>{ggu$<*u2!_|_3#}m?^Rxo|*H|f&GGgCxLt=Htyn4(8h zgt@NI$es-(07mcqND)K9N%SN^iKK7suAWCltSou^1R{%^LC(AJdb#70e-4i!aMG-# z6B9rpHeZrk1<;o?{p6W#CybBiqhBw97V8g3NewqHO^#5zhq3fjSAb`}wEzsyH*lt_ zg{hI5AAlLDAavYCmupSR{9?c!@bKDaESkPeVDda*c@9b;@SQVObOIs z)lhA^@*mzYlC&l#2f<3c2FU9cAt~ST2tw7P>kfu%P0sS+QOW9rPH8_wE!1HUtDCkB zK+yQ%__Iw|1lIfS#D(@chDhI2W;W4?c+I+nhC68tyRF8y~ zP+5T_5C&I_t4D59fA)DwLQ@6+PiB9>(&veAkZ*Vhrsacv>dck7|GR&HQtwj=6ld9X3D& zORtLF4#$-BQTtiCwE2XP&P-{{4pDSeizV*bWK^cXyvBxwbL+vRl;C-YTk1>Ok*A^%2XCZ6BT?wt#S)3ib&w!!_MV(=~IraI;lO|oiL^@^WzZqo!MqN zvkz8ra|-sP*px`uuP&vncaW|)#f{Bro@Lx7214${2+P8J3U&xBq~lm zo0BpDp%KryS5pgS@x#ohNa**nF!R2<E-QFhSmr$GaSXjk6%QhDARV+HWwL8rLu-Rr#KL8EuwU9jz#nAee` ztYYpYViDf zUq<$DanUd`K6o%Q@Zr4LE_{I0-|}8`85#c{$ouT{3cFObe@s$jFB8anKPTjvbnJ_Y zz_{2S`n)m+qv`AN?*SEhL0;2&DVc-mti>`u<((k$rERccZ^=#-N-K66;I>mb2yMN< zKYARm{)ohvK?SDM0q|R`{xu}3VFKA8;vI9^*3<2CpW^K1DNMi za;q9@kQ|BAStUoMdSrkcxErnn&NQ8BM)LrD%kQYs&x?W?4 zV9r8qVL>0bXZ>Y8$r7V3J=!u`RN`a!=>M;kK-H)Aas!ezth|pXvstSbGlok(&xmcR ze7EH0qFw|vEYMH8CcF~Bjp$6V`i?I2!MO-JzR7k~dI)<&Nx+7aWSNOK0vf7PapVs! zIMo|*0A;!rpDe{5;IDVZ`zHS)(<^m@_;>9^B)J1=_pTo3kiBKUK+G+PJxhzFG|}5D zG1jWwDnP5mxKyysL{^%rcKZ9#YG2YCluqY3-%%&u*JtgEFU78gmf19$h`-&hRG3KL zK~>S8gxfS92wj2N*T&@wCcZWh`iX?+x5M6%eRdE^CK7Y2CY?P+p&yLQ!Lkvdqom8h zdPLiIVj>|`bUE&s=N5^v8?bdCjs={!;q5?(%rHvvtoO(ko4F&DBbcl;!r+O+BteRg*q(nziwXXI&4viRVQNe?m9lTM z=4@w5x5+ww+qB$CH6e}KzhOd@kj67~A)S~*G)zmQnqoe!G`4oA7HA83tVMr=ueD#| z3|BJksl4{@44)Qfi9$+wEl9MMyED?9*M#_H@xOtP(SHZSGsw2WMg!j(Lp?q-O=J4- zEZv_Y{FqJ(&ln1k#rd^kl9e36%`+G|4^WN0|!c)lMXxXY3naUxq{X+d=lP zz0gkt2RlgcBuGlO0|NF%JlUL0<<94^+*im|50#nYGLOwAFSXe-)O-$yWj?DPf}i>9 zPaM`*Azf8gnzg&Mpe+KC+C@g*17DW1a5eH*vZTCwty_tgov~U4NHJ_<1Uf-8lO@yGW_`CjhF$DBpd+R!o|dLxiN!|Erk!7M(k` zsG?xhr+H|1Ry9xDY%0mna6*(MSPdOeTLg!bqo1O3eWFO1h_zg)8nQN$Bx!X`6*iIx zX{DuMk}$Pc(w&mUr(t;rk=tqkK23<-E7mBPJT9Vz!2fkSC2V=sMOPee+tQVB1 zR@dv&<`WiyY_sXKSB@a3#n)L?%@zooaDgh{sBhoCTAO7A37en^zMPz_&{Z|p)PgrK z@7L;&>-@v@K?_V@xNt?t!i8ho&Fxk5eSGVUV)zFUK3)2?6@ULUReywG@z4ZFJbv>3HeZWCb(L=SbsML4IZ&>waI0C-Yx)RxbKX+*h)2n!vpw+vs zlka!qtAuCI)KDs&?k>LDD=3zK-ja%{2>Zt)EK~lkeyb+8GB_d+)MCXAUp9iP7#^0W zc=`nvn=mSqVN6uTyI59XA&-NXJGzqT(!S>}x1fw2OW9bQzL=8;eMa_5u|JcWxSS8p zA;t36shOb;XSJ3JzMsrOul2beF@L2K*mISv5;=m1vt_84+sdbObK;y^${oY^uhCj^ zLYo2VPWb*c`i%s-QT;S~iSUN*a`wwTiHJoS7(IA~b&<|!x{w&*M|SqvVg2@1RtbE| z9lai0i#J&T?t}6v{2{j7#!DT<8lPPvmH~SM&W$rViU@H#ICroch$~;uv2)8|H2ce z>R592^&z-lCm2qXb2_UT6b`;SH~WY7vp@Cj+w+&%hY}xH?AXIFwl$chhK&Y2H&^MK z(h&AU{(kPn)lSpbOet(hA|)5;>4RrTdKTORyr|a~CY^g71^1z}v4VMDzWS@H)=f{} z^#ZFMG7!PGRrmq8!eb&VQH*yCJy6lNo zXHwhN@x7(s+geTIl&%(ylMl>|PQq~NAr7$oKooBt(p@dL$2e#rH{FQxR?h(2R_|{8 zrnpek843AFh$T?BOx`&Q7l0d*m+ddPH&{c@y{0R2!0oVJt5xZU#sutfbW|J;-E4$g z5za*ecdkX#rcLuyt5&;dX#=8{21V}wx{mZ?0ql;v>4$r+VaVurdYF712w_jd& zx|I5TRV0ozlfYB`$PsCBRJmQLY}2e@zsCbrBrz5Eh%|ro9m(VZ4>c?CIh^{i12(b; zw&bz9A@Pf^!e;gRL&Uc_?`l{sjCWV(J`!gTu6gq0krxUd$G_OWSDpHmXJC(QU4`rY57}hhtzPi@>Vl=j=CCGj^h~K#w6IFd7`6zht4Cw zK5yN~EVh0)po?tt^RXx{9A23G!B_*`ONY`k*Me3J8(j9@K$CaNJTht{@T^? zgWlpeSQ*7SuSSh%{oYN%b`@{F0Oj3htdijyrzraj4@=~Gf^l`0rTg4wFh}6)Z1tH( zQC?JHIHqTmqHvX!i4|35usvWC`p~HygCCG*vt=F4TtC9;y|0>l3td>wxs7>>lTO9q z7xVIS2+Dg5?px1>vNT+SFMh&-Qyt_FtrD+%<1Y^TCl+ zhA@v6c6@DM5nmdlO0-I;tTQUy)+y(+Rk*>JKh+>L;^&(>qj+dpope5p_|xv)%t7c^ zJ>A~w+C&C!rDGSlRuiOjY^xEksruzDm2Pp{@}(Q->o!z7Li%lXJ>TSOzx%?7MAc0@ z;{K}eb$~X9Ifwd|8^$fW7!|p686(T$jnSC734?9#9vB z=P^0YxCw`xZQDrYRXTNy!D?8pzRevXU`?FDp11KLMz3%X_R~^OX&XLRn!!-|%i3&} z%MKh_o`t}7HxX*A^qX-cjDUGJ0H4U>xgH;o*=@Xk!AI8Nkm|gS>UVnxV;yzCErH>F z-}^QlHy3K(6l-!dkc>FxNQ%-<5+Fje@Hx0{a;^+(oSf7G<$rNEp9GwV>B!;^z9C|T z!c%&wSd57I;RMPYf<>(8D{b@bxA=&t_a1NxOj>v8Y08a>RciCY0QB|mBy@L|(Nq6= zn9`Wfsc-Cft)b1lDx^0DdS%xcdBW^#jEVLO#nFxacJ&il5PwGxoqINZM^?(-2@oq0 zK?b^V;!dykv)Bo81QmbrQ2ufvRPu3*-N@HvKlZf=5X~aSK%5iGOHx`UIhE zWShhUriqn`C5bCP5mYqBmmA)a=#$s(-#@Tt{CJ^ZD!Jg4BYN%8gAZ2qwobp;g!Pe~ zS_ybotSEn>Kid%;0q4L6FDWm)o^2BdiQVn%do0Rvfp3zN$)RkSXoR_U@n`6xw)31* z;VA9Hc;TDYQUAZ=JXfakX4I*NBC&Wse5dD_dGnsbWojK+1fl0^ z3s6?33XkbEIjl48)vAq?JF$@ItAK6q!>l&~KbO4pO>W${F&E~k_nU#})DYUUq0U$5 zm`^awXfA$_$#hcNPo3&gzkdBr;W&(+qcvn3M&PrChbJ~-b7-w%SS1WN;h6%A8@`&nbt z=zinjO76Ae`-;d%&fh5k_l2t4aVOca$>=>f19F)GrYEPPb_~`HoIQJX0-(xp=~{;@ z@Y27QRD=*n={umdh7C>k!Nt>feOleeJX^x|vV>2gCQ;}f+>tGBR$NbDd_5}@knVBc z52rzi8B^h^kdE`ZAp3NGit&t$EKm2fh1-AS;~10`4g_zd%W=;>u%6w8H) zV+}{0UXj9FU9M)zbt0Ti-w);qer0cEqu?-r)S}sjZ*!(Ow>>ysGtk0H3aYR(@* zz_LBTPqnJI&RbqDFV;6Gbb{3Ow-&kETpZ`@YEg_Ct7bRU=!I{%l2xy!IUv3T7?aNV zCe|ntZ)G}#7HkrJSlk*UGO-Z}Y;4HHh9}~!+;3DE<44f2U|F35%SVR+p;ukt6i%E~h9eg@V##wrgbKay7v zzB(-@8jdAn(c$-WY&sk8L#*}GD{aE}2XSM->v-;GU_HwEPFW*#=PN-) z7khZ(DcR+uX*2a(aUJd-aqjPABc#6E$(Xbd*(#?y4#)9T%1gk{{ibFK*2r4&SW}R+?N!=$>3}2;FsOqc?|KPBShgP#web>FGxTN)vXlVu)mW zq$H9}Lc5~jBVi$=@GBUq?=#_9u=JL|0$B*!Em_9i&cT5&hWN>~qF_@$y)8uNlTahTa~ z%vCH$pys=&U_%Qbz-H@Vxc-TmGnz|dd_u>3VHJu_(HQjEjS;{v{Z9hLhdViDV;%l+t!hvx^!6m7ve8^m+s6W_R zl9w}anxRagsx3{wmC8>oP&OE%LxjJJ&9cT~p=p@#-Amp76t-R(8_Et}i(UR`ncXNW z*8@yhAcqiOmd~3ND*Y7KVLAUm-!#WMu6JT4G8S_)#U_LRJ7w`QWNO&LRP-jKf_;$+ zmM(QHgdc6{i3L4u)W15@`TU>4_KC&`HAWX$zhz^zf@6!JkCHx@)aXVreCqBvF8P|b zFJN#dofOMVzlIw&?{$Y0zjX1Gs(obsH%q|P%iYU&PAskEJ(=I$wSUDf_!4c%-_&<6 z6IRh0ZVe1AJU9aXf4>^v|HcBYp#TnDboC1DQkljd5TQGTB2RXPB^<>%Qz+PC@EL;f zHMN3s-Af_tV+pc8)~*?BdqahuTl>SXQ|KLCiK5W7V9fR?=xBvH6+7x?2@-5NBPeol zY6fb)Vb!Qyv2j@uY5}J-G-9+&Pjie9aWC#w%!DS2&M|k>?=uRBZ@cIyZ+wlBbiMDs|EdP<4FV*r=dVDN~al%1K z&W45&{4C%umK;>q7IbdcMV?c{eE=DDk+AVJwDF=|Rpm}0Kxmx82)7yzuL^gX?jn+< z)P+NFC>kH8gf$kEnKOXkT{vz7w;oCp>_hV=uXE|>RTh`3Nb{$}wh?0k&c?WL;h0EQ zoaB5OfU1UKMV6N3xDVt!oc+Lu(iSqdWM4z^zQjg7sc2O2mp4<;MC0 z$W^;jm3I?7sJQD)MVZ3tO^w!H%RvG*L5EOo0W-S^B4)<$KZ1#u^coR*-BqO35*2{7 z*kK+=l&fZjjL=k~W}?!K<(R%+it?%HW2t^A3)qIygzH2Gn;wqZYcX|jQ05z3n4Sa& z|FgVVD^~2eH2N6Ry`d>A-M#yn`?QCE@sC`JN5KpcY|}qHY}l|$Tt?HK#`x%pFT6Po z)w>Cw&LNtzG|8vc=R`+`oP67vKi7Z$&(gTGk|o@bjqp4(A=`OkhqA!A*e5)Nb6Xq(#%!#r(EhhJZb6kOgE&pXWHb7{ftn=jn^YOGM!LEY<~=))^1*5}nkZ8}#+| zXy}d*m z@e=Xfq_rAYnk7Vk+l;{5l9}r3TZ~*6=FZa0A}2qAE8e%0qlUaeq#1<$duQlENMD0x zAv(SyFB9I7?=38otgwGuxdEx1K;ND0H-$N>yG@u>?0*Kc>x03y!ZsI%(6k)fMgPj( zvUzg;zl#eekbG{F;>OPv#m1n}83qHJY}Dxdkui_O$}EBb#%h+O`$~kv0HdbvW1qjm ztx(;(Sf10@JXTTmND=fon2BO!-zJD3vrl8+c&zl)IwX9!`JO0v88-lO%47liW>g7Y zLGu@cp^;4*(MbDp>>Z=rwVNLqMzBp;!QqIu7+hX|d+d8XZb4Ou!!I zW~5CIU=vLrOF>#}vDEZZ!?NG8j}P?-VY|s}a^8Pmnhewl`ShyadDEs{^ax&NqBdR5 z8g0%5(G3}JV{{^UW9sD?uilyfa}E3Ub!pY8POGdYR-fSHr(1ujpC`M?)2W`sT!x|Z zoX=c$$*GE^lu5D<`Z$L{?@Xq3DorD|sm^pypw@lK7g#qx(s zI%gf#c>s?Gvg=+PDSviv-SsklCdpwR*n9=|hi!x&q3Ejn?jW&^MZU&K<6&2K*lD~c z{9hM)8#&3xj*G$k-oU^LKUiSUK(tS?V3pqmS+VZef_WUV$I8CuumE$Gt!yNN9l`&H zz4w6c>H7c2kC6lsqxO!ytE$v29jZ#{FgvXdidt1$%qlgDDq2)2v1zR$w%QRhMo5HA zlE_Z(Iq(1L+x}ok_sn}vv~$;1kL0jOe9`#^=M^kq z;pU)|SHO1>B4(zu8FWK2kF9}i#79HeL&%cpw>^<;{=6n^ruz8wg5J5&AG{r$l~uOE z{N7~?Q3Dsoc*y~K>a6I~v1^>5#{O!2IokES$d#v)lD{|Qvk?{?ZKx&7M7{kurr+k| z+p@{X?=h|T`rzA=*2E|J5|6?mu0dFc?V}W0} z>=2v+bOvV}{>7Ma=JCpNFJ1cPHB>DjiI=n7=^U`3*>AI|96c1D<#?9y&3vF5!Lzg}C@W(F3NLWFP#TP#8vKxDYhFdsR zT%_dv@;CZ(4ZR)Z6oinDe+1hm$kRrZ(EyJpCN0PxVnI+gmBz+kjEYdIjw&JtUB1fT7 zzo&0U%L#j3Nn%L+(W6Ht(*gBTCM+i(u*x=F=zhdg%M(l6JWEuCQQwU>ScyZAB*kiw z84mvsqY9UKdmbD$Cai>@g;07_2rRgP%5%L~Bm+WVGXY~&TMq&20iUXCQHv&nT^KWn zWN1wtGNcPCdH}G7f|<#7g7~&b`hWoEo`y+QU%A;(NXt4oly?s-^D8dLT0$Pi%b|kt zge1x#G!o1d&-BwN81GlS3toaH=|kl%Yu?6qj|G);xz5rn=5jL5+TV)BU}=mVU~Dbxg770PFy|r(-tYd|YtIb|nmc!H<;sd|u#x;- z>2W`_R3`ma_D_Ea8=Ea@%p0EGOw3lfEC`)W73L3Pr#WCkx8BhNyJ&~wsT_U64Z~|Y zT#j~-&VVl*U6!JDI71HVm})pOfG+J)41fCHg8^v;hUVmeJp)73Dm&ByPlaCK;~E-x z*49wut=tt@J}<}etb=<(fz_k$mmN~OBCz=cPHQ2>bTj#*Qsp|Bop45dSo^s&He))O z6;nFTuKx=`U-__;Lu{xc&iSzxQ-vbY@5LW^{|hQMzMU) z|CWX`zGom*6Tbh3+j?3318}*)HHi?acZheJq!?%-4=Suw?6VMOf(*`d?iF z?@oBn`JDylaN6@h*AHXrlnWx{Y&Y6CF57&_VqqNDi|$&S9vT`N1J@Lxy}ys7=_jFv zu3JC|U;mfa$o)L|A$Y-8*9jZAU&ulM zqjo=2S;2((XW&wxu(O<+Vy{uG9!Z*3uHBLda))wyD0H2KSEkeuP=Y6oT-$5_^l#0^ zi+vM0+`5YUA8k|T0LIUiX$kC|&!w(CZHJeL@J0gMV zmIIb={0D;eKZxxqKf#igK$rOJc8Zc{9iOelV4=ksdsU`j4@({92qKg9Kjp!X_`(ZoaFgOcENAfn@| zipro^4jT=PPpL2QW{Ae0P(mmt>|hRdF*#xV)bYiQXGoGZ6P3>S}k38y<*Ktx?%h7qvA4SE)Q6p7|kHH#X0ejDmqy7v+s#xyz ztMBo!p84Tus|IgEU;7jXL2a3eubvNvm8#HWUnyXy-g;gBJ?zfs!ff3rBCr3b!hNfJ zY;Bupl&;2dvO_r>6*eq8(dqoyF&V@v{D&ZM*nm?_9Of~j3bdFyb=nv|KWBKw%HUHi zqG1&>ta{dZigRQ>K_E3h?+kCjw{|CK4+nICu;e0Dna;Lr%iYs{GraqL6bIm7D=LJV zoYdk1EOr54cj1;a!+cG1dYA=QvxdzcXt7LX(;l!m%WSHqov~=RQcSb>j2tizj<09w zQ9Ed@Otg5cWp=b^xOUaFM|SrCYqywg)${i?ZLX~frRcQF3LJ)%w6?K3n)dKHlgqyh zprt-G274@NzZ)Qwkf#0MlnTnT1_TLbS9JaJ9Q~nK2)^H24@+@==TEeGtl$I^0LD|n8(WR_rd4lX^ara3}^YO@MCm_>M`#YPho=$UP$NxU}8 z!Q*VTN0dXhhvi@vp)Sd09>pXjB)NjRki`uB&G~mceZ(C29rHIt<6W!Me7B_<{oaCm z#c!Yd{}lB#UpfQ`W}P39eSk*zEmAz1LL>6&l3(PvhmSOM=t# z(RiTY+x|=EWboa$y}dVK{d-g!00QQp6U9n|&UznoqhleEO$jdYpXO zRHr{5jZgm<{23ctb!ukXB=s)NLde9Dj8nOo-6+QfDV+|uDx zqG-yE`V?BDWx{!mi#wL;4pp1*C6xsYZ{Hsk1 zMDbYMMG)C+Y5dnPuLbzFvSrjTE~SYb!(&IZyiejwza$;m|KQ%ETLZ@7aPwAWv)&~A z^79CmsF9JZRHvW1{h%pA0eE$6LOBs!jz@qf0Kd8!i}h8J*sWAMV2{@pB98v<$1m&H z4z&3m)1jrZ!o=v7ckYiiKPXKlPFPROW>Nvz1`3$useIZ(8H~qvRTKx=aZX!b%Rj3 zgkZq(eSQTWbIswQ^SIA5t$)JtTZDc#^;RQ=PT0rP7ai&`wSf`B)wOi;Z~Ujgc4d1H zjUh8tIeSNYB(z&>P4Bbn)z0scvHTrmTcOu8jpjvUbGJbe?$!!Ms{Mo6HAwI;;KTPH#;R!0SQ zk>t7-)|n9fX($v&?vz3mc9Tc1TM+u$#NH+ki=t=Fkc{>=gkXKVZa1FxALGwp<|3Xrv?~ig|FQ;2m&HCgJYGecltPo<0)_AvEL6o0=w{# z$$#fQvzVR#I$x__zkUnhKRzM3N|hS5FgYD(CeS9jjn%Bur0JYMeChb^9zA-r?FrD2 z7PjO;baw2TmCu{ArGQ1)?fGg`YLztW4N%W>5VMCWSPt}S2XOfkCvljy7~gcfIC7wh z!+u>uIf=tegPKCfoefTd)qxdljwb*+!Al%22;(UZ$5XJeSW8~waDcg9Wfqzfw&cPE zani{$`&(T%$0?KRk54MGCE3kXSi^L6bsR*@o6&9DM;oGgixi58GT+*6v!&!Yx6qK( zO4{I~!1CS7sG@*SfVp3p1kZh39ouABb$9fqpIn_BaFgd&X8%5G9%g2}>GnCmSO8d( zKc2+UTS{IAqQV|)jUi+0dpiqS`#qA9Ixs?$Y~{(SHSrGFC3}p#ACPns)vy@ zcZ}!f^U2;N&uif<7Nj*c*izml_i9PKSnNaXBkOS;q$T~zLa5@Hl_R2&} zoPR)rX5WS}$20Knh|miMC#5DnOh|>X(X;XwuTRrmnzoUPjA3?T**RjmLNlzb7F$`C z;etDe_9jG34233@OVF*UA7se z;Q#W+Z`q}#6JDbp;g9?E`!OUW3LXs(Yql38bOZwqeTzCan!&sR=!w_&PK@5MuSbuk z830K7h@DtdpBL&}b$ZS&PFgIxBeubZk{9j+JllFK90wh?z6gsNy2fBnu&T9GdK z%^ee->U3ZH#J0w>wnmBD__)nb;t!_J5F%hl59Kv=^Yn|sw0Gi!dH5US-Ct%h##i|% zn*kWleHEeSH{2%p1`nY;uvJcGbaX0YevQB5&Y;R3&_2ls|Gyi?7i>pMBQ4BPHBxsqAM zLLI)j1Lcy^mr14HQutj;R@`Wm%T9Q_ozNd|oj(1Bk@wWE__qN(MrH^N5MT7&gC9US z1qTO@s_HnisaH0Se&1%E5Nrty^~}@DvTpJ)anz$V+=F`eZV3@rYxqI0@D%Oy7J$jK zQLI0NK8GKvJQWpzdz8nDABVS`9*rCO5?-4|uc9zG;Oz1q#@50DYWGVwc$r#Z1t_N_ zB&keI079fvFgp%CLCfhR@(pO6I(HVIa?GU5E`cO4A*HCwnc1H$=*%V1A`>!r^q z=p>|t9f{>&xL1`JeDkZqnq=Z^+BJ~{*fJqfCI?xriRuYCIC@lmoGIA#CwQ-_VOOeC zG&2OPi1(c6qhS06{p}A+Uvnj3U?z1h^S*LS z>xO|9-(0uAIuxRxG`oWi9gw%l7lGAvIaCOylY``q-MldAjk~#Hq7pxVtfqDUA37M1 zl&MNFIx~n+zq8Qd_>pb)QtSgjUK|Z`&=C4Ew>@BY;a%J?1xLi)qK}y~p@Q;-;MnS@ z?cv`>m+T)#Yb^#tm0%oezCAa8&<5C&%XXxbBl9ZcV~0Qd2Hw$TKC>g4B+PBW z%BlG$B=)nN>EzUx?%sg^y{Hc9*_&k5IGRqDRl6sz$^9el7t2?H`gVtQqV;jPsNmz(hs4N7`I-lxB=m4HS$OUySzbd1JT|fp4UMck+rPg_*;(t85ZM5s zGA)@4HS*Kd`Vek@!@TVB?WCeb$6#>A2%kEZEve)@U4VA_^9mIz zBx(*;H$u}czkWi~lKSco%0tcRhf}lHUrW_AvoZ9L8QS?%)54o?)#A-D%x97vpKrlx z#l;o1_;-v1l)9s(bhXmbA6!=WO8eR5D?+j?2+r2Q)6foc6&9KSuV1<>!U&M7si>)@ zx7PEvgwG%Dn`r`A$10>!EbmD0ul-;eSs0p56$jX zjAI3-VWer=AKSNQ1Vfo+eV?C&5Sm0Ip#f_@@(84$)XzUdk!spC*;m&H)%oV-7A>T2 z9?{cd%CAy1Dj>W0&xGnfuq@|Y2`MF$Q`tB|_!`4eEPR&SD(tWv^*&K91j)6UT$47m zz(Hw3wsC$K2C$zPmLp3OPYX`KFr~=_WzO5?P_@h<(qS9j^BnR969Z4?faSfWw(}-x z%Q5Qnby~| zmAn~3Z~x@$@AvAfuZC$cZA1)s|8Xm69ug&!YE&EchJhniwo42_6y;en;yV6acqi++ zZ>1zuMpZ(klh^09`=HYWC%)}=dtTc|h3jQUg`U^+?o4SJ7HoXH2WwTIb~!z-#nOS( zky>JP7uGiojtP5pjQoJu1@yPo@S!#?GZ1v6Yty+y#AI53V_BJP^M+U9J8EWb@=S}N zx4qH16ms~frmbDNL(3FyQC(|{cB%-<(MiuF6q~DQ#ZleeT0kDR-CXTLf%sBL`|9iG zH+|aou(WiwEiwt8aj3~gU zWpB9;De_BS$qx?0Zs#|C<|{>mc{={J5Liq`Vm^w!5&ZQTV_X`y*f^mSuB;C_jl zF#6Yw1}>~g6iy!vU5izZTo77@uRc=~HCXj%nG5qej#FYDMZ<(ufD6mL(Y!xTxEnW} zA@xuLV0=)hZoo@4h|l4WY4A0M;M0F6xoY$RdZ&vo`>8m~sxD7V;q8h&v_DIIH$}i^ z;&`K(Uuioo`MA{jT!R?>}K)2 zh|z=CAz&>|XeWUp9VybW*F-C1eliJm@4GS7aKhDXH{;-0*(=FC)vxj$_}#7;6(|t~ zpm;oq6-%{?*_zhb;>2rTO*<{hOup)37+@1H|1o1eEm&~O;zWpWpMb3a87&tYh6-30 zT?*Lt?_cs3F#q4a@6hiI*8WB(qzgItFR=Nln89oEB(Zw!N}n>?X!ygm))-!rCWi4A zp`Ts~9ZnL1Q5^{_9f zlsMzAJm4b?{L@p#dt7`ZduVH(#+O4=QzYX7;I81b5d7m~U4hVY{eKKYl05sqeCjFj zj@G@Hv#EhgCGX_bf5JpF4Vgc=em)os>bMg^I#!=F^-+i#L%*r9Jeg{2D9%=lKGCCR z&!|eK)JZ%*g-ymO+#~|4cNvTCe;chDh4$LAEDEoj>;Eab=uQ_ea5 zfWwN|P6T2bwBS@>?9a+qn#$yVPwwA)`AO(gMt2dD=2d=A9IXRllgQTsRteS(;jk@} zI(e@VvFb@Ac0n8Z>YSZHM)P*HFlj|4`PO7$!gM#OtQJY4tN&Zjv~;8bCU_rBJ^yU+ z<_S1GT(@T+7#IEqdi2v%VQIZE4XJBZ{!qFDSLyp$Rf zocEC&B9F&U-LY?l>zTbl>ZY$6&b?qwtv$@;ov66HP_3Rr!2ddp6Aob?l z%Ve}{{mVpcH_TASVM&p`o3@(v54Sn{+S#7VrVxEBX9B)q%S@t32>w!!Xa-JeB!Dw; zkdeS}mt8w8$ZVUqv7wLZn2y55MYFZENb?og)7<*riE@lJXy$W<;7*R5Qa8_;9dlTh zcbe}ZHO<&==;r+nYxZ=vA)10stQB^BmNkMHnBQTNUc*qg{}#I!O>fL1K{(Sj%~v*t zK;p_BC8<4ZeVf=#j-zf@p^Ilr9HM3L{Zvd+T@DS6S`m0#eMk8pNBIYOmba1Sx?Dgw z)B#$!q$OGS0=z^%YTEL*N3}%LLN@^l-=D<{stWAwIZ8ZK)Ga(zm3PSSnhEkPs`L`(N+gE8^;=%F*Irbw7bl+9sIk( zYzAb<%#99KdW7TbW;bA5#R)05BZ1FAma-A9g@Y=Z7%kJT(3a#z4SY^R)ARP?#osSp z3ggMA__%EMCF>?tpbz zO&}BBRf6^bUEu=x(j~J5!Pu%F zEQx(>l!R?sB!PC|gpGiZdPyi3Ms=ln zZ{jb>4R>41Fs+h6R6X%F30N_lm#5EdR}<4rNy)D;-o#gNCQ^LJH4okZZ!IzOx)6K| zCXsqbAk;eO68`BM>2D;uc})3$08daGS>E8NUOl)mdWx$NM9i|GD36&o0d0``@Yn#V z9zgYh3Zhph1X&X5pp7G^RGWYRLjYzbW$^4@aL|V385$rVl@17ykP;iCDX|%W0GEHo zET;@WYymA2Cd~o$$m6Xi8MzMK%W?xCu3b z4dsF3t)Ph}4PU@Hbx%tX)C5|KLPOA2oD64zDa;UHyKP0DC=iPA&%DUyytk_7>ru-s zlS|r~PYAXI8ihwZ%knJUfsg?#&(eS`V|kV?mr1^2d6ovd*IAyWJCF?Jli7i&Zh2_G z{YC5tqCLaL&(Z-NHP(ToOGcgy>vu?osx^c@_>1YxDSz|HNjBLWeV@F`@htOD++L6Y zf4VCjtYb7DSF-k+>&w2JQc0G*_6dt$sUJw<=DNqF8b-7Pi#HediaAL~nYb`kZ=*1rhorFIfmtD6A zgKG?SZknT~Qw~-?vb=zuv>pHM>v3-=O&+~n{ zI`d0iX9GEY0`Tt+BT$3HJxUpTFj>TKJUJ)_pC3L7lFk594}~8RI%FvgU9cK^g9Iyk z#Dj2*sx=5-f2#BD8}_iVG$B;@yS1aNL}RCCtwd^wekacBLR4Bueh@`A-xY>rm0@`f zn9}HR27E@2T;m~$Bk9YY4<&lnFq&@ADB`D zruAEW3r+LdELh2z;`tckWAfWK&u15K;wsk6rmHQ5==h}A7>qk&+}>t6V%qP3JyP5; z`5R1tV{zZ+3>XH^(thw3!*gV{P@Ld;(_0$vVBE{1#p_?hI$y@2^88nu1jDVL3DM-K zQ@T`@S9aWjRehfcU4_c4@ud)Yc6Rh9FA7!&)<)8>dZ-Be!+Ede9x~?jrwX)w>#Z4L z6Z%S-2FxJfcD&5u>Hu^^ zQ32AWRvcFOS&s~6d-Dy8=UfAcu?tXrLRyUHmYGus( z>XX0p&uYhisdK$mCzymUd0q3{W6aQs8)56DByAP=4cY50H4i4+FJ$@*V$wUoz}Fg>(|F>>7OzN zCg}s;i_p&>`ne(am~O-@tX-j1?vwEED}hntlY_^XtTul9c=zv2}yHx@=V>Ln@AjI#xlRCu_{Sw>@A|k0*Q2Vrr58? zjtw|Sh}eUrscD*Id*7j>tPKx6@SuiAUzs#H8_=*u&~p9Q?KNyJ6%zUSxBP z;cOPw>;zz8wxU2hhjSP_+@^|6aPnVgcPKhYkg)g2K4tQbh|9Sd&A*71iSo=~yl^Be zivF4tFwCntU^6i3%cyeXr5vz0;;G3gGfXT#<9f%NaG6AWgwfOt_W;)D<)+kslt&e2waAA2D;SAahfbUye*kF6F z02c;(c;BjFICo*6;Ctp+PoYD?ilf((?Bjr8Ct9wb=d+dAC+9^F{>YcY7+dY}ei`_d z(JeJ%N3aKywb*174zFWMjSK91Zesa%S(K$$9dxNb z5tt|Jxt~kEFy+gK;2|%LEZESXX~ZI zxwILh5RwrGl3a+tNax67S6Q&N?Dq{RA?5C0NYhA0QR zP@Y2%#rC=r$0pLnVHoO#a&VU7ow$aK$R;Cd0ofyKo-JUANQ$8u*|J3?fBp_L6R1M? zMMmEu3tSFv1QVFkGaFbE=34I#xpZh%IDVdy*`&{G=rtuguD85jh5oY-CVyGX&aO@P zeRQ6FzDaO+TU%xk^I_|{*mYm650`YUKKl0C@+CnLKEnCL(sx}?5Oskb$A1YcdmFcQ z#bXNKuyqxL-j?LSQeLm#49V}jxFMcpgwRrwDu3D$DogNON0Fl{gb>+Bn7Yo_Sn(X8 z3ZaCw@$mtz0u?Hh;vCX1v2pOeed`0)AIBt)FCDs8%J_ZZ8atFT%=_85L9?&H!l!RP zEwBHU9QuU$mzF?@DsRt&u#R+P+~$9|VAYp@*mg(%jc%O87Z|JxzE1a6j9(rnq376+a#LYEmR*7~2h#^w8cL*He=7d!NuRFjd*r<1*ynsy40q1n zMuZU>WZ|1pE}12G86UJr*L5Ags{w~^Qy)Hxw%w)=t~>-RmCOGf(j)7YUaLli`YS*m z*h)9FupDd%ziFJLR-xK39F7CzX60kykkGPntdrUd{Ro)3pr}|M;VlT*ANtMZJNO8W z@5MSVooQ~2Tre3N;H>uK2?8`@ILeT))lHz~FpXQ$oIPX0gwHn@nhzZsNGH{TM&@{8H{y8?3TI<(LR!eOEC#}z`e zsXMt{)2rR87WSSbjZb$}Jv;kWE0;?{uvV2nI3))brtegk%~O^O@?8m-VhU_AK-rfD z$qH>UrWnpn`psS5JM~SM^*`;~^L0z>TR8jv=bsPUuNzlolj|RqjqlU`LGh|pf4Me< ztE`|%WIvB??z=GiWJT7|6Z-!yffrUoNQdQ`?kDMEID*i4n`OE>$G$yg?Y=hg^P!-? zygS+G@~(q(YWd&XhP%V3Mv9uJK{~l6he~%(!gr;OrF;P~G@ao~prb2>Mk%RradGe^ z%|pF{;o)kvf$spu59CoI)CdmZRdw-;L8KFThc@RAn6$$UJL8?kMOKK)o- z(00NSebbY_W_gExb{k0=;IItUWMe8mQ-u+jWRYSc{>)4{I;6N8LZNAQkIbni0seNP zf}7z}lU}`gNitLLr|j&gRWHnrycFabqu89CeS-@9&$vEDsfDv|)X~eK*yW5l+)p?w z6h~REdSz!9YdHj5|SE9G|^lx|eaejAc1RGzwno&QJu0`JV;M$sb@nEua1&**JMnUW-Mn-9&hC zkG2u`egWPs#)DN2&fCQ|YBCsPDEpGXzyE6ou0SC~u@HiSptX(h=Uc1DP2*C7&zM;9 zKA~j_8l^w{f!ZB^G1yooX3$y($nFJQP@Ijl2#H3w`4b~iOFx0}^#y6mh6>nU|zqkv#Mig!9Lxn_Z7a<(=-00H>wuB`o-x3gn=*q~l>q*e* zYYF%Yrcm5npcfim z6_wnYhBpXMRT%iitBOp%atCMHZ(38QJwQgd-A6FWzZvMN4`LE3_exXZ@@vPaaL>I4zMF2 z$=xpjmWuIEX~_0eRP5bLG&O9+0cuqt1F0M6C%71|6`#LBx)}bXu61>%tI{V0!gYOS zgO3pTygBgTqD8G0%~?VD2`iL9K#(UOpp78ZcfSjwo4nB=ph3Ej{-L&Uj5(2c%_WEJ;(I=f zommRSNw6k|GOof)t4*d@bHD+<4~?C~Bi(1cjY`Vs0`YhUdWMV9&Ccjj!NMNIzP*CPL$*IeBO=T^nv7vnb-Sm_XaPtp*g+5lw* zD9q-nSKQ}=F9SYMm{q|z;|)3H1w$m?*ihXSn>RZXT|O{VSHZ%H({|I1Q5M?=_Uo|d z;`;!CVDYewdb&l!2!BL-Xa!k33|`JQ=@u|?(G0;Hn}uC8TuUHst4{5~* z7S&PpN6rC6fLWiSQLOqcyd;-pR|3*?v%1a!78!>fGn9*VnjhYuH(s_G4oUA z>TzC|nSW|A5P0+H0Z%gx*J4A;@(`eTy}Ul0)XOWcS6(X_Pp<#I5@LN}5F!H1ud*)9BN+i@;5aGGzKd=9>dDc4fEkX%{JKmjXNz^>%Zw@X zdiQ3(rWp?e>|3H^Rr|gXMrQG5=;Q32bQrc^Ko)V&cK^Vbcy4_{3-7t9csTv_aggbsU1 zL%yr(?MC4Yds5G&s7i|W{M)lsNs&5xT!hV+FFzc;8t#j}t{hd3hW8Z=qsTsg zT#j+b=0g-)Bia>7!vXn`SFvJou1_(G{76!bsq0uw_+dpjImnZ#53LkSAlHR{aRW?_ z==U<;ceZ^Ze`c=M|#%iO&BU zu%kKn^uMnB{kR|V@5t02{|i*^k+NRE)9{v~LCaX=${BRg%@9{t1oKT@G>GmHGx!F6 z)Jp^{zOj2xQ42z~a=^Oal(x1aPs~q{Rsk(v8*u8>!$-dq=e2=rzExiWi0`=Hp|8_5 zCwe&In!ts;KR8JzizPcxR_xTN2`b*H6I7hhs`qb^Z8_vGhrD~efU`c}Gcjv1gr`Tp zvv@tmi+KpnBeO$f9Ra(S4yzz($Xp>ppjm(HeZ1tr*cyV--;DJcsjT%8d?uVh7aL1L zyNB>R7>#omx(T4=@^vxIA_>`%-({f-U>BkER&oddHckO`z$D{U1@;CZNeT#=ShHft z{R;wi1(n?R=5*8Xk8#}N%?;S8F+^EEXHN!3F4H7|kDqseXR> zzsw-nd{b+ojt%cpA%GHm{aNsU4w4)2Rl10wc~=dP{@q8%0NCK&YgsI8iU$jL_e;CL z{&Pt7m#TLN>*xvXl)xuDeI16U@*i8t3mnd8nWh*%Md&5%2gT!p8YgS2-zWd?p6mWj z1T5vZSxcyliZ)oI8`$$s-}o-d^>V!r*pbQIH0=lB0Rt!Z@u4^Jqte=4z4O3(ouD87_Pf@Z z7dzYlkNU*9k~pQQqsdbvlzTiQloQrk-?@YL^@M{jvaTtXjY8oRCFHcKj9wxnMuoM? z0Rx{(JHUQd`2=kIzZ&aK$j2(56UZ&GzOhv&ke_W@Bo^m@#r{>yGhK|v=3|L!oCu-V zleug?k%(2*;-Gl9v8erz=e<`EXl5MjS-rZuUTKa4V+ahm5*!)&^>ch3etAO!GTy&V zWN`Z~Yi|=0#1`br>VxPp4ew+^^TfLuKe)fLx^L(zZ`7XX)dTNyk{5ahhJD*7S7W_7 z^tYt*x2mxv@0A2ApCez7`>-C%?bpd+$J|-h(N|K&w@%q02X8};`{J)HFU+;U;$t*h z^Nk!b0FaXc4R4nMc{y;o4h}M8&4~*ufuA-p?8cG}JKxKfTo~$+te43$X^DI4WURCtW7u;yU2l!TKXlNR~@|FuM*{LsG z{qW&+9PRFln%WgE;`4qkOHuM(`J6R}!f?@m~n zkPrs_>Fr)zI?L@ehPL$rAJ5-1zk@I?CPs%~o}m+Kn1X+MrvS=(*#xh$SRx+o+wxo3 z@=x1Pty=e4T-&vSX%HoJaHze{(=cou`Q6jyS!YjZt^}&z;8>Q)wq<{8vSf$w183CVv{q>Bw2^e=29@{$BxI|~^5_!YXWW0>?$TC~-NS0-3 zzdNKk%d>QGjQ=90oV-Q__snFYctYzX@cPF|9fW2bMJ*UaX2{f$R5Kw+-~Tl6yjH{#6n4(MbK1PGoScBS6y%~Mp?I13>on+`wlCwZ`@xMN^au%{*=@s}^( zA@PGma722-=6B(4_8pG1U9J5xmalFktBq)B@wsN?kmOHtzy^w#&*s9W(?VCogNhrH zRpwHnN#u@j_xh|M2Rngf;VF+YyI9GxuHKt8?f(7y@#Ox8mWa95Tog>m`GxYIm(lwt zl0||%!jcT96sl`ji8a?ARCF{ss?IHK9w%U!_L>?So&y%DX{v`10mj6@kqu&mO==i) zv6jR&$r%XFFX3A9ER+*A-(%M;oC#&-sdwV`UWs?O^i2W$25JodwcpM^Uj4hGc|q3m zsY=pgEH4%ibZNbG;HF|gBprmmAuF7+O@Gw~=p~iT{LRtVQ*hL)%!$%g@%;qu25!gN z*)n8eU!xv263sNtZd3SO!rWJ>gPCRO^)>Af9cC~?vm2WBrNzwD*r}Q}kkcRR z&c{sci1Q|{@({CZH*J^Y0*!d6;Q>th)c4SDW}m(EC7hb{h^xqoez=YPY&9BO(r&$6 zr;hDJCtlTVP2Iga5sEA33%)R+?G>;8bRnxwwJB=WJ&tj)9XRTn{Uwnx-sQ+2AL`>C zsP(X+5Qe#$gf(K*!V}?_gWD`Jd<>uE9#^z0caL5PzIzuG(!S!s@?FX|K;?@yXwYRA z81tCJbyZ=0L*c$pZ0%^;RE00;Gq|^%EwBmyQCGp;(N|rWC{SVSRY+o}tHl7OGzIv~ z5ckv>Y$8ir$(?QY4pD4-IHch9a*o8NifspXOI<0TxZh`*7T?9W>unn#f&h|_{^`k( zC0sX$T*Zb*gdgf^2G;vmS7_GYpZRA78)5k_+ir*7z8@ctAKj0+9WE)&GS5Cc9q+n)|MIN=QPtOq54HhEY#ocrl5+KuWe=K`;?Zf~ z_`ZmJOh?WJlV9MQptxh^LUihnhK~shI2|U>A=KY>Vy%vyCC~=hPsA>gjrl)14r@WU zP?~;3O6?|+4>$lAz03f6{?S8Y)R|Gp6$IaP{zj&TllObN1`P(0r0%cKk%3c9PTNN+z)=;S@Ok(dYr8(t15g5n&LkTX^YriAydA8Q z!tjbecrYd!Yc9;vecKhEg}~Jvp9B6?yIB0G<3ymAxbo*HOm$V84p!-)LqA^BC)cep zyr#d3Ioq9Wbuy=25U`RdADNO;(E?WZY`njTz2oV~+XXmhm46-S!(la(Q|ve6*YHAT zg3soZ*KKw^k98zW^l?1)Q$$VM4Dr}FvciGhBriD(@;Y_Q>e1%$&a;X;i~e=;g|1nx z)wt7S^YP`389H*hM3EvrM;v^Zk#KlcYch((^nqX4dTGM5ApL6IS?jWUJzJ zS`$An%VSB{gdM_;yb`cR*4h63Ph^t160GugDjcVtZ1w$_ERxtEl)qj*ST!Z{37bdK zw4AV}!Z>q(+QbTx-w|I^vu>Qa&Ae~|u=pA_&k?@QuTdI8^J@*+#Hq7PTXIr1B!^nV z+o7!@f9vj4P+?WmJP&7`CzGVV1I->G4cX`|I`>8jO^`oe-C=?GMENaY+5cm&1G&(R?(8fv+*+&x0VZuU8gN4WX`rf!V{tn3vx#xeeGmxiP~Vj@Zs~esEPwHULf*@l-M^1z__w*f?@{)f^Bz#Vbs=+uadLT89)DGzdtB(c`s1Vk z5~=c7@P^uD%Z#XMD!XZ^%K1ImD(`9wmECqiZplVYss4OC|G@#*A}hnweB7jL(q6e& zz)<&_t)$?Gi7+x9cuzWDSNS^R;dwGsY8VPwk-KqHtY@e%$~RArp_Mz|XcHlMaH*$C z>j^$=wf>~8|Ea=`o_Cd5pF|eqfGO|8qUT&2yx4B)DB56Dp%b|#3?JEMXo9tL&k@;F z5IJMh0#PZIjv>iI4Wj-EyfIO4$np(I6^EAW2+oiLHZ2epGt{4HRLS8Jj{fAH;?YFt zPok^>@?RrUg%sFqMM45>Mj&!+y5cX0{)TLc1InKWeRzrQpfcGj9Cwc4cyhRMrU+HN zzM9u%xJ5};Uz-t{X-M{=9zvnxX%>drTEgCC2OH zbK{g2#tg=U)3W+OV=32sT#A$HOb@)7 zh&}5VmLqer`#-R4suuy+Y0{wrhjaHB|$VviyFVZDaKqi$hNm;QZ7)lmlPs$K8ewFdovN_et{Z$HOj z5X&u1yQL>Kaxw#<@?DNX-i@il%-eeBi-9`~F|dh4`ZCfd^<=?K+G=7iMZq7RA`uCiTC3X9*&J_82 zO>=H63U<}3vE-Jq+7&K3z$`vUyQ1np`FYY8TWZ3!*kM_R+E5y+9ag<98l`Ej%E8nEu<6*+{y!`ZSo0oC@qps8|Av7ri&2=zYIT8TXl zfPbJTRyvXg8#>;>4>PaxwT7AH+6VC6=KVAFS`!p(N$kcep?5dXy+Q&8h%)X1gsRK1 z)np>|@{#O-(R2*6$f!}2#I7=lftJa$u$!u6YAGGB8nh|)_6p(oqVb^qbg!An>ecaK zofZB({T}q*tE-0$AP>UB$2e#!?x4?L)v>bnl$VQXTU}Nz7ADL4|4+$y|QW8x=^z9c9>y(97wG zPpEp$d3NEhGBYZxgJY!0q}UYoh*m2tPWo_Cvz_YiryE3HR*k{GabGo#SrU#d!P zYcX_%jglXn!;!us0P`nl@Qi)@9>$WX3E1J1ZmtxDN58Ua0&m(8;tGeSdN!yew&bxt zFiv?DL`60n{pA@Rf~Dnmp0tI8GU3_cvq?%5USx7zXVbl_2FtKvaI%R48%~Y(UY6KZ zItAaq#l6!0FplmeIPDM(Mk~v{{Rl3Z^*OLZFdT0?(-%zy2n+KJFclC*+s8ijo8RKG ziu+;L#!iN#65yPjpO^_&Z<&utON`lO(J)B7HSRg~9=^;DQ^0p<=k<9DRA5#l&g{XY z^6f0Vhj!@;R;vOZk!9!;j~4t5#(LxArC6A=iR7T7nRqYlhLn33au(Iuve2*NF^0*> z{4c}Sa2colIS2uEvGVlYV3he4k06TaA@iL3-O|kX)iR_%>FBZWS>1(_qQ8F%?=x=k z;vYRB-RaLLhLL8OP89**JEd$WP@q8X-C3*LVBt}fsj%t;$uwp_0T3Z+ok{UsC_!iz!M}d8c6}x00^nn(mvYMV2Eo%(YI6lZUH_8Ay z|5IG7WfP-H*n&B;Y?2bworAdwuSu-SVr8O}pEmhX_Y?R@5ATEc#PH$6KlB}XDC;6; z1s3##VIxdq{TZ~^)8AZQy8(aSE{_{~OeD`AB$)3{+8LV?4L#UPvR-4!bJ>~}ovwAU zbseHDbZ(cSzUeY7Ueks^mwKKA8%K;2+45I)Tv^mbtchbC7BnOiuT`~O)@#YstVWwQ z&K+ght=BFB*%J~J&cAqJUt-u&8RgwY2a;SHPkyX{-3;j2?_YOEOMb`lre7;kEE>M& z@j``G;VoRMN&?m_P1{KoVHAo>Pu`u{Jy==(oeV=uU;!Y;fYls!(34P9kI4E{WG@{^ zhzL564ha%pPWk77R3CxRuDDynt!G3T*l^1kdoADXf~M{KlodUp^%AIkkwbcrTnm0~_IMN3@0?WyK+T7(X{?5-R%&0Zkyi9WGaT61VF z`Cw^RirK{jz+rQ!d(#GYfqL3e^-7oTyyY@Om!oUL&_;}%T2`aP?bszh#GH0Jq)KmH z)?&VwL#&T~B%NpX4P|4pS_**@SA^|q%s)d(vt&5+%p}Po5?xkufl!U08|xn`2El; z>intPJy!B(*0{3cW3_iWy7wS{CZo5Z-x0@(hR;}|hM&1N7JUYv$V>I}r*j=&-Nks* zt~<^Yo5E-#HtvV%ZkI(9GV~5d{tIr*Ox;scunK#XZoFbu6n0L^KT03JB9ZRSbk04` zatkczX)xK6`u1ZO4N8SCB+lBd7@}>LE`F^^lK#GD#5VamS#8q-;TJ0Is_ZDV#Pa3I zRAW0PvR1Ngd<`Gde+$QxLtVpPIn3imwLiRkd5iq=T(ygd$K>Yj7u^k0s$a0v7WIKP zaQ@tatW>#MDvfnDLu}o4X@_iDAj%}+F9earw!4Ur@Lf~`$@@)gY??kOX=yswg16z; z{aI!OI+a!s&qGz6<6ZNotfaP%CxQABC#ft^{-e0Ppzg4pWt){%@2w}XGg;;+TGUB= z6ov(h9+i~~!C`e!!=pG{lEb|)#s}q+_=@F-xfc3VFPB=3=m|+nz;FAJvZ|7R{k@cp zm*?TQMa3hAX0BVWoI+?Y%6*WV6@P{kYd zmgDHUi8o&hTh^cN+L{_=7h)3qb6Pk*o@0VOUw`V2c9VsiH?s7RAu!kMR_vz|FdMJ zg$pm<=;bd>-+BF@w}(O1Bh@7x?4TApM~zPH!bX`i)U4jF4{}hS!&|7c1(=w{aHA|KDt!2LQAo7F!?j$ z>F&}u1m8Wx&Oj}zlY12G9E}rWVvh$jD=E|hFn&hItc*X2>tAN={H|Y^T!)5E-+lMp z!tcIju_yFjDgnQjr>;!ey=utIC9BV!$u~8d>?e1xUAvY@NLl7yD9)4(~h#r+;Ebbvf;R$wdH>?>LU?|+UwxJtIl z@A;=55OS=h#EOdM$qx{vP~liuQL1R_&m@Vdo~2aF73yY^HeE=%G{Vv3kK8_|`>Dvi0~X}VZAsH7c|0DS&8Fq{w>RC{@qYcIS>FISi zlY9&pPR2T%Pm>L&%Q@^UlHSqc)<>mSW01ON79rPlu+q$ILJqx}%Tk1Exr>C{=ztm= zNQJC?oQFYxYzbi69e6g$?^Of{+8~!`?z5Nn<83IHr|eORt#l*sksbgT+`i!k$0PyP z6Q1@*u3@B_kUXtduDZA3%pwu|g^(@10qr`!1oSmJ$+2Wn6 z@3*(Ibu4>rb)moAc`=w!?95G^UDYvxJNLIJ>Mr}WcI|5aCScbwof?~KsC)SR5<{uG ziDq+Mu-kJr34dn|=nEKXa1rk_N76fs*r06uxtTaIEj=;T=hOfm45{Ms0BJFw16nxi z3bXkO&F*Egt+TTaa1aX3HY=3YQQ6tT%gMqTLz!l?4uQT-w`M~A?diPXNdXI`zl`x4 z?PC{}P&G*B^-%pcI_#QD7`NZ}>FmN`{Z{%Dexpt8UK1U%I!|a>2@DVR9Qeld($zJ8 z*6svdA?|}HE1rpbKW$ARRN(o{KSh_z$i302&?+x9UUOmZlf{KsLwl$l;i?VYh4;yg zxk{tlP2$LB?pIx30;?xpAlhI_I`c)H@|vh+b`=w%^Y4*!S{l1NiP7@iNYdVAc$V}% z!*1%qBCy7sq^C%$Vo>`^8=Q2ESGT#%J5h(^mu;3K0DJ1R_@I~?fT4D2P^6O32QYu~ zodiMXjl>rLTPelRoa;S4mko94+VA~FwoBiva$kQZX}4h!9vWu55?z4;#{;`{3-knv zV1(y*H$xWT876=pk0og4iLglX8t5_2V3S7CX$6n%%DwEV8zjXTuNf8?=(2>ALi%Sz zdLzWtAT$i5RKbp!O;a?TK)^wG0BS%rN%0 zexO|pHagoD9d~;@?g=zv>L&RSp-hYtaefusD{3|yvT!^w!u3-aDzgKjY-YQ2;W&6g zIVI365E{CqEArv{(o~^tG`_QZ8{S>^+G$7Mpx~nk7~va-cmDzhjqqTVdw5+j^hzR* zgXO9pa9H7co)gf6`{WuNK$=822$ja?BBr?IXm>qp541g>Y@fjeli9HE5_sLyq&|r2r!=q2SPbwMDhu$X$y99 z7&jaV*dR{8Fn=|^5|QdWpcDA|vrHTu`SzagIsSi+DYoX)+vx49o){0kci50;=&g@@ z(K8oY)+@K*nm>ym@6l;=Y_R$(R2ujP*A)37qocgygCY1D|q)Gg!!e7J|d)raFAcK8FTsdVE8N59Y8cw^ut5n#TE@ zLq1`!w^AxNT*1pbtWFIT`ZD9J#n-V`A?{WX66{GD0kR2w&hP%HR!B6g^&(;-uRB6CW> zf0YON2YGz-pTrRZRdL1*==^Q;`Wc_)e_R-n+6>F}zx{6IkD%}rXM~CbVjMpNp=aV< zSl(YT4u+epz-oXJi*R=JFs3a9-&FwNg&ai9LIC=hLIUQ!6R-l$uGAqsj{7ne?pMM^bz7aOe7hGC;C9lcM474pI zw7R7zT({(a9mH6*0PFs;|6qRJiuhMJcF;mH!9<}n!)znHU`T_X%TuQ24_yO6*(gR zIjow<@`Bs;c1>N|s}S_6+3+D`tA;KZy%9$aWg&FWSRL4AOa^Vic@mj6(+XHSofoy; zlMa(sH{g3xd#ni@z%rD^s4(2xAuDP=Rbn1IaJJW)sW`G4`T_Lcr?UKeaiWct3C0gP z!H3RiT@2A?oa}Fd1L0xs`7>S94G(YKcc6qS+1PvZ<0*Pv*p_RXH$Q;yh1e46as>bg zbbJY?N4#TOQKHJFEECH-W5&whJx84Zy9uM-W@Jyue`g64YtcJ2?HMtKGS3!o{_Pbw zxQqnV;jva*;a)SQOm`LJAivKuNbKdyGrt_vF?A2ubb=Zqbz5`&?kN(dJ~(hYkxzm_ zEYGH=`*V>o%yK-B;W+X=66?(g7-kdsiQ!nX_C(?d-urO*^3tqSr{_WD2~LPPGR*Cl z-t|j5xoxOn75&o)mpfh19ETN>Bd}o4*$`J$DRmE55oH!%JL$MPeJ1z|USX-ZuGjt) zYJ8W*e_GJclkKjijYND2?;Ue~Mod+?n>cl|e2}d41e`34mD|<F>YAO=&(`CK zLU33jFLAhq_^hf#Dx=502c&zbN3G$XM$r-Yf1UgpI$YU)SQKHNqqijk*vXac0Db5zlhTc*6X}5~xu3 za&WL`{jM7BmzLiJ`Ww)&$90>PzLm9d_^es8k~Dn69dkWHw2ojqmNeZ9yg_jt{ds?gQJ*^w;{9s_K`H(t>+_ein~cacS#Z5^yRDzu4>{g-c6^o z+n&eQT#aGqS!Mn<8#ZmaW3)A``02I#H}LMHff*Qa@CseJtegLObyWw#QG6UJ|CzVL zWJl^kUdwMH2`AEGhRL$M5;p!Wb(|2_PXxQ+o+QCl^TNL2>)a*!JV}CTitZ`yt|s21 zALCVfwCrtN3|BVvQ~ar|>ZuimLxkr27dq%1)jQk;QQa7BiZV$kj=5OxL-Q z(ZJFbuLUER-hlvC%faUhIh-Uj-`w0!aHq2mXaNYJQpkg*AS#lW=I$4_x=+%+ZCZVb zw9)t6nG9GGL+;3149^WbvU;_uV=pA(F=T6ePa^k~mu1YWcNB@ak=Ih1d)^CUy>;5ssks(p@R zzGpG~bwslIi#u4?<;hUYLHGJ4C_OWMqicxM@?Pb(dhc3P?Y{b1LB~iZ%ZYf+dyYsd zIbAF7BGuP{#d`cn$Wm8t;I-GPzce?Fkn|qzR@QfE>F_i}j;SUl0QjdP;dG|2+%^)` zf1oJH<9_p)#qjgdqPY;t7t+REEZvNur?SM26^;8|uQaBFmT}pI9oOrOVo?iRP>WRK z&RjuG8jS}=V=C#`Y|5NDOEXF4vy50LD;~)t*XGU*r=x>MN4f5$sjwG>rv0%uNptVnu|^wIuO4(Ssx8re5sU8A zljc0eR5ymKMv@G(9OZ<4qlrCc%L=v1NS2OJQ-$BPW44}1T*v_n$$CRnxA_bAZBiu4 zMX0ftwOgXP&Ck?E+q6KGi&tYcG)*}nH&@eI2(D~)n-(Um!KuRFE!IzEt3T#MCh>U4 z#ql(JB4+iELx+rB8pc{iM(jvtE&zFZdl#Iz!-8STjRmPApJHPdL7>xo=0S3zdsMW{ zTAcBkOKb=#Br)>@g3ersPY_wGUl7JqEk?N3f}{)8}=xv0X49I%mitIF)3D=#vl z-ysf zu?FN#`)`TX8zHaWZQ9=?>HKrnD1i>sR#>YiMrcyZBGLZH3r2-$=*gv}Q4*O3+e?N` zdtnnH`|@&FZ*m*r_bG*XXOjCZISBP8i*>|GFKDN7V&i9ls9K|p+zEh0;{$P_43*+cf;vSn{5dlaPX zO@X#h+S0w-B%j~Ook?zPpYPA_|M~qNkno~6Iq!4MP4c-nIXTHq;+!#MSUZ9HpOh@! zzrXJa+faelK*u>S3k&-V*^H5_i|?w_z5t#Os>e|RZ#MR z?K+c(6qqM|xrjcrEpde47lBoK=tq^kw`~S+l6e+n4IEdG(^)3aT+dX)jOiSW;2BhW z)Wk7YTy0LS5sZx@)a;E)!{2j|0$6-oN_zJZjuOVB17V6>g|6aPEjh6w`(XN+T3zq(_#igMp$PT_v08M>NO*|jIjI}Z*nuRU)I~PqO^J3f4^QtLKz#_f%s?kxV2xIFIz%FaHD)+*mT3| zY;ubC;@G+e4k*e_V#nb8#*1h7E6N%y!3u1^_$#GkP=EweJSN3PT?k4PtU80U=n5P# z!brTm{wHgoqbu}7C;i1=lIc#Ea>d+DUSz5MAejWYi&QoJX#};s)n-({v-}p1$A2U@ z%X?$II8#<4HQAryU0IZ@82bwPXz~R~SlKQAes~J)A@?*`6_p0(Q%N1C6&Egm72!|H z+T~PArqfcLDwZ`m*2_UmX@+k)LCUfW>$<;_T$QwIwsjl^Z&mE*B~mt=cDo~6dDVL#WH6&p8emhS}KJYBpOp<=#w>E_XA&*5;U8_Cxp9Cn-@)+uarqs^Ol zCt*l{PS%<HUC3zV1{lCo$|2n1RT3% z%24c(DWw#r24K-4LxP??8>`fY`!Qaa>}SzNlat>2teK(*XQN+@(ux>tqmIL;X@iQD z5TD1$6&(^q{dfd#oV5(DLQ~OlDN{a8fhFtSc5}Q@4yINNhL$tocRz7=!wiG)_DXA@ zv-sgAQ!RUt#30b|J*WYVW#2F|D>|4EZNu`OLB6n?bzJH|8w6{mY5Dr1NC~8rfa6k5y5ugFLMMZx z5RPmllY^5e8Xd+bv_N2gLy}b&K*NGJ_LCU= zUeBR@fq?I^ZJAbXc$(FKQBv1TLREMiH!y^RAtkIpUh@L^&QZ_2v_HGbCoQtTGXdi2 zc{ze!NUE6RJ))fdD=fg~8>K4q!84EX9vT%x%X_q&c=C}*ho!CE&On_ZG~=@k8#Ywo z@G`&BnxW;RfgKCXdjbbaK#*V+gH*)A81Kal9n$6Y4L5ojxNVh3jNG$zt+<>_4bi~x zfI)R^%SS$r0B~Awhw%uf=WXJDQUmYRShVPli#%AwJ8h_F9o6YX-@#Y5#R}&OeLj|mEsAMF$Yev{8{6f-dY2ufh55ZGXGuVwgW9&GW zH#V^b2eL^nJ`cw^jw&mK%yAqbaZ3JwOw=DZ;1(X(+Ma`w&38r81`EgCpUR^X_ur&+ z{XcIM?FTAC{b_(UkKf8`1p3Q(3o1ND{Df=P(gp<6bqMd}?`WmUW{kl^gfx`AgbZ00&4p(5K0G$-b}TH^m7d~r{DfI& z%~iut;~0QYXw&STO`Dy8PeyjKPy_v!C<1J=N9M;=OuxzM}tdP0%oip3};aPTxR+o87T?_PNuVE>cDF* z9e7Ex&)~SFer?00m>)u)C`G?B2e*vIU9P}ZO76WY7?K%%MhBXk?nvDp6f4IKL`^Y; zVz*-juf7fkk;_-`4;C*QTLfhbW(iEZ2w>8JiNGD1Po$n`Lgs5K__PP zmi>0(?cdyV0oS*Vh4Z%#^b>i$K#rJq06t$xlmW{B5C?MzU~-RKFoHp5%zYng}-W|7Ij?jq?}_B9@5_Bw-8?32uz znjf*SM_>{GIGIWD(IuCqj%1$cAD4QkcCagaK7~-AUN(BOvw?!%qO2BgsYE- zuE*xP0{3I(=uS=V8A<_ToIeW1#u`}ZWE{l~GXb;8ztkwZ#(f%J&SA(Yupl;Wjp?T< z5yN_U-Bv(7M)l4?-3e}G?%{OyT~R0q)x3Q9a;WZfGbgHMx9OKDNT)BbxC0?{V`b;e z@dND4i1+^4Mw9s~{7)j~XU&R*aii^ZspeICC79mo_)pZ63_}ilc4DoK2#pspj5c&E zmJN14V&>EY9xsCX2_!Q)9m|Iuz)(EgdB?^MDAs)1OkH~9ccG(T@N(hk8z#v`VNQ)p zvx$|+pG~sy;`b7)zKsPSzKNal6flg!&j}O23qk~7Q3$6+BMxy*V+PJ{Tv3#FHTe*S4JEPT}B|UfR<%mPFtw|DUfOglKaJMkU`i@wir>{^}Xi_{CmW5OeMY9 zBo`m*j8zIEU$eZvd(CFGJRFE(CMeG)W3gi8U!Id>-s#haoLbzW_2MH*P&EhZvKkfT z(*%8;cXzb;l~e7+ zc1Nt>I_C#)hs{_r)%-D=dmKzUM4BCyJ?|<<`KOLjxei*R238x57mWW>Bw1xHsZANMlDdYNYF5o5kDoh#;j>}03FQB^KyY`vpSuiuVU6LUb*9}n>HxxTD|3{nPP z!W%QF7^%z~P0UuM$}fu+#nCgC$qb=&xd#0y4QLH4IPK0?!?T#xLx&D6m_57VVVnB& zs%Y@`M^00w?+i}G=NumT{&3GTZJJB$5RZYWYK~x=bs?`xr89tB@f&g&=Ea2uv|%iK z$Gx7uM(-ZM!I_NAsn>@18u-A}kS9`DDCbs<4qvtKEq*AqD=3=jq2R*OWz@?9ypT$DhnyXwAT zL`K`?l&&*cD@9>1@1&j*5Ij$?jYM?l9?7s$QSO0nrd+gpdsrC>kM?z`n4+u&O!5X&?s~A!XQhK!JcyN) zV?N-8zRb;Fn0$FoVHDHGOmdMfP`-m4#Y_~v4A?9)$whX;lN)NyWw03i?A0Z&F16VF zu`H%!9=iJV6}-5TP#7R|OacHY^XKTswEA-Fzm)3h=VTjE3&)`=r-(}`=i}#uC<=vq z<<;OUq)N$!6q-XH2aMj#A&(jas9jbqGZnPkB4E2f@KwNW5bX^W@}n8CVLqx9g`gn5 z>ecw8L6k;g235O)9zQ>7pHN8EY~euh0kR)lMM$AEJ@{G@TFd}sKLWiC2>6IHZ_`i% zjmdGxddMA!9WmtyW+z;Ez5%!sPhe65xCsdcfapLHl7pvMsWsSeJz6v)b|C}I7nAk| zpLiXBiQPM|GgTw50V2PVZi?-@gBVx|OzInP@tWnVu#*SNu%Gm2lU)3O^OjD^e)7Bk z$IK))6I_N#a?$0)T8F{`kSKb5v$I=HWPY258Yoe1$r7@?oun>$9Sno+eeui7Jl5{i z;H9SszC0RaF7sG<7>s~~I^R^_i7*am*Q-}~O;Z69#;dea1uolXt8}#94m`$U=)xiRbeQ3VNxz9aQz*0#9sM`CfIkTQrk?v#nz7!W=h) z^xToqmdhfO*g-$plLpV*bXy&H*nzfl3)U?z&(5yxR*H}9K$Eib6eBeRCkQ`~fhfw7 zTaKBxnEu;izP`>m^pjW_2DfMt7<78|6-@#L{5O~{!^%ZL&W9r~iGQP$;pC$r=gU*9 zR7UqxGRO;HjykDDWZglGWhCgEfl|n+;~oDlruYelo0!=*A)RL$+38S@eE#^LwnWs% z(E1|YW*Zu7Tm`R1PPW|foMfSM5tBFqlh}c~GAS=`Uma$9=!zp9z zkfQt)1E;x+DJFy7c-mub(IsEpN5AoDCe`?gV|8T>n94BnQBPuGS$qFE*NsJ&SXe_6 zlf-qqH;DN*4kNYOMuQ903^zz=BYuOttIWE_yqy+SCGnEG@+)Dwc?+vc#=-HxgfWS) z5yK}_pDsH2nU(vOna?$eB^6$0_SC&vUNW7FhRCcv>`dOq6y07}16ZNh9!9R|wQ|Tk z)ghNPAzI12>oz~HIEtL1JZ|Kg;!8%-s1@>DK>p}5#zCp-~6Zc`> z^rGGMooC><>%mEc#5w$u1wULC)?85dHu=A=0k5w&Zj@@N@ULz05`Us4)3;=sl0qWJ?Waf6#2oKel95qz{Y3(MkC^@SZ{w?1FU0~74<$c)3M4b> zB1O%(7&%Y;zs@BR^>n#4DI~`K_fD0ic;%5N;@~KefX;H|@3r`%`@*1zA&$B7=#_d@ zI^m(-Z4|$JiOoTd7Z=6(cLUCUnr_)C4L%RkrU*dOhAN@#qSPnQ6!4)!@E6|RUFYAt zI!02wP8Va+6K*(q89vL;>w23~Yv8^5KTeo1p|Gqr@`MqxXAaSR4}qZu?%K@lo10AA zZ!u)=1o1(qEP@!z2-}o_+|dlMX*!lAv-*XBamy0kN`b)-qEA3rd-#Tb!t)a=4CqX9 z+>-61!w;5&knO#4<-FUsG8Y5Z_JlXY!$k`s4<5u}_5|2JiI5p}nx3zoIKN$$0z1oZ zMyW@i)72{Su#z}67I56@Ag9+-uIqK8X0Z&Kn#rxWoaea}UezG%AiQB!l8`Gp=JAsF z8f@yd5;4u$o-Tgx;oSF3OGFW|zJ&bC&@+PHvpCCUa_wCMd&*&%$CH$n2K0HN>m_3@ zc@gr&fRxdMJ7W#*X1xgyNQi3LYs^`Lh`;$VH%uZ6OdYWEK4GQ`zaeBWgH0l@jFeA1 ze?oe+YiHV0lSullbKh*e1tC#icWPFA!J9foyF6ICcCGb*7g}~3$PvrN`qb`4h}dD} zEL^y-+9sbSTO6O!t2Qwsn~HMvj&qZK^$&~hZS3#YKrPq4gTwV8uFWe=za7xS8u1pz zKKS6L^}BcPehg>NikO~u+l)i&$T9aRSh7*R##;;HB&SjO5u8?Eu2F%VW!MLvYmcM^6=z_zMU#AVuYOZO$R8hj z*jugXAar)lyLJF}XSz<}n#llguUvx7^Cg*}q|adyuGOOQOa)?|Fik&?WqY`vC$OpB zw@^mbOn|pdphBjZL(pDQA&GN4EAI_uSTpt7ZGi$-Dl2!h32U87F01P@)|x(x8FvZ?a>SnvAh+7NZagN-@o40a26{+ij#bpHQgXiWMtPZ?BWr zUetWo(&CdN;roc-o;I)v@hwv$N9)#O=9RHw)1+tVYHYVjAsfFzctzA$*}f}Q*vzE} zij_JQlMo&mUBeL2uYZunWe21@Sz1BKaqz5wl~0UMh&`m5QSH;d6~Iw@w>Hs9#P)Jp zykQYmT#OA47b#Y{&i_Z)`MvsVIH(>e4V%f6v6jIE@YRmqSEQR()kQ*KCS^b!V`Vn&TJDU&? zIuMd{xeDXJTE*_cYj=3;FgpL>zF5Ta zP9O(AqqogDlEjrW@2^HSMt}W|qLgd@YbZJ@n)@WO*V*&uF?qPO87~B>wnrfh@AQ=o zcuV+C)xhDKUQ~5xg1uLLH$-y}zF?d&dN$mbqcv*u#eAJ&T?(UMRadK&VHQ!3?MLt` zKi20-n78rwj-F230l7Y?)u!4Uf+eCtK$0|6nfDsq3RrDW2 zq|YFKe4WFs5xa~M)uYppb z!QaubZ`r#x?3248o1p2H4BBYA8jK3WyR#JhC2R<&8T@REB}*IDW~&wd!^x9D2z>#h)LDM}M!#|+*k z_=w#?(ZME813AE(kiVR~KCt@GVE_nnTZl8(o%qZ8O*J=}gPhBtJPlNhP(9oKpv%z9 z#5Ge|-bUx)j5v}iw#k&Y*j*B{tk1bClDVKfPjScxu-5pJI0+468whCxJ5NeYm=|=z znRo9HENOUO;3Z14TbQIs97QiMKAa5syecWfP|bz(%HI1y*YNpIKfx|Hj{f=I@eOfZ zg>i?X(b(6Bi`R7|x`;^A(~T0H#SW1jlDbp{tA&$~95i}8CWoEGhGH!HC$x@UeXQeM||&i>9hKibI&^ZHpm zQCbF9JoUt>qyF&F?@q4&vPWNO7KvS@hks;kJ5{4>B0ox?g+;*i-Z#9q%+NR&dbWCr zxDgU5n9?XT75V_1yGrM+2@9zfIE_c|lBm#K-K1J;rp#}%>~!Q@S#G|gUZpyhp5%~7 zPK}_%5xXRiQYZb(OiI>G(*CFpO!Kr^c|$T00{z%w*v-i$aayQ1`FPvRDNa3vEEjKS zf4>IY%dAjG+lohNvF*z9gdFzt{H)x(B_|$V;O|h49tItgNJ0}mDDJr{<1Z`SRo8MOz@2+tA?w+rv5zaEnBdE(W9RI+^sb z(F{VJ46v1v9~*4!^;0h;*SGN@~-zG)>sU++ipy_uljHb_}Mh*=DBP=0<#I zCTOH!py4I(Xcxjmiqaxf|7E(z4(Ft3qR;+;-+el8;J~M2p;Hz^mG$elkoALXzq-ix z8mC*IadhM<+sG3qtLLLcGQr)U*oz5~n;O9HL&yOKF{L&k$1=diWPlyc0Lw^cM%Yz* zf27@|SU4fYoNfrK^Mna+i*pPiPPUEGlsJCLr4)zm%+kWg^1XC9V#;LlROtUK;hcoj zvQk29+%;!RV0}Z9H_5?%5c*c^*SBxK7JQ+ut6oKng9${~_6pcq9MwUJ1%Jc~dQ73= z8C~mu=fBTmTIw_=5gq$WJ7dpFIF4%o8F|=9zbTXCqA&49F3l!xV`mGbBRiU0}c&Irk)oumUziD^#w2CU?->0$cJzs zDwhlIv(Yip(Xr9d(clNvKEN~aykA_q7O!uGk8dztqt5YVpT2#D9O!dnhnp$#Hu7$d z)vH&piGN5g!S%00Y=sm#3{@O`?=B7S<3D4uVhb16sa0B~XH&9FAu00(ZkoJ_1A6SoWS<05 zhEq$CxK_vt=2n7kh)!_qRC^DRsRvG9zi`n7*h1<=xp#QYt+2Yuzt=ar;j!M%y@nN_ zHuT1$*!;o%tLXSe4>^wG7Y?`J4Wl#`qg@+zSs3ihKUgmJQ4my)fL;EkHiU1^1=CxY*lIN|?4K}mSXMO> z=uCYg#0*jBu>e|z)Le0A>-FU1?v7%I@cCfgUDp|XX1MTn=KKE1v#=LWo;>^hbE9C~ zwH))(alqRI9D6mwpM-R`*F=@BH(nw5k;r)wD?1YoNQj>d(>mgALmoT8#!BDvJ{U&$ ztY9+bdqnWMhDsgSUh>!{qDti#urR6zf)y=ozlv>4A$Scein4{O-Do!2n2&APu*ZcfzNjf7{Eu)lA*xg2{fll*#gXN7|6{!T`W3k1rvb z^PzUoncfze#xh+eFEm%?EJDul*dUW)!zzN8Q};F6uqA}-)}5^I3!h+hzW7#z4Z#|MW!VrKHk<=4 zv?u9)2B+cyIr$bo6rB(R%NQY?8U4PADN}+~8vIFy|Iv9Y1Y)IsKS?g`iTCYL1+WMX zf<%_QZuI=$ae#FbF+DwlkeAZ70CqKqAmmR6Fb6|TD$)Bx0 zvwEVe?3wEwNF~8RiAN-*hB=}=-LojYCG*fX%)VHm zmMKMPnQq-n5xY>Cw(A~<^3Aw5y%i&Sh|*Mv^C6Gb9UPuI%-aQ zXnQkLocJP=wpH#%a+{k*c5}RD;={*e)pI$PB`CgK*6Tl*tW3mxTXcP;Rhrc1Z$&o) zTph!3ThZ09H$my7jTV84-6z@H&c`)jC{}bi34ZQ!=yKekB^hb|@hsstI##^H*Yw{x zeuzMeTzm7mbgcf{%+$avuxIH%*w{|{$IS3*-1P6+_FuJ!YkNzu_A@HAMN?Iq;4K!U zD7C%3rBlngSRAYY{MShkjy5&6D=v77_$vnej#ggFS517M?xr}E|w*y`QbA+?7A z`aY~~Ii6*LTd;Vb+k*1|{j*LF2 zS(rBboz3WH8&N0JB;)m1(V|5a&qh@l#^y;WL0X86j0_4T$?Pcj!xdK!uY$0|cQpJR zS!=N9gmMWZ)+U(M*eLM^>nK|3U;O&JI%mGS$xRI*dUe0t>xF)gJQr-o3YGF&>Pxxu zT_Kn0l?w#|77VTO?w67HY6*_6Ch}BE#IG>fAYb~_c=ydUjos{0|4kH+?0L&QYMwW* ztOR?n!BY+4vh9dXrLM6v3L&gXq?T;V(|w~p|NQd-2Qdi{i~7Fdjr`=k4YPO`{5>qw zDrdQpgn9m~JE^fdDUAe*kt}`$A2;ISwL6inARN#e#=wt>Uv`l{TlX|V($dn2pS?Re zq1H1Dwe?Pyl|4bi;bS}qcZ;%QHGYCT(=hVj&>`j}qTmTt=f>v5;;OuodEessdJ4%oOFJDEgE3FbI; zJ}>k*^|P`TL}hz`zZBWEbmmV(3EBQpE(z+r7i!}?#tYaMUgz_}_~G{+m1dIDT)#-s zcOS+DsLk}R$*aUlQA!(A(!2R%;@R8hxZ;3i%F+K7PPM(%aB@)P9@}ANHc-_Sp=L~#Lg1la&@yCr?wdec#9y`sTTwqKEgQj0wu_lIqbwSQ@N@%FS z%_LuBAoq8%JsId6=5)3WmEeVoE2# zP{2e<$(8I^NLZV37s<68cG1R!oP=-dK0S2!eH-YluZ=01V6U^*w_?;mf9}{#Ho1u; zTBV&L=WNa0coI#UjxtGPrr3li*=LYtfK4LD?DtbD#of=Nlt+KIl2o=W2d^KYa;HvH zmZrJLFZQe#z8C%Kbo1tiUd8RJETZpS(ig0a#Ltap$lzHUR7Y#!+~#3+Hh|)=;(5RJ zGz`PIq#>bQt6xsU_lJ~%=XACWQ&vWJ2(U5l~tA87w`_zpz3n`DgKSVMfUQkMd(45 z)ejZ7C$15KU(}}!eAZ!+w?3sjRyc=)wUt(b@GXm~#=0h9`Wn>U5*U4Ey@36Q@rDHp z7Np@b-30`;VciQSBf(FxL*iV5P0WMWef#a(4#ZY#f1mKxX;_AQyNq2yj>RVuV3|OA z`mG!uBDxdEDwe);rDdK_uI`UPB;wfdV~;4qI9Bk>7@%x#0;G?oh?p-pG4yiiW8>HN3k-CLFNAfVPj>fO@2PYj*Bh;Lq%;8 z8sYC^GcwSbGb0S%FQ>d@D3_7W|02xopmSX-_3=1qKkV?^ymsUcfn=h52Et=9d^!+z zv9zp6t1(_(p$3kT*pZ_W)2G2cdsuSD;qVl7tzKhnKZF{F2&$D2OUXNnH+0`Lr5Mn1 z9KpDbi0SFc7@roc7lRcxDQ{-Pg=_T`93z<^Q@Pd?M+b2JWc-KJ*ie+rdkL10N#NX7 zOt#rNMlDBmqHqZ9=Om#X_*5H6=s+qHhEp5Mq0X@||9AMo;TfB3U5-SIiuPq1&@D;FlDl0v{Cp7ZNI<1_3l&4dMU^!DrG_1sG_c*1G)%S&<|*xd&t*C7 zr(uDz+j%d9K@i3fAIm`HR4groG@pucO@{UBM-^3lZpX6DOG%mAvSrIx6ne&YxVb0| zf?B?x`K+**Sl8LFm~z*>c`;b;o22QCJzqkE6s2=-2!4KT?8sY+a}D%=^j-b_a(GZO zPK(3OLqbAMcI~=1gq?qCoJb!r>a;%`3D;D1N}w&qN2;qKTLrjOWtF$Zx1Ed{*sph5 zDMjAqW`BTj)Y=GP z_}Dg#9V{GJ9`pboVY%D3WKwtV1tz7C`If7+?lb<_?jSt3hHl6g3d7NypRZg%Dn7BZ z{os#w{uzL=I4qtL1Rw1}aN+nv`Ptj4@eWgCAjA%_n^HE`H;|CE&IauIRbH_C)KN0^ zHNmzPmS$8fLwYM`Y)xJ{MxU4e*Y&dZU1?rC=1|wwA-P50T6Js53!!3X=y0vGu0{Aw#TmA9(5BLq`=dcbJ05vA8c7f_Npn8m_b&M+Vt zVKBS!Y9p#%%VT`PAe`gxM+Xw7T&v_bt|cyyV)UjRq&Fm>BR+-}<+D9#oSA@Swoom5 zwR$YrI|`j)d%`09Z-dEtjnZlOUa&_7x;w4!&_XB6sDpC2Er3)<2}g4lWA zQvMe;P+$psXb&NQd*U>OyC^^do+aL)3nrVt@bK`+KbyQ1vAtxWHd@Z{DDeXxtdwd_ zA`d4%Jl297HwZ&Az$V2NH`ugmsptM#b;|jK>O7{jCG9necM@47V7}yOMM^5Lf<5Y2 zW2%!*5>AgBHyzf46Wij^akNe#r1i57?KO1g{9(lROP?&BR^RPvlsXq}0Nizj{n#rL z|G_%t*rXYeg6dqfk>alf$uXY5qzaN)CdEe!>J#HURZF@5*;___9cYs#Ip#9gnY)fy z3-Ra?hI6Kg@vCis#q$xKt#OtN9L0#xXdjIAmbRWcAM7bvo{V zk%!Tv8F!@D?0whyZM}cXKAbU_W*Vh22+VaRR^K*;Vnt`(leiglc;<8aAiH>Cu$wck{&UlLhrre4l(Dd>{oJ6wFdH7ri6(fATwy( z{e@-o7+7EOq$G_uB)bffarL}Mw3qrvvfZE=*IFb}>ldccrBQsCLFQ`&e>--Q1Pq=X z;6J$FUv})HEA&-4xjPj$q2M(_%Dra3eEG5{U5WEv+#eBA*e0hFW|HtcPMDwbwzvOg z75&#vDnZT}YY|$*QSQwJ$`7UojILPmp-{vupYFK>lRauHm^g+5i|nK1eLMf`x$_9- z4`cGYfiavms2V;KFyTgW`7yp*NK;heA-=|&1>dKBs#GlxXx7t&l;duvDAh_#PL5qS zT!AgZ)(H?K;S?W?mj>Y&!OEhXr7zr$pqc%}E=DO;P5~x3I4w@F2%{Wk2HVqmi4yBf z6YW9p+GH$0O=A(ktzo`yj&&0&HWILGTS=Hjv0|-UWO>%_UGkljl3*1R>{oI^)_F9A z-w-NbuBD2JHKspsoMg!jUOZgq} zpb&hjvnT>%gC|-U@ypAXXWQ%$wcPD`^%`@TV0#@H+9sj+wnp4`olPVIFP$qtJsHd? z5bT5~WAHWytiTTJ>LkZ{U3RFQ0z;s!NRXDG!05$`7dMf#KJr_0n=nlQHwOop_Gm#yibbJF^)v# zVv=mMTyl!jtD-El+fjySi?m>;B}&R@!gq^?3|z~`zL33PD#vWHg5l(&$CE1a1S?e} z#p!8QlYDW~m_QZWskc^plKyGbx*2O+PP)HD1I zGLAQy=H6hs|I6v$`OcWWRXbnTENsy#%k^1Pm^$UZ!SV^DPSxbI2>sUP;K53!2t-;% zUH12#;s0y4%9UZ=J=fY-4?x4f`{(J&@@w&;eqp$}ovczCA#_n4b=dJdA&`xGhn6%E zjVxfz^-%Ri-as#ZvkT@b_;ZJ8J~=**OLum#RCi&=Dcph>9kgrJD4Q_~clzf322`cf zTk!&;-=NC)@G&)L%I(9h0G>`$haT2e-tCQ0$j^4{2ZRpO${A*d6t5lHWOxe+rc|4D zY0tF16=cvqo>u07D^T9>W*-+$!e1oH+R6Oja@}6gJA6JrMxd3MKY&D3%dGsu@3g8` za}IwJQB(08kxuL#3!IZOU1@)Y4rKK~u=&fBg3U{>-h-`MA&8FlPgN>Oq|PF744Zc& z5Q7g_{6c~$`F9NbxuF}JOGIwV3J5oMzeemsdp%Q?K&8_-brATg+|A7M5x`=2ij|t? zyhW>Wl{oiFfGx1J@Uee`IZRZ-ip3+3<`Zp=n&_yR0{2DfFC{DM5kB1Im)v#;w zWUgm`CV6Rs0m8RE>$CGtNB7-Yc&76B@}ORQO$TqG=umlW=KHX19FF@@4#HND*yfKl zSc{)^#PZ+7_@K=>tO~vl8M4+XOi(p>BM#9AP>K~y+X(g2pFGwbaFpK+oAza?au}yd8-dCAR0w_~FQLcC zvq$R6UvpFUn;YpX-DXZJ?@lcB;!!aFW$f5T*MKL&p~CX+#!0OmuhotRV0$c$5DNwe_S&^@YLF`~C}JeeKARaz6=oi#Ib-ed7YjkWwq_JuqmSNP9;(6!UQcA^uGqDy1|` z(8iRNgYPG=d2U~ppz#i?2xlXvd?goz{fQosiB6bu+!@QA=8WYb@%oc$*W8OdwiA^s zdCGm?JVzK|o@s-t6y1e@+#(VDI}7l8d*hQI&z}K9l9z%(l&R+2{lPBwcepC3*q+dRFZNy=|u%$Tv$V0c6pta_0~cGP-DQR+rR zmLdl?Gq9zQJiV`DCN=HVecx2({d4PB%R>VU?zdO21}c1ye{rx1=Us&*u7Q#!M#)`P z`%YNWRp;KSe_y=C_QWWg)YX{u&jv0Juw56lf3O0%v~mExJD9_RyVOsTH|J9J!A)ng zSnf?U8_zbtoov_unvE;!M2U#4xCz)ZZ4O1iDnJ+D!g}t6yv(Hwejyub5acL!!YHr= z+h=6^{{rh94|!RrSHF-KrOOs5!>hS-`+{OYr=oPZtNuLk_wV12#py|cd-zYaKD9s7 zjC|?W0!_cuexuRNnmXCZg2)?}%;JkLJGlk=fM0I9yu{<4qa*PV#bjW)NbK+SOxv%U z#k2d?haHTdg}mbudkC-XXh=I03_aNpQ7-!!gj!8fcTlonZRk!z?!_|0UA#oOW!QB1 zkK@jp2G1{!sc2;E*+nC!T^Cs=Ff>eJj3tUbGe3SSdc&WuvyWn<^==sIQ?M92plA9$ z`k<}Z^r(L6fQ)By&oy47qI5udZ?f3DuO%GxoIbFXpUYNTvZZs?qusqlCHu`?iuz=f`Ls4Mh^t*;oY>N?9uMFmP2J>?lMIV`R zIm}^=A$=TQ*K^(t3weRY0ju*Bd4E7SK`{CAAIJBKE4dr^!H;p(P-a{|`wKt4M7Nf{ z*~@(M4NS=eTmR5dz@#vdY+u3Jn(M{D4tpE^-_=02R;?Pccgy^1VBqo+@FQe)`xU&d zsVA*zHZRx_0K$(A7hh2$@W+rWejN^UZZ#=Fr=M>R`|ukWY(Eh4p`x6jSkkf*T(eAY z8Xd&~_G+Q}yct4pb>S46`f$}8y}f6!1sM0q!KB$}PPpN5rQZDL7>KvQ}?j6uvfTDs%r0 zn{MBJes0s3UzpFI&gB~i8}z|8y9Z&tT+}C=XuH%0{XU)bgLjpdtyb2fSb+E2o<|4P?-05cIGZuRZOm=5Q80UG zuJXJhJ`Li*aVOwZ#=E6O)%WQrYAuB%@*EGKs**w^9di^{)qlSIEO z0n5%$CX3Dy(oupb%2#{AjY4lL4IiyOD_30k^pE^&q=T882jTrv1UCG_@hkIKO4!&8 z5?-E7Gx782d`TwBM9VHuzhu6i3>~6fp5Qt5Qc<4FO-Wj3p4m)|z?k713lgJws_brp;qMzZdT$)YH6NgzA=otlAu^v6Ru2hFJEyqzWA~$?5?Q!x3 zyqMfWidf2DpIDXyD;+ai(|N*Q2@3hZNv>teE+;7O17aUN=*%@q0$4cm(28u71F-Yy zY3Dt)edApeMa(=_Yl8rR!~ZrAw$p*zCHn81XU@HvOpf5qp z!B5w*0(!jdZ4|b6@u2(?=uIKbeM}-8OatZE^xJr^V@pyu)$rd)>f$gCaMG$w!OY=; zg6xOb`5TBrGOXi}H&!9nzMF-yH9A-C*C+)4{$9gwa~@Hft_hcg zoTqna>39Et*|SSuu*QS$GK19@M;|?Uo?WhT!x&R|2h*u=4`xM23q(Dm5Hjz@FSBS- zR$BfQiKY=!uh%D*4M%swAr!vCaNj|Z@89}g+n z7t(sXzoPjig!c-V;x;2$Yj|J{L>hM70q0SkQXZkSOg}PkC1Cl<~U&H zyTgd6QNWJN9$O0LI#0-rULT7hTH1Zu3qoSoJ24|bT$=lHla!C6sH1y5aa9%>O&kc*yK9BnS;(eaPp1=q%_I^8wZQ%oa6u-n*k>V(aKSq%>dIXDekHV##}0UPBYR^TxSwfZ)J=`3;85J+YcbpB23 zo>TFZJ}He&{cj^?4HQ@j&xAi`J{wpwm=;bwPa^H>HQeUM$DeEap3<$9!E0Un<2%Nq znd_^82S2qCMLB71kkL5`pDD{i%1J`D(#EX$brPuA2Nv8Y5R?0p>&_#w{q-@cg()?! z(A_R@d~=3oM)UWhi=v}sU&R0qto6XM@&QyOnVb!9kr3JQ)CE7x;(h>Q*)tl8SAjU>ksIUdt z%pa%wJM^93hpqeCCh=Mle0+Tz^X=<$$qi|c@Ns1Tf}qRSNv&T77zm1TK87Aq&IbrC zKMjT$E2lyf1zE~vsGwI!x+o1mu?%o`DnZF=@S*%#0LWL3`DqYaFF^89F<^qgLW+^} z1ttiZ4waea43b7x0rb)7^rER!W%NJR?_^=VW@b%MKaE|h7hhoY112Lt(w9jZ5*Qm*DSQwlU>&rD0c7_479Z&}2!n8>&v2vokPE*8{9nY>U+nWuCip%FSq zl0A%5@jfBF4G0G3nEkZxF5H8|{<6%WHXP>l@pJs@gS5}K-!7}w{N){ZyV zW`o=i4jY5awb_#dtZ1NhFbSN5yS``Zmg#49YrI)b$Tedz6|AD}r74#vC897FwKwXF_`_ zUUlTwHPyVHj?mhvm1y|k0b>1?-s@55ciG?3b$y1|`LQ{i-?J7fkiC}vqAJQ9w3NAj zS2TE|wWW3^l)#K9R&DqNnV%UbURRMZcShxNpG48#rlQ%1JwfDKgu0rLlI<=EFgvy) z*H9Qc&iPjqZfo=oBe1aS6b?eUH?SeRBQ>`Np+vzURy`D|?Cy>0iEx3LJU)2j8s+~Y z^u>!f^oLPHJOiXAqYXBiLD-f77Ka8KY~r0 zg@o}T^)JRpIqaQo8u@t@Z|_JPWWKekaOH&y7v79rNFT9RxP__Dj8xTVQcP!hg=4vV znz9giC6wVmje*7Im>2fm|Iv8C)ESQYKTmgjoAbW9>p1UN#qRPpZc#NNsgMyDufD|T z;ZJz? z6-*L?=1)99=L}AKC_IF@=K8_1^i@lI8#m}yj~R5a+TX@yHIU`-1)1NCviiUtVZ&MT z#gwnV8yv3S>of^wq)6X*0D=Qa%r_>@i2Oxm(khgCNgfIdYu@=90YuLfnGPQ`82s85 zK6!w!91>rNSZ-L2Pe`*&GOW-8LdI$P8QJ8N;vapaKjouDoy^T2lczu+w+5)gvo;$Z7#}Q4^(=-K=6Vc<%)x=- z$k+ZBm5c0Gt5%63<+e%6py=cI>>-kR(baz~8EWegd|qyEdUUKC8qeg9i|&fQqb}Ou zh%}L}fnWNcHYz1lgWu1ef1g#paveHsPfFPQC2z56Du$exG2;WqVWCl9yT2ZEkGaSN z!b&5p7@k`Zx(^HbX3I+DUZ6mZ0%y=&WBe%c)O?AKi!>ws3MDi!;=*+^ar}(rlpu$js6Q+zu zsD}es<_SVK<(T?I$sy$ujKc3ru-q+|!V2`bsWuZecmFNw3Z>9$b}7#a)Io+O6thEb zDMk%suV25u+}iRPw;wwC7X~A9t-oKjwa6oe22ro<@Mjow=1FIM$i*2BnY%u|S5|@j zThBBt$;&7T?6!IUe!Mn|C2ieq(urD9(r}*$UQdSW2>F0X@zLHS`3s(6rLrz0>CGKI zJ&OscXz}u~Ec3}Ap2DQOow4;X4p=tz0G95I7Cq|S>$e+F$LJ?X|E6wrOU_8&=9;a> zo*P!&_5#^&@ZV3VpYXm@Ci8}kbNc=Ah6c)Q3DC8PG;-4Tev+@_Gk7{Czmr&fcA`sQ zIu)D8qLi_s5X+f3*GyNskg&{5K;&Cu_%7WRCI!Z)vCsHRqN^-%F>PAgw#FXab z1g)^g^koqsML9@10Jf6!a~~76j+KJ=IP$9cJIYk@*TtBj0;DK=3E9+nH+-W}rD9tf z==*>KY~CD0?oM$0J!~>>2~IWep>bw&<_UKN8@u!|WAdO7LX&s}laYbtd>~@8(JJG$ z+=%vaa??`p<naP zYP7C&60!TAg0(R2ks2PyqbRT(lKXvZ=z(eUG##6>>K^P{2Eo8O9XZ0d9cm$T>I;V+ z1~5lc60mEAM)8^vRwm3@PC1WK50)0S>FM)O!e1P)pJBSlse8@w^)F74gSOX(oUheF zyk+`yPg{luu3h^|oo+?HiC71CY|b1U-SJ=yN^U5CD>3>(t*f#6s4Q>{pHa1Rg4}%7lacPW~ytKPGUw?M%C?y`lreS0848c#bDVcUA zCYG~kMyzZi9<02Ju`uG-;88fG-%R*C&|qe-nI=5Ous>lPmS)8ZpK=k$&&szDbG?-% zp~XCs2zFXZJqQ!W{V=v*GE3B@r@dmZ{WBsR>i{bNsc%CTHfL~@A@mzqCDwruD;&~Zwp>KsW%tWZW6aZpt(GIZ~v%#mvyd7d;zEDUy(zSI6wehq&NNuUJhnh4Ie<;dYVZd(nSAH1K+a?Joy%sF!OFxa2SB^yB%^>B!vPJoH zR1AJl(q5kOC_QEuI)hLHJ67}oLf1>?xG%$$H3&^n-hC#+N`@h{F$+9}5}nhhfZ;yn zCGxjFGsU|XuSH+bXnE_JBO0*n_FPiRJ2L?5CdYD8opPU@*E#y>wH#ZjHWnLYI=_ZZ z4?yP_3HBj8y4T^Amg$5gg;$G=LVF|@ed`D`rI_*%O_Zp-h@KYDJP0HEtf8V@M3HMY zBD_`BL0p6v0mfRwphLSsxBCbsj*#5!O(D^pYsv2g?8R~Gv@1z%Ap&{dC*=e;4~kg2 zbXg#JWHX68Prler8>FTP&9iIOD21M)b559Y-5IN!>WI1hj-(F-z0EL$lIqIuH#gdH zHSrv7!=hdIoH}0R0XRbRIDM=o^#Y8y)jC5jnu|ivNu?nawq?{KbY7x$|DJEa>)#VO zPc%U6TD)PqMuj{o&%6QoxlmBV-hcJ@g8FJ2A7ro$gW;`3(X)GIVu^1` zeDqj(Z%NAsCbHuU`*6I}u|A^lLZ|A1&8Qu*u?&`HaA4rA4=gPVRu4Y5ginC1hSI`5 zj)hM@4`OEHaPWDyQ?=yV4`Y^2Zc{P(-p~pk5@~ta1Pf9>rh9~8vt>504secIYY+g; z97X6@p4)IpJbjYb4|||jpgQR)SJep&`;N^t?)L}A8^M7E*d4kgJnJvaX9oj70L;L3 z7@wx>gE;#<9FEhg=nc2K=v{TiihCIKHB`bZIRZ&5#PzTsP-lYaF)_itSV&R&Z%R&1 zPQ_?Rcb;yhN{?~q7)_41k^f{3%p}~2K~+yjSv}7k_{k?{&8gi!_snFRR>RB+#mK4W zU$<$~X272j@U#vyp$`*c4!}loltKG*gL(V!M0~%M#aP4rF8Ns*MfVfqm^4hzLB4xf@mL3qXEDZbdg($vl8+`w$g*Ad53e6yV1##fOfi<6h z&OE$SLAfN@4ylDY=H~SQ^c18P$$K+6Hv+fwAb?aN&qrv<8a><5%L4 z7{2*?eDJ6vobsMv1gZMZpr9bXM57s02>InWNbej~QEz63T`k{C?ADn!3_bn15HAC{{ zaaSgjtD=mN&U}YVFyi8MI0?0T@^q$!#KBVl_(HmizC*Z4gc(DNuQic5r!~Cb%?lRe z8yd@3-1o|5e7TjqcttDg3%8%yus(s$=Y^wtuv4N9`ymM&L3L*2-h&WphENr=?j=O+ zYN;sYVF%Imf=-MUuAn4vz}OZxpFTR4b~E1sHeL`@ytFUoZez4t-q5=*18ZutD5j<1 zn`?Zhtqd#I1DvB*h3R#jaXm(NKJb!B4UA>Q&Qq1Gfk(5urgr zL8~67!Jb}=4Gea$NeLM+px*lhR0`xX%(MwVn=qk-!3S5s;y+{3Y;*%#J{EvD)U|P% zqkyQGquUSUtVM}}WUEw+{}5XJCm_Dle>2Oa7rDnnz5VR}jUO39+ z-ic1%UORZOO`r{HKt<^EZN;!Dg2L+HE+0nyq7`3=X9{N9@1hF>3x5{~Yx4x1Ls9g5 zUf-@&^YY+5US|MGK6F{LHjw4a(s%+?BLpR`u~zb$!Wss%IXlrslc+~3J_@})3|@z# zfwqCM$vP4tS`b-qKZ2GDo(Yq!0Xie8Xbp}>2TeXP;xe{d5CK?tfyLF97SDVfBmH)Q za=b7ODz@0o*q(StF_Y)NA(Ho0O~-6_0uLFP*XO^ z#+xTOkABCa-&s~JK3+Z9m?OP8iQH92UU2=fNcL_vgkdcWFUQ!5`~LO&qrb|YJ;&5g zG(kR01(BjVWlQLEU0qBA-KJcrfEU<_I;8^MmjT9o3&ipLD}(#Z%MdHW>0uLp;aqHz zjkiQ9)|{omPEH>mijIy>1p5mvk(`U-(;L)h3?b;xKmY8<4UxMf$4@L$r05PDppArB zoe7~IL$VJJwyaVEZi~Kk_slahCFpB|VqKf3W4f{6UtAUpcs0JbaE`cDhXKC5I@ds^ zQfnWFxLgaqw6SC=wOajgVH=}-BG_L=qG2)_2k5SKgQW!gNGa3$7AmzIz`O=kyM76z z(GabA93H3KJeC7o`YjaYU6=!oZooru_$J1Eb2NnUYGgwZQkuZVL}y?E_*G*Yq$u=` zu) zW8VoU7GeD4zy0It56%p<=Ut<`vpC7I*Kb9xJBcZS`z!c?2I{3 z%rq8}JK!%eLM?LKh$^E=(!{%`ttM}gg=G(f>CLueoXNYKEHUCeNJs@G+vXr`SPInT z=Bcn*vAW$+b8Drwg?&q6Xu~VRa@^O>9PC6)qtTSBMzk-iJ6XrQEjLbYm`CoY@5%_P z3YY6;sDj8mn&G^GTj@m&9Y}=gPwh^$Grh_%Q}tOd617KMKvF4hjzh**t~Aw>q|$HH z&XApu$TpiCWd;%N^h_aVntyneEc(#>(+D!3f3~|lQ9XcR?}(q39C5|S2&MH)BLggK+-Thp!PK z#Ex1a_AZrDN{LM=HHxC8t)fQF)@q4aEB2-ejKIg9QXPkTP8gIF+tyq&#`}~R1hF-pf8FaNp3szQZShjk% zXu5rCP&DbG(n_5cQhJ9o=}^U#w7pXwg{HWo`-z{w&VMLR(V_~L^1dda1?nWc2nYyR zO@28NFvfa&u*NBUMIY!P;-u0Nt+ucb4StvlVtXrXdkU~E3MKwI4Kt}5h-}8G%+i!& z9^1ej6e!Qm8(dQfQsV{&2*EH2mE;zpm)}D;a0v}vtN)`b;$URyxnT;% za2R*wLY)NWl+AoRTT;-kK`*MGsKb(A?KPE4ON;u#;HN{Ipg=yEWBG=mH@Vh0KFHzGisu?#@K zz4x9KtMVYhSC3P2!2Xc$F=q)<%K(QWzsDSakYL12^NFpOjP{t0{q6kOr+bKE94Wfd z{o3oV%Ec49f$scj00vGls$eMU0Q%x#(vR%|ytc86RUU`Yiv z+;S6sqoaHFJb5)P)o)GYvu8<>zx0z2r~8!UHLPjBnsm$LC)FKl-VzQl+^1j# z#xtwe5{4uvPuh&Z9!BUZY(MU1)bqqH$m{e@fIcU9rbP+m`CHinqRDq~5>6P|XLL}Q zOgExiEIETnILt@2go{|Wo*MG|fOO2nTJdYZpvPwxC4@f08kYArjJc18j@9}dJ^;MK z61;UwA;h}=d_j1u&K>2ufrk`~6t>jPp0C;DNs}g3Mko>+Ppqv-ED|Z?XNqKn-6oAq zL5}K^MViI%*&kqhqdGVVzI?D<<_ z9jWP-u&@;}Ype?|Zp0hXaR&XG;9B74-5kS=w#b-kM(mV3OgXl5%ve#fi+_I_U|({! zq7mVU-H+h&FAsH7Wjhq8vXfJXIKAl5l_aOn9O^(f6qaWOhyA#!I6*lNq&rq%2sz=T zhE|YXPFTwX(?aBBb{^$9M!a>xDud>TBB5K}=U7JcobwzFba{AxL+)iJ3eCLW3X#5N zN`IIHrY3nH_=8ZMS>W_X*d^i;9IwW)s-zuWNe71ZWj|C`>NqW}Fr$$S> zg`bC;{}hS#Q{@}Q-5Fxn%zco=ocmb$MZd%$b_^9?0l#SUJr)R$A-6&;jKFuBB1`kLk+N3CK=XY4GYlg zRKl+YhWc#Kz9qSRe0;{hL_CY4DaEL@pehc~t1`V{_^_B=+=zi*suAIc{}Ptjoy$j$ zvN~MVBixl?PM_+mu!S(pp2($TL>G|6`bLB!@_ge6agzVSsN=UEc^6wdbocdINR1Ex;kD>c)hQjb*oEaR)ep;CHpLoDT5IR6` ztQV>@f6F1Jyvo+8zDBTWCg<{kVD~8j#udOwwLa{{;)IoY>T;fB1!*=gQn3)9yo(TE zGc7EGJPP9qqX~|aWw;ctufUds$b6hjwboEZ|BTdBVyV`YUvqpGEyMQnBRJFIv@@kj z&x!y{T22ruUA=nsoTl(=>OZx>xSx*fbN%(xs;1t8B00-UP5{hFZ*du2wCjlQLAH{m;sB(nhpi`W=JjiD|B% zd6p4Rb3B<2b)uJ~&nDCToK7&3;0X6i=N;8Ly7qC>X4K!=Ia=fiHRU*J7+co(Ick&_VM+dPPbL#6i2`&o%+AT z;E5YJyvu+A!4RTJG^~Xl!0D<{-{EEI-oSEj1kJb$kO^rT!ObkNdExPws9R?IeZ!fzrg&VBEYZVr>Y0Odm(x^%J2yztd>% z7Wt)i@Q2RF8Wz9eN)j!3HTm9@elBLDaPs_3_vUrLzNb-+#sVDr7`k@t>guS5s0@=4 zSx5>_{$8*ea<~;3Hf-082TUMiX?{@|W<@t?G7kkbvhFPgF9Q+68T-a57vA>#Jt zoO=xYy|1)(y!h)lOl6)7J9)Vl$bRq=7ns)rRzB!M31)j`gAKfY?cviVi5Tai7+_6; z7Zius2ojgaU~0ton%i$6`Ac|e-%+ueu*4yg2Wyh_-e45`oc>diFn=O1tfc6NQ1|!V zd_fNK8Nyg%N@#;Zg$`)m8G zDPRu8*D8MY`L*NQj|d*rvUf?`lUNe#;*B&^VEhB-JY5N8pcGb>rL&9`o~OCv|9n)AM)v!!auyQ;mX> zl+Tz)xFbX?f?22m9~hbzROjQtx`My(-U$ur2NdG?Q||7?H^TBEi%@ujne2hsof0gMAl5!FwY?Fpvqh^fsHh52)V@hV}B-Z_g2z;FHM-K zI-8zUpb8=MH!WY|;+vK{5h5SnA=kyvxIayWRos-Eu4u>`MDAUw@FUU9GHV!4E<12` zO+PU~L;EErz93rVnu?X&i&dUa-1j`#E>gqh;e{O56s$0XRsDg04TEpHg0;gumTehM z*rQ-@nsiZnnqF9+KMh9{*dYYxOSe&30#*rr^0q1lb2;pKm7pX~?zC$M)xN{8Tk?T( zOPGC`c_Is} zsf#!|w-*wuK5Be=5C=?aI}uz+u9g+KF9~ObxK3TKnNI>g|6fNCnh8I-8M9MaVSUq_ z^$?urX-~-#`wv)vMbt)qhw;<$HjWwT1-EWZGisyiJtZzD3?0J+=3>bMU`OQ$VtS5P zlPs`Wm_$2uwE@F%4jKL@jD105p~w*;Y#J()`xo=P2Mx+8FMh2b;eA$GhIxD)k4eQ+OceH3Fmq=P#)RH&Uv$ByuaUrOWn%{TU{KD&bSxE{0DiyJA!dF@iQT7`a}P<- zbHB|^TpEP&XdU~-j&*p7LyWl|0r;3{nUq|fPM(+^V9!e=xRbXM{Qrh8TBh}5+y#Cc z_zkrG=iBR|LM8BmW`}2mN@#>S%)1?u?+@h|MaLW4Rw;9D*O( zXAWu!yaNY1zm271YPFx?l=20yThGikavh2BAe8%<41;!wtAWbf&f3=WvO#k`oiHH= zb}uwi(upF>d&ue+Bk2kJqG6gjsp}}$PybkZVE*CG_VB~%hWu6#ar>DB`?u8B&XW!+hJajru-g|vQ z_{ELv;jQD@ip*cXQvShb+Y|`YScdGRuCB5zJNXZX~&$ z-n(SJ`pd+*?wR8=J7@;J55wRg^s_wKi{vX(Wc!QQ-5;8nF{<7+dVN2I#-Vh%)o4_tat{1;XAGt^{AL%s zmJ)OKC;`vPxhfKfu|Decvtiach`iM7l6?Z62Fq&b-eoHosZqk%5y(#Z8@{=}{M1BL z>u?s1G}}})XCCA`sFZi1sU85-)pV7JxUl=T%_!9h; zr&g`HfbkBUrC-5>j;#z|_Y%p%p49K1#AlQ@YJrD%nl7(i3rFJ%>PG-h7_DW)+;(Ej z-mcldjmX5m*{!TDnfNsOT|NJVUwD&E4WSoUnXBIMJHVz2SVD`U3-7bu>fh#u>J9~qNWq%WEn0xF#FkQ|Jkl|?eH<*haE4?AjOa)M zlykHc053%>Im#P+y69)vc@6bnII*5C$6w!lX6^9v=*tuLeCz0GhuY)|N)*q&a-VSe z^v3<=gDBZ+zYS4=u52-l5*BbN_C3YeciA$WAGsgO{~4vJyBp^_Pw5T*>wlWkU3HPi zcvuf4e8=b0?b#7qu@F+5%M77LG_{`xOk8`!CkT=`j?nb0P>ybb7Gr!1lebdk5Sj*B zrs-u<&jDNCrKbAZczR?GrKgIWqdy2=2M}0EGg_jeOXv=vPl8ZuoLCJ+b|!qTr)0Tq zrB7SK;m9$!Ej*p9`jFyHD|XW)ongHeXMHCZJ!s{b^hbg8M27-q{57SwK*OLA&ey6V zXxx+De@!=HR-(vaP+Bd1IY8#koBIl)0za1Qz&#EC`P^6w^Sa*|GdW$fYd1tH{hJnH zSB2Z@&4eB-?_TLIeA(3&zKw#Y=ZqxR8XH@QR86T~y62VcE$AmA27`1YW@xsVH?m2v zqC-0sL?xZifvcoaC{Vsxn`JxFEf>oG`Cc*)b}ebO_C2=F*s2C9aGef4a?YPv8{IC-%P=p zap7hJ&Rw-0Jhu{Cv9izcEK_tR-epG6#~6<_qdRT>Nx**30t>KWTl7fH;rk-6wSK!u z(gGIXsCG42>fRMx!b%`G^v}_7db$NeAA-vlj*nY4w`M6g2G5S6Y#tCa+Y2T_TJ`jj zDA&{f7_)ZtZAp4u#)oVSOJp`qDrt$@$bk7hZSj{S;vEoh1b*A#DcYhMYrR+>HudDm z2gLN)7;w!kQyYLYs400M*eIGz<=?d<-wYj-SmJ!N6YSBt+!VA?Z(PAQ9dh&CgK;mL zun}ntd!~wgTLo?k`@xF+S5*`CFpUttHY!vy5wCD42kZx%)ZWONBLeuj9~OKNJ}LPH zQ~_`3!dgUaq~~$6%G(2Zde^Tfep8Fwf<0QdUWBfWM8C6gn4-gAtLG~C?RQ&zbGA%h zN8~NgM$QJV=dAP(3KwfQd2&~A%flTQpM1``qi{10x2Ld6W#3t{B!=Mh1C~#H&biP_ z&A7JtV@09j=xduz%~=@FZ)$hzYGBS;nfP)U&+MkGNwrc+aOd}}TZa`ixhgd^l$A~q z_|w^$ax9C51xs-RpQsUEi?47n|;IH$H>k$RTN~X;R_^X0(e;jq}fo;+SOC zMaim|{|tkf)Gfg;0?f+r=os#p>Cks%}_F)=YMfqVNS)GU-l z&S(HCwJ#>m0MDu=l#M0Z6pt!Gl_E(|3xd!LvMsmH=tsWQNp|%}w#=*Zyd7K40_G*D z7RTUX;%CF+Jk98b#5$Ulmsrw-GlVvpf+*W!V(|ogNETW!ROR{eRprz!Qub`!Z23W# z9yT*P|1%4xwvyzxta`9KXv(%{8OhJmUO=zJ^5rvxnpHsc*r7!Bb}`^OA<1;RrEg{c z3b8fT(eTNi8fKTZ#Bv^S#?aQRFvlK=CG~$PS$OFaa@Jj1_-?nEMNwUX75ohjB{;Wd zcTN$@dl7W}y+i;wQ(;^1MpA?=mLH}dT^fr5J8*x-d^>W9h}B7r`Z6af82Z3l#LyQH z@V;Re9Xga{*scipONkm|Eq7Tq*5_nkz4cgm8`!*a+b_liZj zpLV%U%kDDRgU59`Fwo^{C~1+?3fDVSGMdrQrTyNnK;ef!9jc`j;0okZH8|Z3$`CO) zqYTQ#Mrq_}J!1nxF1>sb)1bR9F2PWsD}WU~P|Oavqcnri;>z8x*~TjehFJXz$qV+T2@}bj*m_Cm-r$o-)BnXP7U5yf>0F(CA0O2zxr?n zFN2C7pKp4LT*?LG4H7c1cP?4zpFV*F9&R)p=q)52N1GW zuZP~GKamw9Vq1wx*E!Pfjs|2iFpsc_za+`mL8GEa*`Q)>r`y4vKPpe zUfB&bAU;?E(rUQTi#LX|xfP!RhX>tn)yvY#R_)icqy^f41)D#+NYYndsXvJ+;(g>f z4nKPI*wGUhr+jYmfhuwVXZ)yGQMr2d>}j`nH(_z2p02zJA27Y1_1as1ry8Nyaue>x z<8&Rk&c)cZEdA+>6ob}*vG}rzy9%2=1v!kR~e=MR=E)J~&%j0nD?Nvh` zz|u84R)RrS*{_!GBo4ETaRX-}#xX0@oM4#D=6@*?j`1QbCBTkayQ83{?|ILT55yHM zIWEG+bCmy_Ggb*8n;zUf+Vhu>Jq|Vutt25|czSxao^f7z9<2GHa#2iN8`a?SP?7K1 zfCsc$_z#zP47R52rUV}Zo2EP7)+;eyW2v8wtQq5s!3x%BxoH4Nz;as6=Vwb#iL}F4 zZ4bOvBIh#4vRK9b>$Eu2UCT0$#{xRSA^WPQ?}oH9{4`u4z zo*IId!nm6F^OuIJS}yXM`~Rc`+OGNa*I#FImcEie*?9Pg!s4jt>cWIpr3w~1 z9>izWWJ`j-@}t&1bB}*4PHM|;vJX3bjyJ+?Da)?h-VUI6h1o$+Q|}xXGAet~i!f33 zBR)Hr_z9b~!@`&Kr9}u8{GF|5+io?#OsVVxVT$L|nUzhBNoC(pPpp1K?^}&59W6*{ zWmNiI|8w8kOm+t6IY_s%$F9`Z=__<`{rV22%@n%SlsMkhc!N@{j4g$YncqKPV!|_V zkal5d7HAcE-1fLL<`5b(qy0ClL+Az5reu5;a>3aF5O((#v;ZtQec{B_bBrF2qVW0; zLeC_w^_51S zPru?CAJ#99R$24uSneL2O*L_MxbwNr{eBvw_CMiPq+RWa?$=jD4gsvE9SfvtFS$WF zVB8bDDpy@e9g5w>gH>bNxEbNTa(n>KbIO4)-Oys%-<}`Dpp&3H zBQi`EUQEa9q;OqqU8%>R{|&597Wr}6zZ%gh-#=#a=T}Q=yC6gJYzP)+jmMcVI6E@m zL~t{4iZ!1CQVZTzIVTF(S1@@;d5;x7MB=L26~7{NRK_QSB(>l%WvaU09vBnmzhhsK zxGNCYXz`zg>}u#Mt^Ba9S`iLH#fKeaA(%*(vT3qw$vxR;g`xS+lS_Pxdb~MF8l=EKpf);T(7Wmssy9@@H1Hf&7=OY{{ZE7z{wa{c=C z8|HZys%@>hAF8!V-6sXQkLRzz_^BTHUrM{oHv58}xccWu9YHlxENl=sd)2(BYJl^W z&AyHtGiHqN72mJwnbJm*2-Q8PWOdlb!ZXN5>y%=cMKBOXl=}&am}$B`Z6F%+oVbJ= zyTEi+$oB<_{njpzhQ=#)O%Yb0sT>xCFBd|e{Cb~Ngnw+Ih|%F{b46$mzM(xC{C`Tj zkO+fk5bMikH z8Y}N7ne^1C&pd`!5v{4A>Sp+U?~Bcv{|@N`Ms$@7%)RD8^b6N>rZAdP(Je5Qo&qPA z`w4pA)+tsp_zDcP&703r>Z?R;f85%@o=;GLA9C2(dZgLAUp%5s^ca7wp5%yS^QW^o zqt4K-PVdWeLn!x+v`-B=j+jjYIgSx6aW%ooLxDml|5zGoEi*#jFd}v$*9khw&M{*J zA33iuGNt|vRE=|lT#*&D#)!it1db_`d;@cXi!h-%%GFG~(b$oR`nR##e0#rnDo*;q zUCU}RH+yEOIVY&VQEo<#If1&sJRD)~9+!Ebu6`@ENJc~?_sVKZ!$+I0X z6fwscyLr$Vn-lM&g9Z2>qpdbDTWIErr~7m%{krT=_8lq`ck`1#!A^NE{t)h>wLh(G`F*j~imkHc=lNinrMt1-hM{is zmigJ^FjVp;U8#L%Oa8^r6!4rE|9lEV-3}!*w&t$TEjDI`j459A1o={cfbrpZIE#pk zl|iq0jxBJB4spWZc!bpsSlMVwnmS-TXJ2&MG_~lj`KS|yiua`F96$e?ESn^8`R0E@ zKj2tKv?B>GYD74qBiYVz%;-G&mKouwgM?$4(Mm6zvE}BJ5mP~<)@0FTUPJl{@;YM; zS)h}`HEZl^L0)GJxo>%}b>=H`&AW@Hk94T*EE0Ao;cPh>S|XEd$u*Po7qA>&dG?ay zp2#CCu@Db7CRbzbF}LUmVWNMY{m?xe#T33L+)w4cgZwmG-IKW<8D~#(Ghx?Dl*?R^8BMisM z_M-2cBim)~mx>QbN(R{h-8D(5x+-#2U;gVYk$Xv5W&19PNm|lS?E5zAc7P4YJrwt3 zaod}?Y~GhXK0ZbI2=|1?VeLMv@Q~_v72k3`_xT+u4T;>RNPvSHBskZQvlDGY>3n%d zHT%~IbYIWhc5yA%6lzE5#r6_#O$Ob&>cdm?kOb=&_zv7ixfaMUO?=khvb#_PXJv76 z((yZvFXn!kPWk1Tl6uCp#gt46wPBaCAGS+M{X_4{skwtw;>E%?ZC0nz)Bf-3EaO^a z@e@ja`=qkGy$rFJn8@)nbxo7kuhSVgGDGf9@Qx-o$KNB1C5o*=$&FHInBeedq8~&> z`ykYtgh}*JrKRvDcEA+*tgzXRW*ut(kW7^22fS5jG;LZfDG2+!y5M1%Df1Nhb?QHG z^`Ug@GCD4egN|7uv_gu#$-Jp0L$ozfw&co$eGc)7NVlGb2-4aY-hx49hnP&f0~4(JQM7b&i6wc2_{SfgcIK(RBR_ zJuzA^q{~JU?b-8<6cP>2;*@3ay=Bb-Pdm0j5h@)QF8?J4JoK92=W~TvH zJBDvazGD*~xnNjBqQ$g}u81UfnnX)a`hWdeetsyt>CP1v%UNN0YUYujVLR;z0rWgd zLp}tX;NvhFS)S9ZpYce&OUm4!3H;+wN4I|~Q96rLG@@>&=^@cP)8J1jm5!}3IBV=y z9wP@k;c?ZzgRp_-t}}kB{FvWd?StX#09y&ZX9(+r+a8*^=4VPVea^dka_^xL)yq7m z58#m8c&^j+HI1lR@HkB@gLwR^b0*Brd#Njw}+%O_J!G zMrqt?bsS+G{nMt0-fGfBA7Pk7FW50ltU`kG(rb&@D@4|OPIp#usBcFYGW|XatY#M2 zvMjJw{}7Wp6(KEF&aBGfguw#p<1m;f3$gi1HXyTc{K|$fbb3t18YkL7&K2rNl)%j zq^h}yleOUWi2TN{ZO@V7NKX`&Y^|nfnBd_nsW6X{@X0t_(VR%h< zxq->`-gVoouvsx)l)y$rglnh(&utlP5?a+tZRLkMDog^`9#S%QO zlk33gGVu|)-r2%e$ZFBddVzoQ`HwNcWu`%^;1!O)J)hX?xY7dRmSIN2)J;y=yr4~+ z>ITC?tXFIXnqdF+RDl%OK^XP}PV%wH>m;RT3+Ad&K?c1~=^wfnf9>g_zcnvasuc6b z@}Y}b6dE=;7Y`w{IyqH^e-|+r#p~3mQ%~3?S%xXR8O~T;Or>dpUWX)_EGY{hWfrE> zj6t&OTC92odm(odpaQK{U4ywJF*6JwFoBY?8Qrbm2uN|O#@Ixu%{*XOdkt$XVu$l-*!M0$Z-WNahS|S-nkrVD zO$>fqRg+ULH4^E)QKfQuea~)jI|MtK0FQ2qV1IcC^;gd~g1*cuTY^fegQJ-aebmpI zl}^|C?nv0G@Azic(U<(1tNde_9{PiP`Ry`th2w%^@M%yVtiTmH|R|D+WHo>^~jIw z+qo>3Z73Yp%6_AyhZ80gu;Z}SQ^nZdX?Dz4fe!3^D#3F2;}!GYb3<=*NDG_)zFqHi z3>Ec@cCF+`ZPa!ty_p=%;74{9C|mn$38Ql*os?J%1(uO}4N;-w@5Hukdo68QeuQ>M z@jmfhPo5+x{(SGS-+8qU*ai}*GxNGFAaC;+su^|mBq5iE5~5n?R)GrJ>*n^4gVh+r zoxE9RiSq&hz@q9{lQZcd8PmQcJEcvQ_fh0qUjCUvFMugGQpVPkjtQgofPGKc!{D#{ zWwO?A`Zm)jO_p1k8Xa|p5v9ox33d;6ESS6fnPgcPzAquSPLkW=dl1seF(l&jqDAUE zNRsT!z$*LcZ?3VjiZq(C|2f=lJeDn2k4+C#;Plrt9&_)o8suRy!n|fMJ=Cr@PC=e+ zgU$$Gb~AZiM#{|krIbb~+^Vf;h8cR@?HEx z)End8OmW6$Vn=LD8g_Ve5zO>-I!mR%J!k-jlFR{UmK>V} zZMIYX4(S_D@D|A(@6F?V2G9#{S%H!Rso;SAWCQJ7k}75It9*cClt zRCik~csUk22>XlKF_fo$d-l=rI|hk{bC?=^pRHCuEQ35hPJ#l(G?rk^gOz7|QL)8om_*omxH|}8eUZGMv5%6={w{!bR`U9e^MaKh>ZE-Nh;LAe!e)QOXY-(j z9cV5-n|ZrKyPWmUVpPhZUat(h){hOPGmTq()B&9WQ&VUN-${>C@MHA#VUogsTpF|E zxkx5>@L_|$fi_KceASb{ZU7;VllGTy<7kWrm(`xxE_N&d-!vT|4Xv1GD2?uKW&s^~ zBT^EM&hBQ!ko#X2y|wXpt);%rE$8ueNW|w&ErcNN(t7-Fl4RWF1-(}X(^NBWc=PLG zC2zAQbi5u#NXP2T-1ZP|)0+(}d9T8W-;WwO@| z12`J|WVddX#LO&9G-zOZ=uG4#qH?(xryHzYP)ps`j@uSNqGYc@Mabhg39oDsw~?*m z$UGav8tF=+%3I@B`mHS7I{zJPe-3N@7CQSk!s_`#B}z1_ULrd}P!#T?^97hm5C&C1 zKa$gLSdxLS-ovB|Bfq~8N;0-SOnTP_p|0ctW0ai&eT&qkO^f6qEb|B{0&bDcg=t4=Z%Zmb zdX1dhuZ+T)M5AmsA@aEn)okNEzmOgs?#^Jbo?J$KUZiV-!o25K7=+YuR}ov7=<>ykl5>rWR4xFJ!C43 z_oMwREUVZi=LzDK6E|62wpJyC9;8)Q8I{M3@wG#U4ptc-!3IuOZ5?>`z}P|za~}jd z((HHHz7WN=1)aS~$l#oXD2FjM_a9&Q7ecK=4%$p}_u!U*wIph6+{8nNWfa9}LZ ze}xo6eXk4Wymw3cERQd3SLPx;F8+Q~Ufc?y*TS}ZXv<4W_?>m@POSS#YA~5uzoz~{ z3*6l1s03pMqNg_R^e#*xSmxjEqx$@VgC$8)m>$Z!{~<*MaH8sn-7fjay-kv;GI?s9 zzN#hA2P^qhBUnuGrYb*x9@T`+i!L8ThMP={n#d;2vS}H#?nWhFi^K+){EC_k0H4Bj z!Ry~eSz^RSHlmc)v8W+54LbctVF}eV^{ZsVl!#Xr3x3#CU8gY7X@Mimm`&6t6pPBR zRk_$;nwW27fFmZR^wMy$4N?|G-ZeUjX3dJOPz-EB#t9$l>}wg6&W5#xPedO=G8TW; zrQ`)T4aH1Mr4|sim(q%m`?i-Zzzeia3SfkPN51v*ekB1JrsYxT7l|HVdFG7!BO0J1 zc{M@H1x{sSA*z{$r<3epLkQ8!C7reUVJb*2S|_7wn&sYlYwos_AmA{@f;{IxCvjgm zeeK%C6H-_&1b3|vA;GGKhtC;2Kb)PFBIy0Bl@ody(1)^zx;ply-Be^!Z>%DZrhMY& z=JqmoO=^dUZ!Eou$|gqemWBeAAKlmgZU)(@%Nf_)!_KBdgHn<)z~Jcw8~7!AH+qmVdNRiY?6mzrxgw#Q2j-;*F+h4-@tJ=+@O{`kgfoM)!WvA~(Bs zPbXX#2o3>HAiF-URB2ue+s}j#?}fo=Dm1{lf;__FL(d(2aPA{1Bolwl`;RTqWWa!+ z;NT$Pk;v=2D#`^bW*{Wm*BE=vzk#Dx^j25QbhfSQX>yZTQ|gjv*(W6^sGK*+q@caRyajazYGW~hu{w8j~ z&8%H@N(Hk=M<-JHvrhBZbu@}|Vww``Xnc7yW~bIs`k9?$#sG8tHP+Eo-jXsD*U?=D z%@gZf5zN^s4UpdlQUI9iT-2$4`Cx^IQ#n1a(7R4;?Qz!SsE42|tj{eCfDMuYzy!?k zH+nY1%9Tw!xj_dOM(x)E9GPgm^LMd*s_o&Ko-Z5OQ^T{X zEWni8&N{X|;?A~hFSh;AteJ9edOao)C3OrHfq^ZvlLDP!Cqu2!Bl5t|;)v3O%;s1| zbcQgdVL&K}{3TfII+`S%wymJP>CV{aB$cooHG`ZnGjk6tJ0ve z86aXghm-qCbBUPWar&ULl8A@}P&!aeA9kCtWW>n!hX-obcx<|)TcS!=N{Zps%;<2s z$&8qkPm310a~yr~mC4bl9J4~7Q`gg@bfN&gv7DxDT%HUo)7}@bt@Km{_|>671$(L| zR#vxNgt3Y3c{s(bbRKeR7DU4vrc!lG&lCuxyT3UJ%lzI%fgoiMOW6QKsy{SMCjrab zYudEo<(T{g0W(u+o64tYVlO$>#icpp#d>DjNEV7*l~b0Gr%wLuk@Q%3u@kH4`8}g^ zoRW+uG2(5e38#}!oz!3&t`k-^o?LgbQ5sv$z2%dhODsJR4m>YkC(ERA#gl7F7nf6E z(T@lTmar98UrH0JIDq?|^{T_RGJiX$O$FcX6bG#3QhAasv@tzgBL_T=kPAyL~}>XM6w*R-cFl+I8X6WJQ%xpr(GoyHjNr_ys#4%koh ze#;F0thauu-u3f7FdKk#V&}QBn>|A{3;CssAFHwH?Ax7Za3r-48?sWMIjL(058g*< zMmHsD`{Mz}VM0ig_Ac^_K0{A+cDgBS>Aa5o-)Vsl*R0udbxl=KH2XJKlOFG17)~Dv ztzEPUO&ST-bFLr6W70Mx#H)#UJl)F~*cH#Dyrt!Hl5(Dp@pO@1gxew(qGOMF%>9pq z`jx?`LwUAv!_&Zof4QDyLo#-dxGMA?bW5vxEQkAX#>3kTqti4Ugf@0c+=Rp;4rJHr}V zch(yFH`Bd`IF)k?xJrK0%3GdOf!uGNv9 z6!wLdy#3NK2B1}To)-H6w61qjJ6)VW<69{>v^>XDqn>>?hAW>O2^xP0-*GZLCE~9b ztLfKKk;A_3D66#(oF@gp{EJcT1T^pRh&#R8w3z`nuh1E7rm8N>r>VOIJv< z9gc)W0KWs~FTt=EsswjvsOY><@?qF?K@FjO#N|JQxE@xMU~j^FX{evPpHpqdtp}Ji zkfXHbf}{vnosU^99p1EpTMo@K}#gv!&VDm&n+7CRIs2?wjS~H z#ta{y>|XDuU9j6k*(Ou6pt#zyZMhks)hzCsrZmjf4IEAP>Mv^FXLLh0>u)pKnC@B` zmW|p+sLRrGs+XtMc1ln5x2mCRt7uO+ZoSY!IO6?absL0Gg*){0#;ss$(P*)+TKKCC z8`jjX@LZUAZX`0Fp4Q82@O0vw#G7ScafNh}zm^I2=UGO)EB)S}d151#e_NQ`#$a$- zIfRWH8~|Xq$pUlM`kzAFKK<#Zzs|={*F2$E?_W}EVf=W9Wn5R2x)0Ev87=$-C1894 zldElarbXxvdMmdjY9o{BwnF~wGc*5`%ZrTC80 z8g{)tbb!iuJC#Op_kBllP^nd+c@%$ZS3_tv{R6xNIhIlSf`^b7ypYDVyaJH;c}Jb# zQHR!CE&Ytu8hh^1phiN1uL2`)@y}p!wTnEQV~$=ig^BESoMl;lTd=y~KCgnB;f+hv49K z2XHepF^$@iFe~Ni?7YbRrx$$hC=bjxx$wRs_kdsM{Rt-Lwcf}We!=!ayj}082w0(7 zMhV75b2q(#AatMa1+_K4CwZdya{l>^)<5&y5n)L~Axm7i*qS-YJ-6ZdJchik;d{S) zGUyhbY5Ur$a&OFjz<&3^5=cnsWn_$V+|>f1trA0DYlAmnfu~b*c*B$Ah{1TX6E-Ld zz1~@10a;;$Bsk?4fTM;vVY_j(+#3K2@Tw^7q~{_RJ)JOp;iwG%hnTO+dB-X!X9HPQ z3hy>v;E44WzeSF+|Gxrd&xPi5DnMhJ;`H7r^MKBGQtL|NvpZnff1}GBAXJpnI!@R~ zdf6#S^fPs|F)P2IA37!3mOdA(AzgME-Ik;1h!Ng;+iASAhm3Fgc_ z>O@AywYhD4ymR{$X*@Ucmhqqs2_@vgC`&hbzqv%m^)#@VA;?l|Ocv>hwqxIJYba-8 zR<=U_Q|thFQ%Fl^q+iajll*l&`J7|96)RR)VKvEoVxL4fuY}s^Jg3uqXe0fcFHXatb{X`?N4GpmzEUEPG9)mY}l&Q!qUhB3)w;; zSiaOpz}|!fJ>jr+fJ6(HcgsW?`)g^K%Ry-TRNF0&sw9xh#Xo^P#V)edIlFEB_p>Cq z>Yx~sHs7Q0{4`MQr8>8ioLywwUP2yy!6N-bVE)BLvr*x7MahQpY6;74fT8p>V|;%M zA)CABQXv@rtiL!c_VuuW-W>n%+W+X8F`w?b@o7C#e-T?bpM0C9gujp62HI_vOuF{F zjqUvg)t!2#xJ$dtaBt^i)MA++gvI@F7+$ zpj$@LD=gK|sbosW6xciet)hbxc1TQ=+_RY#LeEHh>XmN*^rypUas4c?u}Yd!KNwn; zR0mEVTftR8iMBrS7HYZlL8#;#=Kk9`CbC^No23L@4p5Gfl>dkU_dPNU%3p|5$q$Hv zXxgTBBk3mo%gl1>0mJAoXp$eJh0yS)386bxcY=WZTNpK-EV12R)^fu(dXlLxibQ?r z89HIp34Z3#Ypf4DVLA22x)A!O<@IMRNWn<#c!Yadj5FS~3R~#Ouwj}dY9n>*yUjld zoex+NsytfCtZ~%v{YLQOH7&?s5_15B*=o95{||*|+wC zD*=AQSeez6zweSIavU*-tm8OF z)F&i!q!HnWT49b5C;2}dEqRH!dO4I2w!+&o!WnZwV9J}bw-uGRfSvVh{XV-`R%!lI zEUU7htt7x+0!wTw7Dq32_`iY?xpl_!+=}fVH@zGxmQ^`nM>U7g8wD|y>2{;{$M zd>qS|MH3`@4Zy+SXP__HMl)6Hy7Nd3Fxrp{lChpm3N|R?uEe1{lWYLJK^bwjUaFe* zRk9n1x#X-Gwf((HmO@waxODfyt7Ju*6;VQ3wb4&!s&;)Pn;*4c$N{*JS+}i z>fo#?I`uETe)+ECHez)dw0=isYSKH>YRw5JGvg8;qjcj)MO)I8b)Vy~6Fv-VEeJ#9%7p&F~;NE0KR3AY<}pRJ0Au=s5J z+Fj$;nJK=e{wpnzzo=uf3-3hQ`;vxa-$&s3BR||bwVc<^vn!3JKYgkk#Q5|VYv%%a zft4Kc8El*q$KJ3MkMB`mPcT1pMb4CCvD}q^JQvI03>_On=>~HqhWF5P`fQGl!C`}n zmLC6tMi>Qh(Pi0mKD*}FPn+m*O55tBdTnW9kLh81Kcpq~*M(t)R9CYs@P)icTj^LO zDE6jG#>*i45E@@m$58zks8aCv?R*%=YZj%)3<#mZJ7EPJrSXqv&fEcQ6Kwwyyfyg> zY=Nl+a>dJ{rjpfr@BNd7?gH|fk$;b)mn_>*`4+9L(aO@yrVfo)e5Z3q?n4^q;C@2+ z&f|U#DWZNf-3jXWFm;*(<`bl@nXKI}w;-{Q#wtF{MRYcgl}ez>SK*6v`bT!#;{oSN zgIlzCodSd5K-+}li>+U~?Cmq@?xPVYa1tmBDQ{bnt)ueJz$IMZWH)mzaq-T;G}n5?MjSz(SRXc!hPCU@)dxI~He<`UX9lD zus^^EeUsV2BKexMw?OmtC!U_DY3Hf2GJDfW$i+=Ehg_aG@_3Nk*3Gkm#%hBM=%f8D zZ3(|+S@Bq$x~yHjk|CD;=X1=XzgQG&+j`Q4Xp*JV0+= zgdaF9`8-+q2CXs=2sW$SGwE9G+8=MDfEP6O{#K_PEUwAFfMgLIK(IsFc@lq0Q%?i(4v`6xu$o1`_zZ4&fc&0?1Kj21rhG|B;aNe2w zpXB+4pXzk}s6&4NtMo$KAii*@faMvYwr(vrxy@=?8*N_hqjS*lm1FSeGPnNiHw?MW|;13sg@9~g!YX82=^BH;y+VwrCb=1WLpIy8dFVrDVn;1Y@yO77GlR;15TbSR% zu*I?m!mYJGeKGy*oVxJ8@>+Ij?6ewHWJND9{s9}pOx-BHnDcZDjq>v9dL3i6$*t-; z??$jb+DC9uxRuT5QeosncCDL)kFcvX_>t>s6z)XrCO2R|{nT(cqKp5648@8p!mO;Y9#V2imDT9jXtvKDabxMJ6}6~n7a zutDq9j-z$nt1fnsCQbg>!(%YbETFTD>%q-+7`>Ao65lTclz!iUOveo}v+s93Hk_nJ zk}7eCrj6!Udi3jfDs>D4?)jYUMs9iKRJzYihdkbj6RqxXfh zbViYD{H8ZL0@u0pSyM~YM&`Li6Z+@P`|VXrZ_E&=wpICof46mWbkw54&L6lL*Wt{xw4-xj;%ty;)^~avn$J5BRD}`d4d$-1>~Vz z2?hW*NXLm4aZeKKcz1b{FsCGuCpn!3_LYIX+iG`b>yztA&g)qJBxs){mX8^f#YY9# zC53L=c99syJ?!Lki=0!icaz9>2o1Jk=yMXyn&pjCWDeZob}YwwavQ*=gs|UewM`F| zx=wC)N53oB{7i1A{E|0F#^u|D%pLJ#Ch4IT%=inS9{LJCgPgsm+$U?NOqo(tfQ$rQ zNuuo1qx7y~#t7B-dw}qsgdn{ z1Ap2y5O1_5rP6s0J&%HRsS%ahKmd0V^&}0LP*sWtudxRR0vuP&_nk^T4cEj=Z9Z1X zu2|>AWBvU;_+ddi<_BxJ$2KokrE8fD2|w8(8f!Bx~4EO53OOC`YsaxIn zHgW2&qg)HTtDGF@I^Uk-v*>r=)jr(+Oh$TV5d`n&G~g~LNsW21MG863JgVO7NlzXt z6i!Acys07v9#sWf_B=s+G&ieQ1PS4jL}&=v1P+zIVW0nef^)pmnz04*8hUVH0{r}VRk!C0_O|-{7c(UbHRp~GLLUZMI40>a_NHH+#p6tdjj95B!aCT| zHo5=pNc%N=erYmKT1Lf>6qhl~uf1qxo`62d<3ooIEk9J7*R7D6c&=>`o~y>I(Jjs8 z2ts}6SgRp#6Wc*ei{Azyls{2B-kIaGXwf7pGqF_32lPfSU+K++P}eZ1U)SuCB!SiL zB7h&sF_gRd+_-a24k(0fIc~b0V^WM0R*=n{{oJ16$U0>!PX6JCAASaC7JGUv;rC7V zfvbdV_9;&Y4gdZ4Ew(RJ%B9*u^@_JRPB$Iz|4vOyTCYi^1-h~sm&fnWM{64iEi(UP zT2xfjEEwRG^bwF^3>_fa{=|YZ8k#|Fh+LHe2E~_h%x9+Sp8l1vOJuJbM$!cB_Z(NUB3#mEn9s2MBF<(MQc2H5#gb87*8=a|g?2d^6?K}>Sf}T( zKXID(m2-9`na17OdIr-;+_ySyzjk%eAlXChHvHy*q`kdmAC~tfgR`W+%vtj8p|q5Y z#S;GtXSStI`i>;-xSV>#Mw?B;|w zDTl0w=yMQ-!jll7pWO^5HTqcQ-`}8ir&vde#Obdo! zW6n-VNkczL*?f!#+11O`Ye6zWpK>C=G$qq=jxA`Md|0&VKuff)*EjtUqBYIYZW zcR*~ymPmJ(Jsk^#vcgcHtD#laMrWxQ>T)a$YUpxy^0MOC>t)R|FbmCwt}MzL=o)2B z$4YyLIyR1Xpvy_G`)QX$S=evn3Uz3<0GDHC)-wJ3>DK%bcQ_g0tU9n;H=0E1-C(Vv zbwjk3aZO;+kiGK0aD=kj7aL2+d>d9K6sFrKU5>&J`L#jdvWjiMr1KnsnS#29QBjY| zAR+Y?svsCfsWlW*`BP$iX4*r|ngib{*U!x{8u{Y~vx^C-DU8Xk$X;>;HBKV<&-LqT7n0yR6&E`u2PJ*`UtsIj zb?ZR+ps4BVlNVC+Dt8S#bUgrt8RJg(E-G{d&z2NNVR;5SW3{ma8(fd+`5nX9M@hi) z$2ZY6q)?vX=Ve_a*h>~aISzmBia$e%R_v$4Q9mMPd zUd3hFbGM0G0yqMWq0k@6O*F<<7QmY6j7{p&J3Wd3^U)&SPr3Xo*i`BoWau!$#L7OQ zcl4KrDpEC3U8skO&!bUxh;0SCt&|&bFLi{{%eE9D0!w1)))l+puQtqL5qLA6{R9y3 zhZe3zYR7uXk9UNVW8rYXFGQ`^od4VcMT=JK@yO)T4i_z2#d+*R7kcTh z{@^$8lh)FYxfERfGE9MvNTDN4>4;1T{U^xJSxXKn#qgJEX@&Rqm%vInSTUh?T*9iF zit)A3xR4@~vMDNRYI`u!mZv{3kP;Ym#HI%f1@mK&JxQct3c^7OrULf7ST=r4kpjZyA&Dw_;`rjPeSnf7m%jEc+HJIX|&_esIdQ+#*|D?G_jM&FJ63 zoLX*iyy?kxV!t2_9;nA{*TRFBFYn;+b+HNluSOb8rW?od_pVadoPD1sMkSF0%$>r8 z5`U1D)lv0*^a^hbp=wuC=P>E6l-%JpZ$4B!qX_M`Zhyq3J=5{t29rYY(wfSEh05=4 zSns`wkatZ{JGGj`36?{NwKIK~)EauzE)0iD-zPNY8|YqqD-5LPfBLxNBSL;EjFt%4 zB+>@ugN3wb3*ID)xioJcg*(V?QZl)lWZ4!<6}t7iavdBGZxi0*v-J{ue~v2fzcmr7kS=7qF67aY8fZlIoED zy(Jq)4kAe!>omWiY6lYES(UCFy^B*jo1{S=+d@9IV;#~TYYcy3*=OZvF9PbZufrrN zp0~Rk+-kReY}hw3nt6omp~ToNClxPle>-1`d6b4Zq69kw){-p9M zJXNOpF^Q^#yyZs{jU*=_UD>&-unsX3yrR`e68sgy8Ce!wx6Xud0o1(O)R=6&Jw?g=g~EgWsmE4Tg1$IZ*g2NiVduU&8sVZANgG)M>_01` z{-0YaR`m9+Sh493n^S1oJSzrf5^QM?7N`>JPj%Q*iA()|g-g$>N z39Koy$;Nzl)>4ZipX;ljj-q;27SLg`yo?D$j_Si8(M;MY5L2sK8Lv1jL)MEpb^6D`J z%Nr<(ZUb>I-#$P=%*4tbWpxXl!0NcI_e!8m4E8Y7YBzrXLMv^0a0GF0(7b+hIFpCm zvCukNLL))%rln=9>9hQ-En~&{u)Hm;X2r@zI_shNF5+Ufm4yMIXS5S9@b-$N4Lnbe zdz9hdhC1?UUYkX`Qku%EUi0bpHb-wtU#mqj=4VIwZigO|Xa?P7DvdJNiCBvltr_#@ z=aP^3#*2#l4%x5z+g65o+#Rck*#6{sJc`A?px!pN5-CFZ!L?Z8DXT%Qi*5cHcG+7m zKVrId%8)Yaw>un0`2NL+W!|`_o(^~QL~Wi4A8JFUjkxT?zi zABg7rQ&w{|jY|6^X=$uVU5xAG6!SmBZ692QqOB1yZ#yCuxCM4E$P7EAQ zT`#9JT~vC17{Mn| z9%@3Kj%R`v@!muEd$Dpu2z|G1g^u2St|K%Y&VPkY627=)Y6HHEoqoaR=gpm4)yYoe zUmF`adgHvp5lF00k*1E$J>?&-+)dGg6}$nANWQLycf5mZ?|4-4xQjptl(9L ziPwWo#RW`H=f{7D)z3oj<1DbO^83j}#X&cr&&T)cddT^3HwxU2ky%BR&qQ& z`k&I2cF90_CZyR|PlUTJik&`4d=YX&FK2Y*vFNBK@~TY)yAuzPV!l!IXtgfKR?6(> zW0K)yOu-f{RQJ^ z@9b#=pKSKW$`cf)JziUoYFE7g5c4UhyhzhBy6JxAP^+aCO`kct-_*3z?@~6`d^kgm zonP1h*yDPeqTI(oCJZu-;0jfU_|iJR6(GKs6Y3F(?^A3ptx+uJdPh4#*@&-v_uUf!aYh#Jsyr4jM9eKs9ae(uG{lT<#Lz>*$8DzWJS>+(r~zZbicp zI`%v#vKZe;O-r$I$`TvIyT|vJ6GTrLTX_$WZDLAuVc`Ar?K@5umSsp&l0Fu_`H>9r zIz@tHaw=PbH|A4d#UGKj3Ml_k{iq))T2HikW%&>YIQ`^JL1eN% zu(Zjf#cNB9FNiXe2TautfCvAPVyAHgoAuu_U5MA(gf35#hh7A;pG;0^F}cls!5FYq zIyu0w9O*Cot}N&^?WChc$>RSCx|ym^8&W^OLtSy8vQHaIU3tyh$PbsaR&HRP?D&JO zxxDS@A)N#M=KT#wakg>HNC%uWDd%;(2kfL8D{x7T)t9xK+%eb31D$DbOL}TdbxzP) zdQcEB>{lqQ_w|<~ajm-+ocWexAQE+PV;DO#?mZ1BFP$<4dP{~l zy|#Ie)@Y%$Tj<0L31HV0San!yDaFc+J&^_}a&~e0Ejk=clS=S8v3ApLmvs+#yD&Vl z(SWjVhGt=Nw^MhTiqYNRVMExVFphQ&Z{$*1>ln^{IIFS#>6?n9`9k~EomQvJ8jKs7 zh7~%NvzrB8ZH{D` zpOezZ*6&Q#*?A{%xZFjjh2a-BBsP$PAT5iBdB9HpA7hcq`gP9LxV17dRb5If*Qh&6 zpJk8yz55%1)pnoaWabs(Q~Wwk;47vKJP)sAIG&uxoaDqK2+flmr6KD4gZYX}4z*HM zp6f$bNW?fPT)(j~7KojlpJV+6j~)Xoi?8V~)Z_@wj8uWO7r7`s>j*&hDgl=t{l)wv&4R=`qe z>*LPdW=)u=6U6m6T5#S2+T*2i2)&_czgUVqQ7=`w7ewLRnr2Tq;>~Kq4n%gHgU153 z^ycLQK5i{}vtNwY_M*ek$9ZQ0Zv)%}7cPmmc1QV6IeTuxux5DMpoIyBjWcm7?KYr? zor@UkA-vvD_kcBfzpLzv6LF`5^10EePr@mxcz7R<1oHk-^8F{Ykx`oX};N|6YS$;Vg9f?xVFje zrtWWH1x8V;Ev7@b77oU%8o=f-&4ynGr@x$Krljt zvjNfnxZXLDF@g4pIKrzRL-@cUekMR(W1;URjN4Jh%$1Ib`Y7xrs}IElVC4C+cA{^& za^cz=w#-d6*`|d;J*54%m0uhbrZf~grJbi^&?UTEXhIp;O(xfTE}N+_qMp| zvDw-CEUpi@v@ry%Cv2eyyNVWu*tEb>Q+%39XRGY&i?$}t{>o-hk$u_Oc5d((`Z_z? z?gkRDy7#m34)=@KPr#6!8v)QdX5)jXXFzVmAMo=VaXK5{Wo|)FRoxr(_k;hlCFe5L z-j_nL2m8M9W^TbGJM}(vaZ^i^dqS@*$E$B_>8DDpK;$1vtfzVw1v;Z_&Y->|ET6)s z-~CK~1q6@g3>DOyWRz84rB2CvW~lloygHY{tZYV-G9fcu6BSnIrOdlrt%lY6PM!X; z52K%BRav^9`iREdr&21hsw`bXad+7~30Knla?PrjVE7O3s3Jp$ z67pN=bL1~NB}WX=WLeI-@q~yCO3?F#74-T#1D<+kQC~KOtbu+f2$J`9lMWDa3_5+p;JrF3ec!h(t+@#3e9^L~ z14)rWRJh6mwvSv@+BptNVKfPmzwT5e!UHxlQCghoo?9>raha%evgq0jKT-A%;&ZP) zxBFBlMH#V<{;(NSUdbs*aO2<3r|*Y#`tDYzpi!VAdVWOeap>MqgheD?S!nfxk4HO& zU7_o+E2E-^)SG^G=o=#m_35q9H%1a*Qzs?1h;BHbuv-*P$b|wDhcF%D0hqBJRE$<1 zfF3bCLp}$0pqf(~24)iwYTaQ9?KxmWp4l{!CyzeRi0da7fWurr0mKYEwwb=^dboXl zhCkb32J@K>0ROO1^1AaeJmZ)gsK3;8WxD)ndGj3Yu}kPHsbS}*n^e*u>ANTZ;uPqm z#E)Ar@fak$1nmy&+EI^2RD|aGsoaeYBeXf z83}XkKoJP77@0|~#CTN0O&BjX1@^U85TxTy^o)6Rt2 za1RcwE7m8$mxB4_4y;@}jw}p|xn&sIiSfBXgP^4T%xmZEo)PY*-we~jonx(_lCx*^q?oD&gYWxs`a087)1Y&r$W5jT z-cs7ApMevgU2_)8^YK+E%qm{P&ieP83EEQFgXofEuXvQIZTCXeFC|ZPKJ_2LxNpl1 z*s&2eO%04sUw#C=#`h)P$H~ycb!S4c2x^GJMN}2 z^lcjfg=31q-x1n=PO3BA^)c^aS5w|_Vi)P2-^DI)8=||l>Lx=DcfN|3`Z>)4wD<-= zX(_KuYJ8|>{j&Zlv@p@#d_)Omc0mrPN|Ef81&VK zmie}>1S|gqEc^VU*kKtq7n3=Sao8@g7Z==&$;4|*R>iTBs`)z^_$-WV;6u*X{I1|L z@E%FAiTEt7FI44*<_s5KlB`NV`J8u7&C9dT$c+zirsE^iE*p{kQ( zzJFGalIIOd`9T4I_@al&j5x8L(hx&wt_pu;NJ?b4vP-=>2WGoXRJjCf=ik9#-q3q0 zyBOCsKLrNov-DIzXo8mRtS1`EDRA%Ee=|@ag-;E!u%+M|^K#kp{Z>K!$S|yiL zY0=@%Z?{_epNixhoxH=E6(A(CCzKV6AHH@nUfoMlR#Ok5WWA(PuKVso!c+xJ#T48{ zh~HvgQ+$R%!E5J(+LoR`)FVd(iOo*I>T#88_h};imaYEM`DHZLZNg6a_*2`Nn{s^% zL`!lFdaa6!AYHx*+p0G8y^PySv3|H2s*l$?uyY{Ewc!vN;jH?MCqdrOwy4rRKGTt_ zl~eGc5wCo{lce_&UBW?;k@^IzAL~0Is9ug+{2*)~-_DllJ(K+}bHKay%wOSmIL|M{ z*PYUdwAvqEPEHVJPXJgmA}eNUKd9v2*OrM1*kB&=2@Cei3*ZLL{fq!6J}n!JXVQBG zyzoN>yAQNGw43!^I_+Y&faP5hpLYNLzEth@1xf3u(3r#8aeUNkj&@5@!sf2!)wKeG zd9IRboe>R;B&#t^I8~2H8O*C)&#*ihh9~d>h70pxH&mS#G(?>il+S}txv?lUmnEMjH8?5|gL^WSh{rfy-0 zosA{EWYXfb8;%l17C+Ikg|`Kjj>bV2BM@WoMM-m7SIQHre#(BqH~a)oCR_S$ma-DI z6U#b@bjv!~>J`~v<1A-G#)z*qRiyW-n;xHRJ6?75w1Q% zckI~FL=d{!Uhpo2C0w2@D+POz{gVlST?KCZx^Tq?exRW(`T7d!R_U9&dhdApIM#b{ z5)?@L_`G}G$t0O4XR%oBRhjOGyVcF|g1X7(UH;{QTYU0N z2(3Jm*Jt}wi)D%W+WRo$^j>dPX41uep)2%%i26aGpY(r=KjO-JnY zIohNTVh@@y&_H+P`1xq!Xji>)#1E7zHv5Ytl`yoKza0~!e+*8AU*JPVXp((a=x1BB zPjT3i7~}hI2oPnx=S9N_Pj6S3K3UER&SE27x*fc}W-N3(a4^-5)4rT}JVJtK|>h8rxPWg^b z#g7_WPIRK=cltwH4!)=-U*RFxdp2@u;W8uOFyY?>E2_8`AHEC|0HZ65R={tiqcTZ5 z<%M~tDOf#WP2%jy7v+9u(xg#}W>_dK*%RuRnNZLthe;xo5Fa0(PL`X3+oYRG8rS6{ zzOGwxo6He0;%=S3_E?SeCIVLUCNaBn0K2-rtnD@TBxBZ3*~0aDoua9}Vq?V#iSOv| zzcBm+1>lTFW-uKvHf*YDo1r{Yqjc=Vp83t-BPiTMB{*d7)mLdXs<#8Po%~;8`R=-e zblPb_j^Ba7hKTpaVD%@`ah9hl?N*G#~TX3jCWA4t2&CW49#h$#Ro?neuuJebnO~+0S333jP;GaP zMCv}*W4uiPeVnR_3zfWpL*#KGR1Zf=Yi=~Udicf{ztb9=B$WH+#*JP~87NWtH;C## zQqTE%bcZbhxx4Wr$~7pJuacphF2iiVMC>Fo(Q@b1r4_srlI|ScvIW$7bmI6V)01`W zkF(|jlY1C(c5Fl%6Viuamji<%Z1oo=*mYWrwJyOodsjnkN2l1UGThO5{R~6b_||c{ zOw&q%o0xz}%Aw9{7Qni>l_D05T^~?c7n~qgF;TGl)7aJJ=%hu(-5D9?VaJO|H5QPh z#?S)i3BF>opYi|G90<}6undx@yHB*k@3zJ8CFde>Z5`Ou9$f zbVw8vR$zSa4PUso{6Pet;jtI=^{(4CY&Zrpn8Z&CXh>%4@z5*PIq*G_dMl|M^1hV%vnlbufWJZBRjXEA ziyz#;ry8=@tFY<8pJ7lRA~@y2V7|Yy$oFgRlGrtC4wG2819@odIxYu5+CwqBo*E2N zZUT+a4x+5n0#-~FUvc76V|WkK65~A-S8w|YOMx97U6ygdyB7J+Ci>rk!jfrhGO6vK zNejcMQL>SnkpR(x@(`nMlKnqEluWS*Q@~yQt|+kPfg>R;E*xd`QMv8f9=-!*t{z`Y z&J{3+jAXzbQY{@f(M8AZo$D+b0blJVB>xoC>BQ8=+w#a1Q-yVW zyLpTL%jgQ>oyCl9GvZfja$v*=^*d%J_}_l5H~7$yH>EdGZ^b>xZ)bxIl;4G4BJ*LI z1S>U$wjPI})-VPogz`h7{5&;GR@FjBp=>==PB1Xo*3b|=UQ!Bm1Zae}6e@HGc6==( zg-{zv;TSno@1eeU4wW4|WNHG-{n zr&Q)#BCvyy{U{wDUMtpl>ge0XVEk)iNrt|>0PG?MHRIhq_1ueJ99gw$Q43i53V2io>R4%R|noE^5XjK zaE*}IxNRTivb9Z$E(i@Q+I}tB;;c5*+xH6{DnOsQPM0wC#cRI7gZKf4$1{;+V&oeOWW0 zU)e&gg)g`ko|?MZncaEbSpH-5y&uQEBp5wo;c&lg>RjlFCrh3(L%#+ljvBk^sRoWw zl;+SL^<+m}9(;O=PmQ(1DbJhf60hy>HG5Q90Dtt5mN*L~Y55MXdpKl7j8lK|}4rI!RkK_kNl)u={IIho#p613K8w0ihh<;#F}t zxwV%Qg4Lasa-Wf{o_6b=!Jo^lblI6yeP~~bpE)fR>%vJMFtycx1?h1x;&p}NGO%_f z;yEdp3${8YXXO=`dH@l5G2aI^!pJxzH7gwqR-w|!a<2y{ZIBdufkq~8`{ug^P=qux zG#H@Nk5QrCduf=#)efcu7LMv}BqS~g$OUY53$WB)h#nMkqR&nEyG3sk=_$*5A7VpQ z9uab=?S~fuBld7f&J{F~kk$h=5vsBSuy5_V0iWTOKOkr50Lt@Ad8`7k4^n8pJlF3s z(5#*Jaw;I1F)`4_C&YD*Z5;DcruuV(GdcQFeF#U%@^8E8%>_F(IXX_9I5A{m-&}cf z*urPje<=rw|3qA0!80KV&0ytj8V)NefneKaTg=d$X zW@svXI9)_?EF#p&$4#5|@kXp(Qn4JXcQgcSv?M-Vw+ zUW=%G)^f%BseINV>ie7RQep*8sO`!SPng=LXFIjeJloY6Y=5S_2h{btyuVJBS5Jq$ zT+P|DL&OCR^wz!nKZFy);dtXoj*Mt~3gi^S^BmY6U49p)G#nMNPm^3Y=F9qi(U?Rv zu&XY*+9nMr!hFk)x?f>r5cWDs{G>}0IF%Y}3%SY?OvTtn<4dAxSu8+s3hGxebdVYT zmmTU-ymOqMR&DPKVoHHG?nBd}B-1A-_DYSJ2NENzIV>Yd`d%N9Mv`M9=Kt8plNV#0 zc?0)I^Q$L#sEMX;z-6PyG|e2g-Js!LYyc?0 z%&{#87HZd^e6i~c`{Vk;oF3gz*Di<85 zb@9EsfW2y)(R18E0^z`jvOfEHjGj&D!s}+~X`RiFZs+^-+fut4W~WZ8PM8>w%HWvOz+NG@ME2-VxK8lUI&{{Q1f;oXiB(o9XX zCfiBRK!4EG>!BvWL=Mx3a4qvdjlnE2r5&8bpu)z$=?Mz#^9=fwO4H(dQ`34Rx8 z47S(xo+#PnELKhBBz3-^|7&dEN!6G}wZ44=`}TdW%v)x%jcbwp(b3TlAzw5t<3Z{Y z4$MgpwxD^Y!FNS@vKeRc6fprI>YEJ`=R32i|AmRmFv&QGje@0v%<0>#&`kp-ks2bv zf>hxD!l%k5`Y)x$(>?s%w0N)!P-0ItkjHD##5mWyi4z^4mt1rj;N$Ga+mrT)Sf!tE z;$NRuxGd>r?{h8VuL^K73U*+*>s-tD0`hthc49AJV@T~dY@I6n9F?x&vwBZ5U}uE! zV1>dT{OH8iRpPB2OP{0=x zlarHE@VB{4J^R`cZW*>}9H8u6vQ?i^LJkxheA^XPN)S@E=#ravwIBD8t`cl#dSv`k z=-glK#D?MCx4%N@N3u7c2$sCMv)!be=%tiI=Zu@NWH6}b`BT>WG?u)D(92OI^+nMm zLhZ=;_VZyAZ`nw*Hw;G7(AjAQQ4Rg%lVxOwvd4dqV^N*urAy{!ix!C72S^V=WU~%xCRzZmD6Bn>gmCR!fQv)8ZR`EyqgH-Nu64lk&^*vr+qN+7NU`TLANP zmmS!7l6#k))3kivaazj$``MaynSZ)VXHNH{7C=S6Fl>J9T zJnS}BY}^FK%hN($qhC$hl>*EAgK;o-+dss>uc|lV=rePH!%+Pnu0Q}eVB;$Cn86K$ zUG_qTNg>ocJYGIjj!>I=i+j?K*q#2|IPaD=xXV90fzi)Vvb> zt7n0z< zSg)mf5-*E6>3hr3!&#A>F9XvRr@>s@b)wxO5PL1zl?#1?y+!N@j3(B=rBTHl&N23* zFmt!YMpXH>e$)|fxff>VR&D6B4&QZFVxEim78VWe!BH?g;|L$#JGD3?WrB|bpn~$< zg11WQiBjEX!vCBDy)VKC;{I@nVy&sPXA}yN<*zhY_I7?oqrj}2Al5K^LvYM}4S!$2 z2A5GJX4tT9hAq~Z0v~!|H9GT*_Qpa*Y;M97+ir`dRnFtaV%io)KQMO9le8T#p^|?j zYgz&$HjH;@+ReFVXgVcdog5+h2QWbb!NJelX*v}3`Q8+RcS#oX^os?qTM<6Goniij z?Bmco9X_=A4`_2GK8I`c#N2naTh4a{8Q2(2`Z0sJK8b~oyzC?Rw(%R>lD#h_x5NFV zUHMXy7C6*n7`~vmcd7orP#BOkrM@cJ<2-EF=?OdG!7iD^S5U>5OrllLH`&g88BN`L zI7R4pG7*IC;bfZ;C=b|2gvcHw-N8rjqzRrZ_9Gl`(IT-8tLqupJYYLLU>|wFnxv@X zL-&$DsUs%PxFZ#h4MtqW)Fz_KdS5R4xV zL`CO6@3dmtGABlhFq*2*yojzF9#UorclasJ9=@E08-NRS z80a%LKBr!A)R=%3x`4xtM#m(K#kTl<>^>8CHf+2pq^3Gd56Rpneot31phWUr{=v9OJHIU*%XK4 z4)M9zaa=65(QuDeo8XX=5)2CKfMCapH7C~$7_f6E!LAW3Ms3`$avP-nsgAtY{Y{mZ=+Ze1L+RVH_Bk^rZ zldc2G|D5Rsp;*mI7_0+IsbM2@wbTHM71s~3>w9WGj$=R1{OYW6Z0`}=t(8h}T{8|( zHv1(?PR1Rr*eFr|KE6L^z<>d$=75uqwNf=N(_c^j$NfUOhx|PjAB&~Q+|8pENh z5aQBct%IXVF+clW#M~xj&XSu<)5vsCrznhD7K`H7N1GtMzU$#|+%+V^ht*~1fse@~ zhULhsgs|@ui{*slQ(s{P3|;sxiBfiw1trR=5{&h~o2)+V%7rNN^e#1}-H_>w^FvK3Xr0t?j`dhfmq zE9?;3uJrl$vHE|tl2!{OH}y1#a#ooP^AhwyhI^B%@^?H0`eg1$MMXtNK}XR|zV*98 zi=0qQS1Xn!S-u|C|2x(1PeD#r0cKUwldy|ccZ5L(6{f_WG%oFSwtiE22FcpZ*?=6)vHAh z^tQC05&x4M=w7L>~`!EzV>{6WGu zunt0k1rqWHt<&T>?2NC?v58(ZJ^8bpn4V6G5%ne^`3bEP%EMsSNI3w~LCm^TQR%;d zeX5SH@O7f^rKkd&;ATeRG`5d%8VVQC0Tl$b~0(N~0N9D{|eGOOv9_g+qb*tvoi8N+i)YXPM zu?XE~u1&H%_J?KCuRtGy`#SAvWWfFTY?aORL+I+oLB&?N$n#D!=nj}nE+>&2^6FCV zQ9s7IYRSxW*-=tjg^j_hbEvRw>Ir>lTcR|T)K$gUttyYm(|Xu)x7BtY*9j|Qdy0X) zl`75MOr)*!&tU5mSil%6$sL%ifq(u1jwX>{yYZU*Inh=eE2*}2$KQg*R@lzcY4}LSk1Ka=qd40XBurD^kzbOi@S%BE(cVApJD zYtEKpu3+lTSK1a0mc0w^$b(%{6CDk7Nu$!SV8FU|mD>iof+OL?2I>6;x?I8jzLAkK z%V1X^`1aTTx|3&Jf(>`Uk(R_Je2tibUA9Q1JYo``!N#5YM$Q&Jp|0*6qd6dku6io{ zgN`ScOP}Gy_+{9YayK=i7 zFg{4<4aveEFt00I27nCgVp_?u0wJ2LN~bHs+%9Ea!n`NtZ%5}#?N{`y4NTIU=Mdkma<8R-KR8?5(89P|ua0r_ci*;QuCu4;2Y5E=^NF?d3xwJ}oRy-Tn6*w@ zJP>exlZhrtu5|agB;`gvBvH&eSPkOZXyr0IrxPs(`NN8d;x>!5qt=g1HPY%t`^UYoJG@|A9?3 zv^f?#NYiGTO#V;cES6w9zl*HX65Ru8{i7j2gYuc0a4i=Bn~}_(-E;QrB&dT5@9rD! z4MN~Iy4;zyq7Lc>8Nc7wA+;HQZZda+1Bpp9XIlB_)OcbgMdrC^r_QR0&xsurIXa!D z;}3ecRFSK;`z(a***~2I(3x{k=U+`5tY-LZ-QdAB(P)gr%b_n5U~5Jeq)Pp6;51sY zR=SF@&rCvD!~{xBi5vS^)^K-Atj%xd1Hv1x{i! z|G}rH_>@=&59x$WR#kRB$JH3!yjErRz6b0bz}~a(mZPZ8S2>BzjPQU_yTP_9M?H6& zkTBI|G<1X6mpOHtX-3FS)j)#pP1hH;=2J(N{``^aNKxr+zkUwtrnt2fyNn-x*S&)j z`UYdGQYnu#Vvpho=yg;t0e)W17yDMRgft!Sh z*RMIHx}?|xasV}H`jQN8i}C#{7~hnAaRI}B&b^3-NDRLusWrVShZ9+*ZJ`a3?=gN$ zVmFRl_AYdiz>+*?XbUqO50J~w$r_-V>k`Q#cRM?csN@wKx>RZs4iBk+WC@q2+ij*HB?1?C>bII>WML%}23suslN--mV^BScGG1Gpa0E z_^-Go247>9P}xTx;8Or~YB=QLqw_*j%{Luq#mC2Irb6?f6zdOYKcn#gJLgOjAynj> zu;_2T`Nl7g>f0~)ddk=_=lEH9?Cmf2@W|iB$MdqfEKSrKL_@DkKUS5ckGjHGmZOir z%4J2U@Ia0A6xJoME-vB~EX&ak)LSdJ$WkAtJ6yd89Bsj~xF{H=$OGlK3Y8#4^&LYc za2(Tx$2bJCgnFNGR5U3|@#O%+R;kL?7$3tk&dPyWSE1j^wOdk{7ydB=r_|03uUoGLcO3+==BPF3nY#j&((Cv+6m(qndDvoPMGm%82sLg!ljKt?JTTa|`~^kfqOL(la&e(U&eJ@fip#fg=Sc-X(C zDFgju`&c1MugBT#S)QQ_-&UV&@(I>=O<=Tbav%OnxH}6A$i&JHgKu$k9ZQiXD&AAq zcVER=KEwwu{9^V=9ths|zmf|G3JQTCUzaN+C@6rxg8*G_{t4nh*vFBE5ciea2~)Sz zN6i94bS>7>kOUz&PAUO9VOYlaScoCOOhH09GC^gTH?C#PIX$)G(6UdKqNkJd^Same<$DEb;jAuHg1KUtN?vPUAuIt;JCLL zFlc=QhPyQFir8gW?Y4%K`=GDr$hH>DJuqk*45a=7&PKq>9vD)s$oQ>x3nnE%7mFU= zbKzS|bxJ>Q-TH07F;nrSn^#Y<8ZqB-C&$x`>+LA2&D4_Hm~8VzP1|fTaD^zWse&-~ zV+{krS^#^$eXPYc;xO2!-{fhQu%Y;Q8xwc2@1kYSGj&I5ce!fITFrvs7zxbWEIRm* zJ;lDCcFj6?z<(|NhV76ozE#sg7y0}9PaCvuuNK8ZaLUA1Sawc-0!@pJ;NsTPG-AZf z6(b<%l~*&BPtetC{MD<6FH0+}USE*RlxT7+r{s3G5a{5nPY5&SYHGcna;Se!G=z`_ zro_I!LcRnhi(HaaB=dh+s=$DIWIz8*xos=GKzq`c*`6$_e4{j2Uqr~m#APFeBGNk! zXk&PApXvVko_ydrMzc@cEG7xO;_xln>JgPQyU zl67%)DoKa6;J2y^!_cqpqS;9{hoAqN&oa)%znlq-gc_l{UcujrzrQQg6)Bk>32I;j zlURc#&x0>aiJi?mvbbP1)YT=OFG@{)VXmp=LLfq2p^`M{O8$!5qM&?cr{UYWWB=gL z;K%@}_=wbwV;6>7v~qy?tny6kLbF*?H* zrVE?OU2QE8fsxCa_8aKp5~_oGp*2_-fFal64$x- zBCMI!Li1PRU9j_PE)#`wxHg)!c=d$UNj%V4)PKf% z$br1=KeZn55q7j-@Lpr;KmqNmY#wp_K=fX6VjxB~~$Wuo7!e#4=E+`cDNu zTes15WOh5fyl2yxcS&N>vF!r~wi>wZI{#>U1x1t7Esgqk+4c8dVXc~y+izO6)so?C z6SGcglvx+17NgT_uVpVMa-W&eq^;?++)dVO&R( zxuziaranwyvZ&OJ^eQH^BgCYPYbWNM?PENadjs>}uZ`y#t&K=>b<5E!S>IVS5F5#K zhTZeP?8yV+SbUltO|BgL@MWr+|2_D#Jc3Vk*j z@=4CkKHC{VPVIycLgF3oCMsV?f0csBe%{RH3Otrh4AK?8 zCen#PIyQ$KwVm)(51jQ5FR{7%>N?6Nnb|5c-)QFTvYqMFL_(Msg9EEZk`Ps&={Dlx zUlZHX`ye?e{epuEY+j&BB>I*d%4d7wsXz}W_?8a&kXQb9a{Uv_DieO@ks4c(p!y*Y zI)6^-5}lv#0TY`JjOuxzz-J(IUTs$~O^sC}hgdHhU5$ukt_@cswQNS9JYl^&*uC!o zd(i_{&DB>(fz5hKi%0B|-X^mh{UfPC%1!9dwhV2ED$RSegDn);$H|YHE1*)BwTlV} zb$Yv^OY5S9N7P%t&HahDK`P6)6Ty z((~QWK<-YX-0O2(cplVOYH~RgsV`W|yA?0W3Dz}PyS|w^R>*yX_6Jb~Xaq(mdQU$W z*o_qpy<-CO8maAuzXn!ps5XYj9<+n`A$Q?e?xI7r!(3ftY?}69NzIx|@U_jMRt}lQ zW9b1T`gnkrI?NQB*9xbM=DViHY)Z{*@h`skV$2urj5USNt{!tBCo0^1<;EY*We;?y zy?ElcOXT!{H6J+;guK7k?zI#8P;9loJnUxW0n2qpZC5TsjTJtp#sY~Nd+kWt$<9Kp z&c2CCovtk`YO?}We8~@1Ge&@b?Uk-7We|Fm{NXfkOI{^hLBQ$lAj3JHGF6x9ZJTkL z1lvU?`uVKJI@M8elOWGWy)G2-Cb*Mn}g}6zk8Q-klE>Vm!OTZ_$G7$ zgYtJjk(i-RKL=@_#PTw%>8Bt)AsZY7c@KoDWKm;zXqj1E4uEv&T_uFV*DA4c$wQUc zD}?#B30j{?M_LV~xum6_ZL>>V&Z5&qU%RcoJyYjjac%w^%pet0+M-LB1$XY;Nrbvc z1dok529p|SuQ~iVx0%B}bcHCWu~DGjA&@wQrhl! z-!XOjJ`xf%Qv2S-V3Q4vJK}+zk^#dq`lJ<8xp|WHqx7E(lU9b90KIP0GVes*xikMx zWG1BLN--9rQ!>oF*2Im|iVw7~%#T?sO8bm(+s$@BqUw{$ckZ(cMv9g;ao*i`2U1|m zX$bd%iwJ1ln;_OPoXtHI2-S$ACj0m8I|T~yTmd`tb1)g%8+?^H1e9Ly7aUXUFuWNG ztTXt0!1=W71L6S_(qe!Cf5by#cNMl&8A88@L$bF21p0zTuVi#h@&%eN={MdmdFE>5 z%PcDC^Yz!}%LANWz#2VY=++E1CZuF%(_C)m7qni&oW3ae})RW8F%LkIHA zKg|6drrE3~U;lHnKa*vBSnN7u1ddJY=)V2yD+)JWrT6CS><@eQ7W((h z5YDWDEi_z0cahhmjzfPpJ`tKYMbh5G2F{-2KP)iNte1BuW_?yc?A-W`J}y|51DY7>CA&zlr%f2GMQT{vLcP zvF<*wkIzioiB0*y!jI&uILMYTRHG}9Z?Wt!2m^M2{GQ109NA{+R_2Z6pnn!4KC^7< zaGbNd-^A&}1y#V>auoz;PZQ-2g%-dNpt|uz4)G3DzN@riFvYH=fS7A50e!c z5U^lK8J|Zx&+)y>#=+8Xf690Bq^7N7by?c$d&eXe8}?V8I$-NOeN?SAcOu60d`UI{ z)8$-t7}2n7bf!;ca^vcQUKmQ8`$w0_N@`BC5vIo06tnYmvQbvIBFSPS@FguY2UV}M zQ=cHqTaF{!dKW_lc9V6Y8BCst!X*8VvxJ|(>b5UCgHHX-c!_ssa_wUuN0RH(5tcfS zaN7x3x(c=QFOQodG>4=*4GZ19{5&}CL`Xw34(s}JvYss!NOo;Y<|dkC?4(qMJ(8Vq zb|&bz+?QN(Ov-pQJCd4p&3@dGUb)cP^*iugGA^~}#5&VECS%6Pt4TM6nv|i~m&EN} zEB)L$9X)B1JdNgc`g9rHW1gh$NgBg;&^)i7z?hW@t6pfxV%`_8TR86H)l(WZXxLp3 z(B)@^0yv)QcDDc^3gB3l<>;3q?kn2EpjIkoB&W-?*HzCHZtlX2wW1H>qOTY2)YpS*22m`b{U|K!+vD z108P=e8S`XbVBl{*nJ!z5re2mk9d6ZIT`kL;5D2&S?o#jd+GCe^M2BB_Bm(ITeZ1M zH{io@AzZ^==K9|%`#njW@>|Nu3aFAXcqX--O#GyBDqNA|?h9|>`26R;M++?orIRyh zIm(8vu8#~Bj##V30zmi7c6Tk!aAGUAxRs%&REx1lg_V8)az zpF>WpYWCUj0|rdo7)5p-$*wA-a|kRpNY6~&`nq?RUUGBr^UWJ0+Cfy4D91VBc)8`A z4a>YMT^nL(yi49^RXN%dR^%_fA6N39rqK6Hm-)QU~SQg)^J*ki`v#Z8t4OAYg-o zZv>Ia)_#Py=SVoxmBJ~!01tM^guc;?o zKgM{lAhOtSyv(8n0=jBn7epqTYcC#@-(-YqaXecE37Y=^ww0@`Iu&i*wR)*WV)CvM zQlL(U4k?;Gvq6CCt^D(z-m~-2C}tVB-UCg$8G1Z4D8;>?fx)`L>P7v5xTKvGM#b}; z)-opPs+TnPvIWa&mW4rlW~B3T7-Vpi^KYhTLkq)-Y)v~> zR4_wm6fBTkbq;F>^`;3ASD2DPd+c_$;KgpP<77=6Ba|&t#V1&}=9rYItqV!0@DhQv8R=`<%7=H-WMB(4?C_z>C&_fE() z>H3F4QwTXQO^@{1pZ{$Ryn-j!ujy_i6sXU8n+#uu#}OwX?A*CotI2_rVaUlm2b|!` z+}E|@!AoFi{@cW1)Je$!^zRa|clM=F1l5Fd;1w0~0+--K_ZqsEKbj(44=TRPkRd%vD65_~EUITkeI2pHZch|E@SD*O zLzPdQkC@)i7gbz+-1t0HBSCH-2u-g-%f%uK9;J@fWjWeiX>EZzkvEFO)HX!*$Y(r; z&XEo7Td$ufVqcSc-|Ol*ra6{lynxA#-ZbWN;a7hUe4_pj3EA7cLhY+0Q%DPFzV`qM z^R&!I?#~EsTYc;9q=f4ozLk9jc+F?rf6RfLUS1zf{BXYOe0ztg_h&{^6=Si=Uf{z^ z29*9F8~0`ny}!QzNK!^r)TGHM94}c8M3yNI`A?0iheM%WUYdM{kZQpQQ1Pk0pWZrO4KP6lzdaR%(z z0pntYI>yRCw|jV~qMZY42G{_i?Q184qy7Vy?ks!^^O-n(59bIKdETA5)uQla9`ZSk zi|dk-^I_j`9{UpOn3q3ns(H1t1FKl5(3e}`6`Eg(hme1|o|!mf{&NBX>}%u4C*nB= zR2kwl_!ml=E{tCoe`sM{XVOb;hHeWwYv^GG2RK^8@lzX>?6h8s6Ed4_uknN4d>A3A z*1q~+5%twRncX(b^gfwfgI47Qywnu1*BM&+fdhD{wEdU6(RNLXe~DFR=u&VGw?AbB z4Ec#Rc2H#IEZXxghI*-wE2AoF*n@&hmBPDIX*;FxZO!>y&(x;sYBleRH7Qj7T1=s4&1O%vc3oPm>J~$s}2dm4{V0VS(S$Zp0AFB@MCMoY7u+6L=mIh22-~R$T#m2$XD?Fr= z)qASwz>y22<}WGKL%ls9ZuNL6Q>18juF z!IF*CcPtKZ*ergl$w+HK0_Y2Axx=gyp*wmWv0Z}C2#ceuE?Dfmy;)|pZGh>$Wp3>* znzr9f(j3xWwY&fUn`Is>h*0xDTGh06^fWYDgLag$b_Etk=wmmQsn0U-WPAf0iz86} z)d@P5e6Tb30~yx!M%=W2D9hn90v-lp)}E`(dz;UYI85 za_z$c+i;k>@sNMJuz~w#Y_{9;Z^XN~)@ncozWt&RTPK{+giFavywI)d^%LH}K_6sh zny<&3_&VRtSz(^1p6m15vHdtRw8A~Vs3MGq&*CAplF)&P_eS1zkq1IC0e006xg2;cdt@^Es|(R%V;`RBEL&C#^f1nyNZV}{qE$K!`xOjfx1oaIhmWzpQT z@H&=f>DKs>`!`~x20dQr>|ix|rLVpU=4SXI^27}W2IS^qjwWp*_VgU$$?sO1f(1A zZRNce-+-gUwy5psd$QPO1gdFbMk_&NvAIIX+ZMwUMQ7oYd3lk^eRz>b)AC%M@n>K& zK*>GiqDQ~RpYA5h&oY>t=wh_f%?O@d{~I~blJ7o?D@Cl>3xl z&Om3pLvR9=_|mWf&ZLzBAp8k)bvjn9N;p1Wkrgm>7$K_JM(?NLJEa&^mK==vg{v&~ z8@K$FMbL}Htex|~ZD z`vUyC5(_kTVwIYHf`g=TD*ObeDMyv6Vq95enCmPauENkn%r-`NwFas|T2TAH#$Fd{ zbZkmH{)5t4F?Iu+v?q)1i{aFZGG!dqR=CS|u(r1-3KQqL>GyveYj44P{4m+9%X_Ks z`yjMR)7-UsCd0a9-2<)x)+B?eU9w%C7$layjEcs+m!&TCL+T0k4Bz1_rN+hzRirz zYG+zP2+_17@A+Bo4PsJ?k)MZxBvq!8&rjb!eR>;ZpQGUG8SBo0Ty^TawTM=JT)R4n znF5175dK)T>XXjyP9s|*B6U-*dJW~@mPKo9J(hZIBJ@;Aemkl&3oAdwXx3$Q!(vu2 zLi2wf%SL0-cY_Pg%+Rp3othFn0)ILW|79sNL`p*D5wGeGrPy8k2tII^q@T{g`-Xs* ztx_zP{>l7AiWyOR!d7Kk!_7=Ofh>`)=xu2_VFgN5jb*CCfl9(${Xck5Ha8WoDsOZD zN-EEcFs`g(Z=#N-xhL_kQiBF;x>IUM@*UNFS7B%uQy7X$zhcby^e_tkDcUH8<;k;5 z!OSBF3QDU$7a@;WFC3fCVc-_@(lCr2%7Z7YXq<=2+gJFmpWG#UQ(gEy6$YQ8oqr1p z^I%sxOzl${*%J-;c9{)xPF)y^QAaoiJDt#fcbv`54fZ_M4Wb>KpNX@NcA5!)*NYhR zrV|`m0d1hOTt%=8jqNCEMC}7bFpyf3nbgjKA>EQ%XNzW(*Db-$UjkM*O096V^A@Qx z9IOEU9Ct{eKqGgYcj()N+7KM+aOuC^oue~EXtr(vR!7Bq^Vf5erm%Ab8Z8t2-SMm! zZ9vEU8;J4f){ytkw7LB@nyJVMCf+B491!gamR1ZdlNnlDbWo^EmD^RQet+ zCgwruUI}i$IHH!X??}J%c#h+XoTo4J=Mj7g<5p~B&**{+V4&ba z=NyupC>)B@uccyaKVr7hUYzh2>X#}VxVeLA<>lk_)aPt{le%NnB|g+nm=gPX$Ne}R zzirFhR9DUYI0b2r*Sb62VQ3X}^wXm5=3>x-LK7A&Hknxd=rdx3XH5((lwg|;^*nnW z*bg|}Op62SqGi3NgKy&x#Q5MyqOWw>#H@EEm{A!#ciRCWm>u{rNPp30II&WxIQ5Gc zgEF}jB}_FaWN-pL-^S$GYmN^A{GkLZdIIUr@Zk55-dBzebiS~>?)okuKhKvA-gJF{ z;~F_i9zBM3Q2H#C#)Y~)#Mv|R%Q2X#`GXumLD_hkqC2GGd5pdCE}xCcEqDBe01fES z4QpxXI7IMFCvBh1o|PKi;R-$?U=!f3@rrsN9U@{iZ{SB!K{??AxIYOCO(>Y6Yt&x$ zvc;L-5^z?=8k@{3B7h z!(ob0Y{%w=@N$f$A52+>`Nw-k?U~RZFM2mV{2d!KepusK0_l(VSZNE?w-~r;))~-C zNjS*Hjwa%?VHS%%z=;+^?eeZMdZgb}Ux-22Op`200A9{|JYFVuE#c<7*~OuiYNuw7sJnmTTCsVW(J}^&yL) z#7Ry; zShf273nQC#aFMFE=R?5tii*_&C4gW1#^njdUdVPFoF>Qvz zH_1Sg7O#8Be)-o5p|`S9Yl-S^-Yc3oTg3*JuOE3_Lt*wZF*mGnD3rZOi12Z+bb1i& zBa0D;^F-N6_72h72-+r_Z!5WK(&BYANfy6Frb?b)h`X9;O6+TQLYmtgPi-QE7cg8Z zdCYJ;x&O!hyx~)%u zJ(A{wu3Wh1X>#{%nH`n+%!OmG<)PkJ=?X0Gs04ynOUgiSG?l)Aa)+qnk#LgzQ%MC{ zYQzrp6mwM2m2Nik9rmvibK0Tf36%4*W~l0R5-NdE)w5N5KO}Rc zzr*#*Fmg02kIbwWY#$M$_~l>A+}G4cX7mKf#>!4rci-Q3yjyvv{|#&aj;gGRuo1?u z{vE8d2fOW00QRPbd+?NJ&)vfA#=j(2zfw->k|;k7B3DpQKtO=xP6I;d3EvQ)4JzV6 z1_FP962K6Og#-l!xkBK=J2vb<78HP70;b!!Lc|uY?!dsnFW3YHg+QzUx}5$A0I?7l zFeHS>1pl0Ih;2t5Bi2$EFn|6t763OJ;$lp6lG+8i6Af23=xNb!KSa-T7BkWk5=5QS zAA}15x+V3j`{ppnF9VQbZV-N`0Ktl~0YL!}mkg08KM|t5)ux2GTx8?SLeATP)yPIT z|8X@Db!mhB{QN$ic_Hu4}503V>Ii4zyGsVuQoNtb=gNnZV z_KGvfb~nA-Dlf*_N3K9(m%hmR0WQbj<&g=G0gLM=Z&&zzeEd4JLI*1<`z0EF6_3N! z6}w64=`9_Rnu7PQCAT$c$2H(WqN*~9P-nb^H>g>};-43Kv>GNfwyeEaqlaJa4xbv6K$_&QTNkc_5K z&czO_Y6MB55b6hzV22Kq^o9skya<(La;>7SX8oB5JEpC_OmBmbjh56P3M|saQViv9 zdj|Zao{4kXQS0}+cW;frx#-i1;=hEY^s-{$35buJEzZkKt}eYrMMK>y1-5zPrYo9O zaQ%{ygADtWlWj-BGSjozb!Mcv%(U&D$M!PCgh=yqq30JYi?lHf$Fjdeh2s=Ujfl7t zt82wJVzRjGi2Wl*&^Bl_x{i@s5^8Hzy9ND@iityX!72VNudQrT@-(g&8`La=z2Xsc(yDOP0CK6@z^TGr&*>mv1S*S$-z8%#HzZAjPP zs<4=)wqy?UQMY}OO@5n-&Zy?xBYS0eV8jZGkSjYM~TgETWEd0Di(L9FN5 z;nOo_j>ULwO&4l!H>@qcTR9FUZ9@|4>xs!VE&FvdRqkuvBP4bl(Ec;YVF5zOYdOKG zsb{j|{xI{0QSs^)3_os27e@5dk-o!*i9PKlMnx^6Py2Ilwvw=-v>z14cnx5OX;FBc z&8>d0wN}_2T0CBU(CwY*$9^{W@-3V^tn3)v4<>Wmc^QVQ7FZaZY;d+Yye1o`f~a{( zZYXOQ#+#_()Rzr)W+=;R4?eE14w%}-m~gVxE||w+TwOPqN__O|M>aN&TyXcXPW95U z)h?Ie9H9*Sqe<%5Vt?9pgvUx8z!}|5WgaW_ImX9K2ra~M*4egYKe>V*571Ms<9=}D z*g6<%gRtWwY)JNzWd%eJ80Xgmd~*`FLJqN^^EB9r8A5X8&;V9$(7rI#Hgu@J6L=>1 z4>=GJ0-YBM9ixLHLy9dd3um4gaSVVDf$_m(<22}lSUhUO(y5k? z(<@mVPqf7RL}C`5C#?NrvG({D%W|~$s_7j64`#l?R?XLu$_?6Xhs-S~5tcH$pwa1@I?f{{JB}r2XC7l74ZNFZIH6JtMNLxldedE$AjoD>;$Pv`G15pv^s_{wFz5 zf5yxiA>tT=ZkX@g!?ZhOmBdT6Ww5>0uAOnK(B!qndAtjB9!-TJ@`F{i#nPvCB90kC zOV3|Z_6b^? zjCEMRlR)^-c7+DZ8(x94LEbfTw(~Z9gN<<<-{4>e7;5VKM*0e%f21ks>ZmKb%ry8z z?UwiIZz}5$@6_$cKh)(4H9eS-_*0+0p{~e4-bTlRUA}=XS65S)zd{mZHdHCl73z|> zqY%wUe_3`R->&){`IRZjkNOAbO`MOJtzDl9X|l5bdBuV zH5hKs)@G>L!LH!0io0Xf{>@~G>C9ZLoeNxVbo8-uV8y3k|v!c*MoW_6U68!Uj|Mif^bGMO|Bd` zbkUvB(mrrlmc5{x!Jiao^`=D4raPz|A(w=HTHR0H#tFLdYKK=U$V2Z?7?I1@`h}dj za#Ic5ZshD*6EYHNUsdZKaoPb!uI$t8x9El)R7XZY~pbwY*@m*v86s5H>gv1@!zQ`Ny?v{}=(Y+21^1;o5pzk*7Yvco;81Io^Inm(+^YlG^cD z-Z5Itjvar@eC;M?c7Qc>s?ytY-(M@<4E>=u!fCU_^@RYT9k$(evE^Z4;gK=mce~I( z@e$a?3_}%PIso~7K=7Jl?jS=#<7_T~CR_QIru~-RW%AB+i=J=t^8%983ln!R6uT z-@BWA^8PRwl#2sxhR)p(A160j<{V)1mStI(wNDZo*luj9=~V)Xf96A~)gqLC{^r)90 zrtHfUdN7C0e@kl}wW?vU9PvUDNvN8G6Io1+6T4rtn13_TZw1W(2)~MV@f~bHgb(S( znz(PpT-Y}f->qHHZw?G{CGm#qF%BN3SFy@tbH%W!k*`--Lyc7oNFk0kDD ztvUhzt~(x#5~ZrGqALTF1I^dkHvTe9A6AQWSIdenvLQ4AY#_8KpBEJ`AGo|LF;*fP2!2$b!C)7Jd+Bat$Z7H02(!e-kH7Kb`0?XE<&2&& z9&^C=n@g_!ePk*P=f%_aD`Ts(tZrb;kpuKB_vxT+#!{olM~_1DqNC{c1e9kjDkASa zgp3g}D5&Y&!1-XkOoBc7{`(L(37zy4v2SU7dN@S;uDH-qFI*|OgOlq_?GtGvg|6WX za$*S8s9XIEG)aV-jim|L6^r4Ce3uDX$crrQWr*(YV9mj>SZT*x{J|PDSmJ?_4x%0qR!#n=eRxY?R%JJ!c@uXhurhkt6`|)}9woxTF z6qfRprDITUUg@s0Yq&gXxBw^8TJwjqX#E+xg32=BHtl1B``{O71!3(tlc3RBXH&Cw zD|(iN#iF*4*<&K=Ko`E-4H%5%j&uN4i!j}wKz=S^;QzzkR{&;leESX(Jh*FG+zN$K zT#7@HHb|jBp*Y2gTY(fUPAL>GT8bAfPOxGjcoGN@EQA;daod^io!R|XW@qO6zuSA? zeMN>gd*=MkIV0c7%o(!|y5)eEza@a)ElZRkM=1}RGYm`QhBcoSJ|&ql*f6LZvwSuT zEA6=3I#1mpKk}LD1&81~-#X?MPP6yMvhGcZ z-TVc-{$aWhGYShvHjt~Is z>gDMT7{PmNZFk6Db=3R?p4;Lfwr{cDgE)M4lF0Fp(3}|Zg3-+I^+O!Gr-qt`w%C3| zs{2R!+rjOm9kXP+$oV#w*gHeEcp&KeIZJxXSXm5%jbh%3cCg;5Fz;o)y}wzw6GaP)5effSI2ZMkW(={#ImIMg%b83cG0O zRv1b^P`&+DhJ|*8WxPr*NlaQSyuIWPKJv1i#@D1^QzAW_8#N%2lA8(k?Iky5HtQu3 zvELpP_7l=UruR3A(mqSPK)pC}mFH@lHY6G*Jcz?ia$XF;Jn7eRtRr#kmg&L5q|YQ+ zj(a3g9VZju{RnrKwIK!Fr^g=}F_r-AFP3A*0OR`oI=aFIrpvs8*Ve06tvb7^r_eo3 z52}ZMcRdC5;_2fvdEmf-i;3L_Z;{;{YKgF90TRYC%$Vn6ywZ$WsqC`|j%Qj72I>j( zFBBnEU=OrVp5!+qt;9gAgpCwx!Ny?(OWx#QVWzTJY>`^8=gng#pcQnUPV{FinvLIoOn`h-EPOy(ivPdDxLJ0k3b`zc{7YY6WLfuZ*-wFcaB z6>76`<;qtfmsgf%tHk@_wScGe(@#Sn(?%;FP9g&X180nGTPs^OF9-Y1{$!VV_l+Vf zW=Ww!N|-5U;R9LpE|I-^(R>mpYY~1L7B0Lkz#<%Nb%0I7jMc}HpO`TV)wFJbtK@S3 z`u+R&v2ay#F0A#Y)q=@0?)$i4+aG|OSly@*|F~pA={A$`oP$g^zm5#oN$&dp0-Nn3 zy;9-wyl|O&s~G9O(cVd!+w>T^`x5nr8X?0R@~VEteqM((&ueHo13_pIy&?1vy6=GH zrYaeu@$snzUUlncu_&PoFo1G-)bBHD3i>j60Q$fxY@xGUBBLx(mMj*Sx+^QoGGlq? z1@5zrLz*D!NDeR_BMXGkJjWU)ZjIzQ5DK%wC1E)c4S1-+Sx(xfcvwvICFD0t)JdkN z!$SiiNkASR`x3^v`=^j-kxQVmvf~(xxBkIvL0=^lexXaX#Pw2n*F|RdRb=2_!5e-4 zyo21a`-rrxh2Y3BV>VhhQZ%z%X)?6d-Tppma%@!ATXL*0k-81hFlkdCmAoare~bD@ z)wg9pk4~Tu66<@>A+++ZCWY!ed{W6^*okt_jn~8!YQ36oVt?CkmvRbqjSE<-q)$LFyUltwPVpMo`00;`z6NQxUq0= z=n2!DN!9RzfyMJ9t?w!meCMfaouyUKPVT%$m*rTwSHaSkZx{PmxS6>7ZbkYN!O_;H zpp9CuNID(h@i`c;dme2{2z@G_@`M&CGdOvj;jPrsN$%?Sn`0Ra{IfyYiE{S6>@5PL zTwwd6r4@#rUbYyqkx#eS7-qCxirxEeVsAIq;)}k-arTQ0f>L%ghCxWabL4HzFCH3~WoBSzU;202%!;iGx&@>={0(2_t1F!Q64Y5Y~|6axmEj+qm! zVUO|g>GkA-Sq%M#ac>#+X)M0w#QMR4wfVZ7dOZnyg+FfvAqKYN#yj&^!A7)N%)m59 zG8NhXOogsozWm%g&_Y+QKbZ#TBQ$ww9Co2&=Jk$?B?)(MTq{$Or9O|tAxv(paH|k3 zb?KqAE-k|NpF&Mm6l*AjeMS2vQ*u#d@7&3+4yAGVRg1O;AEF*0GLIYMt z+msOco&s?c>&9VQp`K>dej>y?6a`vIXBB)Y8>i>CBss2sdce+b5HMge@j|dE#6Ete z=2JWrS^oxXrn84nPD`ZkAa9wIL6nPs8Lw2$RbgcJs_%{VsU?3G8`Wn zIK?L%{E?mTM?vQ(1TPZk{GwNj2gcL=2rEpEi?Ldhl)suObsGdX( zQ9ZtdnsiU8Uh7rrfmAa&s};BSXmyGedv0h-^j~}&Vb0g4HfBLeyW#)Iplu%uS_L}( z@PEaDaJAi}--8bPn}Hg_U)zIQ5z-;}2v`rt+=xhp-O8Df)LXSm!MkV<-Umw!lpb*8 z`VVdvhCvox8Aal+i?)$(v^bCibV0eFPBesdVlpOaD~lnN^T9TqWn7Pu4NYhy%T@4W z*h1bSnN&`DGR%gU(P_crp6II7s>~ZjKFySlez6tf)Wt0Rf4htl0*7Fn*-w+#9fmwlR&tnx(vVspaFWqK0Moli*8x zaLOPC)UZvMoX=A;2?sMb@nD>`vF`RXd=|df9b(xtobu6`=djI_nvK@|jlPmBdD6Jt8ut*Gc*hfUZ2y+gL0sfE4UY@2(y;I zR+-0mY#TnU{%Gz&Jaz*QSJj$g5vK9}5@0vUG0@Am`W0!(`Nh}cp!xH6!vwp?8+Q-c zUgwSd=w#`qL?^Tl8m;{wx_G#-a)uZ!NW4-JL zHdwGc_UE%DPSkB8JBF^4htB+Uv2CY-&_}^I`NwMRC7T>dBHyuvfab0*l<^^yKYo

v*oL_5}OXdDiW+UL*z4p#zf_folw;fivuPN`C; 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

AY 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

@2EQR2ec*xcrdYZEIekF?wWr1S+ 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

>j??_m`=xrsA!C7amGKjn~KkrdO zqB2QpbKfiyBAJa>ZbZhj^-F;g#y0Q~@~|Xog5||O9?D!)W*e}`kg<;yv(+pz3kI9S zpjWHxhp}L+{g~20NrNqRTY-8Lc0c#8%sQLdUFyi1HjsyLsO_)hN^?aO{;2*qo<)Q& zhQr?QLiy}^2xwqbTQdvH!>i)GsUHtH=l(G1&rG2s{4V3V@J`u=6iW?hq(x}xfF6t-zC zkqy>2n{xTLU@qranTna*+A7RcX7IEuO&I%MYuINM5{^06qifohCq*>@6l zLw%+1)RYX1C<7v~wo8WCAnr^m`tj1uyTK8n#iEikm43P|)UKP!>72-ICfOm$fvxde z*{fVJ{8=drSeFo`s@*^qTQN$NF`2-&)5zRm$Kd0$z@`WI8T%knGS3_m zw%EVef~vP+y}s*v+f0D(YzQRUy1WUY$Mj5}K6B}f5;m5P+4y0R?rt^^x~z;i+9Ay4 z#Q=K%r1Mo5Ft&JK8Z~>*$<VpG)&%ex%xyO4;9RRMs~6B47`-rRlrshf2l{IUU$>1lrvp&q5{Jc=xGr` zU(?uu7wEA`;MG1z{sD_$(@KS$mm!$F+^c{$x=RuMBiPX?zy0*C!;sF0tXyt(%WYQ> z?%jHH-=1Q#7C=`nFe`qfPFt?8JI_ME(EbhE7YU)fW7F*Is*W8S2uE94YF&2UbIOl9 z$dUvm7)R4@2GanW;bgd3%}U69NX8GgxmRKv;j}as(9)p~oyYYT)5=N&c7NJtQzdkj zv5Kp&J&5q{2=NrYK;ILi8_4qgq;rQ3y|2)Zq@^VV*}@Su+)|dv@TNJdf4UD2Nuzt0 zJ68m}{y&QT`GU3n&|r6WW$gy3)% z7Va;x!E$#PI%CG`uX^OM!Sr})IiF&W%2Ddro`(W*#L8xa_5L?ta5~EydVb_|eU1%QF$o53=26<% z21BJgxi`%qcbvY{d!XNJX9luyY2>~Ggo0_B&BPhg&a;G)MfPT%iwF(1bct167-o*B zZf_P0+tn)CL$Dez)UXogINwgB>D~5SS@RCF>=34m=IW6wB{Y#OLwdd(;_XHG4g~nH zWFa;L>V$>wKXzT#ZQu&O0fpsK^*uj_`5x(aVpw8(rd)U<9F}scENAC=h-}dZG(20k z_U53MWcDTS^v+w33NeOvcdJSaIcXJYlD~>QrKkSa<2;p3I@e}{&B`V%-xHhF%H&&p=R>Qvoq&=&Y7~ivomL!xlF(KZUOrO-yKKI1RY_L zDmG#^g<(atmu!P_A<%X+iRLxmW~jnpm43hrf=*y5*7@tNzb;AhZt@G)KaGiLv2_0n zopj=f)PbDT=s}rt|E$h~RN22Iu2YYbchtz6D)~bsMAd0-oGzZ4ZmL;H61Zt%CW24| z>2C+zzFr>UdZ3-?O0tHtgji_VMCImuuv8{WIl#A4y-8x0tB|?eeZScy*=VQ@xu5TY zNZJ}nZf&K(@O(#>=e$jl4^EvLmCUy%PLmPu5JKzaXnC;D=WWa(hUj(Kysl)SKU53XM0h%sU9bxAHu!TY(B~fFkJZPRkc; z$+X|wCoxW6!aejI@uN{6tObNk4{^&u{`4=gX9On&eX0&A6x9|sbIW9ej1mZu_q7=s zpDr5$(*@(D+n5G?LDBdpu0EqKP{pG)pjdi2J?#Abfuz&6?oW@LMBQIGO`kd!C&9*g z^#v-kbF0gS1@ZvBELr_(1x;=1W?Gio4r&9cXQg?;dE|I(;ho zZn{ep=EUkQo!nX$_0Z7-gEJo=o#>i9>+9prG0T)>mNnJ%9`-EU$vVLciTPTY)3po?LBi(Cp52Ey=u&6+i< zD`9K{V_eilmJq-^2g$wq^XDHXq?UjU*AMC$AjfV~Q~v;RL2m##g%6SAG`L%`!&!k) zeYRAvFy;nR;m8BpOez*B!Td(NLRD5W&xoJ_&dnrY_DpXlR&B+~6mr(jNwWMyXt9j9 zf-a9={lO$%>~R@9J=NzwpdD%x1yYOA z6MBaX|KtRY5MLvJDt-3QlQK@|gah*ax^&oBOlF?XbDefKar)PiZ%5WqbLZCk3RYIE zwA1DG75WXQu~)`T)Wg!UyIkK^&7Z$AC> zv;=!6eF`hhfgIKv9_ApuF_AUFOI~zF7!a2S9l~WPX$YQiv5E`3l>=?XW3xctBQBWR zerY6hZ(d8p^9tt(jw|XE0)I9de&syAd=z)(AR}0KrGzcCu$p-9z9&g&;qM|?(?QawrYlKL7sxdpCkt}#!dg*!bncfD?BlzuJAlcf zPPAUL39_)v@+3YZYu`}TjX18pL8usXb)s5Xy5FpJ?5#9s2B4hYpE2osN~E$LNGR>C_LZ0%`7oryB~K44s0#;nU$*r0G_2ov7}Ivy()kLGc>t zl`wQNvnj;_B~+ah=pF6@Qzym8F-~wUky0fboDo~yc{bYLw=UDOeu4oT{v0+p&xMYyK;r-!zYnS`^r(=Lm`Dq zc^{VaZ{2$7>U*mv^Y!niWG5Ud1WN;<#AaJ&$vsc#(=xF zmUY`4Ouyhi_Uzg7Q?Fj%#iny6pSPc+=}mL=$?ld85$gRGr*ITIc*2;PU{h@03D}KB z;R@VIeL(@Cs`xbYMEegKBx&)E#%X)^(&u8MXd}zL1gEbV(zb7ks+|Q9P7{wqv64|N zQZu?B7RmM;m-J#ybe?>PID>ECFHJVM=AL!o!iCk)wxO=lgR~mDkNr-?_`bhE@cY@V zvd|wmVGetXvbWxd_qf|qg*Rz9dDe#?etia~Z7=W8$h=+Fz=CUx!>1d!m&gC{;j9BM zc*#tm7;?SdXThTLBx(b3R%eXuojWA*e#HHFc*jO?a@A6=y-r*5)nVx;Sd^Tuz~x8P zSUB4`e$fvswE074eJAx4|8W^fb}+2ookwpu^-+HhU9QxX@Qyr$iYIs`fK@8!Nm~Je zBk4l4u;D+s_gAvm3e1K{7x)z`?DAyYP148_XEkoY*_M!?>I=wTq0tToqW?aEc%ol|1griih1Ov`$RYQv5}@U~&I;fET4ZM{0j8$}Nhpn;nU)&a#iZER z5`=8LmlUeXica;NZ5KVxEdBQDgM8Q%_l5pSS&8Wm z$Ls9+n7V_H_}Tt>8uc<`Ds>5~TiIKDtabR^o?4qZo2gBYz3f$cDfCa|oU3M7Mh=!T z)3^=Ztw-CNmoUPEafsa^FHg_P`sro;VSnb^)XUBeS@q3nB=N?CT2-o48FYgD*4R|2 zU+d0(NI&}E?#;{Qh9FeDagQGsELh-fB??@BUjpsMf|F(tI+V1NE5iaQIapq5J~~dF zd~_$xF0L#(AKgh5?hPJJGhuX|UE;J)>@H*WYPq069af!E~?**eW1(V78!+ z7MV9(T?<(G$ngB9B~UQRdud4xR6)|7FSVNdvMpXq*PzMIxel<`(+j9j&reA#hafbY zkbQJ`sH8Z?fWT^BnF_o}0_er%qDf*&N?1kwU33WKk26lN3l_20iQa|vyYN8x9KDjh znKt-PSrVIv*NG|sl%vyl*r|2x)jDsxcyT%15908u?tV5UAI^ zJ(ZY``FwC}>7SCzeMc<^^8l4P0aF$WV9Lj{xeuK%e^42pvP}N>KIk{LwY>)^ zA#b0?qIe(j89?n}`P}<%AqX+7@*T2`oD*8+wW-{6GBIDQnBKzPqo{gZ)br?=h!spt z==&*rvC4;ryRAVq_I9ZxnM7YnmY&I4VN3*x-8#FImtvrbjDP z*iauB%n}qk;f5l>-cadWMV=@tJ74D;`o*^Z0; zbp9SI3?<6q`U?TM+Iew68P>`cQvC_+qpoQwvKbPEt}qNAlGNG_G#%5H2pVBYB_=Ts z=upu@0o-2)p$8F?B2`E);|AUB5gDhhoJ<$2f28uQTm zy0K%&Pv||o!&&5NCD8I`|Jymptt2DlDuEU&>TtpF9^F3QCgutpkK{nu+K#sptXQF*KwF%ls+;@F@8J_Xe%iD z_ZSN*>!h(SUq?dX;j!mj1Wqkj?VHC0OKRoY7>B`>At_cbmX^s4f{$?uX|UtoeS1GD zNyrol#z@@>{=x^QFkjQ%oUj`6s?6R@?lV;<9dzRUio^gGYdjOp6)gWV@~cVPm2oXG zN3=waQi)``NYyFTNvwMsfP--fIpGMoyd{&;T{b=^*phISxC2~5PC7y^Z~k!BqIc2E zz_UJ5*_m83+4yU|yKX~|6E8_(%U4-Af6D0MPO9$zoZO$1KrKZ-3t0AZKu(!g_ZP_q zwMD21l=KvGSdgRGG3WstlwkQ|2|XgOH71<}IW!DLFCO3Ukk2LNgn~3N&eIZ~0$m~4Wxn7}pW6Axz?n}2&aY#1ho`+*yK>eLw5 z>Kx$vQ8=~97XHy#kd@or)MX4mYN3UT^y|0hvUZ9MC)iS;6CMZnyL>8{2DdSCYfErPPr=jSy-ENH1}pN9&4(AYwfP=OtMomX7uX^zKsrudaJC4-QV=T z8Ab^?I4Tca08^Z_1uY!346j}SWx|#7cRRrlr=pnH7^nh+QDl`IOcr(y&pH)!3J))X zo)Tsds2s@L<{Q4XKI_?Xz!Na}5 zREOa}WAJd01G0`gCtfr#80|^zrkH*8HA`GFcis}T2C6NJ?eT#@dX)`c7#Vk_-q!cG z@a1T;(Ca00WqEmi34EwwiE(}rtO&cUB(^+_u{ctVdq^mEr7!8lnpu2C7|RUEq&gceLkE8zBY)$mY7 ztNhg%oM_kRF0q=w;>T~hC{`dRlqXL4yfidy3UNLEXMY2Tx(Ay#-@D}=Wq{Q}_&T(U zbm#i&7S>?DxV~Akbse_%mXqxT0PolGBtIn{HVYc`l zmH#=8P4$xjL1(l^IPJFvOJeqq+lCmmn;q!QaZRZQr<|Kr}vK}{2Ev}HlW5o!`YOqJM{1S)ym@mOESzJok=g)A8}riI>0jJ}oAR6(yrqFBXxXaC^0@@9*sI*gxWD%#ccRO?(-$(0 zO(v@YpqY|JuDaeaCJ18;@fcdQDXm!0^^>{x5qLvyuYTD@%?SM25_o+s6z42yJ${X>sh5V++qyA`<;kQPH3q}@y>LKM_C>4*4)^cz03%{sILBzZIS1J`)B3pD*x%om zspCZ$%sKguET>?7!O4;M$u#38J9t{B1NLFr%fkNbFv;i?#^)C0N9{Fyu&_gfdST`K z;b*7^p5nFiYP)Ce;xs*;lCZ~$@fhoH=5H|GuY3JqcXwAewk{;md?_bmyu)uzX;AbHoR7HU?vr7ajdo zC*}ulymQ(YVB<`k6+ogiwpD)WI6m zJFbqe%~d22->+&1oxZwP2pQ-k*#38*TwE`n1^LZO#-UBDpwm+pEUL5F6Y8WgzuyUb z{*CgJzcCGY9lo*6(Lwl9rRFe>{9t&QLezD!hwp2p;`KLSizPZjZ8}r;c1qY+F?-$q z$B!|$wSRLHTMg#hMf|X|0T!IQxTeXMasBs8U>hxOZ-AtOS2B!FfP^v3$T5PthHP>q z{Smr`-`=q>eu3PJclAk?+R$a7xSdPu9GVP_6W|$~1mBmp9N9r#f{=_bD}WFf^6en# zbjsC^)1oVxypR@0X_SLmtoG10&BN(3##>b33M*Mt4$THm{NptGZTVE6QoPy1P%tYO z`^QcT^!%YTXaN{M`)LVT&Tryv3p>_=|3XyyCNwl2YZ2!8$Kh zR>=qk0Alg<#qEiXQPateM>w zcS;~s%T*0s8q=O_xg~cnQhR7N#q^k~L>fA;J=-ca&W)j3b6I?_ z7y~tK%%?OXEH8lqLG(6Au_n9O?OP%|)+ke-B;(d{69GVv`5I|>C$F_YkacSXjJ`&R zJE1uuk;}bRySWz)kz%OvVCY9O>=u1xME41M%qEHeP};J5Jnk+98@Fs3rD*|D42ZP= zRAJO$Bvus$cWX^MTbPr~J*{`ein&oms1=Ms44VP?v9`4_eT@VR;xS(%_bUeCxel4H z-vwKl>1)N>Y*>5L&7?T5gXyajAcdT4|1|&e7jDKMt}e}W@i_W;zAeLwo&ZRWWnK?R z>=XQ*MDBBdLW|AC_r)%AyL7EkdY|E{9KvFAI8xnjNV-C6Qd7 zgpcih0APSb>r1cZLDd&T<43e@Bz14Z;JZ?Q5;v%^a`%*2&L3dSf?Q_~fUr=RH(D~h zRH=qL0ZMmR3v>-zfvUTig35aa;<+hIu18@yrcDy0U{jy5V^{CLF}Ak^da6jbye})$ za|8Rrgm$i}r`RT@ET^EL6_`q`RbRq|qa?$-AW5YPQT(r~brt8kPN{8lUbP(Ky{XY#gNIE`w za@}X1k$w2t`b8KI|5Wnj-@_&bQBX{7vEL0aS;SD`TCc8IvnGK&R+_>}#E_3Af;#EG z4{W^;Y`9PCpfbMUB+LgE%RlfIFPxy)#R_nq!9FmQ?p4a6bhS>O*kZ|2Su;)h$yw7Y zT-%Ud0_`ay1O$1#LH^Q20YaS&3(z5NkOT}eFmHeenvmD)&x8Je1q2|bna6+_z-W|* z1A#=-?;j+=s7}-Iawy0|B)MSP7|z8;gDi;@l;l2$3DF-RJ_JON2%?}r)#GrWk|_%S zG{8ZpUcmeriN?!3_79Z{2=J$ffcZ0`@nehVz90*vg~vIX3UCsHW6TKt%M!>`=$rGz zOYVHr(~ti|_|Yb?;fA}xOx=L)d2E30(NjN+;|G4wV&LI>w5`7(i!%v;={EZu&=kY& ztt0@8s#K{`@oh0GP6e`|?8^-^>+@BhU}ygMN;%(_062zTcM3 zNpbjTV=TZCc6zg|!}yTvJ~_}jNf@h?I@tctyv2L<>L8E2_|VfHoN{P>IS~%H>KmFX2Q?EI&gmzBw#TaHBw0_Fk;LKYP)#ICKo|TOo_qz!imf8cVhiEcx zqEEkK?3*F9*%GAKhEirQ&v6Kvfrj@yo*!Q`LkM+sV7)LNZzFK@EZlfA{Hw>~NEph~ z&>^?Q%=Rh;$zUEpEY1!qbS)o~gT~gfJD&g=j zsk#=|;UOGssd0O*ft)Z`(O_vrAJ7VJelt|@UtvF)oZR&jcpRc76uEhtI z116c_gpiPQe8=4)0?Arb9SoPkT&3GQc$i|v5PBJ`g#4$hGeEIYUN9iId_RoE zVgEQV{P=mBPJNYN_cL%$;J|2%Ljv63R0<`(g$B~=Z*HsvWFYo^SR7j8wt%4?efqq? z*gFp3<=k5SVWB#s?tATTw=46tVJ9UVTh&F=1G$&Q(DFAY?K?PLJ$wS_G2k!=!4VXqOf%6kg2E_uHE6DT!-pJ{GISZm~bM-qUE&4fB|&)1hOJxK)nCW zd+)(Gixksy@vwoZ-?~0`Nrw_vSR~t1{wy^Pr!KK6PT$ZS7|(YS{z?ATL6Xjou{vRu zy@bFjl9Ff2G5;#O(xRE3?#A$)3=77QhFq%9e(OQteE_$b5co{EU3dKG9ZG@zoq)j^ z(TN|m@RMRFlE5v$^xIK$IgwNCR}^D2tS39kxfXqMiO6Z#Oj zIvTTxVK&2yT;8X!i81=meeTJI*_~QMXy_`KPaL|6t9SwXqXehR3>Os?$`EbQ*ICLmDYl!#Fi5FS2k*jZXaoO@{G4+=nt&z|lrVwKKE zurkxMgqEC22$mRnkQEM1(Npa1gentPCgQ&Ms2JR%HEoni@Xupu1JpVnstPjuS}oL1 zA(vm%ZUa=R=K6g#%5gk8R_Z*xOWQfD0LG!H(hc1@Gsz7yxetsxPqjN7!}j~Y;8|l& zMJ(%|Sdy8))6zm=LKVZp@>z7|8I(pJP#ycj4Ivb2VV8uyxQ+4ogFe+!U1!K^Rd|&M zz4ahbomy@=H#e<2>m3+yc}{z`8}XLl z%N&MKqyGKF;^X6CTq97x48of}Fc_s!$^mxeS%p%-j^tNku5+oKY#@hcItdQHAM}`m z9ATID%Ri4@RDG07fn`AKk{Ho~@$Exb3LJr+>EZ_M7JTyte+Mn->F^YuL%gfyH?|y` zVYex(B%zIr$#?xF*jVEMmCa&0i_?bv^i#BShSOR67(T~0WmvOxoc`rb=;F@IBt|&h zh)*^G^xRB3=@8@PT+2<@@~tjO&vFo)VJE_a1O$Dc>%{o9h<%KckF3MXr+YlCSL0-; z8Ha~t$^2nq^u#)|-GaN&yi>OmA7)p_PZyk~r~X{H&;~0JjYIbAsrJSmP4cenr`fxF zOJapU=ylyNg^$VJ+X5Xf;A>r5JdA)oBTG)-Wpw<=Gep2jZ`~RX<6MBn z59YxZ0O*(}rHc!!**n3;JiT1lXF9@kdOSf+Q&F}6ip6Z45g9$b;w_Ko4@bNFH42?9 zsjDh=$~ioZC>C7ZjHSkJj-hLc-E_3m7ki>VFd5NnP^nr0w%?0w^C@@0bIE}%_IMmU z_0L?T!DF73VcB)jiX&27a;+d!p3%)=(73l=LJpm%87;G0ix=;N3%HY3hN!OQIuY&z zb(C|B1$+ta2FTrPVAv5k*}ru#2umw+mghj{)CjH= z%6U9JIFc1Ce$zA23h}_HN zI8T3%x(f8CGe{IJ#|AZqmifSzd!uO_~fN3NL z9KnBrw;#;AoBUBTX;wdCP3s3g*OK%ebPO1VilR%H9Q=5`5x~hXF)t(}1X||Ng?SKk zwgFm)5sBiUceC~F^ln2ZW2}J}rs1}*tGJB*=dhf)iWewY9H#6EI{S>qk{O#3&y8{@whSU8n|g=8WUo+4-0~^674E2Cd0MfMTe%tyZJ*n z`%385{AMEbI{k;HR&YKH`&Y97^jC^_;g5K4@y+WZuWh<%2%dGTWT9eJsGIL& z)OUgp>?@E#m0SMnHH<#vo-t$eG}l;KK^1% z3rW)7_OQ=BNlOf9$HVV32<${yTzd>y!sgAJ*=z{cw;hzci{m@N<&{@nS+n1KH%#5{ zx?2J!nO)z-vF}x>GIVHh7gZ0mrqgg>;zdXme!v58eQ_tGrIsjJjx~q?yHZ*NQTOk_ z?IYwD3C2j-H{lSOAOmwcVBg?85g^Txd*m4I3?XWQGF{$kaR@{fd=bM$qjCejIqOe9gg8C z9hCQ<*On3fua`g{@5L{_G}}yW?fuhfee@*lmSku%+kJ|G^Zel!qM?F;I)>9FZ*R^w z7B5~*_luY&3NlLZa#JLSznjcUd|;p8xY{Nke{GE;l&^jHDD~*=>rs#1;&qwf_wX&# zD_p<#fi3ZY6}zC$LrouY)gFiD5E5Y!N?wbVd{cF>*aiHPO3oLilKEfLtA2U^b~$OJ zHKRSyNcJpxUV<($n#qrn-{;ZZ?1U`f(y3Of8}TH%xyMNA5i6v((W?HQGbL6vvTF*JX?!(ci(?51c<_tXy zDd-Hk{134thX%(LJj%uE40LtvXYWK1DvHlI4Y4jT$8q(L2U;&$vn=8DI4q|X;5_XT z@kYT6X!4B2xSHwbuhrA=8Plr5V+aiElKz^`R^Y~YrJSJXX(Bu`{xpu6IdfJsVV1x% z%`Q<>CN-PxEXO5zgpM$?>O~IQq-i1LZ)=Z!p7cobOm~B@ZCz(HM%#)I_>N1k_cW-< zM67kXb^!Tp%$cp^WzEywEr$+ikMtPci}G9WeapnOUtqgR*g(9uORbKbM`gdFV3;wcuCoA^l%oBPP}Z*=0BDaJ01Q~e zx?ix$`W;P6uH#hNL(^vK;rcO}cFqZ*JQuXbuVl^hW^g2Iys0g4VW^L$J=n|gr(NeD zlz#_JAmshh)=F+E2<4f$61F^?Avv{LV0~%{5ngxC&XLgm&|n|v2s^z4;l{)BDRut| z79iD#*s{hNe-fMPL+)tPzQ<&(f>Lz54sZ!@$c5l&hlIH#{v|`m!fF12%x@q58J@U8^B5GSU>>m8N?y_u0|qNXQS~2QDJ{U3?U%vP67s)m~yYA zAj%<=3|^8UkmW3M!9}!gITuhsL<_Q72Y%8%7ECOT zI`HCHKbLHctEL>i&S~fbyXw%Ijruj}H3ztx(YEz#Is9|xJL{J=~g z>{0gvh2Ta!)T=|M_;?1|YX3GHklw`8_opm%!ze#HG` zh?q}J#kDjw^g+}1WO2(u2sZp+W3>DP5rF*YUinlm-2VKS@_L!w?De}A_N+-Wu2tx4 zFm3wtsQw>9S{gwbTD1bkJi!81{ek9BRpkCj%meDB!7Sr!AJSKo&mYQtG5*@Mn>5lp zd|D7H1OUy$aoGo={vHkQnJ`3YvZBe!aE=nF5d?>p-;ws=YU*3jXx}^74R1}o?*|Q+ z$pXlBV81i+r9iQ-`4R1Fe)|l}^T1EqbAm%L-dqP>=c2HI6F>zRP_8EC^M4 zs2=2l?e!&NoQ7;CyxZ2o`6}aNMe_h5I9)b|W4D3@kKzZ?ijs1G3H%d_lk>o)2uh4& zeJXAQP$OH9+}~Y!tEVH;+}I;>`=jT zxR)K`eC_cWj$#M%N>0bK(G1_eT>@obVk0UgI8@-JL$igNCK9^cCFihqXT#_)s#lDVokvIGJjMw@Fe`v8JrWEyiCmrZ zI4qrTqlTuITCc-Q38@_87={z7o2>jbFV@6#noQ(2?IXz@j!};z_|l2BC31y8JuE3t zlewvOhwF`*2;7Q0+DJRZ`8H@DaFoAH@K@s9Gip>PS$bRQn=_=v#Kf$nt#GGnW40LJ z8sG%L4_K%P&lj+WO6|c7zH#G*!=lN!+Ti#W9T$N6J|8CqW+HPy3O^DsxTmJu)s#oS zv<;bjT43w!@q72~oik_eejM{UFKC9d-@~#&FdeR*ir+99h3hIDUQHkxgaN`XFI^Uz zywLJ_%k=BlO`dto{8i^Btd8R`I4|k#CS87ufHK%vz%ADz)+`u&l!IXJ4RddigOa>A z+)5>%j8x~&9n;?_)PJRFQ^snrBOWYXY$M5SHDjjg2?=(CmgT0qI9+TQ^n{M_>m{K3 zAodZeK!5t%?5Ox999NfD3Zo>UCDB0O2ra{7V9c*qYJUoiGjs$8CgQMS&~#&tpQt+Q zNTGI+TEjWYXIe|MXedaXLdD(s_oBpFn)P&MH6(D1x$A1lwq&!EatzxtyIv7pZD|9#E5q zy5-l4$@Ee#gw~oSnyx+s`5+bRqQCD(zRH?$B z3gqNI}(7|T{!xfsGQe(g}>_O|nZxjFx8p~jnGU$M>lH=axT z*ig2w*aVJDgQv`W#l#AW?qa3?^%Dh8c_&l}ZQMw)uUOY2@4_)Yn4=_x%dCKMVB@H)^xe!zqB!d_(TPm)s9 zib`EBGJ{~TY<>i(%UTsA+gYp|zEc=M9*MZ!2gDazxIJnNJGO~sS_gYCANkP><_$5W zxi%U1VxugF^t2|}=S>EoItw;kTJWqC${-3Q@WH4r_h@th1o! zg|Ur7oFHt+T)qAq-Dj?c;fvA&W)QOO&;nE#TI!?mT|Gfl)%E7>8p zuM;NyxiYmFN-r16&BDNT?qjS3FW}k+w%k+ho9ZQ7B%gMg>KrTJsW{z5nt=d-;B2zl zwCl_{YxT-54uIfiObmWvKPbYZ)*J~ed{JxDhE}_Li?_k$@%t{p^3WlUjcN}21jhmR zo2%Pg3n(M1JO}&@!3=}DIRybrd`Blxty4HG#0VFG9q=CIbATXcVyFNJ{@}*K${FFz zFcqA`@Yvi2I1;BhC)m++;vT7VGo>i_wAU=FyqH1 zhfv*>4v@o;-}v8d?$q%ORt;vy+qzEzfGK@4EKGKppz>3ojhr%NN@oYn@b;vYE3GAO z2qo6{k%?(<@q%Yr#Y%s+W#zHOTJq#UMT-_I`mtd0@PC5+DSO@z1D6-$<<4qNQ28z^ z=_F3U+_g=+x);__vILFf1b;Eo@?f8)?clJ*I(Dd`-)Bi4YV~rsYB!^C>;d{@SKHxT zpJ5OYuIHT(t!ED^1nqUVxXE&s)4+G~QX&RBv71Nq{w< z^hQww9OufL<yBPo}|spy0$_!aSU?5?p}nV>QkgP1T32xF}m1F?Nwi z=A@rE>gMI(q#&5<5CC+%e7*#%GJ9W-a=oFJT%c-A)YyY@BT=hPfn!g1tC|de@q&4b zPgR@qfN>Kj%RLF5(zkEl@7dOBJO=EROEy10dJ>+wY$5pU`W((%F;I+HaL;L>y21(o|J*vf7XlI)ygo+M_)<yV{@Ex-1Ngn7M678 zObd66Ia|`X=~O4UC2kC+89})n|F#N!@&ycK%bgqE<{W+2@f#-aTK;z7TDZP4Pqnn| z*%V;8wwhK~ffcEJSKC=l0iqY9d`$N`XB;vr6F#fO6qL~^ZJZ`HB~0GeQhW?7MfhmC z-14fYAdSSDasrPp>`kn#G7~0T=W2Tdnn`Gb)icMw=XKcWd)ywa~)Eo76(nE^2pUp>@8mA1?=3-l7Ex z6@9Cy*v^0s#Me-x<;^Q;5}}FOj-0iwT)gyaTM;c0`xvH4(B8lzvDp)0b#%ms;wuYF z;uDHc5Y+xVUO^qNOU_Aa6nniLm1vWe%2nk+tZuYTX5+D()@nbrF(_~1P@@ZCvW&F5 zBH~*Jv$HOCDqei>lw|SkokIH#Mn?Fzw-WRb4D7nlV#@h8y+`0uSzgS97}r8?%>`(V z@P+5t{yD*q9_Wpz@?@PbK-3rOlQH06GiokzxxVRQ+ndH+_3_qf?IQ&}RD53wJa~FOB8(m(6L+M0=L4MY}rcDhILnX~-hy+7* zcig&l`_>b0e<2elVImGTy~4F%YD!IkXcCg~Fw-kslZ|2*03a;!fxUyzx_ccC1v!7m zT^vET_gmY{<^~{CE<#d?2wYDmp| zAcy<}Kd^ztGaN_9d}r z_%Hw$yFL+sjn`Q#(dYYHhZwRkROB2a*=f{rU}z)=I_)fEPv>VDu=Fc`)-#^<>Drq`rI%!0sOaS9?)hWT@ zvgCgiEY;u=W&3NOdaSdmK9$h*M1Zawr*rvxW|#&=7Knzt3Idn)>-`g>*8Gr&(cG5^DK*PaqC*yk90-h!t}e-QHjljcaMfpYJ5IMR1rAoMVrJ z3Ji^KoG`uKWU3U2r<#7@+CkELH<>C$iamQ1`|n;y5F*YXGosicSpTfJv+lyznSI8h z*dC}T?>%n^oxWmVBf3)DNwNKv;L%on_FseHj`}vM%Lju?$6W+FQ0%T6D+keiY_qz2 zfZeZD=Z%+KL?b}uLgMj>x7^dL7@FM}$dXKwLufR6bz$Zd_l={HH1GHx?3=KH>2duq zEEUEikBbJqtX~>RH|XCUmtb`Rlhx&!>6Zw;nqmtSRAl`E<7?vuL%U1)KP`|aka*jp zXHR-1)e`0U5DLE>`9Svj+xQ7!;ZfJ>2qM0r#u9q1TfuB&96*u1>CY@egx?~v*uQPS<*D~09hBG@^ELncUnr@4*NVaF14-AZG z^K4Gew?*S?I*uVD_#c+Q=c(RlUw&EQxi9;Oiu8}llP6eP`T~zSx`km@)od{3G)4w# zeb$v1%w3`coRz}95;rUHAPeU#SFV+OGkgZacjK;94v0DTsxjCODdt&~;2Yv*P!?<1 zD7@AR@SfG`?U0af?D3ntE;GDZJr^9!^MRFpq?|)e4O*fB+l=si9A|okYbhT(1?K-> z2$_boML&4C=7|wgChhkk>=4Q&&@1KKKn>Py(!)J*r0W9?Yy;1*^_$;O>-JWz)3O`v z)>nY%b7tLk&75gMH)W?!bT+yTr29}$*wtP8U2g-kgD;(ZjB9{dO%^!#((>zTHthpI zM`N#JOHaCHbD7nv&$ir|4~kW>Gu+sDP%5|9bC&a<)KB1@w8h#5dGSOmNad{UG@G1& z{L^yKU0EnG?a+#f6)V2F`)4QyoY>EVV973E;OJ-o`*-9IA-yty`v;>$u-C4un^0o8 zQ_ck;ROL#zsq=J8J2Ept0qbd8#zCn9{1+j770pZr($pR&%4(;zha8Z~0Pz@!qpfzS z3n!6MIwgja-72hl0tr`Oek%yMsle!Qpgq*sEr1H;lHec*Ij=W=LKk7A1OYY|6*vnk zm&8^BVB>QihDZq(K#CPhC!Su28t;N3~x#Ht0OqhDoxkPucq~Mf5*VqK?RzbUsVQhZSPi`p))nwg! z$isfo+=JTE^?!+kq`of5p~he$np6GlP}!gxSU!Kqj?nX|DdITSQM{1#q9g{A}Z%8Ip(q~Ep!bZ`>F&BVz7q~7#|?-@`K4D`B6@RvQ4} zu~%75z>ByB6=kf2Z=pgWH(Al%F(PdHCQ1wF|v%k zvlw~LYA%0He6?wva}o{zYTrE__Hs+aU^VVvbfe2mCBC@=_23tN;^#JVHS@+UDa)h1 zObFu>++D~Gqpxv)4E*jMOkG~Vl@-h(k0?)RZG%U=LvBQmmo=a`wOh7N6-Udii%|TY4>NztALpAqAi4+Y(ji z`(TCe2xi+2xp)-u5aYR~D*Fn9JI{ti|T4%EqHC8wAmSSuW^sXnT?ASTq;GbUOD0Z-9 zgBI*Dv?&hXS<=N3a(Q2h4lU~7=@znS^W|^reA|t$t@XW6E^E=BVr>Se zVox&N+a)EGT)vY`YP-S0m221TI^o^IwR07IS27XTVm@-&@(P|GHGyOiew6GCV}d_Q zc6hNcacYSPAzyOce8gAB$8_*IF!@X6%0{U%bm~uHGrTQT@u7aQ-F*!1eqM(Sj?>Uc z*bI?l`1=K?9e_62mI;*?eI(?q$rJqp9*ge@*i_@=4il|~=@nb>>G~6UZhZtSf|-3w zQdO#}n-s&xCygHndm>5X`UCOi%|byKKj7b7RDMk|P767OL&W7r5LLB4la?)8_7zqR zKcM`0j*vf-kYAE_6D#1O!Jgm8hGf2Vie+uammfcR#q{&n0+x_A~wrN=FPSu*37_UtrQ~<(%EMw7L--g2~&S#KPvF< zBgro1byIOPeZtmbF@No$`$LtN3ttxQbtG%%Dj<5ujUXTn6ozmzH{9dZG6?E8Y2{=x_KR90OjlOut!0=rGG`}gp5!KMGwyV=r8D&~&be@k*jltKzH`Xcm zY68P9{n93Xc>u-fe0V4``_k!r$8y<{MX1 z!AmjccrjoJ9Sv+XhrI^%@o*h`g;vc@IXd<3ZUdOlS9LY3wOyEd`GZ?7+f>kGJC_`K znGK{7|_m4PwV6Y>%%7fZ`49>&fDmu)YFU@CQE z0Ybxd2;;+!$IoE1FiA6+VxC8_-`&KwOY>R*i&#@0YR8RY+Xk?gp-KP#``2+KUw^{G zJF(KrWR@bwi^9}rhPIdK`tuQ*6Rd$DmapcsOh_{2^kqse;VQ6BDiOv+M%}_ATmTKc zgz?f!FTR*_lCTXXm^hC=WKFXp__SbDMMu-9eYzxkkXVb$rFa28HDJIN`jQoM(P`iX z!xD{ulzcyW>e)C~Ll8qK%XkXTliXhk^IwcqC#|bG#ldTQU_RCo&hfF9uu^;k|Mc0B zobb`+8}7q4*u?vovpd;3(F_tGY3J(9nHGK$6A>NMA^zjg{~UM z-I=jCufh0)GwAa7mUKEShP%n!*VaN1norJ)qa+62hNw3wKns0f4*eNkgw_%A%dA;^ z<*1hoo5+Dv=H`(U6x~yX&IG6~!Lsze9r+Njld>@&;4jtr3^vYclt>r7i@%VNb<%eH zl@eQqQ|qe0X42);I=4@Zcsu*hsjOu{XRu1HT%;O97yifCHhe`gT}n@S-qic*(HB+j z{=RgtHy}WjJ1=u`T*u%y$X^f-vOuqZp@0Ar4iZ5|VGIEZ5P`H3^Y?)vNR&z^RjR}S zd}GSQfZU(LAfZaRe}Snp@nhHmK9INJBFkl|l z2Pww}>{+79#WL*ily#}H1IxV_tFRY9u8z&>_HFif4!9|HD9>>a1*SF?Vf#@9(7qL zz>5!Mj_}Zy_l; zYi!oB*#bnPdh3LCYqDh4lZ^T4qxpR{eY&EzRqi7wlb9ybG(uHzz}qBXkQM^tQJ>w4l=L5hv_7=suo_ z3?h6*(3{Y_BB0w52}(TtdEHYou4>qR5MXa<-I z5amor%%DFjF~CKLs!^0D7sKB%IEkEBW@|wD4PgM*VvhGQaXubzvG{lojL-5UEBt4% z-sKERX) z?xMkJ41MTT9GXkj-^1y`@QN8N>>V=E^k-b51YRi5ilMEytXLeau0KPGZTY>~DX|r1 zPeWULO?)a^;Zc;Oei9x>uP)chnCEs`iY2m93ps{aC#SD#99dTlll2(Z6DPXjq5;5Q z&?47|ZzoGJZTt44&`uGt+HArFK-kk>Q2LfWzz5(U0YhO_=*IM98J3N@tSHjQ31zGB z9Z{!2c_Cemp(l~zXq>6(0^V(Uh3hvsth7Kh2>Jhroui>kS@74g)u$|yL z>cTRu#`iyBS~6#Yo$s@m3jgWXIuCE_#Ud0$u8t2i?MYvO4ul%|>1#72Sgs|8-6C*I zQ665c_roc}Q6B3AcMSTd`j5M@^${FpqtQJmbfX8g8CkA&oTl9@QEyGZdJ~~zsokGo zA=I#>U8|^vOOHs>ToK!g*e{j{Ogk)!P;^0 zuiKocWTdvz3V!tDWEr#j3dCWWw#yENxlDD?vyO!im*K*pNDdE!R%@MM!_LwYvXhO9 zx1~iA85RaNiWQCnL)A~}#l?(BSli|@Q{?Ip_QWhtob-|znR)FygQ~kZbm-7GP0~N) zTJbvZP8Z5U&-@koc!n>mCM$}^6q6nxSCGyX*4Q%{tsxZcs{nlkAV3*GYH)X=Yej3t!Gv%is!xv zyA<1XHej<&F@!2y#(0_a%>vBN#?WNY+Q$rY*i|@v&l;r%Y-CoGF?S%$V(MjvP`&%G z8J-?$F!D>#c*@ahgSEH&GDPuh*Hf|aX@v$a0(ePQA=A3J)gO#UF zoqFo-c3PP5n;YIkh^OI9ol8 z4{H;0p~4W^7|cKP?FlwiH73F$O$-~073tTnU*l6)Slk%{DKt`QYOvB&C(2CcCcEik zqU}MF{q-{`j_Z#sf0w08J3%VC3PPts#4>GMU3gb$CH#8T5~(mDF?IBCMcL z1TP%V$!IOE>Q^U23sRE>hekOX1O~$Z16y_0DWUr(dv&>0=R~YQ`jJ-8Wa_Th`@x6KP&HN~De*Zjbyl!7-#oSu*zXZ9AAkP*56!YTXr{Nd z-b}`IOoHQTVpknB(>n*Yd~MZg7QSr~9M=x`ICK-r-+Lfwe7DBY9h(oiE|sfdH0ZB8 zbXnf-^n|`*5geXeTLJvFr7V9At_<&gUILw!?P`SHKSA~943x$4equQw55FkI2<@J4 zilZF7d;iG`K-wH5YhEv5@okps+~Wfq@MwLK$v&_z$RJ5tbW+X7bCnp1^@aVWmJ1dqJz31t$j_Fa_XK#=SnexojMtM9 zuCj(a7+yqH4i#6j^Jd>o5ik{iaP zy5$mVj=l?7rF-~nE?#N=3lBanQKBKWb&A#eC#g6>Uy3PWs2Qu~Z$H8TyiN!|KXC5c z!G*pvZAlW2Za((c$a&?SM8Y6#@PU2dX`>Wufj29$M(I~`E5Z3bhJu<)XRqn13ha}9 z0hRGQO~5l>d(+0{kf$h^KDwQxSgUlbrQxIk5-`V7IAP82H^~SzLhWEjyyn@1q}T$C z7a>^lJWissBlfg=3l0X6VP)10FG$VCG7MDJr1r{~UJ|81`U>Aj!ck+S4Us~13s)O* zn~rZQ-19eMswyCaddmi=4emmz2SmAo&*-$2P;sDnY53Zg0d1C!>6h2-ptMsq4H$41 zORy~8L*A)NmDq|(wrBTOF-JGY+do{x^YkvAJHo$psOacpF^vV|G|O`K19SvPTO}L0 zXvrWjK1r+-`v8l7ti@=jvkOHRs722z|9WJHZ?r`Mw(DL!puJdpg!Ygh(?IWNO)>%a z#$qj5cs`41+9x$?OuL|IX{~sr**}P-DFyrIF&=``-6tjM*cT#(5M3fp2M=YFf8ZS3 z&|mf^YOy0k$*;8=@bJB}@cR6m0@zSvlfZMG(!^!Zd9(-Af{|^ny|uq3pJj5aKLqlI zXo6J^=A>Lb+AvSO`v?WE|WsQHzCTS60<;$1v?b);8t>B)(cj;ro-W2$qr)#i&=?I)L zlrHQqmG#qAmRvfQ3wWF>FI!gf#}`U=(zNN8I?e+pq=#`NE12(hHHMaH>Pbp$_ch{2r>+WR2Nw>J3M@P@@oTyH+_en&A#~W429qW0#xh*V!gRg6cvuEnN zv2rXekDIxvM(A~#&Ph@TW$ATG>#6Qb%Z2^{RR5M=jQJvv5My$Uo#QVO6CbC+7%jNp zY^v@%L8&@+gSWug*uhzR2@`vfj|{?}81dbaG=xhWH`DT_`0f@9PFVHv z$I+=6x0a}7q#ly|S-cAfG23Gn&GckFg}GPh$T|~4@8Tz}kJ3Ajllzz;$!o~Q43PL`xY+KZF zFdtf}v(SAt2Jzi`qu1fXhZoimlk_=#D5#4mBY^tek`!Dkm}BYiSkT(FYk!rzN$@;B zpe=%TsYQ%)pp%}?G9p@n(ful8r~FQ5;P>am;6xPjteCY~1Po;!O;d?4OFoYXW%>f3 zkdC5M21Qu{0p1{g1xS|-21qeuy`fCdT#4xA1kELiAS0}aG!`}j1k#)w!-5cE@*L(5 zAP7+@<>JjCiYc(?%G=d~Z?Bu50g`!1Tx1QFzxE+t_gZTRV;)TKH&rOPb1x$CTR&&Jy z8I}l##F5(;&Gb<0k5^x9+b=$~xk)pxfbDKX1A*dkF@QCuP^~a=Iu&4dUdc`&(wp)) z-H$YtTNZ?SiDujV42Ei9k0=Umj#I?&S6+%C@7`5hkHkRxjJri5t4PE$NdMImsCSBZ z_w(HYJ%&NBjEl&Jc{&p8i8vnfWSTgxg!YoyVPIpwiI)orEl%{+Gv^2q2CItW+x7C+ zntJdFCR|q&te*!6zR9{dq^zLyHQF^Ic;*V(YUh$)ufOm$*coIPXaWSG4Qm9Q7GdSR zB9@=`tdwlRYVr*5F*C1RqT1er4m^<>H<;cjc!jB7xRy`634IfVTZ(5W5E%A&lqfSW z>inbb$JaDSD!UfY4 zuN5v>i+{6xTgk@(#?@|XcR#&}PsnahecJ4Xj^l;*M7{N?^@W;yB19|~EWFdSJ=MQ@ zGExK&0@NiN>Z?i2v0XInWFC}%w+t&3tDWqUXQw8^P$VdQplL~TP?C30)-;_nc{&Ye z0ex6=FCw-0I^WUan-;c$86L9)B7=sTUjEuJ1;>tO6&{bELI>z=kUrW4zh}2d+)1h0 z$gkat_y7u9v1_=SAcOo4GY0?xVf>Hzl5v&kEq!$G#B7&hPND+{xh=2_N0jVMg1eM-9 z1Zklqflxz9*}3ywXSU7E?&f*_&-c9Vqrl{sd(WI}&Y7~iQ_hs-Hy~53ICjd`ZxAS# zKc3YduZ(ih)pxVt9;RRZl~4Jc3RUE^yx1Vc^M2wr6~bGT?^9qadS-V+4+N(>i{mBk z&g>&2<8`*gv*#1^6)(^)+(MdG08rRKeZSX2|K>RHE?b6$x~r3nU7I+<07f#bRdRKF zv;mB(d-QZUu|sLlQ4c3p2Xhjl5q7o@-Azvpl+Z zq(ytA|5vc(ArBreC(7marI=rI-NP1ya=DX2>qFe-qA`8y=eJQY=>zkbQ9G9%`YAlv zH+Jg!Hiv0a10kaCY8f*Awz~xk`SjGmPs!+=ceqRLK46qR$G-8J5=Pd_eTh=J^(C<289iL9isL*lZoRGRNR;S~=vS7U(e+kOXbq3+*TY0e zi!jncymg3E!kXVA@DA~ce0=SQglVBsy1ulw%zNnjH%p+Sv7Tt}evfwLm(1-tl5qZ8 zf!jB3BqSURtd#iNGtMyC1OmUhvGlcjygqpM?um=HW_E)nXF#A>8W>&+AJ;c9#s|Td zwgVS^u`EaYF>TRR6oQXy5m@0{!#r_2;6J=r5ct?fCG2N`RleAN5a^lut*^Eo%pbeR zdics+VWEE?EZU<#V5aU$jOTO{N7K&3)0Nt<;jXiKbFZ*y`)fX%lmRy_61QD9G%7WH?% z-tt{vtQAT~{GhV8l_CFL>QSt0?v<;KMrR{sZ*e#Jht(0;?H>Nwn1`MHkHEPZ*=H|@ zbYdw*>+{$6IjcdFQv!iH3Kkv+80nuJ2yF7hGOzH*w4Va;it*mo2`tb~Rw`oKX+$bG z5nChhiL8D;Ff5da?gs*8=qfst%lS|1*B_T0aAWI{X_{?>bIEBhB^gLykGrt7eFk>G ztKBUznComKrsBS#L)sl@Y=pb+LRvwUQVMfNH&U%Fbe~RCX;vNYZT;0 zE8Z~19Sf&>fLlyVjkgSjC0jOfWfd1Y z<`KgYX7APEQ49fN{bF)U7Vps4R}$j|7E{(_~ z?TKYb^8{HA-+Vy+mM=j$=!vh(SQTuVeqUqURa|OWL7A@COa1vi>~W1G=wS z@2(4^t{MwBl3RtOykbkP=`L{djsWI}vLN^82%A{Y>0cJ8gJ)nfE0gmun*tkwC|>^7 zd@zLQv_?7`tz{gT!jc+@Y=hp%Qa(FOktQ~FfleN7)mA|?bL3*MwP3YsaeamlE+&-5 z;b^RpD)`DC_WK85W@BujifP&M^9mf;dKYFga=EZ~rkVZDBHLB0WDGmrODk5T%GA5q zDgBnDvm6F$`kM1bKGdoGjs}~4Z>vR`wYhb&!w$@rs4l3*ZwFb_n3s7*RPcWA|HAxp zv09()+0P=0)w=&-hrm|)Y5jMxc{7y$SB~|VP_#hUt)xcU;?uRgu1^;IBHdKiPb*Eo z4Hu8lBgsth(Agyr)F2YK_Di+?Cp>6|(b$f&13Lsd7`(Cd*fcnk8rl{`id%~;|2SwFi-G~{~dW+7E@)5^4buSxr$#1_z8j4<4v5CN%5mf!Mu3{tDZR0_}-hsd_ zuA4$~m$i-AT3`YVL#V+X&6TE=S+L+Z^v^3|Ny*oo-7e_vJlbJq26lOjWK4L4KGF`T z5)<{y%FwuZ^mnfrp>DbkhHai4V8`EVS+qf9fbCUpW3vlLKiv;T(}apE{u0WJutlmE z1$>$|@6K#-Up5g1nr}-@ZJ`v0;mx>?+S3zWRZsdIKvs;u_e*+JGIyb00nNg>VyvNp z72JgepRLbKACQ=>VCAoq6s;2f#D!@)*fnDc;F=pNI*sQ2TD`hB*?X5;-Z^BtpY8ql z86AUho=^N&5Q977HL>>k$k@+E$0o63&nwxmy^T(>afNN4L5v$>GRmA$_X?G~uD393 z1}L|siriwxj5*GrKU^!A(l22t>$?X%-~A9{%N04T0QCry_|%2HK*|nNDB=Ro;GXub zdx$WVr|h^eH<@1f;c zbl9zv5?8-Xo2pvaJy(2A!eh7k?f}t_Gqua^$W>9t(hj8MxpQ0aDda-m4kOvCW+{C@hH?AdO{V2WqUL4Wjp=4uUb#0=e0vB#4`u{F(v3f$Ga=AxLtLhEaNC`rk|lP zrQ3aH9F2X{93jd9idCCQhfZ&jxsEUIXZBIv4%4O<>;BVKN0~on9*}M85eOU@US9A@ zBo5a0)rkYSrLdw0a-vtF|F7k`rTV9{UK;7dk}scokL--n>q(jVr+JEwIFdTiJJD@V zV$SAh9xpI7kx%EW^}uqR4FrzR_nUrng9QVDU(g7*(LHK9V2_i;{FG;0f)+M6u)>99 zni2T9YMwmrB?nf!Fs;x!b4tpqhRlDFgSSOntEHjuLk&*|N4RN(^;|D*H;5S5nVA5C}8s}qGs}!L_Xz(<++nIzw5IjFL+_v z3%7V40+&?_8L4|Gfxx8KiFUb)1GfdH`L|-O@DCZjCGd0L*u0jtOL$fwKl2`I{JHnD zxW(UGPu(oIi}LW+2$`*9$?!3kuXr9tV}uC4xW%p1;-qoBX>iO1E0pV+GmYa^bFz!B z@D?L&xwPW**O?=Yw4{aQWPe%7a$R$<2p7*{^yU_B%O_t4_aM+yM z$JRsR)0&oXIs3|m0s52d4R1%USFoOdqKpARB}hxI%33x=n)Q^>f4rx9!tH0h?JKZu zqOb4MTf+AUnZDEeIl`v1+JEUwJS}dtO{UZ-!_=vk9X6e5TIfXv`rFZMD$P-*wr63?;@OeP=-r zl{HvTe&*O7kH)h`YCEkvEy+0aihG!fGsoifq`jDD{@vB};qiU0Rr~fXTd%gPWR5;a zHF7wUC)vTmo-93-C-Sj5E&27~&%a#)Pntc`-%@|9q$uf=Of{h4-c+!6EdbY}3Kq-Q zv0qP3pFSOnmrp7fzCPHY-LsuLckWoQpkjaTj;i`r5??gCRW%#uN^s)4r`EdAX}f!W zhDtH^g!K}iaNN3jbqubCt=A4v;He%ho+^U+vph_)2a4K!naKJ&V|`_o<0}-$b~`?W zYQSzNoE+t>>a4O0Ysbvd7QULR$}MJR-Y*Q%Txea+D>^4r4wucC@fT*XyDHeLw+ZBK zt^(mx%CO6k)8~5(k+jaU3H#C|^}sUdT%X7Ya_%Cq4+BbdgK1&HSwU{4oP&ds%!7zL z1Eh_mddd(p(sdS;6BH3T9)&`J6^`Kj-@qc$j4winT_$n#mdp@*$Y7Y@mB_S8J1q?7 zWJO4d9taN(@xm(+=8;#F6?c&ypb6m;p-OVGNFKlozYR%Y#nBzY`;kSyBH!A)yQXnD&fk8vnH2>K<5OKGG`~WYLA^RD0yhdVEBcd=2_WEYwe_{qm1!x{dPS z5ntX8Hg+tR6_Ir<-1B#8_tBka2U=N7`+6RWaTjpKuKB8(OkdSOyR$U!P@N4`CVpG7 z&B$2Q+FIU-^Lk}l8z)|OP7RHZDk@`t1o(;+Fk7XvGBUQ-{K|ZbuWnr*9V%mU*wvLE zeKaK&tC4%k2tKN9l}r2-72?N^;G6JM#}#)&_X%gIt8Zy$ti)$G67`gYp4l8hkCLvd z9d8O-ELy)ZbCj-s>>-FP?%!#dKh`f~b%Cw!@Fn2cb@q-6+p6np@jPdm&c4m0f*45F z;5?6W0dDAthI!0mx!;YQtqoOdr`ulA*o-BWd92qc(W?l-9`R{yujp}m!pl|j!uIkK zyLj0PJI674IoB>$pn7@+uKQ-aCrfrexMt|m(ah^@Fwlc(Ul-giqi@C9Ak?dpG?)oN-LS;_|n4a1yWZ!A!RBpxwNo)X{Y5*134PoR|A%T z7i^zFgyl4@p;*tZVnJrplyM-e6pEbf&4J^UZI40(EoGl5tcPALYd`Ep+-WW}lglIB z*XTPI zf<672@_vEKt#_1^{>1KF%Boc`QlnT^!+xROTm^RO@Z7^JUNw?YEFsNv!K&YhE$}uu zBShZw>bH|f&U6jgOpCOx8M>KN75CelnSEh^Uf7NJr#V>Ylxhm1FR{nfBe04`TB=`U zvEwsmY_-_~(;A>$_TsyHu^tmlg}%5%rFPkf)<~H1+hZjrN?dos!T;IR`#y$rW!~wrGO?)7UGx2Yx#1U`LxDreP;os2^BI*N3Npwe-V6kF!l)Q;IzNLfus-+j@Zg zXnPdmUtrz~yP#ts#xk`PU6!{Zx?p}!XTI}Hf7J@8UWa3_qw;J&+wC=lV#D_@QQ>H6 z-~{h2t9h*S4L3v|Dy#yiHZjk7aPt|Dx%ncrO8i(MEqIh`-ahvc%(8w+QN8WL3SB-v zlMgtazT(2P{5dEE8S7kU>gRE+lnp_o%`J~|oeeCumwU|+1slevD17dG`R7qfPE)km z-i&(~vj)00(;~8LW8YY`>-rH}=i*t6T6Yy}!G#N_-!?jtK{3m%V8*o`ZTPNx8LI!Y!RPoXY4vEjMW&1)YYlfvo(_{U_0?(sz2eCoPZ6Zg zg3V``7CZ~G5q69fP7$;~gEa9-uZ>|(8Go6Z8hhDbNs6?vQ0UTQs%u)-l6Vh;zk*zE z3+qD~tpz2)Gmw_M?JO)3&<6hIf`j8cnLgTrup*SP$%d~!mSwP1p<^u4I7 zM9&o-(dqE(8&|I;KK`ZC>3LcVKCqZ4?8u1V`7V?5tY|u5Dzj3qi3*j~=CE z8#`p|iL-3ydryK#E%lc&re(|i2spt%kZwh%8FCU3w$t-ARpR+rqp0NG$N9+6s-eI9$x=-354`p z=5@kbowlzWjK(fu{qA-_N2M8Cwr;^;K-9j|k6_SiiX(z7Hc@wmIC40(NW%VfAniNc zI_hqiKgYys`H`_d{_MM%eqpqs= zoShbRTehYN8M)g`(fT`dZvOMnos?7inKr`|84}+S+tOf9J{l>O=Tqm4%d~{HfPb=%7oDpar=7dnR}ayhkOwmV@7kF{AA;q3O4v0HQI46$o+ ztql*JGVz1_?LiH+)bVS&7oYpEbtW30wg4ul(+T)FV|Ob$UXdyr$JkAgA<%W9(hm#4 zB6Hu>y|jPaFD)Sh$BYOPB6&!rT>`ytz}=)DxVTwlWM>@bEa=3;lnx&8Z;?a=EMPq?NJ$ungOiV(A zyfNx%h&>@8RCAo4=e$!e`v}!mKf38=*w6_RCa(CwY2=q7DH}P~f3ETTIx{WwLSlwb zn;A_Mf7UED+zth-xzp>jqu|&cE$c24xiq2;7q*hhJrh@uy4?kHPLQzrw7i@eEa!)! zH{9D+3aqqrb^0*5e~2?uXJ9*C$!$r|wRW56Gj|c+tuy=EwDB0wy!P$}bAgj6^^pEQ zD}nlEOfCELoq>CQDBOv;$JHouC!%ig8_e{3?Jck+|8j@%SkisRe{Tzut%`&RmPI=2 z$p~-gJXzin!)r5cCApGt+>$%afkcYOS5o9SG+{oca!sL!+q(t|{+Z+)Eh0rHr=^Mc zR3)Y9J+jM0)QBD!be_y1^DG}ufAc+6Ee&i8y|>DYzNIpX?ty3xw*Xwz!ahkuPEhe* zCyUPcRm9hvG-|hzbOHn+s_yIgZ7m z{VoB}F?bN1aS`OU^X_=K`qA0E*8+h{WhhkXUjl*8h;SU~TvV;vt4rzYxPu%%QAS$8 zhnuMksRzXxeEeRLlY-6r4z^loj!0#lI8!VJo1zL3$99?5SkP1N1_E=W_;Q=j`Z`*r ztAP_v3jk@3ZTz@2YIq#xJ@Mar)D_yUoQ(S@N9E%NRCa;LBJa#n5=DB-jpO>kST?9T}^4!@}}kV~J9CLeqZ6 zvZfW(XcflZWl5!`wS`iauyf~53^`RS&sqWvcSMoX@^nR%+$F!EVwzT~@%KAuX83bA zM4V6@1D5=zCsuR{3T31hRA?j}9(LXh;jC1+V z?GX}!h2AEXcx0fvTRY?)&;vu=?~kJ7{`S^y+SD(DozctrWqhayoGu;jh3N6mxIs)_ zm^~b;Z)Jz+VfCbNiggp4OGG+~i{!52m@pReqzJYFo3I7Xv_FKa*vgmY_cwJeRj+i8 ztI*@eie*(x5gKJP8E zt9JeoPS>|LZQAs!Wqb~r=}Rq@8lQs(Okw!{Nxndj<8*E-ISZ3|Z?k#!_=qI+^e|f= zC$iRFx$@S{m8({+>{Qb05q`#rLl%7K)7tG%UF%m2sC};cm~Z&BS{rY{2;Hje-S{Zn z#x-s>aUO*^-4CPTvAP|`(!y)=VwO+7riD?v<6diO$a6WLbpA`Mikt?^$K~Wcj|FLI z=*&xIlepcCo= zrGkd=UZYa|bn4Zs*VY?1cq6VSH5bcfie(b#9fVkC4grDavmD%UY_=#SVKFo05qkZ# zTeo)k5R#DdnEVTVp4Q)C@mx7cBlpa-;yW{M-t&s7eY=Ixb)hUPVb^O*ARXmwnoV() zCSJ6x<)_pO;ch3C`k3&WqR)5ByUi`O2V!1rQmK*K{{nRLIVmaHv~@p>TgMkq>iVxT z^kO{18y&5i{gocmHV#pF{-!8|nVIfj%C%)Zdp;^FBp-Iw{n*dVe!w_sY)Hoj_z1t! zaAP=UzzmGd__AE2vprwM!oW!NkwYA|A|V(LO<0&AN2INTSds7&W&rR+z+*c2WEW;3 z_*k{#to%?28;Zn%3X(=6J{)*JnkdQ$Tm=^v5oY*2FgqCO6r-~N5P(#jHvI2mk!k3p z2*d0c9yp@x5V$%{drJjS{l>ZeG(XKJobTKb%cL3qN;q!?P}kghUBFg}^V8Soh^CKb z283E`)7rIPR}_S_{50Qt>{m=tH&Be9n%0Zzx|U*Shvry&$1hSGyD~bvOCbVr3~D!6 zV`@?Gd)_{vh4?5$WOF*x@Jo~&%7aIjDR0d=CwPs$BabZk;!C8e;1H^@&7I;_fRRc1 z{_h($Z1|!FW|c74d8L9S!mkoGQ-ZVwJdHe^=Xxp=7uCPHwtyz6uPx{$nTur&{{$Zn zQ1Poic>Up%2da{MIT)ye?0*Drh6D zfrU{B?!@xpm;*@##4$s}Acd$MEYgMX=E{tVE@FIE+hW4Ji4oM|uA43*LSUO@7_dkW zzB}YY&i`r&3>b15(@2%nI9}-8dj%Z|3wKh$%7yQ{aDiqmU=k&FPQZE_EPThuAiS{+ z>-GU2BFMGfc8A^Cwzffoh8eY&fXU6obFJ!|VHdkFTS?Xv{#ZC5MW-!CSgh2**$|&4 zJL-5P>J;Q&kvO)eQwn2o(rCSQ_&Q5PVefkeL)$l73 zyhzY!J{O!3b3b>4_vLXa$TMJn-xB{*jm6eeq1Hz)6ZoQ(u!MiaU4&S#?vhlEum8r zaD-;kOM)a>l5ZT1J~OaQA+08CI70q3divUGg?Q4-{N={#70#^%6)xN#klsVkX_x@d z&RA+h>lmI8rYheFYo+Ikd;`BpvVf#}u5%}=EIRNV;JHJ~3sF5JsRVk?qOW~#9i-SN zfK;1}8jHK#;#~(4+~%^0;BuI>*e=`G26As3T@$+50ElTEiXPlFL+ej*w_-(X6Jdjl zsppekSYacyCzd#dPfV!TWF8;8{ON02X`CI~SBx*XnE^6=Jc9kjUtk;0`rJ6$0bw{f ze-x(dA*{^iZi_AA5XJgzr5BMkb65iP(iT8pl@&M^S#$({g0av=bh%!J+skX2zlIAo zQye?8&3UKK^cQ8cmkqlwr6TELC9aC}X2M;G9o1G6A`g}nF!sxUY%bs-10|5V4&VCI zO&(?QqG`984=M4p=z}1+uv+qQp7|rJMa4(n_Zht<-etni=Z;`em_ND5f*;{PCB1Ef zbj%0GIA<^xd!Dkekky32?D)08840h2(OzeLW3_kRt!8jYjfGJPHd-EB%V562@*=8R zFIXO2Y00kT1$N1)I6~h?T0~6WQ`B&E7vdA@cB+hh-9{dGM)32snJRpliyly`NI)GE z-`ghZ%)E2C1@aP$kXp5{`RLC-H&3fotCp3-hu8l>3DixE>*({+XIX^p)6>0m@a@y< zy)nLh+6Uv?r(gG$JA-?_M_Gbog(SJ*mPfg!fxVlU!V8R?JDgBJ z3jN5;`+CKSsb!gT(JadLEyKdXq!~WrR0GoaJN?|4BUA|O62LU zc@Oin*h}y%KCV4z$sN+^#N~j$@SaF2ixnOg6RqzoEga?u7*ze6X1?9W>G03gTje4j zr$e%Brc9nZc?uQ|xjzwK!zkeP9%*eFd#H5j(m6|``={oEmKP#_8+jh>WrjvF`zhulyYTdEtR@%uy^iz#Z7SQ})8;~WfkS*U@{Q&v46*RdWi6UQpS4mi*V zW&DzX7Ktm^vSlCGtJt{%V@laDVR1Wm65n*^##kU>iu=nOyW9WSXP*tVurbk)y1Zjv z;$M@QG>#`}-b zJArMg@OF|~VzdJ`*C5stv`%UB4Jh|1!ZK^+s)nr_T(xRxQL+;deOCGx=u2C0vCj)F z5@C23&vS%+mN=3IR@0e;h?TKB)!%`@Eo{d@5CP+xBjRC+K2)sAjFU<1#>)b7!v2X$IM z=+Q%bIos}si!nQ{xE%V)PRDb`T1*Gi_t{tva1BSDT5=AS4c`RhZr_SOO~RJba~0}Qv?o2FinYK} zNy~I~(U@xixKiGCSyPe%A7o>~mdiZTSB{R7(7l_$N_>!Dc2O1SVT7&sZar!cHd+xd zy`|&)F|FPYdcr^4@SA7I78-IMa*tq(j-ev}sI+e#E}<08KyVEVkA+-v&mAY|z>+8C zbj9gh(URa1ATc#~R1J0guGGA|M_7Iy9GJda6#NMceeaT`_*BRrx_-Esh&cQpkpizfrSR0s_q<_&rZN}FOOd9#d=OseP4Sz z8}=9RkPIuow*BQ^RMV^$)3~H0_zC6h^}G z5H^`KWvzV*2XlNPD9uaQFoQ7}x?=?F8N#MOC)_i@#K$5X)zoBLs;}kjgO^^yR+`&W zuSK0kT4G)kbfS}TO2~t*OPFRHpkd~5fsDadVKQx7MZ7zeBvbQUbViW8#~3@3OAc=N zS|WQpERS;icd^cC=sfWM1B>gy_eQg1_D%cAKbdRr+Q7~Ggbnkk^yW9lYSJwFfu%?>! zK8YVJEMuW3Ze&iU(SB{_{wm$OU*SNDGXyR0dLtq@#LTXWq_-enFLdtHj1rf73LGSb z$#1z4E!`}F&UryvSAy7{mul7vQYG`_Qxb3~Nq6tvyt%Kq2p9Z=L)MSf8*FZI`Sn^I zQBK5;{wP6OBXikdQtZW!E*r(`13qMI@Wz7CgnOQUjo=&5gpcSV(<-^%cYdSSjax*GbPf*QsAyeRmqfqk7<(>~GJ zm5Lr%TP@$VM4jywAw zYg2u?7yEn?1Du6=C8G_G{5q!5krAikOH+C>VCJ8Qa((=EjUI$!S87UQ)Dq3@*$S85ofqLe4!<3-e5i zolbAP5r$@^uV|-$V)emztPyrdfiR;C6IgcoNuiR?ut?4`e` zl`m_!uYE5L8RC=s{1ND2CrO=LbrNLcrr#pKt5eQDp7 zwGHl$G=d1{h=sAcy#&d19839Z((G2P-h=ie$Ex}=K7aRD|Acc!=(n%|?_*n#hA^A7 z=PH>Dnr4%*2DVRoSHPZ13S|CIRj^ISZIp@L%kOrnypOGX$wH95& zBsq8@3%& zMv8NsO*M_}6D1G5o-eTNu^En=Fr})w?d}1a{A<*|RN!!Kk|xbQMHQ!}FhW;^glj(}YAw zO5~W*wn8F4IBcu|xpjD`lU_SS(~jiaO}ic7K_|)%>EK%g`}9-tJMrj~@KGU6@=9`qbuj{O!fdhh5^dG>_YB4hnAjEP)U+3| z+QRIHkOp*sa@uwxI=^PY;OuZyX^L>^=P&NxY$eBcEO%-KI@&Rkjpvb&Hm*KUc@m2yGz##=?ELx&~+`_A!;)DS>B9~C(c zP1t7DIAOwsQMq`z{@0QdcNOtMh}WyNA96qNN2h+_myI#WEX8~l)gX`2TCzSW*YLjs zD7LUaw$B^VFbR>|CS4X!6gA!+E$H_aUZ8=o6fc_z$1;82JEMmn$2|DNN&|ZZJ@-96 zVzfH)-^HR!c`D7ch+e_hy|71`5_Gen7e?Fau;JMY(&$u?D?_{&L;?Ffo2S$R#M~V4 zZ6O;a3k|qgB>A2-h_}VY-C(u4oBTYdfJqfLn3#7m=EZ=C%{!oy7-JgPI2YCfuZhtL zU@AR%k2SyRTtBcrs%#Hd`TZ zmWD5ewD@9Z$b2!#O;@6^y#aR6xQ#aF0VnGB?}z(C{eq=-SC@*U%&6#SV}gtK3s#uD zY+hQYsRib2{_{g-p$r{1QSnx9nuoxWC49f?-FNZvN+JX)i!5WLTez@y(I7z|ozEvG_G1YvYEIzMOM$|P7QqaK7yKCK6o7E- zff4HQTD5A|s@3>Uzf2-j2Y)Q*E;m-a-)j&m(~lp25tvUUH7CS@B)@zsJ~`>GVc$6I#BExMcu$1?#HN8o2w1{jraR5W zMiqCk&%-U6wi2^jYGudKPUvs3@!mrnKD8m63oMNqVOykU(}u!nvSF0m;#eR}FL#;GVyDwr_YRWplUb}YfPc`Q7KJ9lh#C@6TVdsOcclWR>24U|6)2}Y{fHHr~(_$Mw z1;rWh!Ap|+`t$M`1vV#X(~+6Ku`2c)FA*A7xynToRV=FXvwRMM6o zAxudc3bhv)0@)V^WfxYiCfuNPcK{_c6#{EoNORhYNPT@AjV?DISQfS+g?If`1(zahD+5vK{xHkhVBx#AFicUKu_)TT0i$$@aVjgw&lZf>*%jNd2T_1dRW_LLe`+~~l@XU8OQ;Bcrw?jYZ zs_;bFhqO-#%xAYH3k4xt#o{+^k z6>8_P=pOUTfW&1s&m@|{%1(uie|29S{{)(e=__PGT8g3HS-W;X60S##88#~fmSX6q zpT^#J-oKU>Y|v5+oyN9&e~Y}BqhmB2S&k?zcU%T@LpxzgKiP_wPNz6f(DF&wsWiXP zS7Mo-N3qMF>4)u^I5A9l#KjI%v*dDhR}ePE#RntTZb14e&kj>Zg7i5wQm9!;7OqXF z6d3nG*ROvifiH20-y=}b{#e2hZ*1q_!Gp_4(1Y$tA5>!0xj()dRWO}e66uT6ECY8l zVc{2D`aTwd>wc-dmY_gD8l~qZsl?5l;dUl_V2S;WNN_TlB-a&Uhs^lH6>Ji)zf7a( zU=J*?yZz%3eFOV#B%S>s2Y0P~_PPnUN?4{BXvPC>?-BY{ERXN-gUkpB1lEO!#R59C z@e}a=--_8)W%e)Pbwrg?<$?$^6oE%V0xD&wH5-~ zWcH<0FYU4YBGHv1(W@_5m)Tl>@#;Bg&rd-J&*tyU7kV1!1E;qoYx;U6|T? zx{h+VS4$*Tv6`%FAXAB;RGNFqUIt)$dBwH-RgwE0X7lxB)_4jNn!y*Hmq?K*@ z1~t5sgc-{o1{S-ATZ{CwV&666FatE&fU{578i~lu50*k6^!Q0nsjpv#a`Q=a^eFH9 zE-8B8JQZf8{$N(VYTi5WWzm;cxa*Nj&8-b5C*=E}X<5wG+4Pt#mhVKC@y5f);^IMw z)392NB?go*z2Y#UmJ4Zt^@!Z(kKu*DGAEWG*nJFaR$&VM%yobRY{8PWf_!Y@3*MBw`AG|N>{pCqEbinhqfTOP6WlhzELU(hXIVen8rd2_6pgm{P~KXQqChWg zyUWp}sE$=dA%kxD;r)N0fIHX!Qw|Pc5)Sv4r1I`S?c+J?i&LVhX7a|;p&s?a=x{Nn z98_(_S%GSK7E@hHg6SE?u{mClF|vrv;fd9!)?tb#gvE7;uX`GpH)P0pW2LDzTI7v= zgEDazmdjyQ6BZ-$Okaglz~sZ1>~L87n#!VVuS7JZd$3eu*&dF0-#ZNleEZxVTl{_| zGUduOd}6A4yieU(9@j2{7aCW^dYR-tM6}ZkK&!h{!&moq){23S8%Yg9vyKBbE!Pr7o zFl(WShtE%(7zx2BvD;&Y%Yc4)7HV{BsDj*|Z3LjZ=oktvdzH*u;VM6PJ%dZXNsHP@koMSW3;f1yeah5-ZOWK2V=6xC^dDvE`^49N*sx)h zJn~X*P}^ZT$|qUz29>3b~d|_e3;JNftRxS6l)rf`O0~=~#NEn@=Z#kqTv83gpw#LCKpJi;e1@V1u zHdYzWX^Qg}UW43%yc9IcV;|BZe8v{zd$-w%*#k$;UI_r-uB_l-+9J-fe&*58#CFv$ z^Bi(8Wwt0qL3&??fs7^IyEofOhAoPZW(*x#MDRW&jS{dIFsTJ%ti>@_(8v+&qziPR`15tb79%43sRwvT7P_Q^yVDtUBa za&X&6a<)eykQSdipalF!c(VovXYfwwQ)6Mv{?&zLduGTFCsWAE9Z;|)U!3M_`iT~? zM_TV<9Jze<%O(ZGq!F+&r?GBIBikfoOE$x7MeOq0UdelnPDK0BEkd&4+ytKz*|)5% z$tE&}@pJ?N3EN!u-)ANc??qcRumNJAEx?J4Ics5xJbSqpzXfD*D=&)s#>*b$#NYRE<9@WhMiqD?}8OaYtyj1 z(Qu=!2(w@i_xs+I{K-YmWQF zRLhb9=Z--d&udzxuj|xNlhYP9#j}rRop%G*1DzaoMB#i@eGtw;CcC43euo)kDhq7U zc$^e(K$66Xu$#4L$jodr_ZZQF>#MUHQ|~f;9o{FzEn$`U9$U5(?hMzUk59}k?s*{T2$M1s7g!hVMkTgEvp00dSZOxEI?sBkK zyWgAX0{LPiek*SMDmU;L5Sm}qpj$-t8OhO327FJ%6Qh6?8hj7zifZ#Pb$kqLv82!T zxrwEC{8D#j7d4r5(J^#74)c1ei|qxX@1zf#xZF^J z61`^hiw>k!Sa*85M8McXQhE$6P+GDMuAB4fzf8&Cj>?nVO*>8eyco{2u!M@1`s%b0 zz{V1)z0u_eQQk~Sc4#%Q;eV>dc2`+iM#j>v5 zX^z-%`UR&)MDW*^2@ofIp^X=A5bfZHTl{3ff*}J=fx07@f4?V)8H_%sKnneKs!x9| zV|L1D&OpFgBaK(BuE}G-9P_89kzjm>CQWjeDWhSdzG%YLUQPrEcQ877Gj)pu^RA}# zr&$ok9k=q$ukY<3gRJS2+e;YQg%+##?c2x8=Y|3q-rCgvOCIBaJu;F*V_i`G!eM;I zAlU_F`GgF)a5r2KKW+v{a#U%TLXG!9_2X*dc|deKj|^?+mbtGuS&yeq@XJs~>7#&h zC@ipul{t&xmvwaho*_3%#^5Vg5pDwl=;d4(G2TY8-0PXn1ADYPbl&qCY(M_`I*M~{CCzdVjA@}G+y$@R8((j)uPy3Q2nKHLw$JK0%d5P?+{e5M!-ho%0^fU-+7q#6 zhe?l7QG8k5cGtQ|r6WR^o|Z=HbZRQO?FFlz!X;MdFm<>3Sy&U{7IIz*C?vIRn=`v|`Z0 zXiO}K)r5Dhh2ibl=8X1f?mDTAg^`@qvCLAJCaBL@kVaje6Gq4a<3WpsHjMlyW>+g* zcQzj(rcATNwCd*SND2aXp`!y~_>kt@^*821P5q2q4{!}thSFlkGjECN{+4u|o2mVL z5?1jFWAFN4osc^}Y(v^uqFM8*nybJ_xm9Hv{&WkVvWYiV3J?qaS6ImkYVApK7aq~d ze75{1TiK_oq=2xgWhTXvY7AI@$SI(N#S5=)4F%&Oe@&c7i&Eyfv6MMzlrrH}5kEf{ ziY^b_VG3UI0H~6J;B=0itWu@jeExomSdM)hw0^#$m)myqK3Z;DTe*m`&bN?R)kb5+6j94e4fxRiKP-V4BaD8*EU79d;rtQk7#RJ6A}G=CoZ$YDKxxMo(N@1mP?E0MO|i&~d~#1lX*5vlD15#ev4Ue%5Z>%L`Zt zbr*!=KSYdrOMaM3cD?aKaZMg3j2@^VwyXXj`lzG6$a!VtOv}DZUj_2ldZwJD$nCO<- zSj^KRgaZOk7%0aJ?0WZPC4U3o8;984I^O9BqZ|(Q#s*Tscw_HS znR?m|HGZm$x9w1CgbrweRQ^uP??K}b$176LB>-zFavYjoh@@s(y6o8-eO@BFTthAg zwpGh9-gp7eS8${>jg|p6$OBW7(b*RbOz)-ObI=)ogs}1W>nXEsNirs{&9jrR@8-;j z!!@~=1ybm>9r1IZEbOht+klD@v1?@KWi4)2?m{#tD(c1@>cx}S#0zxF6enU&eM|;_Sm9P)Jb_rBQgPbaS zI>!d`E{mdv0Y~vfNsk!<gwa#*p5oW zhnqPzjVjnW!1kJhWC}8YpqM7S?hT%WI3tK_I3z?^|4-?$5N!D^x23Qnkg^9yFFXDt+nD<4lEZw(xV{a|1u1~f z{Co_mpzrQzqf7-sYzpnoT|0^Spm+u>v97m1 zoNJ+p&)XV}oply~>s{yNw=k^t{$e29ns*#A?WubR{Mpcg0_y=Id!cqwn_8m?Lbu;S zE#f(WS@a;UVbj01=V$1!CwRmSNycB$E;f)tTeyP-57 zcf4CI1-YNRnWm)flsn!|?&{)>f9QBcs>E0R*gQa|ONgN@IzyLu#!i;DywWu@q?m2! zl%NdQaiRLXxozmHrIP$wpSt+Lu_2#8OxV1|6VpdX<996Hn^b@rl&U~ zsXTuGvfX+Kt7-FhVVd0wJNIE|rVKe$jLdF~g_EvADyH=#YyhBq`(0R`lfZ7RSrc&- z*KSf;P(K(JEfQZYcZv}3C2NcOYO_udg>!#SLQ|TFFOi5pz;wUVWp#bBABLq1w>?Ue zfKN4}4Rj#l+zb-S_Ur{V!uH7ouq4mU27&>*D~Gmyufc-3&i2W~8;Gut%(8vd zar41m!tl+=I%W;=~7R-8!YC!BT5`@Zyk}z>2%@d z2R;IKok;{ERQ9(?W?Q$2yMe%Pxm>gJy)Re8G;KJ7l#{eh1Se$@HB`ZW1OojTccp+V2VeT9Ki>xAmmYGd zxWYYPjH1WcmpseZR}rG*9aBTbOU5jMc%(!p1lmy2r~H_8IKwsYASHg;s+?VUI&c9=adX7jVM<3BAYy+>Vof zWq_@)=kqu|3Zu!*3*oS?0qI;gS;#%|OFZX)lC4s6Vb*vZL7MkFatG%yMdj(!>_xDWjkyXI`Kh+ z2KD&l_U)y#^dpLw0@U zo|)Gk-Dc%I`KwAo8i*{9xU9TKD_9V{XFTU>c_Luu8r&TME==iHr!5iWe#5Q^n#6Oa zPP?0H4jrAzZ(9*svDnxZ=dGo6n1(~B#A^q8mbIiX?=u)1BhGHvFnGhp!Gl{n{D;*4 zpajAq!u&$fK6ZX~fI9@=;!gX{;UZ-?k~8feQMnD7M5F_TnF2;?2zM|evIvU-&?3!q zFjB)ThA0Obr%zZ2ou*;OM;dL9aXg2p!qHDsLP&UQjHgOaVh0Q}(knn3$q9!r*l|(f zA_=sdQkG#BAJ+&9EV&4ZDAMzzP*S*u9#;u;2}G;o11n5+?Dt(|d6a8GRIT4BJj+X8 z6QN;(mz$C{7O!-Ov`5X}FXVn#^%XNJ?@Yhpq)Qbu{UM01i4PW$2KEWM*M4#|#pj33 z#M)4=mWq;qWv+XClJZ}`t|`l!oRn?8WIwU(wyD;A#kUPg6&{Y^@$ZUH*ibJGHq8I+H-SRU{^6kZVr82 z)F_vw3WQxGQAQrF&dlq=w3_Xg{=9VQP|tF4hkgJ#GgDLDb_SyyG9F>f4})$0Za%fR zN=^^UqG=VemU@;7VplnPd`M=>S!3wW3So2Nj0E&yvr zDq{w4tb%1fgQ)-{eKw*ityK>dVeE!r2enG|X`%Jzb@$HNeQ!<6NRxO8o1oBiV;sT0 z7SFt%?C4-)MeNtb^~8pt==`4(R&JiZmV&eha%2oDV`%0Oen#L~Z}Tt57OPUGpVrX( zVXJ^W*eHuqS|%bwa@|1J6Hz~$^wEi3<4F==`_o4$!1!Cq3Et};P^s28n@cjL2nwR@{z3h z6F1RrB*w|uH}k?Qjhgm~iGBU)4p1E&fT(-}jD!X6L{jWz$YJOc?!Ti3@^Wo~&GQ1l z8;}MTJWXFv(nsz=W@l*iXTW%D)KbXO>oi(xov%k#u(sEMko)5~1zS z=?d=7KcPaJMiG*$?S{1a1WZo~#JeBRB3JNHmj+s$q`(_4K}@&tkDVM3>{hYdF@Z}t zz$|zi=Tf_ncp&lTjPVp$sF|D(2os=lSiUy%o`9wAfG(Ep?p$$( zX6Z}LwfX3iEO!u1d)-EEpFS-wAjyA-uzSbhl-5DhFsNsVBbx}(J0w|5FI21GFa(MZ zQ`pT_t6rzqOm+rFarSY67@b>gx-5l>tXg3!SFXH3_zrr!-R`lb8v!nLX{|P`1Ok_) z-LI<2V9+%dGcHuqS^;}q(a5`Khu{7v2AD9}!9$7NH&tg&%<-7+L)WvNbE*M-=N^w? z(PZ8caAndf33=%KmnD$vwK=ID2!)-g-mHG5GL(XAH7kWmT&RCaksqu1Y^P#2z}Ot& z0Js9t0svAPY3CWVd1}({Q>RYtMy8@a?aqsl@=RKACZaH`X3cyugU9TAac?Xq_7U&( zhO`b)nHKh58gj4wGq6Z$Rg944Ei5Ta@Ji$y)?D)6r=GlB;p$15%X^gN)t($p-aSOucem z2pKr>x43#%FVsw*=Qy=%*Ij2w*1I36az+$fGNVW-5_KE>0?Jm-n-yD0xU9DR1)}BI_uU-Q+4uC&WYQKUo5qf`Yn_9CLK$f1&y$w@s+%#qJVevW<2Uv1|v6k>IHAXR)VGQ z;VaK_9h47X`WkyX$D41@OV=bU4;D$SGUKnaN7tVc(ozr__ff;1snbu`Ds<8|1%Z{F zRz}2Kym*nH+<2;tAcoDXlomM3-x*~aM=ri^z$lk-YO&NMDbvanA*s~zp8{|#=1Rx! zvF;+evIN!z6#smwikj9a9$#pbo>Ju9TC(-BuE$Ch3^2ni8uZ3)Y>JX}J`K5}bI0!4 zdjQ0Rni6L0%{9~cu>@%uD^o%_7W0(S$HZv^I4@TJW8Nt8bGBY1K zPRL?21Y!(Dwn1(-O!zZYXE^P$w?}s>Zwx_j$=}yi=Ng}}^T1dyAtp{vob%)F=9tDg zOVtjP;gOvA^XK0Tz4L6IOymLfgUqshlYvPCq^IW3H~T^}vH#=d<90|8*vx%)&7cMi zX0N#iv2G$nnB$afM8g~;NjT_)(q*#`p~%qfG3AK^kF3#Y)#}QoAx$#C8s|WjN8Lf4_eH`u97- z0;m0Ey7mkN1%Q{9+Pccj3Wjw0 znHj7g|I}-~SLebu*xa-AGd|nQ{uog?lbXGmIMm&IEM8HtnV1B#FkQwvU~MHkm~UX) z$Iw|)PTa1HdMTy?4vQZ*D{Tt3rIaPYU;e?SEUWw?bZ{&`3W0yrnjPc|ZO16tESaJ}!1J1=aU8nXc%e z)aBke44sK*;!LelrChf395Zgy^FnU#PfaE19HQBjU6sHYh6qlu!=LiyS)&nO7gjW9 z(VSSiu}Dx_GMVHqWYp4U&fM@%bMn~4xuy2c#uYNvbDd=0HD?LVeD75$O!e%O#X|;vL^cSl$Qc)4m z9dv0|cXsvZGt(2(t7-c$U9(l1_B3g)=iHB|7 z%W4B)V}QT18YWAn)|Y0~3>WL_MrXl?j;g*)BLo&^OGrdWYrJdIL{|0i@NlzhSqx9H zh-IcXI_b=r{#xO;4}dHy$OTa(aEX_Ul~x4=EFHHj88~X6aLKZh?oA88X`51m3JvLU zjhM<7(41RQ*-Rp6|7Vl=i^Apf%0tj7z5(o5Z`WR8|+6f z|6vKF3u-rVWOQok%(m%V5>(F{Zbm@`eeH+^;rf~+nS(?3E?l@kww;M0mZ3j5v7a;p zuQi&ak3=jtDKx9lap*5)5kSJMWuf7qvnkj?(+@00Y?3M?tcm5>z}S0&m{#QiPIy^2 zw?6ubw4|?(h-p=gp2)sUn-YLYdBB-@<^eW9T$onP0aru zWRe;imx6~3xdh&rG-=YX5+zE!GilN>={to8hWQ9`RHxy)PqG{~VUjbjtumHl(`NoasEpid4pV7}YRX>`%XM=5&O zhrRnRng%TK1%J6~>Ttvinjh^>jL*$&f~4&8QQ0#MZ0EngR{7{8xfb474fOO+$isR& zU`L4kYWpPO5o%Q%ODx;-3LrlW)j8&%?Vu7-mYNl%+OY$4MHA=~pB?4_BytyRIdS5| zo15@|tFD;;++Q!kVe3?t^M9$Lq;9ewW*YC$j~`EAZc6jhWsaQN-Va^ltSiaX>2Amo ze|;|RbghLX)x|V5i)-c8C+ydrKhEkS^{+D? zBB^slITUi5vHFhO>jdpHIxaQ0fEMCA1~31TLP)hj?@_p6PQMqA0=t;E%uB1bvM7QW zd)rnzlDr2E(;2?_12x~<-Qv=OS?*Gurm%+DcAfOkS^#5Tq6;=!JZjMFdt(_@bLtb- zyu&Wq5e|gh*0v4jj}7LmMo?;FG`-&5_Gx2N{IFN1!Sd`>_|!IB+uxJi6ilSxvwTip zGKdEKg4->=pVo?Qj_(`eNKqoNqMP3g_T`8+8J$!;IMid&zMmGNGbtDQmBhNg4;H-5 zKP|O!*ZuO47DgsZKe<)F#`=^CVbjyV($bk0Hq2k=X`>!-1;~e49zU@KNM~ z&XlyP2cIzaD?5EqkYCpGq80eWC*NeAIaf6|Iyf#@oGNX&lhYqpO(i)^h~Q)LV&e=n zvg@+Rho#7A4w`#QxwJytKCy44@_Gg)Ie&h|xv*^6r!`w`0 zg4j7{@(%A4v*gNwzVnvl)3osdM(v6)ncVLgl=ZRVY5uP9UTI6DjeH<4{0(LScH>| zS^TaFKW}(rs0zg`Mvu&3Z2r`CQ=8K43q8dng|+2(q~$yXOg5uC0p0<&(eX-D^#tZKqay|T+j=r))-rXV`G?f+glCB-H_!g~ zv1Xr~@fFohCeoWj3lt38zE%!`LstwYZV{h<7$IUMICghb=X_f0&Ye3uFAD-q;@Ds@ zxJ?__4;3pGw^=qZ*oyDc(xugGu0hZ#`Ib93N*Rckd+zhd%NANdk%YHGy)V}8A>0F_ z(2uTkVVPf=_`IR$B^NdngP=ow33Xw?*C?918^f!FQ-o4{c2QraFfyhU=REW0ux#o~ z-_-#RtM;z+ukm3XLVQ)wNU->uZ^XtZwrO@zyLA)62Z4@=h)j))@XBc<4a4Cg!&Fo_ z9Zr>`li_Tq$Z;$pObd%d2n8dVFyc|5G_Xhyj0-|8Lcxr*MDVlvRE(zqd82q$OgI`( zjgDdnBN;fNUCxLz%*6-8N{$ON&+YR_harNv6oru#zu_Vjb&(d}ao13M$s?s&n3W(JcMI5>epxaM6 zeu3g^lokmLfg}^mG1>ZOp-<4B0&lVG=K!tCV}+Eiygfn-_2lz?Ho?6pHggo)np`#K z^EH2y=HE;>D0}1Pp{HM-T3lp=_Lv{0mof+9r( z1QkIAM35?|K|lmVX-ZK*R1_&H0)m2sUJONg4INUbAwAid_j_ix&g?Gt-rsk>|6hSY zvoq&8=S+Ebr<`eqMl#!JZRN}YyFIH|!Jx2Idc!iP>Ja%z&%kP=B-$WZk1%{LhI`o} znw~sQ&eXrKWar0cq9kkwByYC1!cNa{46F8dLSg&(h|83D`w!Mvl**wB-uUlyO8Z2rPd1nggJ8K4%?lw(l-4%M{FxnVhQ{iIr!wg;Qe`&~ zKSeKrmBy&$3!O{N2ri{9F1{etUu4`0CBt zwS&F^W{fe+_;72CcmoS$;21%vOiT_!dO+-ZJ1F@ud`~v!>?Aq@T_LtyB^u#wz>FWm z#gP{yHlO)-7w-dtSpxZsKeOk`OJ>M;=9uyecZaTEcJ!iRoEZul9G^JVwDGdw1VPlX zWb6IYc^d5CuHOrPfyej^Wnt_$hyv#G6Y}*-pWE-PB#QM*-j_+@QWK=p<2W)Q&Ue;z zlN4EjM{Wh^ZSN{J&vNANJ&RNF)IhoH@Lt-K1zW2!^xmx`!UOzr?Ab1=PT+SY>QkI9 zh7K8yd$Uy(mk;+#l1=iTRP>bUv$Y|NbVlnbfbm3M=@>D&i zX{WshGz9B8v~MMDEAS}t5a-ds1Oxvb{LHQMk@xwoE{xFnT!Ka~%4KQBmSaE4>^Ue|w9yP6KAtENWkI8lY4|(-X4BT>LZoRHm7sDtxu2SD%hEe3AO;AfH;tl>Zkz zOMb~uW@JY`43%4WB>f=_)eN_zKjk4l~#f9abxN> z@$+@L2EU{D#0=l>MuBm&qm5=#>Uhj)f+U(O~^T{aJG9R zK`Xf6?LUx;T}?Umrl|wZM~veFz%lU+41%Qmy@_s^?q;FaC}Si?%N1~2b=-X{9wE)K z`U7r>`=c<{d(-94I`*-?+^xl2BzGsJjSjreXS$_t%3}x{TUtZ?T}{kuy*F$j37f`^ zt6>+Eqgd__Z=Nt-SLjq)npOqaq3&Z}O!tbv zqZXmZ@u#|5V`&y0p`;YTXV5r?&6`H66 z^l&xR)V&G!;#D=@BjFr*^LF}M9Y1BOK7+eRy#upG$|^tCNI2fP zNqpHKds~7?@R#6^O5&ZO#J59bjD$39+&IrkV9ByVlkF`WM&P(f$|UpWAbtl_PbbCl z4-nV2TS2Gix#J=a?~Wc_)k)@l@j>9VLFb14P)SCmvx}l@Nfm6qktZ(RPQ8BO!oYkT@`xH$(AvOJ=VLY9{v0pT82Y))<@0zv|;j$^( z9aZIX=p=^&dyOBiQK6UgV)O9|PYcEYsT*!;f5U6KC-4m&LpO-;>)}qqL<3-aDzFPl z_56GcM7e`p>K}cTudMIS26prjGa~z$4R$144C&ZHYGd5T_w~$^Nml6p29uI+Y1HHM zNT%R;vYdo zYMStxQ;zQh?yM7XZP$)Fp_Acn5Lv~-dh@IuHk?z>(J<=3Wo`qwm zwp5{+LH@P)VYo*1(!(aB@)YMxDKs;P?Ig$4s>gvXH2vzcXsLU5`-7TSHJqz-PizMY z%#+J4Y&^e?*4W;o7#z4U)p}=?-TD?CJo0uR?DpAs;li;YD?~4Pj+zXF3ybS-|L)@f zk@-B%W#-%Oop8r>!jPV+9F6$hw`nsX zN=S?AIA|Qi%8Twx^;LTmL^zJA8=6D-07ARCx$R6mV#`Zq*M>uzYT)KsJ|!^KiG}qrW z!SV5f>&nQgXSsx)zvwEGPH{%7rd{jPXW4B{J};Jx5K=LZLZBl~aCIi85I5d_)3%z> zwH8I{P%6f10}KNKuq%$uPzBF$ormXj>Dr~=KA57V;|3n*7@YVWG|d=;=$aj8w89Ww zQyC`Ye4URUAa|vIPDe`aF)x;Wc`ZKUxeOQUxIFW#um18B)Yp=ELU)lOJg&$HugJs_ zI!{DjK<5LA)bl%O!`({tobf2#tMYWJ@i$TymN0o`o{{YcECa+6HxJCzq+pyk5TPd# zI;3*5bc%~`O)j0+nFVMtwd)`eTDfL8B@gBTK@LS2?9N9xkIW_GU+-Jsn?ShJ?+WF}Qq)*qxsz>v(8E9zNA0mITgLsE8ATF(QppS_o z{zZANLH|^CZTT!Su#3tMAh?=C!G8mF`3v+!X`g)Z>C^>2*dM_B zY#zW8D|^d@Y^U@kZ%AA^%e&uRt^uO^53y^NycB}=h5s7)s#rVP$w#aXj=u599hpa| zInAz07sNVoKkO0Y&SNMoRPb|ZnyAW*FeXN~IlnF^8?Z=c*y$hOKD5>e-wXcVvFxI| zS4Q#-{FPf-j+JtQ`PUlrsV!Vsq1BLKr!jBr#vTWBYHZn;ytd;5JC5oF*e;jOnn!n) z2l3fd56omf_Mc&OuKCNMhttwj?|42ra3C&G@yK8MEtfI1&dbb|_rZLThJg)o=z_OB zpacEt)e~}e)<|#g7JBQoP?GIEfhoqP%XCMzra%3Pq5a8=SkE%bsr9Ic4K2W(VrBNn zZE`}SJ6|D=jdiP<5>i_IZTn%($%^#Qu+RP7&K*dY=q0GoCW5v(WlOvin8=Oc} zB43dqQW~|G?oKsUARK$H|EP2_ubNa>lCOW?JM5nCFRA%6#%+kfG+am0Z33LN_LNI!=a-~h_@cB^lj$$Vg}MZr zLFvg?^=R5+=?gL$bWGExnFPnP)@326U2#{Eggn|G?xaRHI|L+eO&U1mH}I%|a#8E@ z;QaZ8{KLs^>?bWruQon+V;Cvx+v$M)BBg+kNhsi}_!PpGb4jx@R1);h3ib%>_f60Vy3Y^mm2Pflb8~z`X)8CCQ?kB^ zcA=3sRuq+>^nuuHh4!Kwt+yUF(eUxrsBgHaf=~oCwa?xF(hFj5dW$u)T7hR^H%;eqMbDE5_Mob(dcjtJ-1&VfU?n^MPqxJkzI`VSIBO7BWB(1ay2 z!V}za7~JJc!;}_|Ll4~ldI^+_pqtSh_Htvm<+Fd6E|uM2Np9=oR@LY*73_V0*E}54 zPAHw%0=Tc*#ON`p`&#mVm_^>yku=1>l8@DG_c~V>_Y_jeeX<-DK3#6jTfA2=lWg|5 z4AGa*ozquh@Ok6g#chQSUo(hla%a#&(W2h=f!;@g+E|Q|r`RQ`ZIdWgAb7k+@AR>P zlBXe(-(8~Efl(+DF~qP*rmr+s_s-2`hUDi~WKAka2aF;SRfU6Od4cIYUW@W?^kAAb zGSYhr6J*^*xH874O$Al|E8&2681v17L%{?s(knup1}IVz5doo-M;h+NAQ8@IYCXiP zqhZ`qpy+eI5uTWS{7bkuhRA%P)5W}U2Tc%*Al`xzP#6wOl$;zXPbJdfiA8d4C}^*| zLqNC)S)B+)`a_~rBE5t>^gJN_H%cJ?W3#WrcKB7Wo43yIsC#ZjrD$Kdu%>&o%&#jK z45<{8?y~nBrZMA$K!NC6(zqC>2B#P|r8JG!t}8wIaLTxOrpY?=D%APphi}oCO`A4} zhUXzQF>fX#nMtvzC}*k=Aua#>bL69>i>4_lu{p7v)(Iua2gmO@j3$Gnp(^@*iQS)4k*4KwKo-t9eiJd>G$8^^56`n zMP5nG8P;=0W@hFxuXSCYWl}(ybU`y!vQ;!JoC3?du9)^4U*;k@mU+36Q?fC-8ED`6 zpKbh)18a2|BI}#Jd*;lVrp5O`+JQww-9~+^iai%jEazuP#yJy`vGF_^qb)U(T%;Vi zGnfaZ5o1XaDcA=pU$U@ge{u%nGc&haoy$JAk(-8A5CN;d^XzTpW`zY2ltx)yWuIe6 z)#)mhenR3hGk5d|%M;di6EDvgCq#H!GU-bGCo}W3-uW{{d7_PFxR!qwK--#8#PNg$k^q^mQvFd%9p^-cKd4jWV|#T5=Z*Lw-NG z$1s=hj;%%Vy{OSl_YmA*IqoYa>G&51y7FaVPQ$02myU;dZJg?5g?Q);hp^Y)<~Dtu zd3{AMW>DE0BH+P5rgf^GKxuoE-Fm)p>()_NwmmVOsd*}mR{A}b^m}(%Wbj{L^DQNc z=e11pYB~kLTC3jaR5fyvEWyDIrca-a6+)Rx6Kp@366S z%P=4hoT~%|<2%8!%CQAp2sVJg4#-_(I}fnSPP%s$ey2oNcL~e|n-nEwFa^EZLr{=j z_nMy8nS-&s>4+-V>O z+V>&O#rxg`*6iNBJAcD4E$sf@4GqYjFNS$T35!Vh+l*JOCpxFmt45~kp3&(1ToxlC zp=UAEFM3maDl<+pCKGO@JwB>>$JKleUTOPFzkkgtmi~Di8ilvOFqA*sPs4Jk(0vx3 zk?xn_yb;=_a2c#z#0clz!|q5>?=uI?@#%AnN!^NSx7bnBe7S%z=bU%7MU0Kn_2eIP zhi!Mhg;*$k-k9&rv5K+5j_9Un?0gL)TyHZ=d&YrHXY4>hBm6pJ*Bnr}XvFq}{&v;e z%#ICkU}0w%+n&1nbDVF`ID#?R1Uk~Oz?!i=4lzP1cGz{1-Ad6{ZKppgVF;A#(x7#h zE-#%@#caN!2N~;O2PI$KODw~0uswvan~zJ}cAy1geutys?o@WImdz^r*0WhM;Xw!` zP<_Oyz%L`Xd&E^9pIWs{g7bX>U)4$00w%g&{uRqDfYgvCO_~hv*rbU(X3LIlGTkUO z`(~VF76W>}uo;w|rFmzfmqfAx7^$Gsz}=b_7SZr*=9up8lu^JhK|i;C{d&%$HahuR zwQ9u&uf<~Bn5ib)SCkGk1L7GRY*x2ez@+Gmw=OnxVYTnj41GLR1d|DedpmWGfFiwc zm%=9-c1obXG`0kJXz;FEG}Cd1n2>)i6{olIqiJdSc&9?)f7j^O-JIZp2pI_(^o2#M zJYoc$WVyKm_mMM?PY$;(f6v=$5wCJr?lWm`5pq0bTVzp5mkl7dJ?B>t+HKseDGi{KDf&7Tejm60MCDQ3GI2*2wf zLWCiv^GK*3aBH-gfQ8#3$%oj~lvwy(#JnR%5)RBSl^pXc6h!Co zyBhKOizx~F2M34oo>E;hPop@;yRJbr7&}`Ecn172LMd#}4pJOn1aNit1 z105kO6Wn@2x=Yv)t=(w(;6^n_%M?1zRHi;F-lFGKni)o~)(;ChPE!|}e999G%;j&$ zfn(ZJ{V*-`KgH0Slm||hMhr$*`>hUjF#Q9(Ltt>t>z$5pKDxTr*%SPo|M+f0Cg*+i zj=ZcGOI+XJRi6qa^Zd$x|x2^e-WLpT;yG%yGy4QV!r)rq|z_vJe9t=Lv((*yNgOb#PN;pzsQ|m zbUb%{7@~{t!|oQHpUgc(Fa6$oM{d1mb~>bt^*ky1k(obAR34}>TN4mt2`W|*eQ3D# z-+EwOIkK*KNI4Iz{>{tZG)K4F3nO8AH`fz067ZCVP6G~xy?WJhzlh^#O3PT`T8mdDu)vKijKwNlzV`cg#&vgz_v#&PJC30l+@r_m z0!^0M;=D<0O*0Y_9?Q}%f1Mmib=s~m6;iQKk*^`OnUHP)>36`4#E}H9k1ul1ze~c% zEfG=r%rZO;T{Eval0xby1Dt6NjKZDJ1AngJ6DQ)l`7tB$fr_(jg_-$&gFv7UZyAXVYLwj9+j}V<5^PaGe#3S z+Em@gFSSfK6-QapM=FGEiXZcmr0MP45Fy!~qucgOP`Y1UjQ1uj`+K?ugF9zRQFk4EwASSyYN^b4A9MhatG9i6dad(_0FCC9sT@o__MTWza5MbUjBH3QyW-H}0vb3~f zEIrr?NuCnt*e>7t!{Z1yL%8-8c5S4j$O=?j&Dc-gGn^0q!dOfXi&OICOk%5*PgcV3 z=K$}6hQnHqr&ZE~3uD`$W?h+ODhXO%s~SbS}7G1$!GntDU)(-@oM z4Gjm>%U=BNWa^m4VrO_mWCCNqIC&lZx1dp9?%*IAUJNO|hgGdLmSwD8rmPYHR)yr7 zCFWQHvcG&CGQ4}F>GxkkebkBG7D1}jw)G_DS3e3#xMw^(uK|sc8 zCh-R8Nb&qdii~C2Nja_j1Wa~r`X&6Odb4ZekKW`UT*l>oHr4Re9*guxj~!dtg*+hq ze_H~)a*B-bjMJ*OB3yWcQEBmq0tzY6#00g1@wmbXoLh{OI3l({3Xk(oxClg=;!eo$ zo8lf2Pmu>%kf1Wc2fK?Hha!E%BK#A{#lpSC0Qvk1o`q#8@z>~X_$(p(IR4q@n1l0Q z>>bBzpPT#GPih`syO5@dkr$TdsTlUC&`XczDSdz@tF1)k7<#@oMkOy%8n22Sq~~g2 z9rK^bH1Qb~n@^((lcMiI@fsB(^C|s?L$~Lc!yTKYTLMiu1E~Qv$@V?676@IVjztAS z1HQe$eNq|6ik=r@%798&ixqD-vAW5tQCgHle{QhC6YGJAk{YDwCXbU&^538dZxtXR zb5e%tF*yGA&7{2%>`3=ZgEYa>B87G#!40p{vtbSi-HVx{1)r_LEXxZnh%DuKqnSsA z^+|=_xs9XGx~tR&;k%bW`6*|y@iVr*d#;BjJ)Q?F@F=wPft3|0{tnIintVWc0i=ZI?P% z0IWafpNBh{aw&o@Y1$Z&THVlYKc_$>&mrx6G4c>%U8F*U^w+d^gE!#Rcz3UX;BqVN zAk{Vpxy48^akW)!BM%7Ow#7KuXo@F9NF%g==e_H@oVdiDYNI^``L#$?yQUTj=k1-T zUGKI}(+0Q&E5&Q)iV@rmq!t(>yw6x_&OM=Ju z0F1jt+0bn0sJTYdmi5->Mm^O2`$=Wv;^)q7Qy0#im$I=GKOg@W^{xx87EhxR89tW) zbz!7T9a6Q<5iaS*IAsFls(C`8SX~#_+8a7X*$PjDgyO)m@$T1!Gl#B(ly_VNapCIU zZ@kdDNMStwkMfAHY;4@%GIhpliB&y7ofPF~LjxQoEqWrP=}N0nD;vk^NILsb%}iZS zEl%#!;};0fW1Js(RMUwQShb@lk)|k_ZzPonj0qrT{9ls$cO`8$i{E^?t4>n2JP7}{ zOQ3MmS+}=bGfpLyq-uZ7S96?Y>_%CMjzFF}SP*@1eC>F~9#*hNceC3I(8XBFGUO$! z;KQ;I-rIdFj$L{rw=7pRjV%f$!LPvXxLiiC=mL{};==m2?P)z4EAfewtQ2A%08}ez0Dj~xBWMcY(`ke@< zHtvgt&O2Q_1o`dez_fkJm%>@8mh?>Z>O(ZmL$K+aA{lY=iQ&!&!c(9@|k||JgA-H9}!%k6WX7;&;0vrBIOenfDX|NwblF}MZ4HF^x?Np zP)#h`FonePy=0Bv;5R4j@fe0bf1Lk37b6_@1zWgKb-3bo_`dTMd8Q~SSp1nU7^|t~ zJ?{yc@(qTvSOw!801CE#`r;qT4!T;_DzG>*`p4qMHC^VC+!(9QDpo9q8WRt9V=Uz< zF90Uaqu4)P%NyIx*C)|G-uC$6NsPc4J@c$vmSYPi!`_qZ5otZa-yZ83-GT zG_ck#td&(1F1gvM*UUE)mQXpqx!4I+l#{Yy{oWKAtBhh!>7JK73?uLL#xlmQA_~x` z-%|rLez*dW8e8%6z@d91?DQ+TeFq1T=% zO)wtSCackP$)NrC5=UTnls-)G*K}$2`mh#nAC^u72PDbXn)d3ikXcfWj7U?;6Bt+b zaTp|a(VtW~s$FU!+UHQE$_ienZ5m!cV*i&0vTeIAH`0!L1RZ9-I)aiH3kh7aUk1Z- z8ar1+VzvTd#~AZ^jX1+pEa~?8yZ}{>VTsu-C6cH5MaF!j$SW9cc=w|S>BM|bMk$4L z7Y&R^f;x0~!WrKrT;ge@$*zG=21H?V@dDD>ZX*oH*Q$ktE5%8bj$0m=Qh zJk#_A+B_lqJ3FPg|NZTp&e)+|j<`&woCQl^r{WR}s~@=kl@cgixx>umflFSx8Xe>< zE=}>UR@O|RTG~uZQg?I?COJT4rpxQxehbzn#UZ8V8)8}>t09A9~qODAK;+zZ|q|7`}`qQ4oD*pEsVXvXK$ z*5DKokD+l@KFNbqLR#AVwy)Uexpe7^d2Pad{Y8ohk&2{)iEZ)e&Sm<>KL15`s&hv?-$lnGfUOv zwx0pBZn8<1Z@hmhEuMddr#L<98Wfu;D}I;tDtE(1+(qtg>s)Z?tINt|rsaqxEpsr* z{24|y-}hx0^}Ih$hy#1lsmJMG9iV<#!FZZv4osXP+&>n*C6#7|58NG_XYwh}=WwO9 zLNbFPxaeqs8Bm_JG%Y$zp_#!?JcjiqHb^^E)bu}i{%@2(o;Eu%#=GF&XZrXIoXH|= zeRQcB(N^ATJ<_Mo2e=$r!Se9)>pll@9M)ILSe_+-x?||@5SH=OmNC8#X?hM_Y^SlX z$lxe*6X$J+&hrA-CAT@&(&+-qg(RtV%mT%^LPDOw5?-G!Z8Ud>P`eFyP*qlCc zm|lqXfyk$t=DQYdz1Os+uBb9Dr1MjWihj2*MrnjErd=!KkA3Y2ky_f_Fu#V;SKU7n zczV{X%*!u$BrSX2-}$Cq_M0`mYB5z^20A@}Iibfbn(27~Q06dFim{<4$$D}O#`$K9 zxh+f~4?Xk{V%os=XS4VfPqN>DlaQx1)=J?vgJq)G22TqU7#cHiahAy{J^QjaYpP5F zU>P{-WmA5<@n=hyKEIzab(B-%+XETMxp3(dB*R<1>nvs5$dNcNoTXi&EOWFSQ?4kM z_&kC&0xbGf@?tzodfx)8Fm{-b=AXnd#wQfZoM!7SEXyBk**lvl({??Tg%fvXIDUwU zDLfTdO-*H6SYq&WW-O|sU+v*!yzl%~R-#7{!2eU+FK0VU=ZHBSEy7hUrTR=uKe^~c z^fm2585fA1QkW~q^R%Y5@xTOWlBP}d!J5Tsn$qntIJ3VTufd%dG^UONb5%m z9l;U&x@$f!mAX|omDwy$WPq%tjsF~f->}KLufpksgb(<11!jJ~Qb99Z@|1R%8$vzZ z7ELSW0D>QNbTPJQ@eV_7p-4x{+g;OIJH$%h4ryaJmAlV1O{?g@3ZBulwFNjKWDqV( zjSxLN6R-M{rkx-9^2@LMi0n-?sm3!qiXV=b%M88q=U~WI^QypB)%B}f9Lx{Ab_w*4 z?8O7mO-7YxQ+3}os+}4!0=J34IjTYq_QoWFG%!c{S` zw~n4uzcE6ds3zEJZBJaH%9-KHvGk1TSD&A$2jdl~YPH(yDD5HfPosm4TCDzMnkKiz z7@~z)xLM0AGrx9r5@H1!0oR)u;6PnV}hwAcsedBv`5?6Ewj^v+CzuaYTh!Lp6vth z)xjU*&P5p`@z`B+>C&YPPUr4hQwyGb_`sgKsP)+JL!+ejA+*)vefws#YE_5~qVxu) z9X;K2ce$8+S!VfTr4ZdRlTmqg24)qIj1_=M;9H*o;G+;jx7O2f%y0bnpJJX7{XZmr z5C}Z#qdwc8l=@-Ak##=|_M9Dl_VP9UN9ESJL=$UyC#CL18Z8cD|jZo z^O9RaP{JtP>jRPZ5#;<>jdP3_ zq=-M#REx0<@1(aX+abx9_n>w`A~*um{pS)&Ci~D{cU2uh770ZoO2@!tB^8^i@^?TRmZ(GGl z`i&iseb_0~R;Jh?OknmbX9p$U3>-Wn5gdV4G;^dQD0ydi-6$(@+`oZd0i{piD2nC2 z6G2%@pQqcbp`b$q-U_^lcaLEOQxA?g#uZMo7Xy2Xk4RvS)yFKE8xy`wicN zM6m<8QI>bXQtH{PlJ9PES(j5^IZ4UA8u&K8u5Z??^+9fqws%i{S(< z?vg9GutrfjL=#+4%X0#{xRYjfQ^49O9J)TL2*!_Uuc#F4Qpw{`oq1p+?CrOO{bVss z^%=sGyk|VpqQ{>PGcXI4q=;bF4jll|Q%}0Vk1$LXF5T7Rm?*4OIw&~WkvyLuKHW)Onw8xY;-CB@j{}s2Rgj!~+s-V{Db&%4{p-4v=gjPLfCg^*Fw&Q2m z!XXlZvHBXzkQ4xh(|{Hk6+y$R8|*oqH#ziO6;ll<;TVf&EePk+u3G{RJpZ#2C|-Gb z0B2kWcDUcqcKX_S{2+@Io!!pDz?t^z)YJob_b13dNjIz&S{XvfoGG|!^SV4w)cE2q zW2$w6deT?UUG%0NOS#K5i@O_!ASunic>d*{N1xW+ zZ|ju`J?q0qxq(J^x20T`T+XQ(XXrKlTqa?iHsWoc*r-7BO3eqYcv4a>G z7$I33h=Fp8S_^oBzY(;GfV z9+7(2%me3KC6@0zOM2c#)d`>D4sjodFuK&Ww7}r)!7^I-iLGS5L+Pq4AWTcy8-4zj zT7}l4=@oI>SAYJ=T&*fA|Co=?^R9!9427dq1n)ww)bI4bpu%J5*+Q~hRmy7aqsJT9 zT#`oB5-6|@Q=4Lbll76M5X!Gdl^9hMO{D4=-TBkx4%Jn%2(#0EMMemdn@dmm`;Zts zs?P_LidN~+zDgCji-NM~!GEF){J#q>yJPTf4sz#iJF$$}3G1kLl|~4bGd$`o zMXJQm)2=Vm;QfwKpU6nQOYCStAC+&@zy=?vN;19ugb#-Gvg-K9x zpYqHZPgCW0-DX%!=`VIj_F;(BQl?m;H`0A)dGetrHO*p_J;f+J>|@m?z&gv^_e>~@ z)t2U+IPuu_H%mL}^4zbO*=#13CA=4Ah8@pB4`YQAcCc7_Z0zMjqKWsg?T0Q&<=cVo zV9nVb@HI@J@6;?-rb?YVG}`K>n>=MJinKTJUyB;LhtfAp zcI64f|52qiGC6Yo#MrlHz4y$9+BPO(jibO0_Y(8&IXXF{FtT`^(yx2^)j7_T-OK(0k%0)mv400FXV~VG`L)2D zzk-9UdNf}KvB^QPyl=(oOO2aZ6w6axU*@4{(=C$esTEDNlnHGwd0{*q69_r!#%jS( z5?BKr?Ogln2o_0eXZaZQu^2VJP#k6-Q;kQRJ5rPP(uVE_q)*CYK|HO%nM_v+Z`yo4 zfcXBFI$|9VTN@q24o^9MUu#-|-gzv5qnkv$rb<#t)1n2XGmdszYLSJ9$M^Z5w|E|< zv&1=AG8z%`-$0|YUF}Y_7#)jgn@iTnL$zjex!HOi-S7j-|F{I24jW5Wtv>UbBg zsdJxJ_s4&R-+Yg#-@`R3r=>`WmM~XuG1{qE@cciGPawx8&2Pyf!HH~#l^j?>RNbnf z$izzDQt!$#5kh{`^f48vb~ z?JR(6d+}$e6U(`qrEf@M+TLeFbI)T;dbQVr8RtDd1O6tN?3y%+JqP4w=j?z&cQR$u z-8q*2vEG{-%IL?E82Neki+c2x&$GSGggE^t^!;p3lIedLcg)EdHxZH-my&MiLPV@UQkjTwGlMFL)d8$(HSlV%DvC+_3B+K)8+B=s2zV(Fv zwyC9>`5bR8{{Rk$9cz&aR&A4L#_?zCpDkqUS#fs)s(bfg$8TT-c}JPs3_Xh$;(PD+ zD93)$dc^GrH<|5cC>FSC*Z;&mZ*>>|o{qELu3nZjzNoFR1r%ST*IAYZ&nAx}J`E^n zn?HtTaHJf|k;6@OLJb@O{iuvF8W{#k(V^D^w+t?e0o&tl%75146>wXnAZ0flWliAw} zmbG~dpks%zhxdkDxuWL+VCBT1B4-(sn*it-#ExMiAoos2r}27Qa--OKsQSwDbc*L0 zd!q0MnJhX?5)pyiX)JOVW2Zb@Ggv?w+gjEwg}nnqIp$qQJ_E#OLw0@SdFE1f)8i8> zh&xI91fibq=87-NB1WfXBc51!#!f(>KJ!>LvyVkThq<@kybi-S$JUiAH~fxgJ-R4_Yx^Q61P7FB0RDbj=LX)bAymEoEzf+s(##I8E`2zFPan_ zE>tIA4DW;dR~J?K%6TQlhy%&|ABy1;>*&MZkCl_VoUixk(R;%9&h zw*@&AA)v@`<<4s)TW2?J9!1cSGb4*M;&I*?ZD0msiRd207ZI+|9t8hyOCY#7KNo#? zUbmj?tE@PO6!@*s0hamDxgHZCKriFYjkHjCoO&1j9EluUv-fQK9 z$12BJ3wuJ=2Ixws+8*Y~FCn#l!j*}}GAEq_C%=Tl3KLxUOC)HQQ;HB=nV5dy!1=>C z*+A2tk}*>E4$qq2ZJ`g__T+@8JyqD$p*#<0$vz!d>}=6~Rk-h^V4fay`DfGLDPPtjQ{9c1 zB4zF)Dq8cr^}^iPTSZ3erfFBI4P(N2Ry&WkTS=qNnG5G3(Q|dPddcO1 zp)=6eW8wuV93ws!ZueJRQ6zpwPuwA@0 zw=D4>BuXI5lV5ysCBO!F6i3tF@WQ~Q_gBE6mVai@l#{!M4n0QyP%v!Uq3d7b#AlNg z?C~Uet%3M@f?i8dunjcIu-IcR=_^_12D(-!DCGh$}W-PnM-L z#<26c6j#PNZx_)ZMA77iJ{a2E=xjdNT%3^TV*?BNgWl=jBbMuw|K=(mk$)!n*B42j zGjTOM6E`qD0c-kud0{nT#c%I{)tZByU~sp?U2+X$^hw$`+|iB0EGxVE#dh~~rn#Tw zr_>y)M_MKSt@hA50nxtX@$8}B$v|4hY3|qB;2OfxU5z*yr(gClgdKJ1s+7n^bK(~3U9?%ov-5QkDsqfRwf0VM}fyJC~0KfT_cPN-1oN-~$#eJocZ~xI;utE|+E3RGWXJOvYjkAKv-? zCoI;MFnlfMoj!e9%%5a*a)F%i$V-?a*`a>XCTj(Dr=ICopRcjYD#;4}&Nf?q#Zx+g z%~VKMunMkUu>y)GPc+-1knG^EiOuc6KiF4s-LHPB%e94l=!eZ?#~<^-`cft@jI{Z3 zoM3x{?V#lA#{3qSlfp@Cq)$^!K4dA?B|UbaV4VNtR|&>+!(phqOEHLL^4?VT1(y<9 z+S-J#&}FuVLs(>S#>aG1kz9q1Qb!nH_zO(fTr0Jqc@3izlSz?D5=vKS#Xbqgr|E_4k`LdI$WO&q97@o?vTNkILotoBFK$GHbpUV0wT z{-2dVjdg*TCY37}_lRJWu|Mw8`W_0JqIW7d*E^aiF#4I zL;Go*{OaaNryE86o@G!v6+?ALoKF}Vj*4Peo?mqb>`#Y?#wkz!QdT^1KLcY@oZ21&jQ@(e@H>a1iH#^Y%vQ5yFIBy zV+NPt$B=rLCV*$1Wcst8P6yjR-&=V@avi@^_VIt0+TNy9{ls9X^&3={VAS_iZA{b+ z^HCXej&1fCi(-8zTk0d0Z#7MlhZQzsjk}!T-8kTygfs=S-DSNu>{5qJKJ^J3Z5Neh zhTo;MoatAe2kBohG$cFoHW!HM)HyPKI+= z24!)Gv&j4Qrm7gGyGwP5f-FCi`hoK-f$UQQKYIco;;@EjA1vE?H`aE%zI62)N>{Fx z<@%hajRa*sRc=quQsy+h8fIV{WvPd-p>vcVRk}tM3??MQ*8iD$W=Ct-%=FPlkraAc zt_+^WTlPc!`sj9}zZ4}$SKv>8I2g89ua=Z5YmG>*v3uhLoJ#3ivK$Wub?y46fJGn9 zg$LEfSEL-IU^8uZUG`#QyXoapc1ZHQm`wNPlqgmp*HM~K)e6a;UX-dIpT*FT9xGu5 z?lVtzF&4`fJnX~#Nn7Q-_c(cpA5`;;{sKr?wx0x%|4F_!T z31Q(q?1`^FgqxogI)XuXRepDq1!W*!T1a_0oHIj5*5S_m3Kq7~xOH+xML4^jE5UI^ zZ6O~0oxAx>7Gmp9xFTo;k*N7rK=Hs7>x-cZ;mxPz796m=rOr`W#tOm1v}4AH{1yz~ z%cbrjT8>-Cs^Gqi9cegWL+)%%<@vgE{W=i(tqhSId{dTi(S2RL{Ve&%30GN)%9*5p zn7@PX=0_5G#WewDC4RJa+oRJX;MX!drZ9EEXHRLDEftCf7Y8*^NM`V(OzluXGax@7 zkI~%6%j+x!aVf!1GPf1N1g`s#RRf(!=?LM?SKjK(n1T~DEfoHGzwFnpPth9-6Cyuz ztn4;ixd1obB6CkjqV_|cLCG4uv0?N91?#J6>%PEc43qGIE>X@UE1JZ0UEucV2Js3; zKIYhmdGh3`e>3Ady$Q7-uL@i$TBF z>Ar$g!plW+l_6L$5bHz;Hrr{#_15I2i`r8D5?hXAFB_qqi9_OaD{E|*WoN{D4 zmU-Ld7%E|Wd6o68zJcZI6C6?e#%uCrZ{L5I2^3N2F6u}yFnBSsF03uV>;z- zShy+|Zs*8_ITSg(RwQPAkx)4;P-G;Xdz55Ga#|o#JQT=LC>{j{lne3P|MOkeA%QV| zsjPOF6B@etW7%Qu@9v`$hJR()Ycsx$qZjRv5CIKn_r?1J^WW+qRL)K%j97P36#PKJW1(_t|bN<;LQN_KGQylhUL>sk8i|kgVWH zYhIpGX^sp#Fvn!iw}d9GZj|+Hx<`s|IUgDH6GI0SPis3a_@?1#fQK zG{KYmJDg_8+X1+w#*!G!bVqdn`>4w*5cbWrCm8cdSm)iUaf zaEXY3URMKgRZS#PQ1w3%vK&{1#zQ<5h*!qp;En_be@YI-2z}o`ghc0oa4x}}8v+_B zph(W>b^?oV(?QYYJavll2#2g&kVA+I!Y-{`fD^%@Vmt>Tg^?aV0>mK2H=zg??zfzd z@kqlhn&IKm=`KQrgffA7Kma2mJ-Z8TH4i983AChNmTo?QuOs`RTHdTuv1H$fZmB-F zz~c=G8_N;x+R2&Au+Uoj(uvi^MJHOkSXka*uO{`N3vuWhK1Rh6k~`%K2XPtUwHNZ} ziaLX>qV5%cvp4_2s-iI=u+DEv3z#uC;1Jfm29 zxqY}6Sg{3IY_t3!i{~HWSrmvyN-B2tNKPwsVLFmg$C5TZtfJx9GwB&Z7ShbjjWSmJ zx9gdi{ET1^Y-=XmmSQ?~xsgL~tXPV1za|c}~k(SmUcmOCYXKpFT(ieEf&9TpI|2+xWBiaSMQ_z(xnQ!ijLO z^~R$@ZtuoAMt$MrsQ40GZ=Vn-Ro4wkv>LTWKY&H z?2z1e+j!6)>=ipC`yShMvXo4@=R(A!DsXky@0m?{=ht5&VI7B9Z8-BLe@u;;MgLfD$MnTpiN%RJjUCa+;Cx+_iF zH2KYlkQtk$fJp6ZCN|QU8{Km8R zIXa(@408WX&nggRPk~Z)=lW3JbhuYMR_J3gcUQNwy>Kq=F&!*(j=pNL>Cf+JiZQ#?fGSwS zYxIu6+*`#aQ~I%v75JOplq>o~db5y@VKTb8p+SEP%(T*meP@#Svk`2OM$I@0Gf&x^ zaxEF#rH3nDXUY<6EL*xUr6qqOuqJA>Qwjt6Q}}G@r9(rpwl~rmw-`JjPj2BKJcS8Y z5fcn$UwGlivsh*EsI1Zo4QBq!rGeG67!}X20jl<9Eskgw=l5-rmABut_#SxvuSy`# z#zWX<(`?LO~d<0IV3g)&+ci;au}fAMT#%V1sI0S+bo*fUoyEM&@P z?7(#BNH`~bPcw%(ATk9)8L#m111V&GY=WZ_4hr7iL1)H#qG`HM|GNrN=@u(eD4E`D z;>6nDPJPh`k@ZO&@SHds1jPpQi^pf8}5={$rb@_yF`aIBeI;@?RrTE5Ek=}Kog ztm|hXq)^NE#0H;8IbR(qJ#jdizr$FfCwCnRVTzBhzrGW*xkxVFm$4ldsM6~@ckP_- z>_Y2sE^IkIUD;-J`aVdZ+g^V6-8^}+I;q0nRLrOG_?}b2P~HXO4u)a1>lShX^tqok zDYww$s?eTG-xIp?A7nJCGg-zglW0Dld=(3Dxx3;VkeFz@U(f@kXM8@D zlI6;k<8eN4N(qeFQbtgkGO8e?Q=)M*XFv7M%-lU0jS@ZD+(*?DhI?xCL%p**LA`&p z=`rg*&tvKeY~0IftXdvJmAQhs)V$Fo^cXKdN9o@d2?FJ8Oqs`YaMy1!afR8%6QsRzb6s?P5(;SdmK|4Ro~Kty-(@`wa58kYTEwQ98hYpi2h zC|dJ$?=Bjm`WNxZ_zeX}0;SwkX1U7my=S#FDuyzPGZ{Uwq-p}J{e?#3q=n)Ik%bFW zn>A}T2U8ev(@hon6T6HoH(Q3VA=~_EWBa)aGJGFUzSovqnixV%TpTNpVO&w4yDF=psWjMocvLb#Y;A#F&_bpp*JQu zrEvCAa~uvsW2f|)e9L36Uhv%0`U|>BsX~O3{AI>Y(de--S)&#DfNHLf)&PrMbe%0_ ziB+X1-0!=Ae$32KlErR$rc$XKE&4s;2`xVkUFa#?Vxqbh#&O%%E2{{pz!z1}b@S4+ zQ}U>okkXi!(6oz{NJnfsR0JP^*tLG>A{SG46@c;K{`Eyf+1D$(3LHwZ{OFH)=`=;} zhGG9iXOqwIEK$CEE`r_jl39x5^?vvT7w+zwn5;$0A1w)4j!mn^BttugD(;=EC6DWu zE7#~FV5l!+FQ(rXy|SEJfUTDc`=GW%FfZhawTs_6B@gl*TW}3*3EfxW%M9&r89Pwp z(PK!<7PNlD(k1MbbfHXJEV`$SrHO6Q9YS%R)^zH6;I~Sk`-wpE%$azBU9RGKSS;aE zzH-$vIXBRxKc-GyvX|1ys@y2UCORB_7!})1=jQ;eNVI$9Y|v#f>dn2wLnTIhihUY{Aj>xF+>?xWdzYuz=YRA#EXnMP~nnn?B%QHUH6Us7#W2-%} zK`?i1O-Om(100x6(OM3nCkwm4;^%4FfGp&Bjk;z`v%==P3IgHjZY&2b8ZL;6XMx9t zQI1WUwl#w$baO?Q6)hllm!&S9!4^F7PTY(cPZxJd-D`y4umAEhVTZgYEzH_6*L0^qUKcV!l_wMld=FKe4CV&0^(>)#iF8oqgl_W_391w0jM;Dfno- zaj&OIu%Bh{S@yPrk`JHdCW&ANLbfRb2OAf0k4=5Yp;L+$gF?JVi(16Ow!DCjP{Jo{Y19{64R>(tRQ1Z=Q0Id}XE% z!oXHfo;-QV+eUHB(ICgxP#6R(G>vL7*+9%U3xpn5Eu%Q}W zgMj-a3`6&~uELpyqmUlvd{3OA*Oi8)JdD?AzrWV{=Kyt^1e)J4%VnA#jq`6|er`K@ z(BZtTzE53H1nuFM_0pO))epl(X^;6}brZB>vYp*#92%g$v!7F_@7C+m@iflk0~30G z$Kfh=1hQ`@y=A?OGD64>?Se`&!!>UEVtKdvY@>zj>;4TyNvt<|$5gL8zrY=aK5yXr z>GYDTC#Z|pxI#1a`4B}NCdaT8-UlMnH0?W=fI;Y?ec<=I`H9>=^xQq?&ectNYMw*a zaYKBfVf%NYWw*cpe{@}x#~G~zW^`?QF4DxyydB!FUlHgDbx&wm+Skz!Ex+QaOVwqn zHpAVF_bcgn9;?$;>$mRHex3OAm?p-#4yqtiKjj5)?KN~^1lK6GqJjulHmU~w|;w$nB2fbjERvk@iZwaN==3Vm#O1X z{Fdkg&wpA1k=S1q?kQ~Sr1HWbgsoE8F69QfK2Y%pS3qmG7Z+AAYbzHpRnTIOw0x#C z#CT-FsY=0YLd59@k>|`0i*)L7@+o4_5n<_&ceequQpH&!9IQ^if~jISmB1_uKz4%l zSfNNng7nI45TLsIguwL8Daq zX+;5L<--c$PP+=M!k$Bi=J)G|F8>f0W)Mo<1;c6&Wn#kCf+I7$EW?5UGf-u0PRSRX zL>Fa|D7YJ_e*OAr87hvaCuG}b=iR&cqLR~#d+nmJ()c|HGv_IBNi<1he7U3$t5fGS z3aZn!-Z2i!L+Z^`H*I1n4=!!IQ|U~)vs9_~{({P+4zeg~*QSPseJitbJ?iM`wv7mOVk$^KI;;mpwzz*&)SOVTND-RAIbN zg0It*(ZV&Hrf#{%O+SXEJz3L!lgpz&w{N4bjE$Hp@9^nk+r4^6OYB`mxZJ@NY&v{J zVfpr3DfTPwPWQ3$HOHLBtZLo^1c;N(K+qh?zNZB+h4|n%~!# z4;>yq3r&{1JG4~wMLMx6T#sfnc82Ia^KX?TZHNAe02^mgEpF{+G2F+=Gm70ijL&x5 zx?UOJ~I^1j}LG_jS@7qiy%{`vH`W%KMbqjj_>)#e7u7 z?Y{K}q|vCZ`{^W;Xgv4PjD}g)QuOm#_7$PpS(22(n&*lv1JX{#`2F^+r)uReK4e1#tA2<}l#oXdJ=f43tCCi&8r8C8%a7va5yU`VUy0wId#*`k z6ZG~cG3zG9#Kc?&l6=-;v((#T?v;|jw-8vX-Pjrxl)?Itk8M_-x~<)FazfKJm+9HB9WVE6k*oOFFP6on zV)~`4ErojzHwX}aa7N%9rJ5_W;DkWWeAB{XPP8D_b3a(oO{$Mz0r$-`yo`g(9p%OM zd$_Z}b$`2WMZvnyEDI^O1=B(FB7aBq3fdN)A!K%x81KTKI*LULnNgjJhM-GzQ|j10 z$<-Zr3tFnfv)a~%BL%K(~q@t6Y)8))`*IZFnSr)GMrepb$|w% z{W3Ye27I7xeaAA^3TaH}U?eTiQe>flmChazvjzsk5O7St0E?-qa~6E!lJkg7LM*w6 z@v9+42U{93bAs^AvvBAOBK=`O4y-cj6w`hBruDh$91(|fXzj}UP8l7nd=lWH?tYzJ zM;!O3w{(|jsASkwuiWpzaVPxWP!~82jfej4M->~Y%kaNTWvn6Mp=|q3At}o>JkR;J zmnya0B?qYhy(nHiF6orhrS!M5ixMACp)N&87x*1{5Ggd%#^vl}mfpcrXolhMZ2F-^ zq|glW)S7-mx;j$EV{@jG=gAqH=@-&J8oaP)AiWaAbH@pKE+vQ%$eI6SDF`&Me*yc8 zHPhPgf{@$pC=U~Y+uHs39P%vhS~tn4`7Ga@c*o2VB@XUKw;&?Pvyv=hA=PTJ5^X)Kdx5zLMQN$A;D z=u}WX=C&Oyu-3Q%*e)9(1R5jE`CtX>pGj|91DItP&)Rauc2fF|6-39Qh7}-aS58~~ zyf7^9c3{Z$K9dut8_+clix;paCe{rpcIF+}9`XJ?(sU;p!h?lsBgY`{&T*P zoE~&`$;d+oI8ApcGn`V0spK{tP21H>DoQ;O1zt^}D_`}qotX)}Kc7_xM`A+|n_EE6 ze%YBjcI<$~T)2(aJ0O@k3nIT`dMQjd6(zw2sWffb``mh%`&ShsZO1+(n2Y>IGsk(i z*WJ-2St)50fh+|IJo^`-{n#ZH+-td>NV+Ikm0PGIIEs$$R!wL}(Dm6f`IW5g@v*(G z2v+(sT(@loZ>LA(ygN9bb>+_nJ1SVYBP%R$B0VWpKA+H(7Ywj|oN{kOw=|lfk1pz6 zr-{`q9m0c@)7_~5`Su>wL{<}DHN8IR6y`!c4wA(PX~f5UaEI!s2*P2X(ag_3@8L1< z@L>KIl3INH7jGQ?`nZKV@w~4r+?@%zRCLTmntX%)eIB@C?*V66^T%s6&s{nKRee=e z&G8Z_Tw~F{X;MS(v0Uw6AQ;6rQ{esn*&^$n+PeTI@7c2lO||(&SuA^=w> zE$dW|S374Y|5WxwSnT(wC;O0_0VU@_J$YkYq0W3hnp3bhX#Dc!%f(Z5>Mg?$f+B(eV95>73G~OM7%sv!QEpJbQNIjgka|c}+-vzWnuz?w|IF zSUooMR;EcpIL#0BCU#70-MTf6CMmrGj=kH6_cGqZ{y0Uj?ButM=41=K?Chj8S!xc# zA)#Q?=x)35N|$xwbC_m*{|Z(JX?)U1z#L7UxX3;SCjxZjYKyeELC+gp#v|uONJeey zJQ(BS^gc31ibK+Hy%Y%MuSS#71ZaN0E{+F;|4|7%GQD7^=x42|pvvX?jh>9we~F6` zN?!x3mtkr7=;d5L;Q6a0*#|#R-1{X#3qgnaO(*sV`V1?K&iHTibRh@UB9opl&Amlq zhjIlai?JP z0#mTy%A_@~AR)qh|0uKm&@d(_>(EEqhOSU=-*jthUl>&>Re5orQA=7$fn#sft; zsrwZ%dK}TU()L&@h|G8}%R{dh7hfw#q=Btc@O~dD+ zAw(E4e&KXiEIJvZRnWvm)Z@-xQm9iWjevd96doJi(aO&-9)7dh*qEL+6knQsFwXK31oWiCrP-})*ekV)C&9^qO=j!3LPT>s$>DV zEPlqa!hShJ7*^{!`A$@GJ4i@VCi<8VQ4M9=L&*6i0A|@qj?1s1*KAB;jttD!m5|P2 zkd*6v9vKc)Z4P`72!SG&zSKPKK!tqUJW_RE1BU#jiMCE9`^h?R=K=k zLjC%`D2iNZl?4AoAtKZJKIc(RT4YM zX$0OQP)UbrpxbRARBUJr5k?m{PhPzfAaB+VE9%8Jl;%BjEazP(o58|4|2m;|@p)Zj z)4&f1gLs4SnY0HB=jwyE0^#^~Jr@01;W=JNtB^Knp*eM#euWe7_XAyE z2|lljjBAN!_*BOR?}aE&43SB|`H|GndSv&G6{Rzm@lNYKFxCIMbaTD zE1qL$Uu+~iWqak_JaZp%k?;vqBBIMySI8DoZzUm>WK#|iDiyB|1lKrCA}fjzLWjv&u-m-;B*a=1Ha}0EcFwVvXwizQP47VV zi2ijEF_d=@#ac*GjeUb+QD3vHNIr^Pg}wQ96Jk?^=ATALACx_Y+>vyET}{YN_!7+} z!4~XeOd{yhZigKvQP3vNGvpqzzMO~2tzpBye@w_V%e#Ws(hLw1@r#W$neQYZ%6O+n zvn751WI@reA03l-kvL*`Gn}!>wsrxFrBMcHo7FzPtounw0ecAbC1kk+gkY%L$t>ub zN^aRbfe=)-10->^LrVG)asl=2XZgN?TJ9%=Tu+CaKf#)uuh|0wKY^B~DbHPs#gF_k zh5RHd76$|`t%gu6882h)TqN!b5Y|Z{qhxFXA>BYWE{dGD#0Lgl__nF{2uZW{XZbv* zX(42LRXIf9-+-fDB7b{%2hVJ>{67_4qlFnhW{hO!vtZQ`8<>;7${Ne}Gr`>hLrPg~ z1*ycVz+12rq&)_ADiaK*c-rW_+of~oE?Z)`X>mr_MPcxWx$)M{60pHkchlGKuM^&@ zV=%q~Ls|HmF5<4Wnl~@#3EiAFX;FO@i^S>Qa0&w10;cvFf=ZQyYB=Y94%>upt$D-n ziL$N186W9v%||i#_Oj}Fy;2EA61dm8Ivrbi@Y`>73g$l{jgG|Q`vLIxXh zAS#EEr&_(4{R}z9ceCWYK|-r&e)ADxJc3kIpOAZfw6<~`LO#^Iu}hW!T7jgeZ|&iU zrjRfpk*LtG@UfvTXm13W%d1g3NACkL_y@;rkr?6iF#Q$r2gA-}MQRIqAqq^cR~iX3 zIg#2+q8&yV&}Z&{{Wy<_K(9igq-`R2p^C^=XqqD zx>m5k`tjKe08FJ{i~wsNfxwS(=7tx1`dC~A*29r*;J`xH9bl@dJ`m(bui9eJ2X^E= z4=}i_dIgV=r%0H=+}{d<|c76E7-cTxgK*PjA!e#boC6!iOnUM#(M3* zjt5_XIm-_i@&ROp83I?G5(!3I3*IwFd)$zYeB!WIn9NmX+9r0+$n|MZon7I+243Ca zTmjab2S3O2qrc3F$X;7$C*OsA6I!;`0fB*m4&a6gT`xVhFJD4*^m8-HlfV6-A1aX9ap`W2x02p3~p z2(pF0PM;o2v6u>6kUzp+1B~~CjhA5vv$2W6-jNp=S7D2SV^1aHD`qlhX#0A4!dbmA z9M|u*ve}s26rhZQhq=Pgr;2jHA6iBM+#aAV?C(G0HeJSkf(7>78r`HsD3sna_&+^T zOgv3P=?SOc@RSYjnyKR{&k`kUp99{{Yx=)e0-klcHa|*7weh{4f?bZ>>pp?Iq}m#a zQcei=CyGS>e!b67*idP&SQTyrNPX*oswt?U_b)4ftS_VvugW+gMNPr*5b7UqVqQ93$h|DQ#G&14Va0vm( zsT^q;J0zbA;NL-JZ-n4{)=^*0>pBSXCwsLl zFkRzUKYOeSsM$40z<0Ju&;iQz(DDHkA+G3mcmYQjf$0?-E0Cb)h_!Xr%dI$Xtv{BK z`=&7@#D)O-UX+;Jbwb*joIrI^NZi|k#AKEbyRE2Iym?xJwPj?gz68{Orw@G{vQa6V zxW=MFm2BY3Pv9w25|UDEx&h|`#GGOQr)TIGQRH?R3{~xpCS+B8=((4ygHJ%MS`V@^ z7a9knU1DNOP2znM`XX>{~+i>2E?alHP?^1Z=g=!(63r zbedi>!{96zLvM^r)PoTa9rM^l;spD_#IpZP$ZvdfXcZw_ic|BY#&#%hvCO{2P?{UR ztGf_pDMg78Ldz&fo$|nH;y@9DOMlQuh)ZLJ{1krYCto|{)sT(Ecz{z*VMoy|{}k+c zCTW4zqfx@z#m*Ig1v}p8f4$(2TRuq%jnt>-CrOad9-v({Y?NS8nN{l#i~p62s0|agRQKW;-P{eI z{K)8gLbd;hg-J?jfnS$E1;2)24QXyywGksasG;&BbFE5l<+Ec zYK2zAUe{L0@4Zj=?+=1>o|HSKP?;Dl4~un+$_y6{x_=@2@0j7~UqO_Qo#U9!hB)5RS6y1`7_1a0Tl%PU zaH0Eto#jWgvclYW&82Snv=WRQ zaIR3#OC)^%elY64<)k{9vs6Lk35_JXrW*CrhmdH89tet^(8H0hfH~QGR4>G#p8@%7 zAsei9fgJiv$yXUOW;t022Gy7`b%hMR6_pAbo9Zq-o(G@mVz};KnDPOS!KPu%MJ(_y z;E~mvhtT&F38`1KpdeM5uPA1D^;8UY+6!rt!$t{2pcm859zum+6T9c1i}^CV7N)s~ zImJ%tGK4zOVDO0$uvQM(r4;;>?|%LTzT86hEnhpmz=2X$R`=6A!7TFqI?b+a(hQ@s zI>t|U%i00|iMpj_1)YB#<8$k#W19P8rK1x#nmC@v&@|ZYoHsR~Mc8(ICIcg#kE4Ou_Bo{_ zP}<*%^H(~OETnAd9=9fPVn%LN*f|W9;gED?vy?78cuGz zaZ|Y|U~gl(PrwH-^t-0u2RKj&6V9T8lt5e)3ZmmuK0&V*>Q8WBK?M1nDeD1-l_qEn ztV9*xvdRgriIqWbF{IN{s-xhPKDZC`Z zRsvZn{5W^+Qvx$z_sx~9WSCKExZkDj^tUOZ#9d8=otCh_m|VB@*Dm#^l`Sl!!Dk&l z5-1<63UU~nU}vzLbrVB1xV{jh{ctQofNhhEFhdVMOTQV6L|nFH!thWi7>7AoKEwHa z#tjWd+!pT$#+qdtL+MnMg)v`gwoG*`2%(KBgmr_B}L-~i0C0Pqzf^K+g z?TQMLSUOm8&ZcQxaw`C_i_2JEm298QjsobipBxixLUR-VaI>sXaabyJv{8YHWTh3$ zA54D8i%=)R_kii%8nTV@OC%>+doEDb7-cnl7#@>Jx^M2zj)7njz!`ovA92uu17!OL zlJ_me2FKe*ep3mdCe$Di9T*~8Xy<4yII>obv4?`0NdRUOHGp^rCI~g4YSRONkMRJ| zV7kEXXli5$$0|^7pjW##O(~c@l;<7j>3^0Ntm8APbCYUHDS;45)mr#XEl)7FBxA`8 zd=Vy}nw&^QDv?r8f`L;5&0r(~j6$u`RRX~Dyy?Ogp(>!J=M4u8cH(q7rm{zbXm~n> z@eh`FVFx_8rrRY^KPbQkQx9vPxBp`cx&id2ecTCtPsvyp807j6g!HI}1`-IzNlc@n z5}>(3!t^5^n5Gyb9M@1^^9@HS2r<&*8jOIx<7g0y2Rq;l!ygckD=r*S4|3JX^lQ;G z)7C)N;|_#?5;DV}@om)D&ZlAL5iV{xDlsEO%^o|Jf(t`UCzNC7&h*6g<9CO@R33kLzWP*h_W6ffnvG1TG$tk{}inAUJ zY#g)K%QgrrNj3%%^<5Hb>+kK=P)T@oZJrk9yA9~ov)A)Fq~ImokQ(o+6^s`b;RPHG zv%P=iSb;nPJ01%HlPL+a>cQ5sb)6N(Ne%5%BFozdy1dlQ+0mGAe8uSlPj__>a4JF1 zv-mG33=|(0a{^&WrCB*ko&a-t>`}=(_?F}y2GHx&DGS2I7$1_cFRnn>=G5x-pW&pI zGNyHMUW3EEWT*|D2cWv=Yvy_hFzbcZQT%6d{&mu^)Mw9FFX_p-rmBXe!H7oNufP6j zYg~$nvCi0x=|+)cr=MlrL7RAbN1b`)u7h3VQC|=HeiFKwHpcdK-O{M2s5E@{4W|P8 z=qg_CgrN`d{lX4lt}iflsGQzd1*x&cJloN3cFXpW2o?VG&l5Bc8{V=;=Su-_HW1RW zi7NFFO6g|)T%yi}!U!hrCbRxy?MB;y$E0kwFj zf@7Lkgqol>4tKoa@59l(PI_og3QVP*-O;|1pLY*3O(MJa+Nl?VBTS%N9@vhGXRW%C zj?h1u%v(La`Soyeck2d4UPx!*Iy>m>+3mk{2lq+$?$A^i!ePg>vS;xDeSpK>f1raf zl@Q!^4ny88Hp5w^;Mo0JQijKXF7*B^aO1!3*WnEh33^%BB;lbHa@8U|si7b+nF7a2 zOlgx9s80wH$5=V^AW3)n==-ISUYt*XJU~b;L0~f3Pmx4Vl`T@FhQ-4ZClXZ;R2vz#kP_mJWyBtw>jqIJ|B1`kX6-sD( zL37;+sR87tP|aV258*_9K%oM|ysyFzX#f?y%O9BqVb(xdmJ!!Uc>KNng>5+j8-wTs ztVZ57*WM-Ze60Xj*#3inox27<@m=(E&})t(Aky7sqdA~@dF!c;TA?gr8F;Xyi^9U9jly z1cKtQ;<~6Dae3KGvE{=f*^&I z{X?1DFitcmETOHtHGQ>Vhi>LhmbQRX00_Ce_r_Clzn}ybc}B?eJRtOmCPO6*YI<^# zeOWq43&9X-?ILNa_u6E$q?hx7hPm$`mVU{RB!gN#HBOKl%_Kea10l1sW$%25MA8(A z&I3l!VSa3?zqJM}8StFu{JuO+4jZAz!^%!@*3(Q;i5Q01?#T>W^CjQuRgjRzVj6%e zd6(RRiXZlX=1nEl8_cI=W#5ck&Tdh>Lpsr-?4TcI!FzZczB&HC-issH8etxP7%iu6 zF0Y}}eS#^pnK$Wl=#{v_Bh(q@>DcA9Z)`tw&3=;nJF&`4n9!yu-&hpAV9N>xl^7PU z+_p3b=t)|1V0fc~i_3~&2JfQJ^I+`yM8d|x*fkpra2tsK5HXK+SXrxy@IkSC1Ut!` zETCiYZwZQ!0wW}Ri#>D(z6rYq>Wn-J!KYjrg{bySnXEmv9#il^z5#)z7)uQbPvl}| zvB1IsHMW|t{fL<=CW8jWF&Yq?b=qF_rvLs1zC%MoLg*q6BQF|Q6~>rpS>vCcG}rwb zSI7gyic_;tavy%nuy2LbOMYH%w&cBtDo#0U?7ZDQ`n%Xp^89Uw_=?tS0P4|+}bG1Us zNY-4?Jf$w@4IHOZHov`bg4MRs{FQql9z80khyOP)kKVogNAzZ2laJERLV`IrmK92T z__Cox@5}RP&BdhPN&HYD`1U2SGNJls+Y1E_T|iIiZP48F_3M8ymh5fRr8w~39gWtL zQ+}^1*jp!e(IVe%I*1R&V;w{8!xk-CRH>|%43DxoO3B|`!|N+Y3?pP^Z=3c3Er`Li zOm_%9Hb(h;!^%5|nfr!NBYYq;HyCnDw>= z(8O%C`--b$iuhPvYnUa%Sr+JvYpD<_Xb@cH%7v4&9&^3nj4SL^S>}i7=QFHPs*))Z z=Fv;fRjE@@Y=YjqcpgY{f%OLn6q&DsYPL7+8V2JJcMRpOb=RQZh0@UVk)Z1 z@!cuXo^Y`9_orZk;dSH7W)p&Y&17BzUY&G&kZDb;BHzmiI<`()1(2mTR&>QM34`GP zTVlC4Zf9>Oe24LJzkD6X*nQQuU2VutVS#ty zqW)^VgYo_L&CCwoJXbM(w0iaGrR`R)4yKP){CRU+7~TQFt(j;}r>+XC_zV|6;Uj%~ zktHJQS0_%u%Nch9CdphYp{L8dma18^0*b*{Y{-~+tz99q^c?@a6^e`#(}K#qmF+vq1B1wuvw%M z!5RHGfmfY&kGQW#QP`V@$L{mJMV)kz=}Egx7M-|~DPkpR;sB>NiA&+Xl&pLHv0fj_ zId~hEw-|Rz1Zx4b#{M}hyPuG~;x}5?&3THDhm~|rye=c;33uOku!BN^%klz_K2Os9 zIhH3YC+O2MvUTbt%`u22m#QpgQbycB{9C=Y>O@UP*Of|L-KVQ#OP?Oqj)Cp4Z58usi+Nc0|Z+YDzi> zA@l_ympS^7G@+hx*Rq-Veh2+KxMiV{ASWNAWQz6`xbs#!NXHQ=fLc6uB2^ z2@(ZdR%PSUHPeFga#Vc}ax9FO?K6ZJmc83Pe1=od$fGGW(GPpzP{nFi>>d1QALMV1 zHAMF|Fy2VW2Aj;G1@wj9XB`2f;m44_`aj=hjR_NZltGr5SsHh zv7PuMAr6k2NQ^cahF*7J9gh zC*9)bQ_JROrk9@_vA%F7`(V?fMC~DMB#FuHb$OeNMD2;mBS}nl&tJmZWdcC$*(0z5 zvuA|BzGgBj0e2Ys)9{L}pGBYDpuc=pxgVB%4qGMS!va>G_PiTzjeym~p?jI@)Vz6D zw$+jem%VH@l0T3z#61f0Wy}mB`#EQ8^=`EZ;-_QsC{ zo@ef7f`vQpM_oTLln+Iqzjsb$!C+^sT_zj*WRA_rCB*-qWp2WpXs7swz;`_19sBrU z-y(uz>)3)nEczH$M>zPkKgP#x1Es?6u{4{A^9fIdFUJa`&mH`&AmEve zSm?*(p{(1;cAn?yLHKSlo(H;Ui{*{Wm(S|$vl%}uDPWa0K4!1&)@x91V*cDJyR;%C%1xOeSqp-a9ED2MS5!D@aumJ7|@8r+LI|0D7I^B=Te-QlJ1FQ&sT}h zTNJnH!_7`Enx6qluMSyKLlPNm_BayTFuzTJ)JIWzg2nd*4bME`S@)}ZFu8SgXI^O1 zp7}OJ!nwKKrAN$ot6KKCN=^%1*rlH=Gt_f`k}=v~fH*<|OBj|*o%C5eb{v*;oM_vk zYLgZ%TKsZ}UxxvQ$*H9r%leDSS)sb~xuAmVH~vdLNLXRpZar6SLj=fzJnnXB5NAc8ew)gr)?{r&y3yI~iWG zY=Z5*f$Idi8x5&SWPyRRwv?oUSrX=>C_zlrD@9R$6bD3RE6OC*`yGh0EU%d_06(m( z3Lu|i9^t&R-I`y|qtd}Gu!*&fp*_k&VX_fqoWsQUU_O!Yh1!d+2=AJy=iBPM6rYY2 z-$S?D)>5n`PQ%8mWaZ804xt~}=K)3yVdQX$2qDNHIC_sBPLsPpbHSm(6iW^g<6=Q% z84UL>U~ms9yjO?Kb(7p&RNFqkumh-qBWy|ym8P3~!QV5vqKAO!rdxRPrwabm5~|Nu zb@Qx_>VB*O-XGsk`!KB=lED^X3z^^1wtB}XRyo0@A<&WSOVsohw%g(KCf)B9Vr3yq zKd^{;;w^{0W<77v{0Wb{p-sz0+9_7YD$^~~Y{~@i9+8QwD|aL}tu+rq$62Xtf$8;D z=fXYUVV|UysRTn@H`c&`-+_{xvK_U3U-#Kyr~@2=svP^qK7V!!|3cY&uI`ShK84lF z*TzFYva}U7=Lgp3{*e9HFixVA-W!uJPTXd=QzEeCioJIt&%p_ z93451lLbp;305? zu;wc3BCR~H8m6z|DZ2(?9NAMgdtmqBTeJEPf!Svme`si^M0Wf;HHNEvc?-t5q+qiY z*X-oN&`RGaDH?3yNBDeBgOi9)((zbHWU@!ad4MJW)RauH2hP|$e7}Scj>)umj@Ou+ zKsA1j6Ke4ipIdQLzGz*dMA<3Z({O?x522w(NdwVIfY4kXySMnurW`C_;7>`LX;_kt zFDm<@kM8UD;fKTa?TclBnAJ$`@~A{MEuc~#e|tolBFRPZn*1M^KuKKRt0Xg6J=?>` zo8bJF4u|onjT@IwJgpoS5Y!!xbx&4XB#IIuVrz6c-nmo4D#W;+g>0|ghMM^E@MBT$ zL;ZMngib5Ji5SP7R)%t%Ko)zb$a&ClI8OdootCd96=k|C)AVKKbl?l%U!*Q z^8${cSgFr>707e^(eDC+V289mqQvCR$Yp6lP?pmD5wNHhB^z@Bj-039Q;lV#fW!ZP zlC7iE-6U+{teyc&Rm$4{uzm0~{A9tg`L9O@G4<+(-w<^4gA1mr26eP>xa9 zcC_vVU|i&z7P+F&^P_cmqw9=69= z-7k0jvOqp~1kF2er>s*>AnWf1Y{vobd0V4<#U*YvdoGNMIV2nGv{d?Nopz}|)szdV zuezq5cISXWa#ON3b_24pJbm7C?UXmAIZRxM#nrItryLRj^@h&R z7n-DN+@Atg9)i@c8ewV81k48xyh^4`^ek1LTGq}V2F0*q$Y(Pl2L#&&{8u;w;2-@U z{{!<1AyUSzIh%4C-YSa)f`&0{>STX>^A{27OjTu-^?ir5r0?iH73R}!D=Y_kn1s-7 z@cwX6faTQ%y}fhaEna*(OhY!hY_$OP(S(plIx&{*w!nv5dJzNZ&kkPBX!kbDKn`0; zEaR;+i?^3j;NhK=uoO;8wpMjH#vIYAo;7k40ZrBrxL7_ObWrNRUjKey#N+h#QklW% z)-V=R#VE_yzhFtdf#bZi(|uq({!$8)vK?m5oEZvhZET>fX=+*%3R@rS5Iq}rFUl_j zGBAu+$-x44yiMiG^I=CwVNN&o=hLn*tLbxp1)T$S6*Kje1sY&|D8Zatjdx4s)9v|u zRsVp!Rdon?LlSR{8@PV``ft{+r=P4CvxcFV;5Hd*DBBq5?ciL5V8gt%=&+8ZP5(q{ z)beP@X*welpPJ<;=B-d7ksn*#L*7edj9nc_@y6td{`~6R zjq4uEE;9yHFO^uIOAYNooF~+5Cq0cYBqI025cO?#YxiQeuLw3JkC>qNVyN+?$yOr? zd(c0dcF*Fx(2%shQZe3?-&$G+aJ|n^Z&;Wh+9=dxrwqIW zE_niRs%&cwx|w>bKK1i?3Vu?S5{4^u9zWEWi5OQi`N6?9u^QH3E337K@%^CZ@cq^87O!3noyu_5 z^mlII+l92nS9p^e7=;SL+x8*d=&p)I%}DS53Gkfsrji-vwwT) zRGTM0+n-v&4YpP=RRKx~4Tbw>1p!O$k5HM}>A06%X!&;D9>8Rm@J*|&toiPghJ~9e z1ab*a5qO>%i0|pf1utgwK>WxNJLeqcuvA>p2&>AB4jtY%xKfcA=QcR{z@}aw{~i;R znvZdinLpNcg;F`%t1xN<(5;e&8r@w(bK${I_245OCKd?8I7J4~B?p=d&-J#B!aztu zbhN%_0N@ur)VRSzmd?5YzBi?3?%cV#Fj1B^M=t^Vczhqn^3daWef`gsKsnd?N?UfLSXQQ?vzEH`MC1F||A0~3^_puQSJi7vB06=7d<$wVeC%sCL7AFiA{|B0H7#|rz z@V%KWN=yzg<6SVNDwT%+vQ}p*lqb!39xjZ0?3aVm`Jp(ug-*-Yq3ldMS*r3wEiFUS zUyihuCi9=B`V-qeOd9Ri&m0G_azOKKmqXG9M=~u7E_$x~L3_Y0<`-2#Gb9Q1v)}PeI@eJXS>5iidAWz!* z5AjWY4|`n>Tz%)XOAIN?fJzrH!wXe5_S{5 z9qmi6hP#J%L}Gu&_QBZCkW*qYB;#SFEGTD()rok6F{;M=KnB4D9D(|taMqcs@3Bmq zF&ligVir|o{(6i{#kaODepNeF-Ot=}s&~*Zk|r6LMzK{&AX5xRA`(dSTarj)b02j+ zj;APbUP%KR=~cH65fy(%!h~)R&R;{KZyLY}HF5zVwXITB5=r*cx4@(7xAVT`&2o@6 z!zmpQsy7LC>V`eFD+(d>AYrH&oPY|O5L^$I4oPi@(vd}?{!&;b%1C^FVA^0qMV^9Plg(tNC5UW9rw0#fH{`SMV#oQ zRtzf}?1H1Rb2zf816JX=cupkmZ60=s6L2~3G|W2WSb;pPB-R%M9MgzjWx>f`7P2VU zv=j2w?%ShJ!hf;7vv0!wLNHI_Mkhf*Wjbp!iIpK%b1F}?vbIW<-ggu{Q|dSb-MTxj z!*B5u#D095g+5KWVVfWdW;>}&WuEMQjh9t&*} z7+GHnv&yk@!w)PcMGqY@|?gEs8wAx0h5QKX#*>X!r@4r64NikZkFF!UcsgK!4H?f@LtXLzGz`LWR`jS zhe8rntUt6~!3`Hu!I*r59{~WJN#QFjLn2LK>I>db@q6eTmAf+C`o!bA-$EWLLa%~k z*5<_ecrb#W0fwpWC6Uk1Bq)v(WOL0Y0us@j6JSZP1C1;1DC z#767a0~Myn{M{aa6YqSU*Ai|JdD^!E`uqtwRmy_BQITzoHhYr=p#nJf&|_{&usxR4 zb^}iN!WLUWpX_P2P=WKrl_oubn#cFxMI!OGS$`iM!(+e1ZLl!=DWAR4Wv_b+Lw{2Cb^UK9WG5_mUYy2}+kfx0pt?r!xaXW;gy{EE>A^xm~jFYg}wU?UzEO$_Wu4|(xwS6 z{BT;CBGhn^I&{2(XoCbS-V>|d`8=tSkgxZ^_T9H{Uy$mdhm3`Rz^8h(z9SVpS-?CB z`M1&pJr&$vz&NHSPOQbT0=ZtnVtgiA;JzX)FfuV{SsXSwfhq)Nq?<3M0HFpL9~C7A zm-n8cj4(KnD559_vWp^vYoR!|4WRjjTX4+udeam)ry-hx>|)X~Wd zFg@YE5IPJ5Q|D4Ik9q7P@O)}jpun9nn-nco}=5Q;R^*ho+thJNxeJ(^gbL|KoY(DEZl9fapcHR zspLyk?55CKn@f9Uz(MOaEiTbqy-W)wRD~!;o$w5X;)vE2D}KLq+txaZPDt2i2j4Nu zG_&U#urr27iCBRzI`vhzc;>tZCcMFV!$k@Zp-ix9&&X4;d)L(d4P)IhG=(blSq46C z(|yLk1sHREu!5#|$w}>J7v62{CSmG10$l-4FQ&&)*IXfv z|3${rYgB65D7%z;kBDGh>CbCglLxz?FicVH5#B=)u%547ym;w~5^YudrQZjh;Mrrp z@&T{I({;lx*5-MRo*xk`n=dN*@%%f``EMI!cgO@*{>Z@vqm%yWG!Joub)LKWvMC;L z=eJm^@_NZy-j&DDuPnLNeV7{>tNbh>Cfi*J^))$x%Gp;@tffZ1wCYUHe~_>Soxx4L z#9Cd8rM~8kG?g^(%Cm721gBZ5SbR%stxU1Y6DPK$_vy9!PnJMV|9~40rzIrbco>OY z*M%Cb+6k?#P4AP`V1u@{+RV1cR&}jbty*>XuO{hL*ln0ZaOg;Qd8e%93K-x7L8qlt z?TU&;JGR5o&(3Xh-%v%|YJiLT0LBkEmM3$bmPZCnw4LHON}2P7a@T3F4ch1{%|JwI zI+h1J47|_{<&a^98d8tQ5gk}&zAqOm6-7=QAvf%_D-#r)zq$uLSm zPtw~z&zLczZ~c-ZoabGly*8&)>-vGu?7xkG7mHn~`?6f$A&zZyv@p`?!A8Yjtg{65 zTJU#Epk4C?3${Lg{yb#Cg1Jq_K=Q&ikuLSIfnO0TPUUgeu3h_O^ynX@xl#Sd$@i=J zivD$Ov19ip@{6+!ROwpiCla#9&)`I&_NgapwlooC9M?DOyc@?d(s*ymk$Ez9vw|)e zl_r0v9(|}|9}&4r@@nFSi4z;qkiRB7b#L0WK0E#W+4Y@0$w_YsL*3LJDWN=#_ull< zVE+6z6Xx%|Jj$|I+w}9Aawvf!kwYYeet`3b(9wmimR*!+Wz+}nfZvH041{^^v+3~@ z?GEj%i7~ZvCt`DH0i{Og}FX3+vurc-m&{_r|4 z!V98Y=u=(Hu5Iw0v3+}whZg*qO^16&3jL#P=u2z7)8d?s<}f4(j~T{ZMv1!OsLK(vDv1gzmq%TVc|dN8 zQgohH0Lz3nkg8W^>WwX1w!ju(a?#|P0v>$ee_9+~W7wOj(l24Xw2XZtFO5KhV3<94 zQonxv0^z)s8LEH%*VnicKuAU7_MHhX((OiFF>9~eDtgVXXu2=MD~^sI?@*w67_Zc| zCK$Uj;%3YU5Gzhr2Ax^^mbP&RTe>Ic)}Lzomzxlwl^jezelmUfuh9R5llw`fSwX8z zD-3nv4H9OsnM{}d@*!+!CJl(IdR~WFEO;x>Y%!|6bDbkZYUmv*fcZknTiqsgX5r zt?y8)VdFWA$qQcpB2k+{`)A31A;#JvnG{to2aRh3X6U-6x-rE0UP8 zuxu%GMVFn5zYW-s+-izY$!9S(uTewt0o9mgHwfL3Y@j1tMM!#0OQ>aEko$|vxECPe z@*>sWI+jlOxn|KrKKob(2{~!SpqOVICgjdqYWu!+mJ;X?CqLD>*XaiE94t?(ucx1M znJdJyEAcpeb?~=%cWx;j<7Bv#)){6ONnPf7O3>Axf*(lu3{@I;SB23oNswIOPD6;;4rF91F!Mg)fnOnCnDVr|fLQ`UHEckFQ`KKC4uf zz~YF^uqU)tZRhBsih6bc$nwL2dM6A)EBx z1Cg%9?_oTzuq4#k9{2GwCq>=Q>#I-#A4HOyU=Z86(Qp)pvd<1dr6UOr?7zkqn*;}V z6s&BI-NKIwqS3I0oz->3$|%${7)MwkI7S5{pIczW*kM@d566XI#Rh|8RMbDa9MVH# zCQbxx8%3Xefum@wj(s!xY~y1g(Xz1#l8I>9IAM#h%^@+G=i`dFJqRC$3t!|}o`y2j zY)xLO(gR%Bv7ff!%^Qw3pEaacN#Yazy(PN^+d~DIr~SkXVtsa7ko1%kHuxK9(QCn4 zhKUD$CU)4U{MGa4L8Wc6Nh~aT>UPYznrq6s|ClL<~(S>im*T$99? zcG8>d+z@cTNol?FUurrzak z)ZN?`4YnN+Ba99x))+SX?kROg&oH->GnGFL2x#@Lj%97qr1b&j0$~faCYCNv)n7}D z9bY8C-qb^ruPyPx9I{O3x3jH7bxybzz3q%OgXxNbXO01^A;$_NU~dTmj`1CDIX#C% z|IOsM3-pdBHnGV=<3u{h09!jqb1JCUo?uL{5r}7RSTytZWs~pVNRVn4OcS_mRQft$ zMQ&L4+SdFQTA?Ui?e&U5Z+fIPE!6Y7feMcDvsLR2lUVT+Ut4T7l#2_t1?XafPI?l2 zjTJy^8_>6C_LiSO_x)KLjETIqDq&6-${CUIu|1f#$V#l(VfkyUhDCR_Vb;E?-YC2H zv>BAwdf7zBuyf04m-%b=e^CO3MxF-i=J-2hvRXXnQ}wIDn}-dVXty3vlVeoESPxgXb7Ua$88Ytg=)_@tzs0vSVZx6`3K_pr?? zucC$V;q1CU`C1sSlSKwU-{p)YIO|nPamJQApAlX)2H&w6@L;JKC>@(;BoU!}w{WP_ z=cqq+UYI)@V^1y^ft-!kTb~KR$Nx6tvDigisdKHP%#bkHN|!mCqvf(J(J=h8B?s=& zIC571{$msI2@8fQHZMbkpQhPhn(u5ck}6vjRmlpwFjWY4S8)jQ%}39%6V{dHBVu(a zy9gNun+e!~Z|;nUfXNfMgPkJCa(o+)|8RURI;7*yvSRjObn1s&ot-u--MZkVaQgIC zn%19Wy&tKRxqXJcr~7%VLyyYoBI9~m#h%Zw>Cy83Dl~b{!16|YVJN-QgnNx?L*{?t zB0K6>ZH>cvN#p3xq(Z6zLsGhv8^85$p4>Fx9qO)P8AG}B$~IRIWxN!q!M=SCFEbc{ zXmjQTj8Drh7XdbF`4_4p~vSNi`>!JdvV~X8kU|4lr95h=jj}Ozz)b}17HKG->fwfEFWtCn}z}96&g*$C|0dKYRa#n$T&Cj2O6{r}8)>9)kf48u^K!5yAp+4(fJa+5{oSdSFyY})azoRI#d7h`MJmilO;Sr$s$a-0P za`|e0WXxywrR~wP=g{8rDi0*Rz4Uot`xkr-58NCr1a@f#+j#2b0#_lOy%@xrskBKg zV2~&3sN90JV$reqpqY-3@l)kI7Z`dE>1LOI`f#c7g{hG=yyT$DK7HZ(K8K+!bm1qy z)&peuj$&mAkGViH;cLuYM>Ym}9qzN@y*Qxi3{q7WtkREVgxOE~n zMg`Wd?bg444e31tY}dCXOWJ;MWAM^!Vn`;JfcG_~^}LD(^Mbl7q_AHlj!p0XD+8Gea&T7 z0)GA~>hJIGC;NlRHsJi|#2Rp#N7YjR6B$2(sv*?~E?7SUgZTWBpvI!HCW2|JNwA-b zqlc;Igo_R#zW_Z(+mQX$fF0*BsW>06pC17XfcmKolLRdGkft1|SoY=B zkX$#3_U@+qXlCs+-I z$wsTwElNiwcA)$R{G^RhFo6ZqGD)2V(J}G{)6jlgU@ILzPVloui{WmlY1VN%ImGz8 zQAroGYsX-hHm!u*)Y>g3Uhvyvpm$^9r?rIgGCjNuRKIAOcBq!IvC3~wSuB~HSjP$5 ztju$Q%I$t!#R1E4-lmnN`F&G4=JaM(d#+S>2ob%H!)sG4yPsci+0Soy1$^6^4!o== zPd^jE3ejW`su#^{3)kJ&0ys-~m~UbPJWtHb<{x>Kb&`_47#aiVr@pUIVV<&y*Q*G- z^(#vBocE}(=wkuvL=AT33)TAsamftqxb>X93h)YUci~Q4n0^N#zz;x>xAWf15JC+O z^JorTV95~?5p=73NRVi}b<#HRq}VV{i;)AhtSL*KZj`L?ns+P#_X2{XQttKqX)sR;?WTL*F6R-ALUF70Rk62Ac7|I3x=WoWk~4 zg&H(cKT*%?y|w!f?B5?t6Z9mXi1Fz>0k0G9cua{H$U~?G7~bmZMJ@11L9@c;%a{L} z)C1g5$ROTo*z-aNsK7VLSlR3VqQj8bYJx%?qq^E)!G?!ZuSGtC^?WXzB0l#=l2(nc z!O8^+fcsQYjWAkV>WxZSU4TkVH^sm$ z5Z8*K&CGB(s&)#CCw@H+%;(9;8TlnVuxdJQ50NocYr}?TYIdV^ zIl!(-84$p-2PrcAK{{zTnuFkg^9P~k0(693f%Df9)=GtDCg;J#j6e+7#2^qqEf7st zXAuGctg-PA06&^D?}sVVF|H+U#G_&XV%LVLsuqA2y?*hd&1HX`dwuS4$W|1#8u+HF4p4wQ4z) zk459P;D1m8Zlg&H2X*(kgbZ-N=$`Q5`s57J&$~%->faJWW88ImD%T)etYmCZUQ|5T7OMqY3x0T)kVwhyreW41p+Omt&J#A#p(ANT zIdX}7V~3$4eQKdUZT3pgJ!gV>Ja^XXPM(QPa6LS@ZXv?3Acs(_xxjNwp_DYc(quj+ zxt?=AMRG0KFA82AF2~gSt_)))D4%by@we%7eWXM;UdreK6j9Ph#q^k zzL+BS$u>5R1wF#;C(9+vcE~e?E1Z zy;LTST$Z9USlH)emcdBGenQ@qL^}If8cBtG+Pam*Za)vzE4=W_ZIuw}00rjMQ!t(o z$4*X%;Qm!&pP|Re7W>ZA(d^?N$U6ABJXQ8#LmKQOE(`{MpTPc=VMs&!3%t@qnmY#r?gM7p2)({Wn!upC0S)xk zhJYgo-iJCuK4rs{dcg|ZfP!Gc$yEqoi!d|VI=a5)0@KLaP^N)_feE&&Y{9GrV-~w2 zt$GNRX2Ti_ZQ`@@{qo6bq&nwmKDM*KRU0G7x^D~wG?G4+<yyDTf2p9w87ew zsc_ovMce3Blkee?z}UvLDW4ndDkOMTSLU-|aeU6G&CFP5EKM#k8Qnd}U4T&-3h z)){ML`Sh7F_$F>M8Hp+oyE~60GTDR9@tL0f&D8Gm-j2!NjN3V4Co;jVW`ga?1alF` z_^K1U(mpMvQD0&=VV3%?hB^`F_}XNGeV$2L`jU(f?9+nKI`X236Lyk3b9x=nNn;S+ zs(s4!%qr9*C!I}{5>aG|lU^lEsykst!onT1;H2|X$jiEZV)^j1$xT^0Ke_m42NTy@ z>$>0YsyE*~3w5VFa~YxBM=*YpLLs?gMF{3D>u#+aD8*t&+{KBo_vvscIe;B>LuE$4 z3G=o$Susc_xGdvvhB2(AdV;xfDu%q`<&+*XFccRq^}rm%$@2oQ7XZpz<4WHwSQsw&$H)g*5sTH$O zRE#2wr>%G*)xI84?18NVhEM#+HSy(m#d;}Af%Sq01n!Eur_|-KRv8rQ0cUouwpkmvZoPNH zG9i4cv#g}@#g89wG{NjOUOK7E-#JVEE<4Q6k4o(^RqF3zUZ^+I!8j3R{Ouxisbgk- z!qAzj3WHC6jN%5QRD=$a`KzSvM+4vjY8qpBGQa>mdEm+4kTL>-)C5*6z(^g8gNbU$ z5C9b5fYE_63DWfJhbbW>KXtmQ93mUbgV3n+mxF{bHD`rru}~La1JT*75S%SyiQ~24 z|E>f|Pj`|0_Fh}0LcP_;7V8VM^2za{H$JwawZK@2s-LBd%?TzsF5&d8&@vu`uUhn~ z;xyKe^#HH8!5)LmyLKWTYJ;uL?lX`Y9A#~=GZ5o`NUI%&ae6zn97ox7n|`@`BN*O6 zc88E?ktE^nmgqD=jWldo1g-n^$MgGol^DY5wg+=>q^KpXDrI5&xZMS+d=+R)$+T^>b*#GNhYflwq3II zQD=gyP^|iKLZrpV#rKe4c+RqRIR?g!QcDPREMY?u)v4V>(gg@zC0k(Wk>_>Ts(W`Z z>B58AGYIr4xo;#S>|?Z9d7H<2kgJ7J_RSC;s7%34d91J!j8Hj%=w=az#W8^%sS?L8%TsiLS9~9doVRy+TsOR$2$EeR}5i6K*PkkQ{`cRI~PakT_(IKsrsD}J7 z6XYKE5GPc#V0oe4KkpI7aU&!M<%pe~qkR}AN#EGq`|na=$|ydP2b4;^Cuw$u?YqO& zc5@#>e0j8H2pH|}tCBwWc?k~d1v3bPvDT&IU4xI)8;to0m2gOF&bvOS|bAHnM$Fq^a za({<`zw|`O3CEwh0_^f%qz`S9*)IOic^%{_VYWwl!}hz;6Y3ZFC@i&!rSK-;18f#( zjksMFELi(^pwNR>OtY+WhdE-!_NMl==sifNm_2*p)_3C%TOjl~%N)l0#V-!?sABi} z!Mi58pJvm;vi}^yzX+-quXXAgP3SAKxbhe$jmi6!c(k_Wt2|x_-=}QB2W&pMhTCJ5$P_2RlNTnDG}4}P75N87r0*UY4X-Cs=QeEQMj zvz4^)@Vlcn?v9r3!K_S#lPKDVI{l+bJU|E2`a{OTOe=^)1nq*|zCc~+n|D%S;`XEMY5u=Ug{UDr>+&2(D6{uh`~-}1Vkw}Iz*+7G)Nv3w7l_0aYI z0CvJTEofjS@nwch(g!*DTx<08ySZ$nuY{=U&7dBo?Q`0Vu2qP#?MrV3eR&}-NT^M* zHTsL-1$in?BHJXh2R1J~KvMfaTpovr<*U=xMSf(-m}14E$O0Bo_E0*nPjpe_9VQq? z$aoP!?`H&iQ&Acwk{(R6&6}6DsXive!LCK9J0V|K^fUorvaw`%1OItZAf{R)_zcU=wT zUrxFj%*#e(D>-7u#ZbG)zCqP5sR61i@UY~$z^|cn4K>&e)^3&tOs)hfN;``lv@TpJ zhrGb550o+ALyB^>IY>cY#%4fV%*JxS)__8raI4<^n*?Q zyXECXKZdd<^W_e5N?=NCf|@@&n~zSPcyaC;-eFa11KaNRseoD}Cw8=eMX_?q6Qqam zDGP?69Q{G+WrxAO(KsGX)g@SN6@v!s7s&Fb*nG>pHfz{N)(DYj35ZjP8|G+-+336$ zA-6TIs2aBAkoAWks3vdaumQ7vNl3;|7l_S$@ZL^HU>`Ko=4=|bg@o*R1EGsH7*u3S z;0poYhj%UUZ6$khgRlpAOfQ1VA9sw(ycd(Pf}Aql$qer|N{bHmYknIA9Z;xI~9$BJ;S?(i8cJM%x<+)3yzUM6>4cC}hPvW>35sfFYP7UVVcbq4` zLXeIhqp{=#-|1zh1E{giL81mXM+$!bd5qh@uYQKU4cCrYK9xqBul3k8g4wkpXs z!%wOY&nTrI?^mFgNXvyd(EYSCRt)1=oL7N_Zds#+-(bg8a2Naa>sJ;06#6AiQQ#$2 z-7Hp?^d~hw{zMX7cNxP8CPpi4>K<3u^}KN`{SaE;VF2@yUo0T?-T_P<+IbBx`l8dzy+*>ZEinF)o?d*bLyS`Yt*)Xs-uT zalu&!<7nW2GR!_LjTshe55oCDzuk2u(@s}gmv>Dj2Yi%^v0I;{hBHoFyHwizjOLpH z2`XU5=6<5T#<)YdxJVRjWN6OqP|D8l%Xa(z`=C3JcM{q_2k3PUNNAC;pM6Fx#Jps` zWMFICn{lh^IVY=ns~ftjg4e%h33v}^4NSf=sK_XJy;tGCaO~#Io3Es84#9YeI7%^y z-U-8LvlrA*eQz3aN(g552?1I)&rAnGbYtPImhiwD9cOCLrR?$0)n$MeOgG}VHG?$Wf**FzGod24TnsUxDyRz+KFPJ-?ZfFLWBxTrB*p1 z(ffz=EF&l(1nuzXVWkTf&M(O+I|ql@KkdEbUkWs&brJT&=B@Notc*b!hQi*2`{`>W+ny(( z9AOF;b3LUnE3Lb(-GkJv!dt}rxmW*cNm$slZdODJ<~93&T>?4!uS&c_)b2(5dC%&nm|)G9D_H1P(EcQlmsYDRta&LeWSF(}WF zF?0hS&_zXQ6f@K7(+lUiM8>UTy}xK_6em{6q7~F@qjW2#d;Zc|E;^L`wsXH}SCTF^ z@N^}(en~EKoJgJ|y+r}Xok_~aaU$t&>Esjfe+*ZUh%IJ5VLhU(EpZ)>w;2`o7{Kh+ zR@UJFgg(zGM^&%KsdrxwhFyPWh1D?aj38B+yHn|PiDfY*mC~&SV9f!xYk|8cmhb@N3rd*AndZh_%LcIJG~8GCj|&di*Nd`dY)$Kq^{7l?Ek-n|)A zu!r#MkG`L0`sIhei z_7guti1Su{WmT6lOJD24F>oI4#KmI_ybd$+z4QMEHQ>GL+)4d1XI`KIHA53+p(+P9 z&(?0f-$x|rg9ly|ju(e>(+wW3^-Am;4ERp_pI%zzZ(vlsK3!*Ro7&V<+Gnv?l??B@ zgS*D`4L633{{I5A>Z+JH$l2ECA$!afwsqObfy&^y>C05|`a8zI+5NVF z*~VEv9?!6oGgiYpzo7;iI2>Vi^Vl#rxf^ES)x9MF3j5B%X$MvGJdM#&(hBRr;&W_Q zS&dIftE2=BMw;RWYDwukh*y$&h;R?b_8!~m5n~IC(H-y?x+Sw5$n;RoLyKUT<2)o} znHM>#1`ez7pd8J26f>nKV_~%HrZUJF&5jKwSBq7RO44^W*`$$fe@!+W);|Nw%OdMv zR?g@DjlZK49FF@owHywO1istTGNTN`Ss~&?lrqa0wlr+icJ11+Md3bB>!kt^c3**? zmbOe1h#%n)n}I`-PDgQCYiqgTP>lUnx+h@23|L2NF@_znQPxs9e7(0xvVbehgKkib zYnW*kbmV)=UT`FwsQF413=gft)+wQnFk=`$SqBad`I#`L+ogHI*p`3Re|s4Jz{T|crg*K zNijrl-d^2PI6~R&Xkb^pa0Z?gMhzREVI-VsK8!TQpD&6~6`Q4NL2x@u0EjKfLObYx zneIDiSqG-gGpFl(6k39Cf6MVTZCJq_bTW%c%H5n6wkf3I=XQSCtQp+;5s}Lz=$@C7 za{rC7?OM-A@voU)bjQ{sEgEYh9L`>2>K7ecBi)6kRq6enO1REr&a={Ra>9zj^nGZM z&0`f=jbMB$;8XXNIHQRg1%1LXLe;^_BA-u!lQvG+mZIQujACHsVjHv^O_gpnZE15u ze+|nB>9=k@RO5vc>$h&H!uvI9^41okuLa@6$WRr_vzlEZ9dT#_(`D6eSCw@?3S6eb zgr!q#UI;aYcTdY2C^O}OgCvYHW0ju0nkfGu2`05q5XR%HemIH3BLvCoSs1r~^T6I; z-@z|-o9>UV8=w-YI8u9)>P6ri25daW+8&kia8LCzORQ{b`sN$!MUl(Xb{iX~ zJgUIU1(YfC$=|dtVcF3LNg$`YET&o3B!_E*rI*1cc!-sc38ug=A-Y)57Q=GmGRtXy ztwbC&Nh`i6`UZsGk6CN0D}cSB#+Src+6poD8{iic^0cCn+2G%)*@5r6;xs=^@JS>0 zg0B!n%2xc)*R7**-|lmbK3UP+R`0-iR-C_ob00*iMvAz{_Plm9Oxb_poew-QH~{Ka-7l$W__gkpa| zVpC*7H_}@6zzKee{SK!bIpd z1IKxp4FZXrZ(_Jj11MFIlV`}}{HEfqOleq0g8eoamo;N})5t>CEwNm?u&d;?@%;H` z_+n*2up9=Ax?$OPxqwwsF=;&xSH`r`KEJ*KI0Rtk6(3GV|tXqw}!p3 zzY0l@gi-HF{I!a;PsO`cKYJRm2^gO2G76XTnF+YDn;-F4>2`+n-+3`gGXnwyJKlDXNxSjXjF5j^$e`LH=FPrUuTFRyK%KG3AxG^+1}Xyk;G7q)BY!6S;xjh&P$A zP0GZNkkKY=qjKdau{ajG9rvUB?!++uQ6nJoBJ4DR*Ys9t>eE4P^=8x>`nsU}u;4_ff%(_?YT7J^RM#y_X66mk^xFK6W_P@C}cebug9$?v91h zvGl|eBX7~M=6Y?Ip$d851v^)@rLHiktg6z~Cs^0|k@|g}x?+v0P{-QgTc@N;CBAkmGZ(o7Mj;5lSe~SI+gpO^8HC;BXKaxtp^$v4@0bZDfBo?-i-vKv=0mz zG>>>r@gdtjrnF(O^;^e$AdL<#YBv$(oc_(t;b|WMkW9qxc1jJ zNJ$cuL2)E`jPSE^jBj?JwV*mQls0cHd1eT5Ua;h7i}@4z&E^D@KnNkTM)C29s}*UkTHN9;O(uz?T7LXMi^hpmn({gn%>_ zv>DomY|Zi}P=(u>jYSHiyB37$t&B4SKqI%}r!vghV1a&s`k6sy+Z}c^SYdvQA273+ zLU|45{~9dtH5fqtHt9i>=4z4ebf&3^VtzmaDuqO`K#C|%NDQR>sr`BCgcyP9FW=-1 zm=L8R!NlN?pD|Vy3-t4&I3Ftm0~vpyh#4b!=eMW<&-dyrOr@9Cn4H%tm^?tAdqz{Y zs4TvNgV}5p{DL54q%t2sVPmbopb1-i55ikgPO}Tj!MlQ-+ox?roVLh6m`5c)A7SeV% zC618GW~^~Mj$2cuA}F5Bm{hG5t*Rp!ceel;39zyM1cNI-x%C=JYQCv~9FaQ|UWgM? zIeKJu>(;XY67$k5Uj6A{+9+nlyGW1u^Y>#CHNUD&A1+G#d&5T}D%ocKFzIiH3bMhIgmrtD(Jd%%J&Zfs48o)ZmLC{P z!TYN1Xo{XH9Lbn0{DPssaJ$_QEAH4 z1zOivPktB!_Gp5|(RnfX=p4LEDL)7U{^CJ|Y;4x-_veHR7h?2=`R@Jqz@%3YNvSSi zCBS0LeQ3&B5wg8BkGatGt#4qQyo#8#qocvnT2mLvxnFAb8d0skT3#FUi6T4r2qE-d z-Mo|rON%>Am`rdFCU~X|25X~7ZJ;)hl^AR2XnTJkIjXv;QuTv5huZg47mg_NBdVeGYem-R0CtN z%BzEAmpXM;drM}lco@DaD|QFsYeGW_+>Kc(mBUg$5|UG6Dt8W>MlcnUnWDDT4*aaJ zASOxEaH@|~^#o3ZPDylCF3+ z3MR7+!MD3j#JI0XNRpalr20zE4=u4Fcne6}v%!7>ool!yRs&~GZLl5VPb|`N@~5WF zRn@o1FavBibTVn*MXt9p>{0b+*zmWtfJNbJUk7_Z_Yu0!Hkuh3JO{;Oyl7S^PtSd( z`xxs!Kxh-=orRyWc2*Otn~u@fj6{9h*rweBobeT7EW8kttK8=|4WT*=^1B1ZjlR&L zqaMHtyE+vv{C5VJBD&72Q~JF?`0qW6J*0A+m?U*!rjTw_4O*L(x|GT{2Yp`RrQ9-R|-}f1PE36tqsiJJIGH5wB^<|>%~~q4hYUNzP)AQMlooTVyol{XNFUF%2=M z2W2y4xfn*hwP5aZMy$nSyj@SbBtm+ZHz)=rRoBF%lF*7Pp<-*mKS+n9+-H?IJ^MmA zZ}u}lu%8~G^Ao!tIUfWKL2o@R#xp_w-Qc&oEFfGIZ+xJ^r3kx$rZfEfg|XFf*75&9Et$TNQ}PMIXPe1NBD`2+F$C89aA`F zJy7{7inLQBtU+k6&dK?vy+SEAO>#jfwjal=1qz-*i0|AqNU9HwPHR2L`6eNhCU>12 znFY2YG|fzvDXr16xB6R#3M}feUyF;B z1?b)bt7grkX3d)L)&vzai zngPI_k;eyJBb$X%7g>$SZaRz06GDU$Op$8@e^1-1LOXDZFiiOj7Fk^Z%5{aLjuE0< zgfY!sp=VPvjF zURoxR^zjdEwr72vNQ=G z5#gv(0!o%S7dwXF(Y4Pep#;XO;A2@-V$tmUW+Cg3=CZ}5+ zM#+5{M>i{1r4P<(CKlcqb}aM*Vucvf)*$CLSh-}mzv=GZFEEBng{b>N#Jpgt*_=Uu zZInIg-ys;sRItV>5E7xW5q^jr%+9hg^!<4L;^#^kc)znES086KQlp^H5&C4g^$i?t zgd~VkRnq;6F(;;D@9odVOL+wp$We=8F72*jBtX(sgz@IJYtO^?w}eZK20)NH65U-; zO#tS_jLlq|ZmmWzMfDaE#wPt~SL)ikab`^$umPNk9AbmP#v zrJq@XQMRYxNSn3YImtM*y0uu%ix@AqhNN{#_}L(9tU(gkVED`)TT<2*TW+g*w-$Nx zsIG3K_rcCle{;!l*L)#2G$%yN#rqsZ;*&8JFqfjRw+^R;Px7prCSWeG!wjcArW&0e zuyAO(K0smXX)6 zfs0M52YR@ZZF+$24BRRngPPn|WQu&I4yTpjz$2i5rO8E%qKe*gTpQ7zMYek`>;i#9 zQP(*vr;CeAp;2t=;N&}9C<2$ln;Y=a|ws}l6w%6 z`b&#Sm0(ltui~eW>+pQ0lekY3n(%39p$3R7)dIZ7GlXD1Egi2*$WMBR_wBJ!FHx>U z5(eLxwVOoj-vw)lw}e`&I@NMYs~o?Z-q4me@xuI4tu5JjpEwkCfzdFIcnr(bX2aS) z0ukdEkKm8iC@PiNF9QdD->jKWBUpnLda_~5b|X&eU?3a4?>)hHtuzq8 zH)sLgQx=v7{dtlWYLbSd*e{_`G><1ts_SYY-t!?Gs}`z6WpMffr&i0MhWKYg7$Nf% zJp|YQJ@jw(l^=1OID)%c6v1n3CVNZMRPBh)(>wxJNH_R5iox4-qU;+7!`ffV!6L&0 zwjMgCBG5H-yN_R( zM_NUn;js62rQ>KToxoI9wg9UIhyt+ai}4@g=Kxu7n+#J`(07?84^q8=GXTKwGs;jZ z*;^_Gkl40`tT5PKkp>qVdRbwI@l#s!zOakj6z5@_-XDll;2e<&D<6l^`M!U_-ffGO z`IgThGoUv7$;BiGD(wmIGhA$GfxILAvl{SjzG%@syt-3<^O99-wqX{=uXmqL5F&?- zt1#R>8xRoiRGeK@gblOPO5~>ltZLyXp`uZ;2X@R+!{;$?ZEysNQ8Zi)y2c=b6$=nJ zhn~q|6=}NbxU4QmS?p7-_zbYiYV7i}eHOv@;0AQMQTI9>6&l@?aEOb>htXmqo%u`8 z2nbkLeIhK71HXTebKae3gAeiPT+5!@_!8*K~Zo`^G0vE_SN+k~8coNi|ZnHSopw z4A;~b*oE3>a5)*FTXwyJxAT+HW|P%bv0CZR+H+!h08af( z)I+?lA5Qv!r)Z(F@wlxP5IjHQ5X&WYU~7r8Y}DbB>pC1OM5G1BXqBUpG|xhEjW4!_ zNYcW4-3_7t+uq_+R~&S#Q-3jIUJLeN@1Vs-NB3#z@D9SeJJVDJA6x-sXD?6)erk-1 z`R~H+%E~!%pTH@VP1v}#D+f!`1ZFzO1WM2r_fAJM+2>?JJ-6N9j?akelnK zOaen^0H~X*G8>*S=sERqtt~jg;&s{*HVLBp0%OpkiLNA@hyrG}EJNk^??}qChD~xL zsl!53oE32Px+znp9A`g+kY1hxa{lSxT|(m`^#DTkajqsvt?~4!`(}jy@~!IcO_I*Jm(oUe?%O zQ1(eSUTh&pmrpRk(efxYgJ_M6m1a>}ls!R+@@M>$~l>$)X6noeYK+HeC^_QI@@ zy3AO7%G6c;4Zy1fbw4bB4=1)2B=d}(T$wFm)q7=CFADe0*I-XX%&SBR)`sUT(JB*H z=hAZy#rRP3w!3zPK$e2?a+oWSG^c#ODnrhB7+pLI(`j(4#hUiKnYC{pG%)x^KXZ3m zV$RZ~X*lFd`J-3kd%K>i9OCR&FMn@rj|JFco)7J@2G|yJK7ccYB_b^=y)m|%07}#O zQ!knfc)(79?a{f(IFWDSbwSrN7HT2|?uzjbIw$Xo#wWSyhyfj)g}*lhjb6y)Pv&=1 z=IDTJcVD}l#fkZi@fiHjf9y2`IWJ7l2XF*KU@N}Ix+??eomZ=Yiq)rXCXRK*G=k=F z`W3cnP-m+3oa`c;q;IPn#3>rP?0FBia$MfNx|$^YhJP2Zwm4$}Q?tTGwa*0XYsCb9 z?I?U*91rioXW&)JSvwk^sV|60!`am=yq^+@33^O0ErU9`G6KZ}As@Uzq$^<~K5VcJZgo4C&&2{Z76bA2Y z^Gqa+C!_+G5K4a^>=*rw9*J-E0m#8LNV6e1!h?-?GoRsl&EC zuX)C-q@{w?9YcxDWuN#r$M7ulNF*xZ@{rdlHrQ_niEWO`*(Dnxd19qf^e0p`Dx(KE z-+6>Kic@!$VFj|)B&#g{>(2r+h^=M-w!+zA(-5A=t2ou1m)L}oZB|r^-m|z3Q<3|{ zfgf5atl(7g?reO=M~$9)I>D&tGDpz^(2hS6cRDEO)NK67=J%UG$X$?fFIzQ$4B|(` zzRz)bDXCP8EvzH(*HZ%DGrDuT-Cct5r8QAF%-A^&#W=ueL^eiiO1enZlhv)}OgtDT zbr}X$zB|xR!FVH9Cl!wxo{5LDIw`me?>9^ZTEM2kXRk)HQI=~noMP;g01L*+EcODR z^J>O?${)bsphd@yfBtR~Ivasi^MNL*Vg28aJ+8VFeB zXE?i!Th2wm(N}<~K8L{zJAHsdgfGVFKJW*Q7y)x?u{A7m93a_c^q2A)1uJY;5l~i2 zUmi3TuMa>^x52hk>OhG$$&i^QAvm>`^f`l4wr=gmwWIF&@=8uSD3(&xAftJEGO?{% z*y!2LurWpw_4jL8K&qKavE&a#ta;k=;#--R#q6(zvekB~lPCt^mcRUxgl~M1+X8x9 zNKPYX+D*!wVMAOMt7?Oh2D{D8WYCdTn%mFvwzjV=Bs+r9iv0tYBl2|)v3|!!k`y}P zfHXz*eLb)|*`M;4PazIou3iL5-XV`^;{}XLZBe-62{Fp$Is)e#)R8ccxq%7Gq`E3| zJPB33@GJ^K`n*!uG!%YS3pjAwAVVA;}xWv`>67+?{9Wi~+l^a!$)4 zci5OqApn-OxC;b24P2Z>2-gcbL3$+X#ful2w6eeDtGdWK`4@n{>-+E!bkTYG+$YcG z&HE~kh_GaxT@ATYbM_WJi}iy22jI-hl@%Mjkar)TyFz_bTuyfsgQ=ka*e$?gQ)P2x zdu!*E8VDFDmPpX((Y2_+_nJ8^S-b&yK1ay`>_Aw_#pziedK=ks=D}2=@&walOcN@Q zX>cmZ7-&JJq^>Czogd@PJt7fZr*EU+Apf=Y!5~}c`-=7Yomq{!LhxyRY{txjDLXkr zyt&wlz=ULI{rY`aJtvOfnq_|!QVACR=&q5Ka2ob6R&R>519x=p1q0SFswW?mfs-5Q z(Za5gzo;3qij34e##p{S*J45fbTec%>sQs~B+tTj^=DxEH+ge)ci7&)4TJNW=2xDU z&TDl#&S-5}POpP-5wq5^aV+@&3bA-wDAO{Gw-o2N)j*E6*YO=|jcRUKo((dN)m0gI z!h-5e=Thwo55JRHa|#_%mHXnT1a z17yI0j|V+AuE=!`!I`C6Wa8{=@6qn9CGM~11lC*nc`n3vl{)EcJi!B4^>6V#rGc*- zL9g#o9bf~OWYhP#X!B`@BJgIzM*$ePr4!#1F)(+UvqhC&OHM3 z?E}5MxN)07{+;)~TLZ3TyDoVIwc5%o=(AjI?@-teBDf_I+Rnt)t6w3M#A8kqve2uu zZQ%#njZk(E4g^yHp&v6!t}~*XZbqO$3=(EJfW_CLaxPC%u<)U|@0YEt=K0g&$o>0q zDCtwF+75)K8z#3(o>m|fH1Z`F#uHUm6n_9!;z*lrwQ5*rEtEa&OC=WWQTQQ1XgWtz z0+rKHc4UU7p#e~h1^p;(M#(kJf&)=>c}ao;{%iuz;}?_b0l^vziln?9QFJL@hK7PN zKqZ)WA3A1+q>U);(f4x^8fk&O38efpf=J|y8PCY++cRbqpzWRRKnHDb-E{zb^q@jk zEOm6}^I2CTSR_378<~3`V3xl=j9%g~K5n6Yam^C&759VWv^Al9QnH7%>+=26mPm8?$R<{tHjFe&j1ThmY@JQe`Ecy8=8O^=nrK6mL~-YWb6=- zJ+iPIk)Iq0oUj8Pg8i6*VZVFbVrkewK0#3692K??b)0qyBW zZ_~1dXwI1vr8IyqHH|Y61On+Fa6%qIid{)2gZyt02pFULvHIdN%JI{r{b@q7^P@pO zHT3RjSp$_X5yvG}6Jy};C^-Hi^bds7Im&qV`#=Uq@V5p5=G_RR@{k!HdQTxST)zTf zkqErJAv{~YBuppC0 zaN zBkzIr#7%BIiG|t?921<5Zx~cW3RCs@DcQ_)-}Bk}1c70tI>QWx)(dq3hG_ttn|gxr z9*PBiGWsxgyQ9(K4$P#cew?rkZ4qIHijvzWEwW!7-D zHgY}Df1@%~ck;W&3SHJu^yhdB-CVHqW77%vJckyqoMoL9x(%%wHtnIKyoIhah59}V zIiFi};R0a`%;yHs|Ay;%EHIkZn%oDhux=1vfK(+E;ZS}?T^)|YI37=78X*VPR=sGZ za)9AT#H=gAMMn5V8)HUu`~ui+`bq<~yOt4>B2`~DDBTcRz4xhcftRp1_}g=MlCd{!WS^I7!X&Uw#Kvc zdW0vM$0FUIAxwWs)4hnWEd7N2x(H3y;#WKcU=b{3a)IJt!%T!|4ycs`zl;}k1U9ko)h*r($vU6p(O=&H3&n`O{!mfRtY;{QzatjzaTsn z+tn()VCjfm3A(1Ep*C3Icob#>6}W)V*EU#Vj4xPBM;Z4alxEo(0oWg-Z8kCHKZak} zY)5fFhT{5Liz-xYBFYAt9+%&sci z68Ch38Ie390xP#0MhwZ@KLRX4oWaioh+1d` zEPK5W={VRN`n?~+#Poa~5we%E!$s#IyjVHN-VUZ2gE;wmDFMrd@q`9mGXg%%_kKM17I}U^-{um$jvGjgP^|KCT00(%mpPXi>QdoM4A}zo?x6 zOm@iw=&+A-zD$3FqQAA;b}$S^dQm2&ASeHp1m=^Lb|tOcIZb@1?movyLgXwzmoSPAcjkQ%%s00Ohs!DwUEGA7gLm-Gxht65`*g?&_V(*6 z3*fD%jy49j{B%0=xfW>j6SOU0$>y(`0>pxU!fubQ9#)9dC<`C81c2E6HD(RA;&9WK zqQ>(R{#*6F#m^3?k6r2WKZrHYy%gr^5zjf52$1tAQ#iN7q`eU37Z0~OG17+_@&vvJgI1+@3_(MxP%K{pd6-A~Y9RG9R~+{ADtfquB(s5g<8QUHx48>328?Ac znq=P%B`}Xy++%=r_vrB95fxNO>N%accBM*<(yPdTJ-H{^KRnFm+ zi55Aba_nD>g)H1-2d+&NUTK*hO598^%eq{O}uw3>ZZ_O=BUE!oio?KB-Y9QDX7eWuj;51RBZ}1 zt2dvD_-Dy*th49#p3N{4fBSk-C|DjunPz)%rP~SC3l%?&1%q?L!M<=48hPnIF72H_lD!c0C&*FP+SM`9mT5(^k>BIqKpMK zEKq``jGxBHAl$b;hGIiiUc<8nC9g(dR&u58quWi+qF4j_o9X>*%AyoeBdL^hG$tfb z7}+S$ciD6dFvO}#O0Yc*B>Dq0SmHW~SvRj9A*^jP;-xP}!L7e={ev0n6agt+EiEk# zCFHSD2K@9`%xReWOn^Is)AVr&^xxpf(54&6k63NM~?{IU9w~et+w>VMnsavqydpR{8Wuxm zvY_fOsp=vmSFCo=KBBm9>&P_I)b zOP<1&ev5&9c^0c}Qt5{|ZHP6v$kQR~4rIN0N^ zOzI07Hwu0RRYKyy@UT2wno7;lDh{?Pf+hc2pM#0n(f#}PU!SVQ4(r_TM(?O7Nk2Vs z(0AKGmgZ8$B!XZ1v*BUB0ducJN6)LH^gooLV@I3jL6d&x`R~_&YuOn~U=Tv4(?*SV zAAKUL2QBvZjDH2c`}q#lsvQt6y@D7P;j9;PsD9{o#V~{+*3zHLO$jl?3{(kmbSLxdmB#mDz06Tf10UcOl?sXR*Q@#sXzRQ{xMbwy9YPUS96zy3m z9A7fmwha5@Y*q^@^Y{zHRBzu{zCOof;mmpr%mv30u{Iu~q`g3RSl8FL_gbhIyq|qi zYCJyyg*n=8U4akL;M}MD^wR+f0`{fh+cU7d72c|j1$MtsPB?DU$fgpiV0=$|19+aC zu#I9HPtrmlX17tbbr_s+)EGI>7uoP5adQA29sxh#W1HU(u$1OHE9ZNLbrS#_AW3kO zbY^XVrUqf_&_>lSJliDNZj#7*7dA!;>}s$ryo0mUfbfLHwa5ItNMop(tXZ1XXsQR6 zS1e3p$tXPqoL6NOo(J)rcO4I{ll;v|f>1X~@RRm%gkZFY<(dB&9D=iQi)eRXaPD1T zQJcEtVB^e@ayWy*bTH|+b7!j>1_9Yi?Xf)U=VYP-p~4FI^sE5MX((8KdD`6)gOd>$ zPxJEfvN-CsfnwA##T75!PDWt!sMb1b3^f;@oBZ{FabLc$ziQd%h3&g7Szrg%HoDj| zeXpsK9@#9n?Ji%$n|jnOIG_ixb^Z;Gag5dSCwt1l50II81%4c(6)1&iHhh@OjTU}4 zihI>xI&k3d=@s-rnXmQYH9ek zs~U&!guUX^oCTT^^ge}e+H?<2zhT>ZKfK_WrFDdo)YSe463HKSVcWl-cle*u=HocJ^_nYn; z_1hC0?RTj_M2L0EJd|l#tS}d_{&TmU^LEm}RB^5=N!G|bQr@7)rk}CY8N&9AEF_0S zv102<*e8$F*itIzd4Nb*L9u8wJdr|#Sbh*|95?;IW|cKYewPZ`V*Ou(-CnlA zMy^pJ&B_Ct*2OCKZy~K<^YODZ6^^0&Zk@KlMU^C>yn)8Ng~!B!?wmx1EGs7V$)#Zz z#m%*AyI4&;7LwEL#i-=4=g-Nu!`fry0;he~W2i8nkj0fuUmjz)Lw|Rs+0pqG--j8F zhi5~G<3K(WB;~0)FQ1g>+sr5Y-Vg(0{s-0?G{&-?ztYPf1_wWhuw_q@e$ALxg7OS> zM4JZn-NVU)@sihsII_yzrIw!sTN0tcdSXmL^}Bla9Y1dQ1+$J;Wq9}e2Q^T30qA?6 z`87MQ0c=e*t+N^OK92CsLxdwBSiv=rBUZwSeFm6m?Oo5`p6l34UXz^MQjp&#eyqz)t~1 zUyuK^7{KOVH5BIVp;jvm?nhy>0Q`wF4`B11#MoCFgv}NTBze`fl=f zM)tKr5}X$n=k-$Sml$1x4HmG0L>!zqd5Q3R(CeN=sm*-@xP2M0WfaG^s_N6(fdjvb zTB?5W30M`8riS5Eo-H=`HJB>@Z-0V;cD%i*Whs1^@yP_Mp4Dds{q+$(VQLd{ zG>vC(2HYaRgs#aEN(~`h)en+wsgwdqaCQ~7 z(Xv9%i0aq89K??O8pO_+j#tNxO_RAZuk;+O%9;NFl*KS$q;;iW-2%Zs%rJg~_JKLN zx&r?L)i~&ro@u3y%44+8AO%~%MnmxwY)u=v26Wl{!-l~@S~z8-*M|heniCCyKlfmd|P*$RMwtgp3&jvx_dgSl)qbKrjF4%VBvB0k!kzyY^F%zi2Dx z-;@Sp`J6Lh12;b>=|iFWbg~^lGWp>K>^&kuAJLAXS1ei0B__E&BgxY!$u*H|5jC~D z=dy8po?Rr_G}u?7=}X9PK1MB6Aef}sHN7i{l}#BYIvRG0<<}zNJT+i)-$cx$!ZDdR z?hC^`RknTtd8L2LDph_$MgC>cuT!vL2CUrj+*%0sQ{6A2h2C(Fd&P?866VYe&bKnO z!X~UlpwfJ$E*7zBNpxW}==z^MO+PW%H61sudUdPuM5D(zRE$XpmwAZqma@jmfPkH~4tMb_^~jl`vhlSR9Oe zTxSiu33CEylic?Eh;k!w_F)Dd3eNELek%=lg`b*6tWYle2$~xh!_me7GKw+s#A>Oa*pfd)faiX@=k~msiktEVV+U7I$gCQo{=S?0NRJ zMo)+-ACz|u34ndrY*EPEML(rO8~pey6Icp%j1l}Q2@Gh7*oXAI`t`XV zZ^PL1($v3m=`oB?>PKP=6;eTWc>U@^3%g8=QV#ckoo1U&a}}xG{09#n(0qPu65INU zW}jm5@KW&(w(wBw@GoFFjh}W%(x1u6$tNaK{zIfLFJ=fG#CwE(MF%1F@_LB#m5CIv z;s*~NT*TH$+}DB~EN&PBYtwLt*rK+dv>gDR*<3`wQVbmXjZU)&H2hcm^u(+aGPbsu zMrNKGR0uXcfm~E&9+I5OLAL=eb5;XBLV@qC4i@ph8m^9Uxr!*(dRq)ABYvR+56aHU9i^116UHWNh-zL6AyX%?NQtW?LJQTrsn1Re_xe-66{hmM)z2DqpZFhEW933) zSeu1sn(L>)GE9Qujz9~n*kv5^k!w@fi6%5?AJWSS|H>ofgAM|V3kh(s3B8OoG14dtk_K8$SeTXc23ynm#7_o^A{#Z5e4Nl zN2Xyr>@mA*E$t-!&(as%Bde!awN6s?ky-TjUu@3$=bK?NO=eKs{*m z(dz>K8RTb-M)%XS^bqHRy#M!;`e%8UAQuilNS&3BdUQugehi>Ye3l^WFW*lAmq0*3 zmts^JZJ-||nlUB{2#uaAW*`u#3k+m`nK+GtI?Aj$KSt93&>x$*K!2V1&i9|zK#xJc zlMQBOm+D_!ya-*ZMF%n|1?2+QUIM=+r;8Fn- zJF32u|Dcgkx15`hc($GfTfJ4+nM(`CUpO_MEeL=wnp+5?cFM-QPczS4reT0Knbv%C zIQ%(Nu`^x%j(=Z^7CIW)4TTB978cdt4@FCGu1%lrb-oZNWo91PQCLu#c`UW!iBrNdTo!Usz-8W^I#4uc!Oy& zN#wbu;#Ex&wHZK8%^6>qlVAb&@6oG(4lqx!a9v2uw-#hd@{b~a8h&ph*Py55v7eEk z`#(qrD;`UibQIRs8N()4Dni07KE2Pck-zuuy$!eEcGn|QeQw?`4soyfLNucW)FG=!H6C{;C z12Z6Sto4zvI+N!jp$ujd?u zM~PKfWd2b4PWyzT6j>!CGDyW9!vSRzl@ba!_zR&IRZLiy!-o&wrTH|yOl8lp?9)H{ zstR(w<)SeLG1BhY(E6rD){(kLVACb_-PTf{DGZ&x$rp4($!9&DYBTuHbCp}7qP*Hthg(sRPV?gRFW8xUm`rgvf{E)&j6GJIKd+M%n@PxAxK) zIZxF%TXSU6Duj~FZ9EhAIA<@`1)*4*qDdE_$>P#C1g0a@+Yo%`{qNO4uImKN zBk?_j%vUeDoO&6weBeO1WFF#f3z7sF44ecLl( zPi;M3EcX$F4!Z*lF0DQ1!eek{S3GM2_n=p7*kOQ!P%QggKZ>S@9e6ikRxw6^yLc@| zObpuPz-xFREmRkbM0U_Zya(>aT_coDW0;Gw>;^D{BhgunkN4C7V}Vvn-oWMj1ZA35 zOJ(WYTkTu2`mpnt{kD8UECkp93-Z5?RJ!l-*whhL+3t9RogIufwN4G@K7nnO=m}W# z62~E9QUN&rbxkl-no^#Rv`hja&)Ls?s>KB6no-uTS)lhOWVc3@ zJwBQhGkNnb2RB_t9Tfg|)0~9kdus!gLG^Kx)1;_X(RCXghT_h zxUEB6J*&7GWL8oMEM7nE3xo9_`NWn(*ahNt452xoN1;xXyQ=pl6$NZ1Mtjwv3#2<< zj)48`4>xS8r^9*}`~Z3ep$u(H(+Gnfu)avQRy!*Z9W%t}2?InmxCfS~o2mhLmc;l+ z7IbSK2+E%%1EenZ7HbVcQ+A$D#q-}~{0Oh~Hr0vLe#Nt} zXU9eZZ+n7G^9Lo01}Qj%i&Bjmp52k%B}Y=RU=&U}-G99s;t<9Yh7t|2I(Mev5Bb9; z1}Uj{ij9g>l3ZYxZd#R+Wu5xL2ANvMcyvGArZZ3va=xt?uL7lsm8%B2(ZN;#(0YKF z`dJ7p9b)mTaso{WegYQP>?T0ZF^;ipBEU2NEK+`99pe-z+Dc*Arf|A!$M}@>OI8B5 zb-&QQPcCNnr4VBaj-&+^0Tiu%@fub3oW%H`O@#=Y?}B^{6sEeTOP}yW7V`WemG%zi z0X8(SJDKk3P`ddLuKS;G^I?BqPwBW>X9bh&u}(DZv8F-0pCeOgH^)W`Z;jU})z%UC zcJW2tNoWMpgg-KzDD0O8nEXZ>i-6_+`NLEAIxiCpO@C7@NypSG(UB46b z5bsOCSIpaYWtPIpww;wU8{6I^T3wr2BK*1dK7$1$;jvLHC0Yze_-Xti|Yd0e_v-=z9$$K{jlpC=_Un z#^9$}Gz5)a3i%lc2LEdkQ)Bdl%@qa-=7kt(MnD=e>&K%&lKiMJb^a#IFObpw;I9b- zTA&|LZ7|8t&!P%wbef~m21ip-oq;TS{gq7~=Hi)H-x2s4XhY6JpKRs4;W!kIn_AKW zD>OoGMW1ysfdvm?jLy>yY!^f6}$wHkHTCZ3Zlz30WHA;MGCAN8I56jABGEj<+Omm@k^Yk zD+OrgyJ@j}3I_r*jf~xuE3o zDY!#$UIB;A&#hyj7~j6YhHZd6nOi|eK!?TlU;-UvW{ZmucV#d=>UvqDjO_2v?)x%i z!OZfeQ+yY(JH0y@>RK+c@3-67wtN^7>+gUJfo_G)9`IQ>{=j3k==OiumcOv0`*Kka zv68N`zJ$tl-iPsbLcN{~J-f7`Bo*5Sqi}fguIP|+=a*AG%TZSzfY8cxIWH(>iV1_| zU4m1eML@dA;skgbLK!#5OSyl$E0zItm=jS=Px^|%afcJ44kovv>5`gWK|gUb4`cdQ z@pT>ZY~W+SV1q?(Etq>J3U9B4;0Q;w{%TVlQr1NUEe57?&uWY?{=n=Y`t*_|ORfRG zaeR~eEMhD6>^DN&`I3*OM^@xn4!)^pQI5H=KgE7rxbVvo7Q1Hj)Zh8cHQ-Tp!S+j+ z{KeOWGIoJ0&1jv6n3^EZ)$~)kd^a7VLqe2vvWhQ|UQP>D1#>$#!|(2iI9TXuHL)Ss(Mt>P9#3cn?6B6b>}E0dV-aitwFe)Q z9_ozV1cPMucJ`#c?6o%Qf}jcp!W&J0WOJQ*?NK+@%+{+)@lpK*tP)HU_vru(?-RUA z4}5xC{D$xzg4L!n66`uMrRTOL`Vjp@tT4%49{9|$*n_3yXzVN0R`H4t*h`fn(v)z% zzff!=3(T{1>(;P=%ij#my9tdwl>K>05%USolB*J>>mxIn$t93|UGkqxykK<}9g1E3 zbqM%YdKppA%QUIWexU4I1?^8zS0mUg4y7%WzyHplBuq4Z@RE07O;=UuXEe{*DEJon zM?20~wlNL+oIMBQ%}>o$;XX|nq?$2Tx+OZX7if~?*4ZFjaX(Ie{*9MZ2{v#W$kdzb z4;^xg>J9#5XNKpQx)M9__@2L;s^N*WZ4Ucm4oWQ zS7dSUTJnXd2X#ZuVz4Slk;vh0rWmCUCa^u#zseHoI@0BC=1A(RlbH708Hjp$1p{LeTQiCKEQOO!Ba1f!H){q3-iH>qjxXxGT z4pg#D6W$m)4ZEcR7?`1J7N0YXc``!R3+PF_y}q-K5jKU-(KhQ=6C11+#(p-C>z_E@ zG=C^2Q$VA`_2D#%{J~f0qggt>B=!N)*Z2;_j^S9XJEvjl8pgAQu~FH{V`PH?284qQun)N%{zy>tDct%^mzqo-F86wd0_31^I?IW?g|S)*WM;mtJx?X1ioBeS=?$x+OV2_&Z&$ zPc3ZpOvh>b4BQC55&k@bp2J;zNn>2hrO9_+`E^^HvG>yA@y(}zTVSqreVchShU01$ z7>fyX9>Q|5nn0QB*}OVL0ohxC2A7tvuoz* z-R;|ZN?>B;iaujj(0cMSC%pG{Q~~h`#y7qaX==EX?bTkA+eMsJTjitA4}ShuZFKWs zeB21V_Y9P{b*f2uYSgF!tAoEAvGS~J8Hea0I?y3;QRX_%h{_+jSIOW&v8K5L!Xlq@ z%_s$1I^Cv|FvRrEE7X8<)v7-q!p|-A4K;r_L#J(Ki_cCqrlkQH;kXy3tptUsNXFlT zx|te!Fp_~#;HZj1`f~7V`_;J(&fYq@kzz&16cc`Vyb5VhzEO1N__2p+l{d zJ%yQV4Vd6gG0W1TJq>t@;3iQM=v1gsv%FH?LZ)lz4V*z}sv*RCUnAGVft&HnV0K+0 z9KlcX3YdRVRMe8@u1+V*Zlb z;!PMA5h87&s7PGk9GoDhae|`B_Kt++7Wq^KLFXfkd{hLE<>OsifcJpfI8_vLYrXn# zXCJB7BNQhoQ-RY-t6KYRp^DbDkeydNTb+*{9jKKU12?Mp{l6;5I_Qpcq7^TGMK$`p@FsFMME z=l!45K+#E{*_g@wf@*YQ;k*xg6^qrd{&bpK-_yc-Z zg{3Qg3nSB1OyQi09r_|UFa22*I%?B%ewJ-vsZ5bRfzT*EB0aPWg}tYT{=Gi80^lsB z7EmI;lk`-~!LcUP^^=|SJ}m0=>8LzaZncDw47ErGdbg&+qQRdi8Fh51_I<=vk06jbZjp7v_PQR1XY9dhyPj;ky zX$RTd#@o2xv5;(%B6JTllHvQo6alyd(=4a9T3v)h49dwRSU;A42{Q*d^6gWY<#jOD zwZ~;b))SI4HlO6O8RDI3m{)hF36axvX7GPj_5&Wj)?27)mcnJu393k1!{2IP^Lhe5@@MCK6!otk~ z!!9ES^t3=gpHH&^Z*4+9GyH8dxR~hZ>;yBWQU>6;s@L@FWwA)oSjomb3+z65G7BQ{ zzGQK4#DFC@V{gBaVK~jA9InIujHT85xhV^bkZaghZ{Hv+g!8%xx z^U;F_pZ5Y<-^Yw?jf#3bhcDqAw{1;@n#JKm1?H8!j?GI6MP6d2Ch3i1RBrW||1^%F zlYQrH_z#t)K0&WkllmuO++C%qPr&Fj^ouln*)*>z6^j%4OR%{1th~yuKR*m69{o( z`w}K$)|l5zT8q}$`>Ap6Qr?H8vX+R!vlZ|DWHydaRb>X`ZTGq~oBbn+Uq}4i#hP$y zb_`yLY^u`>5HNR`a3tJc^I6`0K_+Z5teMte{0H$7{sql*LA8jj`_z~}#CSE!LWye_ zNARbJmt%RZ-}nyX#b1?RPoHFb6K0^jhtO5yXS^x_mUeM$WF)n@iN$qFr?HfX&-i<6 z#AZ`FpHG}Pk?NnW8bpj< z*Pq3$>;|+W?EWX)D7P=18~OFfeX3?FDtMLl}QV=O4J8;8Qi!Hc+Z@gtuA+dg7~HSgehwKT8_wWlSI^Y`aKU z-*(TbQ#g2&*t(Pei&Wt5{V^0YcA|4FKXL8Y^2&5u1mA_}i7kJ-YVd~xSpNhAu|PYy ze;8$;y&TP@T@hYa0*LZ;VtzIycui^$qg{Q`jM&u)Kn|PKC}fjKzt@PpE;WkTq(*Ho z+oUG_+g#IH3Fe(TtPuU5C9Y0Enaiw7w0eI%X{@1r6nTto=YI=>o>$~o!!x1XQ~koT z*b9{QnLty6{s`Hr=sRKb$Z{GBHdo-l(`+>g{#h#p;pyg45ik`S0w&95TR=r7ZM#96 z-jXKm)S@3@*@dlI;8mrK=@h#`&qU~3x4UUz#hG9;jEMyNFz=5)0#eY^rYfi|hMre8 zmej1LkHVP9vpwCcX6LY8A2&*km zZk8=&`}E#;Q65VtZ)~N?5uA~bu;^ThEVFxZS;Lr-O}{BXr6PH~aE)o})~y=~8iUoy8m&*wPAj@3)rfs~+^U0)f_YbfUwgFV=WRlW5H^ zcsvi0D*{OgmM*azpQP$$(dF-d_GN7Rc#%xQMJkaiXZ$VeC4cbIxi;UcRZJqyt&&L5 z!yU91N2mQyeZ5XCwvFNxYHW+8ZnA?4Ew+WET{|saXBJWAE3#hSBG$pZ%saVNwnKP^ z>J^{8R$Z~3->rI0$wF-3AxXMp*tb(?@L)sr)Vf31x&+O|u2Epr(ePWbaejPK$-^XvA=j0E zp!a-5%XzJQB_&$R85JgXYOi8>t-K49X#V#YwQ}alm8F_AZt?{0==nc*i`7iNd;Y^3 z`0~{F@#B*pjOTwI8d-%q^bQB=l4E0qU6=g{Nqq`PObq-<2>HO6cz<$mL}Zv>V_)Bu zmtX<-`sW6)TjZw0%KfJ~e*szU`lk+rq>odWt1L(4FM}XpU+ck(Bvt<+szyXkHH`m% zBt(q_HZFzN)umuy!C@CT6;Ga12Dwh-IIL~#OCL3!4nsavz3h3B=-tGaUpc7uix-1* z!UAJIG$Fxw&F{>tfz*G?i#Q*yk~y>kE{jaoKtoVGqed4wCxpYFA~- z@G93YlB}S1h6q{IS6(*ptK(F%d8P5mmA>KFkT%0!k=MhPIB$(|p;IQHJh9Ss# z;gIPOj$jB(4ltV~RN)&@k*e49ykWc9yE+WPOza8)4pAFh0FJHt<;3|M!4RlE_i0r_ zkn>hY!FB^lj_*wjxQ!ow>eTpC=KcDTR7Tl>mhywC;ME@yvj4BY{yIitYl~og66)^+ z#1e#<_Er|?T86Q^Z!}|SJWhq|F{?OLxg4JMa*~^|qfjN}=MTSxD#Ih54x#xkh~4-u z*J(#~Ba;9nxXs)R?c}ArIZSA~DTp?q;1>1e!OoL1Wq|(8-e#=RHg^;xZ3j4`0VZjr zym#=z8iU?RjW?D`MR(*Ie+2{#g;iHM`RB0cr-t5%$KHkPYk*p{qq=X0pP5GnC}>u; zGXeiV3YrAvsHn8R31b9%h+4%9l;s6cW-reYp?R=NO2#bm53xhZS=s%Cl=NVrMd4J` zE=7u4RhTU2XAe=6e*Q9-_?Mayw1Gg#>ZhYIKvI@Me)MOvM3}`ve;Wv5{1>{9NjuwI z_kIml>owSSCd~bG6(yBVO;`<$GDGvJS?Z)wj>d`k+>@y&YD-=XG0X^<=&HZv7@SHb zm>T-HgMItbLA@^_Vp~}SR<0u;QswKb{L%cxoro!FNU?Xw4bd9OZitk zpi6auYb}eBXW;hBu=r;88W!4#(F?mQNkR75TVLKlbPEN;c!oyBeO#bsHb_ySwp7I$}-h2p+Nij)GyTA-yu-6pxeGjrb~$t3*W z_qpEhd7j;6xagd7e&-~aOeQ&zI~f=rVAM3ybEEWKPK|P)Gv7%Ol~I)anh?r))aV{l zVdgJNu@vJcEZC^qQ>8T6H;IZaM%e(fa*rbE1@j%+ysxS=sWVV5ePMDf+)I^N?>RE( zmx;rl`Ujgj&OR@O12p$i)t}7U9?iH^78QEY)%%Pkp`A4({cn%=$n)v@zGrY!M_p*6 zw&I|t&}k+~oD3MCOv&KqW-E9FhhP%$lydBlDa>zz|MnbkYn3;zYu>zzy7(`QPZ&$5 z_CC~`f$Cxh=IfL(xU7E|tjB7w0_^jaEq9n>J0Sws+;HW|2}eqpF)jXAmTMZ#5IHWV zvhJCt(TjKVg%!;=GH$-6#}L}#5{w+!?jgp#j43?Za_IoKZwy+l$HTv)lnu-l$4iQ+Je{c%T>6to*t(|c(N=ShALqlo_zQgp*cEIPUS(wvWR; z_My`Qb{L;i%5I4=%$!bl_(|-ff9xCsolpNmt{$2Bgwz{?>Ww-OF^aKS7P7EN5sH|g_Ln9`>fN*S0#%yLvV#`mu)d?f}!HAKK3~*Q-sTky_u((DTI3` z`Rd$h7c5m(f7nKAz-kx#NaVvfZHN(0HrHo1(=h}K`&kMHV{6~vBkGeN|F_gjHH7#N zAeUK04sX5QQTUZsBO0^9y%;RdkKztWx(DD#fqVG1*-6QNqA?f)?S5O@&#AE#je4;X zUTDyz$deL&C2EN#%RfBWN2zO!!z8(jzCkeD)eO$h#UGn#+7wa97rOV6{6|D+nK(|A ztACvSOFSw}ggTuPWAfn;dl-F7|zI!&; z1fjaHiJXM@%wcW*IecHsyAqpK&Si0h_N*Qy%5y#GWJXlhN8ZLW#0#OCn#-==?u_GK}`YJ zIc02E)7A)wsiqT9HOviy+@x_d;oyrua;rdE?Hl($&wf;xZC4UGuVH6XHBup3>U)wkj6O_ZMMvt+^dLgd z;nl`Zw28yZglhFl--^|1gcZcg7-j=9ME@)^y&dRg3xaA zz{XCL$YCcVgi3tAgHV>vzh1Z@9W2jgWovxs(1SN5ZE}0FZ{yl?O=!THaV4qHbjIFJ zr@vAEw>i+sa?%)J#XTo?s(ik5oUGFFeW>Bk^iCMtR#R9tV2DNa2i7Fv^UemlLFqWS zn3d0d17oUt4`vmtP!8CWB{HkQtYjj7Y4z`Oo`N&YwGIQQl-R79ZGoy%|Gog51`d|B zfaL&RpWfaZVq1j@=gxvEAAx<(LvtHqLm+s6Atdlt7dQt7C+sysXuxgQddYS@|B-@# zX)(Kp|NRhvFVo#EO|LBkSX<+0qAgA|1*mE?J^6=9n(ucsjOrUIirqR`^|LJa)of^! zqp>Kna8+uZhCwlfY|55D>HU(gC5C! z$_t!j8SXF)IREm*W`=&KYFuP84yms)^u6xRkVE-tk;=J2>8qkL%pLY-!ZT}F%Qgcc zyORA!9ZP94RnU8o)tj7XRn{~#s)jTB)5+`0%2R!G6+*C0cD$j%(dAYOKF*@7%*Ok` zjyrs;^bZm0PE)jPu`c()$hHZU4SEqA96Wpd)!=aG+sABZVys)xYJ3~iD3SFy;NBwaJdP?Pz~F>9;q2ypoWd#6NQ^f{EMZ_DEyl$=f z8F;^x3r>=ks)^9LaV4xw$&VPHdHk}V!7KVTVZPPy2Yh}EbIJo+g-?}24pVo9<85PN zhBnYc1ghj8v2T3kjt*R}yHOA@ixR8|?CqyHb(&85^)k43tr-E83Fj}4$ng($ja-*8 zKeyMi4K=xo|I|5(YIK*pvbiIaTxKrf*Zlel4mnQ7y-fO6fk&vY0DJi1rFjHq%`v7t zYoprq=Oslic0zhuVWX;n&i9fmmq##LPbgZRHLr-1yiw+k%jHIHrol!gr$OH~>nu#t zoh{WtG0d8%OZyI-&V|I$1_Vb|+o;qhlMa?*ylRjY6J zujD|{wvQeu=X08MeB))e=e-#K$@)+A-QACf2foo>(@Ho!oW0oeW>s)7xulZp-Sf+* zs;tb$=gj(Me7DiQ6 zD?qIqoqoT+!qtdn4Z?v|hc?qJyx)i*R2`=dvr5XxW5X~G$jW_GmkT*Bj(bGA4NH^# zZEaC6e3NcNvOf*?vc)m&O$>##9X8U2G~SRBMfYR3KCwaQA$vk<=Rcok%~a6NqjSAb z3BRUWBUmB+_-^Fy%KkO4neOjG>oN`~hB%Ue;K92dK74rY>ea89ZT{6%z;xoVdL9O! zO$UH#8sJ6oI#cAHzo^XTxH(DJW2o$_L{^OAUz%N=rqBN}57L)dr|vm5Y@_6${<3zJ z@r(`ZZI%D=hi56W?R|U0ifo1C~Rp;s4x}JDyOOE z8a>E_d9U(Q21|>FhxcW`&arlikI^y!f_xLFb zLXV}&E$49xK?uC4*EnKxEWsh`iZfXKD>&)yO7|7ynFrOqRn(mGxI+(i6S>bAX{>X^ zaXJ|qf?TI++f3;~8#Ng3U11X11ZVMrP6DiNa$ugnL62JSbpIo_vz}CpU zP@6Z>8}s2v$oZg@JUw1IWO8q0%eu)pG9Zj?A7li<9EBxrwpO66GTYzs7bKjvfD+l5 z0)0Bdu9|^72>twiQf!zXZ^$EWn>IxX+z-|U(TwJOE_frf>k1cZSQIt>vtI?Hx{Yr1 z8~l7~r7?#!B}ac4teGFg9rAFRJ?ofHAEhnU^#8&{l{9}tf5{+x{n*5$c z<7lEZiG%mSzfO{Cytk_;zpz9yV?A0Jv*0W#jbVssB%JqpWvx7makMCvElAQFCM1om za%G=JGlWBgr1dcv2$laxs>97TA+U4& zX)pgQ6wuEf`(ex9reF)6KcAm}7(P2jHZzQbD_ zt_(_zVKIQ;-nIHCu0Jw%P~z{6wFOm*i4PV3(OFGi5No&eq?``<>dwY@Bv|{HpU^YZ zE@3g)TkQR7vOYe>@ly?f;ai)-k(K%sbq@>@fEZI+{|uHSQq$~J9yKCrIz*PwP-3WyTw zFeD+b2+KWCo47Zr>>96hnN4yKWIi{TCst&ggAJ|;qjl`I*vIc6Y>8mkJX<(ie_p|= z|1N)S+^gbVl3bpPxHvTFa5UV9!Aca71xE|Gql!lu2sKm$D_r1aC3S@+LtzTR9XX+l z*>$0fDt$CFI$I1mWSQ2+grVuZy~?^*U3+<;8A3zbyj(vlHRzl>2lI=;39tQz+jAh~ zm-O~iGam3w_AlhXhz+WjK4JrH?$YhEI>Lz}a5)O>(B>g-WRu*(z7z(hxT#en>V(-2 zbL)w!a!C_5R!s_w!PHUJZ1>t4Z@;a7#+uCyC7@SP6{|K3FPn*t6C$n|t(Zp>SmR2z zoea~9y;7fM>fit1#}Ck#CHF_@u|H4R&|tqM2-X|QCnk|P#`;?6`NE&L@Lzq0;`?gU z%3a1n4lh_LCuljIPGN3++}vy~TlMon!U|y`7J6Z5B6&&$X=H9CcQ&#{x>W2TBTLbv z&1bc1c;BC>U#@8KZ^Tz}z}dCmZM?S?N5i?zl}$Jy;C%`QoAnCLXReOMFE?Y(S3Y%E z1odw{(NUInSOgg7WwMP3g?= z@EUKzbMoY}tmS1x`^6|#Ocjkyppx(D&%|iCxtEcn=%%~rFUSDqZ>lw(2C0?YIx4@Y z`%sdEnbcK5r^}aB^1tC;?NZbj&a9c7wCtat1NA3Akr`VoDgHQpzC9m>6WL!$r9~Jj zAv~=Ip`0<|MH#4vq*RsMfPEy<+kjtezb(tPk%d)n3!&T(h0{`~hBR7a*EQ~yy8tU5 zAYI@>Rp$go!kF^z?k3dxGO1n4CMG`wJjV=Nn-ns3~s1Z&ati~^M*AbF7iUWNg1v}-#j=*WR%{}z?X?MmH zE$ZED(nn4M?`<8GaXp$QN+`-lzGUS@DU0kEkQV|7wTw7p?uRSN*~f>U7F2e{7D(JS z$1Y?3Y0F>o79QkXb@ej-qqRDKMx`e2lcyJ2Qj%|sEe9^2 zMFj$lA9K`S@NU5czxhVsntHX}7Q2Z1a|c+G75RJ_2L>&a2ef!s?=+EHmt()+yt{{*TG%7-pg#EQK*Q7DZFe4}FYa*mSsNYi>b-G~7awBh~ zJ4@_LmX3Z6nwCJuCZ$pJy11qy?5Lav*^eyTcYae)~r8R1F zfN<-VANfpLXnaS-ugUR+;_!CRQoB{B!bC1@0K3zMP6e&mF$1pL ztWz}%|McgDWkI_nX*BLmr>81RjCMe1b=HLkgK-R9bxp?~0-*z57FBJBUf`va;a*Aq zC8_7f8oSEv;-m}O+M!Ih)0${{D5nJM#R zy$u_1d#?||7fK?{k?EBD(Pm~p=%SS14h@<%Xt4K_74sgkNRl2^)Pn~Kj%qK0a@M^Y zBjM)@3sDf74L?nZlxH>~hwC|DQ^~wI2|n59hy04sHde0L^yxE-XXGK@WdF|`*mird zpj|0A{n(Tl6LV_#$ul$oLuB+J&lwT0 zEmqqhr|LWIr0q0gBQEBuA5510tZ&Gn>(sHlmHwRKd?wE1)gk1veOot#x~0w6)oIFo z9Wf0OsT%Dr?hroW_9yx$sp{MAwft%_5{)e}`X`NMh-}lRv5u#v(Ip)o0xr&YNJIaN z3RJ$Wa-;rK8Rw<&`P0L}n`d9PCIfdYZnN*IxJ4KKlxHT=)xSaViMf+=< ziFmc%B+>+}nf68lpbsmq3muo3ruS@y_Rh<8dKv=J$&%~t;dg>ZzeC8)gKfX3n>VYe z$I0I^+1WYv>Mks#=n5{PN5fEy4hzPfV2AIj-!aM>+qaR{4rwwQQRukb?c!ezp{3?t zt~F=oa;C+@nyXeQm+y;lAE1SoQ2X#Id)x{2Ff2_lSoKUYSbx@_43MS08b7_Y}BOa4k5yp!|B0(O4Y~|YA$L7P#umJ zWi$0U$jdD&SS!pJ{$H1#V;LuOHef3yZ_$&T#tVgQfad`Zkr_gsLNl=qAYU6v**{fm zdUTN(^Qk7RkSny#seMmu0QF3tp04prXPsuK@>|5EX)qRJ9e?h^gru>}J0f8!4_(*P zSR%LYAXcRFhyM1H-WASTPDiY6-q=TfXpPz?yA-g23dg6+ewJPj zaQJaObu^XpmoQ1_E@yjwe=V)9bG6xxnUG!=PsHg=nA#vg;ftoz18i8io#FTZTWN)y z8Q#fn$fC5kpvtBhv~jS@ApFuhx~Z3*Dvj#8?Ap0d>J)el`Y$4iM{WwYd6rq(N3V3g zy=}a$;H25U3%Tze9wkSa9{3^OGXOOIvkT>g&)cM$5c(=$pTR+h7jZ5l!g5Ryd*)sr zq^=^nOqLWLU`L(Ms3!6p3RLvoai z1n#67Po)eh>z7jYmCbClLMR?b2jYdh&iS4-zk{v#Qcm39r$xw`<1Q(#b(ursC=UG z)rhc`XxsC77Cp%{)izPsK`(ygb_QBm<3{)Wa!X?vqCQD!%!t0Rh8$>OF?rF@;AgGj z)30R32$IV56nfq`KXBKc%e8YiK103~GXw*qU6(<5du4>rC_@H&(G&!@0m7ja)F?*S zdCbvmjmcBC#h&#tSxF~E=YAq^MlS#A7)r+R5rjfWf}mtOcK`B{H%cpq)cw{jvqxl& zqF`9WHc@1W+D8yxCqv+%NK9w95nH9bJs(}dm`^fX5`7^JL z!zJRF6u3Mfi<@JOGsn}OMG#U7{3`9rxQ-m?5;iw))mqEL;?jxbS|bfYJxEMfmFu}O z=5W9keHvmi^&7=|6`=}2F>`Oes-)bw#RjjkZ5Sa>Jyh%{ zNolCk=;u%5*;Wlg{Yd-|HmnkQ9K6o>y*m-hm)=!SmAu1;ub7uke=Zr8-6T@dsiYI+ z&3ebSOt-{oIxKbngOK4RI2|=RyAHG9689Ljr2a<a;Q38A|7BT4Kt6a#(Y;A=s z@?{3C5(wH%AcH@Q`l%HjvN?Pw-v|_u@VyVGmHsu-?3)^Mcr%G<9gl_xJCK_vb$9lG7 zEfz)OX<^fd&^ue&Zdl&wVOc3ZTS$Huiywn|zO#k|X=Kxn_Q@f7j@|dpoPK!jF7U+i z#bg$O5Y>yxEQG+!V%awqZl*^=p8Lki83<`)pIS{an3+OUF-VL`n(h{h_5w|qpE>_c zI)7V%>kZ-~c(@jqF%}GB_D{t46yGfO19>`X=|)aJE;k(U1{c8r-I!4+gxV{Rd?EwB z#dxn>ZsON3LL(w%3`f%a(NLUJD_h};6??CW1TdN!nhM1uZAmQo0wxn> z@&QtYF_jS{sDSopjflk(t8r)tKBzN|z;2Ar#xhvE?&}~UmhU>o#?LbVU(qJ!&%=44 z#v!QrSUusU-2^y;i&~opXBVA=*zHP{f(N)?PfrL?C8KcIocyJC${QH`(U^h|>iZfJ z4p++Q;W-#ceGjL6Ou*kq&~D}F#EOE)350W$sa!Vb4NFT-pD*eeHmMgQ9jt25rpTr6 zYqj4fiGlG;Cb*-4r^wmDtw3O~=#~^N_&{N|Gbx!a6NX@C$-k@NUv(eh8GHolWh@yB zr%|m@D&}lNplCQ=l-}~QwC*tYHC~`G7%T1NJ$9wC^M-}Zmv;V9wjbR|_vUyREpv5z zE&m=5ek6BdpgUdnjfCI@I zZ6g{Rsz|MW*k6X^7;|{tm?itiZz4oIrAYMifa#E7V@ykIaaLyIopzFG0tk5$(prT1 z5F&ixBAajWe<25o^}BMeR;@`hR@E{YXOa&&$MT=(axB3KH!i6>@3ukotCy94UKS-{sL9lnPhn4}XOyz&YKl2+nP}qfiRW;N78Wu)}?md`n z(*Ju2+HVcBkYjx~4^{YMI({J+?USZ#bv{CH#DaxG-eA(4wRC<+B4rQk6uxV4^=(=+ z$V+hDx<{EB7KEC`-1Mc&lSL*Y5Ue6$Tch?C z=0Q*-NWunl3KiY^g75&G2j|sYG&}5o)Fz}|VG{MbKFF-cdxVU#N9Qnar>ml0)hsq7GTO{71O7wfju-d@%A<3pr9P~yuK6OPomOe6!0qchI$dy$)LksBw zBefRe7e5Me#i;k!rJW|i#;14!w+HdF?72$PFkX!|$cjmOIFJ6_K?#4}G9uv-2lI)R z;-P;!owE~bHh=u73YZ+XgnBWS4zNjlOIfxNN0wo*Ez+y@$}8G~KQeFFJ6t+z{YEz8 z&y3xk_ysoK>ll9TMTO~n(z4Db_{gSZsT89m1fkIh@jWRs*ojs3^o~ep^jQR1Dc@@8 z4@Ei0F9|kEvvnFSy;PX;klFP#u|gCNx1L~M_%Tjo>lTmI(kz&|&V5@7zLJ?XLuhhR z$d})DJcBIpVj+b72$Xvzr?^{IWzMrnl2)*BnZx*}NwVK0Bw!-1Wq=)eWS0o1zUa-# zlmiL|XVoreI~Gt!-jJ_f;MDO&g4LR+8JP2HY*=^**mzEqvPi~6gOW1#(^u>S@nzkP z@oZCP)f&z!2$EZez(dMghVwByc~~xuk8PBphTK#Rm0(NpW?Trt(bPSS({#F4*_#sn zA)C${C=Yq?Nid2q3ZNvW?ods$k3WZPm53_(C*6JgEie%z51sokj}6mp`sHr`eY6QF ze^3C%0NNmbe_zGGhnnv42USYfs$>lsCZ2q(l>8SAbp}Bi4IHFPXDJ53G@uS4nBg>- zF_^^&A!>x*7zPAsOqVhJ5CA;C9*n<%mQ!M6smGyHf-J^l!X%&`B0~O#2z`tR0VN+_ z^_}_p8f_F>&KJm1NT4wpHZ?^I2osVy3pDhm-W_aVJ+cD=H}NF8N%-?zq0q+&nO#MKT(etbo};O z6$>xDkPy6p9$K@8Ir(xNAqioGUefUE{e~#x;?IP%om|(K#8Fjj!Sy%M)R0%}n`eZj z9OQF8LsF3U3@I$JrnTBVK$xZ7o#4y}YXes4BZ;K*A1|=Rk{xu|@b%X5O@W+{ip!%xg;rt{jAgo_>bE z<#KWG{AXe(fjDa|ssJjA`KOc3GVy|h)KUb7KRus3h7L~YdclM+{yaiGgO@>M*G}9Z zu`K4aVN;$wjej{>u+)uEQ))VQ?)h6>XM{Ec^f$z0C3{{Z3GxcM7sE{u+F&^?e=3z5 zH8NwaMU{1mYrE3li9xaEp>`w5=%#pwa>1B1G7QMszE{U&897nFs4QVt6-^h}He zlOtR^*uC|##h+WsN-dQu-Cf*9umvH>PoI6<>tr6VLX(5e!WxSDBe&G##;6D*3BNJ` zuuduwj<}-FL^uZ8O(LRxRi=RG_JXuzJx}@wAhckKXm{cQO{q3f4Zx|*!0vTs@jpwC z%lp|{MK$}&+_V1r>v&gl&sIsl2XvkA;qToXI8T##^6t=ZfPWgrLlMfgc{8ja5Ed7Y zV0>ISE;l3*&l7?tFy_7}IgNWUmRk_sH=hy~JsOIJg!E zLTCmQ#em{m2rYx7;&}52u)BWI(C8-#6?kTj`?nz2oo^)v^P0QYPR61**!=CX@Cr^d zr^V&|T!1R4V%Y^{F1zzG28Y9sWdLC9Z`~QzHZb{=ukAHa8bx7w)yvD)H$egaA*R*m zjl!6NNrVvlJ$9lH3m&Dou3S90DpxEEbDa`8pQ!Rsp&2^%mE3&&6|7NpVVL=Qi|tBJ zg2E)YmNu1(QPqykIrzo{-(~EyXLIt0zGiSilL_ZZ$dZXfDUA$1mZY8n|N6Ftk<08@ zWz+ovfxH)0A@*%%lxYq(%q&~Tv)h3Y;YB!MqLzC}2szw~2Yr+MyK*3NiA4#Qo{-0j zpts6g4%?s-Q5yOrQ{|dBB;w)4pBJBbh|TW4!>`BI$WC{T%Op`=<7~Wq_b=$8xUG8# zK4b(?L#J_tC&L?duzi# zxn}l%;YGzaqLRu!z+VchwDsOuo@kV>%CYPeidPFOg1n~&@){2rZ5bQ2m+#XfbT{pz zsryja+AMpM`?jzRw|U=rA+O4#lcRaHPwTLU4<6w_Q-HF4FHAmN^cE$<5W~NhwDY}| z#^kn|0Q;X~f1Rl^^ga6z^UKi^mCM`dXHm=2_WU0cR5j+_vW!<(Mx?R*^Il)lTH|P< zf8IDt+7^B99+)y)-w&6Gv^FWZ8@h5WA%;wZ_9yJcP!nxX(~Hl z_;f$&w*fY_AIGkVdinYbtOHaFoMvA!9^N}#wY52a`!A2S7 za(w~6Eid>`^1j9^=->?8t?j-B&PY0CzW3V58|jg2;+W4wN3V1^$2N;9ST>^BLA4E0 zW$L})+Pt+@n!UH1Bz7d*MAHqe!L~daY2YZ*q1_>#cd6(&)Gw2PQZ_K-I&miMuM&m9?T>{kO;%HzbMAC5rVlz8{z@%i72{X2!E><&@Y)t(lw`_ zv2R1jNk*iyW#O#40V>1XyAYC|labk2*H9wd_6T-RNGi`a%LsXLn-8IJgv2%$U^ifQ z5CQaKIw7M3*gspGZ^{(k)0P=i+}Lbb_GR7!c@ZQmaJ|X4gYRSjE_v~5B2%Sx{vzEk z0oRWQ5+vzrBRbf!Rkn6hdXMF&ZuK7P=y-6d~PEp`x#7thZs$)>$~BqN*p~UrKLOzpQYGL_I^v zNJ;C#&y=KXMl<*!o9cuVd@Jp6WiXqksxcf zYSlF~gwSG1`m|-sg9kYFNH!KL8Jw!Tzhvh1SoQim2k>M)*61J4*InNPA&>R9Lx-yc zK+TdI`_s}t?0*E?rV#Rw8KwA%kfE@r(VZFdE+mr|s)ced6iLVje5a@raQjGPAtUH6 z{~qnS^{dQBNPQ!Q_5$|1RnnTpDgZXlicM!Rm!;|CqqQ`fFoY(k`!3xfp=^hJ(39k_#y3CbENrA@@`14+4m6%)1(`!+2d@9`cux zdE;ADHD^q`wj;a00`y2>5r@Wgyf&et!f)#=BvA0+!@rOR)ax;r z{RhaRaXdfLnh^V!(n4X9%DgwPl-86xypD0#7?zk2GLjW({Isy$8qE^TPTyoj8ec0` zjQ#X^o~FkV8!TeGQxAS+)m6UG>j?9!FW}p~SpLF}=gAONO}#tK4}`BXChdNlDbJiv zSzyWR)oaP1z-8#cL+@~s@v#X2ji#6BkJ zS_~oV)RXh~2-Vw3$hDH>Qf4NHN^fs^?seGyDt1HDO`Y8GAGUO_pWOkuUEI!C0bA5M zGoX%|@Y`}r4<+22W?WA*3Noc0(V z(WN2$>Wq}-J#6_)$>#<)4B|l(K19e9XSF%lZanTG}C3Y*xPa>=ic`W+I&`Z)mWLA<0{lo%^VIr%l4{wT!ea`T<4Mk=rNevP7 zP5!Uufa(Z4)*i+L;V?A1e$}epRc9OxkKI6Hj-!(wxLHJkf^{}FB@yU`H-I8l{=0N4~Gc^xm%7Gwo- zoMqdnfKg~cCZgIY@p5x)x>}HpX#NhS%CTt`N_$x0SjWO98%5CIL;Bq^eCXdT&HebE zn!JKg{uFu= zH{RGfnjWJ~zIm08&6Ge2J|-Vc)%_DWEzVv3JVVG%Jt~E2t@O{!r=~1`eWtciQ5Pw4 z8C0q*SXkh(WU$dE7#`uu`oP-|YAk zzUPR|w#6Ang-LPp<}a@%u!GmKj$^ZDft!Yihl`Eje53#69GJgrVjj8tl;zZA;c$RW z;-gbBsqq`@)vK40ilfYePjI*lA@4S=hQGrp3>MRP%$!lOSq{`Z3HEs5|6(2Xa9P~3 z_3cLm8B?A0-g&x~&N0;Zs3(j>XG@bh+l_ksmW;fcDOC)xPzPypwYdt|>oIpXZ=3B9WOd$ZLQS%I`Eje2+II zcxi#$J{vlB@W{*kG*eTey3){Cw&Dw&Traf^Gsw;1!FJ<+I2jM$!p+^ zq+OP1s{9zSLX)qIweiJ^8v&pf1f8@F2RD64ESqSs-`!z~;1p~QK*DLP^y#azU|}r2 z`{(E1X{_2&z?=q>wB_?&TxEI~!}o0jFR?F~f*xZf1j@7(TIe?A_}qX)rUB(bJ<6fM zj?*3-y|8ZpWg;_;0u~-#jo&180aw#>!H*P^pFI7A`wrJf3(vDQh4Xh46vLLl$NNlU zn95@oQx>8g;Z}iG41ZkD$&lklg-`EkM$><~#>$~Q#lnk0n? z9B@=9P{PMWhNrOQga|t+wyW|=u1=a*CcNIuR}Z_v6@kAsH4abL@UDjUd-l3ax$=RV_PDfU)TGul2i?8=O>uzkZ@woZmx zIjvDv!_V+5 z4&Uhh9K)Z^z*Zz-vVPYY``N;&1vBnwD~)D}8k3r{B9*rv712tO+ehDG16D#H485$1E2ZO!D-HSRSqd5^Fa z*e~3W3c0>Wwt9=)K)(t9g&cSsb!lZVzP!>r@R4bBoa`__D?gtN*L#61PXBlwOCK4m z+I27q8U-V0X6zC`Q%dJpiIoW6>!^rIRG3T~jMuEQJ{D zz_a;H<-22PtxC)H7XCkK)#e;5EiqySI`fOmF*yvpfrL~|C~e@4WFa_Pz{neDI3DX= zI|FYdeI@BfBX6KR-eW9^ZK{;mUsO>fO6j7Z%>M9hX|GO?Z#R|_D(dWCl3Eod>H#3M z?#@bB*v#wY7Ob^ye^K`l{k*Nu>}DMK$W&vxN6$}-Jj;|R)1%hd8z0p&si=;ckAC<> z!r&)EaHT(+ZOF4aw_tQMPurs1{BP~{{hrF#PSLAXMR#|Vvfh1O{ABZ(XgP4z(#cNq z=W11}B3Yt?W?!CF$z%m1EUQmTFDEInMU9&&tO z?S2`T+opUc8sDVsx-D8}`|_LBPMDcbiKbbwVgB- zJzlAJyhemo4!8Uu#MWS20WfPE#MTmQMr3D6h}C@>KA2}B%Le05xdd2cEZ*9nrzB40 zTHHYx-C7BWqN}?$T#yh*<=RUktkhlcglegu?~2UO!6$;=J6Pby9Ym=_34X$SMyGz> zCXDaz0%U!=p@8UFh9*7o5Mdiy3PxMOAX!|C6n{Qe6e29vs3O9$ulYD$gcXRis8za2 zrR2wl&L*KvFi`x%9aQ{<$O<(KNxUF(H>%B_%eHS?I5p39H&xauxIAgSO0xI%7XCsG zS#Kf{|K9K{nZO36@!JS*Pbw>X`8Cf2(@g)dL~h@c37cE;AAg1Hp5ke|>B>UqNT~e7 z7;Y)dQqs+fkY^73P_uMQPU_2t@*S5R^1FYYy;h#!zrcQ5--O&&{S-Rb7N6t?c(ZcC zICC{w!2i*)Gc~8I={Y}G*b3O^ICmy19i)M4A9_Iay`c6Vn3Ga;yNth*U{R;W;Y#TD zx+X=-p%j2ToJ)eGPsb>LdY(>F%%kISLx*KA3;FL;zZ5irnHURO0z$6>(h z;sJi%5gg!(T5+*f%dfRJ24kQb?yn$hzg-IKQgXzUonT+wBfEJ?X_pVhpPrk@Xy%${!<-G-C0Do~h!$`|?(IXTl=|W$m+~vt4GqgWJ zIQs389_wYc^H^U3gnjU5PUCSQwJ%@~-|m-H=*#8xbEx7S9;Kf*y`(xJ@uQ%ly+549 zvSU7(0!c%=QVq`&BK@L%qH4IX+suXMa`QpVp@}2Fg>>#=I^9|O0svC_a976 zimFpAT=)xVRplRi&;LWRpWyNPMI;LLzH{7|mNEw6&US=-^PD@^M`j5uF z27kw~DiK89zDBO&D9NTc`9=M!~SiL0`Fz{zLRk{*cw8WJ7iqf4h~Is@8lGEh`L;v@8F4|K1m)T4K)R26=Zu&F6IO#A1=3l zYI!2c0!NI)@(I8UoAF)&B##6N9d^Ke`ik9~A4K2=9MMgTJr+R_-&Zl7Z>EF=c4m*= z7Rv@KoVBu}HyZ51EX@I0;uq*ow4OzxP=WiloPG<93QXu4{_Z;|Xz^u|0~&?TsWcy#!ZmJM%tYymW`LL&q_ehhkmt;e=@{ z=CWUs_V(@*fWORQA+XqQeYYdc5WG9zyO2hB#{c@u@!W55B9DCvww}Ssc?hqFNa4@s zgYl@vML9Mgs?#k!H%?H0qziQ)Vz_{;#(k)+9?)>%yu)Me7 zK!zJTSZpKMdECNhHjN%%5#!&f@&uU2O^loD@3-?X1EJh)`t*gcUXsX|4NWL3gtA}V zq#R^N{LPMO#vKSA)sIB_eN}Nz~?zjrq|k#)P)1V!J`=8+Vz7e zE?Ku!Ae3yro09#~r?*GK_#J`%lk4Y1^NaIhb9opHkKBp}p{Y1go=N?Qx8$bAXYwoZ z{{78Co~18Ij|jlaIWG^i*KfnO)|cg({Uc=GO;3&$ROkinq)+v$#Lb1yf!lseSeS|(tZ7iBNY|Hlm8BV!(8g4; zT;+)s+4{G_t`oX(Txd2dVyh6_f139agzA4upp^v&@n2!_KJnm3KjS@>3oJT42EHV3 zpccm9@7M#F*3x9zir@_h<$Hw5br!1;kH2_>us{U9#$pGg1Z&}ZYr+O4N!DnJN8!G- zUG^XxYn61tMCrTeICNobJ&`R^1oQM*I%j?BWxq%ZbQ76^e#JzqWTPaxQkY8^u{D?Q zTa1eoggQgNN|v|{$5J>m#-w6XB^*AQHbZA6d91(QA4!sFWXdZHZ+C0p4~?|#84ae; zkGuaC`e@QV^DK$$L#2NZ(2GvJ)wh_|&W^qMF> zIL~%8VauPcwUh+v3{7QzE<9-jHlKe1t`Gk@EIerhl}{yI`9=tBAyI;s5oP@#KJBGB zA;PMB1Nq2&czWcI#Tzr#OSkmZ6=~`X31NB_I-UfZZwRgilBKl(LMUmsn-Kda07WdT zI#%RAX#EQ?LNBf2fb9-Ru+QE(l4|P1XWtG8S!tK?GHK2l!ju(2_6S`xVeV0|mvLKw za-}4hCZ-0BE~eC3lgK4DNR`j_j2V-m^fEXeUsCSQ7`?JjtA>^hp%#m{XLT#_6Xvj(<2HQE{wStdmn?D(5)cr;qb0Ft0 zJNH{iL!-z>msuSx=QuI<4jm@J=G}y}xoF06?vathFJ8x!s%)4=3H~^#ic^6nWOYUs zb7|-UqKtFN;{wjk+&R&>P$4*xXlz z@&%LKf<`HSFu9&X)uZnfo)KmSuuW;3M%N^AgRxqiu(e!1l(WLsL}?})S9afIl70!! zpZVB^jzZyzkGly|_ACD`&QueV!>&K`VKL?sCB}-SuGPa}sLG@VBhlF*SkNAU%9Ti6 zPotcAH~^hl3e_Y!@iUPNVIi_i7irYoXu0VhOE`lp8LmakGqguI>)lXcW!gPg%q1-# zotQ}aLt46$?z%{&^1&%^uYPI2m<*6pOI?oV$m<<%2yChMJ}U(Plj-3OaQ3RqC6_rx z%}EKWBmaCLC8QNZE&Xi32E4AxWCTmJm zu*EOI$3-kWzbIVfoS z(I6?H!1q357gje1TQG`TcmYQT66uV|>nRu(6R~+|yLPp&ePzM47h!tLhB&^4{mgFE zeMmDbnf6BUeKY||>usZpe87`+u|oa!ZnTn*72cXB{PSEQD=Ji|;G07BGFHIa!`fu{ zE~6WmA%yIT_UYTFPi`LcHL6ssfufdfA zaJ?|i=!VR z$w}6wKpV;MPGQl9R;*7UrPOHD`=6w7NW%BP&E;W%@$y_ATF=9XQrz1m2IW%2QtxvK zSyZaHd!IzkLA@oQvyz+`L*8{(wGH=@kacZ{)u#2TC1;Nj&A> z6JwO_i|^jO3nRPgKSM!te=6%gSv**|I#`UqpR0qV1C=VN_4{Bf8N*y`C|U4py-P;S zNUxQ``Liepbs*dwS!8SX*Z8p^0%L$^4kn`2R2{H1TTL%zgHYvgcIz`;;j%c5bqSuT zD^isEUGWmEgIM^RyHc1w|I`p><|pKmfu+cU;xr=im33)Y;>`|GLH`#q)rP-{k33J4gzMk4{;<;%vdDdP42f#N*Z^CXeD3~|BrjuaWX-xH zE|}aaV>SYb8=RqeSTN?83$SN>xMpPn$g%eXpW>th288!#%YP__q&%w6_ATngu9n@T z>dRk{Ft%0wmDuJgvTP@b1L#oAZHQO`SI3Oi6{kT8KvKl#a=3g8{ zEWsV=AW@6Q*5QY=r?c`i5U?%UuG_V-t+?xFw)kgBT!$VfkNOof`y252T*gmhpk{An z$`P+E$&ZISc$CeSjV&0C^#T*ETgRA;&?KC?0t)dsGvfH0KCo~wu3|Q`N^(U;<`H3y@DdS} z^Wqn_#?e%3r=3>Dx-@}K{pJpd=b+~SEQ*zpU$vvMpFn#F~3k7*eUIV zruNq-T;{=O`#IClhx}kpdoYQQ!7DirSq7G&jW3%YINPY^+%3 zOWh`xYXPJ$2lEKT_giH;i8*T;+}`1<6;LkB!LrBTtIz`|fU z{J@zpLzY;1h{0h4xy&L65m={@Y2sb{z8nWj9?|=b&M zK$FYF%Ovi*m!U(Zb53Qca|nVLQ3;KR}qTEcg6GvaYNgR>m##UNtTgqDfMJYb-s=G@kZGs!dxCBG0DTKBj48H;v_OruEO;l6N$wbD6)8 z^(yC5h#C(reu|vbQhNTRu{>rOMDEsA&5-4Sp>N=}kA&&v7#44gQTr5j{esCY1B5EY z6ZtGKJJ$kZt`cdX5rW^yrjXBDmRy5eN&9oG7L|>tI1^TLkhIUM4I_NIPQ?x#I%L+_ ze=0TSiSWtWa84O1ZS#WX!kJ9$b#132$^Mc2$U-RWr7}h`f&>{$h@w{g=`Zp<(-E@T zWVS0#DL^C1>tZZcHSvTZ+Ch9-2wjg?%-lZ2da~FM$r?*r@|1l{d=vW}&?$*%K)Zr|t4{}WUQJ4~2W;1EP2CJM0j(}m4?;BzGGqi!9#iJMI?MB4rS zdC>GhMT-`#IAakBr^}N!IBmA;dlpjxxX&U_MU_`mVyR@%G?MPu@fJEM8k*@k{vs-d zExshy(G+Q-N(f#+OEfOO#dJ28ie(NWd-dm3rOMrH0=}1B$qka*VkvnRTd-Hjb!Vo|pUGoup)nTW2_(=V z-xHEPOZL*3tJG5x6iv?aOIoo6VmZzjsO&5lzK<@Wa>jekc~VG^)g+;jQD~#PlQ$m7 zZVpK_W2K{&HG^xhXL1<$gghCqbQKDoC!YiD^?WXInS7e+uJGPZ$cfUsb?o~Pa>(j` z=Ylo2OB|8j&}TfKGF9=ui!Y8KNlU0#T!f@AT6ufr$^$Scko=P#lS~zSD3=yOw)6^3 zHI2|XX7ACXN7+mn{DmWAdHpRH=m0g&em2>zeDRt@Cwh_B{4WzqXsB>~b}oOimGh}9 z!OkGU-=mlPWc5Gw=ryXqwfF%V!w~JsIYy$f-l_3Sk5GgDmPG9V73qSlJ!S2wP^S87 ztbxcnB0l-fq5~%kB9)x{j=XFOzX0`B1^Rtn9Pv}ienVYmrD|WckT2X;Ia{}wz*+Nx z*m(rS>@4||+41dlHZb6`Ucn0-VGdjAworJ68jta*Ovvu=d6Ns1vGeD2n9Fcjp468z zkr@vX*9FFkdXkkU$o^_vYY>j*9qQO!9{sGmCwifE+<>xu_QkW#{^U3HDWQ#tl-`nr z9UeRgRlJmZly1)rY8j2=TL$?*jqLFBlJJqYVIkH`ybK0i7A}K9r7Tz} zZEPRMrqKNpeoN`yPEDtyN4jm3Zh|0|g;UG~9|-#0wXiK`(4@5Xj{XEA{{zye$VxZbg@^gGKt zD}s z+hVZZWZ)eaL9&tQnH8(Ca%SDIFo~C;8jxL(CpF$d5}6B(#wx-a7AEnau4b1Rd#7r9 z8uHB+w8ff7o{&=0BfuNow{IUL#|%M6$&YQh;m0O~N%A-Lf0qL_l>D~b*r$FLs=23< z;bXh_?SqV`iw(ScFi;9c7ob!NxO+lzwgL#jmnoMk^{N4yHr7-5rd0s^aVSf+vL_p9 z3}}Fr?S)$r-3TGu2kWUIR5BoPhz*hg-w9A`LF)q0yL}KPJcy~x+hTyCD=ca7bsE!Q zq#-t;**hj14R(-F14ogNMnf)Akmn84qiOh9afpy{!ZdpBV>3$&@$W>G`f=i+PY3Nd zkK{Hugpj09+JaLl6Cg!LX7DYM-%xn(|k|0m=nJt8chF>-v<#YGoy!z1*i zjDRWn0DfB*^Yj!UEm;Ugc1xBl>4A2TT~sm*dYwMSmN&3Q(%}qQYH%Qp5NZ(dmNPV} zsJJ{5{*u&X6WJn~KJg__L{L-7{Az5e$$CJabEgsr%nb6t;N!CB--oZ!1zOjAyiXq- z1M6k>faF@#uS<rwVC&mL#7NpWmgDV3fUoH8=Wq)s_fXY z02uha^OSu-Zu)P$1LOwp$q$aNHW( z<}Y>OxLIIeO~yX0@zkSJF=z=*X&r01F}6z=XmhQ;q;3S1(#XmWVScAF+GXrMt7}IY zePjOLIpEZ!$v*P(S5B2NEaVf8efH_KX*GvKi~9seTx;m;QHvxLr=qBR0S;SlE!Sw? zX9yl+z)D@UkmQN7pbs3)@F=C7j^(?EV>dJfery0NFrVaH+|X@?Juy$!Z!q5PzP#z? zCc3ITV4XrIcLrnff=&kveV#dc=18x?$d3rOOQ`(`|3WuLTAG}0;yoI}5WnJtHjGGR zE5G8NFDk>XA>@kTxl{}J?ywBUR5c0=bUTcD8CWCPB+;6mMwyMy@z}H(oT_E_8+q-a zGR!?&C})(J(fRAJ_JRQsQ zKuAIoNYBo^|8r*B%1s65wf9e z%!|QVL2CHp!_%T+aYZ{N$+yM2~OQT;T0#-yB}P*HxM-4!KdQ!+i! z#G0tndA8Bu;adqk(#3%&%50iO==y9jyC=^PFMa4(D#dhGI!tMl?SA#h0GhJT*z6`I zGS6YUwPX+Z(FI-UA%7)D*l}4xCZ#oolNQ3_#kX10ef)MkrT9s?&N(z8BA(um&emid z7)1|#kylKh>C2kU zEBb8hO3}Ep8dfbnxuH$tO!_(t$rfSPn0dnU?W_Zl?KgT^T-sD^51r4TfVK2taY19i zMtZ$83#l8OI6#1upW&6O4X$nNLv&FN5rZy;=`?u@uQ`0>jLAcWe0?7{?CICJDn6hS z%1ho%gny^nQ5u#)lWLc~)pa-C3i_VOXCty-e^JI3WO--&31)G<#MEW4!?-bX1J0~o zXnF)9*Ss`WY&J|ayl5`4>z>L#r2=MKqoiX=fRLl5oMM@Z6+`T-Sh6*~>?lNz$r^K? z=?HybFTE(213uCWvmw&T{(FSF+M6Pj%JuejFzlL0>xU{Jl+qNr9IoUA_*{1jM=%DI zh8>8pX!J?kdC+)L5)MHv5+I{wxd9t%BM7-A$wO2GW|Zr6;=ANxTd`7+NB#1J*6x4P z8?&-!CFh;LvrpR;LDjTv%ROy*!}i^Dx^r>WY#n?2zI7|^nMvW6#4Y!{Z5E*%x!O&- zOwOCScQ!FeMg&BuF2w`jPw8Hf+wx`kg`Tl|BGs0X{$hyf3ruuXS@8mWBA?{*?UX?G z6f<@3#4Eqibe9wE^88HGXYsry?OX8@jr+v(@ie zg5t>>!b9x1_`ucEi@$6Qu2$<<`jK0RY zq`&dY3ONn$L{R6%nvRd7iGw&+o-BWx4&(hCoozGy-6gVY)9596U5~?@2`*(+sgauC z_Li5wPuUm*7r#Mf-6-xrG{W&ZmtJyPbJ$!>5*{cg780%pY1$${2035 zs)_eq8DJjC#b*SBCn zZD%ov`TSlTeG|6wo#@PFHh6|?JyvL`q4de#Mm(Z?k3htV9zA;ewD%HC5SCM2qVY@K z(fgt~j#@|KWof4NBYSK@Rv~sp2 zUi>-Fn-;aP53_m_cDQT*upo|j41IWgeNY2mv$?!U{>fuJ-8s<}>zqpN$=it>UnG&6 zFp}nUIbYua9gt3T0M*pPk8SO=n{}BN>>PIDW)ex;` zT)lL;eWa%e`Rpb)x>`@*J90L+i3O0Kxte!ODtXO>lpMA4Se`Gb*QH@mN?j*w#j#yW ztSx!=mgN(upnIgF5MX(Hx00FWTVVww<-3)J@^2T9j-iJFdA~(xZ<-h_G*T9%bR(n( z=jF-#kHxo@!~8F}PeP9(H{3?wONP5nTLe5wb2EVR+$GDnxc_&_{6AB-j~x|03TsOF z@@b{4&NFgslzhBr=xwr2USZ{)8%utYKixdTY1%5eRG!}n9c9HVPzMO9Z5xF(@NG$s zFLoMG`L_2V+d6 z}nc>M~ia4LNH{*l$TlCb~yIIa|$4Up`zkw@a7dLc_<&zBFY1 zNePi5(!0(1E$o9&DJ{c3ze%4>3pR~fj>UhtN`9`w1z2Rs&GbgcoQ{G9489{0=(Sgs z%#w%k{!vQ5vz0MjP8 zYu}3nw0C^$>xDPLAlQxRgAdb3{3uz4$hZ#8uhXML>%zO4`Dgelq3QfCkaaDRAN13! z|6KR4TUBXOdZ|WIYJY?G6WC;Hx(;+hLKMDW=yHA?7iBegFr7$~y4Pi0lA=BD(w+R4 zUHG<2%KAm^gM+`CA4{)K7iyS*NbKg|S6kwCePJboMUnm7mO<;lO?y{fUooba;-}E) z$Mjw43}eA@7ijEn^Ce|eX?Tvt&61BQG>M`&K9J^I{%$Yea}2M@;`$gK(jcW~tfa=S z6-lqwhWDYg)7YHP2XQt z5L1djKe*;D+*;z{HIA{a;`j3@+4JSgXKVRH1sOiq9LRCuko%QaoNF##sDbC{~4QwuU_s%4w_2_G!G9lDpe)(-obr33DZEz8&XSLlDE^ljgfg3bcbw^(=h zqi1ws2?2rgJ@8n;!c8~9xdD!5r9f!Hv3q#N(pd)t=U>BmjD7uY(WW+qrngzz1(UWB zS-*9inov4B&p9-uJ??}1^^#l<;86z4*EXTr%=2kaQ@xD{pc^Fjtua-kYi!(>_d6PF zdH&*5fpX<+Ca8HsL!m3Ux4Dn$w}}4x@Teu?JS#ZQhg;dQ3j{58Mm5-tfydguO~@%5 z76SeKD;@o_Dm4h1F;0+s8`gJRD2hRVl@*{iFG%VEt+Y3>VQpiHI!a@%`H1|^Y!Y1- zAfiJ)TgfTD*HRLC%*%Bvun&pmTcn12V6ZqhQ&D+HI+@2OWGbv%DFOkRbM|{o$YQ~a zJVV0D`j;$OaRuCZ+^4*hqIe;9k6@mV*rj%p@IDJC;~9j+%LD$elz zk8+@mw}YEJd^6e=8?8Q;^b(k+IY}xO5Scqo5?af`;fSSyByPM5^qoo^hO*8I--+IA z4c`j#^9k831X!M;@a<+7sS+2-YG(&s6P>JoXWCL^QX>huYI;P%Z;z@5i9x1szN(Hj zJvM@Cw|!#L+oUMO$t zMR)Fj8KOJhtY`{f4ux}*mo8n}s!5Y^@Won7ZcsW+Inpm!FB9Q3lq;q;!~a>v#4g93K}oMYqtqE>gq&rY|6j@(;}nN1_!?t|0_) zo`bI0$T9s#$UYAbxabWSpHAaTNx|l@L6g2HFT+~KV>w+UgPNS9k)7k6pOJ>))?Ux) z!_Sqyb)90qi{S&*@53TdCj@1M{$Z7Ffno4-`oN{owoIn?T%=0I(}xw9p0d4r*A^5i z$7xy<2&u6r4OSr{wlL zgepgKS7zCtZP|M%v%yWOR!y_;c*zV}mIFm=H*em2>e633IV_wXcQjST#xoE>byFn{n6QV!-kEXe(r1nq1(CfmZIN&Tg{x02pSSY zQYZ3h=jnW_NEq)I=<1XTe%|wwwTL?p->-p#$=0W)4>4H7hZz)HJ5GK|iN_4^#*A#P zguoMQuHEOZN+zTXg#Om!boTtnx%~qR3Ay&hm1oHj5l5zdJFc1~VNylhEHINJgRtj7 znc8{4>6216a5F1`E60v~)7b`87}cZ8h)DW8hMvoB6Vtq#qf2G)EjiyC(BhGk;D;`h z$yLL5;p!uCy4YgO)Hmra-($8ACD$+XbUDs%k(EYA(Z#YchQi|x5b9miF8BLELNS9; z)9I`=)n38)-$z@;t?z?WntpNl@^2<}1J`SLWRhyWW3jhq_Ni>e3p<#no9|H$N6nBq zqq67o>OVvKZ1d_-#5=vY@Yx5N$>o``P z%zBW-$lowUY3|;iRt^zTkJrP~kz}h6@8{@mRoB^$(oe~Oyc{b}!VuI)yq}{BrMbrj zeRS7EjwIXM5~*w&`PYkEFRd{WUxqY@P-j)J@K{YApFEQ%@Vmej(O z+SWQ)oS(U4b)#Id@_*2{zAn|;AWFtt`UNWR5#1yNaGv4xF*lsV0dUIjZMsAV;5?&g zgj;2v=aF{>$0?BCQP;07_&m_(2L%Dm13R0 zIcx^%#4Hfm&PM(JxGQ4$U_Z_M9$MHP+nm7|k}ysmsT`{QWXLVA@uSJdh;G+u^lErK$6^!L zG|@+#EsoDtfl*4+wl$D0+VjudvZHH#ZYjy2{#`jxXv!h)+6FRhg}#fUap6fRot$9X z7#cmWu+p49bXX4G$I=}YK;k{>usBAflL7F?2252`PdpVn3f zzpijybg#S;ljv$J%yM5al|M#1F31+qU(;LZsds@(%B!y@sk7u*R@f-lRSqfd!DfKc za_rRz@(OkoRT&GpdBzbF~nRl8Rc#|-gG0eMO-%+ z85|i`M-G&ju^LY+K6cFeaE1utag&fYa68^23t<4^f%w?Do1WX(_amhVQx~HNOkP z?t(YvDGENHwv5fGI^j1W(mc*k7LxNys&p~{z}%s(N9p?Pr}xk(lDW_6CAS4nZ@!3e zlLC!PW!f;TJ$+UOE;(v9pA>AX5PeQk=oeL;&K8Q;mR@{8Zx^k8FqNJj9rVsMDn`7F zcI}x;w*{fP?rEsqbUB~Xo2mOlG^?kBDq!WGQfhpIqGS9;;SrUFG+_7R)iyszk_*D% zMV3FnJ|js%W$gjV?Ce@#1R8%yj zdt_Mk4fL15EGr(vnrb^7d_BEaW<@D>vG(SPc5IEeEd~Wd)35C<NG=4fc|o$ee6; zv0(b4;xlMN@}>9eh@$kP&H7!UF&@VpJg|=TVpW=g|5Xk>9Zt$1sBOYjlW@Po4Jn z)Nh<=sc{Bp1=W3(oe(^du3ft}6nkMZwwEI8+i=#gliaKSs>@A=XgoWign&H=5O*AKErCAG$#>^wLG<|^OSYYauVkL8Hb)3fFx&25`&A@OS1x{?Qad>K-Gxx1QjP|i;Yc*2 z$?*h>+LL*`%L)h-+V^LD_St8z-Hd5s15EE1w7*H)h$457J8BM{CDX6ZtJ=6tZ&m83 zQ%vmSIY-4|U^yeOJ$mWgWbRBnTV`ZiswTLYo4ylN^=dgAzwT|Vs_GkZsN6MGwb>yC zqyH6Ejb;^}5n^3?fW{G)m#02YR@K$g+Pv7n=c;<>6`t9ki(Md~v5Vp5uR*tnmptP` z3_4qb>#9nAuW0zW>+9=5o%&1$1;-$?jbk>+*AaTqNM_b#1BEHy%h!fB0IBayB?1uy zDfIXVL8hm_sz$iIU6mhNOGQk9mzMB5=r;NRd)D@W86$VAQo6|jMd?Q7x&NZ_XO708Zgjc5F;d#Zs;vQf^--MTRcZR{@mm1pT0@XSaAlKYnGx7e z9WI2UX9)cQFC7x+X3FDX1{``dS0m-pu;$G>MA7wU=pK8gtL+Uu%Y!~%<7s2?Th}c9 zu(htUO9@uG(BY0d(`EC;taGjCmr6c8t&6>p+|`QQMtyOPHMh3V3@_xs>jUn2FN|r) zYz{L+a@OnqV@z~3bmGvxSk6C>iCW;Zxy{OzD>o^g?J_n52O<{pgSPaz!YSd%yns&2 zmVK)mWEHkkmu-##6TIH2YKA`kT4B~xn)aKmcmhND^22^hfN0m*YQ*My{=m+t=AN$a zVpwsg6S_T6ayNY4qGgK~gW>BEH~LvIwb;JlqmQgttA9eu1PioL?f+y6tN%4>q& z-R1J1p?54sfohdPQ#%SFx~KTq%_;OsQxo!dhLvZouV)L~>Y2~DYRSkEye1rZSLjBJ zU$zXo{owX4Yv*DRm~s3yh+;D%$WVDwdqD%MN*`_RjfnvLAu%`n-UcKsQElZ^S!S6^ z)MY*HMmohhJqBZAX^uR19fh~pFX^iKVg!`7-1e?Y;crznaeXdlL=f_us-}J{MU=^) zkTrR2zW~RVd7J@B>Zw$i84Fu7!KJ=!X($}7!cNj(??IHGztd^=GxfGrV#=s$X!+f# zs`^_H3bag6tzoq3sygGWs>W*HjaQU!)KqiZ!A!_QRkijfeWj|UjTpgzQPmyRE&rlE zC}3cDF9Eh#FPE9h{gR$G(ts4D2@0mnZ&`K0{Q1jN_3_shq*RMV5F8qW>Vc0qNKr1R zgWm3O0kK~vmbTt*fhWWB@6Cb0ez3xTdQUklpI2J!gI*_F>+zHoDl^`ai|)hzi6hhM zRvR+yfVe+m&RsZ0eu*~x(%>r|YYdxm?iziHFCofiroL`Z$o&D@OH?xCYBGH^I;)An zF<%ph4{tww_}AxRU@B~gSptCrFfDxvVU(P-jXiZ7F=ukOZcUY%lpc4!?M#2=`{cMy z%80k(eUjiJ)ij*AolIOYoZhc(s1UChR|7G~@IhQBUE(Se?zk^Q3i9*1OP{~;6W9Cl zyY3nntRYUQVrc)%Tz%h(@*Z@I>agTD-a%i4r`Ze+hGgp(Ne|cdyC=c2!MVR*=TZtD zau$q+m*}%@a(lS*3x{Q6;UMj%ytX$ne$dASnqLsVB^eMIQ)mH6pUtejg`~O> z6}yJUt)o}8_xRJu9RdWiBs2nt&GNQeM(&ppG1#(7&z+rr_A!0v!SwQO<%_W^j>aS( z-TJm2f%Pb7fb$i;3a}&_-^u7bu-x!lO3WtQ${vlXz%}o7Y`HtuBVAqT(hYC;RDI!6 z<<)7W=G5HJazeZJ0HkONRQq^6ufgL4lnFn6NSuwnLD=;-S z+1?W!{~=mcKaxVeKc%aeB{c^K=Gm#L#~bo7m~`3Ws`@1x7&e0pqWm2-?H?}LyHQOU zX7JgrMI!GGwgs8qGU@=6&LCWKpjhM>S8Nd3?TTG-m+N4i_|Az3V%_9_?uA%=GKOI( zV*u=)g6Hkooc{ru01LXmqb+R!c)QcklhBvEM*K&N!!{A(*XB4ch8)lF}_`{+5sT;d@hXd&KZLNIFFhKxo1f*Op+I>mhTBvhkT)B3)zpy8#`N0>xV@ zXI8|OPKVbQG0QiSNNSsDY_z7xUCADi3Q^}!c(CyOP+i>sZOP?f>g>H23S*}kmrGu2 zbq|b0^raWE8{Ju*WQ3U4vPmg*!ILKGpGTt|X({`q z=itGENznUvFxAi{UZ>LE@?;Z(OyB*-t_8G0+E$azPIx3k&<4+1Qph0f*BlrBum_p` z+BSpE1c2y5O7h+e`oGM9f*-F~vBnD}=0c#zoAs0J`d3e`rBEnumdh~)&hv{qy{P}| zMT_QmB4XKY(?<*6)Od45iI_6#Q`0>Dmfm$OPj`ipUn^dq>ZjAPLV)GTa+hw9cXSkG z5PjxW)N_K@;3whajq2V*$Jn*!rvKRWZc!wW81ERv0X8IZ7qVHJE6? zA$r!?(rQ{q(8sopiW%FhQOOHTk4R+t#(lF>MH(g!ort3U*L<0LU3#j1g+2?V(Hk~6 zH>?GG2FG8g$Nzpdm2S@>-cP=3(9NT#ATT7_UY!?(aqTn9Mxj6p`x%UWy#^W`n0M_M z7sGP;E$0)+Qi%!J^_04S^fzfZ1eOZ7?J@ItZ``!OfS@Fe{WyTk=I(a%jgPU9(koE~Iz0H35> zv_bxxX=H=Ed20@+njkJjg>_5w=)K^hSZXL;Zi}oB3*9rZ-7-o)uwih#eEb{?J50}S z6FcefW%spMl(Y1q7xUQ6x`Ee5vO@bBjjC+ZsJw#K9<0H==iYr7M97C}jDYWeK$FG=tHe!NgIiii_|C%>2F3>eeq36XC$T2p3Zh!O^csQw? z+cM>t^GU7u{sfTkHrmOO(Wor5y~mO2<2|4iIgVk3cE)|#s5EWNr?^#<21MLt zxis1PefA-rf{e$yhd_E3o7pyM+Sq;1S^&k}U(Vw+7F;qIk;mC!0f&J}zB4xbiT7~- zs#+q3*;17I{1MY4%FDM_z}_OUf+i%!$HKPlHX%MO7?>xbkcDM;vk5Jh42tD||L94X z=1}^erz1c7-h%I_wZ;#=-5p>zwz}esZ@>CIN4~Iq3JxqNIHycI#(1&))6^mG;W+YW zGR9OrmOSJOw?AxSBM8=fVVsHUlyJbuD~DkSml($ezM_${PY3rxP}h z5wrWck&sWh@=^rahYeb8WPSr^T{{Z_xn%63gR2QDPUq2R_6yiS&0880@3_pMh}mn^ga zKydWfJBBXn>I)~|fRlf^D+}yHJTcMMz*(|?7b?UX>Ut}oUT=sS2z%W;E*OY;U7!$v z+%OM7ZYmKAanboFVxfP60rY1o-BS4{Vwgxbu|LC5%uNmg6MPTC zE__x;DfGmN71*U}pIv$A#FPT}BX^^eEll^~SL8UG zgJ%kcbwM}F^C24Dy!&Sl;{Z!o=qV|pO?ShxbA3IL%0576;#=XiEKKcY0zg1+XxNEk zz;&&q413o{Y0^&1Arsc*!UbIhh*;Wuy}dO8_3OaL>iyofunaHeK$lVIHtrxl^{{71 z2&`z+A8qQ-uZpPOK@(He%Oa+fXs~weTJ|o%ihmo%yhZBN84mJJ>}`be!?Ez{QJI|5 z<0L?dZS9zE#U)FAg{={4(nvd$1s2t5%iZj+t)h$p$PHr$?P$vYvEw4Rpqr|Cn0)gL zq}vGqdh&kJK4;Mb0G(!i5DPD=8#}iETWAF%)$qt-yp%fuIj-%LL$Br@s=Jizbtl}x zC3}mEK>a!@>G8VV5Kh#X-gZ-}0VWTz)o<9O6y?Jgh$K84D6@%z=Bw)OwHz{ktAGjK zuCDhpo-Air9SO&HQUgM>%#6}H$UH}uMI;#feuRYZ!ASeUxsn^9dkWZUJ60BI<3IA@ zgpU&&02owtdH!%>h0g(24CdV6vibwDKE&@@UxnhZ0Gn^5hj~k~M<^azYA@pU+l`B_U zl$2nI4@FGgj1|OQ#{&5v>282hY!w!&L-&Y~bT%BOd4=D8VZ;p*_%b|J4)_%Oa_pMO zCr_S8n%AMM{(+wb7Qaqag%v(fH{F<43Em6A`Amo2-w65S*i@|QzVFyk5YRnfd|?%- z9+T8*dsX%NzI~5XveF!|GF1dsssytF?*V28*@zJ0-Qi;kGrTiZvd=bnrbDmYPg0*) z!#?og^Hut!VX^j*R&|)60>(0 zC41#i@!5nXHIrkXz_`X5Ii#F`DmPG$jZ2e!drM>O7EZ{wa;cK=U4&GBIaW3dM#vEI zg+@tqrMALw5WGM>gEvOh6CtGq6wfU=3)jQ8C%lUYz7JuemDxBJM95?j>jvXzYhm&X zp=JEr0&ErFGhE;hJ8dt+eg_O}ufybHi2=D6KR`=ocYzb(+gxN<4tscp|9?3LGQr+} zWy{&b6{S=8hCFkwLG0n`Kl^zMMje@pje>&~37Ntt8nKkHZ~GTgmH_qqO&;q+Qcs|* zo?`-RWY{Z~-W;E4RlpR~D1ATut6=?mjW>x*<&99PzqCB%LJRDvwCZUJFEv>v?W~r; z(dMJ}0?*>}$7Dn{Hsj`qTEC;ha$JZ>=7KZd$SkQszX7p?>|Cd@=%3Zn6*O`GQHcUp_LRI>Np z4HZ2})$FJ@uU$oJnaYGYQMp>2e{}E9(&qA zQ5t`XwILywJ_#}*1=gE>Tw}wN6s&n)-0Uti6rgk86O=gItC!s-!uY@)vDqk0F~k07 z!{3w{VNf(~k=`RK7j=$mIwK??v;cdW?giX2aG@waz`LOM>>^~Q8H-5(mZRZs@O8>B z%^;K54ig1YaKzvQyHyGt^H@?|G&GqxVhkY>7e-4G2|U>wHxA@jGe|K9a!!H=LVhiq zO$>&7^Zc01EP7SFWUEaY?L)Ko@%8KDzEjnTf?!A_K;bj6A`FU9`NyAq2AJL9-?4(; z@`M`BKdtg0q=qm>K~bvOi&I$>wvvWxztm5z>c3O`j8ns$dSQ|ETB`PyiI?vcl}-wCea)!r)U_Sq=fR93~STQB%i?kkUjS z?*Z(X4N{cXIt)2Ipl`fNlG{2k7O(@xPKV2(w_t?!oE$0w*{{AQ$65mPvm8>!16I%l zgQxaA%QqMNZxP(7;|zGdvONO9D@nTcXTQ-BM{y5;_P0s|haS~sQ1U^29%S*5hbxb1 zk{v9}h-szLQIme(!cfW!Qi>8>zavO;@eS2d2M{=v)F|d%#ive`3%-wX9p2XxC(3og zv>jm@;AaN-h8i9P@9c=#4MQC!1Ru_|q%gLJ+?@lbc|WLwOC`#&u{tLjV6a|YZahW|-^TY85=t8 zKLxPOQ*C^cnM5R#jnNnkN6{ike6GgbyY~pFlYDRVOTbQl(0VXLm1`deb1i@pc%95J z9_I`%39D`>#B1JShA+ovq8>Ipw(B&A&kb7z*j5|A?hU*Ksglgj0~~Z0UP0%`O`DFJ zA3TJetLoe=g37A-0*@s@Fw2+l*}=h<)|O9?Tw@24X?X@rXAIF9accD7T8j-iWLRfl zV0b|${RAc3i`Dgvc(U1iPDDMCuOoXr17Oq`4w@`xb!mtidkT|rOdMWdYGL_D6Wn1dP2A$gVZ2|ohVy2gOJ;z8;{1}l+?7l35IB5p-wp+ zk*xm-2}Nz-JeqFdS3}@8R0w9CP;aP~ObMoO!y+H4RzwjC(bycne@YGWzzcr?vS{mc0Cdde>2w(VV|0;A)XXjuIp zO_Q1h_)m^igEgq+Mpb9h{1ss}$78J`3%aUq;jOKla5913RjvX(W0W@>{dvur)%0@zh9$uzW$H+tQ=+R0{Dxgai4sKLe796HT+M%{{!kAIF! zj&4}hyrSr%L|9|P^zIH$N>Pwmb5J!;79eG!8gYG3&z?QELbaW2GsCKM2t;P+{gP-K zWGMNQPV*w@G>h%GA*2+!11o0aR%Br~r$Ci95wJ!CpuU+*Edr6H--J#skieJW`M2ai zt}(yOne%<$IdgVCyI@n;;wVjo9be$Q;^c&)^oCEozgwWkN1@Q#*A~Qb&s7sVE|0x2 zr90$>1tv4@Qu=hy5Au#vkz+8+N1t+CVl7T>9w0}zNeAgc)56oB0;||7>{qJw)wHXn zgd{5aZUy=W_?N-+0(UaYhlAgz^k&5EFq(F=pD#ZN*o9cBq{tQygfnc(J zs9?`qa2q@r??cOPQSFXhgBoE)c`L-A{Hm;isxIU^J9xNQ3}~g+E^6C@(13 zX#!Z-D@XAaysl4CU`$lD3=VLg5}1s8CMQp@uE?)^h((vcT70SH=c)OSe4Isq-oPxr zbpRghQmFM5tv3)pTj+5A2nLilcSO^ zUAELU(008M^OfGQnxCu9vXqc>ngNpg1DN#Y3mU8%!3Bb_p6>&kT8+%DtAk5s5KHQv zqkjGRs{tX8hg%S?LnMi};B{v%LU`pfv-BH~ZZ8_LnG4mT;1%~hu z20wpobrYZnhZJLhFL${?#bL$bV_^ip5Nw@*%S(hGQ1Q9YW%dA3v@lK<+in#z9Ii91+&srPg+% z?>h}lI^44iFQd_)3`gf;VmR6VrXf(_X*I0#{@Q?jmq#RnVq5FIU+WF}bY;1HfK#H%KbC@de18u!c7| zrY3P<-<+<;g;?ZfxbMv!q!T@jK+G*G@vYl$Yi4z&m?h8WS}|}G%aQ|J07vH7MAQhE zCIIRpFcmZ0|5^?d?mudjbXKj-2Mf}nPkF=H{q4R357$q-NvW~Ipn#Fwo+&hH-?VBq zme5mGSyH0jHd{VL^?LQL}E>cna*M?3mTS+3EDU*ah}omP9ucuJXlf zI0WX_+lES*lPI8+Uk9ndE;YCXB`m1+;kYO~TpwM;xnaeP)(1I`VPJAX%+Eg$e66r0 z!YG*eixH}R4(~9sBX8z$NCx@8o&(hyG_2+l=>phN@Ob(1z&v>zore$@0AyV`Rqbe( z?qPHtVUll9DH~d}RjVmDpM_3Rq1T520nORu0*61tGx^a)+gkd5SIx9U3p2E!qMnt` zYh`UJmCbt37wYCW>{vh*aCL5Dd=?gv(`56>;{hnfs%6Om1FJO~rBtrBLK5%IYmIIx z+ZO^Ood&O>z^JqCSbnB_&kawrQ}P*#*yVnf6s$y@`n!5uJ-u}4(q&7Rew2fUfcAN# z@EguL$HtW5{Ws=7p}HeObak(GTO)Qox~33)w7gj~c_8#WhNX}LtTOcdG=|)-!X>E4 zu@sWtfCc1)657~;GWB=?%W$5vsyJ&bQFn7w#wCE2>|#)U*nDuQr?sdSmp@G)$V1S}PzaXYp+qTV>*{B>Am}|l8HzzLtASCSyTd@9o zsy6eXGnBf)K=w1UIVXi=-T3$C>mr6R&L{V7BVeJvH4$-YTxU%nV0jqTc_+G}eW~VR$#)On5+( zFa#c4Z54v+lt|dmtc)|f8Z3AM2ew&ZMr<&pfcOLYDJu*4C~XfR_CzS4br;?3fxO=$ z6l-g7G$qY&kRh>&<`I8OAaqIEuD05Z8s&>aV7CJ7L1OWW`joo!VJMC~39tpDw*|cB zuwLpb3Di{UHDh<&?sBe0sl>rtYh$qZ%t9#bn&IcKeGpAOnRm@^{uc`7+xEc+|x zre`0Tm>`z6z$UYXw$mq(Bj!tvckumHXjBw>$3a|#+;SwIu~q)%bo@p(q->L7UOz_)Wn3?9*yuFQ2C?PB6Z*gwVtTtI zyJ7_&z&U0nqex)$u|o_pd`0iT22Ww`!9eglc&eRsX$2WnR}c%8S5L|k5Sw8z+OA9B z*kufbiaL$Y4&?0vc@|&UVudfNMjvTc1_Ek_f>eA* z9#Z^If?;{$#0l2T`CWh%<$K`QTxthvh(KfV#aRVDfED)4h)||awA2_cZ)uCyeYbpH=%zZ)d!#5 zxl7aBVyjQ-K^L)X+bJF9f(?Q5?Ctfc&e|T9Bes%@WnM|?Nk{9Z@xBUEFaMN_DHkby zCWne_r1WeqIaUR_X^u8gXD#w5t%Y1FBlKU(fn4*$9F<8?6!i-Z{(-1_Y;9|ki@Q3m zJ$jn8EV~8UC)czjv!*AH_~t)HJ7}S>@5ui7+Er0LXEMo020g`Aptg|aqlk^IrOZzv z>V4bVAiy5ImPP3UaSCyvf}kOwC)a$4PpFbj-TC0Y)RT_dmEof?&bB5iPZV7P*jQ=0?)TXYNDmrL=*me}RZ+?Yz#O*TtcPfXQtLX*wKBzy{$d=FGL`BNdt^t6L? zd~5ndqVWo~uglvfGQOO?0<}MyJC~BD6YRHNpzpGK1WE<`9S|}9iEOiPlQ7#Jd=I?=h%VLAW)r1KeWhHb#vR$tSGNvrx7mIlm9My@f~MUFeLi`DlE$8 zxax1C^k>emlePCmM@Of^YK=-x>^O`*FqgPw;43-6wOBCL;0guc_I4O@v)o++YZUcx zQ86WV(~*~OL<>h{qXrt7Qo^X=iv+itH*enXV4<>Vp*49IyT54WhACUwT~1qB`q~EmYaD02bWvGCX&-U34@M?Um9~(+tsI+`!Ku zq~@3V7}hcw7;f$Sk#%0+)6eQ=TsqX%z_73{{s4ThBL(j4yO|8Ec?uRmbl9OuJ2&bT z1A*%Vb~ZK$z!^(n!#M!Scdl#ONy+W@HUzy5CSXLz+5J1yCzk##6vMr-HH!WdwbSGM6NLr4(4_lmP{At1l`PSPJot7ql@C z82W3k!hc04q~y4aXWMHy zYobHQ4n}1vera~ZUKY>)PsU^KTrDET{eP7;p19E=QHh$yE8vR^S%LM;R;8Jp7;%1a@Ol8?s{W{KxgXCbgk7oCR>F=FT|O26Z`uUKDl!FvAfKk>x&X!<>ha<`UWt~A;71`U9eK0hw)f5IGx}y z*yg$a0O;8UW~CcA7!B$u^uUDk;n$2%cE#gnc3^z^v57q1& zqp~wvefy|tsL+vR{f9}&{04}N9crup0MvQyE)BI>|Do3_*nfzssVKefTZ8T}x2(Ct z(0_=)&CC1E`^!4g>OVk)swx~c-(cf)*l&S-3vl}U~H72iK#EYWW>^ekW^Y=d1Y-y%Jo&Ls`XWF!4yL3S|(mT>6zH^hM{Czf@F z@1H&GiUg1IZ*avaI*ekwKh{8!4n}*uUy$uNE8af9X5u$_$dz# zVKRhV|K%30>W|`v80(-^a_Fa@mea};Sz`&Z^=H^rfy1))+*-CVKNY^4o7IOwb#Yfh zFGk`|C0NTA-vF1g6vpL z;+TD@SQi(FErop*;wk_$>P`TqwAQl64AhBEaCDkm>tW~3@c-92kOiC69C`EB+~7TK z#$*7nNAi79o-)2;AYRfV1W>XKJ^1U~859Sdc(2OxDwvv%nTs9kh84wnu?5h0vh;Zj^~6t^?Gos3ig8&L0MAkwQ}{C< zV$xL(0`ySG3=^9Q(2i23S0G@IA+fE8G4bPY8n67VGgz+l`1u*!NDII+B& z0g9;3g_vYcJY6YOIveh@4xVp9u88ERJvtsJf6m9WKvBDSt-b|0oCEm<(GOR`v3iDbc?Y+R4PK znv^o1+`RmPkbXwUss;uH8`2v2EAJ<%+x3tMPkyp6MuFl_fXLqAY?LjkfNr*J2npoJL1$G18*$n+viVV>^&R4za!M^|Zot_FXDO5^YVx@3`}1<+yR<0)1r# zg1@B<`rn=dxg7>V*4AhU=PlKIL-ai{x>|#dldF>_uZjZm`?)yuQ5#I9KVamCq@G{a zogdW!4V_8a@FITijB8LyR0qDQF{Gm-P!A~NrBgmCS*m1a83RTIy@261tP3_Hg_kXR z0$39pM(-Xvbm;J*L$M@frM(PR$9EF$itHI?lhV9RTE8w0&j|d#mILJ){=5)u+ab=@ zyz=1ZtfeRF6kDQw`oMn0v?DF62ZgHX?}#9LYPkVFep(sd*;9Ndz=%)D@=W$UJUz%mfu5=*6pYNWpwL zZn1I{%a;XyT!={)#IM_LDQo(90`p~FARl7VmErN+lS44OqCS)>gxS~7hnA^pYWwRF zuX^vhjU;7WMiMwtk@}z$1w%1$>7p(AjCL>(SDswP8s%_9eP>( z?#o~pB3}n%K(aM5p|}Xf6B;VXK!jxB`eHJVM8sHUCdXJhJRwp!1(P91*uo_j2-mgg zVveO*h=G^~F5p5$4Garqh^fKgK%F`w!!!tGojM`Vqevi33*;tS{p85g5X6}C7)h|M zp*m!XOJiV?p;E}wkU>dufISIm#u<;^)1eSpM5rh%R;$pk@(`l)X(`e?+6q6bG$3XmS`50BBPqaX>c^-}4~T=; zqibQQGIeMez5}pU4m1c-`W-h7e&D1jo|>Ooz8QKS%n* zN{|zrpC_k)SUEnxqJu8ODhRoqrCfoD>pT`KM`iv7I{tmR0FLYmk-7Gh?(02t^&BAqAMn zCTK#T0NOAN0_S1%yoiNDIMjk6TJ0@hOd|l`AW6b)fZt3V&>qI5{V*vb0JsbiQIsKHO^enXRVzB)ioXiaP?9WrK{|%N0$hI z`uiw7u2cGin^l9)RCR-+myR^XiZBQyZ*XJunLC2eR(<_Pkub_1ABHC{ZZ$iA-3eW6 zCbl$ihH|5uY4leEE3)hbJz3N6DauqrcNsoBX>*<7ff3Y4lnyk!J>b5~*~IMC;6SAd z`3&qJrOOSv0v>Jnt2OZd6J&*km78}Hpmkg`*9X29F*Trg@#3RW0J%|>ZzVpDfuP;+ z52p;o_VqE;v+FC`0|1czTv|ZDlez9r2oGO5w7B!}z)?DF+O*;F*Djplcgum?CAbI2 zGgbL$=M5Ua-8R|}9C_!ZsQ8E|y~|G#G1-wA92>s0;bZC;s)Per>0(rOmR{r|LVDVr z6Rol!ahA@3L=f_mxrZKa;4#y^gOWyY|jS;s`o-~qzuQa$T@cO**DMX6Sz@TQJH13xY z%%AUrN!PAjGc8ScM`+wz2B&!aou2lXwS)*Me#N;;!iHsd|NA*m=8Kv0!0aWv9RunU zHnJgl7&gCUD~P^p;305ElW+qN-$D_(3g<2Al*h*Ey)++4O2z4(`d~pu2@V3f_ z%W-Rx>frz&^T6Jg=t@d6INT!byuIvrAT5vPL##>dMJe>n)6?132`N?f~Dv<4PlPV_K*6pm?yYms@VYfHz?q zUr(5u8e~t2=KlzU_erbLf=km?bxWX3tSU~Coi8hc>Ry6m92e*QbiP-2z`Jr(CZvQM zhE-1!okbp)J$FFg0GU+4T!`u-e3$6ZL>fRE@T+H`UYzz)>~OrtonXbkTEY_bfHM!nGeH z!{z&;pWydJRq4uwTw$2}Ej9y^DQ*WFq*Zmlqr(MYE<9YFNRyav8$=a3M<%6U?yHA| zRGS|5WVjIn6959S5BY!$`rnZQwU%xg@1o~DFxs!NLea2yeSs(2Mlj_!SA?+YyHcXZ zahPxYwNPFbf>G}K?h*A?Z4Od;V^Nw1W>VSXs+v%cgR;#6dnb8*RwZ){U&{lGJgqOfsz^0hQ1fUR_?8t(`oWmepq1~uwkjFMxrin5Lt>I7<7ffak23QamA4?eHW#Ym; zhN2WGV$!x16dI)eqGry8a-aj^rq5Ow{Pucxwoxh{>LW0G!L|or-4yr7J)xFYl<633IYADwl}nbeDiTNo>w(0G zt5+w(L|xsMOg7xW`0J~%bcB$5RrxT3W-Sk?Yk0Y9mVtO0fx1v;!@xFKa4R@&lNBpew@0uYNF%X4F;@eh;Nj1jrFp^NMaWq4b$kGS5^{6rJgiz+Gj63{c zPpcDA6t*{&9FZlXJFFUkhE3AsD+e}h1%m^?1G z!RjoiC_^N82-H5BlfVW9SEnc}Ck@dwJ242cs%{&st%Z|RY?=hb73#5xXbUV@YMc-@ zQK76AkYJi3Or}Gn9$?2pI7S;5!sReR9*z~gA+VGdoFko~EX4c~YxEE^90*<`Q_d9P zPY4&+-<8ZY=6I^hy#-A4(iAz?`Y3$XvxN*R=z&!PN%D7p4YUyn@9^FtPe# z77r<%b>HV86)&r}6lEpMB*$6yIVWCZ2tX&LkkScSs@OUlGe-`G3GvyAe*?ast;5|x z<31&5Asu6++LF5mX^h$w2{XW9R-jHHra3#7y8|rXkYhRbvT#u7)VWU+Vc7GTVtl9& zmvMkoVL(7|v1-bs;6()F$VCAFPd&ELqSqq2q^}*y@c-*M5F~AUHTgxGT=kTR>+Xi- zI~^+y%rtVCRp=k|fbw_Fsq+l>DAcfwjs5d8OGG0ir$(>jh(}dq^}4$y#nPN=0h^Jz`pF zLD40#wWQc$DDZf2E4rrC%eMm6;Fcrwrl{-<@%~_eH94+HDeu9d2z+x3BT)uc5;nD6 z(b?DqF|9f&aSlia20f_2F?+8e^odvL-`g!w!ZwN29%p-u|N9~+V78Np{9qMl zo!5%P=XOzkx-5r%>duIVlfoKFu%h@uKN2_I2?ck&i0L^ifrg&d(&gYQ4#Z7NvAhy@_CaP(D!&;Ps9}8{MjHR_au18A3Mz(WL^QL`5K#)=FJXA z4vIhhwgu2( z{)`0_{(;i_r7SFSw?{N~81px|4f_iCBGBLxEFUk5*t_A>oA#z9rIdqR6OXVu%lpP% zO7FBOp2q}pLxJA+A$aQ#f-dR#Hl5$gYhtjYA{uM{H_tpu{A{uj)R5!iaPbXV`o*GMO%%^++M^B;ZH}<#EfQ#?^kb5RZ=*xEfhnGGZEWPPcBhYYt zB*Q*L1Z?;Cr4DqgVZIXeR~zVoNn^60=IT>$NfpZzgXU*fd;{tMIGPhIHwC1^C$mbe z7#u~>-onb>1m5sBv;e@8EvVrgfXtnu`RVb@@|PxfNP zinRlZ%(4(giNcU&JMkCXLa~NksfFTi`fU+{VLW^W;MCh(REFx>u!Z)@=+Qk4|KIkS zb)I*R+s(~}9+?Z4E1o>BD93W|g6ANI{6pc)II)jsFy`3}t0Ux=X!dO)VDj5oH1TR#xem8`5!Y| zFQYq|X=REQ!y{TXcVn>mBI@wB8j$#KdLdK5B=C(mGf~zWX|r`M&(xI9ApZYzz&5wU zDe#2qQ$itJAS1OIGHu_l4bx_wLKKu0<+KT=P;CwkE}YZ!0Xs_BAPB)Ajm5(WX&a0& z1f^`TVKM;H;zWvb4Dy7+1sw+fsfFpk9uW)WKrxYeM4=%}K137)pT`3~n3fQ@N}LBZ zOTsY-p%6KSkVg(-WcD=boCvu^h93rW5tGOBe=xM%FsMbaQ6>#+scX9bYC1TAKM}w2 zV8GaDEtp~CHjf2rB1iV_+q*X*UBq&(Lv?Fe|L;yZi4%uZr!W3Rufgv@g1+IEax}=L z|2MF}aCf<}kgCVkxi~EHBg~vTmS3X+0|Q&^4~@nKjqK>ut zuUt0Oh3A+)+pw5907eL5nf>w=mJP)IL{fw$CA@6W>m*6+({pI+6gPtcm{vJYHt4Tc(iKwaC{7I{Uu=7? zbm=z3_Q4_LA$Dvcly}X|vqQ=&qj#J>9scn2yygx_3wXu$`na%V1pn(fP+;(!Ifv$q zEG&`ed{-Mlyy(O_!$}ekh9A5cp5D{}-ludr_D~D-cR=k_dc@Ya8$9_QdudC4d8N;Lve$z(^FROh*uP5JUgQJNK zLlf?}^cAh*D&xF+ZO;!OKR8Qwj;kPbvVHsZJ`S&)OnX;4b!jS!cLQiF6tZm1rlynUJNZ%kJg73OQsJL4mW1vIC)pJP^3I9D3xO3H zH#m&t$RUPo8MJ|ro^}kOwPTgqFfb&+R@L%VYR7`1#TR`om&f}Bd~zG4BAan4-$`Uq zojHCHug8UELQgqkAdAHUd`}C7-}EOd__#p##|AdH9~V;w`9I77|MoxJhEc?7PBmF3 z9cPxU`q0^$&jKqtZr(gN*~DgFD<#&z_Rd||6(v*6aN8mYNXSBj2R?gU(hlvn0r7imkoMQ_(91MdFt@F*|P%O->T{W;s z=hSeKFD~7VfF5w%05OqFSh+eYEqPl?#)E-d&pTDj51;X%lQ`<=_7ER<^ve{f(eQRXpDdcSGIG7XA^ z;hDRv05exbv?h?cU7u&rl%4<+; z!J*7AWyO|5Q5HlqEdJU=ty$IeX_q$<3zb_E0%L~f|0f5keKDjR?7+OxFzp&Osq+H5_*zBnpE!?3BIqG3}exJV0k9(`o?Kz5?fN;#=W#4Ng(Ip^`Hk zLJGh-r6X_`5?46ROMh`0VEQMe%lsrV7*yl)zI@KRaQ)?jvvj@U4XaY1>syjL$%mER z_)X+Vhy&~o3ztdM2{<@_UuuMGB`3pbh_u@~Vd8a*O{^KNZYE)h;>23v0)+I_ZI!aH zSX_|HH=V6bNCaJ#fQQG5A3=R&3YH|qj#>7BKijxZ7P3c(7};+oW+QsZ6z%C|o{Sy? z%d!JJNv7oj>9jD`v8Z5hzOseK27)KPoPoWLP>kWjI((e&$vONH_-@rSFkB`c(WDZ% z>StIdfm_SL;se}p_r9_Ws^-wu;M~1AhC;k<u`ey@N9;At24Lg6Q3e953& zB#f)mM?fgLq@%@@BDY992PrjR1DXTUrWf7Uh!F)1PzGaW8*6r@}Rk~%_M zf^luB3`QxJ*j8d1k4T5DSZqfuH9U0`W0R&)`PX6_>KG1Ng{fSHkvOp6`t_A<%)oy@#5lVp9Q)E&*ps(R(dJgVCxjv^#zflCC{y3kTO@E3}=z-xtF#or| zu~_b_0Nrh=3m4c9G^1A$qPGpROhMX#2+w1s=>^O3!b{U=!G?OT=Q9gJz970XPqSvt z^jTwwVaV!FFB-m8<%wpSpCW0(=8}ibcLR|C7C}%H`$y|NjK*f@-HrFOEv6RsX$9D%^IdI3brwzyf%>t zlacHE?lkur*iAj3(JeZuEMy~g2{8o#CO?m|H&$?F7#0JyhG82+c+H*Q< z!70O@;e!TE+e5>$LC=^<@SC@3C;s7Kux#@Gdkc6EiVb~T`d&glv+3oPobrHBIUR!Y zJD{H}gq*q&W6RU6tM|7k+_B@Y7ua@%uy2w0&Tp!KPd(j)-`6BaSMk3aF)yWo`LbYVlSAsD^t z+hutM_PCK^M!d-}pr5s|3J^W1e@whvP}|fH=DF_=`_*2fqQ%$2rnZb3?j&?&*qXEk zc|G6yrzlXm&&}B625Z%$U3-8J;fih?w(|o$Gi(#Pk#$XEi(nrE^_S_z9l@BESgOlE#TYlfubq$y?+{S;;?}Jz4hx* z5mp@~Pv;)Ax;OBnPf^~E2a<8b+=`smQ0Tzi+jblbKUYRseHTLlP6vFq!-0GE&TOmA z3<3-+7_2t(uObX8F2SzU$Ljzh>LtEqOQbJ;qk&T);ku={A97M*V)rX~yu_4t%wVo=PBnZsEgLr8x25X9L%MHV*IIKKV-ShnkzG_esgi` z0GTy>>7|#7Sea%M|6f`l;MJwnB@1=V*n!K?ull$!eS3@kXC90B@1#3y@S^rGuSL=Z zaNX1%&|e2*ENq;F(MK?=h05IkYUP9y>fFH>VMs}A2=PMC}(*DVg)Mupj?yV zaaypT<(3=(37?jBsd7zE#sr+B$wIz6F!m@RLr@bK0;idKM=KYpa?zq6pfaJLoyNuLQQFrO}m>tvNdC;DS8r6DS? z8xp>*o#wErcd*v6z@S*|?)XYewS;F`aGi#ay?Rf>>wHmftgT?7!tol8&(O4qd2?@p zU4Yy}QOtNjjBYv~7I$B4%c>dY{6H~aWnTE$(j4R$W-Qp#aLTqi90E)BG%buS<_imU z&d1HumXx5&L*&n_kWhB?|I`APF}YM#rcrea97Powku=%~4vi#uXAx9&@*xKX`z9j? z!#dTzb;K@sQOGG0a_UHMUqP+tD$sfXp)pBV6FUO!K&vClI~nGF#jaG<$BZhUo$aH zvoV9pRjy^r&ysb;yCQ~A)ekn(ywj&}FJ6$#SsLEddbl8H}c;35%2%a+{YiV=^^3C~YG{oU`*Ibl!#xuqd3{P^Czd&k=|38rcZ$NGO2 z_kI8V1DY~yooqBpV&M{no}PG-apQi6-oB(lUCz2a139q3vtSp8kT!d^fITxSK}T?O zVF5v%VIsi@Q6i-KBLjEa17Vr#2RztWFGFZKR0VVg@fck@7(NR+F21nxg2(p3io?Z* zb#^t6l^a7-bgzLEFlr)-IAZjK%09x(kyxk{ls@t$cm7ZowhmW7&Fo(12CFNJ!RRN} zoC^2~>h~gyt!}W^WO(i_1tOHY^ovlpjPopnk|CW-3l{8vA2?@>Nf5~T zbp4W_g-cWI1dAnugS=KSX^;MD@v`4rr=aC5DYY{0vF&YsIW z3m!zlG{Ra^0IN@#W;o23VG!`OjE%3o*K{8t>}>{OC58?is?P;{3nxy%>obpJ5c$kj zf=@n^x7vr;$^=S3BZQDA! zdNRRmp3nkgv8$QDaz{%H0T)WU!QD`h__la6_?GG52gfklV{hHM#rYYEX=NpCdKYp# z27>553)8zF@aN(3AC@nNt$Ofgvu?9U>Pu+*OE1-;(giz$UQ$O>@%i!NV>Vc$_T^lf zAXD1<#2=-lVmfbT0`U800<0aCV?Cf8uE)y*7-=_Iq=)W*2@GCr2$~Qagn~{(a#>lY z%drR=0v@0q-lA@xAS6OF-Lhfo0gAHiKNgm6le=$bwvfFS1G#-&N%acu)7dxvFw$H) ze*AbV%_1BB$a=W8T=9T%6U#vm3}_|Z6Q4Uv@t;okO>sp}`>1dpSv$aDd>YR6aDq+g zhn$8C=bg0GK{oR)NLX)<%GeTT0@ zf5Hf_&}8SDG32!xueTyTI{~weL4~>13MIkV$zk7GdI*6Tio^aWV1putyDKm#3r;Cz zfj{A^OznF>*X^YH(arI`#vfVtF_imceqA#ktgY4G3T8S1TcFMU=s^qgF2?rj#lZEp z{-bBrp*NhS(14Hiu5J|MJesMGJK@T-At7wH-X~^`u(`cZk5vFo^0iq{8js}dR0b9jqV#ff}`*t?Rrn(VVeLKcep!cNM(J6dVRt(Zy z+s=wTZG=~`(I;K5AZN8&y*_v^EF%NwFd|mrHoQMFwtpPd0Y`WV-~}9Yej+t3HNcr- zqqTr}F+DWE5rUc>Z9rZ7D#B>>td4&KR^5YWIR0Ju?px^xoJg!@MFe7lYVSo0ZM$>8FdVfwwqu z?dHD0?rP6-H{}D#Cv(iq{y{-6f2;3el(&-auQ)`G0Cy@LtH5%#OUAFrv2tsmK%dsm zBSCW=Fv@zy8dlgsKF5BWIPo&{DzYZ!w7D!*YXq2LhOiu#hLxqNg-QrT;WTenn5CyG zS25|H%6V&o_e)*q`vpSY6nuj3iL?V(h1Drka2FOEZXr}WetE}^LvMkQ-5aCQs7g3( z6^;J6;C@HxeEpC4sKm~aw2Id!V6s{}&FY5QYS|RbjmajpHydMUn8tO?PQRViQ*XBA z66}DspJD}X;bZ(o2c{eQRKsg^edZ6W<2yj3>o76$Ww7d+wphnBezzUv0oK{TG95jU z{1#9mCeZ)HuN}^` zj_-u<@Q84jyur%?ixw?pD_Ioe=d6Pp&9y^~LA$6dBG6`@^gLs7^8*y9PxL`$56!C0 z-+>5P?wThpXW7>mz#3-$r3HfdhArN5n{JQK>?OVk3&hYj517Qicuq{Q;syNsh7I4g zaNL6+_#xgWd&Scve6L~CurH>FpohZTT09Kc_J)PpjT<-a14q)i*6O9Cf37;-gn6g^ zd}JjA=xfyAlccd6KJ+iF-*r5ml&^>RIPnFO7JplMIG-G_$+rBP<61IL2VgrbYz$nK z+bjC@Ge%Sm_hD?jYp8(v0nf-dzhEoat?&`MUt8m~^;W$pag;UTq8t@R%>_e%9*&N5 zyqK)q|K>!^NAao}_&p#$C@`-j1iz)gK636;vm_4?!gok51l33<=T)t|h>#h!Bu_0O zSPxyDN64 zEr11ERG-fo6ii4Ln@=e(*w#w+(GF-IdyAbZG6JxbuxhBrF5(i>)K?sm`xh^QYuKgY zNXQE|o9ZEPk$umbiB^3;p?xwJ-;mQoa+Y8FYN}=b{(ou#zv|V8&8Le|#m+8R`hU0j z5@II>R>`G=pB_J9eBc;O?A%PavZ0|-_~sfGKjL&as0YB5Z}R5YrN%tyjqrd$N2Irz zxA?nGixKC9O%YhTchRK9-;XqHi^wzMcQviQNsGVW@X)ph^I+QyV>u(wHDd6EnJD7} zFDO>iswuF#;8aw2dsve5HSK#VA`mZX$t?xe-z!?Q(d(yfxuR-IN?q?UwP+B0UV{1W zrpAs3vvx}`W^%UGrrdaM0KHcDv zZ0i|Fm%TzBr=(Ps=^@kvp6XL_2$jA~NT?j^cop=rq{ilVQ}7?J{fHBsiay_`;6IC? z@)@{_0|ZY|n`v+HXLfeOkm}+hAL-Oo;+P29PVg^50K(aLj)rM`Efa?aSFHGF!F7N+D<4c1$LYVaG8t z4OQDo(!s}MA5rlbU7hMj_X0Vw(8szm*>JMyRm=Qdv%_@~il} zuo*@r_`l@){gCl(Q^#1-C=uO8Lw=Qy6P8nqq`j9zQg{O+e2%o@b;s{xy z7pGU&4r8L)%pcBa2X`M!Ao_k9agG89!0M;_vld|TsnDEMzx7%D0xpqWdjH-4E>jHx z?d+dQ>Lud1HLZG1#PY5U6{v!bT5=+h^W=S{K?ofsl|^|geoVcM8}xMZsU^!2N1bc# zEci*WV~P{aX~IvKX2tYm=@*A4>8U-ZJHLxmMGrgF0~weiX>E!*extC1WigIZ$Y^-4l&crleozR4wy(88gcL!rcjXQOY_QdcZw%wu#d)B5!^Gzr(>YuvP-< zEVxUP#5>oN^%~=0stYV(j%h_x5vC(mSh?%?k=4U9<@MhJU)+*erpis2Fkw9yinL^B zn~nxHoi#i!G5Po|rP#Ii#J(Aq=TjZY^Kgr@eqFTi02SCp!^$3vM-021dZi3YiB#{m zH2u15kd@`0QHJBe+=9)ser)|}%P5(sQTW!n^n;`OSFzP6T+q9B+iFEN^rOt=p zOeM!DTxJs80sG2~h`+O3LQgYK7k3zOF9B=ZknQzQtDI04ex||Q7j_Hq&XBte8FGMr zIP?p3Kz5L#Uqu_$RCsX^OSk2<^n$rHj~6Vgl^~ zZPS$IEY@a&mh_fh$BxbtPlg9@Bc9x2BX&&^%7XH2&^;8u9U56y#8A~J(1d@N90)M# zEZm?STKGa98J5la3%5Y|kLS(%S-0`QAJ>m;N2DPvKxM=4#qD~$28*PUX3|iJ?$o=A z*)jaPeM{Mr=mLi^07A8sl7y~}1$(Vguf;7RS=41Jwop2ZN51><4>CJ6Rqd^NxiJ&r ze__v3b)I9z%00r|DPa}>L|2^FhmEuJT3J`o5XiX|D?hC-V61$?HsK9kY!)mXhnKQZ zj*e6MWJD-#seBa6CGfwG1Wmi?%3AS_vrmLd?~XU_?YoXrHi}JO{bs{Yc3*WKM-&wI z!04Rxb7CKojx;I1chku=G0j zYV5TAFF+O6%P&MwI@x)Hth9w~ss~^9->Q${v2q2k1yy#H-Co_D0gdOucl?65m{BogzB~2o;YfC#j*URD_uT zBQY71!%d6SzCbQX1_2XclAVUGjDkfrSV|$yeY;s~gDBV%91#2@Fs*0-LONLyfdEV~ zfI_G{(F9AYtvr~Vw<7{|!UJ{&Rs^WR8Ru~XmgpJcynH73)luhL!o>dGzxrXdg9>yQ zC@}zz(+88c6SX;xI+nhrWAJB%qh$&n(AFBGIQ)b8VzUzH^iACh`Up=t*o5KX?O(zH zPn%+C7(|XfVEP@0+UvR^2E_n_X~9qF$Wbt9jFv@cwH(0G zVBHfs2)|UH2{{fzy<9j1{^NrTUndLv>b?%z<2OVM75&w?4v+gfAZW`2v@M_R19?y3 zmnAjVS;erX#D?Pp155=W&zRV4Qzr8?0bc&^eH8{@{$tLbkJl&W05{Q5 zV}A-IZJC{kGh2%wV7InF=kkqIvR}k zqX$DS3Jq0gp`t@06BiThzzsQB4sTY~oo{U4Gjvb|S%wv4{ zs_2GSUd@U{;mgYBtgVKX-_CZ}#bHI6_Fp6zT!-StZL8{+pl%Nr=G%J+)Gg@_n3BO& zF4mYtXbD%ljkM5Ry6dQW+3vb4S#9B9_9?L{mQBc7Ah$ju_BruOO%cu2|ISFt^IGbh z;miL!*1H7Wd+>fyvD_ZR!k6I0isf8` zlbcY237x>p6ODTB#nEC}g0A5hIyCoMf-_j#udW_~^^>yNWZ*}YbO!UMgzm`y*w-#s zxC282^lh}zV}I13q&K6alVzsCwgWnQ4I3IH5B3|gs0)C^M7hZl+-&S`(4d`I4L#w5 zMpeZ8^mqimODzhr(B!P_v?8};67L3z(?9meQ8x~MiX+ARQT1BGX3m%)ZcIbIjaJ^= z1pchx0v{0@pbcDD;NMueVidjS*w7OeiSO$9I?Hm?xj%@%`q?KE09bH*&OkYW>ZDo; zco6dizKpk;eENG6r|w$OvuDXt@E=XYD_HEs%lh#e)Y3)JnH0XA{rl{Q)vv*w=TTr~ zA6AdjfzOSeKI02(-MR=r74aEll&T(iE@bvsVcqa06@)^Zdp=FsPRUrXb(jc3zmVZ} zgs1#SjB4-)$Dt?-Sp}-Hgo;-Q;zadwxC1i&{XJTmgIjgW3~1m!-C<5aiq8{ooR zp@v`)Zfg}raD=K+V6} ze1hv7B(B6!hE>QeTbt`R^Z4LH`W<|&oXrQSg8oj$ctf6X-~;6l_oe}W&EH8oAg|)&{HzX37sBFU zZZ-;08;wVy5P9tUS*;+M@Ee`HmO%JXa%=6Ts{Z7MY9F@V*J9qL; zSEk!s_}1bRbLVy|W2cx+d2WHriO@$;grWGXzXF2w&|1SM!G^i8Qg5G!G+~pDQqL0> zM%4Lv(z~aw`|BCz?dxoSE?B(dWUySJo z(CC2oaC)#-wtXHq$BEgZ!FakI;i;kz69RdT9UCRr{J~vk+KT^mm+TSrsg%L6pnF^97a}_5NNx4zC9`bm8imYN(HToqH}=ne~z- z$P+mRMINchv;Jx^?*_lp#a^)LE8-)uY_(v~7G1anf5a{9sQk{IJ73nr9&NX;sA!XYv=R1)=#EqwY#Ojs;@$}8Nk zFR)fq&@3=uy1siJF8(c5&VtI*6wO(pM9Ud7FW%-2H>g&v_A6J07|(<@lc{h(n@#RV z1;AZ97qU$~M1O)-tXR3?jhaF;zn`jUzZR2r^5G#!d4=8QK{3FbJ1P!O5XgySH_;u|1nA2n;q; zSUW49KZGQ}w+tg+80 z)B*2t*YC05-?i=o0QEiyyfg3v-hS~aVDalab?SW!2*E0sZwc_+A+n8CWP`~2g9+hR z1qjToy{NlzSh3lcebHHB{f1w~o2(|c*iSt%_B^!7xi@9?G5+fybdRs_`x+IepMh3KT z;^Zb9ud&*lwc15yeTH48=fPod^IKYLn`2Y!wX=m$C(W@23naQ=Tn(XOj+3ydau@A1 z^gMm`%RC`>(bDD=D^@vGhLxG^?kmeKey(a0>9u{`F5Oc`bv;g3hc*&wwT_x=hG97K z5@+4xO*iZ427Y}-Dd_Qb?HRNK*&@<5! zT#meC7p|;)4q(|~Y%NYb+sMo7!M01Lq*RZY23X6c(-q`SSkFPA-l}G)%h1+v8%@Do z2&95%n3&O)C%VvhU>BNO7}MS}schD|wd>aET3KstH8|{qO56Wf2Za+NY=S|r#Pn2|9)=yhD`9Y)Z5<}NCuOncT!>?04@7NT4W5D< z$pJyv0njxr=6@C&?!Hd+TEYMOEav;x+9cp@T|2uW4W^0C6e(GzOc{44&17Z&{#RO{ zT#p4&a3uNs5@PCk-rG$_5Hy?@uwE%TJO0|W7#x$2154}EO4kQeMX0YhSy%WRPTkf= zmk+{t8>fd#wQt~N04CaEEzvP>%&!#@h)|sF=$^Sns-~z{6u}*A4^H?bUww@42t7qh zAlsJ3i8EwFSPS+U6K6@-LCcJiSOn$#4dYQ9 z$Bs0EMOM-`FNoy38ByDo{F_n%uP$|^zSE?Fv-tjl!;BYJT!{FNX$sfJz#NNGD~6G% zoqYo!%*7;_PxT@`Y}n;tb&%-1H=1k+qSDWTm-&sn8hR&;9O#xCd56MyxqyJ77pFhQ z$2u&<_~`Q@1o09uP$xK{sRV+7%y_^)ltKvo0FV2fc2claCeApHuSr4JRrjLLI($cb zRYO9huHoI#*Z*0z67YL`n-0@TJc7luLdbvD?RNi|%TbM>X#5MEM96!RbQjbRg2NdP zFCM%38jddQz+Q4++t^?S1nn|-$&yEhmo%0@Pc^Gx;{}N>ZNY*C56Q333N;mbh(NjROqex=Ug^l7=NJZy!I5=OBv?t>+AlN+NZ z(eTTsiBSG2_tJ6N9WcyX6D(c2WMg`QI~+|as_F4oIyOo+3Fg0D$M9f@;#`21?swFW zN>0&m$~!r{R$-^p?Nabk7T>(mzbf{{4$x2e7k8CHT!5X%WdMJ9m` zzV$vM|F&J*qf!r=&dbOxZ3w~!S|%hhpt-?j>A+t zCT=dV5t$i$BeM|!n7i|YyQvypZjDz>1#tMVhjyN!A}M{qn!<;QU?V#DErew4I*-uU z0OQs8QoPz}F&rALbXttSG4T)1R1FSbcctwLFgPuCp37>efzx8wLO#u6!Sm?Ht-z1B zppruG?G+8j?u&?^z9+TILA+icdTsSlMGRamKIGMHL>k`sp5#--i~hr6d7A7dhrVh; zzpFy<85s%h0T{%6B)qLbZW?_>#LxlWw}KXG_y}MAsB?|^pd8s;0N2HTq~9a;;GKPf zA0(hE&$)$j?-vIN;C<*!Wdogv@o`@9oh1C8ft7{NJlC}=c*b_m4Qto9yW)K)ySWPp zu%%2%OTvsxmRXvege+q*P&3!emAND6G1xeu*)(aT9tIf+!8`)~ib)f-1;!gX0~$|Q z@mC5Kfk%E0V11ZP;nfiAn1h9S-+%Kby-;TAX2QPoBWCnlABlEvsZ7fQ{Mi~ zH3$Z5WY=f1H=!-{m!}GCd>p7KWZ_c@@5uTDRD4bRI|?n-G=-Uo5`<3PDlBlU=pYZa zrQdGyceAAgr!C@p5^NNY&Md%h8UGg!9dF(WSA?kYLK+;b(^Vk9s z-vHf;Ek(J5mhf1>IdZ&h)CJ0H5IdU3P|IW(tt1ZW)oXR^d3!F$O_E#L~aX@LrM9Sm+R@Z8bnE*cI>(O?~eKN9qyiMb9s5_Zv| z1nUx_CM2ng(`-dWP%x6Bpg~!GZ4O8^x7a#iW1twU!jLB{SfXbZPnMs%2+sUy(T&E0 za`HuiCIJvKY7UT4OoXVSJBVrw*xZSknvN6=QJSX$lBD(2umazne?R5=8p*5v!vp%* zLX)h7>zM|}A4D7*zbGRjNNkBs;nR#R{sr;dj!-}IvwgusfBmA^eYSIWJ~1AqVx__B zXH8{0L@@FDrc?=-S2WcZ&~KSO@hepvqiO3LLlr~vr4;S1vwNvy1#hX>q{E2f+DFp7 z;3#am=JMR=>eX}U0)cGu1s7a5#t27Ocj?;Yy@=nqH1d5oCDs~5I6adU?L2os9g{!` zOE^7uq-eEjF!EB((91Nkd6E_=H`#C@A2q}Qjxqc_QEx$21rVI6VzQxck(Xvi;V8kZ zh_yq54TtXFaY(R+^zCaVR7db?Wb)~69fzKc*1<$b)5dyem-5&#o?3)=@(d<+*x@AK z0$*b1>WvaXoKmA{3Bs!NGN zHwf3&D&!LrmFZ#?c?i6udS`)~3Dv@7SRoLR)=ZutLe;f!6@;3ytK$Tzo!WSTV?}#o zEzpVxM1Q5#1)=`<8Xb64_(0I1(X}ML5P|~XozBM5KSdS5(W>TfTLJFz+oG;;4*Zl; zj>9af$Kz%`2Q*lyQuLnqQ3A`+fR>u}Gvqv0wD+Kk1fRotmuam_Y}ZNjO}qn|b%^sr zS1*OW=OZJer;xQe4;WPr6Aj-`hWzh;dyp=)DnXkfJN$bs@NueAu2A>^CHA4@)MmGE zQ2I^w!_6fzfqcxxnMkql$3aY#BkL21P1G&1HcR;itemV?t7j$I`%7`MZZNrFB)*l9 z8eBmToPTSiIRXB%Rz$xi8q~OI#&cw?C~HOm4mqmnuG;<$tF`-z1U} zW|hj$)@Mv4MIq3{#ZYWi3`xCz-=Ia1AaNwJ%I5TdRY_E*2`9^4RvGjFn{CxqAS(QEy`;c;YNB~QSQ>t0>C#Tl z3attLgU&C&;(yZ;&&qsgU@@gxrcRHIO2#DfQZy#pMGV}O!QO@XC@6$PIaBuq2A6kO$ZJ3fE`t19}?FvD-D5|gEP443WzP53u*b~y+NQv# zKjl>(%(a)CEsD_K!|i8bvYN*#kj&a{&M)K=kF_LMOvWA&t3)zh*TF6~G1+H|8NWGq zk#unM=(i?=klT6eO9TuLluqePCuGY* zLS{%58);-}0Uz*47Gfu5QtQcVNG|6{BDhE{Qyk?^BaNt-?=iwZ3%)+61R*eX0#7^} z1PpkM;ozj@BSw68i=20KZF575=pnNgRp&!TaJLD^y-aJ!v;R4B6Ly2!#9s zK|;Ty#Igp4xYSjE1eH|}q?nkR5!WF_cC>bZ@+JcaK2*bGZ4C{gf5XBgIl3X#Rf@Sn zW_9ff7s6Rm$j%*{7#bE50!?}%MA~K&`D~Ww7AQ9S=(Ks8dP~-TzcbWWo=fCUQQVAIBIJxoi@!tYr&YV+@sue)1j^9VsWJF0GhP~x1Hc1w3m z!iRLS>Pvn5?i|CVu@P=Pf-mF4`cXeFE{*Om7sdSJx>|KH(KV=cXcE8HqmFi|>--z!j7udmJ zO>B}Z4HMga**Htjb{r36q2(gUAuA#fJv8OSc2Q_iraqh^Orwj-1S}j*x%Z?uDUT)j zk0BSg%#WYW&KE|S88b%t;U~YN;%Ol0f6ojAvd3KfK87a8QHk; zGB7CLQ_Y`sxJrof8vrA5CH58}O&l2-j8`8y^;YfbTcJXO>CqY?C&UMSGp(E+V%V;( zo>+xD2BMt{a^_YhID{PizDHdrlFj))x4>86TOLkB0ll34=alBv!O<5D+dgasTMoId z2BJ>DXwW16%LC#8S5ynGpNscN94%Lcr z96JJMtZd0?M>*;v7g@tGn8;R)r!i5E1aDXkIEEd0Rl^5V*+G)ZQNmW7sxqm1{i^ns zP|w5JEQ7K7AeDfd=U=u9{r9DUm0j9`pMM{%s#o3>+y*hXScf`#|K+N=Bbe3R{(yEe z>ZN0D^q@-wkSO{p?n9ECgY7YRJC)giC13cHn2!CPBND9OZ5(&<+n9nsg8dP4a&M0tXkQR`<6O>ch6slnh$6r0D37x#L^U-O8nj>Pwf zUOOjwz1X^cV``Y|M2KQJMpwEf!6h3Oqd?b*VY2`pCaHO#&V)4vu!KSpLgcCH($Wlc}3F8>@k%l=B@m9L&^x5+MeYSx`rITLQzW3y3fMw2 zo2$UmX&&k^h9s6yDV8EJDkx`L2UcgO{-X9O`7Icj1id!o;;LRlwjYA}M+XR4%~ash zplz%vK;TDV5?IH`g$Xqr$Um7;e9Hcqb?XMt{Ppy!j%LU)mbT?R`p0pHme@mXygyjK z43Q4SK1BNj7LWQ@ldQlleUoI-JM$|EhWuBOsGg`^rgRZc$q>jzO-y33{CDubJ z>?eC2Sl!Hr03q}| zNva}(E!}rBY~xs6SXJd3|l7)pC*r6dI9;KWGPa!co*5$t5^T{ z)T*K$xZs-&_FHi2(cK9Fr+NrUS|)acrIJr4GuMJt>@@+qU}IWK0lR5#JQ_|O3Q&c3Qqo{ea$qfqiCrP_y?Faf{s&}G9SD;a z#L-8-Ih(A%G4(?Egj}CWtzLFGZm{WJu`DQHAS}+BIrAg<>fW(6cxnY96M2pm%lRj{ zDVVP<%!iQ0Rzx5cl2pgjXNsIAj=`S^q0`CoR|p6cxi{PrdkTr?mJVssqzPCuIyfp9 zaND#|40K@AjkyAnHplr|j?%H%LqQHLgracxlJSkDja@sHOqFQptgg2EFoy^%{OQo4 zgS6Wh0E>yB4w+G#g&{g5;teN;81-A|ND^G26^FG+te@d6FkO_p>CM% zl@R=pc~(Z^p1Ez&ILwNU z#$rS2O^Q7rvqc>mf0Km2`ME|?;|?!(e`0K@*WB|DMD}{!04`>6;>z~Ta@h(NRTQ4; zW9l2fveudIIURheh(INwV_Oe}TlS8nzB0VkgTIZKYhVfzSdE7;F=J%SwbNyt2q6 znQfj*^&sVQq z-a*vP1m?w$%)!e3!{|0~GP|kK2yI9-^V#PcrVSx4^Bg+{*vEE^rvO{YbL`lEfCbyB z@YKI3r>8nRA(mc;FM%EVo;e>hX3PrL-5w8oZ#jJf^d@PaLf_eUvf+iEOV$sz;z$2*oc4WcasZ9whebL@=i32M zM)%%R2SMXVF<|E0>v5X{R_W2L6P_@!T`buxL_AKzf@qq(?HEr1)|%(oF;8Xr$ir3* zJB5D=Rq2g4*Q{A{Jf66Yb{Fbg*7Pt0cT48i%=i-IULYiV`0$`o5E?`fe(J(6_`Ef@ zu#`*_QnjN?$t61?P@b_xg0vN_o8hpLS=eOqSk>#xu}f|6DM-}bZ&nlHHqKeOm;@yG z2RyyfP}sww?qFhgSC%Ql6cT?G7@=cim-D@3;H8orhtgPzWwS_>vhTfy90{@{|Dr@U zS5GLJY-IsLU+Pc#cIhR0r0+R96<%9XuP7V`+*A7DA0ixu?|ZemyaZzaGJ9} zk?+@wbDHNuIlsc1^i@H#Ds~3{Da%slO~uKox!*FEaatomF{fVXLT_Efc%uNJ`rBc8 z^Bw)fZ^le(NPU@f{rU~4M&@RRi40zKG=xuUDkcc=XMX|z$-!kLNH**L-U8GZ`S9q< zm8<6T6T9AUn5@z9hToJzeA0zt@$%>NumEHF$znsmBKPR7mJ_q&Y7tW2iUAe0`-U<>Lw3uNLpt(0tR0ENCo8%#kW*gPlBhbvAaTx*^*n-JN)uqQDcp;Y7Z4c zFq!(9odHjQ>uKd@d0CN6V*5Hs(Ba5ft`ZpPT( zfMvQfkh7IorkgfSl*d|>vrmM+)gI5RTV}DQDGj7(9mYzd9XO~MD#?+u@*G!VzreK+ z^}x?bU|{`OkKqOLSV$5aa=5Rbc2=wdw3UIKneDhlC8>iGe1GOl2O?zfcZ~+kNg=m- zNlRbzi2m7>nu%cB7(TQMXEc{+Hb0!PIajV9$v)Yn6MESXp~?iSx&-w6@h>Hb>a6+% ztKKj9rz)}hlfd4yOIjFjI7k!jmL;+b-+@orSy*G?STY2{p*XTTDtZLRN*b?vQ)!d0bOIO?cDMKtIW$t#}BP zd*+$1zPSh3%CBUTn1b{_D_UhMc5SIEwIx)%qrXL@t5rrDZC!&+=hpo=9t_A%rbs%gfWia6~|UOrLS8{wXx9j0mT@EB}~ zaNk`ZCERBZH0@bK8nFAkUXryHv^Y#Q^B8!fci-utC%lwx49X&49W>2t8an`+IQTRR zM{4PM(dpg~p`7T&NG<7Ia09vsT2<_UqFGs5YPWoFK#TU1^AgTAu90@fp$2B(dHS_Y z6`mraTs|%1uy(FIU&y~#Ecl?SxuV1e=^}qQs6&nusEl+#iNexE54wU8fKrSy;kcz> z73c|r{FHitHCLobPmNMQ`e{=NjH(4IFes%m$$z1yN)ptR*-;EoGjN5X#biTs7Hxiz zg~Ur447Y_54noqbUN-Ha1-yKHYk!$QItn6w{uQT9TdRL|F~88xtNbN{4S!Rk3vqgt zbR_M;gZ-a;(wsw3KG2H1J>@l?Ys7jxkI1yd;JoX{9jq8n_$-6{s_#fg4q!*72PtoA zn4ed1$8yhulb!LYJza$_jsd^4o0>TBDfxJ%^1PD(u2h)s^TY4~mz8D;Q!QW(`bvSJ z(^%{;`fd2Oiy`gACV}zj(W6J}9zBA+qe4IP8(MlZROa*Z?PUTO4-mgAIlN0u1RDch z`mXmsdDRBrVl*~zE%dK-XLOs!@w4}X+z*M-s+sJ_u{QKI*f7FQcMw2VzWeUG=K}%) z`or&R=5B(S;57wpQI1MibpNRkVDW3abm=0Ql|X0R<+!n}8J8Z7blDD?dPw@ET`3W+ zzj+_Hv(UrU;iW|s6>HI=#rtO{{JR6w83k6tiM4U6#ZPa7VyI$tQH7?;w3(fLiLu}+ zLxSZl{o>Lvir@<jclU4xJBw!gT{$)yhvOqTB|YL*>5J6xc{M8e zI-zWiv;}$`yL)KM*upZbhH({smw{zYLzr;MgMW#tsWGxd4c_rgC06jp6(zPqxp?C9 z1d=2^3+`m9!3~Dj%f257y?FlK6?h6A_n4tt(C711{+8xSHj^BcSg8#WuOmcQO2w## zs9k!NzOBT{UL^_6c{Q4BvCik+(3xV72=LtcGZfdtsRcuA*xC|5 zhVKN+XsI~ z$Z~1Sb}cNoXz`-OZ8@$H>5CV_5vlM`9O41o(X|kcR>h&At0jsX7Up^3g%>11HtPvn zpxop|i>S9?r}~&s^Y~oxDwVrLHR!+O(5iwW)mgX@F47Bp7X`##V!Z_mYJJt4Wl*Tn zgDyg=@P?{l5zM4J8f82z9r<3;??2q#6y|-Y4E1{;eZb_k`p;(J_)_si2eeGn;)^;I%Di^k~ z()z0sU>|I*D4TAtQ-IX0s4^@Xc0ProZc{y|$PxW3W2~n{m1#m*mDoWw25P}7J!ReX z8mOuVDXJi7vxChQxiMvIF3LbbTn7)jt)qfI#jGGG9<%@;1U=L|_~1cZAluX`HVuux zwKH1Aro1)}NR%8ayEI+CeWz&GeQ?BD@=WJgEudop^iC5FwQ{EDcM_I2ouBoL6G3R4 zi-cBDm;}y2g4cfT+)Vb$3IdlgG$dS>Eirier&Ccnd_vkG4(hSw0Kj8q1p=N|*(4IC z?1h43;&!Z}caS|0_73Nd9jZv`+M*A6>`Rik%xse96Zt_|TPR(|hLF~+8`XU)oSfs@ z$EVE^y=o*Q6@IzFJLHvT&0PZ}1%2t9JX!ng9Q*Kdp2F8TL^@(9&G3%0&=3Dk&cU036|(IN2t@9u)~59I75Zc zk^4BGrXtv#F71J?GK6{}hVGb{WPNKsm_G>!fK`G^9BOXHNQ@=cPXpXW^mCA;s+aLv zDW5Vg%cmuD`6t9W5;8)S-|tvyhA&6(3CA1Dolb9pyQq?Uk*t#0DplftNq&*#*GWhd zY0+MRIVVh#Cpf_}-^7vi%g3C=^w>{6dX?!B-UZBZYlau@0n?E?$5*u^t|<-8R-!$S>z%H`auZR{s2CK_DTY zmZ)8`@kbZHY2(AoT+a_Ml9G|0Nxv;Lxcg&z>Se6CF+$?M`KJG~Y@Y8QrQ*MBh4GWK z&AjPX#iw*6Nvpx?Fm!G363Ik460ltygNZcruvuXaA#X6E90{0X6Okz}$HR$A12YDj zVo&97#Bp`C!XK%zI~k3X;0Cqt4HTiq{G-)a8|9#_7w^O2M<9y6&F! z!mad0!n59!MOUUbsuxg?eT z0+!$12lOXLe;)aSr*$b-w0%@2cA9NI!87&5M&Q&sLaKSMxP23OZFM;MDvBfAZ?adD ze-kWPpV^)6bK)kPV|Ee7V}6`hIRRTU+Wql0t}rbywx*X`;Tt?gY;3%UF?u5Qe6p=~ z5Fg~yL?PryqgGzaGgF05<_plsx?uub_ig0WP~jv(l9o@I7L|p=stXu;HANpDLHBK< z2!Xq}#~9}A30^8&HCAQ*K{#P`;NQ2mU*NuU@TxaMW8NspHH{~1ga^IvpA<`Q&i|MN zI$^vWa~CP%eEza@>;vfA94KSTo4*t*OMQ_Ok}7r$0LukVQAt9AMt&5M%}T4?iI78} z^6~>BeCV=Bx9`X~eO`CC=nXi8#72@0dhUf|VOYb4B99=mfjVazdv=M=SqNBnNX)ZLd+k?kA8;6fV){oIXl9t z?%ykPg$2169CIl7={C4KSK!ZjCN(!%9-Jb$0Ft#QnrC3gN;>sWzFk!BOfd-r4yz8p z;*gF~D4Qv3f$m$VmGk05$*zOxaJ}{5{G64_0^r&d*unalBhk_TX=6KYmtiH~`7uH# zhaT!o?-Uv~J26zC&$PHWD3A=(#i38A#NYv&BuP_e!K3S}pIaEP?>*=(_kejy^9ivB zl9!!Pf`3s5_^QeS=nax12-SF?&QGQD#Qb6EX_tbL&KIDW&jK7(+N8zbQ+S5RGUL5T zWO0)ge|NZy9)rk-c*XQM`ASp3zPHB#juM@8uOrGe=w#e*FFs)tTLiZ~5xTs;8SeP| zz%uhlmw*|1_0sUSh1!dHI+pVna@ZRVV{9hoH^mDz#&q1@TRi0OXG}Vwff&x5%O62r z=k@YOx}s{+$-@^;5wR?25W(RG@twKhuxZ_o*F(le4*1~W1n2GhEZqVR*gekB}-tR*19%)?cQp{VTXn}dKj+l@s&})xkmLce3<6)=4p+kov zsQ_!Jq~L?(5e4AqwI-#$BAG38aqG{62=f8++a~%!c|ca1H_0RsYY|66-D3&|hWf;i zH89%&VXdeKHk5Gk+cN;YmMn4lS2L2_FNgZ2l9Q6Vsd^+iaf`SfH`S9C{*0wHkMALH z_2|3cKABu|nqmPQolc@pX=$?e{Bv;D&6dRMflbww=(V zSDd3b|KVq7V?*dGwn^Dbu*GKW;ARUXj=}en@R8Jp6J4LV?Cfiz;2ccCs4i$d;o3g7a5nXCwZJd*3Mzu5hhodM_J9rbfF1RK9djNWYi1a5o5-&^ z2vosptOrh}!vtx#sJmsBLMU48Cmv4y>Md6Su4hbQ1#_nqg)1r3j3!D5^7}7fTh(bk z?MQhV}G^)Qkb{tMVe*AwOEb46X2qW6q> z4W{H4SwB^+*Bqxwhv8J&Q(Ld_a2-5d+jZJYR=Ki?|Fi`P)|-=XxK;Ubl62}(k4W%^ zPwVagi-DJT9mC1*2w=WHankCy^VFpRnPqwKeQ*_o3N^fnaYmFlCjeO1$*VNKLocoo z-oC{$X=)h$e!(Y5V=Z7>F<~XRDXQ)r5- ziGf?l10z=fFLROHClBTKr_Tsz6#2{5r$0&EPL>FX8POi(YE|#`j&&Rq49NHs#xM<} zdlkMVEvQ7~VIvjxZ^2CR1C9Uu8_PB5eAGhLqfYl&*?eQ(RZs(s#7jR&Ir8_p@OTNe znr8>D1xoFORy!(fn6j7Y5RXXA-monh@1tJr9p+C+yLGbbC-`@!?TUpSokT3uPm=9%V-ca<9MvrG_M8{%*MGad^0{R*$)^8h z3xF{^EaXH;h|CI4P0)IfObX0$g>)Sj5(0K=wIMoCVfThY1)fmpHJSw_k`8WAhmyB?JMbH-_c$_s<=??& z5B{n1(;qzo=e>*AX6tgB>LjoDxFPg@US7n$TSpO+wrlsUR;;+2o|#5gSnp&W_dbf} z<>FaZY#7E9diLzu+F~%oFnCMT@VVsUUn$wB7f#Z@gp3xDmGo1LRwv?{)p@{&-qb20hPTPZFj(JoB3T3=zMZtp z`Nl2S(IvSK8|lvCLNiImb56y#NjeNW<`G$%Ia5g1w2fI(42?8)Ps{WW`VJo4hv{<6 z>#aebbi#6smhTODetOZL4lLbm?sHy^H^_P?^KZh*zxM^bq|SAr2yM~eCWC+@oG;09 zCZk;cqsE-Yix&gdi)FJk)|Ta9<18&{7Yp`)d1Gz9B_|Mr z@#6{t%Zd)>ySWyh5`)#oCr&Oq0xb|UV8+g!JIBh5k;UmM@$0wA$C8Fx8@sMqfN$OS zyTzPfTVqlzBvb5s*`fzhxqHtBV6E!9Oyx3YV^`-F8mt4zX`-twjBkRx)9~JcVwFV7TrV0I4rJtMhJf~np z3a;NVYd}p2kj?t9w7~o`%4Dl+u}Z8NQDam73)qhimrZuj?viiqh(LM3@;+3$*GElA z7EI;ILlbgG4gmMRferMK-+XdTS(f?aDsM6E(lj;?nt^4(!==a37N11z89z#~KlDu|@?&gcC{~z|o09xY?7j*^MB;n`AzcqeO3Pwk>!seA z4D5z%eEWQQ8tt6ycBLTXEv(CU9X6JQg~7-lhlM>@$Cq_3bZpF!_#uzgKLp6NZSW_w zdo3P<19}S=E}RGbOwucfh#6lYE2kUugw6Dz*UBTd$;>+Y_djfbdJ{8<>pQ90?Q3us z4q=`ohpEtk{`qHcFWlP!_S49&HaT*XKS`WN&R!*}bpxjFIj1MxtK<_stpYb>*am%$ z0FL+iT+HwsA)C7tDLDr^?n6cFxp2J(gk%nME_tiI#Q>$Vae2CLx&@}G*!<|#k$gQ+ZMDMI#$WjEuw_xz3ROYTZEbL};&|7L(gXKQkB}@o}Xu7jEg)TCYvS6=Qe{ZkW{h|iCMn<%X#Fs3n9n?){$r!k!}o%K~%*PKR(BhQa=O;OJoA29e~H zOi|AW5?0!~s;3k6_Q7pL{fe3Wf5ZIG&22|Vx0Qc$F6;gXYL}dtmMduR|&M#{1gqS3f@hB#MlVu_S zu``$$PkxT4^9&}o68ByS#BUq^>VjjO7bzd6CzLg{ejI(dc~E*I^OUZlg7yCs$V&67_@B@_9~#_w=_#^2?v z;an7GDQJ(kTD}QbxW=$+jA2j3RfrY_0!LZrtWw#n{J>-2Ro7L5!gZ+gaHtgS6?Iu^y+jv7x!6wPNTb#Tso& zPG~Ii`~g_Q>v22N6@8>b%TS(>9mUZ^1@=X}f8+Qn2)(GlUL#%J+7408Q()EN4)z5s zciKQXEiiU{9I!su<<=OXCJDqCJ2~-Fg&3Uo6b}no&nO{;s!WQztZh>@GLJU-+3h52 z;%6$$8|7Qg+SJVr6(zKU*;#NZy5c=Mj^FRreGy&T6C_CQs+gi^krhDt}(HFc20b;tiowR z|K7oJZ;_fmz+R*}ifqA2V)qHKTcrVOgz+9b9{X9~AjTe4c}gUX?`+eY=X8vBPPqkk zk>U$$24xJtU&=H^ZI^o%#SV0E6uCWqKY}@&+f8}w_m#lVV?Mv=o2;M1M3ZrAk=+ST z#;W2rM_s1KqakqaYb=wUjHQthxJ%2%6uy3Et7W zdi5(fxO#PI9Ct2#&CLJO+nclVFYAv1wtnv0d3lvq=oxZINvFim_2=aR_O4cL#eJ~- zx-mJ>wlAfyPG`Ukj}Ah4FMOuO9%jIA!1P2fUh%f7Q|U2RaT+JO$|bO}*C}J=HCW}D z&_xDIM;NHs@C0nEl(E(LTS_GOy!1O2yKc0k*ha%BOP_An%Gkj^uZD&(+)bzc5G$T? zh9SMz#A+bQVJzvyMlYsnfDuzd)QOEIj5J-52W))AFgsqitQ{X*LgFSfKQ{iNhEhLU zx0~U-LG#`^4X>7eiRp&13w1ngB-U|DnEui!=6Bmqh7elCR^iT7L8wKnf%lJ7RawA3 z%h<^E%#|Ac6Npd8%f)4<>*v+BPkI*194*mo!aK2aa9i#6Z&TBOS~$JA76aQ`i!JkY zRYjhH(fU-j*Kfl|1H7g^SE#GJ{;oTr-)rtM3FM|!a<%cHoG9lCymAw%B&G%JfW6ft zVPn~tyI}hXu6J5On^R$V3hw(w0BCR`+{trd?xk$yNbQht7#EJ|q!0trTV!+_UBPwJ z9KuR9<&V@4t*K*rs^BuLf-#~$k->s1P0Tn)jbh%-gob6u z^Zk7QGE;G zuC@x~Q6YtRgLPT;c)cO_!My(t2K(4OI=TB`kQ8k?0n#P~AZ-@zqcZqDDns-b71QPJ zemMY4Cx-5$@_y0XCzVvCw!k1M!Mfk)5un$L!J1t9kBBskK1whsgw`7Ce6R6jppZ|2Ov;a94!r*f%c7 z2?Fa)Ut5r`wmV<7AbMR7x!@V&G!*=!<8p2F#{Ae#o!`Rrw@5kALxtuU3hoLvRy9?j zKnwUF(=|OMGVQ>-q_@f9DIKPry)J%Ac~>SCd>hV^`lhxR4TN*{S_kJvs4i-%{S!TZ z3S4_x4DRy8_}s$V_=0R~Y{1E<-^hjh_Tw-~ux4}Cv2BxO*;^6=%KZt(ZDcZ~RG0(T z2(vv;6ZP6dQ2|Czpiq}(x5 zu|B3rB~UF+aRBj*ag498A)na!RC+cA1I}1hxLe^+gH8VSRP-&-ZX=~0@UAfow*>PS zC72Bt#3;_Gn~sgQf$9BpL+V#PpNYrO7h;!@UQN^)Y~X9Fz(pI!0z|B8h}k?qt@^r% zA=Lb%k2aj~;w-6mWU*Gk#ynZdq%6Y5=Nb&oa*mP)-7MaZ4d1Q8f_TA;`g4%`8O8>I z-3fke815Ftp;ONR;|3RY2mUrba0eecKUk+8aMak8OiD(y{{-_{x5@Af@yHm}>GAL) zG(;nksU{^vZ(oC0NU%l@G9 zb7Hm_f-{Whyl7_@{;1mNEc`P+f`1ZvBQS7v#UJ`5Nl$Ys(W;wx-2ubcGa1sdk%u4| zPJ47k${=dOk`MioH$^cB7iu&m32&TISphvJ{eLTgx{2PuKPw7Diuq+*xCb>{@zn(j zj%_X{CJ0W`v)#SAJXjo#!cYIDWy?>t7#O$XF<8Q39g~`g?{W(~+47ETn9G6_ljx!N zyvxwbsoaaKm&7wOlp0 z7r2rdDtH`Y*{Wl_IR;|9S2g4TXgByOg;I9({|RDFK=Ay6@j`**1d}n=4c()^@WvVr z;{)mm_CN~>E*ObM4+>@g{SzWJ$UtFa`tb5uhvqnhQW(U1J{&NQg9ZEO)MsJARL;Xg zEGaM(O(8*}DQKDvGUVhzRLJyGb&?fg#cX0$KzQ6ojHO;mz9}D~*9m#2g)CY`Ob)OR z1eixi1r1ViupR?MtCK=1m8Jf&D{6Lt!<0e_uqr4+d*xl_pETS$=J~Td)Dd z=?=U7u(mwL9d`TY-RF>ydDttJv@HvAT5KIYYO_htwXXH>68K;cf=7P2nl2TP$LvZc zrqhLM;ChK!DYV&K90QndVZX&RABY5RUN>bSz9Gu}4%pS_!Ln|IW6JShbr>MRi*o@H z)_D%(umBkUynXgZKLu9uXN)7BGPy-Lm|ebVL7>y<=hg{WXFJ@8PiG%Orq~er+#Bim z!E*)s_NA6PXAW#xc=fx!{p96O@MZQfcJ`BZhEdQpQr#KL#o~fc-~Yj2>9sQ5gom z-6BnNXtNRG{$O=%4<$WE_l4ezy^8uKFI~C(k<}wO(M7VoC1H|_x=h7yG0lWjebJyh zHa5%F;)ReC*~FgQm&ELvAa^EI`Ppq z7IVojpZ869qg?M^4SPMGPtU{ZtFz2|Rrk%)g68cLrxa?ywp@J63GyB=nXt}q_3L{_ ziy_qFKG;|d_Ed}Izh>YQd=gm5Z__8GX3ZKHlY%iM zaiY0=qLqI9TPr~$Y;!fSlaob-z*&FJoW$)do?*Q%N$@e@e^>%@@la92(zYh0P?#}Z zz+TE+RGN~S!?<~09`iqB81#p&1xq>a*5NUaku{F}va5}l#yr#{*6bLg$`OXJTH1fR zVeB0FW`P2qCm4oc`}_(P7IkcJe>tZz5DYWs7&eZ>T3Zm6+g{OCSyQfQ=V!yI;N{@V z#ssYaj*T&#LRX+CzEQ>%bbD*WV2?ZO_JdXQiaYG`7v5ngm#|V6STg*ai`DJTsaghL zF%&S2OKx7bzkqQ`u3Fp-4~xHaNmPcPU7|UwzKy!5>)Ytrs=UiVH<6hxfk$A+q>W&% zJIdJJgTCe^oVwQY)3@xiaml`xfL|(9sEk-kQjTY%aB@u-tIO-R3v7`=a@r{iTg8K8 zCvnD$Dcdl`O62D*U6%JZJN+^8{7RkCqiYl{+z(n#ZS7m)zk?lo0~+-w%a(m2_mJJ9 z9KjdX(Y0COkVX6#p9yOigr)ST@R0?cW9 zZ62;;Ee3n9wAgn2eyDa>ZW^rU`&>7SYU-p^yJZ+(t08n28{rzO?uA5hKqCeFxlXZJ zHyO_lv%b11BG}_Mmr0cV@p?Z&^r+c!DBTmTwHBJcj^yxa|fSJbEhaSVUXE6ankQRph@sR|F60Rg_ogc?@+{u)q%g?R1*QG z;8Ow{b%y&woDY_c?BWQnz*55qb_LzudXdIM(+R_xSmY^T3t7DwjOuh3_Kb)c3W5$Gx31Q>3`44(WyE0jCr8zQw z5NHMWVLZx*eUxSyBH1q$^}y7BRy!ZI!h&F&1%z;htE2D?i2YXk$>!#uI^NgCCxw<{ z+z4KW(sQVIVppiUeeNix8!cWuOreC%K05V5cRH?gnFv7cb{CtuQeaA*f)SxRb8GNI zH1sXihVOKc5ja7gLdTR4f;CMzu8K+ub)^NiQVAh?bb$sd!iJ;Na$~62ajTOjX#R&{ zht$^6CW^h)n+fl~;QC!)pRXoJh+VexnYN5AjWw%lolpIlxXB9g~5^mok zO9U%~32vcB0zNrHb>Vk=5(&etsE_JY`-qHS7>Qk*ivP5t_dW7NXMS7n*GRBYn)`^B zuQu4_)CMQ2BlWH&yd=Gv+0T8nnF zB5#&F9N#DB&BC^k?Yeig&@FEhF$H$`XZ&qW+b=xf_`wDO$qClE&)pUd(|?Eu&X^~s zE2t6^Fq?JEB2Lv2(Y%FbvKI#4nFs+a6hdDloHlXdMT}2!f~_L~!ek-z@Frn=#T94H z{uu5}U{T;0r7KP3Uf8S(M#n!7a|g#5-{p(y?R zqB|CGX=L6Cw5G@23j>64Jdy7q4(D1O0mZ6zaMbz{IzFy)FfO@7MF(0<3>LozyNr#k z8VD?YJW_-8GH{Bn+5+r%jTkZ)Xe-g6NX>Rp;GQ5a%XV~t5&g3h5IlhCs&X)}4T0MU z_Jux`6W~1sp+(j8IZA<8FwgFU8Utp3Xb#cxyn7$4;38wVt_=|NJg8w<#6J9s<;F_Cj1vmAYzNoWI`Vj%>7VQ zW7);k=_6MNS>jJUZr2!}qd^ZQ^7zIGdF5*>^7~KEx2VijYyEG8^VLFa3563rM z$I>Ygy^~354-ngkuZbDRwGETR9iMzMDHCrK2QsTN+uHoo9>h7F67rp* zDnKaT7nmGTkI$fDXEA}KDjh`nv!4<{s6WQaxPZM2vF-#@i2i`%q=K~A0HdoSE_G~dl;!fbc$&jG@N+}H=!+Sd(h0Krjw5%h<#DchyK=N1Eh z?c0{9k={puAow90cv?0ig^Ni<9)w`*vD;TH793}XIc`BE31qGbHOO5t~ zp)KT*_679Q>z7XJJgMD?H1@;y)#?=Ow1{Ke6`E9~X?pTJV47Sufb$vqtFioWT)bjY zH)Srk*1+MK5v@LOZdgsV#*WE`Zp~gt$XlXX3ay8{Da#BM8wrD0j0;ih>&NRq)P<9?XGnzCyMVsexpVL=Ift1Q+UlJCEmH+k zv<^U-bU|57s0;;*V<}A14leiMS$qWWNu18&FqiQXy!0P1&0lg@5YS#KJ06DaVKrbs z-eRWMZgcAToY;ZPzl%zMTh&=yeV4oaO@`cEBpFOqrZeQ;dv&=)u)qukVfPS`%~a=> z9-9o%k+qR3x!kchb#CFR2{=qBE6|$$v4oC2vx;bT`#}rh4>C$DXJ1!59n~x$N-LQ<_fl@j3 zA~PmEi2I&XX?zkK4ipj1|dTmdKw8A8AZB7m?fzAzc+be-g8@C*K`ZByQ*I=oH zY6_xYi?PqVovB%00cr@=-H(?CHuQGpBJu^QLq|vcRv2C)3={cNF-74tlhE8gEpA^s z$Q{j^%C*B8AF1e+R_*VPbr45ypthGep8vBzwK!u5 zxK=|>IUFRK+!Y00SN-yU(HHv+ju*R!ux)w+g#s=SvE8tvC=3bO$=Cl3$~|ajG&Rx| z+l;YO_D!b0Nbuy*(2anV>>V63gr&Zdd?LD zZ%t;?QCi_E!l{Kt-yME8HdP89c< z8E45nt0ppdHYn{4()0bmw z_>9#B4G69g%>YhOc7Sqj2I!Vz$cpNC0n+iLpzL7_&i6)6 zSf|cZf4W^1|Ej2xQFS_C0?s2#23#{C9LbO9P|lAjls@)PjN$#}UH+c|N*V#1N#%V) zYpGZrW-^~G%Znkvj`abxU>LfF7$m32DX0ZJFNK^LZ_-eYV%1FFs?sYi46rw9{1d%dS73B;nKnAW1WgZMuqXC< zG-h9eWT=xhm1k30m&d=W%rL`@q?c77?QBD}J6M5HYnQD-ZXtoypi69=d%6=G=_^&r zLjW=cvE7zsL_xU0%J|vbi8)fhUbT|(a=aF+OZWI4<>OloMY6x+kfHRL5HFvLE#m&IXrqX^erJ*E8C3xvn%Ai8&7gVNd#wT%(IuW zNalKnk@xJ!3 z`VX31u4vG(qD2FwRF<3$S!C{TUIFwUV4aUkK%K^;$oJ*$Iye`*ElBrREtq8&Z11y&T1h_jamVx9;=5?w}dW z7~&Fx*$S7tJlGAPB|d2DYN6sO^P2_Up2xRRR70+JCrz5vsY4NI7Lrr{=mzq97IJjs zba3+vi-nNqN3*4dW_g#0m9tuLz@+}%pFYeG9sTsL~B4+4YnFObGl0{q2^ws+AI#f+bSb;qSWAwD@%5EjeG_f8qBg~xQ~ly zdIN8sdkK8Clg+7I4j+oCja)JoACeo1=@1=L6hfpS&K^)cvFmn6l6wPiVy3ccG(H)Swj%` z4DZp2`R}78qjtq`bR{(cc^IGhjt+Z(=s~?vogZOf<4gr9(LpEDzoFa9RL4ux%frof z_eDW2@OzU^@dW|~$4XPVMKfk#;~b9#{zEZOWoUKI2w36GAd@(lC2*`TZUskl8`v5H z6VjPujc-=01%C{70PJ%6(;7z)y2~GfP3Jr8Jbf!1gFONc1h>j*%oY9^?4U4wyttXA zIx+m#e+0*toAZJJ3u$>;Y$h{|+Fxl}wQAK)A&~#H30$E7Mx9xnLV3Yz66)w^op*5! zP7JMgecs<(e!a%hayZ`vMRwt+o*6F;@ zuz1LQ#k8q}*mNlgzE5oT5kvoGzV9yJK%?$x z0|p^E4^)gwsV2~@$doEAEI34wI}`H&WU6NRtv`TS&f_LCe~1mqVk`{|mZX3H#R1OD zzJyayrBGsg7zxF{Jb=9i6lOB4HG(w>&{QYN{nYXvwqt$qLE~?(>8AzM1%#6OJcT;^ zW2_JhjAChYjJ<7AXi)(SK6uYCj#A=TW4VAKw8JoFQQ}DB4nIEzYd`lGnSCf${t{a| zOTD&x$uO>){=*_x6DGziYwoZy#}+W3T`-Qddi_)ISssHEH^VH-Xvb#}&Kl9drgvnz zjJ?jFN@L+>)>W2(^*Bopob+q`4?S4?-g6?h9OeFonM_BX+X5?{Wxxc}iXxN{Q-+#|RK>RyxXJOP3;);HbOC^=4dJXsf z5N->*qZ$kw$2!ext>jX6pX)%gztk6Y`O3gDLETkFbWy1WD{v4;_c(!vyEHl8Zgiew zkm3{&;8+Foj1|x6u#@kGW6UPg9c7jWekAJPXOdlM+G#mlLtqkR&4QIrzYU2Yc$rJ<6ZF}MEa-5Ps0V- zF5~cW687w%{a08*-;f~W%qJd@f5WXHbZ+4*!Pl|Wj-ltm#?+<-mMct}WcNif2CGVj z;rX}XyFNzVHxJ`vo??akCPk*25yjT%}NF<@N;tjM)V zCZ$L$sViU~5syickDx$1t@fgHH0~#eeVmy+laliEm6khHBJ7NLRB14*`{u>qh*Gku zoo6Gh>B&4EgB@q^Dw+Q?*6~<*7=#5Z;dUBPe70?=s{r|qlRsNiPd!3@<~9046EIPY z;ZlY!sW?Ju(*m{@U+U&l!ue{a62cK&ff3@CTo<+vCus+2J@~eZ^U?C=o3Y`G)~#EM z7CS41O3XYpQh!hsiG>-Nib>o8pB*@GfKHPBst}~49CR@;yY6@jv3w*ljb|VHODb2CfPUN(s9fiXFmNj5%2I9;(KDzj4VF3_a){e>9o&wdB-ebnK)~(C(_owmDtJBxXlFeXoPdj$; zx(Y9<6m65-d_i4VHlO)~3*}iEHHRzS@fsfM z3g<${&YQo7<}sx@kD)G3`5Phx7yE7X((=T7`P&*^oI5vq_osH~A$xl4{Dde5?kx;P z+cncVAVi&NpxPYWR)S1l2pwtn+Oa!NpiwGiacGu@K^`T>BBQCG9ziaI$^|PiCPpEJ z9K$FSOy#M^=O{*FV`3g3og;++Q?QItl0v1U3Z$g+r2HX>&RQtuEtoQjNYOz|A&jns z9MA)NvSSk=!7}|3pp-rvsm*2SGe%NGII6?pOa7f-$j5HbJ z#hhW$8&q10Vyj)pxR+b75A?Au?5Uf?%b5>8x$4(I1t;gjs854Uyd`1nz*wU3wV^B1 z@eaPVg}i^(sM%kHLT80t3A9|m(Ip$wqAz+#A~=fef6|>h>K~D1Vj%-veG;3g#~CX3 zmDm@v;m1!^2^8L+KCYn(0NOMt&#PTKe4v2g9Nnz*B=t^~Fs4IUVWa&R#E$fm1^3}) zh0#Z#_p*$6;b`RU^iZS^C9FF+Qh!ATyi1CMecvXj@X7!dA&H@9ft3PlP5ssU2ivZY1gXIUE6k_|v=_uREc zC|@5l6@gnrA?bnNk@2ENUlpX;XwsO~{5Qm2#zz zLVQ_YE3k^wXcai91*)th#@Y|*e%J^}&Z)vbhjI~gjvU#o0Ju?y!1&1$Uf_w4F>usclFFqQTU$W$ zp8l4U^%5__xD+NEW?19E62oIc=o{KH@IQI1qylVDX|)I$A!8Ne-UH$RCH6fzlLxgj z$mKGUT=`6LGoSzO1or7jZWAGEQ6WMyWs{=Vd4k_S&l9p&l0sh+@*66=mym`s_5mRo zr|-c>p}?NF2z2Tc7%DsEk0^k~$z3NF$yx45|i>8NiD0#5_C|GMdXMM zD^AE4dMx8<9oFQkZqiUE@o3O1Od#R36R2=iZ^0{Zxn-`LGFJR2`X-UgU0+IAm2&{B zzY2e{JBZ--KwX@ZUUf)r3!Uv;KM*oJH)7a0A;#W>+s zx-~dD490uT7L&mJ_Y8cqS0EHY9SK8Ezw-`s0pP@)Remn8uCGpQLN`3S8r2Wa2V0Dl zJ5gwB9!Jh^{dwjO>hLNo#svp`8ru~#Qpa>3aqJi^YwBELs34=zKNQ;@m*D|vh*ftA(hQo8n$G6?11nbMDS+mb2fRJCy;2J{jvoU-KxUnu#;P3 zoK=I~o!DU7=^1>Vg-su%%H?m%{l`5=V8u{^naVtW2|F-diHCz84Ofu!()$ZJf-e9Y zFg5pxAoMpjR{A(OU%6P_VHj}3q5d!o=xGwo*9mzu(v=Hz;RY2*|NC70zCa?}B#cV` zc>Ts0AI~UA~6dnQxeN?9PF8mj*BEVuJD7Mis{t&bRMrHmeOAi zpQ<4=0GdG4HtYGC$O0{n$D~DztGk|0!`NC?C}Hd2IHy2UZti4WXBn7-6xMh+45LA; zv=ibyMWXam6EJX=^5D$jRauQ^t7e)ZyHzehEwe{CA`(P*Y#HX^(_F#8QI3(c!ZYx3 zflh-5XyrNlWffK}27BY7BRlPcEY~!}xJZB7FqO_9w*~>!U8U2~bQ zU60g0skTYFr=nV4NdBdzbxJQZqIf%{V7~;KHOTfA>E4JsKn`89#9UE3&`Oi_fZNt* zLFqT!$%I#ON|)i?0m%R3O;9d}E@E%=K$n@h)Of8190nlS$AS^14FsgQfWHX_uM+?zW`s+I@CSx3XaNr#>ZIV@_0 zOLHw3HB*Jf8|0@?D@pANssShFRZPr~yY-fmCsWUe>g=%JZ1T447oR1G?ldxl{v^Xi zb~{`zJE?%}7oItPh2x+!?hTSuRs*5Q-UuCpwkk%>w9F49;PKEEZ1OrYSeX{W043;J zXci)tiiLSR!6L$znMwR67nRaLEP=8vpx99bD^Mr(Au{S@OkO8PBQw_{D$?Vz;-R`_ ztriFxbQmpCi_3h#8a|7c#_QoQmJ&ee>N`$>IU5VGM( zi*SL=bwlVXIsb%3XprgU8-c57y)6iC3=@pSXY1K&-Xqc$KO1@}gRByUD{ZKFD2dH$ z2ZSf=$opI%S;3scvdK<)I-H?T6A~`WK-)?x!I+iQ;V{A6a|!u4ht0@8M-%S_rHKq1 z%MXwYX$HuWhU7zItag!P&r@myp~%?!I_Uq3POA)c+*W;|0?pb&teO~Sh*kdx)fUC< zIz}Z&lR>L26$VhSDei%X(pfAj3^dDip~*-Sq!Ixdg@Pq47}`Y-g**ae*2Vxx7)0-K zA#R-^E`WJ`AdSOzR#WVNHXWXn76MNXJehMaj~NEg@;N8X_zEM~Ze`3?-Q#eYvXA25 zr|*Vp>K=rkj&=3nxYB7Ar^SNqz}fBMXrw8e59W5SXoly3z*L9hPF3OR^EC|cZeF|? z#_;)d8T~VX5;CeJ^ha|p;;||iCf?2anc-j$lI^Y$tANxJmbKE`i8qt$_``A%LRK}* zTX$Llc(!wSXiG6Xc0YY&kFXm;lO^v&=WN#t^4gJM@XLX_HmEqK&r z5|2q-2~4}d1>J$6saft{oHGYJ zP^=44EXXN-j$Q-$bUZ#UNtHZG_V}YG_TwwnX{>HX*HE`X=skireNxR0fFDlYpI!0Q zvC(u&V6T9|>Lt3ioc)>1W5sXNp}Oz?RX(icpP#{AV<^fkw2=9(;TDe z3p3JTb$eP7{Li9e@qA5ZG8BtXgkPervChqJ`g4A5d`W$O#mhfqAThty-^p&1+4VP& zOrW89>12zGYI+07bJVkzq_%EJcgq{GV+c#3?lNXjW3U6L*#mp>Ks1RT*_wf{+JsWjE{Hml0v&jwlN^A>iZ zmyDq;n?s;^(DY&HrNCi%6;hN`J5^uz9>i%X%Z7@nv01nBt2lw1{4EM6zF(#ekB#(}$RZDj^__ z#e}twDtt0N$#sleJWwQx#@1w5s@St@i>}ApZLjoPudK>Uw)J=4k@z1zLV?Jh+Dt9L z-|4VoHVA}*d?b07Uj`*{zymFI79QVzuto{=-%COiOS+) z@k5VFPKQPDXjgQj1}RBebLoB6Hd#yMHsv;16TCA*o05kI7@$2)2uyaxH6vEe+a&B& z{q77MkLPI1XO8yXKvebKJzXCVExwP+#n_{Zu1P{{IUV*l`9TMvzrBj)&Ezh0MRTnQ zz~9~{mFE@LxmfYPnRPgiCMkJR(bkBU4REC)`vA zJxugpNHJY@>SiSAUc&sx$tmays9Z4ZISx@Fs0^E2lPx033>$Z{zdoNT4(TvGJLzQA zDpE(K^sDHhIdoW2SmB@ZPqiG?Rhy`f-^$y6>5^D7OA%d}A8)Y{BsqUMJ$FfF3e9`O ztD@jkLQXx0C`QtU^5C0B^e1@>Zy@O}42mJ=IU_Ugy{u-a;&PG&X5Xt@_!BapCf`Df zNvvfa4J){n?j!s6q~h~!+%((&9ZkbA*NP?^fM@Oqa;BGd@ZH7uXnOt5otrznggWnE z(P9mgY-nIE^(&0FgPSh55REPYee>6c6}!Z~q$BJXDxo}y^mpdnIIu(Ti$F^tu{?rM z1c-e?i3`Y05xYaOe`TW@31qB@_57hXBR!QyJR(NJwHgMY9^{^~BO6ZcEV)8Vd0w^_ zOs`PafhR+#>5pu!lnM*@o8W~bKBRIfodv-~BzhFe`7?}JrHFYbdc_!naxWm{WS%KR znB@H!F3$6ZU3HOFQNVF>j9Y3oon&9SLdd3?5Y=0laG&mUnurS@n~C^m6*uZp<0jei zyj?qLYfvHm4_EM0LZ-^5Fw5gWY7gK2L;m3rsu0U;W#z#DZ{j4j=G%}55c40wpO$=c z@4> z`E!J{lff5*DXl`9Vo1PdP8P9-qn#dhGJnoLLhom`wd6{q;l{QK^SL9+3YR*9Pty@S zm-{gLWMyc(^OuH`5#DvtnHN@;XD(cr2nPyWt}J4;UsO{U9S38Dwtb{$;EB*uw7qraQLiQqY_nHe*2mg?mR;JN+sEs?1z^I zHiIqmm#~V2G)BD=$j^$zG0o8SIh z$oX4DJ&sU^WL9mSol;(*FvoK88C;D=XcH*9lH_JCgtqX@wk)PW25qC>Q_eCBNux~d zh@x^qebb@h&wD`=-;#25kCL>ftT^0{64|u*Feh%@bms33$od7Eg-;Uq14^h#!nG;? zT)ZF0#d$yMgkG-XE&Tz*UCAA0`?z9pygy;pFs2FrgnxJVM9-=FU~r4A$Zm&Uv&M1l zu=}}>Tz3cE{<3$-BzM^D{~nWP++nvrRzGaoUsZdUvPBa0!=`UyyuclU+dlzEshUj2 z5+0#465Y}duit+On?zXDT#?1rw3+~yIkSm`4u=Jo%a;8LXq*J*??*4%$l(X8E5}HJ z7NIvBilN5*hNhD!jp6zRAyG9{VukCiOeI(9DxeB2<7pnC!!5diNvRnWBHZpA##QYs zkke1kh$7)q^8q<0%iyh^OyvC?!*>m+X=^w z(dABuWGo;vD~a|AbN!<@k*t}Syq9ryS1CS|0DBovYM}ca5Z3evNtSIsRKEQ4W9aRu7kCYe2RIcRT~w zCCZiZwhvs1@v#p^!W;>nT(JE32yTz(A3$a98_Hj~Z(o;D_>PI}7d!5hvl^WioY#^6 zN+|Hy{SQi@#L(SdJnIRShH`M!3~XfVroigP!?hmK=}PQ(BmIkds71H3QZ7wiq>N#?i#NsWq{b-xS?qOOzsb` zM<*6^SNS_I_Sr^~+-#bP%3y$uQ1R~GyD2#mgUt7 ztlU8_ogHg>gFP6V^XGN%LF#YnJt$3}HT8PgI)|ZNx$F44mql0ZhRNcn15Y{c4HmRC zyCFz9iwzPa<=}O%_u%xQufM+9D`V50od;$n-8##G0CQ%nZixDuzWzEosK|iDH`Ge3 zC`QAIyxD9+&FtGj_p{u=8&cjZ9J0-_?`F6CO}#g?KX_BQL~OB#{aI)vc~X~0IBGlW z-RG-S3sf*HU_+c3NB){eLfIKEtTA69VL>wo7i~Rw8eI7Kr-Ye=++d#Zma@a>w+iEH z3X>0^LJR1zV!0hopU1D<4M@tV4nB(Go4JpgHV6D2g3mJuOl;ceD(WLSzKs}PKYuO- zcX22_&qs4UgrS1h@l}-|W9y(lEFsT7c)m{+=X({5st-Ae87SAi`vS(+W0gd))i^B;r)A=}p0YXBpyfAkbbgbT+IK=!_K<}OZX;V3zDm1?vipF&(jm-Z zeQ^f#o?UJmzWf;saG#^)_9yYU5SSUo)llyC28K%hvlRYV%D~&0Hu{(GnF5_s@Flkx zLMQRpK!C4dP#8(+$YXEdSP*PRCp=O`lLCfcy2GF&obH?SGA{+87gJ;FRapUNjtL4G z<7yliiSZ`oyW5E7UjCk`Tv0I2m7|~VUGBpfhq6NW!eViuqWkH0{u@>eF}w^%nB_(9 zkh>-;_jfs_i#*C+G87%46>MYY6QS9)IT02ZOYXe?_StSQEn|WkGt3S>m*}63pv8Ih-D2Mn|1) zcn@%N8h8^Yu!{A%LJl=yLmqIP*&<2KB79>ciUTG#E96l-qzrj{)8=zMyLT^!Adiw* zi>cSIV1{%f?RP8MER{EEPyWcPFOsq10n^P@)svKWehJCH9 z=JU)q5{H#leX@@D!{T`>Sv!VScsJRSU!Bi(i@`G3s={*4f(bVmjD1G|E~Lo#i{vjE zdkK~{CI8_6saJu)5MjnJI50vbH=UfPHT)J87VtG)V31>*3NusCkYtH(sFSoykSP+(UL9c zY2qZYORhp4COJ{UnsidU?#nQx7zwAGkxh{#%&E3Y!-Qc3T}QR3MDF%%OnHGXJ?p8m zqX#~wnhN}O;J{2rB@6~1g&T%NBg%z8^4>SZiv?UIGS#>#^=)l4j8*DptV&=bp(-DX6Pk$)zE+X?WVWni7DEGf!G4<)-FrW)jFT~8HJLM*AWv|Pa}6j>_V28_)aY$Jup^X~X4v4l*hqF8nW1FuvlFPyH87h3 zmwDZBE@OB6fD|jr;@q7?HOw2Dwpyj!JoGzPMjAw8W3I1pE3W=2Tmp~1|Dpr}Ccqt4 zaEn$zPk9h&0(>R#HZ?nIT;<*gs*-*u^d4JyN?%z6dXH^&Y@CIYi^b>zuhMs&-5oVv z#L!5*7BGl2ro4o~U9>&f`y{>d2o+z;QYuePP%ZQghId#}NC`ceTr(Bc+L{_%Lt196*H%uQtviRPwU{Qc%~^m9Pn4RaSi zUm|8`onbt!q64iN#>tg6*lfetse#ZxMiQ;e1AJz%!}%igU;&wNWYBjT$#b>dN@!y1eAzOuQJbaKQhRkq3QN8Mp;Z)Ex>$ zg|CPwzjiU=ssh#=!76S0_EKAOqx6-i6~;9?rD7~~Sk5Fbgd<+*B;SQHwt)SF$w6@N zCtWdG@DsysY;R$6yPkPonRUSkX&^7ickw*-3MDX4$Bj2+`B$y$WSOR7|#-#)E+k=Z!~}O|F@hR9jkMGgP7+947G(T z0vH}6wcxObscffjr~P5#WLs2$>;F94<++WqcdV6>T2IKM+6CmTeJ zGdDmdiztMEM6nHOh+#AJSgh{X1D$&{Vkk!+%zv^v#{Xpc62++$c6#AvD1||5qJSmZ ze8RIS)JZyQ4OBnMDI2(X6U3xGs-=1eKssy>K(mD;SiynmfOS@4rOr{YsHDWiC8Cj5 z{4Bgk;Aj(gO&FT03R2Y3YSQ@2pHuzBVM+un^WYar#wZR$GfnImWPY=8trQ2=W7t)M z@^u5ViQjBf-~fPEs`_>Ki8ApRq83>6v6B=Lb;9Mvl*-b1O&WXaW@Ep9z@>x+{080m zZam1Xv6~-><1yiXs|1R*nm+wksIObe#(tmcR%2|)H8!27V-2+tTS83AbcQY81-M7V zUd4E0KZL%5H@lOF<)7FsAFK_6aUw(RTrlSD5GOs=L*=#uwo(PaHXATR(iKBil$#o9 zU#i6@rZ6xWbH`)@wtuP}HGI?v>IZqdsm5BTVdI)+W(n?F(&cT$zsTDfb!-SG^K^Mb zVBEc|5&O>~=jc9pIq}X6P^7BRTv~y`N*!2QBe-Jbu0jCi_qqoY!h5zD*90j9i%~I- zU;a{Fl$kM91oLmid)iQ9reXl!KY&%!A7ce(DH^TEUVwh8Zc<|0LR4wkg2}59K$6Ww1;q86hS^&@Tzvd~o&QjToX#dH|{4A#f(*)p~hK<2HsS~CQL0l>SBXUT}AUcI#G$=8ML~L zkL2_DeH0x!sjXa-`8Xc?bS04YpVZbmtkZo4i|#j&1anV2bvmIYgoZ%rV4O2r2>@|B z8-P-xxzAzaD+BvcDPhW?XG zivvzFxw5h$$D1e zUuy&feP`emoUK6_>m{ewqt7Z~$L}egyAU;m;{y z5LTS|*A-t0M8&?&!k1;s;S~cP9y1T}F^AX3LX*t=C93MzT#Y7w(jf|eq7Y-GU~Igq z!mHTa?RR>Olo*#|N+4=3EYb7#t@pT=P6^uEF$TH7eW`Yx)@ zc>b5-ae~rJ3HT-iIv=eRVijHn1olhH%|pJIZ(B*dJVN*a%j~Ae-2(>>T*CN$UMnmO z#V6mZ3&f7;c)8Eir(93XSkkPB$qp|+>(!Vc{_l7AqEu`aN0&@IiD&kOV6?WEFU0wF zWa7cDq`Yv|VeAr`iNk#T3Y2R*zWEVz({5*C{ENHo$YYg<`55eyf>n>*ec%@bTyfEK z@0#KT;JfacF8zu!)K#! zoJGsAhyOLIMWud4yMIN4Cy~3tm(P0 znz}`pe->O`0XO)b4|esOmH^F4mLOQ2mE@!nRgy9cH}spXnA6gns+ zg55IUuSv!?ni^%0zdoCA>#l(HI!Y~?p?9hDWdZBGgAwxe+Oa)JZ2x7>y^{MT( zo(-(}A8!85R`!7y-`WF$m@n8aP4h_r%d$vSSH_gRH{Pd1@bxD`Kfs6QIU46A*he*e zHT2hrqTR%4VMMVa*NNQNT1@T9WRcwoUnOlFzu*ZwA!Ga?;)v!?ReN>B69*#*>AmXtR?9tYTg?EX?QuSNp6r!+;g;NR9BaO( zwjSTJNnFDBz7Xg0Kd8TjZNHHVWIQ*ZaE((=j*LFs?uU87l-9K%)|=( zMQ&=Au)qdy<(aiia5Fh%{=!@u%)qvLw3c`XT<6m;RWv~L%jaE~#Oj}q6uB%OHG{2c zxE7=U5t?m;t=28Gi!;6oxTqf6U+IOzV}A5rR2bRalJEqC;II?f6e*WxETvX$s*II5 zV%%W$|7;n94VdPaCu1MtEX#B`jm7wGI;{=fDcI6K;?u><;>aiF4;I712hH3D5&PKq z-E7?QO-K`##lk5%1DQ~v*%av521k5&~&8G_9OcnsW4%9 zk2WjGJI4xA5DXZ5$}qNkpdAF0B_31mUjl*Qm~Nby_oDbBfmnZQ*}d_dtRvLiRsetN zOCW6Bsb7Em+aN7r&$8_S2&v>?TR}Uj3uc>PYX$FynDGRvwiUos9E}H3+n*PL&^#PU zhc_X$H6*OTTng1tY%#J~VatWK{{Wjxq}*9@Fco=CH>e7!TxP2mpUPC4Ot7O{Hghfc zd0?K2s_Zaqh+1R&#V72I?;_IdFb>l~Hp>I@9C7tUZAx#Gt~#tPPUxh-{9cAv^EB}& zAk>_UMoq$mwbB;j9P$&~=YB;c*5n51T6B}TGx`p>UF11JR83rCOh%x+I z^X)I-%;so$g5@jPt*7p&oEA7xle!DjYRi~k%Xi;hPKe4Fq|5=)WK<4Wicy-7dmS`T zxw}OBHPj|#iAD?!Ch>CCEaqr3PbY?YW&Wte9)7@o?4rBgsfv8&Di?m0{_>~cknGVy zPj)N?;tnkP29=JtF7mK7yoyQEXZ>n}5t?g`eaVN7%_pRq>2FC$3_m^!m}%t)$CCt$ z%a(hOkn8aJ`Mm}+uhVRz^$dz2Bz9;4xPt}HkfsXq{s5D>FwLHzFdJYZ8TRXwc-zL| z^;WtK*dIL23N>M8!rppX0X~&MvSvJehWsXD^=}a4GdN0;mZ#|8NYz0=`&5C|GsqJ7 zhH6|T@_+$c`Y_nvzr!{800U44^XJTMqyu+?gJXBW#r9KmtDcxg4s>c>Mv!>Of<=cP zx*^$^ERUTg#6r=uQRFwzZgyHk`X@40kiJMK#&&N|Nyds1a<5Y!G%WG3j1|ow86Omz zmrRb!80v1WKZyK5fuV`?2mD$1Of1G(6g&K^N~|yFgz3mw#W+hb;!UrICMJ+6vfyik zUDVq*@vQVR6~94#W3Q3oj-%H|L~g3g@1HnnnxwA%xhv$}GO_&Q??sy<60Q`%*-SNH z_WdGJlv&kel938OQuZoE{+7{F@$TyB(&c#Dhro#{t%98JV~@I=r`({TTl~TCcOy%+iOqE?wHBB#3isrgrL|LVZv}$< zX5tL=rSfte^a%#6kor2m+c>f&%K3-lR?mQ+v)CBSODWO3wFJ@k!+18cu1{e$C+kX4 zxqEo~6D<6di22RIcN?0lW3Vs;Qvzd;rDY7hX!)$i2zkaHmo=z#zSCl2 zrQ>6)5ThSRn4pghty2ujSXyi7hb>?*XS^?N!58W~aU)RpeJjM6`L57l0-PW-iW6*L zjAUW6f#Xk(d6u1I5dboT4wZ4uSOYfX1m}Z5W6)DP?IZLT*mDjI$g-|Aq;d_t+6>}? zK^7R;StBHLE3J~Z7OwzjXh>6Q>?91<5SwStaJiTda_}#P&zs3o9vUfZtd)#2PQk+* z2-+=9Vfu3Ww*HOEb%r$XG4ejJm4zX82hZ~x8N_OAhvM^0(ky8Pj=U$yd>^yzma-EnO9k7I*BdOT^dT}9 z4DmqvKqN#0L5}5|m5+y48tjAxIUfLfkU%wPc3g|-Te~4p{{b!8}gUfH~)TzIMy65VwB;;id^97nEll`KFZK1hRH5YBc zLXR!PnBY_5_7(htXwPfrBH^VR2VTGjHwIjl(>|%RexYp4H zq1SIc%KezY`FFkBr$JX%c4ed3E3-;QQ1uJu_b^L=O(b_d+DXWbN;3A6k<$1bIBI^j z451MuV+);(Rjp6kV#c-*z6!~$Cq`(uaPqMP0O9$yqfp_9TiTa*q5MUqrwHz2wt1y?Dv>{yeCOky2JXrD zoZLfLj=un?JBg+oylapi2MbQ~ost%E0NWMP8CFRAMHCxtU=(`s)F?2Fw(;s9R4joS zSnxlkwS<+TbohU|tpuTbUvK}d*Ibe)OIf@d$S7ILq?ApFkee`zd5*b5TqRomE>YAT zCg*1PJZVS8?fYzyy8VvB_DFj2bz124-c)A2Ha&e2-zcuA@W#-~t1#ZZU#_z2vdzxd z;kY68&A2t^yM;5>zR|Md6$KW+PAKh|ij8y9=LguKqD2#7pSN3^=?4t2I*((%Dl22T zSq7w&Pff_Z0{~lX*uH z`#zN}ZOvb04cXw90RPjAQ%Qzr*s!xOye~8!u+)$_dNbk_L9Dq65ttP?mtTebHR09H zgnTMM2z7pw+TCTZdsj%1MHoU(iyCd#7c#tEY`^d<8&1w>hBf?`l6&0+b~`wjBtSPv z>7Kly!em)Lg=!6kp(HG);4HC5X{1o}y zFqBJQKmnX~uj(~X)o;K(ksY`=e1XM=@rEzN`(V#cZJy$U8e(I9J|`r2@M+m36<8jY zpvUV`XC)*UCSueWou1K5s{!4sk)tz0Auyw-h>k(Q$Tbb+Fj0lxV1yL$Q7H;3vJh-R zAO;M)11N+Nfrkg!R2!oKy$rR} zaMi#KsuqL2nPA^2T=|8t!Ew6+fc0!UAg*K7RI1igWLN^w@W3Ly{yGtJm2$WoRD{Oq z0$;}hhj>$5zRg~I?we#7)~93pd=I!6aNmSW;y_H2+hCDTzTb8$z6iZ_pDTUM#NI1{ zI^M&BeE|5_)hqN4nG!QIjA*_yFoC8ZV(QdsVUU)OI5D)1rhp~GFgEfKf+H?%tY1|D zv*I&Sr`48Pf;@|iDLbc3>8@*t1yv7nuukd^+T<_R+kVd&&-JgT4PI%G0o6mzECA z^1KU&)bx68<7wcK4xj!KBAZ1Q2Z0mq7x86y2 z6h%N(no{fvC`xCkQUyVZAkwQK2uhK*RO!98&r|9KJyR$f4B(|r_0en(?A`4M zCP5tRX4AaaFf35s41W-8Q(qOa61S1lBu=YJ=|d4a1n8$MoHky@+9cz=6RYK1KH~xelR1YN~Ct5Co2BO()h1GXf**h~hP15wH-EW`}y>h0$TF(C&`1BT83p zXI?Y$TNz4bDn+-0)c}pR1Jada@}>_v%6|znFsrY01y9grO5h0~zO-sW^qE0LRCl`E z5;M*z7S}Jgx^Tv}xEOs9yXa!%>j1s(HJLF7pJBfAZBs1y8!KaE@v>!A3Xnn?f{Fl_+=lZn>1OHEGaalfd*`lM)xTd6oh1r zqS5kr+M7z1Jv42IE5&?`FsYW~cS;AlAQDF3>%8w2pmc8Ri1}QvR8!SU4On-*^O@!u zxRd%fQ@Y>Nb)O{D9wtk*zB?Vv7Rq&6zJ-P6Og!TfeIjDbVM>KF%-;Z7vD0^qnPYx; zFuWn zao+QI$1FC%aXrhLI6{KA9b?MnWjs>*M_?}|ZWOCoNcCv|mSZyI43g_1q+$@sRPmj8 zjdnzQD`VY_tsD8-f>0IS7%qUBdO!4Q5RKUa7G)|OZ(TaRrQMiM@;aNLOkvQO-chu4 z;D_RLY6p#AFwlrrxA5S@gxjRXLjL~1ER_7r*I)Yy4qv(YLn4zXRfCAvHQvx-$W({b zSsi~|(~mWS5x(M%5_rAM$8LKc3gts8u9LhfQ#LAZ{<2~09459MzQo%rRJT6xALt3~ zpx;A{UAV0^MTW_^sIqFT^-Asj+hQ=>py9%Sm{DJ<6C^Ob@x2Z@;M!O0i#g&EX6<0` zLD%LYw;sMUBu`yxxVk7iN)LObW|a|lX4pjQ8am&~Ez~qmA=YW=6?3mOa^-*P1x6U{ zdl6QR7F=0)^%&?gQn$DF)A^Y15P~ED7#z7<<*_AVm!0w3-Wt0T_m) zNwyQoj2>{JMh`aEpj$KwzzPqIn2L59;L`Y zJ(2}64K-D)N$j6Xemi_0UG#>cd@WxLyMedUxaRJXGv0|eQg3ZaFxX4NFewDA+ zi4)saQ{zazwx;29DDh08|PFumw{Hgo$_8*h0SHoc-|PrD?l|$7(qJ) zk_zE&d(1e0n4ZM>F$0s{_vY=qEHmCG8UKu3?WB4Ac@h^s`_^^iZdC=wkApOl=A*LR zF65j+S8Bd6ckHJWM-3G2xXS3FZWEfooE&3{_nHLH;U@|*SXFho5R8czbw8pyrZCfJ ztndsjoxnD@)E=28-8hPAi7#1NO;?Hq*Z~ZCU|-{!3nH(u_w&?Pl*H1yyD`jao9+)c zMCu(rJmkx8c0&0!@%Ym;RxSY*NMJn`Nt&cz*)?@tViNDTQ#UInkcY88BE=tS=Q-gT z_1Wl2y)l+&9z;nR4Vwx32|X+P0m)a5b(1Ln++b5STlIFD1%_tvva0m~_%}aqIc?^1 z?i(xf@eNZkM^Cu14nQJi%^DFFRYnF&ox?_E-ev{;=3+bswlO9{)s*%UBW87PmNIGi zu1JhU?^61jH~P;aW08qad}gsRae^9?akp);tiVkX!@Ranp%X?Q6mu2^lgYM1r^=<7Uh$Tl%D9L8h2I0-1@NrI-yP~+!Gfpe%`ZEchj#>n)pA#Rz8C7FuoQ| znnCy`KG$IH;_*HLi>asKgP#3E4MgxwzoWrIv3x{_eTf!C_(&XSY*y}BG9xrhwLf@A ze6M#Htn9glVt#Cco5P}j?|+JEA9|fs`s7MX8OKc3J%?;q>kv~#@gxGins<}8K8n6` z7+ycPl%xZ0K69NZz1H&dayN#xAE~E$X0Aa$a%27GjI0joc&5Ot*g0dUPS^<9LBC7q zPSd1xq_mD2%Gl-_&ZAYyL;<6CKZX-cm%eKEJa!U=mth%T+RjP$u?*zqFM|gS9_;@R zVOWGleua%hovaBjEW;Xa^A(JwH!GNdjI9rxkLGI$sg05E#+LN?N$~~^yA2xT4?p$& zFV{eYA}e=#=+3Dwu^b!E{=_(yuQh(loo7>!4dd)3<7R0WnE%g%GupgCN*jjeT_Y8@ z8TVgs@tK5YelQG;6k0aowy{F>hN7r9sj(`nI>mZPbd6@n%mtOt)Lfv}^0-w6zR0~} z?^W^zWKWp!i%jx`KQW?pi~-p2WQ$_H_+AfG6!+aN)0E|ddwdV;(GOe6@d@Ei56>@d zq#N>L$xRgyDLp*$@bG5xr>=_mSknB>>W)*n#XEdv*T>dp67=N_qm+n!XLu=%Q0XF8 zpVtGOiXHu1Iw`br_bO}4)bGqOU#ky z5Q6D0qoXq~zrQV@G5(;_munp`C&A(8t}{Rw_U$ups=3SQZTCjF`aJ!=#_~1z7}vET>fLv$wKMC5iq*)|U^D^c zfSmb(J4H)0P22j48zP&)b6~amOXg97N|Y!eG&l7IdmcgxJN*#m9sCiOp+Gg9nBV_FoIzLnMMFOTV@o(|Gh&#N;`gsXsr>2t z>G0LZGAxaJQy-0U8zHhC$i3zvR-P!!_yLMRqh{DKo!1U=ymHjtidmmMl`Z-N-bbjX zI|`y0##$v8rq`+QprJE=zaN{ZV!QZ*qHjE1A`%|QQ0_8irg}W@WIo?pzPs$bSMbi7 z-sw-}Ha*=B97s-1joe5tNPL}v#Qz#hYCv4+EMkSCDLwTaA$jKD#E|qNRz8N#&j%~5 zyLTBAf<%Z^iKn$e+O1M_wx(w>Oer2m#}t>i2x(1^29lD4jq%nfNx&N<)7syErxA+2 zr>9cxG*@t84>nct;Th2nVwm+78N zu+4Ew7>W6?Fw|G{QI`x1{A)U@&4jD!yX%djP`ap)HyPoQ8^<>P^|>_66kaOaUQ9MFqX3dsN*NjqPL_`$yBNhzwsy^x>z7p@q_hW3E#|A-Za zPzJdQ;>{gv{lZ-Zu`&0(`J&EH+?x$<_nru2haJ}sJ=75ry*S=iBsfAJdZs%dmG~ zEbZpZu@8;+DL%o6uE*y-kD&d1fsq1M@g}|LduPAE%5F!RrD?)@KDKj|p3mqDkr4kZ zW8tA9n*(b$2~~R9c?&+iLKitCRA~C2B3?ocA4a0KSKV|!GzrmQ z+nZ+~z`hmvV3jF)NpmjierXt=h*<89rM%4_mPIbwqn? zy$x_;);8<#E9oA6T1CsmodfkF(CCFZ0C)x6p*)&~l5bmB15<^#t%1k~PEO!SyCE|w zhr&#s_!Ab!xztRS#!-xKhaQD(Gr)?CnFb#AZ(<;J$iq~{4~xg5r>1(&HMOzg#ffQh8h zhS5NPNJTV|^unvJ_TL827zM^#P_s$?p`)`MHTirP-P_N>ns;(!8rNgO{$ONeBwwg2 zxHcU+KyRATMN+0ma>rqZDAD@6uV-R*=Uo)ky5HR|t2hgfk=CU#vxo1zRa~TiWqPNdG3KU)qu7>ok`QGhd81E~xmj zzW7dHo)@uW&_4Cr7oU*mcp7zYmwN7cK7VMa&Q~1qecl%ut)bxqb!G?xN(B32{v$j= zqdb*$1^M|3)nI`YVUI=g&A*7MS*%X-!{2D)7VNcAxN=x{&`UuFDHPC7=#W&d4-_6g zX;+L;;&)rWB+?P$#{9OK<*3r5TMO|e&W+Xo^-YdLw-e}O=NKvT0UAGpL#2P_>pkdK zW;E+3(|LLszFaGo0@|=5@pfiEnB^{Aix6LtdVOH<;1s7qE8{7CK3wiFU@w;#hdC6d zrl=&Hf?a`t&ei0re2+Qbo!m4vGBOcV%2%aOVQ7)Q2PfICyC~Q@z!?Qah>&za?T7vx zesSo~g1RNV{@Z%$`)}1iV6I$^$BY@XaN)hZd;h8-=EBdX^ttGA0?5y`^t=yRfsvf>-uQ zDef&UTSoD?wUFX6moQ~wHMUbap|F@BLR&TmlOl=KSmYcacw=p$tE=DBEX@1ZY_0#0 z@66=P3Y)5Qx%xZ#iSwx?t(>PhwpS(e1?QkCf1J$pw72hgHb9FA8#xD6sA-iw+ z(owhpGC&HPLJN8KunNn(9~*7n%C`=!T3LxN6QG;*3Zj*lEpZd_8qUdXT=W5;pCM&s zec8!6m9Yac+*bEO{?ZTq(TTxux#^7JoVs6_z9@?}lA#T?i0gAZ`AFsV?Q`w$FpE}K zfOz0zgP(GwbeT@G8|qIC({bvvBF%J8uqh5vPe{6SVygD7{)x>N;yMC(?+B-cI}q5* zF^o3_f-`VovorMM_-C*KlexpGb8+%&H>=?>TOZeMnh%qcA#ih-Mia`o>MIYHI!u_^ zqkg>m)HyqD@gzO=f#O6un{OdKmDBc1*B4?5gny=yfFzh@a`r7L(gF zp`L~>Z!G;;0};%iD@VVGU*smetQoD5>XbT_V?yd(>0PA~0+EVh1&k2a5g0_NZa)(` zvD178=`nD>>Obw;shdRz-8Mf}(Zwj{V zjPs3AVZle(FX>38Qz{IS{H7m&3}-CmbRQ|zV8>WypM(`RtqY?Yh#Wa`sf3X}Q>IL5 zFpS+%${IZKD5erotYmgP0=ud>h|imOiI{u3nR!y1UGc_pU%IhrZlag+qrMj)4dXx5 z@;xTNOED)EBD8gLP%mma))#*d2rI&Gvsck)Ielt@24S^;$66(W75*@+H zSS`h>b)r-;nuCUk#%2NL*53!L0alYdcT0hxH8ag4pLS!7F*FQAt`+Vu`FkLZp;_YP zQ{}gb-fzM&j0WVF?Ue+&oI?jw=q_1|gr@ZkLQ3sVqtqpFa4bXJ%c##q**L$`0sDI$ zG}Ls9Ij7@+p)s_A)PhZwq3RFJ#GoMrJpYozX zyQ4J?q>uey?s>Lz;OXONpcF1}7aPjhQFrqL#XnALXnTvX57WE(USaHb=r9bM-Mv8Y zR*X^!`JO307GxEk2Q4pS-^*!MxnY?iD}Ks_W!%W(dV>vHKwVfP#`aiAxiGLXufXHN zFaRImE&2{A%{);o*4uhEOO~*PEbc8Ux5gOx3t~l%d+eME6>N_?87OGaax-R%swX@F<=ka!CHpPEkLu35`$rt%ZOr;t%6X=@gSY<9Hd7jcD z63Gs}lBn57ga~aZ9bw0lufWtzpv9-{sN{5>h96x6%{^;i%NPp<4$`xh{NszC`xaji zWdC>f(YdE4w%+)$YXU}Ix3K-w$1j4tSP|o)DkiDIO?ujmS(Igl;Z|B%P(G{x(y?L9 ztTZ!d$IQHz(fHTxka&fO;fKRSk{ufH(9qdUD~O$+h1DvUkb^XSke!5h&Ao#f-d;`w z5E_6@ruAG@lQ2Ee(6td|F|@EM)XjQUTOWM&@?Yxl2$G>U%DEGJvM8_a_q1|LOJ*H> z%U2bBtEi6j3G0lcZ?j1s&?FHWcA{2xpepbEx*UlI~J0?fP+=d0%iH(XFK-HI66s6~@?ha=1>XdJ*yt zy*Wyh@_mfYT*J+YJ)aLF#pj%(SNuWI7nJ=7#YjQp7E|rL=RBsy3KP=eIK5n4mEyJY z=i_LaIrewKmv9HEmiEGhmEAzEc6Cu7L&8w)frF$ZHm2+DxCy0-@5G8dSfM=hrqe%} zM(S3&98<3%;G9LEbCsK9Z;B+G(x?h{K)g0fq*NpIaJD^~X6vH_JzE4!QkJ!I$=t^F z@oQ7$*49S|EamgUgWPs$=DC_AQL2-B24VND?!M85&39(u@Hd0Tb(SOS^a9$eDG5QJ zihlE{dqfTVc;2~GlSj8Aq05twfnuQ`HFZ_6}evNP=Tw>6@5G976f-^dyD ziSh>qcN`vm{epX~W4Z!kPFhO4bNQqi$vNEu_-`)}!z8oil5ueE5)lhFkvmsLy$)Ti z8%sMkrZ^Z%MaWn{$Nep>l#s8#T^17$Im8}3Ba(cf`i!mg1w>D_<-)nQ0*Ku9$Zdob zA*37DMBVTD`smkR_kBiQ)~r~8Yr7~x2+!1hr48`wXh&XEQ3{7!;ux9Kjqw6&XLhPm z^bMzGHQ+C7bYszb>*RM2a?QG4UsEZU0*kAo`jAng;Oz}#3m4Ub2i>G1 zkT_>cXT_?538@KPaW>CQ7gy*8cDzzLg0|O%1@C9!fiRnjRZ2h0e4*^u%s6LcAY-d# zp^kjOuI}8q6Q>cKXd$zayjB@mocv)TW?-urn!19rv$ilPaA&QRAzzwe8qyo72RrhT z5Z@mtbeBmgFh5p>>1V^ovj-*pF-2b#(+#RfgEY2QjO-7!W9*G-j&K$j$h&>LW zXFO%Sw-Hi7zMsAJ>7p4&%j%`q3>*8-rF#05Mp=S-!F%#tQOhJ_sF_Ql<7rL<6QET) zO7B|*I6|G)wn58vo?d8UVr>msK?5D_->;0XU%&nvP=vOwU*93y4aC|j!F9IM$8Ql+ zYw83s8t}Rzv-rv%x@9NVpMCpgr~cF4vLResd>0ZFls^5>H0c9HL%<`JjpQf3sog@V zJq$Gu)K;z3TmMW9VyUGx5XnIo=%B}*UId4>na+K#pt(@a zdS_%wgp{}F{MUu$+LD+QG5ll9*SRr>Lwts-J&prWwy(gq(+BF|T-Hx-?rNuAS5t21 zw%@{*x{?j z4pEDUY+7dhU`XgIc?+pAr(#ZuRPmhVhqSyeJpF)yxT3t(RUr zyae&)q#D2PU)K*N#*%7DGDUVA76Qe}3!9AzugEC|!I0O5K3UfpYlRQRiuUDp*qXaT z$0?dSL}-SOC0YIGNoi#1Ffu9RS_{?(=^5A1!i=+l(g&Wa$|pQF(OA}x9v1Zh-h}rU zMx)#`MkR~PNlmJUouND2+8}~^zf>~k7J6DS6hNH~&l7IMx*h?)@dP9GR+1q#5mr$e zqEg^Gcnc<6@&R}-LEQ}pl$agYNjFh0r1F>sYSgc-yt7;l7DS{nqk#(yeq&^Wr3U=U zg=IGvSjU|CKH`=Ot7PB^kKuJl$c57`jC6g&9M{%kbKRIl3E7fjjUp5gPO$C@s!1yL z;IMDrL5}kqTPBn2@bJ{T1xavL#Y|rME|kTrUw`c8-Sx|=3PMcQzSz9#cPakyK+c6p zCjI`E*?I6FFw*ww_axhqw zu3o)hCH*P!f1w6yUSF(`ef$=-WBp5^V@`N)FDdmjSL z4lMWR>+8BllOUEmTK8zDB3xC~?2UlB5u!Q+y&sX}9>pW@@;-tM4@r9i&Yb`4{!AOa z${q1WvU7p=(YZ=QDOp0ac~P14!tdmVbZ>3VThTvJ zzrZdED>JHVWDa1I9ty#du=BR=j6T z%;6Xm5#8Lf=mO*6@-AKGT#%3Su7p5GAS@MksQy^$@@m1RWvV!cxUON`is3t`Qbsp*MF`lbJg66LXyLT{Bzhu~Boq6_HR9?FI(I1}G6{L{K>Cj6 zV*H(&9?lj2DdGRV28Les995^1xls~}OHlRz!4p~X$Te)8`w@~7yIEZGTv!gL=#jg! z#Fk_LW9wbLRi?gIlUkDIx7ca7(EAOGd$a0%gRu_oa`s~h+|U3!t|$pCJ#xEZOeGSf z&z3D)rU40mx@8S-9&aan=g!Td)JS1(>af=As;=ctH;;|eu~k%;l1GQ}0_7cWtU6sui|vokG8`P=M_`&-Fx#5K#+k&w&`q}yC!*hgyc_VUs^u*Z*!F;IXl|1`L^#dz7}XXdGa0RSvaCh zUhyuo=W2mHGhX+DfTimOp*=16@;K9ptz~mcZ*OvGf-LsE^tyV`NXVeH$Z|p+{y?Fd zk&FBx!8hm-44i7*xzYu+g2rXKv1j$_K}yci<}FVzsRA<(Jji#$ZdYNTm4yKJw+6#* zOQro*9zFdxG(mUw?S#Yc{D~I}$u;#NJ+Jzr52nserN&z2ggxXrdTXdZ8K;lYLqiHW z36Gb5-mm8Ugj63BPGc1V)m){%yvAZK++)#oTsJ-qGf0bGBEuPr>LY=@jpT)S2w4eP zB)YMLZD6-J}Dxy%oqV1OUnGNqt3D( zVSQC)*$M0i#`3AK&sb{M0d_^%S7qlDeVe5Q&Q2uDel}4nFWHg)Ay=IBU0zp|P4sSY z4c0J;PSikwGP(@*a*WYa^5fo5%R5Jd?uy|Y_?&XCghn!}`OJzhh zVquGqL+9h_c3?u7J8JykZqEZgz6t1HScwc$f=`40PitU?XZGaDOdtx+zlEKYDpTb8fq z1=rSULikzF`$_Xn*jg`j*ZH>snwpc4M#yosI1(>DVbY{$xRe~U8KBsEe0%(22dfC{ zWUMj-hUpeI2ws5?Qhq{l6DxcL#t584S*U4k!v&D{V}zQSjTL~;nry{>P^f7;aVVha zby*h+lU3%qG0*Hl8714b1{T(#h+s`o0*?#d_ZA+4IQtnZ_QJ$ejQhhPH9V#@98ajEe0p5p( zc0}=-@mGWXq!QN=EiXh6Gq)VC@4o$o*s@iEMKnHHQRXlgRIavlri$4rzIx@IXiJD0 z?8NZ3oX z$Z^K_skz8m1*ci_fiVfgTpQY=to?H%v?^^Mj?tGrJRM)G*ck6?pFq_M3d}PVtGM6w$QUL7BU6c<}H$Ri(AZ z#$)cL$(59GP&B5-*u`EK+}JZIKpw6s(~>DHhKKFg@;VeALl|?vX@LP;Mjm>D?NTXq zcoC+sd(Gscc*A)k_4}D|2t;Q!8@9|a)}~BTE{TaQpb*z0ad-AhNwHIG0VgLMUb_a9 zEN90$2f!UJ1G(Rs8z9e^YhVJ4p7p7n>`GKi>R-j|V1*-h(~|6fhq2us+5z+0wW1wd zu)Ci#2b=t4U2`w?XyhJ}2Lk8@O>N9T8>#34cljS-_;~Gi*w>N{bH|T@L z%FNQ|I7R7XB}Dk@gI;QgjKEmg)el*5pS^GIt#UJ%w_ko%;&~eUU$23@Z;yqW${&UYCOe(YWX?NW(B-0r^@Fb7=T>{k z57)0B28md(!@CIBjc+TwP#UrG19Qsdneyh#Yrn2AG4{1Mbo3=Z#6zQ>_l2CE3iIOW zew9pwNM&vtXTEht_WH}U{piTW^K+HL_s8G;xTczXD0_5ybQ%@-9vVIbVA;rc{P`9FU*)C{%u=?XyPfSr#cP$r2 zx=L(IC_6dj$W1;*I8#-^4w^%U%QK*_l(n>VPten+*8fzp<6TNeN^B&P^){3mOq*!F z2po!~J-npqRhs0JX~d*MPBE>*awuh~O~vTG&~KDQ`2wP+2POwK-9zR-VLMYL>>`CJ zsINt0O1{wVlwOvr(gtf@p}{DA7J z2UL(_=jCy>6>|{Bs5A!fCQ_0^@4AX%qUl~bk8|Z4cw@?!cbA~O*1c=#%R&vkP-d~i zXbY~|e(Tz{lD9oBeaU4^waNt zXt>lK-63Al)9netBWWq|5qkQUHlP&*ze`P2!zx}csy$@jomHxX5PFwEimh+b2fZ|M z$Z(gM%U7&AP?KHrg#=HP7~G?z9y22Z7Wv5RcQD2Bo+L9B#9^Ym9iknJFeT#)2FU(BVLv4ajx>EiL` zzo$eu4ssJo5qlE6mDX1;~t3nV!^)peHSXtpW9#2DMa zzh9@rJruLB^KU!p+@JL?_S;vh7^906f?eo6erLB`V>mOB`ms2VPEc~mX+Oc?#f&+- zZ)Z(ZNTgJUVNt^W2%Dhidmbwm64fme84tFh&ayfD5QbBmIl>O_o5@&K;RrjtMMojY z&m9DZ_e(&@?>Gn!?_gjj9AT#yxoPL-fki6y4_LAewnNTz9R6Xz+Bw1wZd@;C?%FUNcWl!MN_zz*u#B`NCD;D1m9Urgo>h6qlzb;aI-=U}CmHgCM=`?w%mnTgqj#QDo4#22SS-*_7e)$-bj-76AG6bBjX8jbM1}y6F$HS z3LcQMT%swy`7|jC)?bB7Bs=(?K@&ASZmm01cYamS4y=aqP1o6JS=X;oBjrSrFSK2= zGXfEMLIMl*MHD;*uF<6K=>(E507C@251NoIe2)FGac}$V8vAdlw54(iI7<8aiIy+p zk_QdA4|}#`7keN2iqe_`vJdsSIWIiW8?;Q2wpLBOtFdH z^rdBb(mw|?z#lzVcI-HubRPSv@MdS>vV_-RtTVZugEb2XaCZ-2RpP_J2d*qJleZ$I z?>+U$F_kM9BL^8jy+qmkWhK43;&At8UDEVK5a_$hwhbC@>thn_Uw^OJ9T*4I|8gs3!!x8#&=`dNNM$xoP1 zO+D7OCbV-gj(3UIUFA4R=axnzdKxxa#ALIrr}z2#k6?@}4`mT6y1aLmpb!pM7$rj7 zeDeDs<=U%QxSi#oIfF1%+0d_}H=hrfm12yS%E;3%it??dcScKjS;3-fao_Wl5J~s4 z9{ZfvmzwW0G|DIGKBbm<3r(IFuI4Kml{O>aeKj_c&M14G9xbFOX9k1LJVw(TbL;*{ zrh@urD?h>EOV{K2{y`c|og>;~?;Y(??doc=VMAEKqUY!_q2=Y3(cy9$o_rMMs=rDn zR!)iWXK31{O@Jf66cN(<9=*TfYplejw2cI1j-%V_gI4|yP01`_6)EM9ygK&rxt81F z*?vJthVAs8TeeB}amwakQj8vLA|+@BUpc+IPoiu;-;VeOZtjF;loJX}CoS~_b~40H zMZC`A--9?jwF|)H1N@$daN2KJ>B!2>r=3xk$l&u@Bz%J51i#A{v-73j^ z_gM0n%p`=lceCe=W*2KA*DwWEm0dFnxL$$vOs)DtllJo>Df_Fe{6v3av6e~IA?^k{ z@65G*`#xWbr9CHe+2JXcQp*lHuel=(&B&OLH<)f{M93A!Z&B$=#cBr$WUEHoiiAoh zB%zyDyR&Sm8o-jSv^1{FQ@R>P4<-HIMy#-ghAWlnkX<%mUgu7G-Vt-E=;>a=PzmY{kq)_+aOObZ>-= zGU%?|{2BcIx|7B912g9ayDEkj-0Hrue|*CXF0QA9N7g`=V!dXt6(eNvh4Zu?ahsyb z-ACbM8No1CW%Mfcbjd1=m7K#E{$idU)YZ;_=hT7u7Pb2>da zTyy7&68sxUSz1rRv6qpPe(z@?xIhH+6O`=U@-5)N=%6 z&G8-yD%9*Aqx+;TjJ!;bf6!*n8CdoE!?j)(x&Wx;D82ZJJFhYmQ|OtA6YEM@xg$QM zC~DvX8orqRBu?#G(Q+^2OLVY%)m^d851QRLY=qX3lU$v`yK&C9K!S2C#(YJu`kVRE zC>g^to*NLMu(ZjzA&Erqfc7Dh;+QPfor3iNh(u-X0h2n9GS^u|)gm*o;DlXnE|r9g zMSSz#l4i&dnPx2oGmN{IASOh}QFYw7!YC}??WS@$TKRTnyI}09Gpe|#7NM0b5-MNg*?7{2&dsz%A1GVosw`J$(VmGl(XtIw~pFKOz{m&EpBvlq8Iwg`fc+g&|2e zWug|OOq4@BRYiuJyp1Ta1{PI`d5J2Fr^pMaz<7!cIJV7Q79UB$ha%c+7C%qJa$vJO zV3X^`rXY^%*1Z^qWHw&%2K?c{ZL{;SuO`*}3A0K5s|_~rlYG7g+kl3Jh4~0iJyH#1 zYyHWjgtMw%{^f~Bc=t*pW%(x8y5nAPD!QLEGRv`_i&F`g`}ND?Y7HkNt)yittz({5 zP|(v#QpwC<&}>R?bXAH`B>V!M^Q?-Akk`}bOsQzTh}|gVeTUMO-wV~*rb#7~V6z1% zCB3*nDY<1XKM7(A)3v<8ZK+3xWnM^G3q_8&x4=cPPVbU@$XB;p24_Wfik*+4*bjId z$fmCD6if2*)6}2c31W@x3K~CgqSRr!lXyZY0U8B7AvMCUMIITbnB>B))kJ&?5meDp zzlOIgerSc3Od%%MzI1p1KF2WqsS4zKI!E^$^4!%AMc+uJ>ftSBEnwSjXqUQ*>4J={ zxA2#S(U>2478P@?wjSiu8;AUP=q6U5?5gko-~xY10?RCukfX|6O!r;?z~+4qsYQ(Q zwGLT2Po)tyhV3V*x>xY>i5bck!sdN?{eN5o+1AdAzuH-mY2d5VFY(n7$?mp33)W*= zPW~zas$B#SJDa1@065=h&>nUz+7_36;v3xTFy5F=bxAR9fA}+@EH(Hn$SW{$x)9g- z{&$l{TEy7p=hKlo>j2FS64(O&W~_FXo;!iC1;GMDf?#pdJmL)tW}guuoF%dm9I3DX zK>NrLjB<4D+&M!Vs$F*xfLuRzvze6N7+a@-o=;+tu7Qje#Tp^(764<(=!( zYp_!+NvCAMdf@jpT>nOL^E36OXYadnIm0aP| z>~b*@bc}V9075=K3@a0aG`W1VjEpr&WB0;fb1cebt29rewI)}FeT?-I*>JWYyH^V< zqJCv;w0Ltl`PXC2oiqt2L$LF;gl7ITkQ`1JB33pJIP{_ieivHqfZV2g(|{@2++ud# za;5v+U_Yq@PvA8eOVNyr%bmj>#f;*;*`cpc7P(>ZVwIB_n`Ot7u9%@*rhDfnvlCBz zw-d^!RAc@i&X_6d4~f3kEXtaJ63ILidd0R@=f-+P-FeMTwJ6(fhYPQ#KVFt5?&${` zU3oj|OWQA92QZi7$&S%Fj>;M&8wy>i-Gf8wVops{#$wwU?O~@OUHKG=*tz*4^f*mf zxGyAlLgynljc(>Ah-bRoFiE1zt*nQxuPbEY2&^#rJ3>#Qx76hmV>S031S4ODIj`!D zP#ut=K6$TP6vt=>Hxua`39aPUVJfUl6pT~M2(9Wl;c8to;l%2c5m-t_4G2J@tB9=r z<|Jy&5D}8;HyDI42e;H%FJXL7Wm}Wx!kR&O8=i$@4Lp*W9@BtG1rFsLPmM3Q$L9t@ z*}B{uaKN`o&?mz@20d*;)8P~A1!at@gG3r^NyN@jp&uxC*)nd)3zRU}myzk=w_Tr< z93M}Ohr>mPgzSgX`g?46r4QefAVR(e8NA1*m3Bd-%$V4?F=NVU$A)f>$BdHoh0)QT zxLmFm5G!0}p5wztsu-y@O$GU6_g^Ue(^VaxQhKyocG62WH_9XC=}{50cO}o!I7l%{ zx0fcn*B6*E)3-Eew33IA!IW-wOJ-)|7cjx}vW9Igwx7PNks5$$Ed^J=ehTcxSF4yZ z158GWmZGM}aNVGe(aP9OBA4;ncMet*a*x4{`N znr%69bM;0R*agrg;qH7%zQ7My)v(nEG*it+=D+~7MhN=>FX>2M27>2#tgVkIE|Ba% z&W*^esT~rp9RaCrn2^Z{nD7>r4>oTR=*V=I#?wRZ`@QZnnnx#T+8sOTf6p~{$-$GB zLgg;2BZ|NL@`6jKAMRF5w}Y1qk}Y?O!$qBsX@>94vVQ&QXU;6yhY1RU!J}d7t{QK2 z>Id1RT+CoV^<HgAm_)ivy3U;K_0g;ipbQX-=McRrczH6@*!h!zpBlc zHBMj$iiM^|PYp-=;D@TqLTHgX@ql+J_<2YB`kxnRDGSgWYUG7xx zR&CR!%>?|n#eW<0Joz1rPH*{Wxxs<=Ps^zpMcx;P0A|1N3_R4kW5 zi~@a=X{;lr)4LwU|Hw)3`3VDfnBlCQhI8k>P@#hL7GZh5tSItD zh32Z2FCcn8qMltM#TRN6ZJaOR3kjYOn9KiKp!foQ&6SVj^T5dLarOFIy6e#_gv4uP%c)qPs?a4Jmlmi0a~okfw1A_cu)ButEj!0U30^QrIBa z1V!0y6&uzDT?5~p;mYm}C-wb~x|Z*oCj>)*LjnTVxC|k3>^eJEfOLT7jRz!mjrOkz zebc2;Pa`oX3d&V%8j=@mdHnCj4e$k zgMIFB`aNt4Zb9F${Lem?3fnDc%+uXJKCa{D#<~M353yjX4 zcIXriW@Aihcr#<+5?mU;+;C=QGPlO^rOtV?V&%ngbE3~q(SL1zmnHY`2L<06#!dB9ag7NR zCg7N@187{S=O^K%=eCM@!)pCo`-$x;gRNo*w#z1)*ZNy=OcT8^Zd@3q%VRzlFkheu z@{{$xHVAP;ee@M6vQZ&sS!@O8D8wua%2Dm6=9n!UY=ZlkW@jv32jd=3tMxPH=A(DT z=-v?a&9P&>l(KmR^wY;w!Yo+%%7W&~1W9+4W4aP5zJ{`-7nKmHX&8!)PF7rClKAUS z<5OMT`=k8Re0Avx;l*{9ZzvXkI>Sys+TA10u)|;IK4afH!VYg?EJ=-2j{!+bw61*} zaUI?uC}KCN1Utk*11hiPvpHYD(!FS@zwu%@ujBA^jWql$ebXo~u246k$ z#JW=Twx_JWySu)t0$%xGqa^~cEdrK49ca?+ zE@M0Gkn>t^y1C*z?F+ZyGX!VDS?<_)Nsb(d71nSUp!;X+ZhL2fUs@~3Csj>Xs_B(G zjBfCMy?HP{0_Qb796IRQQGaj1=WCFlPetoEm8cAt=h!KwV)t1NX>`7Mud(Qcnvcj? z;(v{QUcCFgwhABIBSv}$eK+;o3T!*5yw}ld%&5qd2n~>DCeXF*<|V8&Zr_2c!q|dj z$71Mr0DTn0UytPZJOSH{XY5yOJZlrp9`4-7j>kIX2iS;0W*_5IDNQnLVG-u%Z81XB zSe>3!jA2n2J(NiktT2sbY)3F@Z+^4YPI=g6J1<r9b?3g2Yc6Y<+LIqFTiUH(85HNK`>)qP@3Fjn%;Nb&cz$NKQ0b4xuxuT5 zZCMX~4-*Yvkt)Y7xmR9(1A+HA43}W2uuv-fC$Q%Pm403fBmNLSi{QCf6MHC>1n|X1 zp9pM4u_l&YDNv^3awKe+2dCM1PE3Vh?dJyTR2K|q?tEiI=J9pr0LT8h;r|{2p!+nS zf&sH}iJzI)&BtbYuxLo7u;OqP{)E*{fVrg37`8zg0I;Fm~Pa#2<@6TQWI8*Mdt8dpVGVHfq#``mr`C zCKNH;n^MRdulv%hX+DL!Z}|ugPnATZcfwV2D+Vg#Ye(FtUQG>T?3}Z+YjB(+Z|Q0i z9wa2PBsN*(%g|;oL<6teE@A-?+~SuG8Z@YBo;>vhMQ6rl%dU7ftL3aFS6Fg#Q zr|FH{Nj*`NGBsx}Q+LK?KH$qM&g`Dj)<3%QR?TW|w8)e+=rKv#2Z@Gv8w?E%&Q}v( zI7~(*?fRunn~H7PKyvs{sOK`BzOf~i36AsAgg6L13d1>TYUK?M!POfSdRaFO4cnN< zG0m=;hR$4M0;arK#Dod0GCNC{yXNv`ru|5(Zgx3_c{R6LG`rr6T|Um$mfcT-{yy%x z!iB#chq?{3Q{~+W{v*133H6Wor=s~YNcy#ne`WdbGrl>N8pFP6Y}cp7np<@vb~aD1 zRt*FeDH1jTw!UH;xizsxe2;Fb3j}uh=NdI?v{Wqp39R~|IsQbPak_dgtCvyu3JShz zL*+1i;cg|Zh=cE`UtJ8D!>D#oE6S)=(IZh{u7jW?8^2#&~{-ct7j zlqLB8li1~kC!Z$&44ZXl#}e{9rCY=?sxOh?pY?}d6XfV*4%&k z{Vd`+H5Tw4OVbUaaNMA#0Sy?wlO4{ZP7(UUcufQO!fkd4x=f`T0xhi)z%GkBESigT zA=O{^hJ2I2-Y3DB|2teX zLB@V$@qs+gg&$mH;Zh6Rilx0wT6x%7jGpF6WhoeeGzW8`p8Z`(!blsoVGWn~lm2k^ z#iT&A$+Wq%%*4ZG7PFZH$^@vOr?mfh4TM(dFr#M`<*0PP6>gK8y3eo-EenGk{Le!@ zE5xkJUWtPqHfs8dFTOZ@y7WOcp)9J0`a>$KvpEelCM;EpdH6#!w5BP@02VdCA5rjy zUeOt}K(qsFMHMW=Rl4VReSELJ15$52jA*RTji-x!>9%Wb=aHoYqwDQ}bX6Pe$b#op z>=dI16lGa?yT^JM-}qIfP8fkFcJ)AODGw`{8IMenoHFjeo0$99E!{T2VqDEPRDFAl z-s*B}o4eJ*)Yzwto+Im21}5|G!wQ+tlvshiFlq^OFpvPX@XC!ISBO+XDk8po#(1qW3aM{5jjz$(M5=3@`Eew0`1Ocl0+UUA^SJe9C(Z zkKmg>wam5qABKoCReHj4bdj0y z@04!O?JI)iiKDx?3asHh8ZARGWlS-U4oaXY&WT-%uikySFBd`UI!a2A2S-pkxn+VU zN;Ndf_zTQ$Xbtp5VR=?%MT#JGz@14WCOcx@i@aX!kZ{e~AH5ExwFRO#FdK^i>Rh8= zsxavPIt|xMu-~C43PRJRVk2?%LW0sP2V&!7NAzX>kJXt#TRhi+%6`Qe>)-D$rX5=1 zwK3u}+9yIVKy+&>t?DSNx9P|auIxYS;!~AgdAjaGaEOFuEPNX@-cc zF^Bi2Cbt9BIG};5Kz!jclgi<6u3uGj(CX=r^a@38y2VCK&~@l?n}K`NMvu zDhNqctc&@Nrw6@o$D>reVI3#d>ChjQcTnL5pnVEClaLbE0VT9iu?0^66xU7#alw`z zuCIiu@Dyh&p@JM*mrI2O^OGSSx>S*7)Bzk)7LnxUiu;8;R;{lj>suLq0<;Elciyki zFn16H=G=fDR3~}f42Or(Z=EILxh)}iFp4mpup9#8m`fqKw|F6bUc1j_d5AFuH#ugx zeffO|AsL~vNR7nOA=8~KmEM67r0H`fC53W3A9D6PdHOwFt3w!-3>`YOc%U=6r~dz_ z2JY6o|>5jpWJBd!w@pYzDmtSqH_1E>s_yAwiB-t2~Yc4^`8}|c7!-QAN zpGJKtqfMU~95m7@a;$UqBEOjR*+hT{$LLm!S5VhmghCQhmt)*{ z=wE!~<#Z+=>gDK^+ODs`a1TAFQ)n+qp1VFc34YXnf^?UR%5nle3UkTO_Nm zyZ}(P?uWMc51LXtos{H9cG6i zBwcil;KD;F-C0;sT|AL3^t8m_OS)#N!fvz|UBNXMYM0{#-3&FZ(oKT(PbB~%L^SQ7 z@CZGl>ubs0YmIeDKJN7F{GtEN#*S8q?Ssr01wV^jYJI}hN|xL2Y(35DO5bp7w}uT@ ztb=$nURQr*uh73kG+?1PN_o4ja7{4`IIa|avf`*XdQK^Yy|MvnmV>V{1eXbx1aXmbp5dPqpYU(lbYZ^6ff z6J$}b6n!vvv)Qwc3zFDK-b>bloAr$1gD$-k-QRb0T}*N!|Nd~uPI)1Y|DN8|ji(W1 z5o)ixKdRv4SV@863zUEf`t`0)#e@S#f$e)=Ou_RCe^#0gB@EEtvRvThhB%d`9&VE_ z@eLglGVujMZ)4q^Yev|D_ae6wzLUTE-#;^(R zDw8zzOKL??@Edp*@;U9^L^J5`c6bq$Py<-+4V9m^_n1&EV zyw1T_k3zlhEIvQm`LPVKT)lM12I#R8{*OM;Y{-4kJfRf{fk5PSXTK{F>@Otur3(sb zI}Ib1EL>Ypc*r+0 z`$A3+KM^IVwv*!b^UrLRKj`!oLU*LG&zk|?5}hJT6c%%SKv(hVD_lk1`PESXAPoXE zO#KShg-TUp*CGqF;mI1w{2iotQk~gLNA(ylZ-G~A8i;; zIckXEf6On%CQbBl!PCqz>|mC|(v)vrKlZi}FRsP-!jF06eNJ2GHaksf2m%@DmUPG` zpwj+AMRZR}^Dh}jZTMY|&*&{bM5tqMkm-AazTuBaJm-CirN;Z{`3eq*jP+UFn0(Jz zCP-N%@5!j{=)kgcI76db%a6A3=v(WSFFS#4sV-G4(yu;ckrCfdry_F};NR@;cHj5h zT(>cX39poZAJC7&u}Pqw5Z4hX6sgCmdLDtXyCodS2;Qpfln{0XsZ33%(~|&Lo%G^ARQI}tD*&5D#pYLl+h&5;hHX}1OF8x_3sbO>QG-DJ`;O{e3km<2 zkY{hLSFv@E$ATMml9g}G#e#?pDGHr&!&_`srAo~eh8wf4<_7a%%95KUlU%8bENait zp}#ZH`m7ZzYen9wcJ(ZhnEb&p?EOH^JDUCItx}~l3ZZTZ^F#cJh`wRkL)Qse$ejJG z$hYaCW-Nxm_@*1`krPrV9;;7M%;0IrTLT}LN!P2x)RBMg-o3k@r1@zb!~XEF)Kh;? z-Z6XFFrmgWuZo$uYI0d+UsW}Ze<^BLi?vh(pa$-KxM^q;4IEtL-9GzHzoJ1wEa{~TEvVQ($gd4nYH7; z#i%lQ`>X1#NWhsp!mHwpwo|)Umb^ii_@reg3;eB9!tIw$LP*vt>;;)-hx4)1f=qAI z`8A(uK|cG7xfIh<`Pf(zFbw9%*1BsGe3dW2GXE-eyPPvUE6wmTY;BF8bgx{$B^N65 z9>%(x(o)A%mzJz5o97jzqV5)uQcd6L^!xnbLs3Jb4{a@5TpIWh64jIE^mgS@d_*xm?xypdtQM{4M+`o7oK=zZ5$ZRh`g*n11W zERL;zcnN_JAZUV1fDqiFIK_%f@m{n@(c%=B6t_^^DOw~zDQ?Bx-64ShA@24hJM(;J zcAwpynVsc-?|r}by|*Ppn>}-WbI#7pGdps|PSH~j8dH6G#h@N6$MC`IU;)F&QZFqp zYml0!#1>@(>%J`SkmWe;Ta;2&56BVQt!DBdoE`tbg*Lnx3CtuaToK>Za@+{-psM4m zCZ5iC^Rk^z|3!(Y50ehP-Zz`In>f-EsW#)VF52W=qH*NHMvaDiyk@R^8soFdY}_nt zwv87L*{kSUiieqWN@ED-@^cbyXvSK{<(7&a#ds0eO?c;WZQaIbe7~Upg8R215t~J$ z9I5g~g#Fu!S`d%*(0K{iz`qCl>HEIK0YeJZHQyj6rJsv!CrUt=413@MaG)09$F^vTVQYFEU(OH`@qF?1O$|eK)$Iv?cjF@$Wn9`8c z)jmdzq#uc;5l{&Pp&{YK!K4PG65zsP{QUfUYeRHDGnY`CS4q8`&oK&;d`+)2P(SNA zh{Azv>I@<1@_sfd!VZ`s-qlWJEv*n}U+buFA^)@9x={-(Bd`(m{0wH@0&a}8Y;mPe zmn>D*x6il4mRR4^Bz?v>DqXtAb(V}b6piXIBg(^(q1QQv z;Vl{?YI0P3A+BQtWU0)LQodq2hR+>YTcO=in5PkvrQA`3^^eB}{rmYcc~@Aze1W%l zNb1&R{}q_?2Y013o9vR?VCAHo3=USWMNFi@?_dqmo6VgFtH!{y@_Txaw;Vld1j~XP zZX0?}bzv6I%B}(Mghk<&ebkI+LMb^)2*^f=ua*t`&o_Atk4hD&S+iz2AZMri#zIcL z_LD^(v0J-zi(76)83MWeKmf(b$&blU)^KF;$AgRer(A@kfaEYf+J&Oj1theKlBLP( zXbeA5dTg1GB(KQqbyrTkPW4Cd6|%m)!42CWA~7!nZ8a8nVc2<8e0{`A$LwM4^XRRf zj?S>1JVm~)_pzLEk8YyBv)eOtL-~nx4n^cFnVIsXkyH+3D^;r9idRoB&=aTx&eqoF zq;?Tb1TzG5s!hy;$Y#5_V)5b>ObVOs;OZd%F@u^a{+x+%Obt|h|8T9?xnIQVbs2_m zZX1eclj31^H7~$x&y_R-z}b$IV3_cT{@%23F1vf=&hT{{jPO(#T4>XAF1}{s zX^hEur$+KmmkZq3DQA8?NHcE6F5Tuf8rJAqa<6onhdeXlkB)|~{44&*Kj$a-H&Tmr z+#HR4d3!;(L@cMIq`;AXbNKmbav*{-Fgz@5k-9v=H@@g2|7u_Lgk0Sk3x7=R47tv; z9X1aTC8*`NDTtLDGg4HWF08d=bA8Mirq?}B zqvaP8lntsHi+vW}DmQ02lrR0on_K~|Z=jo!xmCZvopH>bXBm}phx?9JV)^;r9J8^t+=n!Rz#6oGtvzA2-I#dR zo5f)95>80ClaL@^t_O`S zYdfl|;D{QpURB~)n%8M<6xC#DT=m(_dI4mX8_$gKJS!#ju%2mzN^lPs`pfcW^Z7CN zcRmFLiOw+&7BsvMz)=m&{g|B?582qI#U7X=<0J<>KkxWP7UCGDjOLpd<)c-N8P?%w z7}97iI8V!f|KBRAI9-cVefF$W3I8^tRe(9&vgvb~AM)&VKuagRqFN`!6iYuGQ z4y3ZKjBBQ0vo6wgbitBO9@Nkv$=_Eevv`h+jO$M|k^cKt%%$h*0DNFbT|FcaSL_eA zZ{P78+m5X^S-rEK4h*_>eZ_DuT0p0BDRqSIO(Xub9B?@mBhFV)(;L5`em++35`36t z7`}n>BR9jxQme4#0I}ZP$81=`=laH8%kZ((Abd_~Tv)E+YZQ$geRnf>6#s6KHm5P6 z!Ntr13db!lTK^2VARfNE z9&8W(XSC|Y(B+`A2U;%&GX?%jGrY?2-DD*>UR}B@I2()ZEZ~2u922g@sHf@5^5Y^* z(x(T*E}^(HXU_a^_DquOsNftSki5KXS;t88Ph*!2BTqcA0LaAC7&ADX8Xun3LzAcm zfdXJBOYj@hVCO5fpCyIApc)lLD$^9$ZEi;iE6*nx6}f`s@p0U?3yI{QjuA2n_n$uf z96<6_rVo}U!m+_-k$mx!%pPjHUk)4ustc|@*VMU#jG{EVGw`OM!z7BGuk9l5t`LE) zHz9=LkPHo6_8oqX4$){?jyS7f339K>Gww~-#wgAMI!@PH!^yH7&Y8?KG0CND*`m7V zOC>x;uLU=%j3E8n)$2~=xNSTLC$K)b1@3K}9W~&_{W| zARPm&jt$B(`zZ=7!iOjR21}m6X{Ex0gtz06TayPa!2-!LakCU{J!I>(c^=#FdC?mc z-ayOS=cJw}zO*LSQKu9RoHg4)gQTZbbyAYbJY~*|ePT3+Wd;VI$FxNO($l7 zS*Kk72qjgu%Ll~Q^HP>So{)&U?nbw@+7i5q%l#mr6d`;N*-gZ_vY(Jr?RHK?cew6| zw`LEv6XH4}_9H^U&&V;k_|D|X-O4eTYpq)OrQ8k9qDxG}L4`SF+zv`{6>@;>l~s>5 zZ&Y$OKDg#TY*nvF(!kWCT*5RVNqUoLH3*laFf_slm`43?=Rl!G6C1-jistin=3mt& zNlVro?6?+jY`{x~V`!sEmGwQn}CS9NAiqtM&hOiDROA_vZjyA5u*O| zwb%B&UR#kCU}%qjoSA3Y(UyJ}-kL-dI1i27#3+(3w9X6dX^|357Dk0HQd(96UlSb{ z^yWrKA-K`=(l zGXM3Sz81gx0eqP1?9#7tS)by|n_A&k!)g%5V=Rgbb+V10_A1MpAwfsy0W)zTY_N|Pc`|1RAB1eD2(GSwPC+Zr@467(2qDJ zp4@O4$c~O{ll;Z2>q^bKuEyLo^l%Pr*z$skF1V0!2lL9~Saw*BoM5tHJcF&qA@G4` zY}&NtS^Vx4o821{aL@&RG9?$+o<%@K#kptj3w&zRTDF~Hl&5+A!#U9Kk{!=%szjn- z%U)yX*koFcUPjza4GX^&78Z+90Bz>3ilQqP$mr!Y9bW_)oh`(+w}Q?U>GVH!}c$me`#Py_2mzBY0|W2#TDnCFaXmqK%F zOXxs(8M1%EI>t|VvL)ZPG${TQVp(TV8va{I_i@)g^cP2_@eQb&QjUr&Q(m$7&tYdU zHVwoi%PIUSoz5>+e0sSib%f-vs8GN^%6h!^?OXsR=aBPp0P1 zz016aykHED7)P4SdzVe~iT&{zwH)2U{P;)8AHPO<&4`pa<_7oASTc@wj!CFuii$K4 zCC)0>`n}lFyfg*J+v7)xM>+k^;az3T3ez~B&w-5X7r}6Ili)+iJOR!RK7RZ<`gGlg z(^2UHx;`)`Tzmy*&T-|l$j5}W>hSMdgtoB*!TkxVRYh6OB2=BxSuOd2>d!L)PPlVr zumTjb;5WGNL&_R zb#3?%WR-hxs(E-f9VbBTkoh)#WPV*0GUCd-52p$SSH+UAxE9=xQ_O}z(9;h;LO4|j zNiIt<4rytA*%!uHWuI$K@w7pNm&G4nHFphPq%;7`7sZ+TMCB3^%D{!t{vylWS`-Fi zb41(m`(u1ilDuLBJ)#;(=oJ*{8OXdHKgVI5@DE9<8jt=Uk)>T;KSY*=xP&5h3kL}U z^MUyB;2uY@dSMDJCJiJfGl8??el0y11U{qM`*&W277)V$$?#f}D-#B{=hm#kiz(sO zsF!G)WPnj48AS_a0NaG)=80s0*9D_17LYU_zq6Wp^N6&baT$(q8!MGx4!;bZAQ-T@ zLmgUmI&2r4#pgu68HtHY7Q^A#@yV&&SgF+|vUd#J?JB;AREfGPu{jl;?)U;-`KG#u zlp7`JfFymFglwbTq~?>AK6Dnk#m@HK|jlor8nh zeXGzygdRzzPvBJk14>SFXn`rKR;}uoiR1nqz4mhrt&-&f+v6=j0$G5-KX=Y<_Yr6X zHk=o5&VJ5>HB=xU3G|xYNQ4v-lTuYm5r819QYD5ei^m!gg^th$rH9pH0GN*>7bumKj(d-7b>{|&~m&Bc&2m<5}OAt_HVz9f+&3h9o0NLwhv%BP_7LdmeR1a=l?thGWC$hnY2_?tBNVu zd@5W1=T9NHOW$Pt!eI{8r8|Y-hu~?6@$EV~QzeQ&Q!P5sRPa{+LOWnpP$!t)eubZK z<+|=895WlrMTKCD*-|LAhCTC*h;BcOry50vaJ~z`_@pZkofB{ZvtXyjMKFP_opxux zUkVUx^utL5r@ItCdY}Q@HZcAadNBqbZ~F9MED1d?FRD>GU%}!Dpg9kDz1hvf)`xgU zeQ(dJ0epu zq3N1~DWtsM)IT}Ha{ar6?QmPz9D7UHSC;h$2M2Vp*vGwt>gH7DV5`5y!7SEI>p*pQ zhsD>MxzvWE`<}LC#Z+HSVsFJQ1yHHG>R}S|%-x$YVHm&K_uZh|*sQZ>(!RRnQ(7Xx zT-AEGX$+0IyHg({Kv#0;k*OH+O7C!b9*)6L)Yl$*QJW#iJs1v*y-8b6?c<4x93>{6 zjl(!`JJV&tAtz7zoK%t)x0P!bU^kZP!hSNX-OB%GDmfgbZ(DCYdK8hbW5))RH;v?S zz`5JrXJC1}(~tVCl_2RV&U74R3AG_x(_|P&evH&Bzy5kR9^)pA#-3*))?L2cpYU=| z#yuHq_JLYbOCOarl*0-@;hKD2!Af4i(1viXMwF){<(wXbAF16A27XXIS9>_C=Aqz= zmmZvYiE;dRuFX-zi+zG*_?2Z;sh*5epqY9)Uht|6T@Qc|yD`F{AkR7&JPkRqN1!k7 zcAR{wn3Qj;8B0Ge@FMByFPvt^>frYzCn|&uGGjfJ#-_!`gUm;yhFg9HHXyBfeTeDN zIaKsa+J1aJJ|cpo5;x!YZOd!X8kwW;U%~MlI_;W8L<%iJ=1z|qwpSR6p23z}O-bJ% zbgjPTVW0gzplwDa$YArZeJsN;JoSP?s`6i#11%KB-P&VF!9Az&D~es0cUIH$;%&Sk>eNsVct*yru%_P z_-_!*N3w1nE~YTNV!~Je*2Q0Yt+2{oPw2*D(s1;0j?dK>AJDHRNGh4Eq~UoleuPJY zRzCwK+7<=OQfVBL11)WjEqb*XS3y1QC(b1}*LQdLC=r%nx(%Ol9W5-{u!G=2Igt>o zO^U;jo?=K^j`7bHkjp0PdvLnp7_HA?lJ&Ne&Rtk@lUNU6 z!@8}5>jl>%!TQwHBYks8&UbC544s7Kb&9eX*wh+L!VA>*3=?5PRqWz(y=SFGY630} zq_gvhxMLbif4ZK0($r%@a3H?XPv_}G`EYv}bZghELqMIa618Em)uLX4CXNf2=KUvf zAWO-yS0|l%0q)d`+x3_#$OYCB!Q`zi4BTU6^P#oX{jlw)7A;!TCcI^^N{PmFx?sVA zu`iY|Iu*=)%#N^F|2LyeWl-|`@iwU@FIIQamFUDtgl>gxJaL0w+p2-Br;e(ui8cT?ntDGbTeKPYwa_w4vdfS!6_)xGv%@@{NMGNO_I}2lN*lkj92#*o8Rvx8Fm8$$2 zuQCm%f7xy;i-H+_8a;>7W!{^5F%GcfsB0$E@BZ-rTY%chL3e*J|YR%Do(oG;|KnTIDCe>H){4ec#ZxYpColnf0_i02xIU`}TN6$!0=PSi?ycaVqX3+r5ER{K;`!deo{_Yap!kd&CNkd#3!1d428@Q5MSxUxQnx zlFS6&fTR;*WKZeGjHiW7g-vBQW71%-zH{2opIy^xWND%MloB>lL3<^|GW{=F`lWn__R{oh z^rA5Br|6EzK8*6xWR75Y318eDc&7dGS!0Mz3rW%_IlL&#(R~e`%gb~RN9?rT;V=%J z5n3KVLz&HfjF{$}`GO}pD>>~UXmqO3Lg({~(Vj|zU8RM^J zceYs5I;6fSGZe8*7x3*&oXVlw)%BgZG1fcBT9BcRj>|my5LOi&lKc;a_$tM8nquqt z5B;i^%p#Quz?U>l>eG1yEPw#_?8YaY)RV0!*8+b#aY~5LpWO^mSVQ}(V(u*%fbaC| zdF+1tANqG)CuOCw+Qj)+`*Bk2T?!31igvP$t@=@U1Mqy~MJ%-i|H(28Uk7Zf zZunU0H}hs~EkMxCS9VoSx697Uy};YOy_JHuhnI5?!j8($`DzR`-Xw2skHZ~3 zs3Q0|7nPCvQtnfxE9-K7_(2Vw?G;wPLrS=g;{*5!KQVRB9KkX~-~p5bO=j3-iir+q z$GD#E;fPt*Zz~qX8;lLv0r;s^YbCw1H8%osR7^C-puFc}i(B@ghvRo->i#e728K2# z$5~d(Y)*y8EytmVv&`6N7?8cabt}M*2AaU;GTIAEg4~g8!pek#Tmxv&?P!TfuG$*( zxW3deP9O(iFFf&>f)N&)bVkVmAT>*n2Dmy7-gv9N>1Dw1SOV#rDO$WFb%f&{<8W1h zRLAXc=yB;=NPxkcLcqei1e^N$9>-V5%Crw znE!ol-BP5c!0)FXEJ~$gpdGDS`xNpdew%6B;XX?_1T$o$QmY*peu6QH0fATR)-qs$239i$RY zDu$pgDd?fnEzuO$0I5G5o*;C9mdoXj5+*p-M!1KvaRISonhJOy9nT7Z=#p-90?g6I zkkHQiP(o8pOuC2ys2a8^O6;pcBa&z_r{B>B9V+w@pQF{q19Y)!#fXI-kzHGBDzX_D~61eu}37Lk7YBUCQF_{Las4|`ybbReb3u$HnM3e zW(`}q;RsrXOFG`fP@_;;yFLWWZ`rb;)Q`%A`69e+O-H=w$=V@ zpQ)&Ldh_33hO-){D(uIgTO+uP4ddrZ4ekbW)W5SfpNt#tE7qXwlOdX2v=^z*3ivU6 zB-sjY0_YQ0ZZi7gnNwE3R*s{gn?gmhFwBxa`=ws4Ygn*EFk_)YFw|^b;CeBK(qq{FYePRn4NJib8HV9;e}+$3)jP-e6)}d`e;t*s z^2|rC#1&A!#qhJ^?3m+>D%5;sp-!8$13LEYAqY&qCl^q^?%<-&)=T z!G56A7@u9u))9hWUoPvppJm$nD|bK$;dH0$lY{^;d*cV@A4v_I<5^N23o)mqc##D} zZtf~*ffbH0UC^k9?1xWT&06)34ymh$V+q%{%5i!u)8Sizj|r*|1?+>bYacu>>hi(* zw$q7tCfmz5gx%hqwtAVg%yG}85!#?`nx@Dp?7Ttq)Xif&C(Zv)87Sa%n&JPG6~B%Ub^Z^`fqo6IHo-=A0BKOf^-d_X2!u7qkYi=Z6ql>S-)7Epi`fF_lXnG zXIo~P+0=w3*VLO<T{Xz6wD~c2k`HW^z%2sNqy&yimM>Ujd(ndRrx{K$O|)vgc3$5oR6zIcWnjw1>LhnMA8x_5_pKd6RvNxI2(Pc%d-V2{zeXgX6R;6NnH z=FJoN>wPUwEax@UnPchRnb!B%HcSnMk&f6kL+ix=aGQmHWr?K$|9TF1)LC?jtQo#P z&D?*1dfMS$e9LP-9lEQ3ixvxa-GQMtkCk;+{9s@|ySU4^~b4hHY(>hfH$TOKa)afe5f9?eC;oj9d z?nuUXKh+Yz+G`lpKN_ek1o2vxgs-Xw0`lfvAQRY4?-O}l#IcjL7=0gps4m?`In}Oh z*@$Q|Y0v-r9B2uyQp=VTwqLUIy&`wANIXedDQ-Hypa<-5e1%?Inep3m9&_4-7glsu z>a7;ohfPs#q#w(-;X_Fd!*<7L)V%H~`%A~s1q*EE3ppHh_0VL&-FWIN`r6P1^Sp(M zS)ZlgdD9-L6ni$F#OLuAy|fswWZHo)TC^UXw^48zvoeKq6WuFe0gbmmwupw5Gda@T zLQ3juJ|;mA>Wg&JM6^Z4OuWA;!)5$AyG4(w+9?^P@Vkpr*5LzOI*a6+f}e3dxv2Ny zBUyG-`jj|KKFjjBtP2I$Y=mOxLC|~%8MUV>IvC#7hmiS9a#aB8qJ+vPhp@j%xe)n% zW3`sfCr7g%(rY9iS9MEmEADD`nqwrMTRI3zP&@J`Y4E=Sk` zYtd<@w{=2(sHr(Ehvw91@+_Aqdpi8%lF1Fbl&gfcs=hXlQ34A|mE+%x-&9oO}+@V(_=g;MhuC*$f@r&ymmiaSY1)%V#hu zSQ`2NOAh2ISFh7QR;^l`-OyH|#*oE}7q9y8;a(CVU2jZPyT=p;Z1{Zl@Ejp+)SSj+ z9P;wzoH30GReMD4X3;BWqPawM)qq}_OpisyL~JW$yicPt9)2*bV-wHnulF|ASf*#r zxBhe=oyA@5bYvN{Z#~mltbT~HwiVg$ONX4IH63sobn^iAn>lk>3t4|7PMM>5l;;@R zkp^()Sos-`Y&diX1HqjUIQ0?C5y6o;%UZIKBz0A?GVJ36wpmnz73w#xXZ_sN_=cDM zvi*6so`g(2YHnK7H$MdfL*gFuInG;7Ket>zGX)z2;gP7n+U5a<#E}0Vn(T_c)>(3xT~PwWCya#(NyHh=gHXmbV9{ z!64YL8p~FEtzck}gU2f|W#PuZ!Z&uShroJMY(M!f1B$cZiLcaLn3GT1cx<&9Di5W$ zTY$h4otd%9e$&pW0)@iBX-p~y8vOk8&znxH+_Shgw*ak)?@e`Plw^BWNXx+QW*efjNG^arZUD13NqjaS28+X8>TFZ49KN6Hu5O(VqfV*=`N2DAz zM$EbT^l2c*!#JqQZ*b;~!+l~#2#xk65`MzFgB$nVhGWU7QrZt;dBeQq7vGaaI5oYA zQB6JC(0WB59Fbpb%;18nqc~J=IhW&zR`g&gOQ5kq!etUSj4s=1fUY!+_)p|Ofj(O! z@O&4+s|(DGA~qyE)r58Ng{|*FPZlglh^K#P5^h2$4xgYDv8`w?D>xJ5EslADH^$-y zC5&5G@=!x)&kgorJ8M&wmZB4G zQh`d}-iGw;cVfgO??CkWKBNy;rTNg)nh@S8bwVmJFrFt)MK$H4QW6-sH z8YF!{(OuzGoB5HiTadi+h(;3(4EM=66z)}D;z*VICvq31>Q>m|BhX79NAU*U!WbQM z8^7pzHzPLzY~tk*OMCq9=D?4(fr1wlY|?(>ZRnZL;IVSolWgjk8UMgz<8ieAtCJ^x z@*H8>JWwk7O+Huh)3-@A*_axWix!F77Hj%)$2iu0d~Z9UhN1qhS+DfL+SzP%D6UGD zQ~EC+Z;Z1vxF99(Tb*1XWjcgy-*Le;?+?bhM2)3ACnw|m`n;RQRG&SQ@fG6(VzB1X z_=^4+Fo@K}hOasrRThA+`VGc4c&5WY*Zy&&@sY8CVy~BG8I&)!0_FKjkXdHp;}$Jz z^}Aqp9w1Cb^-x(3m&c2+n!)nJAF}z-mA4-3ynL1$^=eR-SN2mD8J^>=e9EE{|2Ge( zm>L`3SbH)5+==`oDSx>|zf({TZ zZW>fmPBRCx9K!X6knh82Ok;V-i=3&9Jwtp$u`ea z>-+*kaf~B(4c5lul)7|TE0!;vH50{2BmasyP;sK=Z&>37-c+JS~D=W08W&8_hJxZej3{P_a5ui!OFQtb`If{UYn7dD&aznL&$j72BQtSgQ4 zpUMHxxljfpzc;_$t?~9Uq3jGiKK5U79nV26b(f&nTHe>W|YH{GD z&w2wTQFFX`rLk~5sH2b31{5=k6E@>9s-E11KiRo$oT1ZHDD&k2gj3lrc&Iv{C_0{u zndeba0rJ)Lu~Tk`UXD!x>>k&-8K5Lh{gam!gOShW)BXDOgR8*eC-RWPzY19%?p73| z59P#SE?02MNHHX>Mfg_>ND9M(1?y_yCMm3`gH{2%=V>oPPi4+tU?3@139bowh0e8X zr1qejrl3YNhLXpq{b$#2R@l&4x?A5iCPDe^GPDMJCkkY(U2D;0C=s4;JqSVz3Q`(@ zbom2apLP+BPrf?dgI1`7nn)zjO&_iWP_SPKbi^bAN4a!+B%{PwbYIZv8-!5m{@Ues z>r*0nWU|jpLjHrnTN4HAOb78jLR(3@C^a@?uhDWPRM&TCrX#rizyTyr+)u$|h^eEs z@^!EF#pb4<)Za6t(*+zvGm4 zbM*~eyWWy37@NrMY0Vug&B(!(3NN3`A3eI==$~Vv@o@&5xwv&!$C$B1qquhrMtcgs zw#Ixdx5wo0dY06YRzuN$zzPz|OOq|11l?zBmc_UHK701;T{qtc2EtZnrKoD*OTv@| z<-(R2W?VlwU4eD+b2TwLmVX&NF&al6YuB*n=z8@>&$--A!yZRB%OvHEemY%aP){Fx z>E7YH3j{w7bSn>D8RjbZC@JwY^8YXgnoW#2^>Ha@>>=;3w<3siC$PDeEaz*36Ur7W zSTOp$Z5S8T8902c+LiD=g|;viR6hJr_mAVQMr?Jns-~#iS;Sh5tAs1v@eKKTRC$Zy zwP5PABYOBluU_>wC|#e6EarMrvFhNY6TKFij@og}Te`#8u|++kA~yo)c}QA?s~nz0O$>wbY(nOX#hNye~|vq3A5D zlDM9N0lM5eVR-%mRK=wAma(jr$QMu}=pO5Ry&2zp%4-B61Dp4SJ5*Lo#0#ygOMUP)t8Ys>vazBbDV|ubH(WfD=KptdAX|fy zt@5=RxdmKxPKUR@oQ#!)Z`i(r!?utv#k(_6Ig9i+>F1)H?Ra7vq$0>;W88* z@KzR9qS>17fXJ||QHu-XDh?k${3Oh;V0^Epp$4e)gr~YYqr4bMsz%PYg5|WAM}5N~ zBwX|9n>UYSdU~vMn(zNO2P#&mFsR?x{d$+=-`jfCGt!$vu>R={*WaiP$C%k8-@bi& z6Rb#wS;4us`4gHbhLkK7PQPTaMzeK)<}>~}%@H-vSZ#!C(kmI=rWfL7Y&~ZDj3J$h zW-m4*!pw$PnEH3a3I1Sx6N#2WHx)W4bo*_$+J;wibq zUw+V5_bS;{9~DT}KEHq7k5-)PH;iLfC#X#T44-LC^6t{5H7v32GJ5)WsPly5V)v25 z&Vg38qEwYMAv+S_T)iTUPU2}eg1qnfo_17Oas(=*Zt{<7Y!Z^Bsy71Pt+^=U1K9$+S)1j8TAu_hC(-R zWF?}>R{Wb$g+d zhmcEcyx=sbIC_NGUA-s;@FY^uD$`)}F}`eM zXS)k(zcCN#p!xi{yn*?DUlDR|r5Pi2_G7S`3`3!J5h~ zM%)=;pS^p3)qZydNb`I)2eRc~`F*$k?di53!h5vpv*l1yvQlSh3r`g_mA>Ej*ill{ zM}I>*oW`QK;A?+0$T=3sK?Vlq+sGw#JUp^FOFf=LujxG1XJ~YFsXAnDwGj}!RjW-6 zX{qoSwKE;jrWnOl$=)E7d~fCA)i@*l7eR}KSkBN3}h<0poNaR82Nf8%+ zj$0e%v@CtpDM(ZH+aZZn4G-uAk*J>M=LQkSgk{3i1+>2k~PfB|_CP4Ro6`ioq z$9)}OD>z7!vK9pcLNPE0yb<)4AT*q~jZ?(caz-+8nqbmM7#U6hB>n(1kX0qq#ouOs z*wMOH3>AXkXteNMlG7tNj#C_asTrJHz&1l-9e-`ETfT)ikR8nuq$1B_vONIFm(Anb z0nf;~e6l#dEiYI*URkrh8_r)^#9?{v5Rv(LoVv>Lk1Pg93?cNX4=~}TX}10%(FnUs z+WkD6`E!)Mh8XxMzn>?PpD{hVHZPI~pX8i&en9NucL<)l>mvMdy%&|tVsjqM(IT)-&e z^3rZ!d98r}=V+w`BY{IY$L{+;_(lgB^TBwP3tsmMUpfe<*K}I946B#xmqJp2sqoo2oPyJ+}vw#y*7_B?Sum<(Wv zJH;k3zskkeFYk`VJvl7l48Su3o(KK6;RtunC6#A73R2k*I!`2HWoVN3+r?hl7 z%x+DFlCN2JPTj%`OM^c>&sKB*xuvX+7Seuc?%e*3OL-2i-GA;H#VoK-HzpiW)1{v# zo3hogt<{F{vf)DKF||^*ucys{-A=D>PTPK>1oyRTFP5a-4gUW2*3DQo2pXx@sGKWO zkj0%$WgbCIh?7L+CC3efo|h@RwXvp#dd|b>WO2$*k(;r74dtcDj&TWV^k19?B&qyI z#C8`9*z*HI-w8}hBm`VVhtNyW*f(=uVqyV1OF#)jm4oU6buLLZLcvvd@HWEFhqYUK z;0T;+!C@^^k-yRhaXpd3uPX%$f@WL@MfF(0_PCCN0fYGd9EL`cq-FYcS|Ccu&SNP2 zz<~pINMyfbA*o52BMm7}nllD!60Xt)oUj2L^O_$brUQpBX}Z!oz*HK3I0 zrT==sC>)`8zJdX1UKpR-<4<_f!Bx7({ZLScpP3P1E88fw zchvm3VT%TTT4np^YO^;A&H&&`VJ>xtMVn6u{lL6T_hjB{w>lLz+bm>ZCz48Dv$Ww> zg0^vm*oF(&0i%-^qu=^=eB46Hc?Di3_|BCiltxdiAgMG{7wIWh2v+3&5Nj?vx`}Boji=nTtZw#qn_}j-aUsg>>kj7=5>30#`9Ua&*J&nd2T^gN@>Hc9& zJJs-J@V`9D!@f0_MXC#*N4A<`tk?mBOeeB9g3f~TL4gKKao`BqX4CvY(XSw2?Ck>6N;9dWu=SzTvR}f}N;b0;+M~HnBNU*4!0&pru!Hc19 zP8tc;Wf~QW-jX7v9|-l0I> zKC(f6GM0<%5znEPDplsB9m+nJ)m`L>frHK_J&J{v<1!-!_eR93jev|2I=awtBsBaq z=+hfH&___U)ROP7=;u*3A1{;U|DWYRNf0ko7hFY?o`s3KH{OA&9wS>Q13EYTGv!o*Zei|;n;>Z<4nX`o`!eP;KCOsX{6(MeX`cCDw8~e!~R4IDnLgl zzgy8OFZif_3!lOJXU`(v2fyjSiAhcXDxIYlBY6n?xodXW=pVXNfTXeh?Hp*)*1Pxe zP_RiJ;X9#{G!1?#)iL`6ly^-7;7)2XG};L2ZPk_Uu2wpL{ZY5B^DiF}dZ=OhFRJZ# z569eCeV8rMuv1M`V`PpLD4wo)Cqf5eqlW2EUzD(k94COHTj)HE=t=m*E!Q~eGgHp5 z4ng+@`Xdo5@-mfZ=I(b0A6!URRz@mI`cdGHB%|gW8+%wn!&=~C*9 z+Q7|pWg?4tL+5KFLBQ?iQs#}+g|SYVrS>UY*=~$_D>8MPO1Js1 zUv<)(h_mRLkIF3Qy2x?Q&Yamh@L3WGkf7P)AxyUL zV|7bF<(Ny#)oJvK2eKU7-jM94ba)*8TwrTiVPGuf5g}V*nL=f&4z;vF4rgb78=QRf z=+Waxj}{M|8Y?fOUsAZ6Vj?5`7g)#gw3&ewJ_h$mQE8|8OGTfMEJ@HiF*23(l>lAy zsRid!B01>{EObdQx-sWvd4o#@uL*$duO#LAO_s0fEeJ*{${l!IHDUcwB?`HGQ_uq~ zGD-Gzcl>6Uz61pxd4~V~HL0}c{~!mJKUg-kT$aw|x~&||o2*7f z$PuyVj`BfJ1%|u~y8p2W@$l!nZG~c&S@MXQ= zYFy>%1s_rz^{rE2Z7_Kybfg$MnF-#7!oSu16p>{w`JA-$Qvi^!WI1q`Et5Pl30s;v!gX9F9)t$3f+qKn+|u?=$@A!*9#09-C)&PpZ76bxr9 zWEb{|@$Fb zm^#}VjFrR*u)MGUP#NX=;d}G|ov81Nv0BRf@LB$KP;ix2&pFJLh62$zKv7xRoIWp% z)u!bH#(c>E>=)&=GTxbvdtXhgTwY)DBaSfHCPrbrD4o)@w6WDYQwhC5gHWA}vdO(9HH{~uI9D=Z*(IjWFkzx9W z>_%{nQcS8uP7up&P|4e`{fOfy>D`4~>B7&| zLCCQVJ6LL4lbBROxdjHv^l}qDRM}&)yyNGx;@s3j{auMEf^991v^qzlQ$UvZLFq2D z8PEkGFn>FrL*}tX_S;G^%8LYTK!5mITa(`knZ5_t0EB)@CuM>QbWA#1!=wXz5cS~L zCR2L^^BIjGZsXwULpF-w`yFD^XZ=Mu@wWz#l_nD>s{4`0)Ps%{(AJRa>(_v_@mI$8 zhR8x~&v(Gf`jkp9rN4(_n!JxJ&TA$9b_hKZ@d5 z!eAvJyP%Q^xWO>%Qry2ASNGz6g&W+?~fK6j8T70~rL3WH1)Iw+xLovyu3Lc;4sp;zYg zcfxqBTeUaBn?n0T+Cr1W9X_`w%I~vZ(C~wm?-U%sK3~wO6UOiYF54 z`3z)ZiJ*hsLD_ESF2qz#X_fBaO$evEg=f4EQSjK*i!>FtgzLA@RRKL zj%iLq)l()O$60;4JFSoIsS}T`2|A{VPFP{Q$s&^F;ILb73v3%gBP}4(7+YnRXBfI+ zW$N;Z^lxFM@-M{q8uHdYPZ-~9eaV58@gmF}7T$qN61A&$;htURpD=za*o=~ZpJkHT zf@D6k)&zV#gB7+L5nnF_0#JHQI_s;=0&FfbV`UQX z>HOuE0+a-rIR}TutL_5_5O3Kv*F)dIsdv2u7_f3m%Ppg*BL8kyDn}igXYMLzQU_^_e#X%rmA1G(FM# zugF`*0QiP`-8D2<<L8MzsY@6!X{cc$i{~IoBCBnQ^Z&{G+g97JKpVc~2EyWK4U)s{6tgOu*P3tSzlk0D zjNCqfC0%>pYt&XFP0xQ5Ynp7WvmLTqzOS8}U^NVocFV6#(bE{G|7~oarhfjuvDWCv7L0cX}lRt3@mGY70byFn6?i9?Y)w5rCD? zbdfT^A$!*4Vi~gc6bLG;;*rP_D-dpt&6N`@M}Z#%yXqY8?;x1(a6qnC_>FS}@b2+L zGZ$&5VA`X7P}+z;lw( z!-W~NnoMz`=nf(f7A^xO-*FRwYqo>M1CCeeA;1)tulXQLEvPr_w;!Z=sAsjnckd#Q z{8aE!XFjZ$+RamZAl^kOPDq|fsnSRd+pRIEXQk-HV+*xIa$J6j$&j%q-h@@?s0Mj1 zn{|G?Ot8XpkpM%910=W643d*$o%BKZ4P@EB5fe4VQ~oXaecp~YO95Q| zpuBjjmF>)|>&xL3IA0bLyX=Wz%q;E3WK4AzZxv+6XRy4l9CBn^Fz39nvb_2(zG5DY zdgCNAEEK-a8{Y=V?I~{0DFp9S{Iu$*sv|KjX~Oan+mhnUn5PEe?wNSOMmmPqxUk^( z5WsHyW4IDxGK;MO56u>4+p4>VK$M+AG=5nl% z;k)oz?68#)SGu5|)MMzB zR-_LC0tTp~M&|?-495t;tj~y`UA*imcS~Qe#^N%ZKFync6BZqfS+P0^P|J=tYXObt zzMy6q^VRjoLJYQ_DCc+zGGHHxCAg1;3|$&ET|uyD)tcnI2xEC(ePLnH-k6sizh6Lz5&T(m7Lput0Npc9 z**L@Dy2O3-;S>@bW#Hl?n0=_k=}YteALoGQoL+8j&99z3H_|*PffYKA9`AdTJ@1%~ znM^*#6q6zhNFKvRel9sxKrHCO+;1c}$5McORLrzL3$fiqmFpSfU{y_Z74%LiM$JJr z-@dC%=$wf^ zbnSXk{62N;BgSA9syczruZTW;bdKnKQqHO~s#TH33o$jx&#bXRA^gs9BbVUVeZe?D z#kXKAH1iR33l4TSv@lfqhuFNF))4}FY1WwC-1pQJJHN0g!yV247kpNa!#=QUMig^* zKRESp*|IBj1?XKz#|IrT^-x>F!aT(c2D?pAf^;}DBaATy?g6Njs-`~3)1B?^21fO zg&kt)Va50+2TdMc$kU)K=nF*Y5 zr_nxU>H@H+f!PYRJVVT?_ZUd3L^M5v6_S8m=Efb_VF{z+FgifLONo%D1GLQ+m?4VJ z-UWi+X3?Ym>X4(07NgroRfxs z4ue^;by_&?>GIfm&ajy*M-}73YhJ*DG@5?`Hjn3N{@-PJoJMoc4CfHC!YaWu!{@Nh zoG#5vw|2gAb)Cj!w2!&8C6;aFYZWiW7Xv^4Dd0 zXoI+nU!22XQ8?1m;Azxlkilm+U@RD@9stwK>SEr>c#Rg?czV>WONOrrB1{eC@)-H<_;doQg77m-COIGD)Y|Vf$2)p25Ern6yvKhiX>^Rijlul zIEY}-6@;TT?f5$PI;nvnhu?XzlI|;06*Q78?;Xryu<>@ui4!OKmxQAaEYt2fJ>`g% zWtdm@rT9Hsz@=`pi;9xlF#y2~ClZyUTNoN}@~@*wuuL4Bz`myHVmX#AxVNNb zD1-ThcSK8Rck;KRNR9xKM~e`QgpE$eTS`ppE5W!w+tqlQ3Ly!0OG%#`puCuqn{w;c zl7XQJ^95TEwpJG2K&jySQM|B*0dTu0eLY8!?_f6Mr#YS>a=^ASWgw=4DR#T#SJ*B{ z!7TFI!9QWHl!26?c#9E9k$p(Efb`UVfyAd{q~}>e^r;k!A%}mZ+woD*bQFvtXR*Lw zZKOHRykZ@gU?2y30JXrO z7!|JtmXH8JZk6X!;hu_Y8(Nlz848RyaG2!Xns6ZP*fxj9R6k&=xoTby2pHsm*nJLb z`x&{bpTX{6>w)nd9BnzTz4KEOaU}mzTxahYDfXeFC|7B7oD9oW3$UEzk|%I0%~ zm9hdzQZaN7W0)1k$Zv_?rC9F}ZuRy6EtIZYAu?6xfOFt+6U_v6_XP^A?oczygD^bjkvf+6%6!b%ZShr&Cn4kn0FHe>hoSt5IAf3#df2 zGR0N=;`Pm)_#idNRs*N8@lb4{t8pNdrM}WX)B^QMGc`HFtU(F6rJat##ucbFZ~;su zqLDZgmePBxiU=^2poxv(O5$vCXp`cu)ihpNY2N>> z9LPF%TJhq2mxd=yz!spufdB_}QZ)(Y#M!c1_`XOi(oY z7yM3=27olT@-Wk7l%TKx^Ji_9QeKpzjyKks&%SZ(-$;3X{Rlxk9Wgry_mhxOyuf9D zh|oX*pRizQ;Y$lhg0%BJFfC|LjP{y71{HL9ZHJFn?AjsxP~0|3(oYDV7E4J^=MZz- z7agnuw6_gu21U<6$V#QO0aidvyPsbfxqE7bIgi#89~ zdOP=XnfNrpC z;wuispKk7E03C|4a_#tyHPf%w5oWoHK zuV4iSxVv*7nB_n$eDTyWuF^8(&+EL2;tDFfC}c96hN3eH1UuoT@N)OV>k?KL=$+-~ zF%PxhRTesK&OGMu57ifEm;-!3AFX=y{Sc~e7En3!5V8_;d4M)qmHI9yM%dXUN;jg% zR&R6mx5l8ec;8CyiS>b1(&sQMeg6^u_tr<#OZ`RGR5g~>Lr@p1_^!YYp+^4EuY@^3 zfp|ogEbPHc%-8`GON=3V1begcgrVsGW%(qSygrP!l9JgKrF_lntdoq!5Z*JimWQ1G zgjGMM_wIpiy$_FhI6h2xn6OR+gMJwNcdt1o2!oY4pHdCrpiAiVyRu-fkbQY2sVc0{ z@(`TUQC<;@*Y*s1p4Mc)G`Ty8^55TNywr@PNw1t+k%Pt_w z9wN#Tgo?;;fFdY3Q4kz}h=PKTP=*SkY?-1AWrGUJhO$ABz4t1VvP(+`J<0w5CFeeO z&&lBbeDCvp@B1>M^d$M^x-#x_k}JuTEB<8b=`Gz9furR!S%N>6@~EI)MOTvDl@Sp~ z*@D;gHOny*ZTxi(LmX7I+~--WBKjW94WbjuE$g zSvtw*S#eREWl8sa2`*4jvaHy>mZffZROLc{}LkIJ^3f+o-4*R>aWa~KauH-bu={? zFf94#-R-eUnlH@eGu?bvFEY`LHDTUp#+LI&WsgUbE;S%o$aaRmyz-uqnjj%Bp+$Tqn?EL zEvpv34vDQ#pFT%!;`EHs}%>R7wbi%PUd_|jCIrvPkTkt6 zIO4teKP+88s9}U@+V4$&KjdzK;0~whPIZJR6d6>sBd$HRl07dBr)-hDV;Yx2t?S+& z7f?Q7-UraZmhL=+p9}PmmiK+2QEdWt_|K2(YiE>;twSXhW_Co^RBN~aB5QHSk516% z>48~k^YxT`kBj=2%8DE!@k`q?cpZMxQ@*r4ky=+D(}Scp>i)eRtGx$UYZ>c3r+L1j zpQRzc)pEP^x`=t&ao(Q)#K>eL5iQ)1DiAO@=74JKiVkZv@!wu_tF8=NSX$=p!^e{ZvvN7MOkrC3*vGw2benf-9?B;D4g4d$g*4;L4YH?L|V(1ZVX z20A5jQ;0v8(KK60SaCzIWLeu@P)Y=gj5bEE3lY|xU}^xfcF9fGcF2$+&lW1w^9C4K zbrZS#HB-#Gd*oX)-EA=#i!|l;6SYg#S?!6c0Z@4ro4>qwR(s4Hs$Z~-idNo&+z;6;@b*L;%$lfcjj|`~8Jn^P z1_P%j_|FSxB`GT(<86fhO_g=tfQ=~n*h!IMk(6f}dbTVfzY8o)!Zrvk+~VaL0hO@m zv$lqAP0al>=6LBa9lbWIPM-ES(w#of3z4dP3*q`M{7GF>SHhkZ+Y7uT8zrPrXMEmKVHiVB^H`cMZ)+o=ULT?$0TUB^sB#j z!O3rgM26t|e(Z1=6{`+=zHmpRFVml}%fgV9q4gKnMFNCWzdoBp{399AjfuYMTt@QA@-lV+bz~oR^YAvBDA$ z$6~-c%OS#VOowAx@$kj*n1GA*V1a1v@j_lYGbSqOW{Qg2PS@C?&T>v}>id3O3xt;G z&rM~Vds6{x&Rpdmt<{<1CJe^*XnjRq*oZ!xd45dqdg0-?l2@LD7o7iwoy{N>3*+xY?@?l3yuDe4`Zdf}!D^DD#V%NA)hV@+_o!`?cX>7Z8xyWlr ztvL{JJTB@cN^f1fkZRqi<^d2W%pvg`scQ`mc43e@mnr-wj7A^5`nzdcTh8a+31=%Y z0B0(3;=GVt=N#=O`bS*)t2|%(!9nnp7lb%=>izfMAEUtroH+3vpTlq+Y?;of@{dT-ws5%@vpn`SvM*TkGVPVimm^ zTd&hLLEJ^6TqVx3HSGB$RQ-D@*iO-vy%0~26qYa;V5*0xI>+guQW69U1axkW0~ zW2I$?gn{rc%vp3&G|7n-ElfEYD^xt98ON@d)?sSrV2*EQHUn))Omx&NeBn<$0hXZ1+fU)pV=Z&9_3448dV-gp>F zU&w1mH)&R12*H`V_|z}dK0?X;e?B7j)eFk&;FJp1-D)|0=~;9)Gwx^o1Uqz6awnMc zJj-b41f*vVT-7H<1%l8ZFp)J(XDc+Xks$qsu_@e>UG12{|6z=O4<*L@Ij$m4<8nCJ ze<%`Re*a;TG>z?O+hG~Thd|lt3aq@mO-O^w0z2jrDnc%?)B+?ouE^u=pa;Xj{uDy` z*bwtdpukcaRoN^o$FRlT4jUM5+_MeDBv*HpAKu_ies-|@!>i(P&pFs)bu~7u*{J=n zXFTfuc~MW3{l|eK&)-_CNT-5py@gzvLlv-l?b)*@UF^g5k#jE@&-)%mZ}xq}^Ct0h zFK~#SoUQwEAq@?zU0W6j1otQmRrC84%jMnHwKFa(SW*^W+zz|{IvD*?{l+3^9vnV= z_%+mle`#8`kg-d$JntkdiovC=6Of;On6XN?Xr{XEZ8N}pW~a=G&UQ$J&2m6b#H_p*?C-dr`iU0s^G4i{wUu#o1(__BzfBk(?S2uR|Ob zia2Cf#f^$c=TEE~5!G@Kg=-c79}4AmvA#GPj*W?laRZKDC2b$R9_)q|YflK<2nC^!?$}^_Z1CUtpUnqin zb_Mr_f)(#{O4MPodm8&bk|r!#gcU%Joxx-w%W=$hz*c!Bu*O#%%y*%Y{2R>^XU36W zbk!_wj_-Ltp%cFU{P$X*@+X%VJFC+|BA@&9CtGEcS>@<}Nu2GJpWHc@v$@LBFR|$Vxu$HhV>3O`#6)H{V3j^;t6!!CN zN-wSx3QTwlC8eQ4NY34jGnn*C^~>IJO8VNBE5|(hiEhs9&*Kxyq=`&c=2LD%cfgF* z%AhB7(jsR(Ky#wWpCJym(z02ZdwlrT{+2%@Cjqc)@|uQ&6+M*R-0|PB&lXI3-Jqz? zF=|aPRScNvutFG&L|Px}30q*}Vuds|I4L=1$`2~cMr_6Z57x}d!22wC$THeUu7?eX zdEVrK5WlnY`9R3y34xZN32TWBfy;(hFaelhskPKKV1^phNCwtUU0vd3Y6r+v7J;po zK6Zaa1m+!YJXO3O_&;iah@s!YZRNdaTn{g0zO{V+3-2!fv%`zM;g8l~{B^gEY@Iqq z)y63u4{TL#tPU;(Pp=9{6TYX$g(R*cl;F({rnaf|G~zx-hUZo62$qWT@jE&{@nVq& zEpZT`7of>rh>$0SJj;7kC}3GbWXujfgH66|+NDf>E01Npq9?;W!`9YFJ@z#!^1U94 zNw;W%{sRobnyYVvo~$v-pJB_AN&>FAwpod_BRKY{0qbg6TMYF!Q2dWX=NgJvWyJ7z z^QyU*hsv6GcegzzgE{}=5PwOn6QSHu-f?Bvl6D{kwxzkF9ib2|Z{Yf|Rrz+S z*wfHLwo=xH2k(Uzo!qL0I&|m&vHdF~sU674>-pV`wLm%JOL>#~LwWG-CMo+>0*qRZ zy8o@AYT2>lD74G|qB2(Cg@10L6u{*1FGrgz9Dt+N5vc}cY(QXE`U1~(j)P^a9k>hn zf|mz$&RVjITy7Koh+>rA#r>l~10|})$D52Fg?3=*tI$5Q9tdEh_Faz`e3^3Z*h~wOd2_msxGEL zpt;QGA`guSbj_eFePpz*4mjgBWpEt=D|~AG{EWsireE0xzLcGnI+sB15eGE}82o4v z%7z9KN}evvCk=jC33gI$m0It1(i4WEijePUFFnzn6PwT1KdWPrik;7R)DqGJdQbgW zEU^6&t3VKR{|W>o&+V{=x1pdd8S13&}3GJAm zPj%SKPuOiTV%VMTB&T=6$WOP^Bj8u)QvHzW5Z}Ykn(uC8nh)mXKmPbb?8j-&RzqP( z3rWPI%Krua~h9p1ZHpAA1v^iCN4u4!C(3Nj3^ za!ykB6a6485r+(4Ok-oG&NWRMh-De z)nG4!WnW(87x^Er!`?}nH0KB;sE^H;KtS?D+y=u&$_Od>y%Q{2rus3o_lp{lseYoE zF~ew((j4KKh4I<6W!?Hx1|y*COs}lyJtEyocu)qhQn{o!BB3zeNXE)^wtrb2W~Yr> zo35b)R<&wdAl7NI9VYR$%ehA@9N3srO2GlMX}H!BH#<0V`SLYTBG+Zd6J#G^JS9y^ zK}ma;i)o%Z9h^`jEEjmNr>v{?SlO=K-@LKsI4SXb%CZi?x<;Sbb{&@HbYZoHA~*;* zmfXh;5yICixC3_iQ5O;S79TC3f3Ed-z@%g>QQU#SpfUqa`zE#x%cd!NPw}Jk>kd>0 zv)RJ!(TKGHrDqLc73Y-L7?me!wB*pCPoe2~(4_psH_!5G2zgZZ+hBVkHfajV$zHu- zRHKHO4HFi%640qCoPq4>^MVl=t23(VHuPjvEw{6E7R=av|=O%UKBK~=X>}}1GaO1-AA%`IlgiZHdmF}p|?!ePv8r{ z8p1rIdejkzBPKemq$htTo|fYL!695hLEqoy-3jP?VGUiGyrMtoCqb28*}Qr4X?%QC zIXDp^6izro=~EJ!`^_FHVL32ua9q+534F_sEL?(3@xfj&Vh;z;*A1=m7bfGfDC?t5_z|5TvTTwEPjCOJPJ?IJZa zH=`PG%D^Jdnp}!cN=FiTV2S+W#E=ff$s^l=?b8b)jl}7ehSCpHh>-ASXNt-AC25XM zeps*|&MwaGdJ_>wPzs%W-7qzMf8;lS*sokNDb`0+@)rld^E6@}#xw6ucr3c!-7vuB19}TrnsUt3F4M89)Z^n3{&vBq z;c}uZg2b{G@kyD>WnmL*yYu2nO7!M+hik2N1f=M8j!o|F;&sP*!xwJSOFpR4V8%Kd zDz-kIW$Ipeo_r8vpBl*W?_dcAvf$rwRf>VEACBf2$ZF$KYh`+FvkAx1)qS4tAizGy zV%$N6{ov^515p9bdl=vvk)pATZ7&#zv^^i-X3+tK)?7|U66r3gdbgmeSauzN%v8oA z-Gsp~KFcbM#h<11arc#{N#9{C`NbMIDKw_!x1f8}P1k_2U&3%0YWo*wK%3?nb;3@w zbR253hvVHf++>8{aFyd`$Uknx$A0MQdvZUIb8gLlMm5%dRNl+)e(1m60)vF@shnzC zgC(?uAgH`C8-HXM2}KWlM88|3WCZ({=$4{L-4t162q`1DehBudEo-4dR|H*lG6{j~ zqkf%lgKP-lIyaD1BsWK3T(3p~&>izG@`5myq+p-gJv9=nQm{o?!~Ph4Jy!1m+rvJoG5gLBrN{zKhga;z^tp;QC_YvVtBT z^u;b|7ZPyJ1S(OTJc;j}z;i?PZTV$Lv}RN#tm#*eGah~Y*I$3#j+2#-dqIvZDT2$|(ZkBORRCKVLW15o2WYqS>6YI8R|t7+HV~%0 zBO&iG0Udh4o1F+1L4WOIsiid#3B{0vQtHTXQ6Z;eJ9Km;d*Q-I7(1=SNbpcFoh@T^ z#*B#~<>&JZ_sZC6#LYOtp)?`+xp82A_m?|b_?utzL;bQT7-^a;z`mMK6FMjB*rl%d zq-Ium+;cJS(dFG*jW{-~oVskj^!^wc^yW*lA&?CbgZO>=AU>i}g^^KYa9h zT|LGXbv0rgPyAw%ML+b&Q4Wh7FJN!QpeHVLv-KPcu0_>mI840H9|7&rFIo`%4mWFg zlLtb;76by4=T|G)BU(!Ee}Az1S?|iWy96uQ2kxNTU+SXq;#IPgGSm8W$po4xP2wD` z*`cs;+zCj}Cn5Pvm*V`vylZurhuR=t!|g_*X0QCkBbIZp=x*FA8j@!NQf%|DBKjE; zG85}#(Rp@?4o{NopqFr~dDI53UZ~jYpUiEZ&(`alEW^RS@tJON7XIHwbvxh-z8x<9lctn}d<=?h+bWV~iA=%PT8SU=Qaox=1!I&; z&k>IvpzJlC#_gyzjC5MEpXaF1jrW(5(Ub~q8t(7zl+v0eLnLb2#YDD$*fgejcS*sL zC2NG^h@Yjt*M3IR8C6*NBU&Y!Z*-eaQ)J=OVN;P>TrpVd{_&|7=lK&>yiIP8QlHY6 z4*&3dYt-M>0q>aSoBgq<*i2j8()<99wL`2uN(rK1pbnT7E5#!iwFB`Sv$84jX;~33 z@CPNzhA;{1r&CUtHMjW*e33-w$GUXcYe_oT*}6jM$w#j=AY?K1{pq2rgsgB{rYX#s z-jL{uPZ8L2gtWYYG(WlN{^F3;1=FTDJmcKcr_wk;O=%Y_s&?gbZZ{P{87(X6c@ot@ z)KSHbm+b(R4Ad_{#hkh)RP$myJ9{No`TazGHr#4VaNk5R@>Mh z1-TzVNVWw&<9HitUncpvrk!%mq7=GBuUT)YU_<yhHe|-9s{A zHAF58DhA2oq9XSqH*9ge1p~^j%4E-QapPTnANx)j3bqYz0atEj%fE@o3Mb#ko@b4N zs27F4&7ov_w;A7=$9)H=-@}zeiibT2KQuu52j#%mbmX)5C5Y7i?bkwtw^>&ivBS`~ zpg$VqWWJH2h?jmgPy{?5t!GJqePe)t{gU5=-Tm>ozB}d1?4he?aQzcpDp%Jo2r2j- zV+T$#_K`|gb1%E}N-!2nURJQ+-&j1}^kP@pOa&{-#6h6qNt*n!{mL%k>%ro`rYw2l zZe5>TZV^)z&v_nA`I;2_UCB;Fg!3ET$LO(2*j`}gE9=0@;EB3x%0fO%Vdq|ZNsD#0 z=>8JqMaC8?JoBCxTRHPtCPq2QI&?y^=gg6$8AI?XPYmWX(;)CuTj zScgDB@_^2G$gS&bFlgPsB(Vwvo8BB6@Zb0NTOjhA=C<$i%n4yqt4v}3E5Na;Bln=I zZPSvZW(M0BD$zMuU&dBR5LwNx@p)~&M8;&XA!sc-!v&~9jNOp4tAhPt&gxaBZU>+* z23Dsn#;VVF8n=VF%FK%w)6h+7F&@vILiaKDW2QB%g&lYm3(lLD*BDncu7BK}m&^Y* zW7SjD&!cn6%ny7?ptZ|p|dv3Yvq5f4zpj+RR!197<(kEB&yeVNzIrd-(seKwxX~e=R zEuGBYwb}4^bw?jLg<~)EI4_RuErz%H>s^TPrp;P!;4kjCZP1q4c+Sje!kD~QtWuu$>k1yK6r{vG88`qEil@E z^~3v=-+-mk(}fLC53`I?f%z5~sK`v3;rYc~>1wBGtik&6H!02GO6vCJ*iQd&hu!{O z?3}6mWSV$Ea~G7=fy%KEL%hby3eZ(unE z*t2HrY5_f#4?~e>rPY;;*G`NPt~kFJ1_LR@Bv4H zFb=F!W9=A>L?*0FCZ(pn^T`a&=j`P1JiTbBos;4Ye^weB$9(OzmFO=Hx}^=)fX(@N z-yTQlQO%m&1pKrsf?mnc?L$MwKYc|oB(X%5X~^^we5*=}ksP9*(_?~F>vVNV)yV^E zr2QPf^elFsUMVQWIYDf*|K|9mXFk;5^tC`bad z0q*AfFQcSF6y`#!-~A|Ixy0e5%qc^Mu1h{CVI&4brn^8x#?WQ&%LI2|IOt>Fk&=dT zS490yzuqv2*iH3x<seFms5SgtW( z?eK{;GhjGz_bs3&TeN6VTuQ>Pbm^Y=i~W2)aP~bfxCl48G!T0Q0Moq_(pAvqh}?mx z!&i8>rK>Z5eOeB&KM{1XCrh}QKA3=eanaVaReQ`b_Id`TT8I|dIus_Ujhl=_z|i5g z^GLwmObroW7xvDwpa%r`x~M zLKzHdkc5|SXu0>6P+2)U$7Ik1BG#kcq4K)wINT&GzP$$yQ##gL zm~k|t4v(qEWf%pc8(zs#ryu%xMfNE*9k1*~d@pbr6}&ugBxDbd-+D=R^#zHj1s4VE zMVZVW#-|pq83hD-6(+n5WCR%hvNbMrJc=XDrk!N90hw&&a!ejo+;pZ{-T-u<4>}2@ z=fercS*n!se`~PpuvNa_f5L{A>Y_G^WyQ-<=gAZ1+$A9B8LMkklLYj0hYZc8+vt>( zxg+Or7{9>?Zlseo>zR`u6=JD}*{uc<*|VaB?{N-U zZ{)Gq^88hUydcNYAtiRl=4W+D(u%&w4zxt_oL4lP7Y+LI^=m?=DQnvz`Y!*IqulF< zeC%8mO*J3-5j_apS*434qaTC7|af4DxhW0gAiu{V$@e{FOQ*fwoH zAN6wwWakxn{0u6b07H6SC)Iv5WHHCiRF{WTLi+FJ2zPs5@|NVavJfL3m)zF_2933W ztx+Gtz?kLzK<)Ni20`$NLzI5(A*?v^20iqx7;g$bInqn#Nq7$iq6Yb{G}rH%7TM0* z`*mHTw1uQ`>MFG~??kOsYJHgdY0NKj%9IgXXj*%iN5NTP^&K3Y@g`6I8KoU%I+9aN z>C2|l!v>+D#$cgkrx3!j>wJDp|1+(C-Nb&M9@dZ%%+I;&ufrbc-#-*vB3caT^I)O& zQ5_xPFk`_|uHKE&>3au9;l~N-ggYU{XYZkWoBsA#5U6yXSIHfgpQO(ZE_Sh0} zk}FlV#otgBxbnH$rA3|Pf-Rd?Mj}BlXcmC$KNJ(wV+qd7eAmB!K#KGSaV*rd3Rpdb zWj55mM`Q{w$BB*F52Axz%46E!zSN{ilW+r)>6It%GB#LWQbM2*H^P8HV~WKXFeq23 zC%W?YLjQTdt#0 z^SE1MUi3Y0tXhUyl?;oDCrotBExOW#budfpd~eqz%@@U-rHO%OO$_mQ4A@ZEgw@Ce zJau+R&$>>MV_3$$QjU8xt{V)eX`)5cN@_Suf@@hW8aErs3@p$ZN|^&woc9dbVMcZ& zp8*5QjRuIEyp1~Ft4A_TDpn?TcU=4f$9=m@g@(SyP6O5#6I=uK0GjkdZ7tmckdbM+ zehd0#E}hc!uQkI!sa*oonl#?*hiIC@wq+WyOKmpd?^(Gxob2t&q|zHO`zuMroa`4q zsyu|Z^eZpnKR69p8qlqw@xL_M*iK?;Gv2T~QBU@WEl?19eJPd5*8 zZ-AwyE8uKGHc>i0n~otN=(1>aJ(L^s-|bqFkC27fJFKcFBZ;^T)c|qj1F83LQifsm zaJr$8kD!nPorKb}#A140U7D8?-O0hl+^7oX73!K!_zd1*b2nb8Am1pzdg>I07FE$> z2i~ySxpPNgl$b6NR)*q8dmi@#(nwfqO84`<=Umt(n<8Q1Z|xE@hj;MN*o*2?0$3x! zZ}0t#0!f0f)OFSH&Od{S7<$*X7;lCJ2e`OB?E$5EKTHP><@ONt!)?xapz5f93Ev0R zY=?*USp>^`o5H(Hcs|2qEyeMWAx=1^_E`aF8(7MW9IYyor?Ft5x%q3EykB`o3~rIkyS zY_^Gh6D&*8q0^9?a7!dA1j|4y7w%ORBVhx7+5pDsH8mKbg79Hp)k7rcym@vp8F$r| z)YBC>ZZb4Z$k&)$l-83~N~IZZ>7j7E+4J-ed7IMf%A%B=wl2Ce%~H7l2f;AA{!=Fe zzfpTbZvRu!t=LV|E_+VM*KG~udLGNswe(o{R_By}iZ5aG!ozAbkLj4kG?w&4+G>y{ z276?l0E^;y1Gff3Ue6@Fy3c!~oDiSnOm+g^XSD>zHgIvObeS^J?-;rYH7iJRKJ^nu zhz?$|!pQ7bQe_q%coV(Yi}*?&e)J-vT)?~G!3zCM>6}^#lwErheX|$qh}35@?#ky!FBOnVjk3^paR{GDEkAB z<`&kqL-s*JNph!7ocItey(vw9ZgMbXKZm}YqCHc&50?tY=2)-AK7pKdDbEJ&dCSlq z8&=jWa6(Hb%HBj@7J;3mDJ^srbpJt2Qie^LI8aKdx~6th5wjcw_B_=mC|⩔H%>w*J+q|V| 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

<_k|M96o& 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ⅆb>9L}xQOivkJXlr| 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

hs^Kod}Qg@D85qV8g6 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%0DMftX{41q~kletkMQ+6yrIX zh*vJ?nCE>$=IJ5cvj8$GmQUk2NXRjZ$u_`lFrtd%e+!zB^eMz>lbTBw+{e&F=j1${ zLF{Laq6hL_A>^*B9^^c|Kx{up(F6G}17?$2QGg~p>8zY5?;P}_T`hBrFKQtF#Fccs zYxR=efdx<+aT=E-&(>mNLuVVpQVZJsmG=!Nf1-^p%@z7?)r2h!8(0o z&}8!$ zXwj{d44|C2L3uIS#EQuN;t81aDJd0q;9ZqWU=ZZx;gJxlI3>u7^8PGFgr1ufEXZ6h zkVd00v}a)t?yZ_qekBQ&i6dxqe#@fw&7`wND^0uGoGcs#*e&jpRw5Y$r?G2#dBrD# z`blu5qVNvd@>~utE+F(~@ksgY#A5E}CG&lb1V%1gupCJKcH`TfU)@#RGIG(VuuZc)3P?rs|4FsE0~j$DITzfSmiG1$4QH_-kWRv+I!OedXxa(vF6NGJL}56TbYNdYsb`%4jZ!e7cpB z2Es{HV<{mBF?m`GC0q}c(o1o0aW)A8>}-NSSVtRRe=)~ z8>}I^<3hOo&tNqWd@rlt(1W9m`l;&fHSqgY7>_ABY?{eu_#PAZ6TuZlKgsrz^ z_$o(KR$G+*9k9DXD>d9=P#X=9{Nh)c1mVg=Si1d{GMKPPN7l11BxwMAQ6{Y0mG3C6 zm6e>#+-y2z=%GoD62@iHMEhD{V04CJyDYJ%^7=Hk1V1`;J%EUc@M)(W61&=2Ek2 za|aD>%;35q1;w0#V>5%5kj)x^4E*=klGglz{B^;>!GjtPdSo&fU_@Y9mkLac<`|5; zuQ#N}Q;g73_)!}n-j|DMA88AAz#Fu7o9)fmSPQ(A)UplC>KnPBRYyHd&dM;Cx%8)- z@21f41OGy5mFYJ;5QgpYxFRQrm3vd>hCk_Rhqh_cl7$LI$SW6)n?uC!TFSox$B+Jc z&ewG8@ka$)UWg99)<&Ls~-|2U@HoWDl1dJqWb7bDEqF639aogRY3W=-ym}5V_M* z86Z!$TFj_j&t)%I@VQTEHWRP?|6ghV776m#s4)uGtxR*a0av>Ft4n#2eBRs!W~k#` z=>HAvCuJ%MrsibqL?mGKSvj`@KtbqgkLu2y!ABRhbO)y>N$BX0X*ft2yETKfmMCrf zyHO~VYwbHGUh1O6Q3GbBP4wtwPbD>2@Gn^X;~_ot31rA-W&!r}Oxut&xj>B0bNSZ* zNvalw)5;n_)(1;@DQb3Evh0VM`VA9NAry&ImN>28?)F7<2E72XIcQP?pfG>y5|jx; zD_(|QraM(&Y^Rmx;VM*Jm&^1+d;-)82N&_+bj7yoVrYJ!@(LQ??O+EOqd%%j?H9*k zbcq?0)JcMGC5ftim&@JxN+Z3dr$OcvjMr*W4L!;jZzyggSP{S|W?}c$G|k6j>l#v$ zmzutL^IVNAKbI@m4vwe;15g~$?GJAZtyI!KQkmT z+yJ-Yz{Fqr^ug9yW6{pTplMO$oHXjOnXoUhj~$Radr4B5M6!ZKseJgsLbQ-M^pfAC z2 z8*me|!i6rtzKiYh?13>>m>0|P`I<1!H)6=jPF}O}?UcU4^r=6nk8RT@`YJF#ts zI_*xuB-z`Fyf9LxLxha+!L-@lwVqNF%5m;DACMJdSF2?>WYpq2S4dJbDatm4bS_x1 z;5ZbX^{av#%YGqNzU0vv1ptArx`8EqEF%avL*5BlTtopqNu+0nUse}4SDOP#^pXP0 z*Jj0C_S$%{d^2w|fF{iLyrLnaIdb_I529)P8MLKa4nnr4U7aTTytHqeU|E@`R!-!a#K7%A%6Nm?p=0zI?66qd0z8+=3Q5n8AUIm0 zu^?NAOpEQbTfA7)q|0-A_r~Nt-rJnB4Y+XlsJ)ZzEe1wYmr7qBlF0t;!i7sIUHE}F zxhH_qc+Q+F0lLE3q2rXf4o)bt_H&71BGeO&<2|O+!yG|&rM_d3i@n#SHc1eLze*1(^FP$4K&r3b6dgAAj*D zMq20mTFNhxrnJD4-foI=>XH2rSsbM<^5vDUA5mJT6k_l!o zQ%4CZGMu?ukss5yFHfTIqg-jhyBwsXgoGsgem4gTQkV*wMzH9mp5B^nz-+pcwROB7 zikQG-87lf4UWog@E#NvBv4pkG8WU0d-e3{HeS1vFz$RTfNwj`ri-##0^zi1*yW{Zm zREuanL;8;{!-qRKJbg{V>|i-$sG=Q`JV>;;M6!c8TI zhi&XueMQi$72T(kHS#DD(xFoq zw(zIVf2#&^51bcEFMB4qh^y&}c=q$sv7UIVEWMAPKIz0=>e0Yp$M*fjUsoxg;U5|< z$bk&*r<6h@p5K+6p3?QK9Q+H61^c(oKRa5<2NyW<`6mIFp9qR{wBji4$|vN zr3PYn$EqALHXizd_?s&G%O5KoPm=2@qGP1YYtHyKS3V;D5pwAsGXwLK4MOp`cyXbG zku>l;mw%b>#8K}w;6s{nY+}wa7)(v_6e#c4yt-DX^fo3l&JI9@sC2nbl31T1SarOl z6IDXN^)@EMuBfoUVDWv7LQrx;HBc_eW&vzIt%75-p11#s&k(q91Y=OovGQM(k-<`C|{0s|_ozSzKwjz1;{| z;|?=_=;w3bnwP|zA-8GiHnLI^f?eHr3rXYh2?k{RUDfefSF|Osk!>AI&(-lB^8apM zym-NarxQ|3%QO`x2+x@jY~E~Pi(vD0{w=)IHL~Q&mFx3<{hFt32ed8|EUoyziiQ*y;+qy^)CW4>!T( z$NPRjo>iIfTwwACW=YR54!&kAd|(utk6_Q~uF-VOQJPSSxXp-@pk0P|IDECG( zHM{juWVbZdh$UOgbMB(2y5a9XIY=KgZC zv!P&W?1YZbzlv8of4KVNm4J4__y82Lus7RBLFOcUf&UKnAuLcSM+}HGFO8_@m)zq* z&)oT3V4A8h=?i}hBNJ3s6*1N#vjM<;?UAdpGnFI9fAG|4n#&_j;XU z;2!mmBXd1$1EdWUf{gTH0;PxZ_<*=XjK1W>f->>x~Q(r*vpt&068t|U_RsmSQ7rWQkGm|4^fTH3dx;68gm_?P|G>6n1MT}Y70a& zzy@E)f@)H%rJs_@!22I4zog3H7}GgczNN_XV-iG24T)+7gD~bNDPd}`AZ9tf*QmUN zQX19^UBbiGENPqx;RpyyT7mYgiZ2civwjtYIh3TDu%3gM}@KcsAGNgNna;U&f+_BmxR%DCCDFlLL4NyM~FZ`R~ZS$f#LIQFg>rxnTqvBTM|kobhX zOZChjY{!7L64}jA;UU=9uv7h7jDgfK?;Jg-XV0Gdnd<3Mm=I;g@=GT`v1_`NKCYSg zJEtwO`J7wI5-sqZ1R-c)qb%t5hSv2O@h{uPt{Pb4l;;_D(H~gQlEVOskoi-sX-r7* z@Tu)BEdR*vU7vGh&7wa!&%FH-Zd`rv(F3p-#Vt*lwkLIdC8L#3-Y%ApvGaJHdX*Y@dKG+-ygtjMfq#zK5-2F$Z)lVvIW z{sm3TcR1i3nvOsL;uidaLmE_`!w13Iq2UfTK>t|5N{K%Qn9v>X0<{)WYQ!te#QC_T&P+zz|tdk+Kf`D_>? zxlB#x9bjW~ejTHTc1d<(i7uyz;>Hu)` zcnF5;Q~l%$TqJ?}rR)?0&o|f#@s~hx0yrE&6b%StNDm85KAWtx=4^X~Vph!L<~#&r zw)Zb6K3XQn?ehD?$*}FY7?;-##nuCY1mT(nLY_54pyq=GW9)!%08#kd*g;JuGe4diB8kzJ$ihAoA)L{hftmkt_Q&^rE9^P(?Qo;WrRH*!X1H{`?^;3Vd=jUq7cMxGnu|f+ zX!BnSP#^V!hOECZxk@}w}ABXzW(Q> zt-t^I!-_xu+>A>S^1A9FO=}z~bKFIDyEW3HA3K7*27;xDXQ5X-zI18B+O>nVe?f;N zEJM#9(b4SMo17%kZPf$e*U!RGota@*ewa6GD6!Tom4X5c_~h^U82f6D4KA&%IK*d8DD##pv#4e5i^Ohb75U9jLqKu-I$kf_57-PZ znNdE1qV|Y0y%3msLCn@h35cfQddXE@Rk_6U2n0il_Z=IxQaKfU0qeRxjZYZ%JOMkY zTCo~|qYqor!m4Vg+4cn)v>19rYUQ1Jnn~hAosj7JOC2X;s*6o~8AWb8wB4r+U_b-< z!0!jHK&;htJ0|97HM()b{6|#E*3$c-b4!gQWdHN|#I+SIFV@Pf4(aOd?K`$_-#*KV zmCwOli{6;~p0F^ZpSpQ{{IVU%N!UfWVPyH|1Z*vD;$N>)!lD|_GJX2=X{`KBMZTvY zWeo)N4WuXm5I>^ywjVZDwK{DuSG-P7s9S5SFi@)2_`|wUJiX%gJuJr613ozkIZPj@ zn`>rHjV|{Q%k&$iLwvAyl->}!A{QUjOFy`RZtpW#68F=zA}6Ui+|1lxpfG#IO~MdDe)Pj|$i)}? z=ph&mx%BsobCVvO&j+jSGQBOcT+;O~WttIAKh5VDQRZ3=`2~(U7BBuFOpvX=?X*#! zyi(5>cff40X3IN*z&R}CVcY7ZE;cxybL-a@)eL>DX3a%V3$3v*(>~AY$|fPSuXD!* z|LIPA8DjCepRfP;qs(CCkjDV^!X(3Dr>Rtyx_Ulz8@yPngB()Za>@PI-NaYlCOa-Pzj-t?F? zIp)@=x^Ub<4|iCxREM*6pRJ|Wx_N5ao5B-EDI6UL>{6GyDjuXdBLclRVV43k#I$jNfGC4dFHS>@fd~(VZM!i{Kg4`LYO0tDp zwrsg85KxF2j1h{|tSHRPT0!>{1yI!(XNd?zyIBSQznPr&kgT+PNa6CN+A#jQR-TJ7P-)KhKdwBRPDa+23~DPAl|b= zVhZLuL-*KmNS-gT30ERn!3@!qdYcFXO*@GGXzJ`N_NPyy2FgsHOrZIQtmvtb$~&#? zY4aqkNCdWIUOV|!FIcCN7I6z<@7(o4tRKb(I}yuyj3gR{^2)C#WS9^qwy=&i2tN~Y z3gZfw19typzh^_V5sBo1q-4qZ4RV4Dd>88G32T=e_Cxo&$xw1Uzd$wvA>UpAcDkqv z)3l$M;9ezG;wCu*J!cse*n!+AhCQs46zadqx{CM3MEMV8~izJy|VD;`Gkt(kwEjw?0sj>)?d1$gF?IP zx(n>*>@K3q+nWh`)eM~DYjSBDxvZ?TCJEQdHb^C&YGHC?NF+1t7tZ65{){1CF-)lm zJ3@;2%H4r=bLNROq}W zu-l{GNdM6vJ9n~|i4dtV&lYi?lcUjUpAZKXg>W!=cSOX{H?mhFL{j*SB8jbxRKm$U z{yo`wDsVl~dV>~_>o%Et(iKIE%N@>v|7m(X4>ZZuJw$_$;}qH8Hwf$MfBZqivQ2NF zD6^-Kn?C)K);J72is2k_A4CWyA7TKze?OgD4Wo z4&sPn3p*frB1nXy3zL{092pHtQBY(P|bBFkvq@_unc+g zg0mfQ|JsyH&MImqjO|mQd?Pb5} z%?0}|ECu+qy8{v-S5O@#Ze7(Eq*r2%U~gQ!bK7CV<#+lrC+POEDj`1A#i}Gai<{f_ zhb#b=xWEp(J(*Sjd(gp6a{M)a)5rNh4%6f8tEg;2c!?Y1i(j5DJoZg*`TMX_p(jQq zJ2%PNJk8nB&k2LDxOA_fP2`@m#rNaT{Qlwt!61*L^MG`>A1?M}O;C&|$IdtMkE@FZ zTZH{K-FU}e4c(6LPIbT#Y`WP?W0Kp>6=w}h4^ElW!opWXtTXcctjWvLbID~s34dqVC`%LJ{N}-^V}G08N6-r;kgpnY$F`RPK>%S7Uvy?g*KZD?*?~wn|lM! ztnP+80)%W3zlvIXddC3VxGVp9ov|Z~yZ9JUil_7~gD!nl$;i?Z`S<;!f%ZNHZ}AT{ zjJ>D=3y;GKPe>O9R)qgVu2;w5`G)-#k@!EgqeC=&-(dbbJuGxMzzY&q6yxscnKW$5 zME4B} ztOguc8M~+~CqcMQ&jj_PnOc>u8kEkzrt>5W)O>3j;^?iz!Ay&74DTxJl z;M}x+UnPi3AOV|5YboLxZu7$e8E`Pzxq=_pico!S@ zDKc7)ves*CaxB)rGkh6(oFEa#oZN&8C+fyX>7{74nMD{z57zbKjO~>ejBvadgUa31 z^%|w|Wc<0^A)|^p+RSft--wy+k7CkqSL*Q7__d%j zH($VtB^U>tQ#RIpRoc;z3kQ|qR*#0R=VMB1yX4X?#3qj^_420yE#qpMQq_e8jktHE znHjE6skgn(%^x&PdHEz2XC&N;;(3=k* zKD=$#+QUZ-$KiJx<({c#VPhobxK;-SB;CKoSOWrf?Ibf5k5y9?69DhZK&2)l-ubV%X7Ara_u1SYmj)^UD6C8i=5@1uDu-o?{ zAdd+fgCXO2f3d89$m{Ni9DjE}`-Se!!PxPX)=p6HvETMk0fA%(b`Wy4i#eIIiI0(| zF3cg)!{H(IlLkqp%02;8T;_g{myc<_%_kOnH=JVdXhE(vCMuVPmk7~H0;09tSgxyt zEGPj=j_ts%2u*e$R5Metr}+g_l5d2e4Lg2AA{VzPJ{dgnrnZhT0I|58N^W4WOL8S< zALOW%MUyKixEav9&q_i@FfE(+-c`TxU+_r9Vw;hK;nTzPNr?@Cxj#(0Rak|qeg7dI>add01^{(&_+@UI;tF~a4#{pJAdg4~~e%&ofF-UQbYeXhkPKlcZer_>o+X`ED_7by!E zVRoK-o*F8RnjETz{brw^?w=$<*KEZ@B|B@ohoC9hfgqssLs;XY()8eQs9n-+roN74$Y)KcGqS zOsxuXLE}%)WY(8tbxCK?Ot;%TGG%ery~PBXi)rOaPb)L!COyAvL0?(Q%lU{?T2l4m z3@g@fa)}K(RIV9Ro$8mS&=DQoXShnJ;tAgC?)PG$OV}MwaETtxM=cnVqbZ-~fyS?c zB=`ze63B5ZW-Rn#0|1@DVyo8NgMEU9kTZN-gS7%N&O#?(a*Ii68fM$#JQjnxM00Jz zlOD!3pK~d1UNR<-gQgOz2~^QSdL1$1GsMcXp_q)twr}0Kb(h@a4Mu zviX1tmN}-fN{EmqvM*fX7~~>f5~UEzQ-1==xMjjio<`2Y`Y02=pn)Z6)dgsPwJP;A zDDCXKSl9Vl^*Oxw7lwq>i>qQRi#4p9U#bu-Bj$eb>WNy$eaJ-(rBqss|Hlo_wK%yx_tb5%LYIs_F(L3`c;~1{C}! zBAnO$201IrF)TZvz8STa0#-ML9Bq+@t*@O$m-LQ+aVwm+mmx?0bSm}jWf9BAvTnE= zc(~Kk($qU;VR*(>apeWxSO2!b8=h7D9G@{=0Y1dxg+!^Rp@-K%zUwV~86tddEYJ$x z^vCcDH}{KkBuRbK52NIs9|WUKzE}^~xABq7kBNofa!6rJJzn*ZD@+3kWqh!ngf8@f z@*N?*Co!s`|MPn_ClGQnt52NJ2lViP3ZEu^=Fiw}C_e=f$NbjZ@+>E7-Ks&Kq#tMU z2kTEKg}d8UyRi8p(57KiW_p`qdV(T$US|l@I!yH=IJ8TwgFia5c^!d{Ky9csXyU%+ z8Dv1yUPB+2ctrVWhHgW{Dvy!P7?{4XwW@mq&J;o9Vh806g2^E-6BQE~O)K;9$A7>& z5AWfm6zXs^} zcdW4MS!2yr{#*R&qH%A|Hzu0n6Otg!fZ16g?$F>RNp1Ej1DTpDOPsuMTU!t8=IFkm zT7i4yXDPk)`l0Z=paqR1@_VM$Hpk*+AYWaQvx0c3{!)HQ7-wPX)WG7Co@fo?-D5Ks z+#RWHaD`pow3~qWyn{Ib&GJ!YuEl1J9Ikj=Ue@;bD1*{%M3e`XyzJt(y`g}JzC_tP zGVGeqdR$QNTZ8<%KRfbA+LPOCI~6Ln+>zsX(VE`#SbJnz#Yzl}A{U_1bi3S<(0sC~ z>Hx34Zy4G#rV!73%y_!wV8fDpz`|`j+Qp*aHuR;?fPUwaffu?+!^R_0C$yFOO&pE0YQa-402PZu)pM=DO08>MrlRW+FhPHv!5wd zmz674qt~r~^n{+)t4lU{pgD~ar(3o#(+W#LnV%ojy@UB zbJ6!YXuf%7v0CnH?5SBCqQpwX>-ul%0YipaXwJ(irL=dk6-Vm!ZN|O2e)hRMdGaU} zBG~t&U%SKpES6NenueRM;rO3lC9o-8YdEHyA%R79Ld=uF*h+MA(XfRO7I#kNVbP`j z4b4>W$M6Y*Esl*~Fj=rmwK^iEU+aIqYqsi-OAzh0cfE9OeSx#eOMr zZ9D#;9CbyAW4wI#7w4AyvC7xDNc2*vujNq`Iz{vu{qsrDJq=nlP>1+*fnZpz>lT~* z{4P~bkZD%8Rbd*Mi4@PI$&kylPuJJ^r1nvQZtfxUGHk|Y;-zv**e%~<6WV9G zo>aj{4qw+sA4uyG?Y~viPv%jhXDily{e7k=^t$FpSUY)3ZhIJG4mO;CyIsR077EQN zO}++g{97KZ5=72-(5kC0CVh3mf<9=M>OVyN^zUNO-gNNf#U%Vee05A!v8d=B*#x}- zS843N{g*%x#w82jrt~HXjh&GBmsRH?&fv zO7iG6lI^YNq#Pz=F96$Hp>+5#rMZF4hPlB~ITaIp3HkGW$_Cg5IXv%^lQzC3gGKlc ztr>za=diN_` zC;mN%X;hgYSMf%HGN)_TZCoE7#nlZq8oD2#>C9Dl z8`H4VVYpw~WpJp5FR1a5Loq{!bV%pQpv?0${NJvD{O?XWg+^BHayawIrB|Glh#*AupXN%>$^8?Y*YJ&G=t4?2iz0OurUpkNo$1hese5Y7<1^Xr^r=t zHXYWjn@Jd@>qmvuoB)nWCHQqO53w?vW4Eq%c485HWwC_re&5~T0AFjdTE_c&s!FlV z#JdvxZ+A3q|78E^QK_4O{lak1B{xC$+jp*Miyw})cSR$32kAr98Ww@;Q4ZwzY%RGo zN%g{Hm~n!ubau<%gBDzspE$$oP4-FEQ*aFbApYLC@h;J&E`A$}ZhlKhKw%W+uC(AW z`0Nfe0SP{67u^`M7O;^`dkc?e`WYckXbH%X!Gi~1zr*tKo6s6E1rW~*|0Djw9o?8m zht_)XxUKbTv}Oy#-P}2G`SBs?;ueTddLTehRJVI zT@DrCht(%~(l{pt!B^w(Nv>ZLh)+bI=qN1T26n4Hhsv==cYO0TPffgf)9k9rM%QS9 zv$ex&xBk-`&6#;WYt&)NXIuw8H8#q$XXk>HhWq$@F$|LR`98e|)=hm@6xp39 z5qZQ^9?4LxfM>(DRgPLP>l9yA~&7;a&TSUI$r{q@AksfKL0 zoFe!cjiEBeXpG%@GQa6+S?mhTCRsd|kfsS@;SQboHk+w29=Qmhuo7=(P&i|DIYz3* z()8A~K~+M$P#p0jW)zsm7w$^O@^YbY6=HEb-p|ZK|88hQa^6ie{ok(rrhk7-SABPyoooe+r>#-@5}6SdOdnh}STYP_ zJr-^bAs^hK~{$L;*tk?s9P~HF{vnn{(}f&Sjd(!Wsn@nCr*-;Q{LT|rmN10GWz`nO{ z>M3|fx&l4JU3%*ncjI6eVJLf7ZP$b!v9bQdU3M?@W%+jZ_kCJ-ZTNPh4Y*_1X8C>|7f0R-Rk5#Z> z;EqwAk;CP36`e{Fj5qznez_$Xiw&=DGl7;KgVbFxdkE)oE%0E_d7dyvx?9M7ajmFM zDoK2wi^0hC?}o?vJ06uc-ww+_N28m6%8ahm_?D`h<-p9+Xvpxt1G^ ze)P#1xGX!`{!Yo%XzSmaNE$kIQ^2WxLmHk(E_4v9puSNPZ+Z} zS~FLi>TvU6s>}>>elGXAciM@Vi7M z^+eN(7UadRbKk3KuY4n#V{7Posfu!bd5fm7Uf|ht9*kXim0AE;1Wgw8OTnu#SBWeM zC{sLLEk?P9(!gO(YAs)lm>$QzFY>8RF1(`O3UaXHgpc{x#yIGJYZHZGkJgr9a8Xfb zsApCD_kcj5vT@%j}JgQPRazdxR=;q(_4$_TLUin(na?PUz9~VSXzO3Y@Y) zJ(k#_NtH8>{Kr7%p`M1|!C(%Yz;Q;WxjQ{hU)rqPzVvK#T zuHm=hHr*e~hHZd)Ll%M8jRmyVOXieaztwa`V{$tPz;&QiKXjiqBZaQ>vk($504 zNv+oCiz}-K6OzAqL&1$2BnCoAgpuTnGos4UeF3*z<#GjofHYn z7(=V2+XDMAZC=FSe3THU_80xGBT|~#AEr6~k;XUeQckR3*?_xPMij%*B~FJe#Apws zy~HMX7=tbilcf+Yg`aQhn5qioDaojT`s-A>5{5PYBZaCCNEEKr_D~Y5^1Cm|mH5+b zMu)q3daHzS`%6Ghe#<5cf-8q#FeUNO^fx?+77A!uDS_J#dt6m4LZ5vKWl#&(S#)^P(4nVGt-9cKxe_3VKR= zNDb7Rc8do7QoW<;eq`%hlx)fB5zn(7^wg`s|K-83^@4s~Q~QgM%Q9B)K4tw|3;c}R zC9Lv&lH3&wNigfQQ5Z>quPr4#GgcgSA8EFe#27a3Fwf^YPd2S7wdz9CGRPm|!xdiq zB^IO2I^_HM<*{9*xk$D{Et1GOJ0N-rplol7BrBA4H6_Q>TOsjT2YIO>lI+kLLQi|j zW}sc6hY(c^wp7+=b=eq0Jy?43>8G`vkqJKex1)X}Jn5bv`eDUefk}$YmOO{w9q#W; z9WW9_7gS>ePm=ng_-l-d~EBJJD=H*@s@^ID?kEE`%kzaXG59>Ea1i%Gveb8-f+Wb{6%7$%`m(I#=;h> zjBR#UYk|!z$HJx|w_OkL@>cgg1wWhi_(pyb~$hAR2#bnF7{h zvkit@B>QOzdJ)FLQmn;1Ppr#SxNzY<@q-lQ4{2(gtWRj_1)&9mf&%{^7uEOR+{@`4 ze^nF=nGV&(wTtXTWdQ56f@_MnHs;hW>(_S>{elqb>#@2%0hAa1?x8KvbzzkZH?QsE zg97}4-;FKDR&Wj>ovb*R=bGZ@yhh^Qvy$Hc^_AtvbAWE$U!~<7kVp<$Q2?r(sK-|@ zS=n~-A6#NM4#ZSW%&`??%g@3g>vg>+^FTj?y1C>YWEMs}aV+Q3L}0>HEcCdpBlS<0 zUt@JW*xhqrod&zI#$Dktxk$nC!$F@FC4K6hFiFBNNGJDMnlV0l(TZpypToZgQ2 zvGCNNxeXeKzp5z;lO0>+*jSi&J5DYAV)UDAz_ixW;c8m?oH?^(srWmgRTQyu(({Cl z^uubIP@g#w~Z-Mo>lJRq=jh(5fdJ{oR2QRTp@G+D zH_Dx*TQa@mJFyI>gim#C;XKY;)LzEsIMIxhu+h#QsTMSF)Q*mM7LnUq`!*?osBcyuH_X@#-F6oZaVkpW#21=*Ga9Fhw&-lf1(D`wN6~gG@p5^ zSxu=OYjJE`A`yMpMP0dL-?e6f9oVsX>lYSZv=5SvA2;^ca{SB!R`fIzxi#apqM9bZ zXn5b_CmTcV{MQ1fg~9j0>)Wkx3t!9inzo-DQ#1xV$E{KcTVzwY3^?4WqBB|(=sA6` zbPI^Do$|rrU3EeXhslvpf#3v6QSzG;5`8-Y59F`NVkn*9Ync!hrTyDETs;u)*9dmI zdJSriN5t*g?6VZBX`iRkT7IS2O7D49qXzRc$CMj`IM`0!KH-WVI{${QpxgTq_RTm= zup7~eLj|hn0T@rZHMna_9BJ61UqYwT$qtF0$yh}3j5Q3FDoAaV$ZdyyrSyzXYV{w` zOV&qd^P8USlt#!jGhE^h)y1B{VVpqeDkmiP@?xvlSb^dMDp492<^%;_t3Yynf$+!% zvThFej$ZnaTRuOomj7&GEuS){T}E#CK-zn-knMv#7ni!o=bgy-Gx^>}ipBVe50+*& zxv3b^aqhPbbKFWvjIatCK%TZ`;W1T1jMP9+>64aY-`yp#WiZI+0siMla)dv#{s6N8 z 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

f)1dJl_*gH`6*z{M0J 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 zГ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%0D6I-gNe@SFfIkiaH!u%8~2qJ~d!&qqBfK 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

~I5cZWeT(cb@ zjMp2(%VNNr(X>?4wU^ZiR|*= literal 0 HcmV?d00001 diff --git a/ggml_old/examples/mnist/web/index.html b/ggml_old/examples/mnist/web/index.html new file mode 100644 index 0000000..ab1ef17 --- /dev/null +++ b/ggml_old/examples/mnist/web/index.html @@ -0,0 +1,178 @@ + + + + + + MNIST with GGML + + + +

MNIST digit recognizer with GGML

+

Loading model and data set, please wait ...

+ + Your browser does not support the HTML canvas tag. + +
+ + + +
+
+

+
+ + + diff --git a/ggml_old/examples/mpt/CMakeLists.txt b/ggml_old/examples/mpt/CMakeLists.txt new file mode 100644 index 0000000..09408f9 --- /dev/null +++ b/ggml_old/examples/mpt/CMakeLists.txt @@ -0,0 +1,13 @@ +# +# mpt + +set(TEST_TARGET mpt) +add_executable(${TEST_TARGET} main.cpp) +target_link_libraries(${TEST_TARGET} PRIVATE ggml common common-ggml) + +# +# mpt-quantize + +set(TEST_TARGET mpt-quantize) +add_executable(${TEST_TARGET} quantize.cpp) +target_link_libraries(${TEST_TARGET} PRIVATE ggml common common-ggml) diff --git a/ggml_old/examples/mpt/convert-h5-to-ggml.py b/ggml_old/examples/mpt/convert-h5-to-ggml.py new file mode 100644 index 0000000..0765011 --- /dev/null +++ b/ggml_old/examples/mpt/convert-h5-to-ggml.py @@ -0,0 +1,158 @@ +import sys +import struct +import json +import numpy as np +from transformers import AutoModelForCausalLM, AutoTokenizer +import sentencepiece.sentencepiece_model_pb2 as model + +# ref: https://github.com/openai/gpt-2/blob/master/src/encoder.py +def bytes_to_unicode(): + + """ + Returns list of utf-8 byte and a corresponding list of unicode strings. + The reversible bpe codes work on unicode strings. + This means you need a large # of unicode characters in your vocab if you want to avoid UNKs. + When you're at something like a 10B token dataset you end up needing around 5K for decent coverage. + This is a signficant percentage of your normal, say, 32K bpe vocab. + To avoid that, we want lookup tables between utf-8 bytes and unicode strings. + And avoids mapping to whitespace/control characters the bpe code barfs on. + """ + bs = list(range(ord("!"), ord("~")+1))+list(range(ord("¡"), ord("¬")+1))+list(range(ord("®"), ord("ÿ")+1)) + cs = bs[:] + n = 0 + for b in range(2**8): + if b not in bs: + bs.append(b) + cs.append(2**8+n) + n += 1 + + cs = [chr(n) for n in cs] + + return dict(zip(bs, cs)) + +if len(sys.argv) < 3: + print("Usage: convert-h5-to-ggml.py dir-model [use-f32]\n") + print(" ftype == 0 -> float32") + print(" ftype == 1 -> float16") + sys.exit(1) + + +# output in the same directory as the model +dir_model = sys.argv[1] +fname_out = sys.argv[1] + "/ggml-model.bin" + + +with open(dir_model + "/config.json", "r", encoding="utf-8") as f: + hparams = json.load(f) + +# possible data types +# ftype == 0 -> float32 +# ftype == 1 -> float16 +# +# map from ftype to string +ftype_str = ["f32", "f16"] + +ftype = 1 +if len(sys.argv) > 2: + ftype = int(sys.argv[2]) + if ftype < 0 or ftype > 1: + print("Invalid ftype: " + str(ftype)) + sys.exit(1) + fname_out = sys.argv[1] + "/ggml-model-" + ftype_str[ftype] + ".bin" + + +tokenizer = AutoTokenizer.from_pretrained(dir_model, trust_remote_code=True) +model = AutoModelForCausalLM.from_pretrained( + dir_model, low_cpu_mem_usage=True, trust_remote_code=True +) +# print (model) + +# print(tokenizer.encode('I believe the meaning of life is')) + +list_vars = model.state_dict() +for name in list_vars.keys(): + print(name, list_vars[name].shape, list_vars[name].dtype) + +fout = open(fname_out, "wb") + +print(hparams) + +fout.write(struct.pack("i", 0x67676D6C)) # magic: ggml in hex +fout.write(struct.pack("i", hparams["d_model"])) +fout.write(struct.pack("i", hparams["max_seq_len"])) +fout.write(struct.pack("i", hparams["n_heads"])) +fout.write(struct.pack("i", hparams["n_layers"])) +fout.write(struct.pack("i", hparams["vocab_size"])) +fout.write(struct.pack("f", hparams["attn_config"]["alibi_bias_max"])) +fout.write(struct.pack("f", hparams["attn_config"]["clip_qkv"] or 0.0)) +fout.write(struct.pack("i", ftype)) + +vocab_size = hparams["vocab_size"] + +encoder = tokenizer.vocab +# Add added_tokens (special tokens) to the encoder +encoder.update(tokenizer.get_added_vocab()) + +byte_encoder = bytes_to_unicode() +byte_decoder = {v:k for k, v in byte_encoder.items()} + +counter = 0 +# sort by value +for key in sorted(encoder, key=encoder.get): + # workaround for key error when c not found + text="" + for c in key: + if c not in byte_decoder: + text += c + else: + text += chr(byte_decoder[c] ) + text = bytearray( text, encoding="utf-8" ) + fout.write(struct.pack("i", len(text))) + fout.write(text) + counter += 1 + +# Repeat last token until vocab_size +while counter < vocab_size: + fout.write(struct.pack("i", len(text))) + fout.write(text) + counter += 1 + +# assert counter == config.vocab_size + +for name in list_vars.keys(): + data = list_vars[name].squeeze().numpy() + print("Processing variable: " + name + " with shape: ", data.shape) + + n_dims = len(data.shape) + + # ftype == 0 -> float32, ftype == 1 -> float16 + ftype_cur = 0 + if ftype != 0: + if name[-7:] == ".weight" and n_dims == 2: + print(" Converting to float16") + data = data.astype(np.float16) + ftype_cur = 1 + else: + print(" Converting to float32") + data = data.astype(np.float32) + ftype_cur = 0 + else: + if data.dtype != np.float32: + print(" Converting to float32") + data = data.astype(np.float32) + ftype_cur = 0 + + # header + str = name.encode("utf-8") + fout.write(struct.pack("iii", n_dims, len(str), ftype_cur)) + for i in range(n_dims): + fout.write(struct.pack("i", data.shape[n_dims - 1 - i])) + fout.write(str) + + # data + data.tofile(fout) + +fout.close() + +print("Done. Output file: " + fname_out) +print("") diff --git a/ggml_old/examples/mpt/main.cpp b/ggml_old/examples/mpt/main.cpp new file mode 100644 index 0000000..84bb3f9 --- /dev/null +++ b/ggml_old/examples/mpt/main.cpp @@ -0,0 +1,1027 @@ +#include "ggml/ggml.h" + +#include "common-ggml.h" +#include "common.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// no defaults for now +struct mpt_hparams { + int32_t d_model = 0; + int32_t max_seq_len = 0; + int32_t n_heads = 0; + int32_t n_layers = 0; + int32_t n_vocab = 0; + float alibi_bias_max = 0; + float clip_qkv = 0; + int32_t ftype = 0; + int32_t n_ctx = 0; + +}; + +struct mpt_layer { + // pre normalization + struct ggml_tensor * norm_1_weight; + + // attention + struct ggml_tensor * c_attn_wqkv_weight; + struct ggml_tensor * c_attn_out_proj_weight; + + // post normalization + struct ggml_tensor * norm_2_weight; + + // ff + struct ggml_tensor * ffn_up_proj; + struct ggml_tensor * ffn_down_proj; +}; + +struct mpt_model { + mpt_hparams hparams; + + struct ggml_tensor * wte_weight; // position embedding + struct ggml_tensor * norm_f_weight; // language model head + + std::vector layers; + + // key + value memory + struct ggml_tensor * memory_k; + struct ggml_tensor * memory_v; + + struct ggml_context * ctx; + std::map tensors; +}; + +struct mpt_params { + int32_t n_threads = std::min(4, (int32_t) std::thread::hardware_concurrency()); + + int32_t seed = -1; // RNG seed + int32_t n_predict = 200; // new tokens to predict + int32_t n_batch = 8; // batch size for prompt processing + int32_t n_ctx = 512; + + std::string model = ""; // model path + std::string prompt = ""; + + bool perplexity = false; + + // sampling parameters + int32_t top_k = 0; + float top_p = 1.0f; + float temp = 0.8f; + int32_t repeat_last_n = 64; + float repeat_penalty = 1.02f; + +}; + +void mpt_print_usage(int /*argc*/, char ** argv, const mpt_params & params) { + fprintf(stderr, "usage: %s [options]\n", argv[0]); + fprintf(stderr, "\n"); + fprintf(stderr, "options:\n"); + fprintf(stderr, " -h, --help show this help message and exit\n"); + fprintf(stderr, " -s SEED, --seed SEED RNG seed (default: -1)\n"); + fprintf(stderr, " -t N, --threads N number of threads to use during computation (default: %d)\n", params.n_threads); + fprintf(stderr, " -p PROMPT, --prompt PROMPT\n"); + fprintf(stderr, " prompt to start generation with (default: random)\n"); + fprintf(stderr, " -f FNAME, --file FNAME\n"); + fprintf(stderr, " load prompt from a file\n"); + fprintf(stderr, " -n N, --n_predict N number of tokens to predict (default: %d)\n", params.n_predict); + fprintf(stderr, " --top_k N top-k sampling (default: %d, 0 = n_vocab)\n", params.top_k); + fprintf(stderr, " --top_p N top-p sampling (default: %.2f)\n", params.top_p); + fprintf(stderr, " --temp N temperature (default: %.2f)\n", params.temp); + fprintf(stderr, " --repeat-last-n N last n tokens to consider for penalize (default: %d, 0 = disabled, -1 = ctx_size)\n", params.repeat_last_n); + fprintf(stderr, " --repeat-penalty N penalize repeat sequence of tokens (default: %.2f, 1.0 = disabled)\n", (double)params.repeat_penalty); + fprintf(stderr, " --perplexity compute perplexity over the prompt\n"); + fprintf(stderr, " -c N, --ctx-size N size of the prompt context (default: %d)\n", params.n_ctx); + fprintf(stderr, " -b N, --batch_size N batch size for prompt processing (default: %d)\n", params.n_batch); + fprintf(stderr, " -m FNAME, --model FNAME\n"); + fprintf(stderr, " model path (default: %s)\n", params.model.c_str()); + fprintf(stderr, "\n"); +} + +bool mpt_params_parse(int argc, char ** argv, mpt_params & params) { + for (int i = 1; i < argc; i++) { + std::string arg = argv[i]; + + if (arg == "-s" || arg == "--seed") { + params.seed = std::stoi(argv[++i]); + } else if (arg == "-t" || arg == "--threads") { + params.n_threads = std::stoi(argv[++i]); + } else if (arg == "-p" || arg == "--prompt") { + params.prompt = argv[++i]; + } else if (arg == "-n" || arg == "--n_predict") { + params.n_predict = std::stoi(argv[++i]); + } else if (arg == "--top_k") { + params.top_k = std::max(1, std::stoi(argv[++i])); + } else if (arg == "--top_p") { + params.top_p = std::stof(argv[++i]); + } else if (arg == "--temp") { + params.temp = std::stof(argv[++i]); + } else if (arg == "--repeat-last-n") { + params.repeat_last_n = std::stof(argv[++i]); + } else if (arg == "--repeat-penalty") { + params.repeat_penalty = std::stof(argv[++i]); + } else if (arg == "--perplexity") { + params.perplexity = true; + } else if (arg == "-c" || arg == "--ctx-size") { + params.n_ctx = std::stoi(argv[++i]); + } else if (arg == "-b" || arg == "--batch_size") { + params.n_batch = std::stoi(argv[++i]); + } else if (arg == "-m" || arg == "--model") { + params.model = argv[++i]; + } else if (arg == "-h" || arg == "--help") { + mpt_print_usage(argc, argv, params); + exit(0); + } else if (arg == "-f" || arg == "--file") { + if (++i > argc) { + fprintf(stderr, "Invalid file param"); + break; + } + std::ifstream file(argv[i]); + if (!file) { + fprintf(stderr, "error: failed to open file '%s'\n", argv[i]); + break; + } + params.prompt.clear(); + std::copy(std::istreambuf_iterator(file), std::istreambuf_iterator(), back_inserter(params.prompt)); + if (params.prompt.back() == '\n') { + params.prompt.pop_back(); + } + } else { + fprintf(stderr, "error: unknown argument: %s\n", arg.c_str()); + mpt_print_usage(argc, argv, params); + exit(0); + } + } + + return true; +} + +// load the model's weights from a file +bool mpt_model_load(const std::string & fname, mpt_model & model, gpt_vocab & vocab) { + printf("%s: loading model from '%s' - please wait ...\n", __func__, fname.c_str()); + + auto fin = std::ifstream(fname, std::ios::binary); + if (!fin) { + fprintf(stderr, "%s: failed to open '%s'\n", __func__, fname.c_str()); + return false; + } + + // verify magic + { + uint32_t magic; + fin.read((char *)&magic, sizeof(magic)); + if (magic != 0x67676d6c) { + fprintf(stderr, "%s: invalid model file '%s' (bad magic)\n", __func__, fname.c_str()); + return false; + } + } + + // load hparams + { + auto & hparams = model.hparams; + + fin.read((char *) &hparams.d_model, sizeof(hparams.d_model)); + fin.read((char *) &hparams.max_seq_len, sizeof(hparams.max_seq_len)); + fin.read((char *) &hparams.n_heads, sizeof(hparams.n_heads)); + fin.read((char *) &hparams.n_layers, sizeof(hparams.n_layers)); + fin.read((char *) &hparams.n_vocab, sizeof(hparams.n_vocab)); + fin.read((char *) &hparams.alibi_bias_max, sizeof(hparams.alibi_bias_max)); + fin.read((char *) &hparams.clip_qkv, sizeof(hparams.clip_qkv)); + fin.read((char *) &hparams.ftype, sizeof(hparams.ftype)); + + hparams.n_ctx = std::min(hparams.max_seq_len, hparams.n_ctx); + + const int32_t qntvr = hparams.ftype / GGML_QNT_VERSION_FACTOR; + + printf("%s: d_model = %d\n", __func__, hparams.d_model); + printf("%s: max_seq_len = %d\n", __func__, hparams.max_seq_len); + printf("%s: n_ctx = %d\n", __func__, hparams.n_ctx); + printf("%s: n_heads = %d\n", __func__, hparams.n_heads); + printf("%s: n_layers = %d\n", __func__, hparams.n_layers); + printf("%s: n_vocab = %d\n", __func__, hparams.n_vocab); + printf("%s: alibi_bias_max = %f\n", __func__, hparams.alibi_bias_max); + printf("%s: clip_qkv = %f\n", __func__, hparams.clip_qkv); + printf("%s: ftype = %d\n", __func__, hparams.ftype); + printf("%s: qntvr = %d\n", __func__, qntvr); + + hparams.ftype %= GGML_QNT_VERSION_FACTOR; + } + + // load vocab + { + const int32_t n_vocab = model.hparams.n_vocab; + + std::string word; + std::vector buf(128); + + for (int i = 0; i < n_vocab; i++) { + uint32_t len; + fin.read((char *) &len, sizeof(len)); + + buf.resize(len); + fin.read((char *) buf.data(), len); + word.assign(buf.data(), len); + + // Convert token from utf-8 + std::wstring word_multibytes = convert_to_wstring(word); + word.resize(word_multibytes.size()); + for (int w = 0; w < word_multibytes.size(); w++) { + word[w] = uint8_t(word_multibytes[w]); + } + + vocab.token_to_id[word] = i; + vocab.id_to_token[i] = word; + } + } + + // for the big tensors, we have the option to store the data in 16-bit + // floats or quantized in order to save memory and also to speed up the + // computation + ggml_type wtype = ggml_ftype_to_ggml_type((ggml_ftype)(model.hparams.ftype)); + if (wtype == GGML_TYPE_COUNT) { + fprintf(stderr, "%s: invalid model file '%s' (bad ftype value %d)\n", __func__, fname.c_str(), + model.hparams.ftype); + return false; + } + + auto & ctx = model.ctx; + + size_t ctx_size = 0; + + const auto & hparams = model.hparams; + const size_t n_ctx = hparams.n_ctx; + + { + const size_t n_embd = hparams.d_model; + const size_t n_layer = hparams.n_layers; + const size_t n_vocab = hparams.n_vocab; + + ctx_size += n_embd * n_vocab * ggml_type_sizef(wtype); // wte_weight + ctx_size += n_embd * ggml_type_sizef(GGML_TYPE_F32); // norm_f_weight + + ctx_size += n_layer * (n_embd * ggml_type_sizef(GGML_TYPE_F32)); // ln_1_weight + ctx_size += n_layer * (3 * n_embd * n_embd * ggml_type_sizef(wtype)); // attn_Wqkv_weight + ctx_size += n_layer * (n_embd * n_embd * ggml_type_sizef(wtype)); // attn_out_proj_weight + ctx_size += n_layer * (n_embd * ggml_type_sizef(GGML_TYPE_F32)); // ln_2_weight + ctx_size += n_layer * (4 * n_embd * n_embd * ggml_type_sizef(wtype)); // mlp_mlp_up_weight + ctx_size += n_layer * (n_embd * n_embd * 4 * ggml_type_sizef(wtype)); // mlp_mlp_down_weight + + ctx_size += n_ctx * n_layer * n_embd * ggml_type_sizef(GGML_TYPE_F16); // memory_k + ctx_size += n_ctx * n_layer * n_embd * ggml_type_sizef(GGML_TYPE_F16); // memory_v + + ctx_size += (1 + 6 * n_layer) * 512; // object overhead + + printf("%s: ggml ctx size = %6.2f MB\n", __func__, ctx_size / (1024.0 * 1024.0)); + } + + // create the ggml context + { + struct ggml_init_params params = { + .mem_size = ctx_size, + .mem_buffer = NULL, + .no_alloc = false, + }; + + model.ctx = ggml_init(params); + if (!model.ctx) { + fprintf(stderr, "%s: ggml_init() failed\n", __func__); + return false; + } + } + + // prepare memory for the weights + { + const auto & hparams = model.hparams; + + const size_t n_embd = hparams.d_model; + const size_t n_layer = hparams.n_layers; + const size_t n_vocab = hparams.n_vocab; + + model.layers.resize(n_layer); + + model.wte_weight = ggml_new_tensor_2d(ctx, wtype, n_embd, n_vocab); + model.norm_f_weight = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + + // map by name + model.tensors["transformer.wte.weight"] = model.wte_weight; + model.tensors["transformer.norm_f.weight"] = model.norm_f_weight; + + for (int i = 0; i < (int) n_layer; ++i) { + auto & layer = model.layers[i]; + + layer.norm_1_weight = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + layer.c_attn_wqkv_weight = ggml_new_tensor_2d(ctx, wtype, n_embd, 3 * n_embd); + layer.c_attn_out_proj_weight = ggml_new_tensor_2d(ctx, wtype, n_embd, n_embd); + layer.norm_2_weight = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + layer.ffn_up_proj = ggml_new_tensor_2d(ctx, wtype, n_embd, 4 * n_embd); + layer.ffn_down_proj = ggml_new_tensor_2d(ctx, wtype, 4 * n_embd, n_embd); + + // map by name + model.tensors["transformer.blocks." + std::to_string(i) + ".norm_1.weight"] = layer.norm_1_weight; + model.tensors["transformer.blocks." + std::to_string(i) + ".attn.Wqkv.weight"] = layer.c_attn_wqkv_weight; + model.tensors["transformer.blocks." + std::to_string(i) + ".attn.out_proj.weight"] = layer.c_attn_out_proj_weight; + model.tensors["transformer.blocks." + std::to_string(i) + ".norm_2.weight"] = layer.norm_2_weight; + model.tensors["transformer.blocks." + std::to_string(i) + ".ffn.up_proj.weight"] = layer.ffn_up_proj; + model.tensors["transformer.blocks." + std::to_string(i) + ".ffn.down_proj.weight"] = layer.ffn_down_proj; + } + } + + // key + value memory + { + const auto & hparams = model.hparams; + + const size_t n_embd = hparams.d_model; + const size_t n_layer = hparams.n_layers; + + const int64_t n_mem = n_layer * n_ctx; + const int64_t n_elements = n_embd * n_mem; + + model.memory_k = ggml_new_tensor_1d(ctx, GGML_TYPE_F16, n_elements); + model.memory_v = ggml_new_tensor_1d(ctx, GGML_TYPE_F16, n_elements); + + const size_t memory_size = ggml_nbytes(model.memory_k) + ggml_nbytes(model.memory_v); + + printf("%s: memory_size = %8.2f MB, n_mem = %" PRId64 "\n", __func__, memory_size / 1024.0 / 1024.0, n_mem); + } + + // load weights + { + int n_tensors = 0; + size_t total_size = 0; + + printf("%s: ", __func__); + + while (true) { + int32_t n_dims; + int32_t length; + int32_t ttype; + + fin.read(reinterpret_cast(&n_dims), sizeof(n_dims)); + fin.read(reinterpret_cast(&length), sizeof(length)); + fin.read(reinterpret_cast(&ttype), sizeof(ttype)); + + if (fin.eof()) { + break; + } + + int32_t nelements = 1; + int32_t ne[2] = {1, 1}; + for (int i = 0; i < n_dims; ++i) { + fin.read(reinterpret_cast(&ne[i]), sizeof(ne[i])); + nelements *= ne[i]; + } + + std::string name(length, 0); + fin.read(&name[0], length); + + if (model.tensors.find(name.data()) == model.tensors.end()) { + fprintf(stderr, "%s: unknown tensor '%s' in model file\n", __func__, name.data()); + return false; + } + + auto tensor = model.tensors[name.data()]; + if (ggml_nelements(tensor) != nelements) { + fprintf(stderr, "%s: tensor '%s' has wrong size in model file\n", __func__, name.data()); + return false; + } + + if (tensor->ne[0] != ne[0] || tensor->ne[1] != ne[1]) { + fprintf(stderr, + "%s: tensor '%s' has wrong shape in model file: got [%5d, " + "%5d], expected [%5d, %5d]\n", + __func__, name.data(), (int)tensor->ne[0], (int)tensor->ne[1], ne[0], ne[1]); + return false; + } + + // for debugging + if (0) { + printf("%24s - [%5d, %5d], type = %6s, %6.2f MB, %9zu bytes\n", name.data(), ne[0], ne[1], + ggml_type_name(ggml_type(ttype)), ggml_nbytes(tensor) / 1024.0 / 1024.0, ggml_nbytes(tensor)); + } + + const size_t bpe = ggml_type_size(ggml_type(ttype)); + + if ((nelements * bpe) / ggml_blck_size(tensor->type) != ggml_nbytes(tensor)) { + fprintf(stderr, + "%s: tensor '%s' has wrong size in model file: got %zu, " + "expected %zu\n", + __func__, name.data(), ggml_nbytes(tensor), nelements * bpe); + return false; + } + + fin.read(reinterpret_cast(tensor->data), ggml_nbytes(tensor)); + + total_size += ggml_nbytes(tensor); + if (++n_tensors % 8 == 0) { + printf("."); + fflush(stdout); + } + } + + printf(" done\n"); + + printf("%s: model size = %8.2f MB / num tensors = %d\n", __func__, total_size / 1024.0 / 1024.0, n_tensors); + } + + fin.close(); + + return true; +} + +// evaluate the transformer +// +// - model: the model +// - n_threads: number of threads to use +// - n_past: the context size so far +// - embd_inp: the embeddings of the tokens in the context +// - embd_w: the predicted logits for the next token +// +bool mpt_eval(const mpt_model & model, const int n_threads, const int n_past, + const std::vector & embd_inp, std::vector & embd_w, bool logits_all, size_t & mem_per_token) { + const int N = embd_inp.size(); + + const auto & hparams = model.hparams; + + const int n_embd = hparams.d_model; + const int n_layer = hparams.n_layers; + const int n_head = hparams.n_heads; + const int n_vocab = hparams.n_vocab; + const int n_ctx = hparams.n_ctx; + + static size_t buf_size = 256u * 1024 * 1024; + static void * buf = malloc(buf_size); + + // use 2 scratch buffers + // TODO: very hacky solution - reimplement in a more elegant way + static size_t scr0_size = 256u*1024*1024; + static void * scr0 = malloc(scr0_size); + + static size_t scr1_size = 256u*1024*1024; + static void * scr1 = malloc(scr1_size); + + if (mem_per_token > 0 && mem_per_token * N > buf_size) { + const size_t buf_size_new = 1.1 * (mem_per_token * N); // add 10% to account for ggml object overhead + // printf("\n%s: reallocating buffer from %zu to %zu bytes\n", __func__, + // buf_size, buf_size_new); + + // reallocate + buf_size = buf_size_new; + buf = realloc(buf, buf_size); + if (buf == nullptr) { + fprintf(stderr, "%s: failed to allocate %zu bytes\n", __func__, buf_size); + return false; + } + } + + struct ggml_init_params params = { + .mem_size = buf_size, + .mem_buffer = buf, + .no_alloc = false, + }; + + struct ggml_context * ctx0 = ggml_init(params); + struct ggml_cgraph gf = {.n_threads = n_threads}; + + struct ggml_tensor * embd = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, N); + memcpy(embd->data, embd_inp.data(), N * ggml_element_size(embd)); + + struct ggml_tensor * inpL = ggml_get_rows(ctx0, model.wte_weight, embd); + + for (int il = 0; il < n_layer; ++il) { + + struct ggml_tensor * cur; + + ggml_set_scratch(ctx0, { 0, scr0_size, scr0, }); + + // a = self.ln_1(x) + { + cur = ggml_norm(ctx0, inpL); + + cur = ggml_mul(ctx0, ggml_repeat(ctx0, model.layers[il].norm_1_weight, cur), cur); + } + + // self-attention + // b, _, past_key_value = self.attn(a, past_key_value=past_key_value, + // attn_bias=attn_bias, attention_mask=attention_mask, + // is_causal=is_causal) + { + // compute QKV + cur = ggml_mul_mat(ctx0, model.layers[il].c_attn_wqkv_weight, cur); + + if (model.hparams.clip_qkv > 0.0f) { + cur = ggml_clamp(ctx0, cur, -model.hparams.clip_qkv, model.hparams.clip_qkv); + } + + struct ggml_tensor * Qcur = ggml_view_2d(ctx0, cur, n_embd, N, cur->nb[1], 0 * sizeof(float) * n_embd); + struct ggml_tensor * Kcur = ggml_view_2d(ctx0, cur, n_embd, N, cur->nb[1], 1 * sizeof(float) * n_embd); + struct ggml_tensor * Vcur = ggml_view_2d(ctx0, cur, n_embd, N, cur->nb[1], 2 * sizeof(float) * n_embd); + + // store key and value to memory + { + struct ggml_tensor * k = + ggml_view_1d(ctx0, model.memory_k, N * n_embd, + (ggml_element_size(model.memory_k) * n_embd) * (il * n_ctx + n_past)); + struct ggml_tensor * v = + ggml_view_1d(ctx0, model.memory_v, N * n_embd, + (ggml_element_size(model.memory_v) * n_embd) * (il * n_ctx + n_past)); + + ggml_build_forward_expand(&gf, ggml_cpy(ctx0, Kcur, k)); + ggml_build_forward_expand(&gf, ggml_cpy(ctx0, Vcur, v)); + } + + // Q = Qcur.contiguous().view(n_embd/n_head, n_head, N).permute(0, + // 2, 1, 3) [64, N, 12] + struct ggml_tensor * Q = ggml_permute( + ctx0, ggml_cpy(ctx0, Qcur, ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_embd / n_head, n_head, N)), 0, 2, + 1, 3); + + // K = Kmem.view(n_embd/n_head, n_head, n_past + N).permute(0, 2, 1, + // 3) [64, n_past + N, 12] + struct ggml_tensor * K = + ggml_permute(ctx0, + ggml_reshape_3d(ctx0, + ggml_view_1d(ctx0, model.memory_k, (n_past + N) * n_embd, + il * n_ctx * ggml_element_size(model.memory_k) * n_embd), + n_embd / n_head, n_head, n_past + N), + 0, 2, 1, 3); + // K * Q + struct ggml_tensor * KQ = ggml_mul_mat(ctx0, K, Q); + + // KQ_scaled = KQ / sqrt(n_embd/n_head) + struct ggml_tensor * KQ_scaled = + ggml_scale(ctx0, KQ, ggml_new_f32(ctx0, 1.0f / sqrt(float(n_embd) / n_head))); + + struct ggml_tensor * KQ_scaled_alibi = + ggml_alibi(ctx0, KQ_scaled, n_past, n_head, model.hparams.alibi_bias_max); + + // KQ_masked = mask_past(KQ_scaled) + struct ggml_tensor * KQ_masked = ggml_diag_mask_inf(ctx0, KQ_scaled_alibi, n_past); + + // KQ = soft_max(KQ_masked) + struct ggml_tensor * KQ_soft_max = ggml_soft_max(ctx0, KQ_masked); + + // V_trans = Vmem.view(n_embd/n_head, n_head, n_past + N).permute(1, + // 2, 0, 3).contiguous() [n_past + N, 64, 12] + struct ggml_tensor * V_trans = ggml_cpy( + ctx0, + ggml_permute(ctx0, + ggml_reshape_3d(ctx0, + ggml_view_1d(ctx0, model.memory_v, (n_past + N) * n_embd, + il * n_ctx * ggml_element_size(model.memory_v) * n_embd), + n_embd / n_head, n_head, n_past + N), + 1, 2, 0, 3), + ggml_new_tensor_3d(ctx0, model.memory_v->type, n_past + N, n_embd / n_head, n_head)); + + // KQV = transpose(V) * KQ_soft_max + struct ggml_tensor * KQV = ggml_mul_mat(ctx0, V_trans, KQ_soft_max); + + // KQV_merged = KQV.permute(0, 2, 1, 3) + struct ggml_tensor * KQV_merged = ggml_permute(ctx0, KQV, 0, 2, 1, 3); + + // cur = KQV_merged.contiguous().view(n_embd, N) + cur = ggml_cpy(ctx0, KQV_merged, ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_embd, N)); + + // projection + { cur = ggml_mul_mat(ctx0, model.layers[il].c_attn_out_proj_weight, cur); } + } + + inpL = ggml_add(ctx0, inpL, cur); + + ggml_set_scratch(ctx0, { 0, scr1_size, scr1, }); + + // m = self.ln_2(x) + { + cur = ggml_norm(ctx0, inpL); + + cur = ggml_mul(ctx0, ggml_repeat(ctx0, model.layers[il].norm_2_weight, cur), cur); + } + + // n = self.mlp(m) + { + + cur = ggml_mul_mat(ctx0, model.layers[il].ffn_up_proj, cur); + + // GELU activation + cur = ggml_gelu(ctx0, cur); + + // projection + // cur = proj_w*cur + proj_b + cur = ggml_mul_mat(ctx0, model.layers[il].ffn_down_proj, cur); + } + + // x = x + n + inpL = ggml_add(ctx0, inpL, cur); + } + + ggml_set_scratch(ctx0, { 0, scr0_size, scr0, }); + + // norm + { + inpL = ggml_norm(ctx0, inpL); + // inpL = ln_f_g*inpL + inpL = ggml_mul(ctx0, ggml_repeat(ctx0, model.norm_f_weight, inpL), inpL); + } + + ggml_set_scratch(ctx0, { 0, 0, nullptr, }); + + // output embedding weight tied to input embedding + inpL = ggml_mul_mat(ctx0, model.wte_weight, inpL); + + // logits -> probs + // inpL = ggml_soft_max(ctx0, inpL); + + // run the computation + ggml_build_forward_expand(&gf, inpL); + ggml_graph_compute(ctx0, &gf); + + // std::cout << "Qcur" << std::endl; + // print_tensor(Qcur); + + // if (n_past%100 == 0) { + // ggml_graph_print(&gf); + // ggml_graph_dump_dot(&gf, NULL, "mpt-model.dot"); + // } + + if (logits_all) { + // return result for all tokens + embd_w.resize(n_vocab *N); + memcpy(embd_w.data(), (float *)ggml_get_data(inpL) , sizeof(float) * n_vocab * N); + } else { + // return result for just the last token + embd_w.resize(n_vocab); + memcpy(embd_w.data(), (float *)ggml_get_data(inpL) + (n_vocab * (N - 1)), sizeof(float) * n_vocab); + } + + if (mem_per_token == 0) { + mem_per_token = ggml_used_mem(ctx0) / N; + } + // printf("used_mem = %zu\n", ggml_used_mem(ctx0)); + + ggml_free(ctx0); + + return true; +} + +std::vector softmax(const std::vector & logits) { + std::vector probs(logits.size()); + float max_logit = logits[0]; + for (float v : logits) max_logit = std::max(max_logit, v); + double sum_exp = 0.0; + for (size_t i = 0; i < logits.size(); i++) { + // Subtract the maximum logit value from the current logit value for numerical stability + const float logit = logits[i] - max_logit; + const float exp_logit = expf(logit); + sum_exp += exp_logit; + probs[i] = exp_logit; + } + for (size_t i = 0; i < probs.size(); i++) probs[i] /= sum_exp; + return probs; +} + +int perplexity(mpt_params params) { + ggml_time_init(); + + const int64_t t_main_start_us = ggml_time_us(); + + printf("%s: n_threads = %d\n", __func__, params.n_threads); + printf("%s: n_batch = %d\n", __func__, params.n_batch); + printf("%s: n_ctx = %d\n", __func__, params.n_ctx); + printf("\n"); + + int64_t t_load_us = 0; + + gpt_vocab vocab; + mpt_model model; + + model.hparams.n_ctx = params.n_ctx; + + // load the model + { + const int64_t t_start_us = ggml_time_us(); + + if (!mpt_model_load(params.model, model, vocab)) { + fprintf(stderr, "%s: failed to load model from '%s'\n", __func__, params.model.c_str()); + return 1; + } + + t_load_us = ggml_time_us() - t_start_us; + } + + int64_t t_predict_us = 0; + + std::vector logits; + + // tokenize the prompt + std::vector embd_inp = ::gpt_tokenize(vocab, params.prompt); + + printf("%s: number of tokens in prompt = %zu\n", __func__, embd_inp.size()); + + // determine the required inference memory per token: + size_t mem_per_token = 0; + mpt_eval(model, params.n_threads, 0, {0, 1, 2, 3}, logits, false, mem_per_token); + + int count = 0; + + const int n_chunk = embd_inp.size() / params.n_ctx; + + const int n_vocab = model.hparams.n_vocab; + const int n_batch = params.n_batch; + + double nll = 0.0; + fprintf(stderr, "%s: calculating perplexity over %d chunks, batch_size=%d\n", __func__, n_chunk, n_batch); + + for (int i = 0; i < n_chunk; ++i) { + + const int start = i * params.n_ctx; + const int end = start + params.n_ctx; + + const int num_batches = (params.n_ctx + n_batch - 1) / n_batch; + + std::vector logits; + + const auto t_start = std::chrono::high_resolution_clock::now(); + + for (int j = 0; j < num_batches; ++j) { + + const int batch_start = start + j * n_batch; + const int batch_size = std::min(end - batch_start, n_batch); + + std::vector embd; + + for(int p=0;p batch_logits;// = llama_get_logits(ctx); + + const int64_t t_start_us = ggml_time_us(); + + if (!mpt_eval(model, params.n_threads, j * batch_size, embd, batch_logits, true, mem_per_token)) { + printf("%s: failed to evaluate model\n", __func__); + return 1; + } + + t_predict_us += ggml_time_us() - t_start_us; + + logits.insert(logits.end(), batch_logits.data(), batch_logits.data() + batch_size * n_vocab); + + } + + const auto t_end = std::chrono::high_resolution_clock::now(); + + if (i == 0) { + const float t_total = std::chrono::duration(t_end - t_start).count(); + fprintf(stderr, "%s: %.2f seconds per pass - ETA ", __func__, t_total); + int total_seconds = (int)(t_total * n_chunk); + if (total_seconds >= 60*60) { + fprintf(stderr, "%d hours ", total_seconds / (60*60)); + total_seconds = total_seconds % (60*60); + } + fprintf(stderr, "%d minutes\n", total_seconds / 60); + + printf("\nChunk\tPPL cumulative\tPPL chunk\n"); + } + + // We get the logits for all the tokens in the context window (params.n_ctx) + // from llama_eval above. Now, based on https://huggingface.co/docs/transformers/perplexity, + // calculate the perplexity over the last half of the window (so the model always has + // some context to predict the token). + // + // We rely on the fact that attention in the forward pass only looks at previous + // tokens here, so the logits returned for each token are an accurate representation + // of what the model would have predicted at that point. + // + // Example, we have a context window of 512, we will compute perplexity for each of the + // last 256 tokens. Then, we split the input up into context window size chunks to + // process the entire prompt. + + double nllchunk = 0.0; + int countchunk = 0; + + for (int j = std::min(512, params.n_ctx / 2); j < params.n_ctx - 1; ++j) { + // Calculate probability of next token, given the previous ones. + const std::vector tok_logits( + logits.begin() + (j + 0) * n_vocab, + logits.begin() + (j + 1) * n_vocab); + + const float prob = softmax(tok_logits)[embd_inp[ start+ j + 1]]; + + nllchunk += -std::log(prob); + ++countchunk; + } + + nll += nllchunk; + count += countchunk; + + // perplexity is e^(average negative log-likelihood) + printf("%d\t%.8lf\t%.8lf\n", i + 1, std::exp(nll / count), std::exp(nllchunk/countchunk) ); + fflush(stdout); + } + + // report timing + { + const int64_t t_main_end_us = ggml_time_us(); + + printf("\n\n"); + printf("%s: mem per token = %8zu bytes\n", __func__, mem_per_token); + printf("%s: load time = %8.2f ms\n", __func__, t_load_us / 1000.0f); + printf("%s: eval time = %8.2f ms / %.2f ms per token\n", __func__, t_predict_us / 1000.0f, t_predict_us / 1000.0f / (n_chunk * params.n_ctx)); + printf("%s: total time = %8.2f ms\n", __func__, (t_main_end_us - t_main_start_us) / 1000.0f); + } + + ggml_free(model.ctx); + + return 0; +} + +int main(int argc, char ** argv) { + mpt_params params; + + if (mpt_params_parse(argc, argv, params) == false) { + return 1; + } + + if (params.perplexity) { + return perplexity(params); + } + + ggml_time_init(); + + const int64_t t_main_start_us = ggml_time_us(); + + if (params.seed < 0) { + params.seed = time(NULL); + } + + if (params.n_predict < 0) { + params.n_predict = 0; + } + + printf("%s: seed = %d\n", __func__, params.seed); + printf("%s: n_threads = %d\n", __func__, params.n_threads); + printf("%s: n_batch = %d\n", __func__, params.n_batch); + printf("%s: n_ctx = %d\n", __func__, params.n_ctx); + printf("%s: n_predict = %d\n\n", __func__, params.n_predict); + + std::mt19937 rng(params.seed); + if (params.prompt.empty()) { + params.prompt = gpt_random_prompt(rng); + } + + int64_t t_load_us = 0; + + gpt_vocab vocab; + mpt_model model; + + model.hparams.n_ctx = params.n_ctx; + + // load the model + { + const int64_t t_start_us = ggml_time_us(); + + if (!mpt_model_load(params.model, model, vocab)) { + fprintf(stderr, "%s: failed to load model from '%s'\n", __func__, params.model.c_str()); + return 1; + } + + t_load_us = ggml_time_us() - t_start_us; + } + + if (params.top_k == 0) { + params.top_k = model.hparams.n_vocab; + } + + if (params.repeat_last_n == -1) { + params.repeat_last_n = params.n_ctx; + } + + printf("\n"); + printf("%s: temp = %.3f\n", __func__, params.temp); + printf("%s: top_k = %d\n", __func__, params.top_k); + printf("%s: top_p = %.3f\n", __func__, params.top_p); + printf("%s: repeat_last_n = %d\n", __func__, params.repeat_last_n); + printf("%s: repeat_penalty = %.3f\n", __func__, params.repeat_penalty); + + int64_t t_sample_us = 0; + int64_t t_predict_us = 0; + + std::vector last_n_tokens(params.n_ctx); + std::fill(last_n_tokens.begin(), last_n_tokens.end(), 0); + + // tokenize the prompt + std::vector embd_inp = ::gpt_tokenize(vocab, params.prompt); + + printf("\n"); + printf("%s: number of tokens in prompt = %zu\n", __func__, embd_inp.size()); + + for (size_t i = 0; i < embd_inp.size(); i++) { + printf("%s: token[%lu] = %6d\n", __func__, i, embd_inp[i]); + } + printf("\n"); + + std::vector embd; + std::vector logits; + + // determine the required inference memory per token: + size_t mem_per_token = 0; + mpt_eval(model, params.n_threads, 0, {0, 1, 2, 3}, logits, false, mem_per_token); + + int n_past = 0; + int n_consumed = 0; + int n_sampled = 0; + + while (n_sampled < params.n_predict) { + // predict + if (embd.size() > 0) { + const int64_t t_start_us = ggml_time_us(); + + if (!mpt_eval(model, params.n_threads, n_past, embd, logits, false, mem_per_token)) { + printf("%s: failed to predict\n", __func__); + return 1; + } + + t_predict_us += ggml_time_us() - t_start_us; + + n_past += embd.size(); + embd.clear(); + } + + if ((int)embd_inp.size() <= n_consumed) { + // sample next token + + const int top_k = params.top_k; + const float top_p = params.top_p; + const float temp = params.temp; + const int repeat_last_n = params.repeat_last_n; + const float repeat_penalty = params.repeat_penalty; + + gpt_vocab::id id = 0; + + { + const int64_t t_start_sample_us = ggml_time_us(); + + id = gpt_sample_top_k_top_p_repeat(vocab, logits.data() + (logits.size() - model.hparams.n_vocab), last_n_tokens.data(), last_n_tokens.size(), top_k, top_p, temp, repeat_last_n, repeat_penalty, rng); + + last_n_tokens.erase(last_n_tokens.begin()); + last_n_tokens.push_back(id); + + t_sample_us += ggml_time_us() - t_start_sample_us; + } + + // add it to the context + embd.push_back(id); + ++n_sampled; + + } else { + // if here, it means we are still processing the input prompt + while ((int) embd_inp.size() > n_consumed) { + embd.push_back(embd_inp[n_consumed]); + + last_n_tokens.erase(last_n_tokens.begin()); + last_n_tokens.push_back(embd_inp[n_consumed]); + + ++n_consumed; + if ((int) embd.size() >= params.n_batch) { + break; + } + } + } + + // display text + for (auto id : embd) { + printf("%s", vocab.id_to_token[id].c_str()); + } + fflush(stdout); + + // end of text token + if (embd.back() == 0) { + break; + } + } + + // report timing + { + const int64_t t_main_end_us = ggml_time_us(); + + printf("\n\n\n"); + printf("%s: sampled tokens = %8d\n", __func__, n_sampled); + printf("%s: mem per token = %8zu bytes\n", __func__, mem_per_token); + printf("%s: load time = %8.2f ms\n", __func__, t_load_us / 1000.0f); + printf("%s: sample time = %8.2f ms / %.2f ms per token\n", __func__, t_sample_us / 1000.0f, t_sample_us / 1000.0f / n_sampled); + printf("%s: eval time = %8.2f ms / %.2f ms per token\n", __func__, t_predict_us / 1000.0f, t_predict_us / 1000.0f / n_past); + printf("%s: total time = %8.2f ms\n", __func__, (t_main_end_us - t_main_start_us) / 1000.0f); + } + + ggml_free(model.ctx); + + return 0; +} diff --git a/ggml_old/examples/mpt/quantize.cpp b/ggml_old/examples/mpt/quantize.cpp new file mode 100644 index 0000000..95b83c3 --- /dev/null +++ b/ggml_old/examples/mpt/quantize.cpp @@ -0,0 +1,186 @@ +#include "ggml/ggml.h" + +#include "common-ggml.h" +#include "common.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct mpt_hparams { + int32_t d_model = 0; + int32_t max_seq_len = 0; + int32_t n_heads = 0; + int32_t n_layers = 0; + int32_t n_vocab = 0; + float alibi_bias_max = 0; + float clip_qkv = 0; + int32_t ftype = 0; +}; + +// quantize a model +bool mpt_model_quantize(const std::string & fname_inp, + const std::string & fname_out, ggml_ftype ftype) { + + printf("%s: loading model from '%s'\n", __func__, fname_inp.c_str()); + + auto finp = std::ifstream(fname_inp, std::ios::binary); + if (!finp) { + fprintf(stderr, "%s: failed to open '%s' for reading\n", __func__, + fname_inp.c_str()); + return false; + } + + auto fout = std::ofstream(fname_out, std::ios::binary); + if (!fout) { + fprintf(stderr, "%s: failed to open '%s' for writing\n", __func__, + fname_out.c_str()); + return false; + } + + // verify magic + { + uint32_t magic; + finp.read((char *)&magic, sizeof(magic)); + if (magic != 0x67676d6c) { + fprintf(stderr, "%s: invalid model file '%s' (bad magic)\n", + __func__, fname_inp.c_str()); + return false; + } + + fout.write((char *)&magic, sizeof(magic)); + } + + mpt_hparams hparams; + + // load hparams + { + finp.read((char *) &hparams.d_model, sizeof(hparams.d_model)); + finp.read((char *) &hparams.max_seq_len, sizeof(hparams.max_seq_len)); + finp.read((char *) &hparams.n_heads, sizeof(hparams.n_heads)); + finp.read((char *) &hparams.n_layers, sizeof(hparams.n_layers)); + finp.read((char *) &hparams.n_vocab, sizeof(hparams.n_vocab)); + finp.read((char *) &hparams.alibi_bias_max, sizeof(hparams.alibi_bias_max)); + finp.read((char *) &hparams.clip_qkv, sizeof(hparams.clip_qkv)); + finp.read((char *) &hparams.ftype, sizeof(hparams.ftype)); + + const int32_t qntvr_src = hparams.ftype / GGML_QNT_VERSION_FACTOR; + const int32_t ftype_dst = GGML_QNT_VERSION * GGML_QNT_VERSION_FACTOR + ftype; + + printf("%s: d_model = %d\n", __func__, hparams.d_model); + printf("%s: max_seq_len = %d\n", __func__, hparams.max_seq_len); + printf("%s: n_heads = %d\n", __func__, hparams.n_heads); + printf("%s: n_layers = %d\n", __func__, hparams.n_layers); + printf("%s: n_vocab = %d\n", __func__, hparams.n_vocab); + printf("%s: alibi_bias_max = %f\n", __func__, hparams.alibi_bias_max); + printf("%s: clip_qkv = %f\n", __func__, hparams.clip_qkv); + printf("%s: ftype (src) = %d\n", __func__, hparams.ftype); + printf("%s: qntvr (src) = %d\n", __func__, qntvr_src); + printf("%s: ftype (dst) = %d\n", __func__, ftype_dst); + printf("%s: qntvr (dst) = %d\n", __func__, GGML_QNT_VERSION); + + fout.write((char *) &hparams.d_model, sizeof(hparams.d_model)); + fout.write((char *) &hparams.max_seq_len, sizeof(hparams.max_seq_len)); + fout.write((char *) &hparams.n_heads, sizeof(hparams.n_heads)); + fout.write((char *) &hparams.n_layers, sizeof(hparams.n_layers)); + fout.write((char *) &hparams.n_vocab, sizeof(hparams.n_vocab)); + fout.write((char *) &hparams.alibi_bias_max, sizeof(hparams.alibi_bias_max)); + fout.write((char *) &hparams.clip_qkv, sizeof(hparams.clip_qkv)); + fout.write((char *) &ftype_dst, sizeof(ftype_dst)); + } + + // load vocab + { + const int32_t n_vocab = hparams.n_vocab; + + std::string word; + for (int i = 0; i < n_vocab; i++) { + uint32_t len; + finp.read((char *)&len, sizeof(len)); + fout.write((char *)&len, sizeof(len)); + + word.resize(len); + finp.read((char *)word.data(), len); + fout.write((char *)word.data(), len); + } + } + + printf("%s: quantizing tensors\n", __func__); + + // regexes of tensor names to be quantized + const std::vector to_quant = { + ".*weight", + }; + + if (!ggml_common_quantize_0(finp, fout, ftype, to_quant, {})) { + fprintf(stderr, "%s: failed to quantize model '%s'\n", __func__, + fname_inp.c_str()); + return false; + } + + finp.close(); + fout.close(); + + return true; +} + +// usage: +// ./mpt-quantize models/mpt/ggml-model.bin +// models/mpt/ggml-model-quant.bin type +// +int main(int argc, char ** argv) { + if (argc != 4) { + fprintf(stderr, "usage: %s model-f32.bin model-quant.bin type\n", + argv[0]); + ggml_print_ftypes(stderr); + return 1; + } + + // needed to initialize f16 tables + { + struct ggml_init_params params = {0, NULL, false}; + struct ggml_context * ctx = ggml_init(params); + ggml_free(ctx); + } + + const std::string fname_inp = argv[1]; + const std::string fname_out = argv[2]; + + const ggml_ftype ftype = ggml_parse_ftype(argv[3]); + + const int64_t t_main_start_us = ggml_time_us(); + + int64_t t_quantize_us = 0; + + // load the model + { + const int64_t t_start_us = ggml_time_us(); + + if (!mpt_model_quantize(fname_inp, fname_out, ggml_ftype(ftype))) { + fprintf(stderr, "%s: failed to quantize model from '%s'\n", + __func__, fname_inp.c_str()); + return 1; + } + + t_quantize_us = ggml_time_us() - t_start_us; + } + + // report timing + { + const int64_t t_main_end_us = ggml_time_us(); + + printf("\n"); + printf("%s: quantize time = %8.2f ms\n", __func__, + t_quantize_us / 1000.0f); + printf("%s: total time = %8.2f ms\n", __func__, + (t_main_end_us - t_main_start_us) / 1000.0f); + } + + return 0; +} diff --git a/ggml_old/examples/replit/CMakeLists.txt b/ggml_old/examples/replit/CMakeLists.txt new file mode 100644 index 0000000..696b7f9 --- /dev/null +++ b/ggml_old/examples/replit/CMakeLists.txt @@ -0,0 +1,13 @@ +# +# replit + +set(TEST_TARGET replit) +add_executable(${TEST_TARGET} main.cpp) +target_link_libraries(${TEST_TARGET} PRIVATE ggml common common-ggml) + +# +# replit-quantize + +set(TEST_TARGET replit-quantize) +add_executable(${TEST_TARGET} quantize.cpp) +target_link_libraries(${TEST_TARGET} PRIVATE ggml common common-ggml) diff --git a/ggml_old/examples/replit/convert-h5-to-ggml.py b/ggml_old/examples/replit/convert-h5-to-ggml.py new file mode 100644 index 0000000..310074b --- /dev/null +++ b/ggml_old/examples/replit/convert-h5-to-ggml.py @@ -0,0 +1,113 @@ +from pathlib import Path +import sys +import struct +import json +import numpy as np +from transformers import AutoModelForCausalLM, AutoTokenizer +import sentencepiece.sentencepiece_model_pb2 as model + +if len(sys.argv) < 3: + print("Usage: convert-h5-to-ggml.py dir-model [use-f32]\n") + print(" ftype == 0 -> float32") + print(" ftype == 1 -> float16") + sys.exit(1) + + +# output in the same directory as the model +dir_model = sys.argv[1] +fname_out = sys.argv[1] + "/ggml-model.bin" + + +with open(dir_model + "/config.json", "r", encoding="utf-8") as f: + hparams = json.load(f) + +sp_proto = model.ModelProto() +sp_proto.ParseFromString(open(Path(sys.argv[1]) / "spiece.model", "rb").read()) + + +# possible data types +# ftype == 0 -> float32 +# ftype == 1 -> float16 +# +# map from ftype to string +ftype_str = ["f32", "f16"] + +ftype = 1 +if len(sys.argv) > 2: + ftype = int(sys.argv[2]) + if ftype < 0 or ftype > 1: + print("Invalid ftype: " + str(ftype)) + sys.exit(1) + fname_out = sys.argv[1] + "/ggml-model-" + ftype_str[ftype] + ".bin" + + +tokenizer = AutoTokenizer.from_pretrained(dir_model, trust_remote_code=True) +model = AutoModelForCausalLM.from_pretrained( + dir_model, low_cpu_mem_usage=True, trust_remote_code=True +) +# print (model) + +# print(tokenizer.encode('I believe the meaning of life is')) + +list_vars = model.state_dict() +for name in list_vars.keys(): + print(name, list_vars[name].shape, list_vars[name].dtype) + +fout = open(fname_out, "wb") + +print(hparams) + +fout.write(struct.pack("i", 0x67676D6C)) # magic: ggml in hex +fout.write(struct.pack("i", hparams["d_model"])) +fout.write(struct.pack("i", hparams["max_seq_len"])) +fout.write(struct.pack("i", hparams["n_heads"])) +fout.write(struct.pack("i", hparams["n_layers"])) +fout.write(struct.pack("i", hparams["vocab_size"])) +fout.write(struct.pack("i", ftype)) + + +# TODO: temporary hack to not deal with implementing the tokenizer +for piece in sp_proto.pieces: + encoded_piece = piece.piece.encode("utf-8") + fout.write(struct.pack("i", len(encoded_piece))) + fout.write(encoded_piece) + fout.write(struct.pack("f", piece.score)) + + +for name in list_vars.keys(): + data = list_vars[name].squeeze().numpy() + print("Processing variable: " + name + " with shape: ", data.shape) + + n_dims = len(data.shape) + + # ftype == 0 -> float32, ftype == 1 -> float16 + ftype_cur = 0 + if ftype != 0: + if name[-7:] == ".weight" and n_dims == 2: + print(" Converting to float16") + data = data.astype(np.float16) + ftype_cur = 1 + else: + print(" Converting to float32") + data = data.astype(np.float32) + ftype_cur = 0 + else: + if data.dtype != np.float32: + print(" Converting to float32") + data = data.astype(np.float32) + ftype_cur = 0 + + # header + str = name.encode("utf-8") + fout.write(struct.pack("iii", n_dims, len(str), ftype_cur)) + for i in range(n_dims): + fout.write(struct.pack("i", data.shape[n_dims - 1 - i])) + fout.write(str) + + # data + data.tofile(fout) + +fout.close() + +print("Done. Output file: " + fname_out) +print("") diff --git a/ggml_old/examples/replit/main.cpp b/ggml_old/examples/replit/main.cpp new file mode 100644 index 0000000..c2f144c --- /dev/null +++ b/ggml_old/examples/replit/main.cpp @@ -0,0 +1,767 @@ +#include "ggml/ggml.h" + +#include "common-ggml.h" +#include "common.h" + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +using piece_t = std::pair; +using piece_map_t = std::unordered_map; + +struct replit_tokenizer { + gpt_vocab raw_vocab; + piece_map_t piece_map; + std::vector vocab; +}; + +std::pair, float> encode_word(const std::string & word, const piece_map_t & model) { + std::vector best_segmentations_starts(word.length() + 1, -1); + best_segmentations_starts[0] = 0; + + std::vector best_segmentations_scores(word.length() + 1, -std::numeric_limits::infinity()); + best_segmentations_scores[0] = 1.0; + + for (int start_idx = 0; start_idx < word.length(); ++start_idx) { + float best_score_at_start = best_segmentations_scores[start_idx]; + for (int end_idx = start_idx + 1; end_idx <= word.length(); ++end_idx) { + std::string token = word.substr(start_idx, end_idx - start_idx); + if (model.count(token) && best_score_at_start != -std::numeric_limits::infinity()) { + float token_score = model.at(token).second; + float score = token_score + best_score_at_start; + if (best_segmentations_scores[end_idx] == -std::numeric_limits::infinity() || + best_segmentations_scores[end_idx] > score) { + best_segmentations_starts[end_idx] = start_idx; + best_segmentations_scores[end_idx] = score; + } + } + } + } + + if (best_segmentations_scores.back() == -std::numeric_limits::infinity()) { + return std::make_pair(std::vector{0}, 0.0f); + } + + float score = best_segmentations_scores.back(); + int start = best_segmentations_starts.back(); + int end = word.length(); + std::vector tokens; + while (start != 0) { + const auto token_id = model.at(word.substr(start, end - start)).first; + tokens.insert(tokens.begin(), token_id); + int next_start = best_segmentations_starts[start]; + end = start; + start = next_start; + } + const auto token_id = model.at(word.substr(start, end - start)).first; + tokens.insert(tokens.begin(), token_id); + return std::make_pair(tokens, score); +} + +bool replit_tokenizer_load(replit_tokenizer & tokenizer, std::istream & fin, int max_vocab_size) { + std::string word; + std::vector buf(128); + + for (std::size_t i = 0; i < max_vocab_size; i++) { + uint32_t len; + fin.read((char *)&len, sizeof(len)); + + buf.resize(len); + fin.read((char *) buf.data(), len); + word.assign(buf.data(), len); + + float score; + fin.read((char *)&score, sizeof(score)); + + tokenizer.piece_map[word] = std::make_pair(i, -score); + tokenizer.raw_vocab.id_to_token[i] = word; + } + + return true; +} + +std::string replace_all(const std::string & str, // where to work + const std::string & find, // substitute 'find' + const std::string & replace // by 'replace' +) { + using namespace std; + string result; + size_t find_len = find.size(); + size_t pos, from = 0; + while (string::npos != (pos = str.find(find, from))) { + result.append(str, from, pos - from); + result.append(replace); + from = pos + find_len; + } + result.append(str, from, string::npos); + return result; +} + +std::string ws_symbol = "\342\226\201"; +std::vector replit_tokenizer_tokenize(replit_tokenizer & tokenizer, const std::string & text) { + std::vector tokens; + auto normalized_text = replace_all(text, " ", ws_symbol); + auto tokenized = encode_word(normalized_text, tokenizer.piece_map); + + return tokenized.first; +} + +std::string replit_tokenizer_detokenize(replit_tokenizer & tokenizer, const std::vector & tokens) { + std::string text; + for (auto token : tokens) { + text += tokenizer.raw_vocab.id_to_token[token]; + } + auto denormalized_text = replace_all(text, ws_symbol, " "); + return denormalized_text; +} + +// no defaults for now +struct mpt_hparams { + int32_t d_model = 0; + int32_t max_seq_len = 0; + int32_t n_heads = 0; + int32_t n_layers = 0; + int32_t n_vocab = 0; + int32_t ftype = 0; +}; + +struct replit_layer { + // pre normalization + struct ggml_tensor * ln_1_weight; + + // attention + struct ggml_tensor * c_attn_wqkv_weight; + + struct ggml_tensor * c_attn_out_proj_weight; + + // post normalization + struct ggml_tensor * ln_2_weight; + + // ff + struct ggml_tensor * c_mlp_mlp_up_weight; + + struct ggml_tensor * c_mlp_mlp_down_weight; +}; + +struct replit_model { + mpt_hparams hparams; + + struct ggml_tensor * wte_weight; // position embedding + struct ggml_tensor * ln_f_weight; // language model head + + std::vector layers; + + // key + value memory + struct ggml_tensor * memory_k; + struct ggml_tensor * memory_v; + + struct ggml_context * ctx; + std::map tensors; +}; + +// load the model's weights from a file +bool replit_model_load(const std::string & fname, replit_model & model, replit_tokenizer & vocab) { + printf("%s: loading model from '%s' - please wait ...\n", __func__, fname.c_str()); + + auto fin = std::ifstream(fname, std::ios::binary); + if (!fin) { + fprintf(stderr, "%s: failed to open '%s'\n", __func__, fname.c_str()); + return false; + } + + // verify magic + { + uint32_t magic; + fin.read((char *)&magic, sizeof(magic)); + if (magic != 0x67676d6c) { + fprintf(stderr, "%s: invalid model file '%s' (bad magic)\n", __func__, fname.c_str()); + return false; + } + } + + // load hparams + { + auto & hparams = model.hparams; + + fin.read((char *) &hparams.d_model, sizeof(hparams.d_model)); + fin.read((char *) &hparams.max_seq_len, sizeof(hparams.max_seq_len)); + fin.read((char *) &hparams.n_heads, sizeof(hparams.n_heads)); + fin.read((char *) &hparams.n_layers, sizeof(hparams.n_layers)); + fin.read((char *) &hparams.n_vocab, sizeof(hparams.n_vocab)); + fin.read((char *) &hparams.ftype, sizeof(hparams.ftype)); + + const int32_t qntvr = hparams.ftype / GGML_QNT_VERSION_FACTOR; + + printf("%s: d_model = %d\n", __func__, hparams.d_model); + printf("%s: max_seq_len = %d\n", __func__, hparams.max_seq_len); + printf("%s: n_heads = %d\n", __func__, hparams.n_heads); + printf("%s: n_layers = %d\n", __func__, hparams.n_layers); + printf("%s: n_vocab = %d\n", __func__, hparams.n_vocab); + printf("%s: ftype = %d\n", __func__, hparams.ftype); + printf("%s: qntvr = %d\n", __func__, qntvr); + + hparams.ftype %= GGML_QNT_VERSION_FACTOR; + } + + // load vocab + replit_tokenizer_load(vocab, fin, model.hparams.n_vocab); + + // for the big tensors, we have the option to store the data in 16-bit + // floats or quantized in order to save memory and also to speed up the + // computation + ggml_type wtype = ggml_ftype_to_ggml_type((ggml_ftype)(model.hparams.ftype)); + if (wtype == GGML_TYPE_COUNT) { + fprintf(stderr, "%s: invalid model file '%s' (bad ftype value %d)\n", __func__, fname.c_str(), + model.hparams.ftype); + return false; + } + + auto & ctx = model.ctx; + + size_t ctx_size = 0; + + { + const auto & hparams = model.hparams; + + const int n_embd = hparams.d_model; + const int n_layer = hparams.n_layers; + const int n_ctx = hparams.max_seq_len; + const int n_vocab = hparams.n_vocab; + + ctx_size += n_embd * n_vocab * ggml_type_sizef(wtype); // wte_weight + ctx_size += n_embd * ggml_type_sizef(GGML_TYPE_F32); // ln_f_weight + + ctx_size += n_layer * (n_embd * ggml_type_sizef(GGML_TYPE_F32)); // ln_1_weight + ctx_size += n_layer * (3 * n_embd * n_embd * ggml_type_sizef(wtype)); // attn_Wqkv_weight + ctx_size += n_layer * (n_embd * n_embd * ggml_type_sizef(wtype)); // attn_out_proj_weight + ctx_size += n_layer * (n_embd * ggml_type_sizef(GGML_TYPE_F32)); // ln_2_weight + ctx_size += n_layer * (4 * n_embd * n_embd * ggml_type_sizef(wtype)); // mlp_mlp_up_weight + ctx_size += n_layer * (n_embd * n_embd * 4 * ggml_type_sizef(wtype)); // mlp_mlp_down_weight + + ctx_size += n_ctx * n_layer * n_embd * ggml_type_sizef(GGML_TYPE_F16); // memory_k + ctx_size += n_ctx * n_layer * n_embd * ggml_type_sizef(GGML_TYPE_F16); // memory_v + + ctx_size += (1 + 6 * n_layer) * 512; // object overhead + + printf("%s: ggml ctx size = %6.2f MB\n", __func__, ctx_size / (1024.0 * 1024.0)); + } + + // create the ggml context + { + struct ggml_init_params params = { + .mem_size = ctx_size, + .mem_buffer = NULL, + .no_alloc = false, + }; + + model.ctx = ggml_init(params); + if (!model.ctx) { + fprintf(stderr, "%s: ggml_init() failed\n", __func__); + return false; + } + } + + // prepare memory for the weights + { + const auto & hparams = model.hparams; + + const int n_embd = hparams.d_model; + const int n_layer = hparams.n_layers; + const int n_vocab = hparams.n_vocab; + + model.layers.resize(n_layer); + + model.wte_weight = ggml_new_tensor_2d(ctx, wtype, n_embd, n_vocab); + model.ln_f_weight = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + + // map by name + model.tensors["transformer.wte.weight"] = model.wte_weight; + model.tensors["transformer.ln_f.weight"] = model.ln_f_weight; + + for (int i = 0; i < n_layer; ++i) { + auto & layer = model.layers[i]; + + layer.ln_1_weight = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + layer.c_attn_wqkv_weight = ggml_new_tensor_2d(ctx, wtype, n_embd, 3 * n_embd); + layer.c_attn_out_proj_weight = ggml_new_tensor_2d(ctx, wtype, n_embd, n_embd); + layer.ln_2_weight = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + layer.c_mlp_mlp_up_weight = ggml_new_tensor_2d(ctx, wtype, n_embd, 4 * n_embd); + layer.c_mlp_mlp_down_weight = ggml_new_tensor_2d(ctx, wtype, 4 * n_embd, n_embd); + + // map by name + model.tensors["transformer.blocks." + std::to_string(i) + ".ln_1.weight"] = layer.ln_1_weight; + model.tensors["transformer.blocks." + std::to_string(i) + ".attn.Wqkv.weight"] = layer.c_attn_wqkv_weight; + model.tensors["transformer.blocks." + std::to_string(i) + ".attn.out_proj.weight"] = + layer.c_attn_out_proj_weight; + model.tensors["transformer.blocks." + std::to_string(i) + ".ln_2.weight"] = layer.ln_2_weight; + model.tensors["transformer.blocks." + std::to_string(i) + ".mlp.mlp_up.weight"] = layer.c_mlp_mlp_up_weight; + model.tensors["transformer.blocks." + std::to_string(i) + ".mlp.mlp_down.weight"] = + layer.c_mlp_mlp_down_weight; + } + } + + // key + value memory + { + const auto & hparams = model.hparams; + + const int n_embd = hparams.d_model; + const int n_layer = hparams.n_layers; + const int n_ctx = hparams.max_seq_len; + + const int64_t n_mem = n_layer * n_ctx; + const int64_t n_elements = n_embd * n_mem; + + model.memory_k = ggml_new_tensor_1d(ctx, GGML_TYPE_F16, n_elements); + model.memory_v = ggml_new_tensor_1d(ctx, GGML_TYPE_F16, n_elements); + + const size_t memory_size = ggml_nbytes(model.memory_k) + ggml_nbytes(model.memory_v); + + printf("%s: memory_size = %8.2f MB, n_mem = %" PRId64 "\n", __func__, memory_size / 1024.0 / 1024.0, n_mem); + } + + // load weights + { + int n_tensors = 0; + size_t total_size = 0; + + printf("%s: ", __func__); + + while (true) { + int32_t n_dims; + int32_t length; + int32_t ttype; + + fin.read(reinterpret_cast(&n_dims), sizeof(n_dims)); + fin.read(reinterpret_cast(&length), sizeof(length)); + fin.read(reinterpret_cast(&ttype), sizeof(ttype)); + + if (fin.eof()) { + break; + } + + int32_t nelements = 1; + int32_t ne[2] = {1, 1}; + for (int i = 0; i < n_dims; ++i) { + fin.read(reinterpret_cast(&ne[i]), sizeof(ne[i])); + nelements *= ne[i]; + } + + std::string name(length, 0); + fin.read(&name[0], length); + + if (model.tensors.find(name.data()) == model.tensors.end()) { + fprintf(stderr, "%s: unknown tensor '%s' in model file\n", __func__, name.data()); + return false; + } + + auto tensor = model.tensors[name.data()]; + if (ggml_nelements(tensor) != nelements) { + fprintf(stderr, "%s: tensor '%s' has wrong size in model file\n", __func__, name.data()); + return false; + } + + if (tensor->ne[0] != ne[0] || tensor->ne[1] != ne[1]) { + fprintf(stderr, + "%s: tensor '%s' has wrong shape in model file: got [%5d, " + "%5d], expected [%5d, %5d]\n", + __func__, name.data(), (int)tensor->ne[0], (int)tensor->ne[1], ne[0], ne[1]); + return false; + } + + // for debugging + if (0) { + printf("%24s - [%5d, %5d], type = %6s, %6.2f MB, %9zu bytes\n", name.data(), ne[0], ne[1], + ggml_type_name(ggml_type(ttype)), ggml_nbytes(tensor) / 1024.0 / 1024.0, ggml_nbytes(tensor)); + } + + const size_t bpe = ggml_type_size(ggml_type(ttype)); + + if ((nelements * bpe) / ggml_blck_size(tensor->type) != ggml_nbytes(tensor)) { + fprintf(stderr, + "%s: tensor '%s' has wrong size in model file: got %zu, " + "expected %zu\n", + __func__, name.data(), ggml_nbytes(tensor), nelements * bpe); + return false; + } + + fin.read(reinterpret_cast(tensor->data), ggml_nbytes(tensor)); + + total_size += ggml_nbytes(tensor); + if (++n_tensors % 8 == 0) { + printf("."); + fflush(stdout); + } + } + + printf(" done\n"); + + printf("%s: model size = %8.2f MB / num tensors = %d\n", __func__, total_size / 1024.0 / 1024.0, n_tensors); + } + + fin.close(); + + return true; +} + +// evaluate the transformer +// +// - model: the model +// - n_threads: number of threads to use +// - n_past: the context size so far +// - embd_inp: the embeddings of the tokens in the context +// - embd_w: the predicted logits for the next token +// +bool replit_eval(const replit_model & model, const int n_threads, const int n_past, + const std::vector & embd_inp, std::vector & embd_w, size_t & mem_per_token) { + const int N = embd_inp.size(); + + const auto & hparams = model.hparams; + + const int n_embd = hparams.d_model; + const int n_layer = hparams.n_layers; + const int n_ctx = hparams.max_seq_len; + const int n_head = hparams.n_heads; + const int n_vocab = hparams.n_vocab; + + static size_t buf_size = 256u * 1024 * 1024; + static void * buf = malloc(buf_size); + + if (mem_per_token > 0 && mem_per_token * N > buf_size) { + const size_t buf_size_new = 1.1 * (mem_per_token * N); // add 10% to account for ggml object overhead + // printf("\n%s: reallocating buffer from %zu to %zu bytes\n", __func__, + // buf_size, buf_size_new); + + // reallocate + buf_size = buf_size_new; + buf = realloc(buf, buf_size); + if (buf == nullptr) { + fprintf(stderr, "%s: failed to allocate %zu bytes\n", __func__, buf_size); + return false; + } + } + + struct ggml_init_params params = { + .mem_size = buf_size, + .mem_buffer = buf, + .no_alloc = false, + }; + + struct ggml_context * ctx0 = ggml_init(params); + struct ggml_cgraph gf = {.n_threads = n_threads}; + + struct ggml_tensor * embd = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, N); + memcpy(embd->data, embd_inp.data(), N * ggml_element_size(embd)); + + struct ggml_tensor * inpL = ggml_get_rows(ctx0, model.wte_weight, embd); + + for (int il = 0; il < n_layer; ++il) { + + struct ggml_tensor * cur; + + // a = self.ln_1(x) + { + cur = ggml_norm(ctx0, inpL); + + cur = ggml_mul(ctx0, ggml_repeat(ctx0, model.layers[il].ln_1_weight, cur), cur); + } + + // self-attention + // b, _, past_key_value = self.attn(a, past_key_value=past_key_value, + // attn_bias=attn_bias, attention_mask=attention_mask, + // is_causal=is_causal) + { + + // compute QKV + { cur = ggml_mul_mat(ctx0, model.layers[il].c_attn_wqkv_weight, cur); } + + struct ggml_tensor * Qcur = ggml_view_2d(ctx0, cur, n_embd, N, cur->nb[1], 0 * sizeof(float) * n_embd); + struct ggml_tensor * Kcur = ggml_view_2d(ctx0, cur, n_embd, N, cur->nb[1], 1 * sizeof(float) * n_embd); + struct ggml_tensor * Vcur = ggml_view_2d(ctx0, cur, n_embd, N, cur->nb[1], 2 * sizeof(float) * n_embd); + + // store key and value to memory + { + struct ggml_tensor * k = + ggml_view_1d(ctx0, model.memory_k, N * n_embd, + (ggml_element_size(model.memory_k) * n_embd) * (il * n_ctx + n_past)); + struct ggml_tensor * v = + ggml_view_1d(ctx0, model.memory_v, N * n_embd, + (ggml_element_size(model.memory_v) * n_embd) * (il * n_ctx + n_past)); + + ggml_build_forward_expand(&gf, ggml_cpy(ctx0, Kcur, k)); + ggml_build_forward_expand(&gf, ggml_cpy(ctx0, Vcur, v)); + } + + // Q = Qcur.contiguous().view(n_embd/n_head, n_head, N).permute(0, + // 2, 1, 3) [64, N, 12] + struct ggml_tensor * Q = ggml_permute( + ctx0, ggml_cpy(ctx0, Qcur, ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_embd / n_head, n_head, N)), 0, 2, + 1, 3); + + // K = Kmem.view(n_embd/n_head, n_head, n_past + N).permute(0, 2, 1, + // 3) [64, n_past + N, 12] + struct ggml_tensor * K = + ggml_permute(ctx0, + ggml_reshape_3d(ctx0, + ggml_view_1d(ctx0, model.memory_k, (n_past + N) * n_embd, + il * n_ctx * ggml_element_size(model.memory_k) * n_embd), + n_embd / n_head, n_head, n_past + N), + 0, 2, 1, 3); + // K * Q + struct ggml_tensor * KQ = ggml_mul_mat(ctx0, K, Q); + + // KQ_scaled = KQ / sqrt(n_embd/n_head) + struct ggml_tensor * KQ_scaled = + ggml_scale(ctx0, KQ, ggml_new_f32(ctx0, 1.0f / sqrt(float(n_embd) / n_head))); + + struct ggml_tensor * KQ_scaled_alibi = ggml_alibi(ctx0, KQ_scaled, n_past, n_head, 8.0); + + // KQ_masked = mask_past(KQ_scaled) + struct ggml_tensor * KQ_masked = ggml_diag_mask_inf(ctx0, KQ_scaled_alibi, n_past); + + // KQ = soft_max(KQ_masked) + struct ggml_tensor * KQ_soft_max = ggml_soft_max(ctx0, KQ_masked); + + // V_trans = Vmem.view(n_embd/n_head, n_head, n_past + N).permute(1, + // 2, 0, 3).contiguous() [n_past + N, 64, 12] + struct ggml_tensor * V_trans = ggml_cpy( + ctx0, + ggml_permute(ctx0, + ggml_reshape_3d(ctx0, + ggml_view_1d(ctx0, model.memory_v, (n_past + N) * n_embd, + il * n_ctx * ggml_element_size(model.memory_v) * n_embd), + n_embd / n_head, n_head, n_past + N), + 1, 2, 0, 3), + ggml_new_tensor_3d(ctx0, model.memory_v->type, n_past + N, n_embd / n_head, n_head)); + + // KQV = transpose(V) * KQ_soft_max + struct ggml_tensor * KQV = ggml_mul_mat(ctx0, V_trans, KQ_soft_max); + + // KQV_merged = KQV.permute(0, 2, 1, 3) + struct ggml_tensor * KQV_merged = ggml_permute(ctx0, KQV, 0, 2, 1, 3); + + // cur = KQV_merged.contiguous().view(n_embd, N) + cur = ggml_cpy(ctx0, KQV_merged, ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_embd, N)); + + // projection + { cur = ggml_mul_mat(ctx0, model.layers[il].c_attn_out_proj_weight, cur); } + } + + inpL = ggml_add(ctx0, inpL, cur); + + // m = self.ln_2(x) + { + cur = ggml_norm(ctx0, inpL); + + cur = ggml_mul(ctx0, ggml_repeat(ctx0, model.layers[il].ln_2_weight, cur), cur); + } + + // n = self.mlp(m) + { + + cur = ggml_mul_mat(ctx0, model.layers[il].c_mlp_mlp_up_weight, cur); + + // GELU activation + cur = ggml_gelu(ctx0, cur); + + // projection + // cur = proj_w*cur + proj_b + cur = ggml_mul_mat(ctx0, model.layers[il].c_mlp_mlp_down_weight, cur); + } + + // x = x + n + inpL = ggml_add(ctx0, inpL, cur); + } + + // norm + { + inpL = ggml_norm(ctx0, inpL); + // inpL = ln_f_g*inpL + inpL = ggml_mul(ctx0, ggml_repeat(ctx0, model.ln_f_weight, inpL), inpL); + } + + // output embedding weight tied to input embedding + inpL = ggml_mul_mat(ctx0, model.wte_weight, inpL); + + // logits -> probs + // inpL = ggml_soft_max(ctx0, inpL); + + // run the computation + ggml_build_forward_expand(&gf, inpL); + ggml_graph_compute(ctx0, &gf); + + // std::cout << "Qcur" << std::endl; + // print_tensor(Qcur); + + // if (n_past%100 == 0) { + // ggml_graph_print(&gf); + // ggml_graph_dump_dot(&gf, NULL, "replit-model.dot"); + // } + + // return result for just the last token + embd_w.resize(n_vocab); + memcpy(embd_w.data(), (float *)ggml_get_data(inpL) + (n_vocab * (N - 1)), sizeof(float) * n_vocab); + + if (mem_per_token == 0) { + mem_per_token = ggml_used_mem(ctx0) / N; + } + // printf("used_mem = %zu\n", ggml_used_mem(ctx0)); + + ggml_free(ctx0); + + return true; +} + +int main(int argc, char ** argv) { + ggml_time_init(); + + const int64_t t_main_start_us = ggml_time_us(); + + gpt_params params; + params.model = ""; + + if (gpt_params_parse(argc, argv, params) == false) { + return 1; + } + + if (params.seed < 0) { + params.seed = time(NULL); + } + + printf("%s: seed = %d\n", __func__, params.seed); + + std::mt19937 rng(params.seed); + if (params.prompt.empty()) { + params.prompt = gpt_random_prompt(rng); + } + + int64_t t_load_us = 0; + + replit_tokenizer vocab; + replit_model model; + + // load the model + { + const int64_t t_start_us = ggml_time_us(); + + if (!replit_model_load(params.model, model, vocab)) { + fprintf(stderr, "%s: failed to load model from '%s'\n", __func__, params.model.c_str()); + return 1; + } + + t_load_us = ggml_time_us() - t_start_us; + } + + int n_past = 0; + + int64_t t_sample_us = 0; + int64_t t_predict_us = 0; + + std::vector logits; + + // tokenize the prompt + std::vector embd_inp = replit_tokenizer_tokenize(vocab, params.prompt); + + printf("%s: number of tokens in prompt = %zu\n", __func__, embd_inp.size()); + + for (int i = 0; i < embd_inp.size(); i++) { + printf("%s: token[%d] = %6lu\n", __func__, i, embd_inp[i]); + // vocab.id_to_token.at(embd_inp[i]).c_str() + } + printf("\n"); + + params.n_predict = std::min(params.n_predict, model.hparams.max_seq_len - (int)embd_inp.size()); + + std::vector embd; + + // determine the required inference memory per token: + size_t mem_per_token = 0; + replit_eval(model, params.n_threads, 0, {0, 1, 2, 3}, logits, mem_per_token); + + for (int i = embd.size(); i < embd_inp.size() + params.n_predict; i++) { + // predict + if (embd.size() > 0) { + const int64_t t_start_us = ggml_time_us(); + + if (!replit_eval(model, params.n_threads, n_past, embd, logits, mem_per_token)) { + printf("Failed to predict\n"); + return 1; + } + + t_predict_us += ggml_time_us() - t_start_us; + } + + n_past += embd.size(); + embd.clear(); + + if (i >= embd_inp.size()) { + // sample next token + const int top_k = params.top_k; + const float top_p = params.top_p; + const float temp = params.temp; + + const int n_vocab = model.hparams.n_vocab; + + gpt_vocab::id id = 0; + + { + const int64_t t_start_sample_us = ggml_time_us(); + + id = gpt_sample_top_k_top_p(vocab.raw_vocab, logits.data() + (logits.size() - n_vocab), top_k, top_p, + temp, rng); + + t_sample_us += ggml_time_us() - t_start_sample_us; + } + + // add it to the context + embd.push_back(id); + } else { + // if here, it means we are still processing the input prompt + for (int k = i; k < embd_inp.size(); k++) { + embd.push_back(embd_inp[k]); + if (embd.size() > params.n_batch) { + break; + } + } + i += embd.size() - 1; + } + + // display text + for (auto id : embd) { + printf("%s", replit_tokenizer_detokenize(vocab, {static_cast(id)}).c_str()); + } + fflush(stdout); + + // end of text token + if (embd.back() == 0) { + break; + } + } + + // report timing + { + const int64_t t_main_end_us = ggml_time_us(); + + printf("\n\n"); + printf("%s: mem per token = %8zu bytes\n", __func__, mem_per_token); + printf("%s: load time = %8.2f ms\n", __func__, t_load_us / 1000.0f); + printf("%s: sample time = %8.2f ms\n", __func__, t_sample_us / 1000.0f); + printf("%s: predict time = %8.2f ms / %.2f ms per token\n", __func__, t_predict_us / 1000.0f, + t_predict_us / 1000.0f / n_past); + printf("%s: total time = %8.2f ms\n", __func__, (t_main_end_us - t_main_start_us) / 1000.0f); + } + + ggml_free(model.ctx); + + return 0; +} diff --git a/ggml_old/examples/replit/quantize.cpp b/ggml_old/examples/replit/quantize.cpp new file mode 100644 index 0000000..9a4ec43 --- /dev/null +++ b/ggml_old/examples/replit/quantize.cpp @@ -0,0 +1,182 @@ +#include "ggml/ggml.h" + +#include "common-ggml.h" +#include "common.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct mpt_hparams { + int32_t d_model = 0; + int32_t max_seq_len = 0; + int32_t n_heads = 0; + int32_t n_layers = 0; + int32_t n_vocab = 0; + int32_t ftype = 0; +}; + +// quantize a model +bool mpt_model_quantize(const std::string & fname_inp, + const std::string & fname_out, ggml_ftype ftype) { + + printf("%s: loading model from '%s'\n", __func__, fname_inp.c_str()); + + auto finp = std::ifstream(fname_inp, std::ios::binary); + if (!finp) { + fprintf(stderr, "%s: failed to open '%s' for reading\n", __func__, + fname_inp.c_str()); + return false; + } + + auto fout = std::ofstream(fname_out, std::ios::binary); + if (!fout) { + fprintf(stderr, "%s: failed to open '%s' for writing\n", __func__, + fname_out.c_str()); + return false; + } + + // verify magic + { + uint32_t magic; + finp.read((char *)&magic, sizeof(magic)); + if (magic != 0x67676d6c) { + fprintf(stderr, "%s: invalid model file '%s' (bad magic)\n", + __func__, fname_inp.c_str()); + return false; + } + + fout.write((char *)&magic, sizeof(magic)); + } + + mpt_hparams hparams; + + // load hparams + { + finp.read((char *) &hparams.d_model, sizeof(hparams.d_model)); + finp.read((char *) &hparams.max_seq_len, sizeof(hparams.max_seq_len)); + finp.read((char *) &hparams.n_heads, sizeof(hparams.n_heads)); + finp.read((char *) &hparams.n_layers, sizeof(hparams.n_layers)); + finp.read((char *) &hparams.n_vocab, sizeof(hparams.n_vocab)); + finp.read((char *) &hparams.ftype, sizeof(hparams.ftype)); + + const int32_t qntvr_src = hparams.ftype / GGML_QNT_VERSION_FACTOR; + const int32_t ftype_dst = GGML_QNT_VERSION * GGML_QNT_VERSION_FACTOR + ftype; + + printf("%s: d_model = %d\n", __func__, hparams.d_model); + printf("%s: max_seq_len = %d\n", __func__, hparams.max_seq_len); + printf("%s: n_heads = %d\n", __func__, hparams.n_heads); + printf("%s: n_layers = %d\n", __func__, hparams.n_layers); + printf("%s: n_vocab = %d\n", __func__, hparams.n_vocab); + printf("%s: ftype (src) = %d\n", __func__, hparams.ftype); + printf("%s: qntvr (src) = %d\n", __func__, qntvr_src); + printf("%s: ftype (dst) = %d\n", __func__, ftype_dst); + printf("%s: qntvr (dst) = %d\n", __func__, GGML_QNT_VERSION); + + fout.write((char *) &hparams.d_model, sizeof(hparams.d_model)); + fout.write((char *) &hparams.max_seq_len, sizeof(hparams.max_seq_len)); + fout.write((char *) &hparams.n_heads, sizeof(hparams.n_heads)); + fout.write((char *) &hparams.n_layers, sizeof(hparams.n_layers)); + fout.write((char *) &hparams.n_vocab, sizeof(hparams.n_vocab)); + fout.write((char *) &ftype_dst, sizeof(ftype_dst)); + } + + // load vocab + { + const int32_t n_vocab = hparams.n_vocab; + + std::string word; + for (int i = 0; i < n_vocab; i++) { + uint32_t len; + finp.read((char *)&len, sizeof(len)); + fout.write((char *)&len, sizeof(len)); + + word.resize(len); + finp.read((char *)word.data(), len); + fout.write((char *)word.data(), len); + + float prob; + finp.read((char *)&prob, sizeof(prob)); + fout.write((char *)&prob, sizeof(prob)); + } + } + + printf("%s: quantizing tensors\n", __func__); + + // regexes of tensor names to be quantized + const std::vector to_quant = { + ".*weight", + }; + + if (!ggml_common_quantize_0(finp, fout, ftype, to_quant, {})) { + fprintf(stderr, "%s: failed to quantize model '%s'\n", __func__, + fname_inp.c_str()); + return false; + } + + finp.close(); + fout.close(); + + return true; +} + +// usage: +// ./replit-quantize models/replit/ggml-model.bin +// models/replit/ggml-model-quant.bin type +// +int main(int argc, char ** argv) { + if (argc != 4) { + fprintf(stderr, "usage: %s model-f32.bin model-quant.bin type\n", + argv[0]); + ggml_print_ftypes(stderr); + return 1; + } + + // needed to initialize f16 tables + { + struct ggml_init_params params = {0, NULL, false}; + struct ggml_context * ctx = ggml_init(params); + ggml_free(ctx); + } + + const std::string fname_inp = argv[1]; + const std::string fname_out = argv[2]; + + const ggml_ftype ftype = ggml_parse_ftype(argv[3]); + + const int64_t t_main_start_us = ggml_time_us(); + + int64_t t_quantize_us = 0; + + // load the model + { + const int64_t t_start_us = ggml_time_us(); + + if (!mpt_model_quantize(fname_inp, fname_out, ggml_ftype(ftype))) { + fprintf(stderr, "%s: failed to quantize model from '%s'\n", + __func__, fname_inp.c_str()); + return 1; + } + + t_quantize_us = ggml_time_us() - t_start_us; + } + + // report timing + { + const int64_t t_main_end_us = ggml_time_us(); + + printf("\n"); + printf("%s: quantize time = %8.2f ms\n", __func__, + t_quantize_us / 1000.0f); + printf("%s: total time = %8.2f ms\n", __func__, + (t_main_end_us - t_main_start_us) / 1000.0f); + } + + return 0; +} diff --git a/ggml_old/examples/starcoder/CMakeLists.txt b/ggml_old/examples/starcoder/CMakeLists.txt new file mode 100644 index 0000000..4c25b4d --- /dev/null +++ b/ggml_old/examples/starcoder/CMakeLists.txt @@ -0,0 +1,13 @@ +# +# starcoder + +set(TEST_TARGET starcoder) +add_executable(${TEST_TARGET} main.cpp) +target_link_libraries(${TEST_TARGET} PRIVATE ggml common common-ggml) + +# +# starcoder-quantize + +set(TEST_TARGET starcoder-quantize) +add_executable(${TEST_TARGET} quantize.cpp) +target_link_libraries(${TEST_TARGET} PRIVATE ggml common common-ggml) diff --git a/ggml_old/examples/starcoder/README.md b/ggml_old/examples/starcoder/README.md new file mode 100644 index 0000000..8a43ab7 --- /dev/null +++ b/ggml_old/examples/starcoder/README.md @@ -0,0 +1,112 @@ +# 💫 StarCoder + +This is a C++ example running 💫 StarCoder inference using the [ggml](https://github.com/ggerganov/ggml) library. + +The program runs on the CPU - no video card is required. + +The example supports the following 💫 StarCoder models: + +- `bigcode/starcoder` +- `bigcode/gpt_bigcode-santacoder` aka the smol StarCoder + +Sample performance on MacBook M1 Pro: + +TODO + + +Sample output: + +``` +$ ./bin/starcoder -h +usage: ./bin/starcoder [options] + +options: + -h, --help show this help message and exit + -s SEED, --seed SEED RNG seed (default: -1) + -t N, --threads N number of threads to use during computation (default: 8) + -p PROMPT, --prompt PROMPT + prompt to start generation with (default: random) + -n N, --n_predict N number of tokens to predict (default: 200) + --top_k N top-k sampling (default: 40) + --top_p N top-p sampling (default: 0.9) + --temp N temperature (default: 1.0) + -b N, --batch_size N batch size for prompt processing (default: 8) + -m FNAME, --model FNAME + model path (default: models/starcoder-117M/ggml-model.bin) + +$ ./bin/starcoder -m ../models/bigcode/gpt_bigcode-santacoder-ggml-q4_1.bin -p "def fibonnaci(" -t 4 --top_k 0 --top_p 0.95 --temp 0.2 +main: seed = 1683881276 +starcoder_model_load: loading model from '../models/bigcode/gpt_bigcode-santacoder-ggml-q4_1.bin' +starcoder_model_load: n_vocab = 49280 +starcoder_model_load: n_ctx = 2048 +starcoder_model_load: n_embd = 2048 +starcoder_model_load: n_head = 16 +starcoder_model_load: n_layer = 24 +starcoder_model_load: ftype = 3 +starcoder_model_load: ggml ctx size = 1794.90 MB +starcoder_model_load: memory size = 768.00 MB, n_mem = 49152 +starcoder_model_load: model size = 1026.83 MB +main: prompt: 'def fibonnaci(' +main: number of tokens in prompt = 7, first 8 tokens: 563 24240 78 2658 64 2819 7 + +def fibonnaci(n): + if n == 0: + return 0 + elif n == 1: + return 1 + else: + return fibonacci(n-1) + fibonacci(n-2) + +print(fibo(10)) + +main: mem per token = 9597928 bytes +main: load time = 480.43 ms +main: sample time = 26.21 ms +main: predict time = 3987.95 ms / 19.36 ms per token +main: total time = 4580.56 ms +``` + +## Quick start +```bash +git clone https://github.com/ggerganov/ggml +cd ggml + +# Convert HF model to ggml +python examples/starcoder/convert-hf-to-ggml.py bigcode/gpt_bigcode-santacoder + +# Build ggml + examples +mkdir build && cd build +cmake .. && make -j4 starcoder starcoder-quantize + +# quantize the model +./bin/starcoder-quantize ../models/bigcode/gpt_bigcode-santacoder-ggml.bin ../models/bigcode/gpt_bigcode-santacoder-ggml-q4_1.bin 3 + +# run inference +./bin/starcoder -m ../models/bigcode/gpt_bigcode-santacoder-ggml-q4_1.bin -p "def fibonnaci(" --top_k 0 --top_p 0.95 --temp 0.2 +``` + + +## Downloading and converting the original models (💫 StarCoder) + +You can download the original model and convert it to `ggml` format using the script `convert-hf-to-ggml.py`: + +``` +# Convert HF model to ggml +python examples/starcoder/convert-hf-to-ggml.py bigcode/gpt_bigcode-santacoder +``` + +This conversion requires that you have python and Transformers installed on your computer. + +## Quantizing the models + +You can also try to quantize the `ggml` models via 4-bit integer quantization. + +``` +# quantize the model +./bin/starcoder-quantize ../models/bigcode/gpt_bigcode-santacoder-ggml.bin ../models/bigcode/gpt_bigcode-santacoder-ggml-q4_1.bin 3 +``` + +| Model | Original size | Quantized size | Quantization type | +| --- | --- | --- | --- | +| `bigcode/gpt_bigcode-santacoder` | 5396.45 MB | 1026.83 MB | 4-bit integer (q4_1) | +| `bigcode/starcoder` | 71628.23 MB | 13596.23 MB | 4-bit integer (q4_1) | diff --git a/ggml_old/examples/starcoder/convert-hf-to-ggml.py b/ggml_old/examples/starcoder/convert-hf-to-ggml.py new file mode 100644 index 0000000..c3ddfe7 --- /dev/null +++ b/ggml_old/examples/starcoder/convert-hf-to-ggml.py @@ -0,0 +1,212 @@ +# Convert HF models to ggml format +# + +import sys +import struct +import json +import torch +import numpy as np +import re +import os + +from transformers import AutoModelForCausalLM +from transformers import AutoTokenizer, AutoModelForCausalLM, AutoConfig, BloomForCausalLM + +# ref: https://github.com/openai/gpt-2/blob/master/src/encoder.py +def bytes_to_unicode(): + """ + Returns list of utf-8 byte and a corresponding list of unicode strings. + The reversible bpe codes work on unicode strings. + This means you need a large # of unicode characters in your vocab if you want to avoid UNKs. + When you're at something like a 10B token dataset you end up needing around 5K for decent coverage. + This is a signficant percentage of your normal, say, 32K bpe vocab. + To avoid that, we want lookup tables between utf-8 bytes and unicode strings. + And avoids mapping to whitespace/control characters the bpe code barfs on. + """ + bs = list(range(ord("!"), ord("~")+1))+list(range(ord("¡"), ord("¬")+1))+list(range(ord("®"), ord("ÿ")+1)) + cs = bs[:] + n = 0 + for b in range(2**8): + if b not in bs: + bs.append(b) + cs.append(2**8+n) + n += 1 + cs = [chr(n) for n in cs] + return dict(zip(bs, cs)) + +if len(sys.argv) < 2: + print("Usage: python convert-hf-to-ggml.py hf-model-name [use-f32]") + print("Example: python convert-hf-to-ggml.py bigcode/gpt_bigcode-santacoder") + print("Example: python convert-hf-to-ggml.py bigcode/starcoder") + sys.exit(1) + +model_name = sys.argv[1].strip() +fname_out = "models/" + sys.argv[1].strip() + "-ggml.bin" +os.makedirs(os.path.dirname(fname_out), exist_ok=True) + + + +# use 16-bit or 32-bit floats +use_f16 = True +if len(sys.argv) > 2: + use_f16 = False + +print("Loading model: ", model_name) +tokenizer = AutoTokenizer.from_pretrained(model_name) +config = AutoConfig.from_pretrained(model_name, trust_remote_code=True) +hparams = config.to_dict() +model = AutoModelForCausalLM.from_pretrained(model_name, config=config, torch_dtype=torch.float16 if use_f16 else torch.float32, low_cpu_mem_usage=True, trust_remote_code=True, offload_state_dict=True) +print("Model loaded: ", model_name) + +#print (model) + +list_vars = model.state_dict() +#print (list_vars) + +encoder = tokenizer.vocab +# Add added_tokens (special tokens) to the encoder +encoder.update(tokenizer.get_added_vocab()) +print(hparams) + +print("Saving ggml model to: ", fname_out) +fout = open(fname_out, "wb") + +fout.write(struct.pack("i", 0x67676d6c)) # magic: ggml in hex +vocab_size = hparams["vocab_size"] +fout.write(struct.pack("i", vocab_size)) +# fout.write(struct.pack("i", len(encoder))) +fout.write(struct.pack("i", hparams["n_positions"])) +fout.write(struct.pack("i", hparams["n_embd"])) +fout.write(struct.pack("i", hparams["n_head"])) +fout.write(struct.pack("i", hparams["n_layer"])) +fout.write(struct.pack("i", use_f16)) + +byte_encoder = bytes_to_unicode() +byte_decoder = {v:k for k, v in byte_encoder.items()} + +fout.write(struct.pack("i", vocab_size)) + +counter = 0 +# sort by value +for key in sorted(encoder, key=encoder.get): + text = bytearray([byte_decoder[c] for c in key]) + fout.write(struct.pack("i", len(text))) + fout.write(text) + counter += 1 + +# TODO: Repeat last token until vocab_size +while counter < vocab_size: + fout.write(struct.pack("i", len(text))) + fout.write(text) + counter += 1 +# assert counter == config.vocab_size + +for name in list_vars.keys(): + data = list_vars[name].squeeze().numpy() + print("Processing variable: " + name + " with shape: ", data.shape) + + # rename headers to keep compatibility + if name == "transformer.ln_f.weight": + name = "model/ln_f/g" + elif name == "transformer.ln_f.bias": + name = "model/ln_f/b" + elif name == "transformer.wte.weight": + name = "model/wte" + elif name == "transformer.wpe.weight": + name = "model/wpe" + elif name == "lm_head.weight": + name = "model/lm_head" + elif re.match(r"transformer.h\.\d+\.ln_1\.weight", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/ln_1/g" + elif re.match(r"transformer.h\.\d+\.ln_1\.bias", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/ln_1/b" + elif re.match(r"transformer.h\.\d+\.attn\.c_attn\.weight", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/attn/c_attn/w" + elif re.match(r"transformer.h\.\d+\.attn\.c_attn\.bias", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/attn/c_attn/b" + elif re.match(r"transformer.h\.\d+\.attn\.c_proj\.weight", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/attn/c_proj/w" + elif re.match(r"transformer.h.\d+.attn.c_proj.bias", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/attn/c_proj/b" + elif re.match(r"transformer.h.\d+.ln_2.weight", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/ln_2/g" + elif re.match(r"transformer.h.\d+.ln_2.bias", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/ln_2/b" + elif re.match(r"transformer.h.\d+.mlp.c_fc.weight", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/mlp/c_fc/w" + elif re.match(r"transformer.h.\d+.mlp.c_fc.bias", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/mlp/c_fc/b" + elif re.match(r"transformer.h.\d+.mlp.c_proj.weight", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/mlp/c_proj/w" + elif re.match(r"transformer.h.\d+.mlp.c_proj.bias", name): + i = re.findall("\d+", name)[0] + name = f"model/h{i}/mlp/c_proj/b" + else: + print("Unrecognized variable name. %s", name) + + # we don't need these + if name.endswith("attn.masked_bias") or name.endswith(".attn.bias"): + print(" Skipping variable: " + name) + continue + + n_dims = len(data.shape); + + # ftype == 0 -> float32, ftype == 1 -> float16 + ftype = 0; + if use_f16: + if (name == "model/wte" or name == "model/lm_head" or name[-2:] == "/g" or name[-2:] == "/w") and n_dims == 2: + print(" Converting to float16") + data = data.astype(np.float16) + ftype = 1 + else: + print(" Converting to float32") + data = data.astype(np.float32) + ftype = 0 + + "model/h.*/attn/c_attn/w" + "model/h.*/attn/c_proj/w" + "model/h.*/mlp/c_fc/w" + "model/h.*/mlp/c_proj/w" + if name[-14:] == "/attn/c_attn/w" or name[-14:] == "/attn/c_attn/b": + print(" Duplicate K,V heads to use MHA instead of MQA") + + embed_dim = hparams["n_embd"] + head_dim = embed_dim // hparams["n_head"] + + # ((n_heads + 2) * head_dim, hidden_dim) -> (3 * n_heads * head_dim, hidden_dim) + q, k ,v = np.split(data, (hparams["n_head"] * head_dim, (hparams["n_head"] + 1) * head_dim), axis=0) + # duplicate k, v along the first axis (head_dim, hidden_dim) -> (n_heads * head_dim, hidden_dim) + if len(k.shape) == 2: + k = np.tile(k, (hparams["n_head"], 1)) + v = np.tile(v, (hparams["n_head"], 1)) + elif len(k.shape) == 1: + k = np.tile(k, (hparams["n_head"])) + v = np.tile(v, (hparams["n_head"])) + # concat q, k, v along the first axis (n_heads * head_dim, hidden_dim) -> (3 * n_heads * head_dim, hidden_dim) + data = np.concatenate((q, k, v), axis=0) + + # header + str = name.encode('utf-8') + fout.write(struct.pack("iii", n_dims, len(str), ftype)) + for i in range(n_dims): + fout.write(struct.pack("i", data.shape[n_dims - 1 - i])) + fout.write(str); + + # data + data.tofile(fout) + +fout.close() + +print("Done. Output file: " + fname_out) +print("") diff --git a/ggml_old/examples/starcoder/main.cpp b/ggml_old/examples/starcoder/main.cpp new file mode 100644 index 0000000..2a6be4e --- /dev/null +++ b/ggml_old/examples/starcoder/main.cpp @@ -0,0 +1,868 @@ +#include "ggml/ggml.h" + +#include "common.h" +#include "common-ggml.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +// default hparams (GPT-2 117M) +// https://huggingface.co/bigcode/gpt_bigcode-santacoder/blob/main/config.json +struct starcoder_hparams { + int32_t n_vocab = 49280; + int32_t n_ctx = 2048; + int32_t n_embd = 2048; + int32_t n_head = 16; + int32_t n_layer = 24; + int32_t ftype = 1; +}; + +struct starcoder_layer { + // normalization + struct ggml_tensor * ln_1_g; + struct ggml_tensor * ln_1_b; + + struct ggml_tensor * ln_2_g; + struct ggml_tensor * ln_2_b; + + // attention + struct ggml_tensor * c_attn_attn_w; + struct ggml_tensor * c_attn_attn_b; + + struct ggml_tensor * c_attn_proj_w; + struct ggml_tensor * c_attn_proj_b; + + // mlp + struct ggml_tensor * c_mlp_fc_w; + struct ggml_tensor * c_mlp_fc_b; + + struct ggml_tensor * c_mlp_proj_w; + struct ggml_tensor * c_mlp_proj_b; +}; + +struct starcoder_model { + starcoder_hparams hparams; + + // normalization + struct ggml_tensor * ln_f_g; + struct ggml_tensor * ln_f_b; + + struct ggml_tensor * wte; // position embedding + struct ggml_tensor * wpe; // token embedding + struct ggml_tensor * lm_head; // language model head + + std::vector layers; + + // key + value memory + struct ggml_tensor * memory_k; + struct ggml_tensor * memory_v; + + // + struct ggml_context * ctx; + std::map tensors; +}; + +// load the model's weights from a file +bool starcoder_model_load(const std::string & fname, starcoder_model & model, gpt_vocab & vocab) { + printf("%s: loading model from '%s'\n", __func__, fname.c_str()); + + auto fin = std::ifstream(fname, std::ios::binary); + if (!fin) { + fprintf(stderr, "%s: failed to open '%s'\n", __func__, fname.c_str()); + return false; + } + + // verify magic + { + uint32_t magic; + fin.read((char *) &magic, sizeof(magic)); + if (magic != 0x67676d6c) { + fprintf(stderr, "%s: invalid model file '%s' (bad magic)\n", __func__, fname.c_str()); + return false; + } + } + + // load hparams + { + auto & hparams = model.hparams; + + fin.read((char *) &hparams.n_vocab, sizeof(hparams.n_vocab)); + fin.read((char *) &hparams.n_ctx, sizeof(hparams.n_ctx)); + fin.read((char *) &hparams.n_embd, sizeof(hparams.n_embd)); + fin.read((char *) &hparams.n_head, sizeof(hparams.n_head)); + fin.read((char *) &hparams.n_layer, sizeof(hparams.n_layer)); + fin.read((char *) &hparams.ftype, sizeof(hparams.ftype)); + + const int32_t qntvr = hparams.ftype / GGML_QNT_VERSION_FACTOR; + + printf("%s: n_vocab = %d\n", __func__, hparams.n_vocab); + printf("%s: n_ctx = %d\n", __func__, hparams.n_ctx); + printf("%s: n_embd = %d\n", __func__, hparams.n_embd); + printf("%s: n_head = %d\n", __func__, hparams.n_head); + printf("%s: n_layer = %d\n", __func__, hparams.n_layer); + printf("%s: ftype = %d\n", __func__, hparams.ftype); + printf("%s: qntvr = %d\n", __func__, qntvr); + + hparams.ftype %= GGML_QNT_VERSION_FACTOR; + } + + // load vocab + { + int32_t n_vocab = 0; + fin.read((char *) &n_vocab, sizeof(n_vocab)); + + if (n_vocab != model.hparams.n_vocab) { + fprintf(stderr, "%s: invalid model file '%s' (bad vocab size %d != %d)\n", + __func__, fname.c_str(), n_vocab, model.hparams.n_vocab); + return false; + } + + std::string word; + std::vector buf(128); + + for (int i = 0; i < n_vocab; i++) { + uint32_t len; + fin.read((char *) &len, sizeof(len)); + + buf.resize(len); + fin.read((char *) buf.data(), len); + word.assign(buf.data(), len); + + vocab.token_to_id[word] = i; + vocab.id_to_token[i] = word; + + // if (i < 10) fprintf(stderr, "%.s: vocab[%d] = '%s'\n", __func__, i, word.c_str()); + } + } + + // for the big tensors, we have the option to store the data in 16-bit floats or quantized + // in order to save memory and also to speed up the computation + ggml_type wtype = ggml_ftype_to_ggml_type((ggml_ftype) (model.hparams.ftype)); + if (wtype == GGML_TYPE_COUNT) { + fprintf(stderr, "%s: invalid model file '%s' (bad ftype value %d)\n", + __func__, fname.c_str(), model.hparams.ftype); + return false; + } + + auto & ctx = model.ctx; + + size_t ctx_size = 0; + + { + const auto & hparams = model.hparams; + + const int n_embd = hparams.n_embd; + const int n_layer = hparams.n_layer; + const int n_ctx = hparams.n_ctx; + const int n_vocab = hparams.n_vocab; + + const int head_dim = n_embd / hparams.n_head; + const int kv_heads = hparams.n_head; // 1 if MQA else hparams.n_head + const int kv_dim = kv_heads * head_dim; + + ctx_size += n_embd*ggml_type_sizef(GGML_TYPE_F32); // ln_f_g + ctx_size += n_embd*ggml_type_sizef(GGML_TYPE_F32); // ln_f_b + + ctx_size += n_vocab*n_embd*ggml_type_sizef(wtype); // wte + ctx_size += n_ctx*n_embd*ggml_type_sizef(GGML_TYPE_F32); // wpe + ctx_size += n_vocab*n_embd*ggml_type_sizef(wtype); // lm_head + + ctx_size += n_layer*(n_embd*ggml_type_sizef(GGML_TYPE_F32)); // ln_1_g + ctx_size += n_layer*(n_embd*ggml_type_sizef(GGML_TYPE_F32)); // ln_1_b + + ctx_size += n_layer*(n_embd*ggml_type_sizef(GGML_TYPE_F32)); // ln_2_g + ctx_size += n_layer*(n_embd*ggml_type_sizef(GGML_TYPE_F32)); // ln_2_b + + ctx_size += n_layer*((n_embd + 2*kv_dim)*n_embd*ggml_type_sizef(wtype)); // c_attn_attn_w // TODO: + ctx_size += n_layer*( (n_embd + 2*kv_dim)*ggml_type_sizef(GGML_TYPE_F32)); // c_attn_attn_b + + ctx_size += n_layer*(n_embd*n_embd*ggml_type_sizef(wtype)); // c_attn_proj_w + ctx_size += n_layer*( n_embd*ggml_type_sizef(GGML_TYPE_F32)); // c_attn_proj_b + + ctx_size += n_layer*(4*n_embd*n_embd*ggml_type_sizef(wtype)); // c_mlp_fc_w + ctx_size += n_layer*( 4*n_embd*ggml_type_sizef(GGML_TYPE_F32)); // c_mlp_fc_b + + ctx_size += n_layer*(4*n_embd*n_embd*ggml_type_sizef(wtype)); // c_mlp_proj_w + ctx_size += n_layer*( n_embd*ggml_type_sizef(GGML_TYPE_F32)); // c_mlp_proj_b + + ctx_size += n_ctx*n_layer*n_embd*ggml_type_sizef(GGML_TYPE_F32); // memory_k + ctx_size += n_ctx*n_layer*n_embd*ggml_type_sizef(GGML_TYPE_F32); // memory_v + + ctx_size += (6 + 12*n_layer)*512; // object overhead + + printf("%s: ggml ctx size = %6.2f MB\n", __func__, ctx_size/(1024.0*1024.0)); + } + + // create the ggml context + { + struct ggml_init_params params = { + .mem_size = ctx_size, + .mem_buffer = NULL, + .no_alloc = false, + }; + + model.ctx = ggml_init(params); + if (!model.ctx) { + fprintf(stderr, "%s: ggml_init() failed\n", __func__); + return false; + } + } + + // prepare memory for the weights + { + const auto & hparams = model.hparams; + + const int n_embd = hparams.n_embd; + const int n_layer = hparams.n_layer; + const int n_ctx = hparams.n_ctx; + const int n_vocab = hparams.n_vocab; + + const int head_dim = n_embd / hparams.n_head; + const int kv_heads = hparams.n_head; // 1 if MQA else hparams.n_head + const int kv_dim = kv_heads * head_dim; + + model.layers.resize(n_layer); + + model.ln_f_g = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + model.ln_f_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + + model.wte = ggml_new_tensor_2d(ctx, wtype, n_embd, n_vocab); + model.wpe = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, n_embd, n_ctx); + model.lm_head = ggml_new_tensor_2d(ctx, wtype, n_embd, n_vocab); + + // map by name + model.tensors["model/ln_f/g"] = model.ln_f_g; + model.tensors["model/ln_f/b"] = model.ln_f_b; + + model.tensors["model/wte"] = model.wte; + model.tensors["model/wpe"] = model.wpe; + model.tensors["model/lm_head"] = model.lm_head; + + for (int i = 0; i < n_layer; ++i) { + auto & layer = model.layers[i]; + + layer.ln_1_g = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + layer.ln_1_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + + layer.ln_2_g = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + layer.ln_2_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + + layer.c_attn_attn_w = ggml_new_tensor_2d(ctx, wtype, n_embd, n_embd + 2*kv_dim); + layer.c_attn_attn_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd + 2*kv_dim); + + layer.c_attn_proj_w = ggml_new_tensor_2d(ctx, wtype, n_embd, n_embd); + layer.c_attn_proj_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + + layer.c_mlp_fc_w = ggml_new_tensor_2d(ctx, wtype, n_embd, 4*n_embd); //TODO: 4*n_embd = config.n_inner + layer.c_mlp_fc_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 4*n_embd); + + layer.c_mlp_proj_w = ggml_new_tensor_2d(ctx, wtype, 4*n_embd, n_embd); + layer.c_mlp_proj_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_embd); + + // map by name + model.tensors["model/h" + std::to_string(i) + "/ln_1/g"] = layer.ln_1_g; + model.tensors["model/h" + std::to_string(i) + "/ln_1/b"] = layer.ln_1_b; + + model.tensors["model/h" + std::to_string(i) + "/ln_2/g"] = layer.ln_2_g; + model.tensors["model/h" + std::to_string(i) + "/ln_2/b"] = layer.ln_2_b; + + model.tensors["model/h" + std::to_string(i) + "/attn/c_attn/w"] = layer.c_attn_attn_w; + model.tensors["model/h" + std::to_string(i) + "/attn/c_attn/b"] = layer.c_attn_attn_b; + + model.tensors["model/h" + std::to_string(i) + "/attn/c_proj/w"] = layer.c_attn_proj_w; + model.tensors["model/h" + std::to_string(i) + "/attn/c_proj/b"] = layer.c_attn_proj_b; + + model.tensors["model/h" + std::to_string(i) + "/mlp/c_fc/w"] = layer.c_mlp_fc_w; + model.tensors["model/h" + std::to_string(i) + "/mlp/c_fc/b"] = layer.c_mlp_fc_b; + + model.tensors["model/h" + std::to_string(i) + "/mlp/c_proj/w"] = layer.c_mlp_proj_w; + model.tensors["model/h" + std::to_string(i) + "/mlp/c_proj/b"] = layer.c_mlp_proj_b; + } + } + + // key + value memory + { + const auto & hparams = model.hparams; + + const int n_embd = hparams.n_embd; + const int n_layer = hparams.n_layer; + const int n_ctx = hparams.n_ctx; + + const int n_mem = n_layer*n_ctx; + const int n_elements = n_embd*n_mem; + + model.memory_k = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_elements); + model.memory_v = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_elements); + + const size_t memory_size = ggml_nbytes(model.memory_k) + ggml_nbytes(model.memory_v); + + printf("%s: memory size = %8.2f MB, n_mem = %d\n", __func__, memory_size/1024.0/1024.0, n_mem); + } + + // load weights + { + size_t total_size = 0; + + bool has_lm_head = false; + + while (true) { + int32_t n_dims; + int32_t length; + int32_t ttype; + + fin.read(reinterpret_cast(&n_dims), sizeof(n_dims)); + fin.read(reinterpret_cast(&length), sizeof(length)); + fin.read(reinterpret_cast(&ttype), sizeof(ttype)); + + if (fin.eof()) { + break; + } + + int32_t nelements = 1; + int32_t ne[2] = { 1, 1 }; + for (int i = 0; i < n_dims; ++i) { + fin.read(reinterpret_cast(&ne[i]), sizeof(ne[i])); + nelements *= ne[i]; + } + + std::string name(length, 0); + fin.read(&name[0], length); + + if (model.tensors.find(name.data()) == model.tensors.end()) { + fprintf(stderr, "%s: unknown tensor '%s' in model file\n", __func__, name.data()); + return false; + } + + auto tensor = model.tensors[name.data()]; + if (tensor->ne[0] != ne[0] || tensor->ne[1] != ne[1]) { + fprintf(stderr, "%s: tensor '%s' has wrong shape in model file: got [%d, %d], expected [%d, %d]\n", + __func__, name.data(), (int) tensor->ne[0], (int) tensor->ne[1], ne[0], ne[1]); + return false; + } + if (ggml_nelements(tensor) != nelements) { + fprintf(stderr, "%s: tensor '%s' has wrong size in model file. got %d, expected %d\n", + __func__, name.data(), (int) ggml_nelements(tensor), nelements); + return false; + } + + // for debugging + if (0) { + printf("%24s - [%5d, %5d], type = %6s, %6.2f MB, %9zu bytes\n", name.data(), ne[0], ne[1], ggml_type_name(ggml_type(ttype)), ggml_nbytes(tensor)/1024.0/1024.0, ggml_nbytes(tensor)); + } + + const size_t bpe = ggml_type_size(ggml_type(ttype)); + + if ((nelements*bpe)/ggml_blck_size(tensor->type) != ggml_nbytes(tensor)) { + fprintf(stderr, "%s: tensor '%s' has wrong size in model file: got %zu, expected %zu\n", + __func__, name.data(), ggml_nbytes(tensor), nelements*bpe); + return false; + } + + fin.read(reinterpret_cast(tensor->data), ggml_nbytes(tensor)); + + // GPT-2 models share the WTE tensor as the LM head + if (name == "model/wte" && has_lm_head == false) { + memcpy(model.lm_head->data, tensor->data, ggml_nbytes(tensor)); + } + + if (name == "model/lm_head") { + has_lm_head = true; + } + + total_size += ggml_nbytes(tensor); + } + + printf("%s: model size = %8.2f MB\n", __func__, total_size/1024.0/1024.0); + } + + fin.close(); + + return true; +} + +// evaluate the transformer +// +// - model: the model +// - n_threads: number of threads to use +// - n_past: the context size so far +// - embd_inp: the embeddings of the tokens in the context +// - embd_w: the predicted logits for the next token +// +bool starcoder_eval( + const starcoder_model & model, + const int n_threads, + const int n_past, + const std::vector & embd_inp, + std::vector & embd_w, + size_t & mem_per_token) { + const int N = embd_inp.size(); + + const auto & hparams = model.hparams; + + const int n_embd = hparams.n_embd; + const int n_layer = hparams.n_layer; + const int n_ctx = hparams.n_ctx; + const int n_head = hparams.n_head; + const int n_vocab = hparams.n_vocab; + + static size_t buf_size = 256u*1024*1024; + static void * buf = malloc(buf_size); + + // use 2 scratch buffers + // TODO: very hacky solution - reimplement in a more elegant way + static size_t scr0_size = 256u*1024*1024; + static void * scr0 = malloc(scr0_size); + + static size_t scr1_size = 256u*1024*1024; + static void * scr1 = malloc(scr1_size); + + if (mem_per_token > 0 && mem_per_token*N > buf_size) { + const size_t buf_size_new = 1.1*(mem_per_token*N); // add 10% to account for ggml object overhead + //printf("\n%s: reallocating buffer from %zu to %zu bytes\n", __func__, buf_size, buf_size_new); + + // reallocate + buf_size = buf_size_new; + buf = realloc(buf, buf_size); + if (buf == nullptr) { + fprintf(stderr, "%s: failed to allocate %zu bytes\n", __func__, buf_size); + return false; + } + } + + struct ggml_init_params params = { + .mem_size = buf_size, + .mem_buffer = buf, + .no_alloc = false, + }; + + struct ggml_context * ctx0 = ggml_init(params); + struct ggml_cgraph gf = {}; + gf.n_threads = n_threads; + + struct ggml_tensor * embd = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, N); + memcpy(embd->data, embd_inp.data(), N*ggml_element_size(embd)); + + struct ggml_tensor * position = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, N); + for (int i = 0; i < N; ++i) { + ((int32_t *) position->data)[i] = n_past + i; + } + + // wte + wpe + struct ggml_tensor * inpL = + ggml_add(ctx0, + ggml_get_rows(ctx0, model.wte, embd), + ggml_get_rows(ctx0, model.wpe, position)); + + for (int il = 0; il < n_layer; ++il) { + struct ggml_tensor * cur; + + ggml_set_scratch(ctx0, { 0, scr0_size, scr0, }); + + // norm + { + // [ 768, N] + cur = ggml_norm(ctx0, inpL); + + // cur = ln_1_g*cur + ln_1_b + // [ 768, N] + cur = ggml_add(ctx0, + ggml_mul(ctx0, + ggml_repeat(ctx0, model.layers[il].ln_1_g, cur), + cur), + ggml_repeat(ctx0, model.layers[il].ln_1_b, cur)); + } + + // attn + // [2304, 768] - model.layers[il].c_attn_attn_w + // [2304, 1] - model.layers[il].c_attn_attn_b + // [ 768, N] - cur (in) + // [2304, N] - cur (out) + // + // cur = attn_w*cur + attn_b + // [2304, N] + { + cur = ggml_mul_mat(ctx0, + model.layers[il].c_attn_attn_w, + cur); + + cur = ggml_add(ctx0, + ggml_repeat(ctx0, model.layers[il].c_attn_attn_b, cur), + cur); + } + + // self-attention + { + struct ggml_tensor * Qcur = ggml_view_2d(ctx0, cur, n_embd, N, cur->nb[1], 0*sizeof(float)*n_embd); + struct ggml_tensor * Kcur = ggml_view_2d(ctx0, cur, n_embd, N, cur->nb[1], 1*sizeof(float)*n_embd); + struct ggml_tensor * Vcur = ggml_view_2d(ctx0, cur, n_embd, N, cur->nb[1], 2*sizeof(float)*n_embd); + + // store key and value to memory + if (N >= 1) { + struct ggml_tensor * k = ggml_view_1d(ctx0, model.memory_k, N*n_embd, (ggml_element_size(model.memory_k)*n_embd)*(il*n_ctx + n_past)); + struct ggml_tensor * v = ggml_view_1d(ctx0, model.memory_v, N*n_embd, (ggml_element_size(model.memory_v)*n_embd)*(il*n_ctx + n_past)); + + ggml_build_forward_expand(&gf, ggml_cpy(ctx0, Kcur, k)); + ggml_build_forward_expand(&gf, ggml_cpy(ctx0, Vcur, v)); + } + + // Q = Qcur.contiguous().view(n_embd/n_head, n_head, N).permute(0, 2, 1, 3) + // [64, N, 12] + struct ggml_tensor * Q = + ggml_permute(ctx0, + ggml_cpy(ctx0, + Qcur, + ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_embd/n_head, n_head, N)), + 0, 2, 1, 3); + + // K = Kmem.view(n_embd/n_head, n_head, n_past + N).permute(0, 2, 1, 3) + // [64, n_past + N, 12] + struct ggml_tensor * K = + ggml_permute(ctx0, + ggml_reshape_3d(ctx0, + ggml_view_1d(ctx0, model.memory_k, (n_past + N)*n_embd, il*n_ctx*ggml_element_size(model.memory_k)*n_embd), + n_embd/n_head, n_head, n_past + N), + 0, 2, 1, 3); //TODO: need to be tiled + + // GG: flash attention + //struct ggml_tensor * V = + // ggml_cpy(ctx0, + // ggml_permute(ctx0, + // ggml_reshape_3d(ctx0, + // ggml_view_1d(ctx0, model.memory_v, (n_past + N)*n_embd, il*n_ctx*ggml_element_size(model.memory_v)*n_embd), + // n_embd/n_head, n_head, n_past + N), + // 1, 2, 0, 3), + // ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_past + N, n_embd/n_head, n_head)); + + //struct ggml_tensor * KQV = ggml_flash_attn(ctx0, Q, K, V, true); + + // K * Q + // [n_past + N, N, 12] + struct ggml_tensor * KQ = ggml_mul_mat(ctx0, K, Q); //TODO: check if it broadcasts + + // KQ_scaled = KQ / sqrt(n_embd/n_head) + // [n_past + N, N, 12] + struct ggml_tensor * KQ_scaled = + ggml_scale_inplace(ctx0, + KQ, + ggml_new_f32(ctx0, 1.0f/sqrt(float(n_embd)/n_head)) + ); + + // KQ_masked = mask_past(KQ_scaled) + // [n_past + N, N, 12] + struct ggml_tensor * KQ_masked = ggml_diag_mask_inf_inplace(ctx0, KQ_scaled, n_past); + + // KQ = soft_max(KQ_masked) + // [n_past + N, N, 12] + struct ggml_tensor * KQ_soft_max = ggml_soft_max_inplace(ctx0, KQ_masked); + + // V_trans = Vmem.view(n_embd/n_head, n_head, n_past + N).permute(1, 2, 0, 3).contiguous() + // [n_past + N, 64, 12] + struct ggml_tensor * V_trans = + ggml_cpy(ctx0, + ggml_permute(ctx0, + ggml_reshape_3d(ctx0, + ggml_view_1d(ctx0, model.memory_v, (n_past + N)*n_embd, il*n_ctx*ggml_element_size(model.memory_v)*n_embd), + n_embd/n_head, n_head, n_past + N), + 1, 2, 0, 3), + ggml_new_tensor_3d(ctx0, model.memory_v->type, n_past + N, n_embd/n_head, n_head)); + + // KQV = transpose(V) * KQ_soft_max + // [64, N, 12] + struct ggml_tensor * KQV = ggml_mul_mat(ctx0, V_trans, KQ_soft_max); + + // KQV_merged = KQV.permute(0, 2, 1, 3) + // [64, 12, N] + struct ggml_tensor * KQV_merged = ggml_permute(ctx0, KQV, 0, 2, 1, 3); + + // cur = KQV_merged.contiguous().view(n_embd, N) + // [768, N] + cur = ggml_cpy(ctx0, + KQV_merged, + ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_embd, N)); + } + + // projection + // [ 768, 768] - model.layers[il].c_attn_proj_w + // [ 768, 1] - model.layers[il].c_attn_proj_b + // [ 768, N] - cur (in) + // [ 768, N] - cur (out) + // + // cur = proj_w*cur + proj_b + // [768, N] + { + cur = ggml_mul_mat(ctx0, + model.layers[il].c_attn_proj_w, + cur); + + cur = ggml_add(ctx0, + ggml_repeat(ctx0, model.layers[il].c_attn_proj_b, cur), + cur); + } + + // add the input + cur = ggml_add(ctx0, cur, inpL); + + struct ggml_tensor * inpFF = cur; + + ggml_set_scratch(ctx0, { 0, scr1_size, scr1, }); + + // feed-forward network + { + // norm + { + cur = ggml_norm(ctx0, inpFF); + + // cur = ln_2_g*cur + ln_2_b + // [ 768, N] + cur = ggml_add(ctx0, + ggml_mul(ctx0, + ggml_repeat(ctx0, model.layers[il].ln_2_g, cur), + cur), + ggml_repeat(ctx0, model.layers[il].ln_2_b, cur)); + } + + // fully connected + // [3072, 768] - model.layers[il].c_mlp_fc_w + // [3072, 1] - model.layers[il].c_mlp_fc_b + // [ 768, N] - cur (in) + // [3072, N] - cur (out) + // + // cur = fc_w*cur + fc_b + // [3072, N] + cur = ggml_mul_mat(ctx0, + model.layers[il].c_mlp_fc_w, + cur); + + cur = ggml_add(ctx0, + ggml_repeat(ctx0, model.layers[il].c_mlp_fc_b, cur), + cur); + + // GELU activation + // [3072, N] + cur = ggml_gelu(ctx0, cur); + + // projection + // [ 768, 3072] - model.layers[il].c_mlp_proj_w + // [ 768, 1] - model.layers[il].c_mlp_proj_b + // [3072, N] - cur (in) + // [ 768, N] - cur (out) + // + // cur = proj_w*cur + proj_b + // [768, N] + cur = ggml_mul_mat(ctx0, + model.layers[il].c_mlp_proj_w, + cur); + + cur = ggml_add(ctx0, + ggml_repeat(ctx0, model.layers[il].c_mlp_proj_b, cur), + cur); + } + + // input for next layer + inpL = ggml_add(ctx0, cur, inpFF); + } + + ggml_set_scratch(ctx0, { 0, scr0_size, scr0, }); + + // norm + { + // [ 768, N] + inpL = ggml_norm(ctx0, inpL); + + // inpL = ln_f_g*inpL + ln_f_b + // [ 768, N] + inpL = ggml_add(ctx0, + ggml_mul(ctx0, + ggml_repeat(ctx0, model.ln_f_g, inpL), + inpL), + ggml_repeat(ctx0, model.ln_f_b, inpL)); + } + + ggml_set_scratch(ctx0, { 0, 0, nullptr, }); + + // inpL = WTE * inpL + // [ 768, 50257] - model.lm_head + // [ 768, N] - inpL + inpL = ggml_mul_mat(ctx0, model.lm_head, inpL); + + // logits -> probs + //inpL = ggml_soft_max_inplace(ctx0, inpL); + + // run the computation + ggml_build_forward_expand(&gf, inpL); + ggml_graph_compute (ctx0, &gf); + + //if (n_past%100 == 0) { + // ggml_graph_print (&gf); + // ggml_graph_dump_dot(&gf, NULL, "gpt-2.dot"); + //} + + //embd_w.resize(n_vocab*N); + //memcpy(embd_w.data(), ggml_get_data(inpL), sizeof(float)*n_vocab*N); + + // return result just for the last token + embd_w.resize(n_vocab); + memcpy(embd_w.data(), (float *) ggml_get_data(inpL) + (n_vocab*(N-1)), sizeof(float)*n_vocab); + + if (mem_per_token == 0) { + mem_per_token = ggml_used_mem(ctx0)/N; + } + //printf("used_mem = %zu MB\n", ggml_used_mem(ctx0)/(1024*1024)); + + ggml_free(ctx0); + + return true; +} + +int main(int argc, char ** argv) { + ggml_time_init(); + + const int64_t t_main_start_us = ggml_time_us(); + + gpt_params params; + params.model = "models/gpt-2-117M/ggml-model.bin"; + + if (gpt_params_parse(argc, argv, params) == false) { + return 1; + } + + if (params.seed < 0) { + params.seed = time(NULL); + } + + printf("%s: seed = %d\n", __func__, params.seed); + + std::mt19937 rng(params.seed); + if (params.prompt.empty()) { + params.prompt = gpt_random_prompt(rng); + } + + int64_t t_load_us = 0; + + gpt_vocab vocab; + starcoder_model model; + + // load the model + { + const int64_t t_start_us = ggml_time_us(); + + if (!starcoder_model_load(params.model, model, vocab)) { + fprintf(stderr, "%s: failed to load model from '%s'\n", __func__, params.model.c_str()); + return 1; + } + + t_load_us = ggml_time_us() - t_start_us; + } + + int n_past = 0; + + int64_t t_sample_us = 0; + int64_t t_predict_us = 0; + + std::vector logits; + + // tokenize the prompt + std::vector embd_inp = ::gpt_tokenize(vocab, params.prompt); + + params.n_predict = std::min(params.n_predict, model.hparams.n_ctx - (int) embd_inp.size()); + + printf("%s: prompt: '%s'\n", __func__, params.prompt.c_str()); + printf("%s: number of tokens in prompt = %zu\n", __func__, embd_inp.size()); + for (int i = 0; i < embd_inp.size(); i++) { + printf("%s: token[%d] = %6d, %s\n", __func__, i, embd_inp[i], vocab.id_to_token.at(embd_inp[i]).c_str()); + } + printf("\n\n"); + + // submit the input prompt token-by-token + // this reduces the memory usage during inference, at the cost of a bit of speed at the beginning + std::vector embd; + + // determine the required inference memory per token: + size_t mem_per_token = 0; + starcoder_eval(model, params.n_threads, 0, { 0, 1, 2, 3 }, logits, mem_per_token); + + for (int i = embd.size(); i < embd_inp.size() + params.n_predict; i++) { + // predict + if (embd.size() > 0) { + const int64_t t_start_us = ggml_time_us(); + + if (!starcoder_eval(model, params.n_threads, n_past, embd, logits, mem_per_token)) { + printf("Failed to predict\n"); + return 1; + } + + t_predict_us += ggml_time_us() - t_start_us; + } + + n_past += embd.size(); + embd.clear(); + + if (i >= embd_inp.size()) { + // sample next token + const int top_k = params.top_k; + const float top_p = params.top_p; + const float temp = params.temp; + + const int n_vocab = model.hparams.n_vocab; + + gpt_vocab::id id = 0; + + { + const int64_t t_start_sample_us = ggml_time_us(); + + id = gpt_sample_top_k_top_p(vocab, logits.data() + (logits.size() - n_vocab), top_k, top_p, temp, rng); + + t_sample_us += ggml_time_us() - t_start_sample_us; + } + + // add it to the context + embd.push_back(id); + } else { + // if here, it means we are still processing the input prompt + for (int k = i; k < embd_inp.size(); k++) { + embd.push_back(embd_inp[k]); + if (embd.size() >= params.n_batch) { + break; + } + } + i += embd.size() - 1; + } + + // display text + for (auto id : embd) { + printf("%s", vocab.id_to_token[id].c_str()); + } + fflush(stdout); + + // check if model is santacoder + if (model.hparams.n_layer <= 30 && embd.back() == 49152) { + break; + } + // check if model is starcoder + else if (embd.back() == 0) { //TODO: this is only for starcoder + break; + } + } + + // report timing + { + const int64_t t_main_end_us = ggml_time_us(); + + printf("\n\n"); + printf("%s: mem per token = %8zu bytes\n", __func__, mem_per_token); + printf("%s: load time = %8.2f ms\n", __func__, t_load_us/1000.0f); + printf("%s: sample time = %8.2f ms\n", __func__, t_sample_us/1000.0f); + printf("%s: predict time = %8.2f ms / %.2f ms per token\n", __func__, t_predict_us/1000.0f, t_predict_us/1000.0f/n_past); + printf("%s: total time = %8.2f ms\n", __func__, (t_main_end_us - t_main_start_us)/1000.0f); + } + + ggml_free(model.ctx); + + return 0; +} diff --git a/ggml_old/examples/starcoder/quantize.cpp b/ggml_old/examples/starcoder/quantize.cpp new file mode 100644 index 0000000..101af50 --- /dev/null +++ b/ggml_old/examples/starcoder/quantize.cpp @@ -0,0 +1,184 @@ +#include "ggml/ggml.h" + +#include "common.h" +#include "common-ggml.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// default hparams (GPT-2 117M) +struct starcoder_hparams { + int32_t n_vocab = 49280; + int32_t n_ctx = 2048; + int32_t n_embd = 2048; + int32_t n_head = 16; + int32_t n_layer = 24; + int32_t ftype = 1; +}; + +// quantize a model +bool starcoder_model_quantize(const std::string & fname_inp, const std::string & fname_out, ggml_ftype ftype) { + gpt_vocab vocab; + + printf("%s: loading model from '%s'\n", __func__, fname_inp.c_str()); + + auto finp = std::ifstream(fname_inp, std::ios::binary); + if (!finp) { + fprintf(stderr, "%s: failed to open '%s' for reading\n", __func__, fname_inp.c_str()); + return false; + } + + auto fout = std::ofstream(fname_out, std::ios::binary); + if (!fout) { + fprintf(stderr, "%s: failed to open '%s' for writing\n", __func__, fname_out.c_str()); + return false; + } + + // verify magic + { + uint32_t magic; + finp.read((char *) &magic, sizeof(magic)); + if (magic != 0x67676d6c) { + fprintf(stderr, "%s: invalid model file '%s' (bad magic)\n", __func__, fname_inp.c_str()); + return false; + } + + fout.write((char *) &magic, sizeof(magic)); + } + + starcoder_hparams hparams; + + // load hparams + { + finp.read((char *) &hparams.n_vocab, sizeof(hparams.n_vocab)); + finp.read((char *) &hparams.n_ctx, sizeof(hparams.n_ctx)); + finp.read((char *) &hparams.n_embd, sizeof(hparams.n_embd)); + finp.read((char *) &hparams.n_head, sizeof(hparams.n_head)); + finp.read((char *) &hparams.n_layer, sizeof(hparams.n_layer)); + finp.read((char *) &hparams.ftype, sizeof(hparams.ftype)); + + const int32_t qntvr_src = hparams.ftype / GGML_QNT_VERSION_FACTOR; + const int32_t ftype_dst = GGML_QNT_VERSION * GGML_QNT_VERSION_FACTOR + ftype; + + printf("%s: n_vocab = %d\n", __func__, hparams.n_vocab); + printf("%s: n_ctx = %d\n", __func__, hparams.n_ctx); + printf("%s: n_embd = %d\n", __func__, hparams.n_embd); + printf("%s: n_head = %d\n", __func__, hparams.n_head); + printf("%s: n_layer = %d\n", __func__, hparams.n_layer); + printf("%s: ftype (src) = %d\n", __func__, hparams.ftype); + printf("%s: qntvr (src) = %d\n", __func__, qntvr_src); + printf("%s: ftype (dst) = %d\n", __func__, ftype_dst); + printf("%s: qntvr (dst) = %d\n", __func__, GGML_QNT_VERSION); + + fout.write((char *) &hparams.n_vocab, sizeof(hparams.n_vocab)); + fout.write((char *) &hparams.n_ctx, sizeof(hparams.n_ctx)); + fout.write((char *) &hparams.n_embd, sizeof(hparams.n_embd)); + fout.write((char *) &hparams.n_head, sizeof(hparams.n_head)); + fout.write((char *) &hparams.n_layer, sizeof(hparams.n_layer)); + fout.write((char *) &ftype_dst, sizeof(ftype_dst)); + } + + // load vocab + { + int32_t n_vocab = 0; + finp.read ((char *) &n_vocab, sizeof(n_vocab)); + fout.write((char *) &n_vocab, sizeof(n_vocab)); + + if (n_vocab != hparams.n_vocab) { + fprintf(stderr, "%s: invalid model file '%s' (bad vocab size %d != %d)\n", + __func__, fname_inp.c_str(), n_vocab, hparams.n_vocab); + return false; + } + + std::string word; + for (int i = 0; i < n_vocab; i++) { + uint32_t len; + finp.read ((char *) &len, sizeof(len)); + fout.write((char *) &len, sizeof(len)); + + word.resize(len); + finp.read ((char *) word.data(), len); + fout.write((char *) word.data(), len); + + vocab.token_to_id[word] = i; + vocab.id_to_token[i] = word; + } + } + + // regexes of tensor names to be quantized + const std::vector to_quant = { + "model/wte", + "model/lm_head", + "model/h.*/attn/c_attn/w", + "model/h.*/attn/c_proj/w", + "model/h.*/mlp/c_fc/w", + "model/h.*/mlp/c_proj/w", + }; + + if (!ggml_common_quantize_0(finp, fout, ftype, to_quant, {})) { + fprintf(stderr, "%s: failed to quantize model '%s'\n", __func__, fname_inp.c_str()); + return false; + } + + finp.close(); + fout.close(); + + return true; +} + +// usage: +// ./gpt-2-quantize models/gpt-2-117M/ggml-model.bin models/gpt-2-117M/ggml-model-quant.bin type +// +int main(int argc, char ** argv) { + if (argc != 4) { + fprintf(stderr, "usage: %s model-f32.bin model-quant.bin type\n", argv[0]); + ggml_print_ftypes(stderr); + return 1; + } + + // needed to initialize f16 tables + { + struct ggml_init_params params = { 0, NULL, false }; + struct ggml_context * ctx = ggml_init(params); + ggml_free(ctx); + } + + const std::string fname_inp = argv[1]; + const std::string fname_out = argv[2]; + + const ggml_ftype ftype = ggml_parse_ftype(argv[3]); + + const int64_t t_main_start_us = ggml_time_us(); + + int64_t t_quantize_us = 0; + + // load the model + { + const int64_t t_start_us = ggml_time_us(); + + if (!starcoder_model_quantize(fname_inp, fname_out, ggml_ftype(ftype))) { + fprintf(stderr, "%s: failed to quantize model from '%s'\n", __func__, fname_inp.c_str()); + return 1; + } + + t_quantize_us = ggml_time_us() - t_start_us; + } + + // report timing + { + const int64_t t_main_end_us = ggml_time_us(); + + printf("\n"); + printf("%s: quantize time = %8.2f ms\n", __func__, t_quantize_us/1000.0f); + printf("%s: total time = %8.2f ms\n", __func__, (t_main_end_us - t_main_start_us)/1000.0f); + } + + return 0; +} diff --git a/ggml_old/examples/whisper/CMakeLists.txt b/ggml_old/examples/whisper/CMakeLists.txt new file mode 100644 index 0000000..dd681aa --- /dev/null +++ b/ggml_old/examples/whisper/CMakeLists.txt @@ -0,0 +1,22 @@ +# +# whisper + +add_library(whisper-cpp + whisper.cpp + ) + +target_link_libraries(whisper-cpp PRIVATE + ggml + ) + +set(TEST_TARGET whisper) +add_executable(${TEST_TARGET} main.cpp) +target_link_libraries(${TEST_TARGET} PRIVATE whisper-cpp common) +target_include_directories(${TEST_TARGET} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/..) + +# +# whisper-quantize + +set(TEST_TARGET whisper-quantize) +add_executable(${TEST_TARGET} quantize.cpp) +target_link_libraries(${TEST_TARGET} PRIVATE ggml common common-ggml) diff --git a/ggml_old/examples/whisper/README.md b/ggml_old/examples/whisper/README.md new file mode 100644 index 0000000..a2e9727 --- /dev/null +++ b/ggml_old/examples/whisper/README.md @@ -0,0 +1,29 @@ +# whisper + +Port of [OpenAI's Whisper](https://github.com/openai/whisper) ASR model in C/C++ using +[ggml](https://github.com/ggerganov/ggml) + +## More info + +Checkout https://github.com/ggerganov/whisper.cpp + +## Memory usage + +| Model | Disk | Mem | +| --- | --- | --- | +| tiny | 75 MB | ~280 MB | +| base | 142 MB | ~430 MB | +| small | 466 MB | ~1.0 GB | +| medium | 1.5 GB | ~2.6 GB | +| large | 2.9 GB | ~4.7 GB | + +## ggml format + +The original models are converted to a custom binary format. This allows to pack everything needed into a single file: + +- model parameters +- mel filters +- vocabulary +- weights + +For more details, see the conversion script [convert-pt-to-ggml.py](convert-pt-to-ggml.py) diff --git a/ggml_old/examples/whisper/convert-pt-to-ggml.py b/ggml_old/examples/whisper/convert-pt-to-ggml.py new file mode 100644 index 0000000..749f99c --- /dev/null +++ b/ggml_old/examples/whisper/convert-pt-to-ggml.py @@ -0,0 +1,329 @@ +# Convert Whisper transformer model from PyTorch to ggml format +# +# Usage: python convert-pt-to-ggml.py ~/.cache/whisper/medium.pt ~/path/to/repo/whisper/ ./models/whisper-medium +# +# You need to clone the original repo in ~/path/to/repo/whisper/ +# +# git clone https://github.com/openai/whisper ~/path/to/repo/whisper/ +# +# It is used to various assets needed by the algorithm: +# +# - tokenizer +# - mel filters +# +# Also, you need to have the original models in ~/.cache/whisper/ +# See the original repo for more details. +# +# This script loads the specified model and whisper assets and saves them in ggml format. +# The output is a single binary file containing the following information: +# +# - hparams +# - mel filters +# - tokenizer vocab +# - model variables +# +# For each variable, write the following: +# +# - Number of dimensions (int) +# - Name length (int) +# - Dimensions (int[n_dims]) +# - Name (char[name_length]) +# - Data (float[n_dims]) +# + +import io +import os +import sys +import struct +import json +import code +import torch +import numpy as np + +from transformers import GPTJForCausalLM +from transformers import GPT2TokenizerFast + +# ref: https://github.com/openai/whisper/blob/8cf36f3508c9acd341a45eb2364239a3d81458b9/whisper/tokenizer.py#L10-L110 +LANGUAGES = { + "en": "english", + "zh": "chinese", + "de": "german", + "es": "spanish", + "ru": "russian", + "ko": "korean", + "fr": "french", + "ja": "japanese", + "pt": "portuguese", + "tr": "turkish", + "pl": "polish", + "ca": "catalan", + "nl": "dutch", + "ar": "arabic", + "sv": "swedish", + "it": "italian", + "id": "indonesian", + "hi": "hindi", + "fi": "finnish", + "vi": "vietnamese", + "iw": "hebrew", + "uk": "ukrainian", + "el": "greek", + "ms": "malay", + "cs": "czech", + "ro": "romanian", + "da": "danish", + "hu": "hungarian", + "ta": "tamil", + "no": "norwegian", + "th": "thai", + "ur": "urdu", + "hr": "croatian", + "bg": "bulgarian", + "lt": "lithuanian", + "la": "latin", + "mi": "maori", + "ml": "malayalam", + "cy": "welsh", + "sk": "slovak", + "te": "telugu", + "fa": "persian", + "lv": "latvian", + "bn": "bengali", + "sr": "serbian", + "az": "azerbaijani", + "sl": "slovenian", + "kn": "kannada", + "et": "estonian", + "mk": "macedonian", + "br": "breton", + "eu": "basque", + "is": "icelandic", + "hy": "armenian", + "ne": "nepali", + "mn": "mongolian", + "bs": "bosnian", + "kk": "kazakh", + "sq": "albanian", + "sw": "swahili", + "gl": "galician", + "mr": "marathi", + "pa": "punjabi", + "si": "sinhala", + "km": "khmer", + "sn": "shona", + "yo": "yoruba", + "so": "somali", + "af": "afrikaans", + "oc": "occitan", + "ka": "georgian", + "be": "belarusian", + "tg": "tajik", + "sd": "sindhi", + "gu": "gujarati", + "am": "amharic", + "yi": "yiddish", + "lo": "lao", + "uz": "uzbek", + "fo": "faroese", + "ht": "haitian creole", + "ps": "pashto", + "tk": "turkmen", + "nn": "nynorsk", + "mt": "maltese", + "sa": "sanskrit", + "lb": "luxembourgish", + "my": "myanmar", + "bo": "tibetan", + "tl": "tagalog", + "mg": "malagasy", + "as": "assamese", + "tt": "tatar", + "haw": "hawaiian", + "ln": "lingala", + "ha": "hausa", + "ba": "bashkir", + "jw": "javanese", + "su": "sundanese", +} + +# ref: https://github.com/openai/whisper/blob/8cf36f3508c9acd341a45eb2364239a3d81458b9/whisper/tokenizer.py#L273-L292 +def build_tokenizer(path_to_whisper_repo: str, name: str = "gpt2"): + os.environ["TOKENIZERS_PARALLELISM"] = "false" + path = os.path.join(path_to_whisper_repo, "whisper/assets", name) + tokenizer = GPT2TokenizerFast.from_pretrained(path) + + specials = [ + "<|startoftranscript|>", + *[f"<|{lang}|>" for lang in LANGUAGES.keys()], + "<|translate|>", + "<|transcribe|>", + "<|startoflm|>", + "<|startofprev|>", + "<|nocaptions|>", + "<|notimestamps|>", + ] + + tokenizer.add_special_tokens(dict(additional_special_tokens=specials)) + return tokenizer + +# ref: https://github.com/openai/gpt-2/blob/master/src/encoder.py +def bytes_to_unicode(): + """ + Returns list of utf-8 byte and a corresponding list of unicode strings. + The reversible bpe codes work on unicode strings. + This means you need a large # of unicode characters in your vocab if you want to avoid UNKs. + When you're at something like a 10B token dataset you end up needing around 5K for decent coverage. + This is a signficant percentage of your normal, say, 32K bpe vocab. + To avoid that, we want lookup tables between utf-8 bytes and unicode strings. + And avoids mapping to whitespace/control characters the bpe code barfs on. + """ + bs = list(range(ord("!"), ord("~")+1))+list(range(ord("¡"), ord("¬")+1))+list(range(ord("®"), ord("ÿ")+1)) + cs = bs[:] + n = 0 + for b in range(2**8): + if b not in bs: + bs.append(b) + cs.append(2**8+n) + n += 1 + cs = [chr(n) for n in cs] + return dict(zip(bs, cs)) + + +if len(sys.argv) < 4: + print("Usage: convert-pt-to-ggml.py model.pt path-to-whisper-repo dir-output [use-f32]\n") + sys.exit(1) + +fname_inp = sys.argv[1] +dir_whisper = sys.argv[2] +dir_out = sys.argv[3] + +# try to load PyTorch binary data +try: + model_bytes = open(fname_inp, "rb").read() + with io.BytesIO(model_bytes) as fp: + checkpoint = torch.load(fp, map_location="cpu") +except: + print("Error: failed to load PyTorch model file: %s" % fname_inp) + sys.exit(1) + +hparams = checkpoint["dims"] +print("hparams:", hparams) + +list_vars = checkpoint["model_state_dict"] + +#print(list_vars['encoder.positional_embedding']) +#print(list_vars['encoder.conv1.weight']) +#print(list_vars['encoder.conv1.weight'].shape) + +# load mel filters +n_mels = hparams["n_mels"] +with np.load(os.path.join(dir_whisper, "whisper/assets", "mel_filters.npz")) as f: + filters = torch.from_numpy(f[f"mel_{n_mels}"]) + #print (filters) + +#code.interact(local=locals()) + +multilingual = hparams["n_vocab"] == 51865 +tokenizer = build_tokenizer(dir_whisper, multilingual and "multilingual" or "gpt2") + +#print(tokenizer) +#print(tokenizer.name_or_path) +#print(len(tokenizer.additional_special_tokens)) +dir_tokenizer = tokenizer.name_or_path + +# output in the same directory as the model +fname_out = dir_out + "/ggml-model.bin" + +with open(dir_tokenizer + "/vocab.json", "r") as f: + tokens = json.load(f) + +# use 16-bit or 32-bit floats +use_f16 = True +if len(sys.argv) > 4: + use_f16 = False + fname_out = dir_out + "/ggml-model-f32.bin" + +fout = open(fname_out, "wb") + +fout.write(struct.pack("i", 0x67676d6c)) # magic: ggml in hex +fout.write(struct.pack("i", hparams["n_vocab"])) +fout.write(struct.pack("i", hparams["n_audio_ctx"])) +fout.write(struct.pack("i", hparams["n_audio_state"])) +fout.write(struct.pack("i", hparams["n_audio_head"])) +fout.write(struct.pack("i", hparams["n_audio_layer"])) +fout.write(struct.pack("i", hparams["n_text_ctx"])) +fout.write(struct.pack("i", hparams["n_text_state"])) +fout.write(struct.pack("i", hparams["n_text_head"])) +fout.write(struct.pack("i", hparams["n_text_layer"])) +fout.write(struct.pack("i", hparams["n_mels"])) +fout.write(struct.pack("i", use_f16)) + +# write mel filters +fout.write(struct.pack("i", filters.shape[0])) +fout.write(struct.pack("i", filters.shape[1])) +for i in range(filters.shape[0]): + for j in range(filters.shape[1]): + fout.write(struct.pack("f", filters[i][j])) + +byte_encoder = bytes_to_unicode() +byte_decoder = {v:k for k, v in byte_encoder.items()} + +fout.write(struct.pack("i", len(tokens))) + +for key in tokens: + text = bytearray([byte_decoder[c] for c in key]) + fout.write(struct.pack("i", len(text))) + fout.write(text) + +for name in list_vars.keys(): + data = list_vars[name].squeeze().numpy() + print("Processing variable: " + name + " with shape: ", data.shape) + + # reshape conv bias from [n] to [n, 1] + if name == "encoder.conv1.bias" or \ + name == "encoder.conv2.bias": + data = data.reshape(data.shape[0], 1) + print(" Reshaped variable: " + name + " to shape: ", data.shape) + + n_dims = len(data.shape); + + # looks like the whisper models are in f16 by default + # so we need to convert the small tensors to f32 until we fully support f16 in ggml + # ftype == 0 -> float32, ftype == 1 -> float16 + ftype = 1; + if use_f16: + if n_dims < 2 or \ + name == "encoder.conv1.bias" or \ + name == "encoder.conv2.bias" or \ + name == "encoder.positional_embedding" or \ + name == "decoder.positional_embedding": + ftype = 0 + data = data.astype(np.float32) + print(" Converting to float32") + data = data.astype(np.float32) + ftype = 0 + else: + if n_dims < 3 and data.dtype != np.float32: + data = data.astype(np.float32) + ftype = 0 + + #if name.startswith("encoder"): + # if name.endswith("mlp.0.weight") or \ + # name.endswith("mlp.2.weight"): + # print(" Transposing") + # data = data.transpose() + + # header + str = name.encode('utf-8') + fout.write(struct.pack("iii", n_dims, len(str), ftype)) + for i in range(n_dims): + fout.write(struct.pack("i", data.shape[n_dims - 1 - i])) + fout.write(str); + + # data + data.tofile(fout) + +fout.close() + +print("Done. Output file: " + fname_out) +print("") diff --git a/ggml_old/examples/whisper/main.cpp b/ggml_old/examples/whisper/main.cpp new file mode 100644 index 0000000..e659b7e --- /dev/null +++ b/ggml_old/examples/whisper/main.cpp @@ -0,0 +1,871 @@ +#include "common.h" + +#include "whisper.h" + +#include +#include +#include +#include +#include +#include +#include + +// Terminal color map. 10 colors grouped in ranges [0.0, 0.1, ..., 0.9] +// Lowest is red, middle is yellow, highest is green. +const std::vector k_colors = { + "\033[38;5;196m", "\033[38;5;202m", "\033[38;5;208m", "\033[38;5;214m", "\033[38;5;220m", + "\033[38;5;226m", "\033[38;5;190m", "\033[38;5;154m", "\033[38;5;118m", "\033[38;5;82m", +}; + +// 500 -> 00:05.000 +// 6000 -> 01:00.000 +std::string to_timestamp(int64_t t, bool comma = false) { + int64_t msec = t * 10; + int64_t hr = msec / (1000 * 60 * 60); + msec = msec - hr * (1000 * 60 * 60); + int64_t min = msec / (1000 * 60); + msec = msec - min * (1000 * 60); + int64_t sec = msec / 1000; + msec = msec - sec * 1000; + + char buf[32]; + snprintf(buf, sizeof(buf), "%02d:%02d:%02d%s%03d", (int) hr, (int) min, (int) sec, comma ? "," : ".", (int) msec); + + return std::string(buf); +} + +int timestamp_to_sample(int64_t t, int n_samples) { + return std::max(0, std::min((int) n_samples - 1, (int) ((t*WHISPER_SAMPLE_RATE)/100))); +} + +// helper function to replace substrings +void replace_all(std::string & s, const std::string & search, const std::string & replace) { + for (size_t pos = 0; ; pos += replace.length()) { + pos = s.find(search, pos); + if (pos == std::string::npos) break; + s.erase(pos, search.length()); + s.insert(pos, replace); + } +} + +// command-line parameters +struct whisper_params { + int32_t n_threads = std::min(4, (int32_t) std::thread::hardware_concurrency()); + int32_t n_processors = 1; + int32_t offset_t_ms = 0; + int32_t offset_n = 0; + int32_t duration_ms = 0; + int32_t max_context = -1; + int32_t max_len = 0; + int32_t best_of = 2; + int32_t beam_size = -1; + + float word_thold = 0.01f; + float entropy_thold = 2.40f; + float logprob_thold = -1.00f; + + bool speed_up = false; + bool translate = false; + bool detect_language= false; + bool diarize = false; + bool split_on_word = false; + bool no_fallback = false; + bool output_txt = false; + bool output_vtt = false; + bool output_srt = false; + bool output_wts = false; + bool output_csv = false; + bool output_jsn = false; + bool output_lrc = false; + bool print_special = false; + bool print_colors = false; + bool print_progress = false; + bool no_timestamps = false; + + std::string language = "en"; + std::string prompt; + std::string font_path = "/System/Library/Fonts/Supplemental/Courier New Bold.ttf"; + std::string model = "models/ggml-base.en.bin"; + + std::vector fname_inp = {}; + std::vector fname_out = {}; +}; + +void whisper_print_usage(int argc, char ** argv, const whisper_params & params); + +bool whisper_params_parse(int argc, char ** argv, whisper_params & params) { + for (int i = 1; i < argc; i++) { + std::string arg = argv[i]; + + if (arg == "-"){ + params.fname_inp.push_back(arg); + continue; + } + + if (arg[0] != '-') { + params.fname_inp.push_back(arg); + continue; + } + + if (arg == "-h" || arg == "--help") { + whisper_print_usage(argc, argv, params); + exit(0); + } + else if (arg == "-t" || arg == "--threads") { params.n_threads = std::stoi(argv[++i]); } + else if (arg == "-p" || arg == "--processors") { params.n_processors = std::stoi(argv[++i]); } + else if (arg == "-ot" || arg == "--offset-t") { params.offset_t_ms = std::stoi(argv[++i]); } + else if (arg == "-on" || arg == "--offset-n") { params.offset_n = std::stoi(argv[++i]); } + else if (arg == "-d" || arg == "--duration") { params.duration_ms = std::stoi(argv[++i]); } + else if (arg == "-mc" || arg == "--max-context") { params.max_context = std::stoi(argv[++i]); } + else if (arg == "-ml" || arg == "--max-len") { params.max_len = std::stoi(argv[++i]); } + else if (arg == "-bo" || arg == "--best-of") { params.best_of = std::stoi(argv[++i]); } + else if (arg == "-bs" || arg == "--beam-size") { params.beam_size = std::stoi(argv[++i]); } + else if (arg == "-wt" || arg == "--word-thold") { params.word_thold = std::stof(argv[++i]); } + else if (arg == "-et" || arg == "--entropy-thold") { params.entropy_thold = std::stof(argv[++i]); } + else if (arg == "-lpt" || arg == "--logprob-thold") { params.logprob_thold = std::stof(argv[++i]); } + else if (arg == "-su" || arg == "--speed-up") { params.speed_up = true; } + else if (arg == "-tr" || arg == "--translate") { params.translate = true; } + else if (arg == "-di" || arg == "--diarize") { params.diarize = true; } + else if (arg == "-sow" || arg == "--split-on-word") { params.split_on_word = true; } + else if (arg == "-nf" || arg == "--no-fallback") { params.no_fallback = true; } + else if (arg == "-otxt" || arg == "--output-txt") { params.output_txt = true; } + else if (arg == "-ovtt" || arg == "--output-vtt") { params.output_vtt = true; } + else if (arg == "-osrt" || arg == "--output-srt") { params.output_srt = true; } + else if (arg == "-owts" || arg == "--output-words") { params.output_wts = true; } + else if (arg == "-olrc" || arg == "--output-lrc") { params.output_lrc = true; } + else if (arg == "-fp" || arg == "--font-path") { params.font_path = argv[++i]; } + else if (arg == "-ocsv" || arg == "--output-csv") { params.output_csv = true; } + else if (arg == "-oj" || arg == "--output-json") { params.output_jsn = true; } + else if (arg == "-of" || arg == "--output-file") { params.fname_out.emplace_back(argv[++i]); } + else if (arg == "-ps" || arg == "--print-special") { params.print_special = true; } + else if (arg == "-pc" || arg == "--print-colors") { params.print_colors = true; } + else if (arg == "-pp" || arg == "--print-progress") { params.print_progress = true; } + else if (arg == "-nt" || arg == "--no-timestamps") { params.no_timestamps = true; } + else if (arg == "-l" || arg == "--language") { params.language = argv[++i]; } + else if (arg == "-dl" || arg == "--detect-language"){ params.detect_language= true; } + else if ( arg == "--prompt") { params.prompt = argv[++i]; } + else if (arg == "-m" || arg == "--model") { params.model = argv[++i]; } + else if (arg == "-f" || arg == "--file") { params.fname_inp.emplace_back(argv[++i]); } + else { + fprintf(stderr, "error: unknown argument: %s\n", arg.c_str()); + whisper_print_usage(argc, argv, params); + exit(0); + } + } + + return true; +} + +void whisper_print_usage(int /*argc*/, char ** argv, const whisper_params & params) { + fprintf(stderr, "\n"); + fprintf(stderr, "usage: %s [options] file0.wav file1.wav ...\n", argv[0]); + fprintf(stderr, "\n"); + fprintf(stderr, "options:\n"); + fprintf(stderr, " -h, --help [default] show this help message and exit\n"); + fprintf(stderr, " -t N, --threads N [%-7d] number of threads to use during computation\n", params.n_threads); + fprintf(stderr, " -p N, --processors N [%-7d] number of processors to use during computation\n", params.n_processors); + fprintf(stderr, " -ot N, --offset-t N [%-7d] time offset in milliseconds\n", params.offset_t_ms); + fprintf(stderr, " -on N, --offset-n N [%-7d] segment index offset\n", params.offset_n); + fprintf(stderr, " -d N, --duration N [%-7d] duration of audio to process in milliseconds\n", params.duration_ms); + fprintf(stderr, " -mc N, --max-context N [%-7d] maximum number of text context tokens to store\n", params.max_context); + fprintf(stderr, " -ml N, --max-len N [%-7d] maximum segment length in characters\n", params.max_len); + fprintf(stderr, " -sow, --split-on-word [%-7s] split on word rather than on token\n", params.split_on_word ? "true" : "false"); + fprintf(stderr, " -bo N, --best-of N [%-7d] number of best candidates to keep\n", params.best_of); + fprintf(stderr, " -bs N, --beam-size N [%-7d] beam size for beam search\n", params.beam_size); + fprintf(stderr, " -wt N, --word-thold N [%-7.2f] word timestamp probability threshold\n", params.word_thold); + fprintf(stderr, " -et N, --entropy-thold N [%-7.2f] entropy threshold for decoder fail\n", params.entropy_thold); + fprintf(stderr, " -lpt N, --logprob-thold N [%-7.2f] log probability threshold for decoder fail\n", params.logprob_thold); + fprintf(stderr, " -su, --speed-up [%-7s] speed up audio by x2 (reduced accuracy)\n", params.speed_up ? "true" : "false"); + fprintf(stderr, " -tr, --translate [%-7s] translate from source language to english\n", params.translate ? "true" : "false"); + fprintf(stderr, " -di, --diarize [%-7s] stereo audio diarization\n", params.diarize ? "true" : "false"); + fprintf(stderr, " -nf, --no-fallback [%-7s] do not use temperature fallback while decoding\n", params.no_fallback ? "true" : "false"); + fprintf(stderr, " -otxt, --output-txt [%-7s] output result in a text file\n", params.output_txt ? "true" : "false"); + fprintf(stderr, " -ovtt, --output-vtt [%-7s] output result in a vtt file\n", params.output_vtt ? "true" : "false"); + fprintf(stderr, " -osrt, --output-srt [%-7s] output result in a srt file\n", params.output_srt ? "true" : "false"); + fprintf(stderr, " -olrc, --output-lrc [%-7s] output result in a lrc file\n", params.output_lrc ? "true" : "false"); + fprintf(stderr, " -owts, --output-words [%-7s] output script for generating karaoke video\n", params.output_wts ? "true" : "false"); + fprintf(stderr, " -fp, --font-path [%-7s] path to a monospace font for karaoke video\n", params.font_path.c_str()); + fprintf(stderr, " -ocsv, --output-csv [%-7s] output result in a CSV file\n", params.output_csv ? "true" : "false"); + fprintf(stderr, " -oj, --output-json [%-7s] output result in a JSON file\n", params.output_jsn ? "true" : "false"); + fprintf(stderr, " -of FNAME, --output-file FNAME [%-7s] output file path (without file extension)\n", ""); + fprintf(stderr, " -ps, --print-special [%-7s] print special tokens\n", params.print_special ? "true" : "false"); + fprintf(stderr, " -pc, --print-colors [%-7s] print colors\n", params.print_colors ? "true" : "false"); + fprintf(stderr, " -pp, --print-progress [%-7s] print progress\n", params.print_progress ? "true" : "false"); + fprintf(stderr, " -nt, --no-timestamps [%-7s] do not print timestamps\n", params.no_timestamps ? "true" : "false"); + fprintf(stderr, " -l LANG, --language LANG [%-7s] spoken language ('auto' for auto-detect)\n", params.language.c_str()); + fprintf(stderr, " -dl, --detect-language [%-7s] exit after automatically detecting language\n", params.detect_language ? "true" : "false"); + fprintf(stderr, " --prompt PROMPT [%-7s] initial prompt\n", params.prompt.c_str()); + fprintf(stderr, " -m FNAME, --model FNAME [%-7s] model path\n", params.model.c_str()); + fprintf(stderr, " -f FNAME, --file FNAME [%-7s] input WAV file path\n", ""); + fprintf(stderr, "\n"); +} + +struct whisper_print_user_data { + const whisper_params * params; + + const std::vector> * pcmf32s; +}; + +void whisper_print_segment_callback(struct whisper_context * ctx, struct whisper_state * /*state*/, int n_new, void * user_data) { + const auto & params = *((whisper_print_user_data *) user_data)->params; + const auto & pcmf32s = *((whisper_print_user_data *) user_data)->pcmf32s; + + const int n_segments = whisper_full_n_segments(ctx); + + std::string speaker = ""; + + int64_t t0 = 0; + int64_t t1 = 0; + + // print the last n_new segments + const int s0 = n_segments - n_new; + + if (s0 == 0) { + printf("\n"); + } + + for (int i = s0; i < n_segments; i++) { + if (!params.no_timestamps || params.diarize) { + t0 = whisper_full_get_segment_t0(ctx, i); + t1 = whisper_full_get_segment_t1(ctx, i); + } + + if (!params.no_timestamps) { + printf("[%s --> %s] ", to_timestamp(t0).c_str(), to_timestamp(t1).c_str()); + } + + if (params.diarize && pcmf32s.size() == 2) { + const int64_t n_samples = pcmf32s[0].size(); + + const int64_t is0 = timestamp_to_sample(t0, n_samples); + const int64_t is1 = timestamp_to_sample(t1, n_samples); + + double energy0 = 0.0f; + double energy1 = 0.0f; + + for (int64_t j = is0; j < is1; j++) { + energy0 += fabs(pcmf32s[0][j]); + energy1 += fabs(pcmf32s[1][j]); + } + + if (energy0 > 1.1*energy1) { + speaker = "(speaker 0)"; + } else if (energy1 > 1.1*energy0) { + speaker = "(speaker 1)"; + } else { + speaker = "(speaker ?)"; + } + + //printf("is0 = %lld, is1 = %lld, energy0 = %f, energy1 = %f, %s\n", is0, is1, energy0, energy1, speaker.c_str()); + } + + if (params.print_colors) { + for (int j = 0; j < whisper_full_n_tokens(ctx, i); ++j) { + if (params.print_special == false) { + const whisper_token id = whisper_full_get_token_id(ctx, i, j); + if (id >= whisper_token_eot(ctx)) { + continue; + } + } + + const char * text = whisper_full_get_token_text(ctx, i, j); + const float p = whisper_full_get_token_p (ctx, i, j); + + const int col = std::max(0, std::min((int) k_colors.size() - 1, (int) (std::pow(p, 3)*float(k_colors.size())))); + + printf("%s%s%s%s", speaker.c_str(), k_colors[col].c_str(), text, "\033[0m"); + } + } else { + const char * text = whisper_full_get_segment_text(ctx, i); + + printf("%s%s", speaker.c_str(), text); + } + + // with timestamps or speakers: each segment on new line + if (!params.no_timestamps || params.diarize) { + printf("\n"); + } + + fflush(stdout); + } +} + +bool output_txt(struct whisper_context * ctx, const char * fname) { + std::ofstream fout(fname); + if (!fout.is_open()) { + fprintf(stderr, "%s: failed to open '%s' for writing\n", __func__, fname); + return false; + } + + fprintf(stderr, "%s: saving output to '%s'\n", __func__, fname); + + const int n_segments = whisper_full_n_segments(ctx); + for (int i = 0; i < n_segments; ++i) { + const char * text = whisper_full_get_segment_text(ctx, i); + fout << text << "\n"; + } + + return true; +} + +bool output_vtt(struct whisper_context * ctx, const char * fname) { + std::ofstream fout(fname); + if (!fout.is_open()) { + fprintf(stderr, "%s: failed to open '%s' for writing\n", __func__, fname); + return false; + } + + fprintf(stderr, "%s: saving output to '%s'\n", __func__, fname); + + fout << "WEBVTT\n\n"; + + const int n_segments = whisper_full_n_segments(ctx); + for (int i = 0; i < n_segments; ++i) { + const char * text = whisper_full_get_segment_text(ctx, i); + const int64_t t0 = whisper_full_get_segment_t0(ctx, i); + const int64_t t1 = whisper_full_get_segment_t1(ctx, i); + + fout << to_timestamp(t0) << " --> " << to_timestamp(t1) << "\n"; + fout << text << "\n\n"; + } + + return true; +} + +bool output_srt(struct whisper_context * ctx, const char * fname, const whisper_params & params) { + std::ofstream fout(fname); + if (!fout.is_open()) { + fprintf(stderr, "%s: failed to open '%s' for writing\n", __func__, fname); + return false; + } + + fprintf(stderr, "%s: saving output to '%s'\n", __func__, fname); + + const int n_segments = whisper_full_n_segments(ctx); + for (int i = 0; i < n_segments; ++i) { + const char * text = whisper_full_get_segment_text(ctx, i); + const int64_t t0 = whisper_full_get_segment_t0(ctx, i); + const int64_t t1 = whisper_full_get_segment_t1(ctx, i); + + fout << i + 1 + params.offset_n << "\n"; + fout << to_timestamp(t0, true) << " --> " << to_timestamp(t1, true) << "\n"; + fout << text << "\n\n"; + } + + return true; +} + +char *escape_double_quotes_and_backslashes(const char *str) { + if (str == NULL) { + return NULL; + } + + size_t escaped_length = strlen(str) + 1; + + for (size_t i = 0; str[i] != '\0'; i++) { + if (str[i] == '"' || str[i] == '\\') { + escaped_length++; + } + } + + char *escaped = (char *)calloc(escaped_length, 1); // pre-zeroed + if (escaped == NULL) { + return NULL; + } + + size_t pos = 0; + for (size_t i = 0; str[i] != '\0'; i++) { + if (str[i] == '"' || str[i] == '\\') { + escaped[pos++] = '\\'; + } + escaped[pos++] = str[i]; + } + + // no need to set zero due to calloc() being used prior + + return escaped; +} + +bool output_csv(struct whisper_context * ctx, const char * fname) { + std::ofstream fout(fname); + if (!fout.is_open()) { + fprintf(stderr, "%s: failed to open '%s' for writing\n", __func__, fname); + return false; + } + + fprintf(stderr, "%s: saving output to '%s'\n", __func__, fname); + + const int n_segments = whisper_full_n_segments(ctx); + fout << "start,end,text\n"; + for (int i = 0; i < n_segments; ++i) { + const char * text = whisper_full_get_segment_text(ctx, i); + const int64_t t0 = whisper_full_get_segment_t0(ctx, i); + const int64_t t1 = whisper_full_get_segment_t1(ctx, i); + char * text_escaped = escape_double_quotes_and_backslashes(text); + + //need to multiply times returned from whisper_full_get_segment_t{0,1}() by 10 to get milliseconds. + fout << 10 * t0 << "," << 10 * t1 << ",\"" << text_escaped << "\"\n"; + } + + return true; +} + +bool output_json(struct whisper_context * ctx, const char * fname, const whisper_params & params) { + std::ofstream fout(fname); + int indent = 0; + + auto doindent = [&]() { + for (int i = 0; i < indent; i++) fout << "\t"; + }; + + auto start_arr = [&](const char *name) { + doindent(); + fout << "\"" << name << "\": [\n"; + indent++; + }; + + auto end_arr = [&](bool end = false) { + indent--; + doindent(); + fout << (end ? "]\n" : "},\n"); + }; + + auto start_obj = [&](const char *name = nullptr) { + doindent(); + if (name) { + fout << "\"" << name << "\": {\n"; + } else { + fout << "{\n"; + } + indent++; + }; + + auto end_obj = [&](bool end = false) { + indent--; + doindent(); + fout << (end ? "}\n" : "},\n"); + }; + + auto start_value = [&](const char *name) { + doindent(); + fout << "\"" << name << "\": "; + }; + + auto value_s = [&](const char *name, const char *val, bool end = false) { + start_value(name); + char * val_escaped = escape_double_quotes_and_backslashes(val); + fout << "\"" << val_escaped << (end ? "\"\n" : "\",\n"); + free(val_escaped); + }; + + auto end_value = [&](bool end = false) { + fout << (end ? "\n" : ",\n"); + }; + + auto value_i = [&](const char *name, const int64_t val, bool end = false) { + start_value(name); + fout << val; + end_value(end); + }; + + auto value_b = [&](const char *name, const bool val, bool end = false) { + start_value(name); + fout << (val ? "true" : "false"); + end_value(end); + }; + + if (!fout.is_open()) { + fprintf(stderr, "%s: failed to open '%s' for writing\n", __func__, fname); + return false; + } + + fprintf(stderr, "%s: saving output to '%s'\n", __func__, fname); + start_obj(); + value_s("systeminfo", whisper_print_system_info()); + start_obj("model"); + value_s("type", whisper_model_type_readable(ctx)); + value_b("multilingual", whisper_is_multilingual(ctx)); + value_i("vocab", whisper_model_n_vocab(ctx)); + start_obj("audio"); + value_i("ctx", whisper_model_n_audio_ctx(ctx)); + value_i("state", whisper_model_n_audio_state(ctx)); + value_i("head", whisper_model_n_audio_head(ctx)); + value_i("layer", whisper_model_n_audio_layer(ctx), true); + end_obj(); + start_obj("text"); + value_i("ctx", whisper_model_n_text_ctx(ctx)); + value_i("state", whisper_model_n_text_state(ctx)); + value_i("head", whisper_model_n_text_head(ctx)); + value_i("layer", whisper_model_n_text_layer(ctx), true); + end_obj(); + value_i("mels", whisper_model_n_mels(ctx)); + value_i("ftype", whisper_model_ftype(ctx), true); + end_obj(); + start_obj("params"); + value_s("model", params.model.c_str()); + value_s("language", params.language.c_str()); + value_b("translate", params.translate, true); + end_obj(); + start_obj("result"); + value_s("language", whisper_lang_str(whisper_full_lang_id(ctx)), true); + end_obj(); + start_arr("transcription"); + + const int n_segments = whisper_full_n_segments(ctx); + for (int i = 0; i < n_segments; ++i) { + const char * text = whisper_full_get_segment_text(ctx, i); + const int64_t t0 = whisper_full_get_segment_t0(ctx, i); + const int64_t t1 = whisper_full_get_segment_t1(ctx, i); + + start_obj(); + start_obj("timestamps"); + value_s("from", to_timestamp(t0, true).c_str()); + value_s("to", to_timestamp(t1, true).c_str(), true); + end_obj(); + start_obj("offsets"); + value_i("from", t0 * 10); + value_i("to", t1 * 10, true); + end_obj(); + value_s("text", text, true); + end_obj(i == (n_segments - 1)); + } + + end_arr(true); + end_obj(true); + return true; +} + +// karaoke video generation +// outputs a bash script that uses ffmpeg to generate a video with the subtitles +// TODO: font parameter adjustments +bool output_wts(struct whisper_context * ctx, const char * fname, const char * fname_inp, const whisper_params & params, float t_sec) { + std::ofstream fout(fname); + + fprintf(stderr, "%s: saving output to '%s'\n", __func__, fname); + + static const char * font = params.font_path.c_str(); + + std::ifstream fin(font); + if (!fin.is_open()) { + fprintf(stderr, "%s: font not found at '%s', please specify a monospace font with -fp\n", __func__, font); + return false; + } + + fout << "#!/bin/bash" << "\n"; + fout << "\n"; + + fout << "ffmpeg -i " << fname_inp << " -f lavfi -i color=size=1200x120:duration=" << t_sec << ":rate=25:color=black -vf \""; + + for (int i = 0; i < whisper_full_n_segments(ctx); i++) { + const int64_t t0 = whisper_full_get_segment_t0(ctx, i); + const int64_t t1 = whisper_full_get_segment_t1(ctx, i); + + const int n = whisper_full_n_tokens(ctx, i); + + std::vector tokens(n); + for (int j = 0; j < n; ++j) { + tokens[j] = whisper_full_get_token_data(ctx, i, j); + } + + if (i > 0) { + fout << ","; + } + + // background text + fout << "drawtext=fontfile='" << font << "':fontsize=24:fontcolor=gray:x=(w-text_w)/2:y=h/2:text='':enable='between(t," << t0/100.0 << "," << t0/100.0 << ")'"; + + bool is_first = true; + + for (int j = 0; j < n; ++j) { + const auto & token = tokens[j]; + + if (tokens[j].id >= whisper_token_eot(ctx)) { + continue; + } + + std::string txt_bg; + std::string txt_fg; // highlight token + std::string txt_ul; // underline + + txt_bg = "> "; + txt_fg = "> "; + txt_ul = "\\ \\ "; + + { + for (int k = 0; k < n; ++k) { + const auto & token2 = tokens[k]; + + if (tokens[k].id >= whisper_token_eot(ctx)) { + continue; + } + + const std::string txt = whisper_token_to_str(ctx, token2.id); + + txt_bg += txt; + + if (k == j) { + for (int l = 0; l < (int) txt.size(); ++l) { + txt_fg += txt[l]; + txt_ul += "_"; + } + txt_fg += "|"; + } else { + for (int l = 0; l < (int) txt.size(); ++l) { + txt_fg += "\\ "; + txt_ul += "\\ "; + } + } + } + + ::replace_all(txt_bg, "'", "\u2019"); + ::replace_all(txt_bg, "\"", "\\\""); + ::replace_all(txt_fg, "'", "\u2019"); + ::replace_all(txt_fg, "\"", "\\\""); + } + + if (is_first) { + // background text + fout << ",drawtext=fontfile='" << font << "':fontsize=24:fontcolor=gray:x=(w-text_w)/2:y=h/2:text='" << txt_bg << "':enable='between(t," << t0/100.0 << "," << t1/100.0 << ")'"; + is_first = false; + } + + // foreground text + fout << ",drawtext=fontfile='" << font << "':fontsize=24:fontcolor=lightgreen:x=(w-text_w)/2+8:y=h/2:text='" << txt_fg << "':enable='between(t," << token.t0/100.0 << "," << token.t1/100.0 << ")'"; + + // underline + fout << ",drawtext=fontfile='" << font << "':fontsize=24:fontcolor=lightgreen:x=(w-text_w)/2+8:y=h/2+16:text='" << txt_ul << "':enable='between(t," << token.t0/100.0 << "," << token.t1/100.0 << ")'"; + } + } + + fout << "\" -c:v libx264 -pix_fmt yuv420p -y " << fname_inp << ".mp4" << "\n"; + + fout << "\n\n"; + fout << "echo \"Your video has been saved to " << fname_inp << ".mp4\"" << "\n"; + fout << "\n"; + fout << "echo \" ffplay " << fname_inp << ".mp4\"\n"; + fout << "\n"; + + fout.close(); + + fprintf(stderr, "%s: run 'source %s' to generate karaoke video\n", __func__, fname); + + return true; +} + +bool output_lrc(struct whisper_context * ctx, const char * fname) { + + std::ofstream fout(fname); + if (!fout.is_open()) { + fprintf(stderr, "%s: failed to open '%s' for writing\n", __func__, fname); + return false; + } + + fprintf(stderr, "%s: saving output to '%s'\n", __func__, fname); + + fout << "[by:whisper.cpp]\n"; + + const int n_segments = whisper_full_n_segments(ctx); + for (int i = 0; i < n_segments; ++i) { + const char * text = whisper_full_get_segment_text(ctx, i); + const int64_t t = whisper_full_get_segment_t0(ctx, i); + + int64_t msec = t * 10; + int64_t min = msec / (1000 * 60); + msec = msec - min * (1000 * 60); + int64_t sec = msec / 1000; + msec = msec - sec * 1000; + + char buf[16]; + snprintf(buf, sizeof(buf), "%02d:%02d.%02d", (int) min, (int) sec, (int) ( msec / 10)); + std::string timestamp_lrc = std::string(buf); + + fout << '[' << timestamp_lrc << ']' << text << "\n"; + } + + return true; +} + +int main(int argc, char ** argv) { + whisper_params params; + + if (whisper_params_parse(argc, argv, params) == false) { + return 1; + } + + if (params.fname_inp.empty()) { + fprintf(stderr, "error: no input files specified\n"); + whisper_print_usage(argc, argv, params); + return 2; + } + + if (params.language != "auto" && whisper_lang_id(params.language.c_str()) == -1) { + fprintf(stderr, "error: unknown language '%s'\n", params.language.c_str()); + whisper_print_usage(argc, argv, params); + exit(0); + } + + // whisper init + + struct whisper_context * ctx = whisper_init_from_file(params.model.c_str()); + + if (ctx == nullptr) { + fprintf(stderr, "error: failed to initialize whisper context\n"); + return 3; + } + + for (int f = 0; f < (int) params.fname_inp.size(); ++f) { + const auto fname_inp = params.fname_inp[f]; + const auto fname_out = f < (int) params.fname_out.size() && !params.fname_out[f].empty() ? params.fname_out[f] : params.fname_inp[f]; + + std::vector pcmf32; // mono-channel F32 PCM + std::vector> pcmf32s; // stereo-channel F32 PCM + + if (!::read_wav(fname_inp, pcmf32, pcmf32s, params.diarize)) { + fprintf(stderr, "error: failed to read WAV file '%s'\n", fname_inp.c_str()); + continue; + } + + // print system information + { + fprintf(stderr, "\n"); + fprintf(stderr, "system_info: n_threads = %d / %d | %s\n", + params.n_threads*params.n_processors, std::thread::hardware_concurrency(), whisper_print_system_info()); + } + + // print some info about the processing + { + fprintf(stderr, "\n"); + if (!whisper_is_multilingual(ctx)) { + if (params.language != "en" || params.translate) { + params.language = "en"; + params.translate = false; + fprintf(stderr, "%s: WARNING: model is not multilingual, ignoring language and translation options\n", __func__); + } + } + if (params.detect_language) { + params.language = "auto"; + } + fprintf(stderr, "%s: processing '%s' (%d samples, %.1f sec), %d threads, %d processors, lang = %s, task = %s, timestamps = %d ...\n", + __func__, fname_inp.c_str(), int(pcmf32.size()), float(pcmf32.size())/WHISPER_SAMPLE_RATE, + params.n_threads, params.n_processors, + params.language.c_str(), + params.translate ? "translate" : "transcribe", + params.no_timestamps ? 0 : 1); + + fprintf(stderr, "\n"); + } + + // run the inference + { + whisper_full_params wparams = whisper_full_default_params(WHISPER_SAMPLING_GREEDY); + + wparams.strategy = params.beam_size > 1 ? WHISPER_SAMPLING_BEAM_SEARCH : WHISPER_SAMPLING_GREEDY; + + wparams.print_realtime = false; + wparams.print_progress = params.print_progress; + wparams.print_timestamps = !params.no_timestamps; + wparams.print_special = params.print_special; + wparams.translate = params.translate; + wparams.language = params.language.c_str(); + wparams.detect_language = params.detect_language; + wparams.n_threads = params.n_threads; + wparams.n_max_text_ctx = params.max_context >= 0 ? params.max_context : wparams.n_max_text_ctx; + wparams.offset_ms = params.offset_t_ms; + wparams.duration_ms = params.duration_ms; + + wparams.token_timestamps = params.output_wts || params.max_len > 0; + wparams.thold_pt = params.word_thold; + wparams.max_len = params.output_wts && params.max_len == 0 ? 60 : params.max_len; + wparams.split_on_word = params.split_on_word; + + wparams.speed_up = params.speed_up; + + wparams.initial_prompt = params.prompt.c_str(); + + wparams.greedy.best_of = params.best_of; + wparams.beam_search.beam_size = params.beam_size; + + wparams.temperature_inc = params.no_fallback ? 0.0f : wparams.temperature_inc; + wparams.entropy_thold = params.entropy_thold; + wparams.logprob_thold = params.logprob_thold; + + whisper_print_user_data user_data = { ¶ms, &pcmf32s }; + + // this callback is called on each new segment + if (!wparams.print_realtime) { + wparams.new_segment_callback = whisper_print_segment_callback; + wparams.new_segment_callback_user_data = &user_data; + } + + // example for abort mechanism + // in this example, we do not abort the processing, but we could if the flag is set to true + // the callback is called before every encoder run - if it returns false, the processing is aborted + { + static bool is_aborted = false; // NOTE: this should be atomic to avoid data race + + wparams.encoder_begin_callback = [](struct whisper_context * /*ctx*/, struct whisper_state * /*state*/, void * user_data) { + bool is_aborted = *(bool*)user_data; + return !is_aborted; + }; + wparams.encoder_begin_callback_user_data = &is_aborted; + } + + if (whisper_full_parallel(ctx, wparams, pcmf32.data(), pcmf32.size(), params.n_processors) != 0) { + fprintf(stderr, "%s: failed to process audio\n", argv[0]); + return 10; + } + } + + // output stuff + { + printf("\n"); + + // output to text file + if (params.output_txt) { + const auto fname_txt = fname_out + ".txt"; + output_txt(ctx, fname_txt.c_str()); + } + + // output to VTT file + if (params.output_vtt) { + const auto fname_vtt = fname_out + ".vtt"; + output_vtt(ctx, fname_vtt.c_str()); + } + + // output to SRT file + if (params.output_srt) { + const auto fname_srt = fname_out + ".srt"; + output_srt(ctx, fname_srt.c_str(), params); + } + + // output to WTS file + if (params.output_wts) { + const auto fname_wts = fname_out + ".wts"; + output_wts(ctx, fname_wts.c_str(), fname_inp.c_str(), params, float(pcmf32.size() + 1000)/WHISPER_SAMPLE_RATE); + } + + // output to CSV file + if (params.output_csv) { + const auto fname_csv = fname_out + ".csv"; + output_csv(ctx, fname_csv.c_str()); + } + + // output to JSON file + if (params.output_jsn) { + const auto fname_jsn = fname_out + ".json"; + output_json(ctx, fname_jsn.c_str(), params); + } + + // output to LRC file + if (params.output_lrc) { + const auto fname_lrc = fname_out + ".lrc"; + output_lrc(ctx, fname_lrc.c_str()); + } + } + } + + whisper_print_timings(ctx); + whisper_free(ctx); + + return 0; +} diff --git a/ggml_old/examples/whisper/quantize.cpp b/ggml_old/examples/whisper/quantize.cpp new file mode 100644 index 0000000..f2fdb0f --- /dev/null +++ b/ggml_old/examples/whisper/quantize.cpp @@ -0,0 +1,221 @@ +#include "ggml.h" + +#include "common.h" +#include "common-ggml.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// default hparams (Whisper tiny) +struct whisper_hparams { + int32_t n_vocab = 51864; + int32_t n_audio_ctx = 1500; + int32_t n_audio_state = 384; + int32_t n_audio_head = 6; + int32_t n_audio_layer = 4; + int32_t n_text_ctx = 448; + int32_t n_text_state = 384; + int32_t n_text_head = 6; + int32_t n_text_layer = 4; + int32_t n_mels = 80; + int32_t ftype = 1; +}; + +struct whisper_filters { + int32_t n_mel; + int32_t n_fft; + + std::vector data; +}; + +// quantize a model +bool whisper_model_quantize(const std::string & fname_inp, const std::string & fname_out, ggml_ftype ftype) { + gpt_vocab vocab; + + printf("%s: loading model from '%s'\n", __func__, fname_inp.c_str()); + + auto finp = std::ifstream(fname_inp, std::ios::binary); + if (!finp) { + fprintf(stderr, "%s: failed to open '%s' for reading\n", __func__, fname_inp.c_str()); + return false; + } + + auto fout = std::ofstream(fname_out, std::ios::binary); + if (!fout) { + fprintf(stderr, "%s: failed to open '%s' for writing\n", __func__, fname_out.c_str()); + return false; + } + + // verify magic + { + uint32_t magic; + finp.read((char *) &magic, sizeof(magic)); + if (magic != 0x67676d6c) { + fprintf(stderr, "%s: invalid model file '%s' (bad magic)\n", __func__, fname_inp.c_str()); + return false; + } + + fout.write((char *) &magic, sizeof(magic)); + } + + whisper_hparams hparams; + + // load hparams + { + finp.read((char *) &hparams.n_vocab, sizeof(hparams.n_vocab)); + finp.read((char *) &hparams.n_audio_ctx, sizeof(hparams.n_audio_ctx)); + finp.read((char *) &hparams.n_audio_state, sizeof(hparams.n_audio_state)); + finp.read((char *) &hparams.n_audio_head, sizeof(hparams.n_audio_head)); + finp.read((char *) &hparams.n_audio_layer, sizeof(hparams.n_audio_layer)); + finp.read((char *) &hparams.n_text_ctx, sizeof(hparams.n_text_ctx)); + finp.read((char *) &hparams.n_text_state, sizeof(hparams.n_text_state)); + finp.read((char *) &hparams.n_text_head, sizeof(hparams.n_text_head)); + finp.read((char *) &hparams.n_text_layer, sizeof(hparams.n_text_layer)); + finp.read((char *) &hparams.n_mels, sizeof(hparams.n_mels)); + finp.read((char *) &hparams.ftype, sizeof(hparams.ftype)); + + const int32_t qntvr_src = hparams.ftype / GGML_QNT_VERSION_FACTOR; + const int32_t ftype_dst = GGML_QNT_VERSION * GGML_QNT_VERSION_FACTOR + ftype; + + fprintf(stderr, "%s: n_vocab = %d\n", __func__, hparams.n_vocab); + fprintf(stderr, "%s: n_audio_ctx = %d\n", __func__, hparams.n_audio_ctx); + fprintf(stderr, "%s: n_audio_state = %d\n", __func__, hparams.n_audio_state); + fprintf(stderr, "%s: n_audio_head = %d\n", __func__, hparams.n_audio_head); + fprintf(stderr, "%s: n_audio_layer = %d\n", __func__, hparams.n_audio_layer); + fprintf(stderr, "%s: n_text_ctx = %d\n", __func__, hparams.n_text_ctx); + fprintf(stderr, "%s: n_text_state = %d\n", __func__, hparams.n_text_state); + fprintf(stderr, "%s: n_text_head = %d\n", __func__, hparams.n_text_head); + fprintf(stderr, "%s: n_text_layer = %d\n", __func__, hparams.n_text_layer); + fprintf(stderr, "%s: n_mels = %d\n", __func__, hparams.n_mels); + fprintf(stderr, "%s: ftype (src) = %d\n", __func__, hparams.ftype); + fprintf(stderr, "%s: qntvr (src) = %d\n", __func__, qntvr_src); + fprintf(stderr, "%s: ftype (dst) = %d\n", __func__, ftype_dst); + fprintf(stderr, "%s: qntvr (dst) = %d\n", __func__, GGML_QNT_VERSION); + + fout.write((char *) &hparams.n_vocab, sizeof(hparams.n_vocab)); + fout.write((char *) &hparams.n_audio_ctx, sizeof(hparams.n_audio_ctx)); + fout.write((char *) &hparams.n_audio_state, sizeof(hparams.n_audio_state)); + fout.write((char *) &hparams.n_audio_head, sizeof(hparams.n_audio_head)); + fout.write((char *) &hparams.n_audio_layer, sizeof(hparams.n_audio_layer)); + fout.write((char *) &hparams.n_text_ctx, sizeof(hparams.n_text_ctx)); + fout.write((char *) &hparams.n_text_state, sizeof(hparams.n_text_state)); + fout.write((char *) &hparams.n_text_head, sizeof(hparams.n_text_head)); + fout.write((char *) &hparams.n_text_layer, sizeof(hparams.n_text_layer)); + fout.write((char *) &hparams.n_mels, sizeof(hparams.n_mels)); + fout.write((char *) &ftype_dst, sizeof(hparams.ftype)); + } + + // load mel filters + { + whisper_filters filters; + + finp.read ((char *) &filters.n_mel, sizeof(filters.n_mel)); + fout.write((char *) &filters.n_mel, sizeof(filters.n_mel)); + finp.read ((char *) &filters.n_fft, sizeof(filters.n_fft)); + fout.write((char *) &filters.n_fft, sizeof(filters.n_fft)); + + filters.data.resize(filters.n_mel * filters.n_fft); + finp.read ((char *) filters.data.data(), filters.data.size() * sizeof(float)); + fout.write((char *) filters.data.data(), filters.data.size() * sizeof(float)); + } + + // load vocab + { + int32_t n_vocab = 0; + finp.read ((char *) &n_vocab, sizeof(n_vocab)); + fout.write((char *) &n_vocab, sizeof(n_vocab)); + + //if (n_vocab != hparams.n_vocab) { + // fprintf(stderr, "%s: invalid model file '%s' (bad vocab size %d != %d)\n", + // __func__, fname_inp.c_str(), n_vocab, hparams.n_vocab); + // return false; + //} + + std::string word; + for (int i = 0; i < n_vocab; i++) { + uint32_t len; + finp.read ((char *) &len, sizeof(len)); + fout.write((char *) &len, sizeof(len)); + + word.resize(len); + finp.read ((char *) word.data(), len); + fout.write((char *) word.data(), len); + + vocab.token_to_id[word] = i; + vocab.id_to_token[i] = word; + } + } + + // regexes of tensor names to not be quantized + const std::vector to_skip = { + //"encoder.*", + "encoder.conv1.bias", + "encoder.conv2.bias", + "encoder.positional_embedding", + "decoder.positional_embedding", + }; + + if (!ggml_common_quantize_0(finp, fout, ftype, { ".*" }, to_skip)) { + fprintf(stderr, "%s: failed to quantize model '%s'\n", __func__, fname_inp.c_str()); + return false; + } + + finp.close(); + fout.close(); + + return true; +} + +int main(int argc, char ** argv) { + if (argc != 4) { + fprintf(stderr, "usage: %s model-f32.bin model-quant.bin type\n", argv[0]); + ggml_print_ftypes(stderr); + return 1; + } + + // needed to initialize f16 tables + { + struct ggml_init_params params = { 0, NULL, false }; + struct ggml_context * ctx = ggml_init(params); + ggml_free(ctx); + } + + const std::string fname_inp = argv[1]; + const std::string fname_out = argv[2]; + + const ggml_ftype ftype = ggml_parse_ftype(argv[3]); + + const int64_t t_main_start_us = ggml_time_us(); + + int64_t t_quantize_us = 0; + + // load the model + { + const int64_t t_start_us = ggml_time_us(); + + if (!whisper_model_quantize(fname_inp, fname_out, ggml_ftype(ftype))) { + fprintf(stderr, "%s: failed to quantize model from '%s'\n", __func__, fname_inp.c_str()); + return 1; + } + + t_quantize_us = ggml_time_us() - t_start_us; + } + + // report timing + { + const int64_t t_main_end_us = ggml_time_us(); + + printf("\n"); + printf("%s: quantize time = %8.2f ms\n", __func__, t_quantize_us/1000.0f); + printf("%s: total time = %8.2f ms\n", __func__, (t_main_end_us - t_main_start_us)/1000.0f); + } + + return 0; +} diff --git a/ggml_old/examples/whisper/whisper.cpp b/ggml_old/examples/whisper/whisper.cpp new file mode 100644 index 0000000..6faa3f2 --- /dev/null +++ b/ggml_old/examples/whisper/whisper.cpp @@ -0,0 +1,5310 @@ +#include "whisper.h" +#if WHISPER_USE_COREML +#include "coreml/whisper-encoder.h" +#endif + +#include "ggml.h" + +#include +#include +#define _USE_MATH_DEFINES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(GGML_BIG_ENDIAN) +#include + +template +static T byteswap(T value) { + return std::byteswap(value); +} + +template<> +float byteswap(float value) { + return std::bit_cast(byteswap(std::bit_cast(value))); +} + +template +static void byteswap_tensor_data(ggml_tensor * tensor) { + T * datum = reinterpret_cast(tensor->data); + for (int i = 0; i < ggml_nelements(tensor); i++) { + datum[i] = byteswap(datum[i]); + } +} + +static void byteswap_tensor(ggml_tensor * tensor) { + switch (tensor->type) { + case GGML_TYPE_I16: { + byteswap_tensor_data(tensor); + break; + } + case GGML_TYPE_F16: { + byteswap_tensor_data(tensor); + break; + } + case GGML_TYPE_I32: { + byteswap_tensor_data(tensor); + break; + } + case GGML_TYPE_F32: { + byteswap_tensor_data(tensor); + break; + } + default: { // GML_TYPE_I8 + break; + } + } +} + +#define BYTESWAP_VALUE(d) d = byteswap(d) +#define BYTESWAP_FILTERS(f) \ + do { \ + for (auto & datum : f.data) { \ + datum = byteswap(datum); \ + } \ + } while (0) +#define BYTESWAP_TENSOR(t) \ + do { \ + byteswap_tensor(tensor); \ + } while (0) +#else +#define BYTESWAP_VALUE(d) do {} while (0) +#define BYTESWAP_FILTERS(f) do {} while (0) +#define BYTESWAP_TENSOR(t) do {} while (0) +#endif + +#define WHISPER_ASSERT(x) \ + do { \ + if (!(x)) { \ + fprintf(stderr, "WHISPER_ASSERT: %s:%d: %s\n", __FILE__, __LINE__, #x); \ + abort(); \ + } \ + } while (0) + +// define this to enable verbose trace logging - useful for debugging purposes +//#define WHISPER_DEBUG + +#if defined(WHISPER_DEBUG) +#define WHISPER_PRINT_DEBUG(...) \ + do { \ + fprintf(stderr, __VA_ARGS__); \ + } while (0) +#else +#define WHISPER_PRINT_DEBUG(...) +#endif + +//#define WHISPER_USE_FLASH_ATTN +//#define WHISPER_USE_FLASH_FF +#define WHISPER_MAX_DECODERS 16 + +#define WHISPER_USE_SCRATCH +#define WHISPER_MAX_SCRATCH_BUFFERS 16 + +// available whisper models +enum e_model { + MODEL_UNKNOWN, + MODEL_TINY, + MODEL_BASE, + MODEL_SMALL, + MODEL_MEDIUM, + MODEL_LARGE, +}; + +static const std::map> g_lang = { + { "en", { 0, "english", } }, + { "zh", { 1, "chinese", } }, + { "de", { 2, "german", } }, + { "es", { 3, "spanish", } }, + { "ru", { 4, "russian", } }, + { "ko", { 5, "korean", } }, + { "fr", { 6, "french", } }, + { "ja", { 7, "japanese", } }, + { "pt", { 8, "portuguese", } }, + { "tr", { 9, "turkish", } }, + { "pl", { 10, "polish", } }, + { "ca", { 11, "catalan", } }, + { "nl", { 12, "dutch", } }, + { "ar", { 13, "arabic", } }, + { "sv", { 14, "swedish", } }, + { "it", { 15, "italian", } }, + { "id", { 16, "indonesian", } }, + { "hi", { 17, "hindi", } }, + { "fi", { 18, "finnish", } }, + { "vi", { 19, "vietnamese", } }, + { "he", { 20, "hebrew", } }, + { "uk", { 21, "ukrainian", } }, + { "el", { 22, "greek", } }, + { "ms", { 23, "malay", } }, + { "cs", { 24, "czech", } }, + { "ro", { 25, "romanian", } }, + { "da", { 26, "danish", } }, + { "hu", { 27, "hungarian", } }, + { "ta", { 28, "tamil", } }, + { "no", { 29, "norwegian", } }, + { "th", { 30, "thai", } }, + { "ur", { 31, "urdu", } }, + { "hr", { 32, "croatian", } }, + { "bg", { 33, "bulgarian", } }, + { "lt", { 34, "lithuanian", } }, + { "la", { 35, "latin", } }, + { "mi", { 36, "maori", } }, + { "ml", { 37, "malayalam", } }, + { "cy", { 38, "welsh", } }, + { "sk", { 39, "slovak", } }, + { "te", { 40, "telugu", } }, + { "fa", { 41, "persian", } }, + { "lv", { 42, "latvian", } }, + { "bn", { 43, "bengali", } }, + { "sr", { 44, "serbian", } }, + { "az", { 45, "azerbaijani", } }, + { "sl", { 46, "slovenian", } }, + { "kn", { 47, "kannada", } }, + { "et", { 48, "estonian", } }, + { "mk", { 49, "macedonian", } }, + { "br", { 50, "breton", } }, + { "eu", { 51, "basque", } }, + { "is", { 52, "icelandic", } }, + { "hy", { 53, "armenian", } }, + { "ne", { 54, "nepali", } }, + { "mn", { 55, "mongolian", } }, + { "bs", { 56, "bosnian", } }, + { "kk", { 57, "kazakh", } }, + { "sq", { 58, "albanian", } }, + { "sw", { 59, "swahili", } }, + { "gl", { 60, "galician", } }, + { "mr", { 61, "marathi", } }, + { "pa", { 62, "punjabi", } }, + { "si", { 63, "sinhala", } }, + { "km", { 64, "khmer", } }, + { "sn", { 65, "shona", } }, + { "yo", { 66, "yoruba", } }, + { "so", { 67, "somali", } }, + { "af", { 68, "afrikaans", } }, + { "oc", { 69, "occitan", } }, + { "ka", { 70, "georgian", } }, + { "be", { 71, "belarusian", } }, + { "tg", { 72, "tajik", } }, + { "sd", { 73, "sindhi", } }, + { "gu", { 74, "gujarati", } }, + { "am", { 75, "amharic", } }, + { "yi", { 76, "yiddish", } }, + { "lo", { 77, "lao", } }, + { "uz", { 78, "uzbek", } }, + { "fo", { 79, "faroese", } }, + { "ht", { 80, "haitian creole", } }, + { "ps", { 81, "pashto", } }, + { "tk", { 82, "turkmen", } }, + { "nn", { 83, "nynorsk", } }, + { "mt", { 84, "maltese", } }, + { "sa", { 85, "sanskrit", } }, + { "lb", { 86, "luxembourgish", } }, + { "my", { 87, "myanmar", } }, + { "bo", { 88, "tibetan", } }, + { "tl", { 89, "tagalog", } }, + { "mg", { 90, "malagasy", } }, + { "as", { 91, "assamese", } }, + { "tt", { 92, "tatar", } }, + { "haw", { 93, "hawaiian", } }, + { "ln", { 94, "lingala", } }, + { "ha", { 95, "hausa", } }, + { "ba", { 96, "bashkir", } }, + { "jw", { 97, "javanese", } }, + { "su", { 98, "sundanese", } }, +}; + +static const size_t MB = 1ull*1024*1024; + +static const std::map MEM_REQ_SCRATCH0 = { + { MODEL_TINY, 62ull*MB }, + { MODEL_BASE, 80ull*MB }, + { MODEL_SMALL, 120ull*MB }, + { MODEL_MEDIUM, 158ull*MB }, + { MODEL_LARGE, 198ull*MB }, +}; + +static const std::map MEM_REQ_SCRATCH1 = { + { MODEL_TINY, 18ull*MB }, + { MODEL_BASE, 24ull*MB }, + { MODEL_SMALL, 36ull*MB }, + { MODEL_MEDIUM, 48ull*MB }, + { MODEL_LARGE, 60ull*MB }, +}; + +static const std::map MEM_REQ_SCRATCH2 = { + { MODEL_TINY, 4ull*MB }, + { MODEL_BASE, 4ull*MB }, + { MODEL_SMALL, 6ull*MB }, + { MODEL_MEDIUM, 7ull*MB }, + { MODEL_LARGE, 9ull*MB }, +}; + +static const std::map MEM_REQ_SCRATCH3 = { + { MODEL_TINY, 4ull*MB }, + { MODEL_BASE, 4ull*MB }, + { MODEL_SMALL, 6ull*MB }, + { MODEL_MEDIUM, 7ull*MB }, + { MODEL_LARGE, 9ull*MB }, +}; + +static const std::map> MEM_REQ_MODEL = { + { GGML_TYPE_F32, + { + { MODEL_TINY, 74ull*MB }, + { MODEL_BASE, 142ull*MB }, + { MODEL_SMALL, 466ull*MB }, + { MODEL_MEDIUM, 1464ull*MB }, + { MODEL_LARGE, 2952ull*MB }, + }, + }, + { GGML_TYPE_F16, + { + { MODEL_TINY, 74ull*MB }, + { MODEL_BASE, 142ull*MB }, + { MODEL_SMALL, 466ull*MB }, + { MODEL_MEDIUM, 1464ull*MB }, + { MODEL_LARGE, 2952ull*MB }, + }, + }, + { GGML_TYPE_Q4_0, + { + { MODEL_TINY, 26ull*MB }, + { MODEL_BASE, 50ull*MB }, + { MODEL_SMALL, 154ull*MB }, + { MODEL_MEDIUM, 470ull*MB }, + { MODEL_LARGE, 940ull*MB }, + }, + }, + { GGML_TYPE_Q4_1, + { + { MODEL_TINY, 32ull*MB }, + { MODEL_BASE, 58ull*MB }, + { MODEL_SMALL, 182ull*MB }, + { MODEL_MEDIUM, 562ull*MB }, + { MODEL_LARGE, 1124ull*MB }, + }, + }, + { GGML_TYPE_Q5_0, + { + { MODEL_TINY, 30ull*MB }, + { MODEL_BASE, 54ull*MB }, + { MODEL_SMALL, 170ull*MB }, + { MODEL_MEDIUM, 516ull*MB }, + { MODEL_LARGE, 1034ull*MB }, + }, + }, + { GGML_TYPE_Q5_1, + { + { MODEL_TINY, 32ull*MB }, + { MODEL_BASE, 58ull*MB }, + { MODEL_SMALL, 182ull*MB }, + { MODEL_MEDIUM, 562ull*MB }, + { MODEL_LARGE, 1124ull*MB }, + }, + }, + { GGML_TYPE_Q8_0, + { + { MODEL_TINY, 45ull*MB }, + { MODEL_BASE, 84ull*MB }, + { MODEL_SMALL, 268ull*MB }, + { MODEL_MEDIUM, 834ull*MB }, + { MODEL_LARGE, 1674ull*MB }, + }, + }, +}; + +static const std::map MEM_REQ_KV_SELF = { + { MODEL_TINY, 3ull*MB }, + { MODEL_BASE, 6ull*MB }, + { MODEL_SMALL, 16ull*MB }, + { MODEL_MEDIUM, 43ull*MB }, + { MODEL_LARGE, 71ull*MB }, +}; + +static const std::map MEM_REQ_KV_CROSS = { + { MODEL_TINY, 9ull*MB }, + { MODEL_BASE, 18ull*MB }, + { MODEL_SMALL, 53ull*MB }, + { MODEL_MEDIUM, 141ull*MB }, + { MODEL_LARGE, 235ull*MB }, +}; + +static const std::map MEM_REQ_ENCODE = { + { MODEL_TINY, 30ull*MB }, + { MODEL_BASE, 38ull*MB }, + { MODEL_SMALL, 56ull*MB }, + { MODEL_MEDIUM, 74ull*MB }, + { MODEL_LARGE, 94ull*MB }, +}; + +static const std::map MEM_REQ_DECODE = { + { MODEL_TINY, 3ull*MB }, + { MODEL_BASE, 5ull*MB }, + { MODEL_SMALL, 10ull*MB }, + { MODEL_MEDIUM, 18ull*MB }, + { MODEL_LARGE, 27ull*MB }, +}; + +struct whisper_mel { + int n_len; + int n_len_org; + int n_mel; + + std::vector data; +}; + +struct whisper_filters { + int32_t n_mel; + int32_t n_fft; + + std::vector data; +}; + +struct whisper_vocab { + using id = int32_t; + using token = std::string; + + int n_vocab = 51864; + + std::map token_to_id; + std::map id_to_token; + + id token_eot = 50256; + id token_sot = 50257; + id token_prev = 50360; + id token_solm = 50361; // ?? + id token_not = 50362; // no timestamps + id token_beg = 50363; + + // available tasks + static const id token_translate = 50358; + static const id token_transcribe = 50359; + + bool is_multilingual() const { + return n_vocab == 51865; + } +}; + +struct whisper_segment { + int64_t t0; + int64_t t1; + + std::string text; + + std::vector tokens; +}; + +// medium +// hparams: { +// 'n_mels': 80, +// 'n_vocab': 51864, +// 'n_audio_ctx': 1500, +// 'n_audio_state': 1024, +// 'n_audio_head': 16, +// 'n_audio_layer': 24, +// 'n_text_ctx': 448, +// 'n_text_state': 1024, +// 'n_text_head': 16, +// 'n_text_layer': 24 +// } +// +// default hparams (Whisper tiny) +struct whisper_hparams { + int32_t n_vocab = 51864; + int32_t n_audio_ctx = 1500; + int32_t n_audio_state = 384; + int32_t n_audio_head = 6; + int32_t n_audio_layer = 4; + int32_t n_text_ctx = 448; + int32_t n_text_state = 384; + int32_t n_text_head = 6; + int32_t n_text_layer = 4; + int32_t n_mels = 80; + int32_t ftype = 1; +}; + +// audio encoding layer +struct whisper_layer_encoder { + // encoder.blocks.*.attn_ln + struct ggml_tensor * attn_ln_0_w; + struct ggml_tensor * attn_ln_0_b; + + // encoder.blocks.*.attn.out + struct ggml_tensor * attn_ln_1_w; + struct ggml_tensor * attn_ln_1_b; + + // encoder.blocks.*.attn.query + struct ggml_tensor * attn_q_w; + struct ggml_tensor * attn_q_b; + + // encoder.blocks.*.attn.key + struct ggml_tensor * attn_k_w; + + // encoder.blocks.*.attn.value + struct ggml_tensor * attn_v_w; + struct ggml_tensor * attn_v_b; + + // encoder.blocks.*.mlp_ln + struct ggml_tensor * mlp_ln_w; + struct ggml_tensor * mlp_ln_b; + + // encoder.blocks.*.mlp.0 + struct ggml_tensor * mlp_0_w; + struct ggml_tensor * mlp_0_b; + + // encoder.blocks.*.mlp.2 + struct ggml_tensor * mlp_1_w; + struct ggml_tensor * mlp_1_b; +}; + +// token decoding layer +struct whisper_layer_decoder { + // decoder.blocks.*.attn_ln + struct ggml_tensor * attn_ln_0_w; + struct ggml_tensor * attn_ln_0_b; + + // decoder.blocks.*.attn.out + struct ggml_tensor * attn_ln_1_w; + struct ggml_tensor * attn_ln_1_b; + + // decoder.blocks.*.attn.query + struct ggml_tensor * attn_q_w; + struct ggml_tensor * attn_q_b; + + // decoder.blocks.*.attn.key + struct ggml_tensor * attn_k_w; + + // decoder.blocks.*.attn.value + struct ggml_tensor * attn_v_w; + struct ggml_tensor * attn_v_b; + + // decoder.blocks.*.cross_attn_ln + struct ggml_tensor * cross_attn_ln_0_w; + struct ggml_tensor * cross_attn_ln_0_b; + + // decoder.blocks.*.cross_attn.out + struct ggml_tensor * cross_attn_ln_1_w; + struct ggml_tensor * cross_attn_ln_1_b; + + // decoder.blocks.*.cross_attn.query + struct ggml_tensor * cross_attn_q_w; + struct ggml_tensor * cross_attn_q_b; + + // decoder.blocks.*.cross_attn.key + struct ggml_tensor * cross_attn_k_w; + + // decoder.blocks.*.cross_attn.value + struct ggml_tensor * cross_attn_v_w; + struct ggml_tensor * cross_attn_v_b; + + // decoder.blocks.*.mlp_ln + struct ggml_tensor * mlp_ln_w; + struct ggml_tensor * mlp_ln_b; + + // decoder.blocks.*.mlp.0 + struct ggml_tensor * mlp_0_w; + struct ggml_tensor * mlp_0_b; + + // decoder.blocks.*.mlp.2 + struct ggml_tensor * mlp_1_w; + struct ggml_tensor * mlp_1_b; +}; + +struct whisper_kv_cache { + struct ggml_tensor * k; + struct ggml_tensor * v; + + struct ggml_context * ctx; + + std::vector buf; + + int n; // number of tokens currently in the cache +}; + +struct whisper_model { + e_model type = MODEL_UNKNOWN; + + whisper_hparams hparams; + whisper_filters filters; + + // encoder.positional_embedding + struct ggml_tensor * e_pe; + + // encoder.conv1 + struct ggml_tensor * e_conv_1_w; + struct ggml_tensor * e_conv_1_b; + + // encoder.conv2 + struct ggml_tensor * e_conv_2_w; + struct ggml_tensor * e_conv_2_b; + + // encoder.ln_post + struct ggml_tensor * e_ln_w; + struct ggml_tensor * e_ln_b; + + // decoder.positional_embedding + struct ggml_tensor * d_pe; + + // decoder.token_embedding + struct ggml_tensor * d_te; + + // decoder.ln + struct ggml_tensor * d_ln_w; + struct ggml_tensor * d_ln_b; + + std::vector layers_encoder; + std::vector layers_decoder; + + // context + struct ggml_context * ctx; + + // the model memory buffer is read-only and can be shared between processors + std::vector * buf; + + // tensors + int n_loaded; + std::map tensors; +}; + +struct whisper_sequence { + std::vector tokens; + + // the accumulated transcription in the current interation (used to truncate the tokens array) + int result_len; + + double sum_logprobs_all; // the sum of the log probabilities of the tokens + double sum_logprobs; // the sum of the log probabilities of the tokens (first result_len tokens) + double avg_logprobs; // the average log probability of the tokens + double entropy; // the entropy of the tokens + double score; // likelihood rank score +}; + +// TAGS: WHISPER_DECODER_INIT +struct whisper_decoder { + // each decoders keeps its own KV-cache + whisper_kv_cache kv_self; + + // the currently generated sequence of tokens + whisper_sequence sequence; + + int seek_delta; // the window shift found so far based on the decoded timestamp tokens + + bool failed; // has the current segment failed to decode? + bool completed; // has the decoder completed the current segment? + bool has_ts; // have we already sampled a non-beg timestamp token for the current segment? + + // new token probs, logits and logprobs after the last whisper_decode (1-dimensional array: [n_vocab]) + std::vector probs; + std::vector logits; + std::vector logprobs; + + std::vector tokens_tmp; // used for whisper_decode calls +}; + +struct whisper_state { + int64_t t_sample_us = 0; + int64_t t_encode_us = 0; + int64_t t_decode_us = 0; + int64_t t_mel_us = 0; + + int32_t n_sample = 0; // number of tokens sampled + int32_t n_encode = 0; // number of encoder calls + int32_t n_decode = 0; // number of decoder calls + int32_t n_fail_p = 0; // number of logprob threshold failures + int32_t n_fail_h = 0; // number of entropy threshold failures + + // cross-attention KV cache for the decoders + // shared between all decoders + whisper_kv_cache kv_cross; + whisper_mel mel; + + whisper_decoder decoders[WHISPER_MAX_DECODERS] = {}; + + // memory buffers used by encode / decode contexts + std::vector buf_compute; + std::vector buf_scratch[WHISPER_MAX_SCRATCH_BUFFERS]; + + int buf_last = 0; + size_t buf_max_size[WHISPER_MAX_SCRATCH_BUFFERS] = { 0 }; + + // decode output (2-dimensional array: [n_tokens][n_vocab]) + std::vector logits; + + std::vector result_all; + std::vector prompt_past; + + // work container used to avoid memory allocations + std::vector> logits_id; + + mutable std::mt19937 rng; // used for sampling at t > 0.0 + + int lang_id = 0; // english by default + + std::string path_model; // populated by whisper_init_from_file() +#ifdef WHISPER_USE_COREML + whisper_coreml_context * ctx_coreml = nullptr; +#endif + + // [EXPERIMENTAL] token-level timestamps data + int64_t t_beg = 0; + int64_t t_last = 0; + whisper_token tid_last; + std::vector energy; // PCM signal energy + + // [EXPERIMENTAL] speed-up techniques + int32_t exp_n_audio_ctx = 0; // 0 - use default + + void use_buf(struct ggml_context * ctx, int i) { +#if defined(WHISPER_USE_SCRATCH) + size_t last_size = 0; + + if (i == -1) { + last_size = ggml_set_scratch(ctx, { 0, 0, nullptr, }); + } else { + auto & buf = buf_scratch[i]; + last_size = ggml_set_scratch(ctx, { 0, buf.size(), buf.data(), }); + } + + if (buf_last >= 0) { + buf_max_size[buf_last] = std::max(buf_max_size[buf_last], last_size); + } + + buf_last = i; +#else + (void) i; + (void) ctx; +#endif + } + + size_t get_buf_max_mem(int i) const { +#if defined(WHISPER_USE_SCRATCH) + return buf_max_size[i]; +#else + (void) i; + return 0; +#endif + } +}; + +struct whisper_context { + int64_t t_load_us = 0; + int64_t t_start_us = 0; + + ggml_type wtype = ggml_type::GGML_TYPE_F16; // weight type (FP32 / FP16 / QX) + ggml_type itype = ggml_type::GGML_TYPE_F16; // intermediate type (FP32 or FP16) + + whisper_model model; + whisper_vocab vocab; + whisper_state * state = nullptr; + + std::string path_model; // populated by whisper_init_from_file() +}; + +template +static void read_safe(whisper_model_loader * loader, T & dest) { + loader->read(loader->context, &dest, sizeof(T)); + BYTESWAP_VALUE(dest); +} + +static bool kv_cache_init( + const struct whisper_hparams & hparams, + const size_t mem_bytes, + struct whisper_kv_cache & cache, + ggml_type wtype, + int n_ctx) { + cache.buf.resize(mem_bytes); + + struct ggml_init_params params = { + /*.mem_size =*/ cache.buf.size(), + /*.mem_buffer =*/ cache.buf.data(), + /*.no_alloc =*/ false, + }; + + cache.ctx = ggml_init(params); + + if (!cache.ctx) { + fprintf(stderr, "%s: failed to allocate memory for kv cache\n", __func__); + return false; + } + + const int n_text_state = hparams.n_text_state; + const int n_text_layer = hparams.n_text_layer; + + const int n_mem = n_text_layer*n_ctx; + const int n_elements = n_text_state*n_mem; + + cache.k = ggml_new_tensor_1d(cache.ctx, wtype, n_elements); + cache.v = ggml_new_tensor_1d(cache.ctx, wtype, n_elements); + + return true; +} + +static bool kv_cache_reinit(struct whisper_kv_cache & cache) { + WHISPER_ASSERT(cache.ctx); + + const int n_elements = ggml_nelements(cache.k); + WHISPER_ASSERT(n_elements == ggml_nelements(cache.v)); + + const ggml_type wtype = cache.k->type; + WHISPER_ASSERT(wtype == cache.v->type); + + WHISPER_ASSERT(cache.buf.size() >= 2*n_elements*ggml_type_sizef(wtype)); + + struct ggml_init_params params = { + /*.mem_size =*/ cache.buf.size(), + /*.mem_buffer =*/ cache.buf.data(), + /*.no_alloc =*/ false, + }; + + cache.ctx = ggml_init(params); + + if (!cache.ctx) { + fprintf(stderr, "%s: failed to allocate memory for kv cache\n", __func__); + return false; + } + + cache.k = ggml_new_tensor_1d(cache.ctx, wtype, n_elements); + cache.v = ggml_new_tensor_1d(cache.ctx, wtype, n_elements); + + return true; +} + +static void kv_cache_free(struct whisper_kv_cache & cache) { + if (cache.ctx) { + ggml_free(cache.ctx); + cache.ctx = nullptr; + } +} + +// load the model from a ggml file +// +// file format: +// +// - hparams +// - pre-computed mel filters +// - vocab +// - weights +// +// see the convert-pt-to-ggml.py script for details +// +static bool whisper_model_load(struct whisper_model_loader * loader, whisper_context & wctx) { + fprintf(stderr, "%s: loading model\n", __func__); + + const int64_t t_start_us = ggml_time_us(); + + wctx.t_start_us = t_start_us; + + auto & model = wctx.model; + auto & vocab = wctx.vocab; + + // verify magic + { + uint32_t magic; + read_safe(loader, magic); + if (magic != 0x67676d6c) { + fprintf(stderr, "%s: invalid model data (bad magic)\n", __func__); + return false; + } + } + + //load hparams + { + auto & hparams = model.hparams; + + read_safe(loader, hparams.n_vocab); + read_safe(loader, hparams.n_audio_ctx); + read_safe(loader, hparams.n_audio_state); + read_safe(loader, hparams.n_audio_head); + read_safe(loader, hparams.n_audio_layer); + read_safe(loader, hparams.n_text_ctx); + read_safe(loader, hparams.n_text_state); + read_safe(loader, hparams.n_text_head); + read_safe(loader, hparams.n_text_layer); + read_safe(loader, hparams.n_mels); + read_safe(loader, hparams.ftype); + + assert(hparams.n_text_state == hparams.n_audio_state); + + if (hparams.n_audio_layer == 4) { + model.type = e_model::MODEL_TINY; + } + + if (hparams.n_audio_layer == 6) { + model.type = e_model::MODEL_BASE; + } + + if (hparams.n_audio_layer == 12) { + model.type = e_model::MODEL_SMALL; + } + + if (hparams.n_audio_layer == 24) { + model.type = e_model::MODEL_MEDIUM; + } + + if (hparams.n_audio_layer == 32) { + model.type = e_model::MODEL_LARGE; + } + + const int32_t qntvr = hparams.ftype / GGML_QNT_VERSION_FACTOR; + + hparams.ftype %= GGML_QNT_VERSION_FACTOR; + + // for the big tensors, we have the option to store the data in 16-bit floats or quantized + // in order to save memory and also to speed up the computation + wctx.wtype = ggml_ftype_to_ggml_type((ggml_ftype) (model.hparams.ftype)); + if (wctx.wtype == GGML_TYPE_COUNT) { + fprintf(stderr, "%s: invalid model (bad ftype value %d)\n", __func__, model.hparams.ftype); + return false; + } + + const size_t scale = model.hparams.ftype ? 1 : 2; + + fprintf(stderr, "%s: n_vocab = %d\n", __func__, hparams.n_vocab); + fprintf(stderr, "%s: n_audio_ctx = %d\n", __func__, hparams.n_audio_ctx); + fprintf(stderr, "%s: n_audio_state = %d\n", __func__, hparams.n_audio_state); + fprintf(stderr, "%s: n_audio_head = %d\n", __func__, hparams.n_audio_head); + fprintf(stderr, "%s: n_audio_layer = %d\n", __func__, hparams.n_audio_layer); + fprintf(stderr, "%s: n_text_ctx = %d\n", __func__, hparams.n_text_ctx); + fprintf(stderr, "%s: n_text_state = %d\n", __func__, hparams.n_text_state); + fprintf(stderr, "%s: n_text_head = %d\n", __func__, hparams.n_text_head); + fprintf(stderr, "%s: n_text_layer = %d\n", __func__, hparams.n_text_layer); + fprintf(stderr, "%s: n_mels = %d\n", __func__, hparams.n_mels); + fprintf(stderr, "%s: ftype = %d\n", __func__, model.hparams.ftype); + fprintf(stderr, "%s: qntvr = %d\n", __func__, qntvr); + fprintf(stderr, "%s: type = %d\n", __func__, model.type); + + // print memory requirements + { + // this is the total memory required to run the inference + const size_t mem_required = + MEM_REQ_SCRATCH0.at(model.type) + + MEM_REQ_SCRATCH1.at(model.type) + + MEM_REQ_SCRATCH2.at(model.type) + + MEM_REQ_SCRATCH3.at(model.type) + + scale*MEM_REQ_MODEL.at(wctx.wtype).at(model.type) + + scale*MEM_REQ_KV_CROSS.at(model.type) + + scale*std::max(MEM_REQ_ENCODE.at(model.type), MEM_REQ_DECODE.at(model.type)); + + // this is the memory required by one decoder + const size_t mem_required_decoder = + scale*MEM_REQ_KV_SELF.at(model.type); + + fprintf(stderr, "%s: mem required = %7.2f MB (+ %7.2f MB per decoder)\n", __func__, + mem_required / 1024.0 / 1024.0, mem_required_decoder / 1024.0 / 1024.0); + } + + // initialize all memory buffers + // always have at least one decoder + + wctx.model.buf = new std::vector(); + wctx.model.buf->resize(scale*MEM_REQ_MODEL.at(wctx.wtype).at(model.type)); + + // we skip initialization of the state until it is needed + // because it might be that state will always be provided externally. + } + + // load mel filters + { + auto & filters = wctx.model.filters; + + read_safe(loader, filters.n_mel); + read_safe(loader, filters.n_fft); + + filters.data.resize(filters.n_mel * filters.n_fft); + loader->read(loader->context, filters.data.data(), filters.data.size() * sizeof(float)); + BYTESWAP_FILTERS(filters); + } + + // load vocab + { + int32_t n_vocab = 0; + read_safe(loader, n_vocab); + + //if (n_vocab != model.hparams.n_vocab) { + // fprintf(stderr, "%s: invalid model file '%s' (bad vocab size %d != %d)\n", + // __func__, fname.c_str(), n_vocab, model.hparams.n_vocab); + // return false; + //} + + std::string word; + std::vector tmp; + + tmp.reserve(128); + + for (int i = 0; i < n_vocab; i++) { + uint32_t len; + read_safe(loader, len); + + if (len > 0) { + tmp.resize(len); + loader->read(loader->context, &tmp[0], tmp.size()); // read to buffer + word.assign(&tmp[0], tmp.size()); + } else { + // seems like we have an empty-string token in multi-language models (i = 50256) + //fprintf(stderr, "%s: warning: empty-string token in vocab, i = %d\n", __func__, i); + word = ""; + } + + vocab.token_to_id[word] = i; + vocab.id_to_token[i] = word; + + //printf("%s: vocab[%d] = '%s'\n", __func__, i, word.c_str()); + } + + vocab.n_vocab = model.hparams.n_vocab; + if (vocab.is_multilingual()) { + vocab.token_eot++; + vocab.token_sot++; + vocab.token_prev++; + vocab.token_solm++; + vocab.token_not++; + vocab.token_beg++; + } + + if (n_vocab < model.hparams.n_vocab) { + fprintf(stderr, "%s: adding %d extra tokens\n", __func__, model.hparams.n_vocab - n_vocab); + for (int i = n_vocab; i < model.hparams.n_vocab; i++) { + if (i > vocab.token_beg) { + word = "[_TT_" + std::to_string(i - vocab.token_beg) + "]"; + } else if (i == vocab.token_eot) { + word = "[_EOT_]"; + } else if (i == vocab.token_sot) { + word = "[_SOT_]"; + } else if (i == vocab.token_prev) { + word = "[_PREV_]"; + } else if (i == vocab.token_not) { + word = "[_NOT_]"; + } else if (i == vocab.token_beg) { + word = "[_BEG_]"; + } else { + word = "[_extra_token_" + std::to_string(i) + "]"; + } + vocab.token_to_id[word] = i; + vocab.id_to_token[i] = word; + } + } + } + + size_t ctx_size = 0; + + const ggml_type wtype = wctx.wtype; + const ggml_type vtype = wctx.wtype == GGML_TYPE_F32 ? GGML_TYPE_F32 : GGML_TYPE_F16; // conv type + + { + const auto & hparams = model.hparams; + + const int n_vocab = hparams.n_vocab; + + const int n_audio_ctx = hparams.n_audio_ctx; + const int n_audio_state = hparams.n_audio_state; + const int n_audio_layer = hparams.n_audio_layer; + + const int n_text_ctx = hparams.n_text_ctx; + const int n_text_state = hparams.n_text_state; + const int n_text_layer = hparams.n_text_layer; + + const int n_mels = hparams.n_mels; + + // encoder + { + ctx_size += n_audio_ctx*n_audio_state*ggml_type_sizef(GGML_TYPE_F32); // e_pe; + + ctx_size += 3*n_mels*n_audio_state*ggml_type_sizef(vtype); // e_conv_1_w + ctx_size += n_audio_state*ggml_type_sizef(GGML_TYPE_F32); // e_conv_1_b + + ctx_size += 3*n_audio_state*n_audio_state*ggml_type_sizef(vtype); // e_conv_2_w + ctx_size += n_audio_state*ggml_type_sizef(GGML_TYPE_F32); // e_conv_2_b + + ctx_size += n_audio_state*ggml_type_sizef(GGML_TYPE_F32); // e_ln_w; + ctx_size += n_audio_state*ggml_type_sizef(GGML_TYPE_F32); // e_ln_b; + } + + // decoder + { + ctx_size += n_text_ctx*n_text_state*ggml_type_sizef(GGML_TYPE_F32); // d_pe; + + ctx_size += n_vocab*n_text_state*ggml_type_sizef(wtype); // d_te; + + ctx_size += n_text_state*ggml_type_sizef(GGML_TYPE_F32); // d_ln_w; + ctx_size += n_text_state*ggml_type_sizef(GGML_TYPE_F32); // d_ln_b; + } + + // encoder layers + { + ctx_size += n_audio_layer*(n_audio_state*ggml_type_sizef(GGML_TYPE_F32)); // mlp_ln_w + ctx_size += n_audio_layer*(n_audio_state*ggml_type_sizef(GGML_TYPE_F32)); // mlp_ln_b + + ctx_size += n_audio_layer*(4*n_audio_state*n_audio_state*ggml_type_sizef(wtype)); // mlp_0_w + ctx_size += n_audio_layer*( 4*n_audio_state*ggml_type_sizef(GGML_TYPE_F32)); // mlp_0_b + + ctx_size += n_audio_layer*(4*n_audio_state*n_audio_state*ggml_type_sizef(wtype)); // mlp_1_w + ctx_size += n_audio_layer*( n_audio_state*ggml_type_sizef(GGML_TYPE_F32)); // mlp_1_b + + ctx_size += n_audio_layer*(n_audio_state*ggml_type_sizef(GGML_TYPE_F32)); // attn_ln_0_w + ctx_size += n_audio_layer*(n_audio_state*ggml_type_sizef(GGML_TYPE_F32)); // attn_ln_0_b + + ctx_size += n_audio_layer*(n_audio_state*n_audio_state*ggml_type_sizef(wtype)); // attn_q_w + ctx_size += n_audio_layer*( n_audio_state*ggml_type_sizef(GGML_TYPE_F32)); // attn_q_b + + ctx_size += n_audio_layer*(n_audio_state*n_audio_state*ggml_type_sizef(wtype)); // attn_k_w + + ctx_size += n_audio_layer*(n_audio_state*n_audio_state*ggml_type_sizef(wtype)); // attn_v_w + ctx_size += n_audio_layer*( n_audio_state*ggml_type_sizef(GGML_TYPE_F32)); // attn_v_b + + ctx_size += n_audio_layer*(n_audio_state*n_audio_state*ggml_type_sizef(wtype)); // attn_ln_1_w + ctx_size += n_audio_layer*( n_audio_state*ggml_type_sizef(GGML_TYPE_F32)); // attn_ln_1_b + } + + // decoder layers + { + ctx_size += n_text_layer*(n_text_state*ggml_type_sizef(GGML_TYPE_F32)); // mlp_ln_w + ctx_size += n_text_layer*(n_text_state*ggml_type_sizef(GGML_TYPE_F32)); // mlp_ln_b + + ctx_size += n_text_layer*(4*n_text_state*n_text_state*ggml_type_sizef(wtype)); // mlp_0_w + ctx_size += n_text_layer*( 4*n_text_state*ggml_type_sizef(GGML_TYPE_F32)); // mlp_0_b + + ctx_size += n_text_layer*(4*n_text_state*n_text_state*ggml_type_sizef(wtype)); // mlp_1_w + ctx_size += n_text_layer*( n_text_state*ggml_type_sizef(GGML_TYPE_F32)); // mlp_1_b + + ctx_size += n_text_layer*(n_text_state*ggml_type_sizef(GGML_TYPE_F32)); // attn_ln_0_w + ctx_size += n_text_layer*(n_text_state*ggml_type_sizef(GGML_TYPE_F32)); // attn_ln_0_b + + ctx_size += n_text_layer*(n_text_state*n_text_state*ggml_type_sizef(wtype)); // attn_q_w + ctx_size += n_text_layer*( n_text_state*ggml_type_sizef(GGML_TYPE_F32)); // attn_q_b + + ctx_size += n_text_layer*(n_text_state*n_text_state*ggml_type_sizef(wtype)); // attn_k_w + + ctx_size += n_text_layer*(n_text_state*n_text_state*ggml_type_sizef(wtype)); // attn_v_w + ctx_size += n_text_layer*( n_text_state*ggml_type_sizef(GGML_TYPE_F32)); // attn_v_b + + ctx_size += n_text_layer*(n_text_state*n_text_state*ggml_type_sizef(wtype)); // attn_ln_1_w + ctx_size += n_text_layer*( n_text_state*ggml_type_sizef(GGML_TYPE_F32)); // attn_ln_1_b + // + ctx_size += n_text_layer*(n_text_state*ggml_type_sizef(GGML_TYPE_F32)); // cross_attn_ln_0_w + ctx_size += n_text_layer*(n_text_state*ggml_type_sizef(GGML_TYPE_F32)); // cross_attn_ln_0_b + + ctx_size += n_text_layer*(n_text_state*n_text_state*ggml_type_sizef(wtype)); // cross_attn_q_w + ctx_size += n_text_layer*( n_text_state*ggml_type_sizef(GGML_TYPE_F32)); // cross_attn_q_b + + ctx_size += n_text_layer*(n_text_state*n_text_state*ggml_type_sizef(wtype)); // cross_attn_k_w + + ctx_size += n_text_layer*(n_text_state*n_text_state*ggml_type_sizef(wtype)); // cross_attn_v_w + ctx_size += n_text_layer*( n_text_state*ggml_type_sizef(GGML_TYPE_F32)); // cross_attn_v_b + + ctx_size += n_text_layer*(n_text_state*n_text_state*ggml_type_sizef(wtype)); // cross_attn_ln_1_w + ctx_size += n_text_layer*( n_text_state*ggml_type_sizef(GGML_TYPE_F32)); // cross_attn_ln_1_b + } + + ctx_size += (15 + 15*n_audio_layer + 24*n_text_layer)*512; // object overhead + + fprintf(stderr, "%s: model ctx = %7.2f MB\n", __func__, ctx_size/(1024.0*1024.0)); + } + + // create the ggml context + { + struct ggml_init_params params = { + /*.mem_size =*/ wctx.model.buf->size(), + /*.mem_buffer =*/ wctx.model.buf->data(), + /*.no_alloc =*/ false, + }; + + model.ctx = ggml_init(params); + if (!model.ctx) { + fprintf(stderr, "%s: ggml_init() failed\n", __func__); + return false; + } + } + + // prepare memory for the weights + { + auto & ctx = model.ctx; + + const auto & hparams = model.hparams; + + const int n_vocab = hparams.n_vocab; + + const int n_audio_ctx = hparams.n_audio_ctx; + const int n_audio_state = hparams.n_audio_state; + const int n_audio_layer = hparams.n_audio_layer; + + const int n_text_ctx = hparams.n_text_ctx; + const int n_text_state = hparams.n_text_state; + const int n_text_layer = hparams.n_text_layer; + + const int n_mels = hparams.n_mels; + + model.layers_encoder.resize(n_audio_layer); + model.layers_decoder.resize(n_text_layer); + + // encoder + { + model.e_pe = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, n_audio_state, n_audio_ctx); + + model.e_conv_1_w = ggml_new_tensor_3d(ctx, vtype, 3, n_mels, n_audio_state); + model.e_conv_1_b = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, 1, n_audio_state); + + model.e_conv_2_w = ggml_new_tensor_3d(ctx, vtype, 3, n_audio_state, n_audio_state); + model.e_conv_2_b = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, 1, n_audio_state); + + model.e_ln_w = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_audio_state); + model.e_ln_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_audio_state); + + // map by name + model.tensors["encoder.positional_embedding"] = model.e_pe; + + model.tensors["encoder.conv1.weight"] = model.e_conv_1_w; + model.tensors["encoder.conv1.bias"] = model.e_conv_1_b; + + model.tensors["encoder.conv2.weight"] = model.e_conv_2_w; + model.tensors["encoder.conv2.bias"] = model.e_conv_2_b; + + model.tensors["encoder.ln_post.weight"] = model.e_ln_w; + model.tensors["encoder.ln_post.bias"] = model.e_ln_b; + + for (int i = 0; i < n_audio_layer; ++i) { + auto & layer = model.layers_encoder[i]; + + layer.mlp_ln_w = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_audio_state); + layer.mlp_ln_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_audio_state); + + layer.mlp_0_w = ggml_new_tensor_2d(ctx, wtype, n_audio_state, 4*n_audio_state); + layer.mlp_0_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 4*n_audio_state); + + layer.mlp_1_w = ggml_new_tensor_2d(ctx, wtype, 4*n_audio_state, n_audio_state); + layer.mlp_1_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_audio_state); + + layer.attn_ln_0_w = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_audio_state); + layer.attn_ln_0_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_audio_state); + + layer.attn_q_w = ggml_new_tensor_2d(ctx, wtype, n_audio_state, n_audio_state); + layer.attn_q_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_audio_state); + + layer.attn_k_w = ggml_new_tensor_2d(ctx, wtype, n_audio_state, n_audio_state); + + layer.attn_v_w = ggml_new_tensor_2d(ctx, wtype, n_audio_state, n_audio_state); + layer.attn_v_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_audio_state); + + layer.attn_ln_1_w = ggml_new_tensor_2d(ctx, wtype, n_audio_state, n_audio_state); + layer.attn_ln_1_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_audio_state); + + // map by name + model.tensors["encoder.blocks." + std::to_string(i) + ".mlp_ln.weight"] = layer.mlp_ln_w; + model.tensors["encoder.blocks." + std::to_string(i) + ".mlp_ln.bias"] = layer.mlp_ln_b; + + model.tensors["encoder.blocks." + std::to_string(i) + ".mlp.0.weight"] = layer.mlp_0_w; + model.tensors["encoder.blocks." + std::to_string(i) + ".mlp.0.bias"] = layer.mlp_0_b; + + model.tensors["encoder.blocks." + std::to_string(i) + ".mlp.2.weight"] = layer.mlp_1_w; + model.tensors["encoder.blocks." + std::to_string(i) + ".mlp.2.bias"] = layer.mlp_1_b; + + model.tensors["encoder.blocks." + std::to_string(i) + ".attn_ln.weight"] = layer.attn_ln_0_w; + model.tensors["encoder.blocks." + std::to_string(i) + ".attn_ln.bias"] = layer.attn_ln_0_b; + + model.tensors["encoder.blocks." + std::to_string(i) + ".attn.query.weight"] = layer.attn_q_w; + model.tensors["encoder.blocks." + std::to_string(i) + ".attn.query.bias"] = layer.attn_q_b; + + model.tensors["encoder.blocks." + std::to_string(i) + ".attn.key.weight"] = layer.attn_k_w; + + model.tensors["encoder.blocks." + std::to_string(i) + ".attn.value.weight"] = layer.attn_v_w; + model.tensors["encoder.blocks." + std::to_string(i) + ".attn.value.bias"] = layer.attn_v_b; + + model.tensors["encoder.blocks." + std::to_string(i) + ".attn.out.weight"] = layer.attn_ln_1_w; + model.tensors["encoder.blocks." + std::to_string(i) + ".attn.out.bias"] = layer.attn_ln_1_b; + } + } + + // decoder + { + model.d_pe = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, n_text_state, n_text_ctx); + + model.d_te = ggml_new_tensor_2d(ctx, wtype, n_text_state, n_vocab); + + model.d_ln_w = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_text_state); + model.d_ln_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_text_state); + + // map by name + model.tensors["decoder.positional_embedding"] = model.d_pe; + + model.tensors["decoder.token_embedding.weight"] = model.d_te; + + model.tensors["decoder.ln.weight"] = model.d_ln_w; + model.tensors["decoder.ln.bias"] = model.d_ln_b; + + for (int i = 0; i < n_text_layer; ++i) { + auto & layer = model.layers_decoder[i]; + + layer.mlp_ln_w = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_text_state); + layer.mlp_ln_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_text_state); + + layer.mlp_0_w = ggml_new_tensor_2d(ctx, wtype, n_text_state, 4*n_text_state); + layer.mlp_0_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 4*n_text_state); + + layer.mlp_1_w = ggml_new_tensor_2d(ctx, wtype, 4*n_text_state, n_text_state); + layer.mlp_1_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_text_state); + + layer.attn_ln_0_w = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_text_state); + layer.attn_ln_0_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_text_state); + + layer.attn_q_w = ggml_new_tensor_2d(ctx, wtype, n_text_state, n_text_state); + layer.attn_q_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_text_state); + + layer.attn_k_w = ggml_new_tensor_2d(ctx, wtype, n_text_state, n_text_state); + + layer.attn_v_w = ggml_new_tensor_2d(ctx, wtype, n_text_state, n_text_state); + layer.attn_v_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_text_state); + + layer.attn_ln_1_w = ggml_new_tensor_2d(ctx, wtype, n_text_state, n_text_state); + layer.attn_ln_1_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_text_state); + + layer.cross_attn_ln_0_w = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_text_state); + layer.cross_attn_ln_0_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_text_state); + + layer.cross_attn_q_w = ggml_new_tensor_2d(ctx, wtype, n_text_state, n_text_state); + layer.cross_attn_q_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_text_state); + + layer.cross_attn_k_w = ggml_new_tensor_2d(ctx, wtype, n_text_state, n_text_state); + + layer.cross_attn_v_w = ggml_new_tensor_2d(ctx, wtype, n_text_state, n_text_state); + layer.cross_attn_v_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_text_state); + + layer.cross_attn_ln_1_w = ggml_new_tensor_2d(ctx, wtype, n_text_state, n_text_state); + layer.cross_attn_ln_1_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_text_state); + + // map by name + model.tensors["decoder.blocks." + std::to_string(i) + ".mlp_ln.weight"] = layer.mlp_ln_w; + model.tensors["decoder.blocks." + std::to_string(i) + ".mlp_ln.bias"] = layer.mlp_ln_b; + + model.tensors["decoder.blocks." + std::to_string(i) + ".mlp.0.weight"] = layer.mlp_0_w; + model.tensors["decoder.blocks." + std::to_string(i) + ".mlp.0.bias"] = layer.mlp_0_b; + + model.tensors["decoder.blocks." + std::to_string(i) + ".mlp.2.weight"] = layer.mlp_1_w; + model.tensors["decoder.blocks." + std::to_string(i) + ".mlp.2.bias"] = layer.mlp_1_b; + + model.tensors["decoder.blocks." + std::to_string(i) + ".attn_ln.weight"] = layer.attn_ln_0_w; + model.tensors["decoder.blocks." + std::to_string(i) + ".attn_ln.bias"] = layer.attn_ln_0_b; + + model.tensors["decoder.blocks." + std::to_string(i) + ".attn.query.weight"] = layer.attn_q_w; + model.tensors["decoder.blocks." + std::to_string(i) + ".attn.query.bias"] = layer.attn_q_b; + + model.tensors["decoder.blocks." + std::to_string(i) + ".attn.key.weight"] = layer.attn_k_w; + + model.tensors["decoder.blocks." + std::to_string(i) + ".attn.value.weight"] = layer.attn_v_w; + model.tensors["decoder.blocks." + std::to_string(i) + ".attn.value.bias"] = layer.attn_v_b; + + model.tensors["decoder.blocks." + std::to_string(i) + ".attn.out.weight"] = layer.attn_ln_1_w; + model.tensors["decoder.blocks." + std::to_string(i) + ".attn.out.bias"] = layer.attn_ln_1_b; + + model.tensors["decoder.blocks." + std::to_string(i) + ".cross_attn_ln.weight"] = layer.cross_attn_ln_0_w; + model.tensors["decoder.blocks." + std::to_string(i) + ".cross_attn_ln.bias"] = layer.cross_attn_ln_0_b; + + model.tensors["decoder.blocks." + std::to_string(i) + ".cross_attn.query.weight"] = layer.cross_attn_q_w; + model.tensors["decoder.blocks." + std::to_string(i) + ".cross_attn.query.bias"] = layer.cross_attn_q_b; + + model.tensors["decoder.blocks." + std::to_string(i) + ".cross_attn.key.weight"] = layer.cross_attn_k_w; + + model.tensors["decoder.blocks." + std::to_string(i) + ".cross_attn.value.weight"] = layer.cross_attn_v_w; + model.tensors["decoder.blocks." + std::to_string(i) + ".cross_attn.value.bias"] = layer.cross_attn_v_b; + + model.tensors["decoder.blocks." + std::to_string(i) + ".cross_attn.out.weight"] = layer.cross_attn_ln_1_w; + model.tensors["decoder.blocks." + std::to_string(i) + ".cross_attn.out.bias"] = layer.cross_attn_ln_1_b; + } + } + } + + // load weights + { + size_t total_size = 0; + + model.n_loaded = 0; + + while (true) { + int32_t n_dims; + int32_t length; + int32_t ttype; + + read_safe(loader, n_dims); + read_safe(loader, length); + read_safe(loader, ttype); + + if (loader->eof(loader->context)) { + break; + } + + int32_t nelements = 1; + int32_t ne[4] = { 1, 1, 1, 1 }; + for (int i = 0; i < n_dims; ++i) { + read_safe(loader, ne[i]); + nelements *= ne[i]; + } + + std::string name; + std::vector tmp(length); // create a buffer + loader->read(loader->context, &tmp[0], tmp.size()); // read to buffer + name.assign(&tmp[0], tmp.size()); + + if (model.tensors.find(name) == model.tensors.end()) { + fprintf(stderr, "%s: unknown tensor '%s' in model file\n", __func__, name.data()); + return false; + } + + auto tensor = model.tensors[name.data()]; + if (ggml_nelements(tensor) != nelements) { + fprintf(stderr, "%s: tensor '%s' has wrong size in model file\n", __func__, name.data()); + fprintf(stderr, "%s: shape: [%d, %d, %d], expected: [%d, %d, %d]\n", + __func__, ne[0], ne[1], ne[2], (int) tensor->ne[0], (int) tensor->ne[1], (int) tensor->ne[2]); + return false; + } + + if (tensor->ne[0] != ne[0] || tensor->ne[1] != ne[1] || tensor->ne[2] != ne[2]) { + fprintf(stderr, "%s: tensor '%s' has wrong shape in model file: got [%d, %d, %d], expected [%d, %d, %d]\n", + __func__, name.data(), (int) tensor->ne[0], (int) tensor->ne[1], (int) tensor->ne[2], ne[0], ne[1], ne[2]); + return false; + } + + const size_t bpe = ggml_type_size(ggml_type(ttype)); + + if ((nelements*bpe)/ggml_blck_size(tensor->type) != ggml_nbytes(tensor)) { + fprintf(stderr, "%s: tensor '%s' has wrong size in model file: got %zu, expected %zu\n", + __func__, name.data(), ggml_nbytes(tensor), nelements*bpe); + return false; + } + + loader->read(loader->context, tensor->data, ggml_nbytes(tensor)); + BYTESWAP_TENSOR(tensor); + + //printf("%48s - [%5d, %5d, %5d], type = %6s, %6.2f MB\n", name.data(), ne[0], ne[1], ne[2], ggml_type_name((ggml_type) ttype), ggml_nbytes(tensor)/1024.0/1024.0); + total_size += ggml_nbytes(tensor); + model.n_loaded++; + } + + fprintf(stderr, "%s: model size = %7.2f MB\n", __func__, total_size/1024.0/1024.0); + + if (model.n_loaded == 0) { + fprintf(stderr, "%s: WARN no tensors loaded from model file - assuming empty model for testing\n", __func__); + } else if (model.n_loaded != (int) model.tensors.size()) { + fprintf(stderr, "%s: ERROR not all tensors loaded from model file - expected %zu, got %d\n", __func__, model.tensors.size(), model.n_loaded); + return false; + } + } + + wctx.t_load_us = ggml_time_us() - t_start_us; + + return true; +} + +// evaluate the encoder with the given state +// +// given audio recording (more specifically, its log mel spectrogram), runs forward pass of the encoder +// part of the transformer model and returns the encoded features +// +// - wctx: the model +// - wstate: the state of the encoder +// - n_threads: number of threads to use +// - mel_offset: offset in the mel spectrogram (i.e. audio offset) +// +static bool whisper_encode_internal( + whisper_context & wctx, + whisper_state & wstate, + const int mel_offset, + const int n_threads){ + + const int64_t t_start_us = ggml_time_us(); + + const auto & model = wctx.model; + const auto & mel_inp = wstate.mel; + const auto & hparams = model.hparams; + + const int n_ctx = wstate.exp_n_audio_ctx > 0 ? wstate.exp_n_audio_ctx : hparams.n_audio_ctx; + const int n_state = hparams.n_audio_state; + const int n_head = hparams.n_audio_head; + const int n_layer = hparams.n_audio_layer; + + const int n_mels = hparams.n_mels; + assert(mel_inp.n_mel == n_mels); + + struct ggml_init_params params = { + /*.mem_size =*/ wstate.buf_compute.size(), + /*.mem_buffer =*/ wstate.buf_compute.data(), + /*.no_alloc =*/ false, + }; + + struct ggml_context * ctx0 = ggml_init(params); + + wstate.use_buf(ctx0, 0); + + struct ggml_tensor * mel = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, 2*n_ctx, n_mels); + assert(mel->type == GGML_TYPE_F32); + { + float * dst = (float *) mel->data; + memset(dst, 0, ggml_nbytes(mel)); + + const int i0 = std::min(mel_offset, mel_inp.n_len); + const int i1 = std::min(mel_offset + 2*n_ctx, mel_inp.n_len); + + for (int j = 0; j < mel_inp.n_mel; ++j) { + for (int i = i0; i < i1; ++i) { + dst[j*2*n_ctx + (i - i0)] = mel_inp.data[j*mel_inp.n_len + i]; + } + } + } + + struct ggml_tensor * cur; + +#ifndef WHISPER_USE_COREML + const bool use_coreml = false; +#else + const bool use_coreml = wstate.ctx_coreml != nullptr; +#endif + + if (!use_coreml) { + // convolution + gelu + { + wstate.use_buf(ctx0, 1); + + cur = ggml_conv_1d_1s(ctx0, model.e_conv_1_w, mel); + cur = ggml_add(ctx0, + ggml_repeat(ctx0, + model.e_conv_1_b, + cur), + cur); + + cur = ggml_gelu(ctx0, cur); + + wstate.use_buf(ctx0, 0); + + cur = ggml_conv_1d_2s(ctx0, model.e_conv_2_w, cur); + cur = ggml_add(ctx0, + ggml_repeat(ctx0, + model.e_conv_2_b, + cur), + cur); + + cur = ggml_gelu(ctx0, cur); + } + + wstate.use_buf(ctx0, 3); + + // =================================================================== + // NOTE: experimenting with partial evaluation of the encoder (ignore) + //static int iter = -1; + //const int n_iter = 1500/n_ctx; + + //iter = (iter + 1) % n_iter; + + //if (iter == 0) { + // memset(model.memory_cross_k->data, 0, ggml_nbytes(model.memory_cross_k)); + // memset(model.memory_cross_v->data, 0, ggml_nbytes(model.memory_cross_v)); + //} + + static int iter = 0; + + const size_t e_pe_stride = model.e_pe->ne[0]*ggml_element_size(model.e_pe); + const size_t e_pe_offset = model.e_pe->ne[0]*ggml_element_size(model.e_pe)*n_ctx*iter; + + struct ggml_tensor * e_pe = ggml_view_2d(ctx0, model.e_pe, model.e_pe->ne[0], n_ctx, e_pe_stride, e_pe_offset); + + cur = ggml_add(ctx0, e_pe, ggml_transpose(ctx0, cur)); + + // =================================================================== + + // original: + //cur = ggml_add(ctx0, model.e_pe, ggml_transpose(ctx0, cur)); + + struct ggml_tensor * inpL = cur; + + for (int il = 0; il < n_layer; ++il) { + const auto & layer = model.layers_encoder[il]; + + // norm + { + wstate.use_buf(ctx0, 0); + + cur = ggml_norm(ctx0, inpL); + + // cur = ln_0_w*cur + ln_0_b + cur = ggml_add(ctx0, + ggml_mul(ctx0, + ggml_repeat(ctx0, layer.attn_ln_0_w, cur), + cur), + ggml_repeat(ctx0, layer.attn_ln_0_b, cur)); + } + + // self-attention + { + wstate.use_buf(ctx0, 1); + + struct ggml_tensor * Qcur = ggml_mul_mat(ctx0, + layer.attn_q_w, + cur); + + Qcur = ggml_add(ctx0, + ggml_repeat(ctx0, + layer.attn_q_b, + Qcur), + Qcur); + + //Qcur = ggml_scale_inplace(ctx0, Qcur, ggml_new_f32(ctx0, pow(float(n_state)/n_head, -0.25))); + + // note: no bias for Key + struct ggml_tensor * Kcur = ggml_mul_mat(ctx0, + layer.attn_k_w, + cur); + + //Kcur = ggml_scale_inplace(ctx0, Kcur, ggml_new_f32(ctx0, pow(float(n_state)/n_head, -0.25))); + + struct ggml_tensor * Vcur = ggml_mul_mat(ctx0, + layer.attn_v_w, + cur); + + Vcur = ggml_add(ctx0, + ggml_repeat(ctx0, + layer.attn_v_b, + Vcur), + Vcur); + + // ------ + + wstate.use_buf(ctx0, 0); + +#ifdef WHISPER_USE_FLASH_ATTN + struct ggml_tensor * Q = + ggml_permute(ctx0, + ggml_cpy(ctx0, + Qcur, + ggml_new_tensor_3d(ctx0, wctx.itype, n_state/n_head, n_head, n_ctx)), + 0, 2, 1, 3); + + struct ggml_tensor * K = + ggml_permute(ctx0, + ggml_cpy(ctx0, + Kcur, + ggml_new_tensor_3d(ctx0, wctx.itype, n_state/n_head, n_head, n_ctx)), + 0, 2, 1, 3); + + struct ggml_tensor * V = + ggml_cpy(ctx0, + ggml_permute(ctx0, + ggml_reshape_3d(ctx0, + Vcur, + n_state/n_head, n_head, n_ctx), + 1, 2, 0, 3), + ggml_new_tensor_3d(ctx0, wctx.itype, n_ctx, n_state/n_head, n_head)); + + struct ggml_tensor * KQV = ggml_flash_attn(ctx0, Q, K, V, false); +#else + struct ggml_tensor * Q = + ggml_permute(ctx0, + ggml_cpy(ctx0, + Qcur, + ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_state/n_head, n_head, n_ctx)), + 0, 2, 1, 3); + + struct ggml_tensor * K = + ggml_permute(ctx0, + ggml_cpy(ctx0, + Kcur, + ggml_new_tensor_3d(ctx0, wctx.itype, n_state/n_head, n_head, n_ctx)), + 0, 2, 1, 3); + + // K * Q + struct ggml_tensor * KQ = ggml_mul_mat(ctx0, K, Q); + + struct ggml_tensor * KQ_scaled = + ggml_scale_inplace(ctx0, + KQ, + ggml_new_f32(ctx0, 1.0f/sqrt(float(n_state)/n_head)) + ); + + struct ggml_tensor * KQ_soft_max = ggml_soft_max_inplace(ctx0, KQ_scaled); + + struct ggml_tensor * V = + ggml_cpy(ctx0, + ggml_permute(ctx0, + ggml_reshape_3d(ctx0, + Vcur, + n_state/n_head, n_head, n_ctx), + 1, 2, 0, 3), + ggml_new_tensor_3d(ctx0, wctx.itype, n_ctx, n_state/n_head, n_head) + ); + + struct ggml_tensor * KQV = ggml_mul_mat(ctx0, V, KQ_soft_max); +#endif + struct ggml_tensor * KQV_merged = ggml_permute(ctx0, KQV, 0, 2, 1, 3); + + wstate.use_buf(ctx0, 1); + + cur = ggml_cpy(ctx0, + KQV_merged, + ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_state, n_ctx)); + } + + // projection + { + wstate.use_buf(ctx0, 0); + + cur = ggml_mul_mat(ctx0, + layer.attn_ln_1_w, + cur); + + wstate.use_buf(ctx0, 1); + + cur = ggml_add(ctx0, + ggml_repeat(ctx0, layer.attn_ln_1_b, cur), + cur); + } + + wstate.use_buf(ctx0, 2); + + // add the input + cur = ggml_add(ctx0, cur, inpL); + + struct ggml_tensor * inpFF = cur; + + // feed-forward network + { + // norm + { + wstate.use_buf(ctx0, 0); + + cur = ggml_norm(ctx0, inpFF); + + wstate.use_buf(ctx0, 1); + + // cur = mlp_ln_w*cur + mlp_ln_b + cur = ggml_add(ctx0, + ggml_mul(ctx0, + ggml_repeat(ctx0, layer.mlp_ln_w, cur), + cur), + ggml_repeat(ctx0, layer.mlp_ln_b, cur)); + } + +#ifdef WHISPER_USE_FLASH_FF + wstate.use_buf(ctx0, 0); + + cur = ggml_flash_ff(ctx0, + ggml_cpy(ctx0, cur, ggml_new_tensor_2d(ctx0, wstate.itype, n_state, n_ctx)), + layer.mlp_0_w, layer.mlp_0_b, layer.mlp_1_w, layer.mlp_1_b); +#else + wstate.use_buf(ctx0, 0); + + // fully connected + cur = ggml_mul_mat(ctx0, + layer.mlp_0_w, + cur); + + wstate.use_buf(ctx0, 1); + + cur = ggml_add(ctx0, + ggml_repeat(ctx0, layer.mlp_0_b, cur), + cur); + + wstate.use_buf(ctx0, 0); + + // GELU activation + cur = ggml_gelu(ctx0, cur); + + wstate.use_buf(ctx0, 1); + + // projection + cur = ggml_mul_mat(ctx0, + layer.mlp_1_w, + cur); + + wstate.use_buf(ctx0, 0); + + cur = ggml_add(ctx0, + ggml_repeat(ctx0, layer.mlp_1_b, cur), + cur); +#endif + } + + wstate.use_buf(ctx0, 3); + + inpL = ggml_add(ctx0, cur, inpFF); + } + + cur = inpL; + + // norm + { + wstate.use_buf(ctx0, 0); + + cur = ggml_norm(ctx0, cur); + + wstate.use_buf(ctx0, 1); + + // cur = ln_f_g*cur + ln_f_b + cur = ggml_add(ctx0, + ggml_mul(ctx0, + ggml_repeat(ctx0, model.e_ln_w, cur), + cur), + ggml_repeat(ctx0, model.e_ln_b, cur)); + } + + wstate.use_buf(ctx0, -1); + + // run the computation + { + struct ggml_cgraph gf = {}; + gf.n_threads = n_threads; + + ggml_build_forward_expand(&gf, cur); + ggml_graph_compute(ctx0, &gf); + + //ggml_graph_print(&gf); + } + } +#ifdef WHISPER_USE_COREML + else + { + wstate.use_buf(ctx0, -1); + + cur = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_state, n_ctx); + + whisper_coreml_encode(wstate.ctx_coreml, (float *) mel->data, (float *) cur->data); + } +#endif + + // cur + //{ + // printf("ne0 = %d\n", cur->ne[0]); + // printf("ne1 = %d\n", cur->ne[1]); + // for (int i = 0; i < 10; ++i) { + // printf("%8.4f ", ((float *)(cur->data))[i]); + // } + // printf("... "); + // for (int i = cur->ne[0] - 10; i < cur->ne[0]; ++i) { + // printf("%8.4f ", ((float *)(cur->data))[i]); + // } + // printf("\n"); + //} + + // pre-compute cross-attention memory + { + struct ggml_cgraph gf = {}; + gf.n_threads = n_threads; + + // TODO: hack to disconnect the encoded features from the previous graph + cur->op = GGML_OP_NONE; + cur->src0 = nullptr; + cur->src1 = nullptr; + + for (int il = 0; il < model.hparams.n_text_layer; ++il) { + auto& layer = model.layers_decoder[il]; + + wstate.use_buf(ctx0, 0); + + struct ggml_tensor* Kcross = ggml_mul_mat(ctx0, + layer.cross_attn_k_w, + cur); + + Kcross = ggml_scale_inplace(ctx0, Kcross, ggml_new_f32(ctx0, pow(float(n_state) / n_head, -0.25))); + + wstate.use_buf(ctx0, 1); + + struct ggml_tensor* Vcross = ggml_mul_mat(ctx0, + layer.cross_attn_v_w, + cur); + + Vcross = ggml_add(ctx0, + ggml_repeat(ctx0, + layer.cross_attn_v_b, + Vcross), + Vcross); + + wstate.use_buf(ctx0, -1); + + Vcross = ggml_transpose(ctx0, ggml_reshape_2d(ctx0, Vcross, n_state, n_ctx)); + + struct ggml_tensor * k = ggml_view_1d(ctx0, wstate.kv_cross.k, n_state*n_ctx, (ggml_element_size(wstate.kv_cross.k)*n_state)*(il*n_ctx)); + struct ggml_tensor * v = ggml_view_2d(ctx0, wstate.kv_cross.v, n_ctx, n_state, + ( n_ctx)*ggml_element_size(wstate.kv_cross.v), + (il*n_ctx)*ggml_element_size(wstate.kv_cross.v)*n_state); + + ggml_build_forward_expand(&gf, ggml_cpy(ctx0, Kcross, k)); + ggml_build_forward_expand(&gf, ggml_cpy(ctx0, Vcross, v)); + } + + ggml_graph_compute(ctx0, &gf); + //ggml_graph_print(&gf); + } + + //////////////////////////////////////////////////////////////////////////// + + //printf("%s: used_mem = %f MB, %f MB, %f MB %f MB %f MB\n", __func__, + // ggml_used_mem(ctx0)/1024.0/1024.0, + // wstate.get_buf_max_mem(0)/1024.0/1024.0, + // wstate.get_buf_max_mem(1)/1024.0/1024.0, + // wstate.get_buf_max_mem(2)/1024.0/1024.0, + // wstate.get_buf_max_mem(3)/1024.0/1024.0); + + ggml_free(ctx0); + + wstate.t_encode_us += ggml_time_us() - t_start_us; + wstate.n_encode++; + + return true; +} + +// evaluate the decoder +// +// given text prompt + audio features -> computes the logits for the next token +// +// - model: the model +// - n_threads: number of threads to use +// - tokens: text prompt +// - n_tokens: number of tokens in the prompt +// - n_past: number of past tokens to prefix the prompt with +// +static bool whisper_decode_internal( + whisper_context & wctx, + whisper_state & wstate, + whisper_decoder & decoder, + const whisper_token * tokens, + const int n_tokens, + const int n_past, + const int n_threads) { + const int64_t t_start_us = ggml_time_us(); + + const auto & model = wctx.model; + const auto & hparams = model.hparams; + + auto & kv_self = decoder.kv_self; + + WHISPER_ASSERT(!!kv_self.ctx); + + auto & logits_out = wstate.logits; + + const int n_vocab = hparams.n_vocab; + + const int n_ctx = hparams.n_text_ctx; + const int n_state = hparams.n_text_state; + const int n_head = hparams.n_text_head; + const int n_layer = hparams.n_text_layer; + + const int N = n_tokens; + const int M = wstate.exp_n_audio_ctx > 0 ? wstate.exp_n_audio_ctx : hparams.n_audio_ctx; + + //WHISPER_PRINT_DEBUG("%s: n_past = %d, N = %d, M = %d, n_ctx = %d\n", __func__, n_past, N, M, n_ctx); + + struct ggml_init_params params = { + /*.mem_size =*/ wstate.buf_compute.size(), + /*.mem_buffer =*/ wstate.buf_compute.data(), + /*.no_alloc =*/ false, + }; + + struct ggml_context * ctx0 = ggml_init(params); + + struct ggml_cgraph gf = {}; + gf.n_threads = n_threads; + + struct ggml_tensor * embd = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, N); + memcpy(embd->data, tokens, N*ggml_element_size(embd)); + + struct ggml_tensor * position = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, N); + for (int i = 0; i < N; ++i) { + ((int32_t *) position->data)[i] = n_past + i; + } + + wstate.use_buf(ctx0, 3); + + // token encoding + position encoding + struct ggml_tensor * cur = + ggml_add(ctx0, + ggml_get_rows(ctx0, model.d_te, embd), + ggml_get_rows(ctx0, model.d_pe, position)); + + struct ggml_tensor * inpL = cur; + + for (int il = 0; il < n_layer; ++il) { + const auto & layer = model.layers_decoder[il]; + + // norm + { + wstate.use_buf(ctx0, 0); + + cur = ggml_norm(ctx0, inpL); + + // cur = ln_0_w*cur + ln_0_b + cur = ggml_add(ctx0, + ggml_mul(ctx0, + ggml_repeat(ctx0, layer.attn_ln_0_w, cur), + cur), + ggml_repeat(ctx0, layer.attn_ln_0_b, cur)); + } + + // self-attention + { + struct ggml_tensor * Qcur = ggml_mul_mat(ctx0, + layer.attn_q_w, + cur); + + Qcur = ggml_add(ctx0, + ggml_repeat(ctx0, + layer.attn_q_b, + Qcur), + Qcur); + + Qcur = ggml_scale_inplace(ctx0, Qcur, ggml_new_f32(ctx0, pow(float(n_state)/n_head, -0.25))); + + // note: no bias for Key + struct ggml_tensor * Kcur = ggml_mul_mat(ctx0, + layer.attn_k_w, + cur); + + Kcur = ggml_scale_inplace(ctx0, Kcur, ggml_new_f32(ctx0, pow(float(n_state)/n_head, -0.25))); + + // store key and value to memory + { + struct ggml_tensor * Vcur = ggml_mul_mat(ctx0, + layer.attn_v_w, + cur); + + Vcur = ggml_add(ctx0, + ggml_repeat(ctx0, + layer.attn_v_b, + Vcur), + Vcur); + + Vcur = ggml_transpose(ctx0, ggml_reshape_2d(ctx0, Vcur, n_state, N)); + + struct ggml_tensor * k = ggml_view_1d(ctx0, kv_self.k, N*n_state, (ggml_element_size(kv_self.k)*n_state)*(il*n_ctx + n_past)); + struct ggml_tensor * v = ggml_view_2d(ctx0, kv_self.v, N, n_state, + ( n_ctx)*ggml_element_size(kv_self.v), + (il*n_ctx)*ggml_element_size(kv_self.v)*n_state + n_past*ggml_element_size(kv_self.v)); + + ggml_build_forward_expand(&gf, ggml_cpy(ctx0, Kcur, k)); + ggml_build_forward_expand(&gf, ggml_cpy(ctx0, Vcur, v)); + } + + // ------ + + wstate.use_buf(ctx0, 0); + + struct ggml_tensor * Q = + ggml_permute(ctx0, + ggml_cpy(ctx0, + Qcur, + ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_state/n_head, n_head, N)), + 0, 2, 1, 3); + + struct ggml_tensor * K = + ggml_permute(ctx0, + ggml_reshape_3d(ctx0, + ggml_view_1d(ctx0, kv_self.k, (n_past + N)*n_state, il*n_ctx*ggml_element_size(kv_self.k)*n_state), + n_state/n_head, n_head, n_past + N), + 0, 2, 1, 3); + + wstate.use_buf(ctx0, 1); + + // K * Q + struct ggml_tensor * KQ = ggml_mul_mat(ctx0, K, Q); + + //struct ggml_tensor * KQ_scaled = + // ggml_scale_inplace(ctx0, + // KQ, + // ggml_new_f32(ctx0, 1.0f/sqrt(float(n_state)/n_head)) + // ); + + struct ggml_tensor * KQ_masked = ggml_diag_mask_inf_inplace(ctx0, KQ, n_past); + + struct ggml_tensor * KQ_soft_max = ggml_soft_max_inplace(ctx0, KQ_masked); + + struct ggml_tensor * V = + ggml_view_3d(ctx0, kv_self.v, + n_past + N, n_state/n_head, n_head, + n_ctx*ggml_element_size(kv_self.v), + n_ctx*ggml_element_size(kv_self.v)*n_state/n_head, + il*n_ctx*ggml_element_size(kv_self.v)*n_state); + + struct ggml_tensor * KQV = ggml_mul_mat(ctx0, V, KQ_soft_max); + + struct ggml_tensor * KQV_merged = ggml_permute(ctx0, KQV, 0, 2, 1, 3); + + cur = ggml_cpy(ctx0, + KQV_merged, + ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_state, N)); + } + + // projection + { + wstate.use_buf(ctx0, 0); + + cur = ggml_mul_mat(ctx0, + layer.attn_ln_1_w, + cur); + + wstate.use_buf(ctx0, 1); + + cur = ggml_add(ctx0, + ggml_repeat(ctx0, layer.attn_ln_1_b, cur), + cur); + } + + wstate.use_buf(ctx0, 2); + + // add the input + struct ggml_tensor * inpCA = ggml_add(ctx0, cur, inpL); + + // norm + { + wstate.use_buf(ctx0, 0); + + cur = ggml_norm(ctx0, inpCA); // note: we use inpCA here + + // cur = ln_0_w*cur + ln_0_b + cur = ggml_add(ctx0, + ggml_mul(ctx0, + ggml_repeat(ctx0, layer.cross_attn_ln_0_w, cur), + cur), + ggml_repeat(ctx0, layer.cross_attn_ln_0_b, cur)); + } + + // cross-attention + { + struct ggml_tensor * Qcur = ggml_mul_mat(ctx0, + layer.cross_attn_q_w, + cur); + + Qcur = ggml_add(ctx0, + ggml_repeat(ctx0, + layer.cross_attn_q_b, + Qcur), + Qcur); + + Qcur = ggml_scale_inplace(ctx0, Qcur, ggml_new_f32(ctx0, pow(float(n_state)/n_head, -0.25))); + + // Kcross is already scaled + struct ggml_tensor * Kcross = + ggml_reshape_3d(ctx0, + ggml_view_1d(ctx0, wstate.kv_cross.k, M*n_state, il*M*ggml_element_size(wstate.kv_cross.k)*n_state), + n_state/n_head, n_head, M); + + //struct ggml_tensor * Vcross = + // ggml_reshape_3d(ctx0, + // ggml_view_1d(ctx0, wstate.kv_cross.v, M*n_state, il*M*ggml_element_size(wstate.kv_cross.v)*n_state), + // n_state/n_head, n_head, M); + + //struct ggml_tensor * V_trans = + // ggml_cpy(ctx0, + // ggml_permute(ctx0, Vcross, 1, 2, 0, 3), + // ggml_new_tensor_3d(ctx0, Vcross->type, M, n_state/n_head, n_head)); + + struct ggml_tensor * V = + ggml_view_3d(ctx0, wstate.kv_cross.v, + M, n_state/n_head, n_head, + M*ggml_element_size(wstate.kv_cross.v), + M*ggml_element_size(wstate.kv_cross.v)*n_state/n_head, + il*M*ggml_element_size(wstate.kv_cross.v)*n_state); + + // ------ + + struct ggml_tensor * Q = + ggml_permute(ctx0, + ggml_cpy(ctx0, + Qcur, + ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_state/n_head, n_head, N)), + 0, 2, 1, 3); + + struct ggml_tensor * K = ggml_permute(ctx0, Kcross, 0, 2, 1, 3); + + // K * Q + struct ggml_tensor * KQ = ggml_mul_mat(ctx0, K, Q); + + //struct ggml_tensor * KQ_scaled = + // ggml_scale_inplace(ctx0, + // KQ, + // ggml_new_f32(ctx0, 1.0f/sqrt(float(n_state)/n_head)) + // ); + + // no masking for cross-attention + //struct ggml_tensor * KQ_masked = ggml_diag_mask_inf_inplace(ctx0, KQ_scaled, n_past); + + struct ggml_tensor * KQ_soft_max = ggml_soft_max_inplace(ctx0, KQ); + + struct ggml_tensor * KQV = ggml_mul_mat(ctx0, V, KQ_soft_max); + + struct ggml_tensor * KQV_merged = ggml_permute(ctx0, KQV, 0, 2, 1, 3); + + // cur = KQV_merged.contiguous().view(n_state, N) + cur = ggml_cpy(ctx0, + KQV_merged, + ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_state, N)); + } + + // projection + { + wstate.use_buf(ctx0, 0); + + cur = ggml_mul_mat(ctx0, + layer.cross_attn_ln_1_w, + cur); + + wstate.use_buf(ctx0, 1); + + cur = ggml_add(ctx0, + ggml_repeat(ctx0, layer.cross_attn_ln_1_b, cur), + cur); + } + + wstate.use_buf(ctx0, 2); + + // add the input + cur = ggml_add(ctx0, cur, inpCA); + + struct ggml_tensor * inpFF = cur; + + // feed-forward network + { + // norm + { + wstate.use_buf(ctx0, 0); + + cur = ggml_norm(ctx0, inpFF); + + wstate.use_buf(ctx0, 1); + + // cur = mlp_ln_w*cur + mlp_ln_b + cur = ggml_add(ctx0, + ggml_mul(ctx0, + ggml_repeat(ctx0, layer.mlp_ln_w, cur), + cur), + ggml_repeat(ctx0, layer.mlp_ln_b, cur)); + } + + wstate.use_buf(ctx0, 0); + + // fully connected + cur = ggml_mul_mat(ctx0, + layer.mlp_0_w, + cur); + + wstate.use_buf(ctx0, 1); + + cur = ggml_add(ctx0, + ggml_repeat(ctx0, layer.mlp_0_b, cur), + cur); + + wstate.use_buf(ctx0, 0); + + // GELU activation + cur = ggml_gelu(ctx0, cur); + + wstate.use_buf(ctx0, 1); + + // projection + cur = ggml_mul_mat(ctx0, + layer.mlp_1_w, + cur); + + wstate.use_buf(ctx0, 0); + + cur = ggml_add(ctx0, + ggml_repeat(ctx0, layer.mlp_1_b, cur), + cur); + } + + wstate.use_buf(ctx0, 3); + + inpL = ggml_add(ctx0, cur, inpFF); + } + + cur = inpL; + + // norm + { + wstate.use_buf(ctx0, 0); + + cur = ggml_norm(ctx0, cur); + + wstate.use_buf(ctx0, 1); + + cur = ggml_add(ctx0, + ggml_mul(ctx0, + ggml_repeat(ctx0, model.d_ln_w, cur), + cur), + ggml_repeat(ctx0, model.d_ln_b, cur)); + } + + wstate.use_buf(ctx0, 0); + + // compute logits only for the last token + // comment this line to compute logits for all N tokens + // might be useful in the future + cur = ggml_view_2d(ctx0, cur, cur->ne[0], 1, cur->nb[1], (cur->ne[1] - 1)*cur->nb[1]); + + struct ggml_tensor * logits = ggml_mul_mat(ctx0, model.d_te, cur); + + wstate.use_buf(ctx0, -1); + + // run the computation + { + ggml_build_forward_expand(&gf, logits); + ggml_graph_compute (ctx0, &gf); + } + + // extract logits for all N tokens + //logits_out.resize(N*n_vocab); + //memcpy(logits_out.data(), ggml_get_data(logits), sizeof(float)*N*n_vocab); + + // extract logits only for the last token + logits_out.resize(n_vocab); + memcpy(logits_out.data(), ggml_get_data(logits), sizeof(float)*n_vocab); + + if (N > 1) { + //printf("%s: used_mem = %f MB, %f MB, %f MB %f MB %f MB\n", __func__, + // ggml_used_mem(ctx0)/1024.0/1024.0, + // wstate.get_buf_max_mem(0)/1024.0/1024.0, + // wstate.get_buf_max_mem(1)/1024.0/1024.0, + // wstate.get_buf_max_mem(2)/1024.0/1024.0, + // wstate.get_buf_max_mem(3)/1024.0/1024.0); + } + + ggml_free(ctx0); + + wstate.t_decode_us += ggml_time_us() - t_start_us; + wstate.n_decode++; + + return true; +} + +// 500 -> 00:05.000 +// 6000 -> 01:00.000 +static std::string to_timestamp(int64_t t, bool comma = false) { + int64_t msec = t * 10; + int64_t hr = msec / (1000 * 60 * 60); + msec = msec - hr * (1000 * 60 * 60); + int64_t min = msec / (1000 * 60); + msec = msec - min * (1000 * 60); + int64_t sec = msec / 1000; + msec = msec - sec * 1000; + + char buf[32]; + snprintf(buf, sizeof(buf), "%02d:%02d:%02d%s%03d", (int) hr, (int) min, (int) sec, comma ? "," : ".", (int) msec); + + return std::string(buf); +} + +// naive Discrete Fourier Transform +// input is real-valued +// output is complex-valued +static void dft(const std::vector & in, std::vector & out) { + int N = in.size(); + + out.resize(N*2); + + for (int k = 0; k < N; k++) { + float re = 0; + float im = 0; + + for (int n = 0; n < N; n++) { + float angle = 2*M_PI*k*n/N; + re += in[n]*cos(angle); + im -= in[n]*sin(angle); + } + + out[k*2 + 0] = re; + out[k*2 + 1] = im; + } +} + +// Cooley-Tukey FFT +// poor man's implementation - use something better +// input is real-valued +// output is complex-valued +static void fft(const std::vector & in, std::vector & out) { + out.resize(in.size()*2); + + int N = in.size(); + + if (N == 1) { + out[0] = in[0]; + out[1] = 0; + return; + } + + if (N%2 == 1) { + dft(in, out); + return; + } + + std::vector even; + std::vector odd; + + even.reserve(N/2); + odd.reserve(N/2); + + for (int i = 0; i < N; i++) { + if (i % 2 == 0) { + even.push_back(in[i]); + } else { + odd.push_back(in[i]); + } + } + + std::vector even_fft; + std::vector odd_fft; + + fft(even, even_fft); + fft(odd, odd_fft); + + for (int k = 0; k < N/2; k++) { + float theta = 2*M_PI*k/N; + + float re = cos(theta); + float im = -sin(theta); + + float re_odd = odd_fft[2*k + 0]; + float im_odd = odd_fft[2*k + 1]; + + out[2*k + 0] = even_fft[2*k + 0] + re*re_odd - im*im_odd; + out[2*k + 1] = even_fft[2*k + 1] + re*im_odd + im*re_odd; + + out[2*(k + N/2) + 0] = even_fft[2*k + 0] - re*re_odd + im*im_odd; + out[2*(k + N/2) + 1] = even_fft[2*k + 1] - re*im_odd - im*re_odd; + } +} + +static void log_mel_spectrogram_worker_thread(int ith, const std::vector &hann, const float *samples, + int n_samples, int fft_size, int fft_step, int n_threads, + const whisper_filters &filters, bool speed_up, whisper_mel &mel) { + std::vector fft_in(fft_size, 0.0); + std::vector fft_out(2 * fft_size); + int n_fft = 1 + (speed_up ? fft_size / 4 : fft_size / 2); + + for (int i = ith; i < mel.n_len; i += n_threads) { + const int offset = i * fft_step; + + // apply Hanning window + for (int j = 0; j < fft_size; j++) { + if (offset + j < n_samples) { + fft_in[j] = hann[j] * samples[offset + j]; + } else { + fft_in[j] = 0.0; + } + } + + // FFT -> mag^2 + fft(fft_in, fft_out); + + for (int j = 0; j < fft_size; j++) { + fft_out[j] = (fft_out[2 * j + 0] * fft_out[2 * j + 0] + fft_out[2 * j + 1] * fft_out[2 * j + 1]); + } + for (int j = 1; j < fft_size / 2; j++) { + fft_out[j] += fft_out[fft_size - j]; + } + + if (speed_up) { + // scale down in the frequency domain results in a speed up in the time domain + for (int j = 0; j < n_fft; j++) { + fft_out[j] = 0.5 * (fft_out[2 * j] + fft_out[2 * j + 1]); + } + } + + // mel spectrogram + for (int j = 0; j < mel.n_mel; j++) { + double sum = 0.0; + + // unroll loop (suggested by GH user @lunixbochs) + int k = 0; + for (k = 0; k < n_fft - 3; k += 4) { + sum += + fft_out[k + 0] * filters.data[j*n_fft + k + 0] + + fft_out[k + 1] * filters.data[j*n_fft + k + 1] + + fft_out[k + 2] * filters.data[j*n_fft + k + 2] + + fft_out[k + 3] * filters.data[j*n_fft + k + 3]; + } + + // handle n_fft remainder + for (; k < n_fft; k++) { + sum += fft_out[k] * filters.data[j * n_fft + k]; + } + + sum = log10(std::max(sum, 1e-10)); + + mel.data[j * mel.n_len + i] = sum; + } + } +} + +// ref: https://github.com/openai/whisper/blob/main/whisper/audio.py#L92-L124 +static bool log_mel_spectrogram( + whisper_state & wstate, + const float * samples, + const int n_samples, + const int /*sample_rate*/, + const int fft_size, + const int fft_step, + const int n_mel, + const int n_threads, + const whisper_filters & filters, + const bool speed_up, + whisper_mel & mel) { + const int64_t t_start_us = ggml_time_us(); + + // Hanning window + std::vector hann; + hann.resize(fft_size); + for (int i = 0; i < fft_size; i++) { + hann[i] = 0.5*(1.0 - cos((2.0*M_PI*i)/(fft_size))); + } + + mel.n_mel = n_mel; + mel.n_len = n_samples/fft_step; + mel.n_len_org = mel.n_len; + + std::vector samples_padded; + + // pad audio with at least one extra chunk of zeros + { + const int pad = (100*WHISPER_CHUNK_SIZE)/2; + + if (mel.n_len % pad != 0) { + mel.n_len = (mel.n_len/pad + 1)*pad; + } + mel.n_len += pad; + + samples_padded.resize(mel.n_len*fft_step); + memcpy(samples_padded.data(), samples, n_samples*sizeof(float)); + memset(samples_padded.data() + n_samples, 0, (mel.n_len*fft_step - n_samples)*sizeof(float)); + + samples = samples_padded.data(); + } + + mel.data.resize(mel.n_mel*mel.n_len); + + //printf("%s: n_samples = %d, n_len = %d\n", __func__, n_samples, mel.n_len); + //printf("%s: recording length: %f s\n", __func__, (float) n_samples/sample_rate); + + { + std::vector workers(n_threads - 1); + for (int iw = 0; iw < n_threads - 1; ++iw) { + workers[iw] = std::thread( + log_mel_spectrogram_worker_thread, iw + 1, std::cref(hann), samples, + n_samples, fft_size, fft_step, n_threads, + std::cref(filters), speed_up, std::ref(mel)); + } + + // main thread + log_mel_spectrogram_worker_thread(0, hann, samples, n_samples, fft_size, fft_step, n_threads, filters, speed_up, mel); + + for (int iw = 0; iw < n_threads - 1; ++iw) { + workers[iw].join(); + } + } + + // clamping and normalization + double mmax = -1e20; + for (int i = 0; i < mel.n_mel*mel.n_len; i++) { + if (mel.data[i] > mmax) { + mmax = mel.data[i]; + } + } + //printf("%s: max = %f\n", __func__, mmax); + + mmax -= 8.0; + + for (int i = 0; i < mel.n_mel*mel.n_len; i++) { + if (mel.data[i] < mmax) { + mel.data[i] = mmax; + } + + mel.data[i] = (mel.data[i] + 4.0)/4.0; + } + + wstate.t_mel_us += ggml_time_us() - t_start_us; + + //printf("mel.n_len() = %d, divided by 1500: %f, n_samples / fft_step: %d\n", mel.n_len, mel.n_len / 1500.0, n_samples / fft_step); + + return true; +} + +// split text into tokens +// +// ref: https://github.com/openai/gpt-2/blob/a74da5d99abaaba920de8131d64da2862a8f213b/src/encoder.py#L53 +// +// Regex (Python): +// r"""'s|'t|'re|'ve|'m|'ll|'d| ?\p{L}+| ?\p{N}+| ?[^\s\p{L}\p{N}]+|\s+(?!\S)|\s+""" +// +// Regex (C++): +// R"('s|'t|'re|'ve|'m|'ll|'d| ?[[:alpha:]]+| ?[[:digit:]]+| ?[^\s[:alpha:][:digit:]]+|\s+(?!\S)|\s+)" +// +static std::vector tokenize(const whisper_vocab & vocab, const std::string & text) { + std::vector words; + + // first split the text into words + { + std::string str = text; + std::string pat = R"('s|'t|'re|'ve|'m|'ll|'d| ?[[:alpha:]]+| ?[[:digit:]]+| ?[^\s[:alpha:][:digit:]]+|\s+(?!\S)|\s+)"; + + std::regex re(pat); + std::smatch m; + + while (std::regex_search(str, m, re)) { + for (auto x : m) { + words.push_back(x); + } + str = m.suffix(); + } + } + + // find the longest tokens that form the words: + std::vector tokens; + for (const auto & word : words) { + if (word.empty()) continue; + + int i = 0; + int n = word.size(); + while (i < n) { + int j = n; + bool found = false; + while (j > i) { + auto sub = word.substr(i, j-i); + auto it = vocab.token_to_id.find(sub); + if (it != vocab.token_to_id.end()) { + tokens.push_back(it->second); + i = j; + found = true; + break; + } + --j; + } + if (!found) { + fprintf(stderr, "unknown token \n"); + ++i; + } + } + } + + return tokens; +} + +// +// interface implementation +// + +#ifdef WHISPER_USE_COREML +// replace .bin with -encoder.mlmodelc +static std::string whisper_get_coreml_path_encoder(std::string path_bin) { + auto pos = path_bin.rfind('.'); + if (pos != std::string::npos) { + path_bin = path_bin.substr(0, pos); + } + + // match "-qx_x" + pos = path_bin.rfind('-'); + if (pos != std::string::npos) { + auto sub = path_bin.substr(pos); + if (sub.size() == 5 && sub[1] == 'q' && sub[3] == '_') { + path_bin = path_bin.substr(0, pos); + } + } + + path_bin += "-encoder.mlmodelc"; + + return path_bin; +} +#endif + +struct whisper_state * whisper_init_state(whisper_context * ctx) { + whisper_state * state = new whisper_state; + + const size_t scale = ctx->model.hparams.ftype ? 1 : 2; + + if (!kv_cache_init(ctx->model.hparams, scale * MEM_REQ_KV_SELF.at(ctx->model.type), state->decoders[0].kv_self, ctx->itype, ctx->model.hparams.n_text_ctx)) { + fprintf(stderr, "%s: kv_cache_init() failed for self-attention cache\n", __func__); + delete state; + return nullptr; + } + + { + const size_t memory_size = ggml_nbytes(state->decoders[0].kv_self.k) + ggml_nbytes(state->decoders[0].kv_self.v); + fprintf(stderr, "%s: kv self size = %7.2f MB\n", __func__, memory_size / 1024.0 / 1024.0); + } + + if (!kv_cache_init(ctx->model.hparams, scale * MEM_REQ_KV_CROSS.at(ctx->model.type), state->kv_cross, ctx->itype, ctx->model.hparams.n_audio_ctx)) { + fprintf(stderr, "%s: kv_cache_init() failed for cross-attention cache\n", __func__); + delete state; + return nullptr; + } + + { + const size_t memory_size = ggml_nbytes(state->kv_cross.k) + ggml_nbytes(state->kv_cross.v); + fprintf(stderr, "%s: kv cross size = %7.2f MB\n", __func__, memory_size / 1024.0 / 1024.0); + } + +#ifdef WHISPER_USE_COREML + const auto path_coreml = whisper_get_coreml_path_encoder(ctx->path_model); + + fprintf(stderr, "%s: loading Core ML model from '%s'\n", __func__, path_coreml.c_str()); + fprintf(stderr, "%s: first run on a device may take a while ...\n", __func__); + + state->ctx_coreml = whisper_coreml_init(path_coreml.c_str()); + if (!state->ctx_coreml) { + fprintf(stderr, "%s: failed to load Core ML model from '%s'\n", __func__, path_coreml.c_str()); +#ifndef WHISPER_COREML_ALLOW_FALLBACK + return nullptr; +#endif + } else { + fprintf(stderr, "%s: Core ML model loaded\n", __func__); + } +#endif + + state->logits.reserve(ctx->vocab.n_vocab * ctx->model.hparams.n_text_ctx); + + state->logits_id.reserve(ctx->model.hparams.n_vocab); + + // TAGS: WHISPER_DECODER_INIT + state->decoders[0].sequence.tokens.reserve(ctx->model.hparams.n_text_ctx); + + state->decoders[0].probs.reserve(ctx->vocab.n_vocab); + state->decoders[0].logits.reserve(ctx->vocab.n_vocab); + state->decoders[0].logprobs.reserve(ctx->vocab.n_vocab); + state->buf_compute.resize(scale * std::max(MEM_REQ_ENCODE.at(ctx->model.type), MEM_REQ_DECODE.at(ctx->model.type))); + + state->buf_scratch[0].resize(MEM_REQ_SCRATCH0.at(ctx->model.type)); + state->buf_scratch[1].resize(MEM_REQ_SCRATCH1.at(ctx->model.type)); + state->buf_scratch[2].resize(MEM_REQ_SCRATCH2.at(ctx->model.type)); + state->buf_scratch[3].resize(MEM_REQ_SCRATCH3.at(ctx->model.type)); + + state->rng = std::mt19937(0); + + return state; +} + +struct whisper_context * whisper_init_from_file_no_state(const char * path_model) { + + fprintf(stderr, "%s: loading model from '%s'\n", __func__, path_model); + + auto fin = std::ifstream(path_model, std::ios::binary); + if (!fin) { + fprintf(stderr, "%s: failed to open '%s'\n", __func__, path_model); + return nullptr; + } + + whisper_model_loader loader = {}; + + loader.context = &fin; + + loader.read = [](void * ctx, void * output, size_t read_size) { + std::ifstream * fin = (std::ifstream*)ctx; + fin->read((char *)output, read_size); + return read_size; + }; + + loader.eof = [](void * ctx) { + std::ifstream * fin = (std::ifstream*)ctx; + return fin->eof(); + }; + + loader.close = [](void * ctx) { + std::ifstream * fin = (std::ifstream*)ctx; + fin->close(); + }; + + auto ctx = whisper_init_no_state(&loader); + + if (ctx) { + ctx->path_model = path_model; + } + + return ctx; +} + +struct whisper_context * whisper_init_from_buffer_no_state(void * buffer, size_t buffer_size) { + struct buf_context { + uint8_t* buffer; + size_t size; + size_t current_offset; + }; + + buf_context ctx = { reinterpret_cast(buffer), buffer_size, 0 }; + + fprintf(stderr, "%s: loading model from buffer\n", __func__); + + whisper_model_loader loader = {}; + + loader.context = &ctx; + + loader.read = [](void * ctx, void * output, size_t read_size) { + buf_context * buf = reinterpret_cast(ctx); + + size_t size_to_copy = buf->current_offset + read_size < buf->size ? read_size : buf->size - buf->current_offset; + + memcpy(output, buf->buffer + buf->current_offset, size_to_copy); + buf->current_offset += size_to_copy; + + return size_to_copy; + }; + + loader.eof = [](void * ctx) { + buf_context * buf = reinterpret_cast(ctx); + + return buf->current_offset >= buf->size; + }; + + loader.close = [](void * /*ctx*/) { }; + + return whisper_init_no_state(&loader); +} + +struct whisper_context * whisper_init_no_state(struct whisper_model_loader * loader) { + ggml_time_init(); + + whisper_context * ctx = new whisper_context; + + if (!whisper_model_load(loader, *ctx)) { + loader->close(loader->context); + fprintf(stderr, "%s: failed to load model\n", __func__); + delete ctx; + return nullptr; + } + + loader->close(loader->context); + + return ctx; +} + +struct whisper_context * whisper_init_from_file(const char * path_model) { + whisper_context * ctx = whisper_init_from_file_no_state(path_model); + if (!ctx) { + return nullptr; + } + + ctx->state = whisper_init_state(ctx); + if (!ctx->state) { + whisper_free(ctx); + return nullptr; + } + + return ctx; +} + +struct whisper_context * whisper_init_from_buffer(void * buffer, size_t buffer_size) { + whisper_context * ctx = whisper_init_from_buffer_no_state(buffer, buffer_size); + if (!ctx) { + return nullptr; + } + + ctx->state = whisper_init_state(ctx); + if (!ctx->state) { + whisper_free(ctx); + return nullptr; + } + + return ctx; +} + +struct whisper_context * whisper_init(struct whisper_model_loader * loader) { + whisper_context * ctx = whisper_init_no_state(loader); + if (!ctx) { + return nullptr; + } + + ctx->state = whisper_init_state(ctx); + if (!ctx->state) { + whisper_free(ctx); + return nullptr; + } + + return ctx; +} + +void whisper_free_state(struct whisper_state * state) +{ + if (state) { + kv_cache_free(state->kv_cross); + + for (int i = 0; i < WHISPER_MAX_DECODERS; ++i) { + kv_cache_free(state->decoders[i].kv_self); + } + +#ifdef WHISPER_USE_COREML + if (state->ctx_coreml != nullptr) { + whisper_coreml_free(state->ctx_coreml); + state->ctx_coreml = nullptr; + } +#endif + + delete state; + } +} + +void whisper_free(struct whisper_context * ctx) { + if (ctx) { + if (ctx->model.ctx) { + ggml_free(ctx->model.ctx); + } + if (ctx->model.buf) { + delete ctx->model.buf; + } + + whisper_free_state(ctx->state); + + delete ctx; + } +} + +int whisper_pcm_to_mel_with_state(struct whisper_context * ctx, struct whisper_state * state, const float * samples, int n_samples, int n_threads) { + if (!log_mel_spectrogram(*state, samples, n_samples, WHISPER_SAMPLE_RATE, WHISPER_N_FFT, WHISPER_HOP_LENGTH, WHISPER_N_MEL, n_threads, ctx->model.filters, false, state->mel)) { + fprintf(stderr, "%s: failed to compute mel spectrogram\n", __func__); + return -1; + } + + return 0; +} + +int whisper_pcm_to_mel(struct whisper_context * ctx, const float * samples, int n_samples, int n_threads) { + return whisper_pcm_to_mel_with_state(ctx, ctx->state, samples, n_samples, n_threads); +} + +// same as whisper_pcm_to_mel, but applies a Phase Vocoder to speed up the audio x2 +int whisper_pcm_to_mel_phase_vocoder_with_state(struct whisper_context * ctx, struct whisper_state * state, const float * samples, int n_samples, int n_threads) { + if (!log_mel_spectrogram(*state, samples, n_samples, WHISPER_SAMPLE_RATE, 2 * WHISPER_N_FFT, 2 * WHISPER_HOP_LENGTH, WHISPER_N_MEL, n_threads, ctx->model.filters, true, state->mel)) { + fprintf(stderr, "%s: failed to compute mel spectrogram\n", __func__); + return -1; + } + + return 0; +} + +// same as whisper_pcm_to_mel, but applies a Phase Vocoder to speed up the audio x2 +int whisper_pcm_to_mel_phase_vocoder(struct whisper_context * ctx, const float * samples, int n_samples, int n_threads) { + return whisper_pcm_to_mel_phase_vocoder_with_state(ctx, ctx->state, samples, n_samples, n_threads); +} + +int whisper_set_mel_with_state( + struct whisper_context * /*ctx*/, + struct whisper_state * state, + const float * data, + int n_len, + int n_mel) { + if (n_mel != WHISPER_N_MEL) { + fprintf(stderr, "%s: invalid number of mel bands: %d (expected %d)\n", __func__, n_mel, WHISPER_N_MEL); + return -1; + } + + state->mel.n_len = n_len; + state->mel.n_len_org = n_len; + state->mel.n_mel = n_mel; + + state->mel.data.resize(n_len*n_mel); + memcpy(state->mel.data.data(), data, n_len*n_mel*sizeof(float)); + + return 0; +} + +int whisper_set_mel( + struct whisper_context * ctx, + const float * data, + int n_len, + int n_mel) { + return whisper_set_mel_with_state(ctx, ctx->state, data, n_len, n_mel); +} + +int whisper_encode_with_state(struct whisper_context * ctx, struct whisper_state * state, int offset, int n_threads) { + if (!whisper_encode_internal(*ctx, *state, offset, n_threads)) { + fprintf(stderr, "%s: failed to eval\n", __func__); + return -1; + } + + return 0; +} + +int whisper_encode(struct whisper_context * ctx, int offset, int n_threads) { + if (!whisper_encode_internal(*ctx, *ctx->state, offset, n_threads)) { + fprintf(stderr, "%s: failed to eval\n", __func__); + return -1; + } + + return 0; +} + +int whisper_decode_with_state(struct whisper_context * ctx, struct whisper_state * state, const whisper_token * tokens, int n_tokens, int n_past, int n_threads) { + const int selected_decoder_id = 0; + + if (!whisper_decode_internal(*ctx, *state, state->decoders[selected_decoder_id], tokens, n_tokens, n_past, n_threads)) { + fprintf(stderr, "%s: failed to eval\n", __func__); + return 1; + } + + return 0; +} + +int whisper_decode(struct whisper_context * ctx, const whisper_token * tokens, int n_tokens, int n_past, int n_threads) { + // TODO: add selected_decoder_id to state + const int selected_decoder_id = 0; + + if (ctx->state == nullptr) { + fprintf(stderr, "%s: ERROR state was not loaded.\n", __func__); + return false; + } + + + if (!whisper_decode_internal(*ctx, *ctx->state, ctx->state->decoders[selected_decoder_id], tokens, n_tokens, n_past, n_threads)) { + fprintf(stderr, "%s: failed to eval\n", __func__); + return 1; + } + + return 0; +} + +int whisper_tokenize(struct whisper_context * ctx, const char * text, whisper_token * tokens, int n_max_tokens) { + const auto res = tokenize(ctx->vocab, text); + + if (n_max_tokens < (int) res.size()) { + fprintf(stderr, "%s: too many resulting tokens: %d (max %d)\n", __func__, (int) res.size(), n_max_tokens); + return -1; + } + + for (int i = 0; i < (int) res.size(); i++) { + tokens[i] = res[i]; + } + + return res.size(); +} + +int whisper_lang_max_id() { + auto max_id = 0; + for (const auto & kv : g_lang) { + max_id = std::max(max_id, kv.second.first); + } + + return max_id; +} + +int whisper_lang_id(const char * lang) { + if (!g_lang.count(lang)) { + for (const auto & kv : g_lang) { + if (kv.second.second == lang) { + return kv.second.first; + } + } + + fprintf(stderr, "%s: unknown language '%s'\n", __func__, lang); + return -1; + } + return g_lang.at(lang).first; +} + +const char * whisper_lang_str(int id) { + for (const auto & kv : g_lang) { + if (kv.second.first == id) { + return kv.first.c_str(); + } + } + + fprintf(stderr, "%s: unknown language id %d\n", __func__, id); + return nullptr; +} + +int whisper_lang_auto_detect_with_state( + struct whisper_context * ctx, + struct whisper_state * state, + int offset_ms, + int n_threads, + float * lang_probs) { + const int seek = offset_ms/10; + + if (seek < 0) { + fprintf(stderr, "%s: offset %dms is before the start of the audio\n", __func__, offset_ms); + return -1; + } + + if (seek >= state->mel.n_len_org) { + fprintf(stderr, "%s: offset %dms is past the end of the audio (%dms)\n", __func__, offset_ms, state->mel.n_len_org*10); + return -2; + } + + // run the encoder + if (whisper_encode_with_state(ctx, state, seek, n_threads) != 0) { + fprintf(stderr, "%s: failed to encode\n", __func__); + return -6; + } + + const std::vector prompt = { whisper_token_sot(ctx) }; + + if (whisper_decode_with_state(ctx, state, prompt.data(), prompt.size(), 0, n_threads) != 0) { + fprintf(stderr, "%s: failed to decode\n", __func__); + return -7; + } + + auto & logits_id = state->logits_id; + logits_id.clear(); + + for (const auto & kv : g_lang) { + const auto token_lang = whisper_token_lang(ctx, kv.second.first); + logits_id.emplace_back(state->logits[token_lang], kv.second.first); + } + + // sort descending + { + using pair_type = std::remove_reference::type::value_type; + std::sort(logits_id.begin(), logits_id.end(), [](const pair_type & a, const pair_type & b) { + return a.first > b.first; + }); + } + + // softmax + { + const auto max = logits_id[0].first; + + double sum = 0.0f; + for (auto & kv : logits_id) { + kv.first = exp(kv.first - max); + sum += kv.first; + } + + for (auto & kv : logits_id) { + kv.first /= sum; + } + } + + { + for (const auto & prob : logits_id) { + if (lang_probs) { + lang_probs[prob.second] = prob.first; + } + + //printf("%s: lang %2d (%3s): %f\n", __func__, prob.second, whisper_lang_str(prob.second), prob.first); + } + } + + return logits_id[0].second; +} + +int whisper_lang_auto_detect( + struct whisper_context * ctx, + int offset_ms, + int n_threads, + float * lang_probs) { + return whisper_lang_auto_detect_with_state(ctx, ctx->state, offset_ms, n_threads, lang_probs); +} + +int whisper_model_n_vocab(struct whisper_context * ctx) { + return ctx->model.hparams.n_vocab; +} + +int whisper_model_n_audio_ctx(struct whisper_context * ctx) { + return ctx->model.hparams.n_audio_ctx; +} + +int whisper_model_n_audio_state(struct whisper_context * ctx) { + return ctx->model.hparams.n_audio_state; +} + +int whisper_model_n_audio_head(struct whisper_context * ctx) { + return ctx->model.hparams.n_audio_head; +} + +int whisper_model_n_audio_layer(struct whisper_context * ctx) { + return ctx->model.hparams.n_audio_layer; +} + +int whisper_model_n_text_ctx(struct whisper_context * ctx) { + return ctx->model.hparams.n_text_ctx; +} + +int whisper_model_n_text_state(struct whisper_context * ctx) { + return ctx->model.hparams.n_text_state; +} + +int whisper_model_n_text_head(struct whisper_context * ctx) { + return ctx->model.hparams.n_text_head; +} + +int whisper_model_n_text_layer(struct whisper_context * ctx) { + return ctx->model.hparams.n_text_layer; +} + +int whisper_model_n_mels(struct whisper_context * ctx) { + return ctx->model.hparams.n_mels; +} + +int whisper_model_ftype(struct whisper_context * ctx) { + return ctx->model.hparams.ftype; +} + +int whisper_model_type(struct whisper_context * ctx) { + return ctx->model.type; +} + +const char *whisper_model_type_readable(struct whisper_context * ctx) { + switch (ctx->model.type) { + case e_model::MODEL_TINY: + return "tiny"; + case e_model::MODEL_BASE: + return "base"; + case e_model::MODEL_SMALL: + return "small"; + case e_model::MODEL_MEDIUM: + return "medium"; + case e_model::MODEL_LARGE: + return "large"; + default: + return "unknown"; + } +} + +int whisper_n_len_from_state(struct whisper_state * state) { + return state->mel.n_len_org; +} + +int whisper_n_len(struct whisper_context * ctx) { + return ctx->state->mel.n_len_org; +} + +int whisper_n_vocab(struct whisper_context * ctx) { + return ctx->vocab.n_vocab; +} + +int whisper_n_text_ctx(struct whisper_context * ctx) { + return ctx->model.hparams.n_text_ctx; +} + +int whisper_n_audio_ctx(struct whisper_context * ctx) { + return ctx->model.hparams.n_audio_ctx; +} + +int whisper_is_multilingual(struct whisper_context * ctx) { + return ctx->vocab.is_multilingual() ? 1 : 0; +} + +float * whisper_get_logits(struct whisper_context * ctx) { + return ctx->state->logits.data(); +} + + +float * whisper_get_logits_from_state(struct whisper_state * state) { + return state->logits.data(); +} + +const char * whisper_token_to_str(struct whisper_context * ctx, whisper_token token) { + return ctx->vocab.id_to_token.at(token).c_str(); +} + +whisper_token whisper_token_eot(struct whisper_context * ctx) { + return ctx->vocab.token_eot; +} + +whisper_token whisper_token_sot(struct whisper_context * ctx) { + return ctx->vocab.token_sot; +} + +whisper_token whisper_token_prev(struct whisper_context * ctx) { + return ctx->vocab.token_prev; +} + +whisper_token whisper_token_solm(struct whisper_context * ctx) { + return ctx->vocab.token_solm; +} + +whisper_token whisper_token_not(struct whisper_context * ctx) { + return ctx->vocab.token_not; +} + +whisper_token whisper_token_beg(struct whisper_context * ctx) { + return ctx->vocab.token_beg; +} + +whisper_token whisper_token_lang(struct whisper_context * ctx, int lang_id) { + return whisper_token_sot(ctx) + 1 + lang_id; +} + +whisper_token whisper_token_translate(void) { + return whisper_vocab::token_translate; +} + +whisper_token whisper_token_transcribe(void) { + return whisper_vocab::token_transcribe; +} + +void whisper_print_timings(struct whisper_context * ctx) { + const int64_t t_end_us = ggml_time_us(); + + fprintf(stderr, "\n"); + fprintf(stderr, "%s: load time = %8.2f ms\n", __func__, ctx->t_load_us / 1000.0f); + if (ctx->state != nullptr) { + + const int32_t n_sample = std::max(1, ctx->state->n_sample); + const int32_t n_encode = std::max(1, ctx->state->n_encode); + const int32_t n_decode = std::max(1, ctx->state->n_decode); + + fprintf(stderr, "%s: fallbacks = %3d p / %3d h\n", __func__, ctx->state->n_fail_p, ctx->state->n_fail_h); + fprintf(stderr, "%s: mel time = %8.2f ms\n", __func__, ctx->state->t_mel_us / 1000.0f); + fprintf(stderr, "%s: sample time = %8.2f ms / %5d runs (%8.2f ms per run)\n", __func__, 1e-3f * ctx->state->t_sample_us, n_sample, 1e-3f * ctx->state->t_sample_us / n_sample); + fprintf(stderr, "%s: encode time = %8.2f ms / %5d runs (%8.2f ms per run)\n", __func__, 1e-3f * ctx->state->t_encode_us, n_encode, 1e-3f * ctx->state->t_encode_us / n_encode); + fprintf(stderr, "%s: decode time = %8.2f ms / %5d runs (%8.2f ms per run)\n", __func__, 1e-3f * ctx->state->t_decode_us, n_decode, 1e-3f * ctx->state->t_decode_us / n_decode); + } + fprintf(stderr, "%s: total time = %8.2f ms\n", __func__, (t_end_us - ctx->t_start_us)/1000.0f); +} + +void whisper_reset_timings(struct whisper_context * ctx) { + if (ctx->state != nullptr) { + ctx->state->t_sample_us = 0; + ctx->state->t_encode_us = 0; + ctx->state->t_decode_us = 0; + } +} + +static int whisper_has_coreml(void) { +#ifdef WHISPER_USE_COREML + return 1; +#else + return 0; +#endif +} + +const char * whisper_print_system_info(void) { + static std::string s; + + s = ""; + s += "AVX = " + std::to_string(ggml_cpu_has_avx()) + " | "; + s += "AVX2 = " + std::to_string(ggml_cpu_has_avx2()) + " | "; + s += "AVX512 = " + std::to_string(ggml_cpu_has_avx512()) + " | "; + s += "FMA = " + std::to_string(ggml_cpu_has_fma()) + " | "; + s += "NEON = " + std::to_string(ggml_cpu_has_neon()) + " | "; + s += "ARM_FMA = " + std::to_string(ggml_cpu_has_arm_fma()) + " | "; + s += "F16C = " + std::to_string(ggml_cpu_has_f16c()) + " | "; + s += "FP16_VA = " + std::to_string(ggml_cpu_has_fp16_va()) + " | "; + s += "WASM_SIMD = " + std::to_string(ggml_cpu_has_wasm_simd()) + " | "; + s += "BLAS = " + std::to_string(ggml_cpu_has_blas()) + " | "; + s += "SSE3 = " + std::to_string(ggml_cpu_has_sse3()) + " | "; + s += "VSX = " + std::to_string(ggml_cpu_has_vsx()) + " | "; + s += "COREML = " + std::to_string(whisper_has_coreml()) + " | "; + + return s.c_str(); +} + +//////////////////////////////////////////////////////////////////////////// + +struct whisper_full_params whisper_full_default_params(enum whisper_sampling_strategy strategy) { + struct whisper_full_params result = { + /*.strategy =*/ strategy, + + /*.n_threads =*/ std::min(4, (int32_t) std::thread::hardware_concurrency()), + /*.n_max_text_ctx =*/ 16384, + /*.offset_ms =*/ 0, + /*.duration_ms =*/ 0, + + /*.translate =*/ false, + /*.no_context =*/ true, + /*.single_segment =*/ false, + /*.print_special =*/ false, + /*.print_progress =*/ true, + /*.print_realtime =*/ false, + /*.print_timestamps =*/ true, + + /*.token_timestamps =*/ false, + /*.thold_pt =*/ 0.01f, + /*.thold_ptsum =*/ 0.01f, + /*.max_len =*/ 0, + /*.split_on_word =*/ false, + /*.max_tokens =*/ 0, + + /*.speed_up =*/ false, + /*.audio_ctx =*/ 0, + + /*.initial_prompt =*/ nullptr, + /*.prompt_tokens =*/ nullptr, + /*.prompt_n_tokens =*/ 0, + + /*.language =*/ "en", + /*.detect_language =*/ false, + + /*.suppress_blank =*/ true, + /*.suppress_non_speech_tokens =*/ false, + + /*.temperature =*/ 0.0f, + /*.max_initial_ts =*/ 1.0f, + /*.length_penalty =*/ -1.0f, + + /*.temperature_inc =*/ 0.4f, + /*.entropy_thold =*/ 2.4f, + /*.logprob_thold =*/ -1.0f, + /*.no_speech_thold =*/ 0.6f, + + /*.greedy =*/ { + /*.best_of =*/ -1, + }, + + /*.beam_search =*/ { + /*.beam_size =*/ -1, + + /*.patience =*/ -1.0f, + }, + + /*.new_segment_callback =*/ nullptr, + /*.new_segment_callback_user_data =*/ nullptr, + + /*.progress_callback =*/ nullptr, + /*.progress_callback_user_data =*/ nullptr, + + /*.encoder_begin_callback =*/ nullptr, + /*.encoder_begin_callback_user_data =*/ nullptr, + + /*.logits_filter_callback =*/ nullptr, + /*.logits_filter_callback_user_data =*/ nullptr, + }; + + switch (strategy) { + case WHISPER_SAMPLING_GREEDY: + { + result.greedy = { + /*.best_of =*/ 2, // TODO: increase to 5 when we speed-up batch decoding + }; + } break; + case WHISPER_SAMPLING_BEAM_SEARCH: + { + result.beam_search = { + /*.beam_size =*/ 2, // TODO: increase to 5 when we speed-up batch decoding + + /*.patience =*/ -1.0f, + }; + } break; + } + + return result; +} + +// forward declarations +static std::vector get_signal_energy(const float * signal, int n_samples, int n_samples_per_half_window); +static void whisper_exp_compute_token_level_timestamps( + struct whisper_context & ctx, + struct whisper_state & state, + int i_segment, + float thold_pt, + float thold_ptsum); + +// trim from start (in place) +static inline void ltrim(std::string &s) { + s.erase(s.begin(), std::find_if_not(s.begin(), s.end(), [](unsigned char ch) { + return std::isspace(ch); + })); +} + +// trim from end (in place) +static inline void rtrim(std::string &s) { + s.erase(std::find_if_not(s.rbegin(), s.rend(), [](unsigned char ch) { + return std::isspace(ch); + }).base(), s.end()); +} + +// trim from both ends (in place) +static inline void trim(std::string &s) { + rtrim(s); + ltrim(s); +} + +static inline bool should_split_on_word(const char * txt, bool split_on_word) { + if (!split_on_word) return true; + + return txt[0] == ' '; +} + +// wrap the last segment to max_len characters +// returns the number of new segments +static int whisper_wrap_segment(struct whisper_context & ctx, struct whisper_state & state, int max_len, bool split_on_word) { + auto segment = state.result_all.back(); + + int res = 1; + int acc = 0; + + std::string text; + + for (int i = 0; i < (int) segment.tokens.size(); i++) { + const auto & token = segment.tokens[i]; + if (token.id >= whisper_token_eot(&ctx)) { + continue; + } + + const auto txt = whisper_token_to_str(&ctx, token.id); + const int cur = strlen(txt); + + if (acc + cur > max_len && i > 0 && should_split_on_word(txt, split_on_word)) { + // split here + if (split_on_word) { + trim(text); + } + + state.result_all.back().text = std::move(text); + state.result_all.back().t1 = token.t0; + state.result_all.back().tokens.resize(i); + + state.result_all.push_back({}); + state.result_all.back().t0 = token.t0; + state.result_all.back().t1 = segment.t1; + + // add tokens [i, end] to the new segment + state.result_all.back().tokens.insert( + state.result_all.back().tokens.end(), + segment.tokens.begin() + i, + segment.tokens.end()); + + acc = 0; + text = ""; + + segment = state.result_all.back(); + i = -1; + + res++; + } else { + acc += cur; + text += txt; + } + } + + if (split_on_word) { + trim(text); + } + state.result_all.back().text = std::move(text); + + return res; +} + +static const std::vector non_speech_tokens = { + "\"", "#", "(", ")", "*", "+", "/", ":", ";", "<", "=", ">", "@", "[", "\\", "]", "^", + "_", "`", "{", "|", "}", "~", "「", "」", "『", "』", "<<", ">>", "<<<", ">>>", "--", + "---", "-(", "-[", "('", "(\"", "((", "))", "(((", ")))", "[[", "]]", "{{", "}}", "♪♪", + "♪♪♪","♩", "♪", "♫", "♬", "♭", "♮", "♯" +}; + +// process the logits for the selected decoder +// - applies logit filters +// - computes logprobs and probs +static void whisper_process_logits( + struct whisper_context & ctx, + struct whisper_state & state, + const struct whisper_full_params params, + struct whisper_decoder & decoder, + float temperature) { + const auto & vocab = ctx.vocab; + const auto & tokens_cur = decoder.sequence.tokens; + + const bool is_initial = tokens_cur.size() == 0; + const int n_logits = vocab.id_to_token.size(); + + WHISPER_ASSERT(n_logits == ctx.vocab.n_vocab); + + // extract the logits for the last token + // we will be mutating and therefore we don't want to use the ctx.logits buffer directly + auto & probs = decoder.probs; + auto & logits = decoder.logits; + auto & logprobs = decoder.logprobs; + { + logits.resize(n_logits); + memcpy(logits.data(), state.logits.data() + (state.logits.size() - n_logits), n_logits*sizeof(float)); + + if (temperature > 0.0f) { + for (int i = 0; i < n_logits; i++) { + logits[i] /= temperature; + } + } + + // will be populated a bit later + probs.resize(n_logits); + logprobs.resize(n_logits); + } + + // apply logit filters here + // ref: https://github.com/openai/whisper/blob/0b1ba3d46ebf7fe6f953acfd8cad62a4f851b49f/whisper/decoding.py#L480-L493 + { + // suppress blank + // https://github.com/openai/whisper/blob/0b1ba3d46ebf7fe6f953acfd8cad62a4f851b49f/whisper/decoding.py#L388-L390 + if (params.suppress_blank) { + if (is_initial) { + logits[vocab.token_eot] = -INFINITY; + logits[vocab.token_to_id.at(" ")] = -INFINITY; + } + } + + // suppress <|notimestamps|> token + // ref: https://github.com/openai/whisper/blob/0b1ba3d46ebf7fe6f953acfd8cad62a4f851b49f/whisper/decoding.py#L410-L412 + logits[vocab.token_not] = -INFINITY; + + // suppress sot and solm tokens + logits[vocab.token_sot] = -INFINITY; + logits[vocab.token_solm] = -INFINITY; + + // suppress task tokens + logits[vocab.token_translate] = -INFINITY; + logits[vocab.token_transcribe] = -INFINITY; + + if (params.logits_filter_callback) { + params.logits_filter_callback(&ctx, &state, tokens_cur.data(), tokens_cur.size(), logits.data(), params.logits_filter_callback_user_data); + } + + // suppress non-speech tokens + // ref: https://github.com/openai/whisper/blob/7858aa9c08d98f75575035ecd6481f462d66ca27/whisper/tokenizer.py#L224-L253 + if (params.suppress_non_speech_tokens) { + for (const std::string & token : non_speech_tokens) { + const std::string suppress_tokens[] = {token, " " + token}; + for (const std::string & suppress_token : suppress_tokens) { + if (vocab.token_to_id.find(suppress_token) != vocab.token_to_id.end()) { + logits[vocab.token_to_id.at(suppress_token)] = -INFINITY; + } + } + } + + // allow hyphens "-" and single quotes "'" between words, but not at the beginning of a word + if (vocab.token_to_id.find(" -") != vocab.token_to_id.end()) { + logits[vocab.token_to_id.at(" -")] = -INFINITY; + } + if (vocab.token_to_id.find(" '") != vocab.token_to_id.end()) { + logits[vocab.token_to_id.at(" '")] = -INFINITY; + } + } + + // timestamps have to appear in pairs, except directly before EOT; mask logits accordingly + // https://github.com/openai/whisper/blob/0b1ba3d46ebf7fe6f953acfd8cad62a4f851b49f/whisper/decoding.py#L414-L424 + { + const bool last_was_timestamp = tokens_cur.size() > 0 && tokens_cur.back().id >= vocab.token_beg; + const bool penultimate_was_timestamp = tokens_cur.size() < 2 || tokens_cur[tokens_cur.size() - 2].id >= vocab.token_beg; + + //fprintf(stderr, "last_was_timestamp=%d penultimate_was_timestamp=%d\n", last_was_timestamp, penultimate_was_timestamp); + + if (last_was_timestamp) { + if (penultimate_was_timestamp) { + for (int i = vocab.token_beg; i < n_logits; ++i) { + logits[i] = -INFINITY; + } + } else { + for (int i = 0; i < vocab.token_eot; ++i) { + logits[i] = -INFINITY; + } + } + } + } + + // the initial timestamp cannot be larger than max_initial_ts + // ref: https://github.com/openai/whisper/blob/0b1ba3d46ebf7fe6f953acfd8cad62a4f851b49f/whisper/decoding.py#L426-L429 + if (is_initial && params.max_initial_ts > 0.0f) { + const float precision = float(WHISPER_CHUNK_SIZE)/ctx.model.hparams.n_audio_ctx; + const int tid0 = std::round(params.max_initial_ts/precision); + + for (int i = vocab.token_beg + tid0 + 1; i < n_logits; ++i) { + logits[i] = -INFINITY; + } + } + + // condition timestamp tokens to be increasing + // ref: https://github.com/openai/whisper/pull/831#issuecomment-1385910556 + if (decoder.has_ts) { + const int tid0 = decoder.seek_delta/2; + + for (int i = vocab.token_beg; i < vocab.token_beg + tid0; ++i) { + logits[i] = -INFINITY; + } + } + + // populate the logprobs array (log_softmax) + { + const float logit_max = *std::max_element(logits.begin(), logits.end()); + float logsumexp = 0.0f; + for (int i = 0; i < n_logits; ++i) { + if (logits[i] > -INFINITY) { + logsumexp += expf(logits[i] - logit_max); + } + } + logsumexp = logf(logsumexp) + logit_max; + + for (int i = 0; i < n_logits; ++i) { + if (logits[i] > -INFINITY) { + logprobs[i] = logits[i] - logsumexp; + } else { + logprobs[i] = -INFINITY; + } + } + } + + // if sum of probability over timestamps is above any other token, sample timestamp + // ref: https://github.com/openai/whisper/blob/0b1ba3d46ebf7fe6f953acfd8cad62a4f851b49f/whisper/decoding.py#L431-L437 + { + // logsumexp over timestamps + float timestamp_logprob = -INFINITY; + { + float logsumexp = 0.0f; + const float logprob_max = *std::max_element(logprobs.begin() + vocab.token_beg, logprobs.end()); + for (int i = vocab.token_beg; i < n_logits; ++i) { + if (logprobs[i] > -INFINITY) { + logsumexp += expf(logprobs[i] - logprob_max); + } + } + if (logsumexp > 0.0f) { + timestamp_logprob = logf(logsumexp) + logprob_max; + } + } + + const float max_text_token_logprob = *std::max_element(logprobs.begin(), logprobs.begin() + vocab.token_beg); + + //fprintf(stderr, "timestamp_logprob=%f max_text_token_logprob=%f\n", timestamp_logprob, max_text_token_logprob); + + if (timestamp_logprob > max_text_token_logprob) { + for (int i = 0; i < vocab.token_beg; ++i) { + logits[i] = -INFINITY; + logprobs[i] = -INFINITY; + } + } + } + } + + // compute probs + { + for (int i = 0; i < n_logits; ++i) { + if (logits[i] == -INFINITY) { + probs[i] = 0.0f; + } else { + probs[i] = expf(logprobs[i]); + } + } + } + +#if 0 + // print first 100 logits - token string : logit + for (int i = 0; i < 100; i++) { + const auto token = vocab.id_to_token.at(i); + const auto prob = probs[i]; + const auto logit = logits[i]; + const auto logprob = logprobs[i]; + printf("%s : prob=%9.5f logit=%9.5f logprob=%9.5f\n", token.c_str(), prob, logit, logprob); + } + + // "And", "and", " And", " and" + printf("logits[\"and\"] = %f\n", logits[vocab.token_to_id.at("and")]); + printf("logits[\"And\"] = %f\n", logits[vocab.token_to_id.at("And")]); + printf("logits[\" and\"] = %f\n", logits[vocab.token_to_id.at(" and")]); + printf("logits[\" And\"] = %f\n", logits[vocab.token_to_id.at(" And")]); + printf("logits[\" so\"] = %f\n", logits[vocab.token_to_id.at(" so")]); + + printf("logprobs[\"and\"] = %f\n", logprobs[vocab.token_to_id.at("and")]); + printf("logprobs[\"And\"] = %f\n", logprobs[vocab.token_to_id.at("And")]); + printf("logprobs[\" and\"] = %f\n", logprobs[vocab.token_to_id.at(" and")]); + printf("logprobs[\" And\"] = %f\n", logprobs[vocab.token_to_id.at(" And")]); + printf("logprobs[\" so\"] = %f\n", logprobs[vocab.token_to_id.at(" so")]); + + printf("probs[\"and\"] = %f\n", probs[vocab.token_to_id.at("and")]); + printf("probs[\"And\"] = %f\n", probs[vocab.token_to_id.at("And")]); + printf("probs[\" and\"] = %f\n", probs[vocab.token_to_id.at(" and")]); + printf("probs[\" And\"] = %f\n", probs[vocab.token_to_id.at(" And")]); + printf("probs[\" so\"] = %f\n", probs[vocab.token_to_id.at(" so")]); +#endif +} + +static whisper_token_data whisper_sample_token( + whisper_context & ctx, + whisper_state & state, + const whisper_decoder & decoder, + bool best) { + whisper_token_data result = { + 0, 0, 0.0f, 0.0f, 0.0f, 0.0f, -1, -1, 0.0f, + }; + + const auto & vocab = ctx.vocab; + + const auto & probs = decoder.probs; + const auto & logprobs = decoder.logprobs; + + const int n_logits = vocab.n_vocab; + + { + double sum_ts = 0.0; + double max_ts = 0.0; + + for (int i = vocab.token_beg; i < n_logits; i++) { + if (probs[i] == -INFINITY) { + continue; + } + + sum_ts += probs[i]; + if (max_ts < probs[i]) { + max_ts = probs[i]; + result.tid = i; + } + } + + result.pt = max_ts/(sum_ts + 1e-10); + result.ptsum = sum_ts; + } + + if (best) { + for (int i = 0; i < n_logits; ++i) { + if (result.p < probs[i]) { + result.id = i; + result.p = probs[i]; + result.plog = logprobs[i]; + } + } + } else { + std::discrete_distribution<> dist(probs.begin(), probs.end()); + + result.id = dist(state.rng); + result.p = probs[result.id]; + result.plog = logprobs[result.id]; + } + + if (result.id >= vocab.token_beg) { + result.tid = result.id; + result.pt = result.p; + } + + state.n_sample++; + + return result; +} + +static std::vector whisper_sample_token_topk( + whisper_context & ctx, + whisper_state & state, + const whisper_decoder & decoder, + int k) { + const auto & vocab = ctx.vocab; + + const auto & probs = decoder.probs; + const auto & logits = decoder.logits; + const auto & logprobs = decoder.logprobs; + + const int n_logits = vocab.n_vocab; + + auto & logits_id = state.logits_id; + + logits_id.clear(); + for (int i = 0; i < n_logits; ++i) { + logits_id.push_back({ logits[i], i }); + } + + std::partial_sort( + logits_id.begin(), + logits_id.begin() + k, logits_id.end(), + [](const std::pair & a, const std::pair & b) { + return a.first > b.first; + }); + + std::vector result; + result.reserve(k); + + whisper_token tid = vocab.token_beg; + + float pt = 0.0; + float ptsum = 0.0; + + { + double sum_ts = 0.0; + double max_ts = 0.0; + + for (int i = vocab.token_beg; i < n_logits; i++) { + if (probs[i] == -INFINITY) { + continue; + } + + sum_ts += probs[i]; + if (max_ts < probs[i]) { + max_ts = probs[i]; + tid = i; + } + } + + pt = max_ts/(sum_ts + 1e-10); + ptsum = sum_ts; + } + + for (int i = 0; i < k; ++i) { + const auto id = logits_id[i].second; + + result.push_back({ id, tid, probs[id], logprobs[id], pt, ptsum, -1, -1, 0.0f, }); + + if (result[i].id >= vocab.token_beg) { + result[i].tid = result[i].id; + result[i].pt = result[i].p; + } + } + + state.n_sample++; + + return result; +} + +// ref: https://github.com/openai/whisper/blob/0b1ba3d46ebf7fe6f953acfd8cad62a4f851b49f/whisper/decoding.py#L178-L192 +static void whisper_sequence_score( + const struct whisper_full_params & params, + whisper_sequence & sequence) { + if (sequence.result_len == 0) { + return; + } + + double result = 0.0f; + + for (int i = 0; i < sequence.result_len; ++i) { + result += sequence.tokens[i].plog; + } + + sequence.sum_logprobs = result; + sequence.avg_logprobs = result/sequence.result_len; + + double penalty = sequence.result_len; + + if (params.length_penalty > 0.0f) { + penalty = pow((5.0 + penalty)/6.0, params.length_penalty); + } + + sequence.score = result/penalty; + + // compute the entropy of the sequence of the last 32 tokens + { + const int n = 32; + + int cnt = 0; + double entropy = 0.0f; + + std::map token_counts; + for (int i = std::max(0, sequence.result_len - n); i < sequence.result_len; ++i) { + token_counts[sequence.tokens[i].id]++; + cnt++; + } + + for (const auto & kv : token_counts) { + const auto p = kv.second/(double)cnt; + entropy -= p*log(p); + + //WHISPER_PRINT_DEBUG("entropy: %d %f %f, count %d\n", kv.first, p, log(p), kv.second); + } + + sequence.entropy = entropy; + } +} + +int whisper_full_with_state( + struct whisper_context * ctx, + struct whisper_state * state, + struct whisper_full_params params, + const float * samples, + int n_samples) { + // clear old results + auto & result_all = state->result_all; + + result_all.clear(); + + // compute log mel spectrogram + if (params.speed_up) { + if (whisper_pcm_to_mel_phase_vocoder_with_state(ctx, state, samples, n_samples, params.n_threads) != 0) { + fprintf(stderr, "%s: failed to compute log mel spectrogram\n", __func__); + return -1; + } + } else { + if (whisper_pcm_to_mel_with_state(ctx, state, samples, n_samples, params.n_threads) != 0) { + fprintf(stderr, "%s: failed to compute log mel spectrogram\n", __func__); + return -2; + } + } + + // auto-detect language if not specified + if (params.language == nullptr || strlen(params.language) == 0 || strcmp(params.language, "auto") == 0 || params.detect_language) { + std::vector probs(whisper_lang_max_id() + 1, 0.0f); + + const auto lang_id = whisper_lang_auto_detect_with_state(ctx, state, 0, params.n_threads, probs.data()); + if (lang_id < 0) { + fprintf(stderr, "%s: failed to auto-detect language\n", __func__); + return -3; + } + state->lang_id = lang_id; + params.language = whisper_lang_str(lang_id); + + fprintf(stderr, "%s: auto-detected language: %s (p = %f)\n", __func__, params.language, probs[whisper_lang_id(params.language)]); + if (params.detect_language) { + return 0; + } + } + + if (params.token_timestamps) { + state->t_beg = 0; + state->t_last = 0; + state->tid_last = 0; + state->energy = get_signal_energy(samples, n_samples, 32); + } + + const int seek_start = params.offset_ms/10; + const int seek_end = params.duration_ms == 0 ? whisper_n_len_from_state(state) : seek_start + params.duration_ms/10; + + // if length of spectrogram is less than 1s (100 samples), then return + // basically don't process anything that is less than 1s + // see issue #39: https://github.com/ggerganov/whisper.cpp/issues/39 + if (seek_end < seek_start + (params.speed_up ? 50 : 100)) { + return 0; + } + + // a set of temperatures to use + // [ t0, t0 + delta, t0 + 2*delta, ..., < 1.0f + 1e-6f ] + std::vector temperatures; + if (params.temperature_inc > 0.0f) { + for (float t = params.temperature; t < 1.0f + 1e-6f; t += params.temperature_inc) { + temperatures.push_back(t); + } + } else { + temperatures.push_back(params.temperature); + } + + // initialize the decoders + int n_decoders = 1; + + switch (params.strategy) { + case WHISPER_SAMPLING_GREEDY: + { + n_decoders = params.greedy.best_of; + } break; + case WHISPER_SAMPLING_BEAM_SEARCH: + { + n_decoders = std::max(params.greedy.best_of, params.beam_search.beam_size); + } break; + }; + + n_decoders = std::max(1, n_decoders); + + // TAGS: WHISPER_DECODER_INIT + for (int j = 1; j < n_decoders; j++) { + auto & decoder = state->decoders[j]; + + if (decoder.kv_self.ctx == nullptr) { + decoder.kv_self = state->decoders[0].kv_self; + if (!kv_cache_reinit(decoder.kv_self)) { + fprintf(stderr, "%s: kv_cache_reinit() failed for self-attention, decoder %d\n", __func__, j); + return -4; + } + + WHISPER_PRINT_DEBUG("%s: initialized self-attention kv cache, decoder %d\n", __func__, j); + + decoder.sequence.tokens.reserve(state->decoders[0].sequence.tokens.capacity()); + + decoder.probs.resize (ctx->vocab.n_vocab); + decoder.logits.resize (ctx->vocab.n_vocab); + decoder.logprobs.resize(ctx->vocab.n_vocab); + } + } + + // the accumulated text context so far + auto & prompt_past = state->prompt_past; + if (params.no_context) { + prompt_past.clear(); + } + + // prepare prompt + { + std::vector prompt_tokens; + + // initial prompt + if (!params.prompt_tokens && params.initial_prompt) { + prompt_tokens.resize(1024); + prompt_tokens.resize(whisper_tokenize(ctx, params.initial_prompt, prompt_tokens.data(), prompt_tokens.size())); + params.prompt_tokens = prompt_tokens.data(); + params.prompt_n_tokens = prompt_tokens.size(); + } + + // prepend the prompt tokens to the prompt_past + if (params.prompt_tokens && params.prompt_n_tokens > 0) { + // parse tokens from the pointer + for (int i = 0; i < params.prompt_n_tokens; i++) { + prompt_past.push_back(params.prompt_tokens[i]); + } + std::rotate(prompt_past.begin(), prompt_past.end() - params.prompt_n_tokens, prompt_past.end()); + } + } + + // overwrite audio_ctx, max allowed is hparams.n_audio_ctx + if (params.audio_ctx > whisper_n_audio_ctx(ctx)) { + fprintf(stderr, "%s: audio_ctx is larger than the maximum allowed (%d > %d)\n", __func__, params.audio_ctx, whisper_n_audio_ctx(ctx)); + return -5; + } + state->exp_n_audio_ctx = params.audio_ctx; + + // these tokens determine the task that will be performed + std::vector prompt_init = { whisper_token_sot(ctx) }; + if (whisper_is_multilingual(ctx)) { + const int lang_id = whisper_lang_id(params.language); + state->lang_id = lang_id; + prompt_init.push_back(whisper_token_lang(ctx, lang_id)); + if (params.translate) { + prompt_init.push_back(whisper_token_translate()); + } else { + prompt_init.push_back(whisper_token_transcribe()); + } + } + + int progress_prev = 0; + int progress_step = 5; + + int seek = seek_start; + + std::vector prompt; + prompt.reserve(whisper_n_text_ctx(ctx)); + + // beam-search helpers + struct kv_buf { + std::vector k; + std::vector v; + }; + + std::vector kv_bufs; + + struct beam_candidate { + int decoder_idx; + int seek_delta; + + bool has_ts; + + whisper_sequence sequence; + }; + + std::vector beam_candidates; + + // main loop + while (true) { + const int progress_cur = (100*(seek - seek_start))/(seek_end - seek_start); + while (progress_cur >= progress_prev + progress_step) { + progress_prev += progress_step; + if (params.print_progress) { + fprintf(stderr, "%s: progress = %3d%%\n", __func__, progress_prev); + } + } + if (params.progress_callback) { + params.progress_callback( + ctx, ctx->state, progress_prev, params.progress_callback_user_data); + } + + // of only 1 second left, then stop + if (seek + 100 >= seek_end) { + break; + } + + if (params.encoder_begin_callback) { + if (params.encoder_begin_callback(ctx, state, params.encoder_begin_callback_user_data) == false) { + fprintf(stderr, "%s: encoder_begin_callback returned false - aborting\n", __func__); + break; + } + } + + // encode audio features starting at offset seek + if (!whisper_encode_internal(*ctx, *state, seek, params.n_threads)) { + fprintf(stderr, "%s: failed to encode\n", __func__); + return -6; + } + + // if there is a very short audio segment left to process, we remove any past prompt since it tends + // to confuse the decoder and often make it repeat or hallucinate stuff + if (seek > seek_start && seek + 500 >= seek_end) { + prompt_past.clear(); + } + + int best_decoder_id = 0; + + for (int it = 0; it < (int) temperatures.size(); ++it) { + const float t_cur = temperatures[it]; + + int n_decoders_cur = 1; + + switch (params.strategy) { + case whisper_sampling_strategy::WHISPER_SAMPLING_GREEDY: + { + if (t_cur > 0.0f) { + n_decoders_cur = params.greedy.best_of; + } + } break; + case whisper_sampling_strategy::WHISPER_SAMPLING_BEAM_SEARCH: + { + if (t_cur > 0.0f) { + n_decoders_cur = params.greedy.best_of; + } else { + n_decoders_cur = params.beam_search.beam_size; + } + } break; + }; + + n_decoders_cur = std::max(1, n_decoders_cur); + + WHISPER_PRINT_DEBUG("\n%s: decoding with %d decoders, temperature = %.2f\n", __func__, n_decoders_cur, t_cur); + + // TAGS: WHISPER_DECODER_INIT + for (int j = 0; j < n_decoders_cur; ++j) { + auto & decoder = state->decoders[j]; + + decoder.kv_self.n = 0; + + decoder.sequence.tokens.clear(); + decoder.sequence.result_len = 0; + decoder.sequence.sum_logprobs_all = 0.0; + decoder.sequence.sum_logprobs = -INFINITY; + decoder.sequence.avg_logprobs = -INFINITY; + decoder.sequence.entropy = 0.0; + decoder.sequence.score = -INFINITY; + + decoder.seek_delta = 100*WHISPER_CHUNK_SIZE; + + decoder.failed = false; + decoder.completed = false; + decoder.has_ts = false; + } + + // init prompt and kv cache for the current iteration + // run whisper_decoder() only for decoder 0 and copy the results for the other decoders + { + prompt.clear(); + + // if we have already generated some text, use it as a prompt to condition the next generation + if (!prompt_past.empty() && t_cur < 0.5f && params.n_max_text_ctx > 0) { + int n_take = std::min(std::min(params.n_max_text_ctx, whisper_n_text_ctx(ctx)/2), int(prompt_past.size())); + + prompt = { whisper_token_prev(ctx) }; + prompt.insert(prompt.begin() + 1, prompt_past.end() - n_take, prompt_past.end()); + } + + // init new transcription with sot, language (opt) and task tokens + prompt.insert(prompt.end(), prompt_init.begin(), prompt_init.end()); + + // print the prompt + WHISPER_PRINT_DEBUG("\n\n"); + for (int i = 0; i < (int) prompt.size(); i++) { + WHISPER_PRINT_DEBUG("%s: prompt[%d] = %s\n", __func__, i, ctx->vocab.id_to_token.at(prompt[i]).c_str()); + } + WHISPER_PRINT_DEBUG("\n\n"); + + if (!whisper_decode_internal(*ctx, *state, state->decoders[0], prompt.data(), prompt.size(), 0, params.n_threads)) { + fprintf(stderr, "%s: failed to decode\n", __func__); + return -7; + } + + { + const int64_t t_start_sample_us = ggml_time_us(); + + whisper_process_logits(*ctx, *state, params, state->decoders[0], t_cur); + + state->decoders[0].kv_self.n += prompt.size(); + + for (int j = 1; j < n_decoders_cur; ++j) { + auto & decoder = state->decoders[j]; + + memcpy(decoder.kv_self.k->data, state->decoders[0].kv_self.k->data, ggml_nbytes(decoder.kv_self.k)); + memcpy(decoder.kv_self.v->data, state->decoders[0].kv_self.v->data, ggml_nbytes(decoder.kv_self.v)); + + decoder.kv_self.n += prompt.size(); + + memcpy(decoder.probs.data(), state->decoders[0].probs.data(), decoder.probs.size()*sizeof(decoder.probs[0])); + memcpy(decoder.logits.data(), state->decoders[0].logits.data(), decoder.logits.size()*sizeof(decoder.logits[0])); + memcpy(decoder.logprobs.data(), state->decoders[0].logprobs.data(), decoder.logprobs.size()*sizeof(decoder.logprobs[0])); + } + + state->t_sample_us += ggml_time_us() - t_start_sample_us; + } + } + + for (int i = 0, n_max = whisper_n_text_ctx(ctx)/2 - 4; i < n_max; ++i) { + const int64_t t_start_sample_us = ggml_time_us(); + + // store the KV caches of all decoders when doing beam-search + if (params.strategy == whisper_sampling_strategy::WHISPER_SAMPLING_BEAM_SEARCH) { + kv_bufs.resize(n_decoders_cur); + for (int j = 0; j < n_decoders_cur; ++j) { + auto & decoder = state->decoders[j]; + + if (decoder.completed || decoder.failed) { + continue; + } + + kv_bufs[j].k.resize(ggml_nbytes(decoder.kv_self.k)); + kv_bufs[j].v.resize(ggml_nbytes(decoder.kv_self.v)); + + memcpy(kv_bufs[j].k.data(), decoder.kv_self.k->data, kv_bufs[j].k.size()); + memcpy(kv_bufs[j].v.data(), decoder.kv_self.v->data, kv_bufs[j].v.size()); + } + + beam_candidates.clear(); + } + + // generate new sequence candidates for each decoder + for (int j = 0; j < n_decoders_cur; ++j) { + auto & decoder = state->decoders[j]; + + if (decoder.completed || decoder.failed) { + continue; + } + + switch (params.strategy) { + case whisper_sampling_strategy::WHISPER_SAMPLING_GREEDY: + { + if (t_cur < 1e-6f) { + decoder.sequence.tokens.push_back(whisper_sample_token(*ctx, *state, decoder, true)); + } else { + decoder.sequence.tokens.push_back(whisper_sample_token(*ctx, *state, decoder, false)); + } + + decoder.sequence.sum_logprobs_all += decoder.sequence.tokens.back().plog; + } break; + case whisper_sampling_strategy::WHISPER_SAMPLING_BEAM_SEARCH: + { + const auto tokens_new = whisper_sample_token_topk(*ctx, *state, decoder, params.beam_search.beam_size); + + for (const auto & token : tokens_new) { + beam_candidates.push_back({ j, decoder.seek_delta, decoder.has_ts, decoder.sequence }); + beam_candidates.back().sequence.tokens.push_back(token); + beam_candidates.back().sequence.sum_logprobs_all += token.plog; + + //WHISPER_PRINT_DEBUG("%s: beam candidate: %s (%f, %f)\n", __func__, ctx->vocab.id_to_token.at(token.id).c_str(), token.plog, beam_candidates.back().sequence.sum_logprobs_all); + } + } break; + }; + } + + // for beam-search, choose the top candidates and update the KV caches + if (params.strategy == whisper_sampling_strategy::WHISPER_SAMPLING_BEAM_SEARCH) { + std::sort( + beam_candidates.begin(), + beam_candidates.end(), + [](const beam_candidate & a, const beam_candidate & b) { + return a.sequence.sum_logprobs_all > b.sequence.sum_logprobs_all; + }); + + uint32_t cur_c = 0; + + for (int j = 0; j < n_decoders_cur; ++j) { + auto & decoder = state->decoders[j]; + + if (decoder.completed || decoder.failed) { + continue; + } + + auto & cur = beam_candidates[cur_c++]; + + while (beam_candidates.size() > cur_c && beam_candidates[cur_c].sequence.sum_logprobs_all == cur.sequence.sum_logprobs_all && i > 0) { + ++cur_c; + } + + decoder.sequence = cur.sequence; + decoder.seek_delta = cur.seek_delta; + decoder.has_ts = cur.has_ts; + + memcpy(decoder.kv_self.k->data, kv_bufs[cur.decoder_idx].k.data(), kv_bufs[cur.decoder_idx].k.size()); + memcpy(decoder.kv_self.v->data, kv_bufs[cur.decoder_idx].v.data(), kv_bufs[cur.decoder_idx].v.size()); + + WHISPER_PRINT_DEBUG("%s: beam search: decoder %d: from decoder %d: token = %10s, plog = %8.5f, sum_logprobs = %8.5f\n", + __func__, j, cur.decoder_idx, ctx->vocab.id_to_token.at(decoder.sequence.tokens.back().id).c_str(), decoder.sequence.tokens.back().plog, decoder.sequence.sum_logprobs_all); + } + } + + // update the decoder state + // - check if the sequence is completed + // - check if the sequence is failed + // - update sliding window based on timestamp tokens + for (int j = 0; j < n_decoders_cur; ++j) { + auto & decoder = state->decoders[j]; + + if (decoder.completed || decoder.failed) { + continue; + } + + auto & has_ts = decoder.has_ts; + auto & failed = decoder.failed; + auto & completed = decoder.completed; + auto & seek_delta = decoder.seek_delta; + auto & result_len = decoder.sequence.result_len; + + { + const auto & token = decoder.sequence.tokens.back(); + + // timestamp token - update sliding window + if (token.id > whisper_token_beg(ctx)) { + const int seek_delta_new = 2*(token.id - whisper_token_beg(ctx)); + + // do not allow to go back in time + if (has_ts && seek_delta > seek_delta_new && result_len < i) { + failed = true; // TODO: maybe this is not a failure ? + continue; + } + + seek_delta = seek_delta_new; + result_len = i + 1; + has_ts = true; + } + +#ifdef WHISPER_DEBUG + { + const auto tt = token.pt > 0.10 ? ctx->vocab.id_to_token.at(token.tid) : "[?]"; + WHISPER_PRINT_DEBUG("%s: id = %3d, decoder = %d, token = %6d, p = %6.3f, ts = %10s, %6.3f, result_len = %4d '%s'\n", + __func__, i, j, token.id, token.p, tt.c_str(), token.pt, result_len, ctx->vocab.id_to_token.at(token.id).c_str()); + } +#endif + + // end of segment + if (token.id == whisper_token_eot(ctx) || // end of text token + (params.max_tokens > 0 && i >= params.max_tokens) || // max tokens per segment reached + (has_ts && seek + seek_delta + 100 >= seek_end) // end of audio reached + ) { + if (result_len == 0) { + if (seek + seek_delta + 100 >= seek_end) { + result_len = i + 1; + } else { + failed = true; + continue; + } + } + + if (params.single_segment) { + result_len = i + 1; + seek_delta = 100*WHISPER_CHUNK_SIZE; + } + + completed = true; + continue; + } + + // TESTS: if no tensors are loaded, it means we are running tests + if (ctx->model.n_loaded == 0) { + seek_delta = 100*WHISPER_CHUNK_SIZE; + completed = true; + continue; + } + } + + // sometimes, the decoding can get stuck in a repetition loop + // this is an attempt to mitigate such cases - we flag the decoding as failed and use a fallback strategy + if (i == n_max - 1 && (result_len == 0 || seek_delta < 100*WHISPER_CHUNK_SIZE/2)) { + failed = true; + continue; + } + } + + // check if all decoders have finished (i.e. completed or failed) + { + bool completed_all = true; + + for (int j = 0; j < n_decoders_cur; ++j) { + auto & decoder = state->decoders[j]; + + if (decoder.completed || decoder.failed) { + continue; + } + + completed_all = false; + } + + if (completed_all) { + break; + } + } + + state->t_sample_us += ggml_time_us() - t_start_sample_us; + + // obtain logits for the next token + for (int j = 0; j < n_decoders_cur; ++j) { + auto & decoder = state->decoders[j]; + + if (decoder.failed || decoder.completed) { + continue; + } + + decoder.tokens_tmp.resize(1); + decoder.tokens_tmp[0] = decoder.sequence.tokens.back().id; + + //WHISPER_PRINT_DEBUG("%s: decoder %d: token %d, kv_self.n %d, seek_delta %d\n", __func__, j, decoder.tokens_tmp[0], decoder.kv_self.n, decoder.seek_delta); + + if (!whisper_decode_internal(*ctx, *state, decoder, decoder.tokens_tmp.data(), decoder.tokens_tmp.size(), decoder.kv_self.n, params.n_threads)) { + fprintf(stderr, "%s: failed to decode\n", __func__); + return -8; + } + + { + const int64_t t_start_sample_us = ggml_time_us(); + + whisper_process_logits(*ctx, *state, params, decoder, t_cur); + + ++decoder.kv_self.n; + + state->t_sample_us += ggml_time_us() - t_start_sample_us; + } + } + } + + // rank the resulting sequences and select the best one + { + double best_score = -INFINITY; + + for (int j = 0; j < n_decoders_cur; ++j) { + auto & decoder = state->decoders[j]; + + if (decoder.failed) { + continue; + } + + decoder.sequence.tokens.resize(decoder.sequence.result_len); + whisper_sequence_score(params, decoder.sequence); + + WHISPER_PRINT_DEBUG("%s: decoder %2d: score = %8.5f, result_len = %3d, avg_logprobs = %8.5f, entropy = %8.5f\n", + __func__, j, decoder.sequence.score, decoder.sequence.result_len, decoder.sequence.avg_logprobs, decoder.sequence.entropy); + + if (decoder.sequence.result_len > 32 && decoder.sequence.entropy < params.entropy_thold) { + WHISPER_PRINT_DEBUG("%s: decoder %2d: failed due to entropy %8.5f < %8.5f\n", + __func__, j, decoder.sequence.entropy, params.entropy_thold); + + decoder.failed = true; + state->n_fail_h++; + + continue; + } + + if (best_score < decoder.sequence.score) { + best_score = decoder.sequence.score; + best_decoder_id = j; + } + } + + WHISPER_PRINT_DEBUG("%s: best decoder = %d\n", __func__, best_decoder_id); + } + + // was the decoding successful for the current temperature? + // do fallback only if: + // - we are not at the last temperature + // - we are not at the end of the audio (3 sec) + if (it != (int) temperatures.size() - 1 && + seek_end - seek > 10*WHISPER_CHUNK_SIZE) { + bool success = true; + + const auto & decoder = state->decoders[best_decoder_id]; + + if (decoder.failed || decoder.sequence.avg_logprobs < params.logprob_thold) { + success = false; + state->n_fail_p++; + } + + if (success) { + //for (auto & token : ctx->decoders[best_decoder_id].sequence.tokens) { + // WHISPER_PRINT_DEBUG("%s: token = %d, p = %6.3f, pt = %6.3f, ts = %s, str = %s\n", __func__, token.id, token.p, token.pt, ctx->vocab.id_to_token.at(token.tid).c_str(), ctx->vocab.id_to_token.at(token.id).c_str()); + //} + + break; + } + } + + WHISPER_PRINT_DEBUG("\n%s: failed to decode with temperature = %.2f\n", __func__, t_cur); + } + + // output results through a user-provided callback + { + const auto & best_decoder = state->decoders[best_decoder_id]; + + const auto seek_delta = best_decoder.seek_delta; + const auto result_len = best_decoder.sequence.result_len; + + const auto & tokens_cur = best_decoder.sequence.tokens; + + //WHISPER_PRINT_DEBUG("prompt_init.size() = %d, prompt.size() = %d, result_len = %d, seek_delta = %d\n", prompt_init.size(), prompt.size(), result_len, seek_delta); + + // update prompt_past + prompt_past.clear(); + if (prompt.front() == whisper_token_prev(ctx)) { + prompt_past.insert(prompt_past.end(), prompt.begin() + 1, prompt.end() - prompt_init.size()); + } + + for (int i = 0; i < result_len; ++i) { + prompt_past.push_back(tokens_cur[i].id); + } + + // store the text from this iteration + if (!tokens_cur.empty() && ctx->model.n_loaded > 0) { + int i0 = 0; + auto t0 = seek + 2*(tokens_cur.front().tid - whisper_token_beg(ctx)); + + std::string text; + + for (int i = 0; i < (int) tokens_cur.size(); i++) { + //printf("%s: %18s %6.3f %18s %6.3f\n", __func__, + // ctx->vocab.id_to_token[tokens_cur[i].id].c_str(), tokens_cur[i].p, + // ctx->vocab.id_to_token[tokens_cur[i].tid].c_str(), tokens_cur[i].pt); + + if (params.print_special == false && tokens_cur[i].id >= whisper_token_eot(ctx)) { + } else { + text += whisper_token_to_str(ctx, tokens_cur[i].id); + } + + if (tokens_cur[i].id > whisper_token_beg(ctx) && !params.single_segment) { + const auto t1 = seek + 2*(tokens_cur[i].tid - whisper_token_beg(ctx)); + + if (!text.empty()) { + const auto tt0 = params.speed_up ? 2*t0 : t0; + const auto tt1 = params.speed_up ? 2*t1 : t1; + + if (params.print_realtime) { + if (params.print_timestamps) { + printf("[%s --> %s] %s\n", to_timestamp(tt0).c_str(), to_timestamp(tt1).c_str(), text.c_str()); + } else { + printf("%s", text.c_str()); + fflush(stdout); + } + } + + //printf("tt0 = %d, tt1 = %d, text = %s, token = %s, token_id = %d, tid = %d\n", tt0, tt1, text.c_str(), ctx->vocab.id_to_token[tokens_cur[i].id].c_str(), tokens_cur[i].id, tokens_cur[i].tid); + + result_all.push_back({ tt0, tt1, text, {} }); + for (int j = i0; j <= i; j++) { + result_all.back().tokens.push_back(tokens_cur[j]); + } + + int n_new = 1; + + if (params.token_timestamps) { + whisper_exp_compute_token_level_timestamps( + *ctx, *state, result_all.size() - 1, params.thold_pt, params.thold_ptsum); + + if (params.max_len > 0) { + n_new = whisper_wrap_segment(*ctx, *state, params.max_len, params.split_on_word); + } + } + if (params.new_segment_callback) { + params.new_segment_callback(ctx, state, n_new, params.new_segment_callback_user_data); + } + } + text = ""; + while (i < (int) tokens_cur.size() && tokens_cur[i].id > whisper_token_beg(ctx)) { + i++; + } + i--; + t0 = t1; + i0 = i + 1; + } + } + + if (!text.empty()) { + const auto t1 = seek + seek_delta; + + const auto tt0 = params.speed_up ? 2*t0 : t0; + const auto tt1 = params.speed_up ? 2*t1 : t1; + + if (params.print_realtime) { + if (params.print_timestamps) { + printf("[%s --> %s] %s\n", to_timestamp(tt0).c_str(), to_timestamp(tt1).c_str(), text.c_str()); + } else { + printf("%s", text.c_str()); + fflush(stdout); + } + } + + result_all.push_back({ tt0, tt1, text, {} }); + for (int j = i0; j < (int) tokens_cur.size(); j++) { + result_all.back().tokens.push_back(tokens_cur[j]); + } + + int n_new = 1; + + if (params.token_timestamps) { + whisper_exp_compute_token_level_timestamps( + *ctx, *state, result_all.size() - 1, params.thold_pt, params.thold_ptsum); + + if (params.max_len > 0) { + n_new = whisper_wrap_segment(*ctx, *state, params.max_len, params.split_on_word); + } + } + if (params.new_segment_callback) { + params.new_segment_callback(ctx, state, n_new, params.new_segment_callback_user_data); + } + } + } + + // update audio window + seek += seek_delta; + + WHISPER_PRINT_DEBUG("seek = %d, seek_delta = %d\n", seek, seek_delta); + } + } + + return 0; +} + + +int whisper_full( + struct whisper_context * ctx, + struct whisper_full_params params, + const float * samples, + int n_samples) { + return whisper_full_with_state(ctx, ctx->state, params, samples, n_samples); +} + +int whisper_full_parallel( + struct whisper_context * ctx, + struct whisper_full_params params, + const float * samples, + int n_samples, + int n_processors) { + if (n_processors == 1) { + return whisper_full(ctx, params, samples, n_samples); + } + int ret = 0; + + // prepare separate states for each thread + std::vector states; + + const int offset_samples = (WHISPER_SAMPLE_RATE*params.offset_ms)/1000; + const int n_samples_per_processor = (n_samples - offset_samples)/n_processors; + + // the calling thread will process the first chunk + // while the other threads will process the remaining chunks + + std::vector workers(n_processors - 1); + for (int i = 0; i < n_processors - 1; ++i) { + // create a new state for each thread + states.push_back(whisper_init_state(ctx)); + + const int start_samples = offset_samples + (i + 1)*n_samples_per_processor; + const int n_samples_cur = (i == n_processors - 2) ? n_samples - start_samples : n_samples_per_processor; + + auto params_cur = params; + + params_cur.offset_ms = 0; + params_cur.print_progress = false; + params_cur.print_realtime = false; + + params_cur.new_segment_callback = nullptr; + params_cur.new_segment_callback_user_data = nullptr; + + params_cur.progress_callback = nullptr; + params_cur.progress_callback_user_data = nullptr; + + workers[i] = std::thread(whisper_full_with_state, ctx, states[i], std::move(params_cur), samples + start_samples, n_samples_cur); + } + + { + auto params_cur = params; + + // We need to disable the print real-time for this one as well, otherwise it will show only for the first chunk. + params_cur.print_realtime = false; + + // Run the first transformation using default state but only for the first chunk. + ret = whisper_full_with_state(ctx, ctx->state, std::move(params_cur), samples, offset_samples + n_samples_per_processor); + } + + for (int i = 0; i < n_processors - 1; ++i) { + workers[i].join(); + } + + const int64_t offset_t = (int64_t) params.offset_ms/10.0; + + // combine results into result_state->result_all from all other states + for (int i = 0; i < n_processors - 1; ++i) { + auto& results_i = states[i]->result_all; + + for (auto& result : results_i) { + // correct the segment timestamp taking into account the offset + result.t0 += 100 * ((i + 1) * n_samples_per_processor) / WHISPER_SAMPLE_RATE + offset_t; + result.t1 += 100 * ((i + 1) * n_samples_per_processor) / WHISPER_SAMPLE_RATE + offset_t; + + + // make sure that segments are not overlapping + if (!ctx->state->result_all.empty()) { + result.t0 = std::max(result.t0, ctx->state->result_all.back().t1); + } + + ctx->state->result_all.push_back(std::move(result)); + + // call the new_segment_callback for each segment + if (params.new_segment_callback) { + params.new_segment_callback(ctx, ctx->state, 1, params.new_segment_callback_user_data); + } + } + + ctx->state->t_mel_us += states[i]->t_mel_us; + + ctx->state->t_sample_us += states[i]->t_sample_us; + ctx->state->t_encode_us += states[i]->t_encode_us; + ctx->state->t_decode_us += states[i]->t_decode_us; + + whisper_free_state(states[i]); + } + + // average the timings + ctx->state->t_mel_us /= n_processors; + ctx->state->t_sample_us /= n_processors; + ctx->state->t_encode_us /= n_processors; + ctx->state->t_decode_us /= n_processors; + + // print information about the audio boundaries + fprintf(stderr, "\n"); + fprintf(stderr, "%s: the audio has been split into %d chunks at the following times:\n", __func__, n_processors); + for (int i = 0; i < n_processors - 1; ++i) { + fprintf(stderr, "%s: split %d - %s\n", __func__, (i + 1), to_timestamp(100*((i + 1)*n_samples_per_processor)/WHISPER_SAMPLE_RATE + offset_t).c_str()); + } + fprintf(stderr, "%s: the transcription quality may be degraded near these boundaries\n", __func__); + + return ret; +} + +int whisper_full_n_segments_from_state(struct whisper_state * state) { + return state->result_all.size(); +} + +int whisper_full_n_segments(struct whisper_context * ctx) { + return ctx->state->result_all.size(); +} + +int whisper_full_lang_id_from_state(struct whisper_state * state) { + return state->lang_id; +} + +int whisper_full_lang_id(struct whisper_context * ctx) { + return ctx->state->lang_id; +} + +int64_t whisper_full_get_segment_t0_from_state(struct whisper_state * state, int i_segment) { + return state->result_all[i_segment].t0; +} + +int64_t whisper_full_get_segment_t0(struct whisper_context * ctx, int i_segment) { + return ctx->state->result_all[i_segment].t0; +} + +int64_t whisper_full_get_segment_t1_from_state(struct whisper_state * state, int i_segment) { + return state->result_all[i_segment].t1; +} + +int64_t whisper_full_get_segment_t1(struct whisper_context * ctx, int i_segment) { + return ctx->state->result_all[i_segment].t1; +} + +const char * whisper_full_get_segment_text_from_state(struct whisper_state * state, int i_segment) { + return state->result_all[i_segment].text.c_str(); +} + +const char * whisper_full_get_segment_text(struct whisper_context * ctx, int i_segment) { + return ctx->state->result_all[i_segment].text.c_str(); +} + +int whisper_full_n_tokens_from_state(struct whisper_state * state, int i_segment) { + return state->result_all[i_segment].tokens.size(); +} + +int whisper_full_n_tokens(struct whisper_context * ctx, int i_segment) { + return ctx->state->result_all[i_segment].tokens.size(); +} + +const char * whisper_full_get_token_text_from_state(struct whisper_context * ctx, struct whisper_state * state, int i_segment, int i_token) { + return ctx->vocab.id_to_token[state->result_all[i_segment].tokens[i_token].id].c_str(); +} + +const char* whisper_full_get_token_text(struct whisper_context * ctx, int i_segment, int i_token) { + return ctx->vocab.id_to_token[ctx->state->result_all[i_segment].tokens[i_token].id].c_str(); +} + +whisper_token whisper_full_get_token_id_from_state(struct whisper_state * state, int i_segment, int i_token) { + return state->result_all[i_segment].tokens[i_token].id; +} + +whisper_token whisper_full_get_token_id(struct whisper_context * ctx, int i_segment, int i_token) { + return ctx->state->result_all[i_segment].tokens[i_token].id; +} + +struct whisper_token_data whisper_full_get_token_data_from_state(struct whisper_state * state, int i_segment, int i_token) { + return state->result_all[i_segment].tokens[i_token]; +} + +struct whisper_token_data whisper_full_get_token_data(struct whisper_context * ctx, int i_segment, int i_token) { + return ctx->state->result_all[i_segment].tokens[i_token]; +} + +float whisper_full_get_token_p_from_state(struct whisper_state * state, int i_segment, int i_token) { + return state->result_all[i_segment].tokens[i_token].p; +} + +float whisper_full_get_token_p(struct whisper_context * ctx, int i_segment, int i_token) { + return ctx->state->result_all[i_segment].tokens[i_token].p; +} + +// ================================================================================================= + +// +// Temporary interface needed for exposing ggml interface +// Will be removed in the future when ggml becomes a separate library +// + +WHISPER_API int whisper_bench_memcpy(int n_threads) { + fputs(whisper_bench_memcpy_str(n_threads), stderr); + return 0; +} + +WHISPER_API const char * whisper_bench_memcpy_str(int n_threads) { + static std::string s; + s = ""; + char strbuf[256]; + + ggml_time_init(); + + size_t n = 20; + size_t arr = n_threads > 0 ? 1024llu : n_threads; // trick to avoid compiler optimizations + + // 1GB MB array + const size_t size = arr*1024llu*1024llu; + + // single-thread + { + char * src = (char *) malloc(size); + char * dst = (char *) malloc(size); + + for (size_t i = 0; i < size; i++) src[i] = i; + + memcpy(dst, src, size); // heat-up + + double tsum = 0.0; + double sum = 0.0; + + for (size_t i = 0; i < n; i++) { + const int64_t t0 = ggml_time_us(); + + memcpy(dst, src, size); + + const int64_t t1 = ggml_time_us(); + + tsum += (t1 - t0)*1e-6; + + src[rand() % size] = rand() % 256; + } + + snprintf(strbuf, sizeof(strbuf), "memcpy: %.2f GB/s (1 thread)\n", (double) (n*size)/(tsum*1024llu*1024llu*1024llu)); + s += strbuf; + + // needed to prevent the compiler from optimizing the memcpy away + { + for (size_t i = 0; i < size; i++) sum += dst[i]; + + snprintf(strbuf, sizeof(strbuf), "sum: %f\n", sum); + s += strbuf; + } + + free(src); + free(dst); + } + + return s.c_str(); +} + +WHISPER_API int whisper_bench_ggml_mul_mat(int n_threads) { + fputs(whisper_bench_ggml_mul_mat_str(n_threads), stderr); + return 0; +} + +WHISPER_API const char * whisper_bench_ggml_mul_mat_str(int n_threads) { + static std::string s; + s = ""; + char strbuf[256]; + + ggml_time_init(); + + const int n_max = 128; + + const std::vector sizes = { + 64, 128, 256, 512, 1024, 2048, 4096, + }; + + const size_t N_max = sizes.back(); + + // a: N*N*sizeof(float) + // b: N*N*sizeof(float) + // c: N*N*sizeof(float) + // when F16 is used, there is an extra work buffer of size N*N*sizeof(float) + std::vector buf(4llu*N_max*N_max*sizeof(float) + 4*512); + + // put a bunch of random data in the buffer + for (size_t i = 0; i < buf.size(); i++) buf[i] = i; + + for (int j = 0; j < (int) sizes.size(); j++) { + int n_q4_0 = 0; + int n_q4_1 = 0; + int n_q5_0 = 0; + int n_q5_1 = 0; + int n_q8_0 = 0; + int n_fp16 = 0; + int n_fp32 = 0; + + // GFLOPS/s + double s_q4_0 = 0.0; + double s_q4_1 = 0.0; + double s_q5_0 = 0.0; + double s_q5_1 = 0.0; + double s_q8_0 = 0.0; + double s_fp16 = 0.0; + double s_fp32 = 0.0; + + const size_t N = sizes[j]; + + for (int k = 0; k < 7; ++k) { + const ggml_type wtype = + k == 0 ? GGML_TYPE_Q4_0 : + k == 1 ? GGML_TYPE_Q4_1 : + k == 2 ? GGML_TYPE_Q5_0 : + k == 3 ? GGML_TYPE_Q5_1 : + k == 4 ? GGML_TYPE_Q8_0 : + k == 5 ? GGML_TYPE_F16 : GGML_TYPE_F32; + + double & s = k == 0 ? s_q4_0 : k == 1 ? s_q4_1 : k == 2 ? s_q5_0 : k == 3 ? s_q5_1 : k == 4 ? s_q8_0 : k == 5 ? s_fp16 : /*k == 6*/ s_fp32; + int & n = k == 0 ? n_q4_0 : k == 1 ? n_q4_1 : k == 2 ? n_q5_0 : k == 3 ? n_q5_1 : k == 4 ? n_q8_0 : k == 5 ? n_fp16 : /*k == 6*/ n_fp32; + + struct ggml_init_params gparams = { + /*.mem_size =*/ buf.size(), + /*.mem_buffer =*/ buf.data(), + /*.no_alloc =*/ false, + }; + + struct ggml_context * ctx0 = ggml_init(gparams); + + struct ggml_tensor * a = ggml_new_tensor_2d(ctx0, wtype, N, N); + struct ggml_tensor * b = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, N, N); + + struct ggml_tensor * c = ggml_mul_mat(ctx0, a, b); + + struct ggml_cgraph gf = ggml_build_forward(c); + + gf.n_threads = n_threads; + + double tsum = 0.0; + + // heat-up + ggml_graph_compute(ctx0, &gf); + + for (int i = 0; i < n_max; ++i) { + const int64_t t0 = ggml_time_us(); + + ggml_graph_compute(ctx0, &gf); + + const int64_t t1 = ggml_time_us(); + + tsum += (t1 - t0)*1e-6; + n++; + + if (tsum > 1.0 && n >= 3) { + break; + } + } + + ggml_free(ctx0); + + s = ((2.0*N*N*N*n)/tsum)*1e-9; + } + + // Q4_0 | Q4_1 + snprintf(strbuf, sizeof(strbuf), "%4zu x %4zu: Q4_0 %7.1f GFLOPS (%3d runs) | Q4_1 %7.1f GFLOPS (%3d runs)\n", + N, N, s_q4_0, n_q4_0, s_q4_1, n_q4_1); + s += strbuf; + + // Q5_0 | Q5_1 | Q8_0 + snprintf(strbuf, sizeof(strbuf), "%4zu x %4zu: Q5_0 %7.1f GFLOPS (%3d runs) | Q5_1 %7.1f GFLOPS (%3d runs) | Q8_0 %7.1f GFLOPS (%3d runs)\n", + N, N, s_q5_0, n_q5_0, s_q5_1, n_q5_1, s_q8_0, n_q8_0); + s += strbuf; + + // F16 | F32 + snprintf(strbuf, sizeof(strbuf), "%4zu x %4zu: F16 %7.1f GFLOPS (%3d runs) | F32 %7.1f GFLOPS (%3d runs)\n", + N, N, s_fp16, n_fp16, s_fp32, n_fp32); + s += strbuf; + } + + return s.c_str(); +} + +// ================================================================================================= + +// ================================================================================================= + +// +// Experimental stuff below +// +// Not sure if these should be part of the library at all, because the quality of the results is not +// guaranteed. Might get removed at some point unless a robust algorithm implementation is found +// + +// ================================================================================================= + +// +// token-level timestamps +// + +static int timestamp_to_sample(int64_t t, int n_samples) { + return std::max(0, std::min((int) n_samples - 1, (int) ((t*WHISPER_SAMPLE_RATE)/100))); +} + +static int64_t sample_to_timestamp(int i_sample) { + return (100ll*i_sample)/WHISPER_SAMPLE_RATE; +} + +// a cost-function / heuristic that is high for text that takes longer to pronounce +// obviously, can be improved +static float voice_length(const std::string & text) { + float res = 0.0f; + + for (char c : text) { + if (c == ' ') { + res += 0.01f; + } else if (c == ',') { + res += 2.00f; + } else if (c == '.') { + res += 3.00f; + } else if (c == '!') { + res += 3.00f; + } else if (c == '?') { + res += 3.00f; + } else if (c >= '0' && c <= '9') { + res += 3.00f; + } else { + res += 1.00f; + } + } + + return res; +} + +// average the fabs of the signal +static std::vector get_signal_energy(const float * signal, int n_samples, int n_samples_per_half_window) { + const int hw = n_samples_per_half_window; + + std::vector result(n_samples); + + for (int i = 0; i < n_samples; i++) { + float sum = 0; + for (int j = -hw; j <= hw; j++) { + if (i + j >= 0 && i + j < n_samples) { + sum += fabs(signal[i + j]); + } + } + result[i] = sum/(2*hw + 1); + } + + return result; +} + +static void whisper_exp_compute_token_level_timestamps( + struct whisper_context & ctx, + struct whisper_state & state, + int i_segment, + float thold_pt, + float thold_ptsum) { + auto & segment = state.result_all[i_segment]; + auto & tokens = segment.tokens; + + const int n_samples = state.energy.size(); + + if (n_samples == 0) { + fprintf(stderr, "%s: no signal data available\n", __func__); + return; + } + + const int64_t t0 = segment.t0; + const int64_t t1 = segment.t1; + + const int n = tokens.size(); + + if (n == 0) { + return; + } + + if (n == 1) { + tokens[0].t0 = t0; + tokens[0].t1 = t1; + + return; + } + + auto & t_beg = state.t_beg; + auto & t_last = state.t_last; + auto & tid_last = state.tid_last; + + for (int j = 0; j < n; ++j) { + auto & token = tokens[j]; + + if (j == 0) { + if (token.id == whisper_token_beg(&ctx)) { + tokens[j ].t0 = t0; + tokens[j ].t1 = t0; + tokens[j + 1].t0 = t0; + + t_beg = t0; + t_last = t0; + tid_last = whisper_token_beg(&ctx); + } else { + tokens[j ].t0 = t_last; + } + } + + const int64_t tt = t_beg + 2*(token.tid - whisper_token_beg(&ctx)); + + tokens[j].id = token.id; + tokens[j].tid = token.tid; + tokens[j].p = token.p; + tokens[j].pt = token.pt; + tokens[j].ptsum = token.ptsum; + + tokens[j].vlen = voice_length(whisper_token_to_str(&ctx, token.id)); + + if (token.pt > thold_pt && token.ptsum > thold_ptsum && token.tid > tid_last && tt <= t1) { + if (j > 0) { + tokens[j - 1].t1 = tt; + } + tokens[j].t0 = tt; + tid_last = token.tid; + } + } + + tokens[n - 2].t1 = t1; + tokens[n - 1].t0 = t1; + tokens[n - 1].t1 = t1; + + t_last = t1; + + // find intervals of tokens with unknown timestamps + // fill the timestamps by proportionally splitting the interval based on the token voice lengths + { + int p0 = 0; + int p1 = 0; + + while (true) { + while (p1 < n && tokens[p1].t1 < 0) { + p1++; + } + + if (p1 >= n) { + p1--; + } + + //printf("p0=%d p1=%d t0=%lld t1=%lld\n", p0, p1, tokens[p0].t0, tokens[p1].t1); + + if (p1 > p0) { + double psum = 0.0; + for (int j = p0; j <= p1; j++) { + psum += tokens[j].vlen; + } + + //printf("analyzing %d - %d, psum = %f\n", p0, p1, psum); + + const double dt = tokens[p1].t1 - tokens[p0].t0; + + // split the time proportionally to the voice length + for (int j = p0 + 1; j <= p1; j++) { + const double ct = tokens[j - 1].t0 + dt*tokens[j - 1].vlen/psum; + + tokens[j - 1].t1 = ct; + tokens[j ].t0 = ct; + } + } + + p1++; + p0 = p1; + if (p1 >= n) { + break; + } + } + } + + // fix up (just in case) + for (int j = 0; j < n - 1; j++) { + if (tokens[j].t1 < 0) { + tokens[j + 1].t0 = tokens[j].t1; + } + + if (j > 0) { + if (tokens[j - 1].t1 > tokens[j].t0) { + tokens[j].t0 = tokens[j - 1].t1; + tokens[j].t1 = std::max(tokens[j].t0, tokens[j].t1); + } + } + } + + // VAD + // expand or contract tokens based on voice activity + { + const int hw = WHISPER_SAMPLE_RATE/8; + + for (int j = 0; j < n; j++) { + if (tokens[j].id >= whisper_token_eot(&ctx)) { + continue; + } + + int s0 = timestamp_to_sample(tokens[j].t0, n_samples); + int s1 = timestamp_to_sample(tokens[j].t1, n_samples); + + const int ss0 = std::max(s0 - hw, 0); + const int ss1 = std::min(s1 + hw, n_samples); + + const int ns = ss1 - ss0; + + float sum = 0.0f; + + for (int k = ss0; k < ss1; k++) { + sum += state.energy[k]; + } + + const float thold = 0.5*sum/ns; + + { + int k = s0; + if (state.energy[k] > thold && j > 0) { + while (k > 0 && state.energy[k] > thold) { + k--; + } + tokens[j].t0 = sample_to_timestamp(k); + if (tokens[j].t0 < tokens[j - 1].t1) { + tokens[j].t0 = tokens[j - 1].t1; + } else { + s0 = k; + } + } else { + while (state.energy[k] < thold && k < s1) { + k++; + } + s0 = k; + tokens[j].t0 = sample_to_timestamp(k); + } + } + + { + int k = s1; + if (state.energy[k] > thold) { + while (k < n_samples - 1 && state.energy[k] > thold) { + k++; + } + tokens[j].t1 = sample_to_timestamp(k); + if (j < ns - 1 && tokens[j].t1 > tokens[j + 1].t0) { + tokens[j].t1 = tokens[j + 1].t0; + } else { + s1 = k; + } + } else { + while (state.energy[k] < thold && k > s0) { + k--; + } + s1 = k; + tokens[j].t1 = sample_to_timestamp(k); + } + } + } + } + + // fixed token expand (optional) + //{ + // const int t_expand = 0; + + // for (int j = 0; j < n; j++) { + // if (j > 0) { + // tokens[j].t0 = std::max(0, (int) (tokens[j].t0 - t_expand)); + // } + // if (j < n - 1) { + // tokens[j].t1 = tokens[j].t1 + t_expand; + // } + // } + //} + + // debug info + //for (int j = 0; j < n; ++j) { + // const auto & token = tokens[j]; + // const auto tt = token.pt > thold_pt && token.ptsum > 0.01 ? whisper_token_to_str(&ctx, token.tid) : "[?]"; + // printf("%s: %10s %6.3f %6.3f %6.3f %6.3f %5d %5d '%s'\n", __func__, + // tt, token.p, token.pt, token.ptsum, token.vlen, (int) token.t0, (int) token.t1, whisper_token_to_str(&ctx, token.id)); + + // if (tokens[j].id >= whisper_token_eot(&ctx)) { + // continue; + // } + //} +} diff --git a/ggml_old/examples/whisper/whisper.h b/ggml_old/examples/whisper/whisper.h new file mode 100644 index 0000000..2d5b3eb --- /dev/null +++ b/ggml_old/examples/whisper/whisper.h @@ -0,0 +1,497 @@ +#ifndef WHISPER_H +#define WHISPER_H + +#include +#include +#include + +#ifdef WHISPER_SHARED +# ifdef _WIN32 +# ifdef WHISPER_BUILD +# define WHISPER_API __declspec(dllexport) +# else +# define WHISPER_API __declspec(dllimport) +# endif +# else +# define WHISPER_API __attribute__ ((visibility ("default"))) +# endif +#else +# define WHISPER_API +#endif + +#define WHISPER_SAMPLE_RATE 16000 +#define WHISPER_N_FFT 400 +#define WHISPER_N_MEL 80 +#define WHISPER_HOP_LENGTH 160 +#define WHISPER_CHUNK_SIZE 30 + +#ifdef __cplusplus +extern "C" { +#endif + + // + // C interface + // + // The following interface is thread-safe as long as the sample whisper_context is not used by multiple threads + // concurrently. + // + // Basic usage: + // + // #include "whisper.h" + // + // ... + // + // struct whisper_context * ctx = whisper_init_from_file("/path/to/ggml-base.en.bin"); + // + // if (whisper_full(ctx, wparams, pcmf32.data(), pcmf32.size()) != 0) { + // fprintf(stderr, "failed to process audio\n"); + // return 7; + // } + // + // const int n_segments = whisper_full_n_segments(ctx); + // for (int i = 0; i < n_segments; ++i) { + // const char * text = whisper_full_get_segment_text(ctx, i); + // printf("%s", text); + // } + // + // whisper_free(ctx); + // + // ... + // + // This is a demonstration of the most straightforward usage of the library. + // "pcmf32" contains the RAW audio data in 32-bit floating point format. + // + // The interface also allows for more fine-grained control over the computation, but it requires a deeper + // understanding of how the model works. + // + + struct whisper_context; + struct whisper_state; + + typedef int whisper_token; + + typedef struct whisper_token_data { + whisper_token id; // token id + whisper_token tid; // forced timestamp token id + + float p; // probability of the token + float plog; // log probability of the token + float pt; // probability of the timestamp token + float ptsum; // sum of probabilities of all timestamp tokens + + // token-level timestamp data + // do not use if you haven't computed token-level timestamps + int64_t t0; // start time of the token + int64_t t1; // end time of the token + + float vlen; // voice length of the token + } whisper_token_data; + + typedef struct whisper_model_loader { + void * context; + + size_t (*read)(void * ctx, void * output, size_t read_size); + bool (*eof)(void * ctx); + void (*close)(void * ctx); + } whisper_model_loader; + + // Various functions for loading a ggml whisper model. + // Allocate (almost) all memory needed for the model. + // Return NULL on failure + WHISPER_API struct whisper_context * whisper_init_from_file(const char * path_model); + WHISPER_API struct whisper_context * whisper_init_from_buffer(void * buffer, size_t buffer_size); + WHISPER_API struct whisper_context * whisper_init(struct whisper_model_loader * loader); + + // These are the same as the above, but the internal state of the context is not allocated automatically + // It is the responsibility of the caller to allocate the state using whisper_init_state() (#523) + WHISPER_API struct whisper_context * whisper_init_from_file_no_state(const char * path_model); + WHISPER_API struct whisper_context * whisper_init_from_buffer_no_state(void * buffer, size_t buffer_size); + WHISPER_API struct whisper_context * whisper_init_no_state(struct whisper_model_loader * loader); + + WHISPER_API struct whisper_state * whisper_init_state(struct whisper_context * ctx); + + // Frees all allocated memory + WHISPER_API void whisper_free (struct whisper_context * ctx); + WHISPER_API void whisper_free_state(struct whisper_state * state); + + // Convert RAW PCM audio to log mel spectrogram. + // The resulting spectrogram is stored inside the default state of the provided whisper context. + // Returns 0 on success + WHISPER_API int whisper_pcm_to_mel( + struct whisper_context * ctx, + const float * samples, + int n_samples, + int n_threads); + + WHISPER_API int whisper_pcm_to_mel_with_state( + struct whisper_context * ctx, + struct whisper_state * state, + const float * samples, + int n_samples, + int n_threads); + + // Convert RAW PCM audio to log mel spectrogram but applies a Phase Vocoder to speed up the audio x2. + // The resulting spectrogram is stored inside the default state of the provided whisper context. + // Returns 0 on success + WHISPER_API int whisper_pcm_to_mel_phase_vocoder( + struct whisper_context * ctx, + const float * samples, + int n_samples, + int n_threads); + + WHISPER_API int whisper_pcm_to_mel_phase_vocoder_with_state( + struct whisper_context * ctx, + struct whisper_state * state, + const float * samples, + int n_samples, + int n_threads); + + // This can be used to set a custom log mel spectrogram inside the default state of the provided whisper context. + // Use this instead of whisper_pcm_to_mel() if you want to provide your own log mel spectrogram. + // n_mel must be 80 + // Returns 0 on success + WHISPER_API int whisper_set_mel( + struct whisper_context * ctx, + const float * data, + int n_len, + int n_mel); + + WHISPER_API int whisper_set_mel_with_state( + struct whisper_context * ctx, + struct whisper_state * state, + const float * data, + int n_len, + int n_mel); + + // Run the Whisper encoder on the log mel spectrogram stored inside the default state in the provided whisper context. + // Make sure to call whisper_pcm_to_mel() or whisper_set_mel() first. + // offset can be used to specify the offset of the first frame in the spectrogram. + // Returns 0 on success + WHISPER_API int whisper_encode( + struct whisper_context * ctx, + int offset, + int n_threads); + + WHISPER_API int whisper_encode_with_state( + struct whisper_context * ctx, + struct whisper_state * state, + int offset, + int n_threads); + + // Run the Whisper decoder to obtain the logits and probabilities for the next token. + // Make sure to call whisper_encode() first. + // tokens + n_tokens is the provided context for the decoder. + // n_past is the number of tokens to use from previous decoder calls. + // Returns 0 on success + // TODO: add support for multiple decoders + WHISPER_API int whisper_decode( + struct whisper_context * ctx, + const whisper_token * tokens, + int n_tokens, + int n_past, + int n_threads); + + WHISPER_API int whisper_decode_with_state( + struct whisper_context * ctx, + struct whisper_state * state, + const whisper_token * tokens, + int n_tokens, + int n_past, + int n_threads); + + // Convert the provided text into tokens. + // The tokens pointer must be large enough to hold the resulting tokens. + // Returns the number of tokens on success, no more than n_max_tokens + // Returns -1 on failure + // TODO: not sure if correct + WHISPER_API int whisper_tokenize( + struct whisper_context * ctx, + const char * text, + whisper_token * tokens, + int n_max_tokens); + + // Largest language id (i.e. number of available languages - 1) + WHISPER_API int whisper_lang_max_id(); + + // Return the id of the specified language, returns -1 if not found + // Examples: + // "de" -> 2 + // "german" -> 2 + WHISPER_API int whisper_lang_id(const char * lang); + + // Return the short string of the specified language id (e.g. 2 -> "de"), returns nullptr if not found + WHISPER_API const char * whisper_lang_str(int id); + + // Use mel data at offset_ms to try and auto-detect the spoken language + // Make sure to call whisper_pcm_to_mel() or whisper_set_mel() first + // Returns the top language id or negative on failure + // If not null, fills the lang_probs array with the probabilities of all languages + // The array must be whisper_lang_max_id() + 1 in size + // ref: https://github.com/openai/whisper/blob/main/whisper/decoding.py#L18-L69 + WHISPER_API int whisper_lang_auto_detect( + struct whisper_context * ctx, + int offset_ms, + int n_threads, + float * lang_probs); + + WHISPER_API int whisper_lang_auto_detect_with_state( + struct whisper_context * ctx, + struct whisper_state * state, + int offset_ms, + int n_threads, + float * lang_probs); + + WHISPER_API int whisper_n_len (struct whisper_context * ctx); // mel length + WHISPER_API int whisper_n_len_from_state(struct whisper_state * state); // mel length + WHISPER_API int whisper_n_vocab (struct whisper_context * ctx); + WHISPER_API int whisper_n_text_ctx (struct whisper_context * ctx); + WHISPER_API int whisper_n_audio_ctx (struct whisper_context * ctx); + WHISPER_API int whisper_is_multilingual (struct whisper_context * ctx); + + WHISPER_API int whisper_model_n_vocab (struct whisper_context * ctx); + WHISPER_API int whisper_model_n_audio_ctx (struct whisper_context * ctx); + WHISPER_API int whisper_model_n_audio_state(struct whisper_context * ctx); + WHISPER_API int whisper_model_n_audio_head (struct whisper_context * ctx); + WHISPER_API int whisper_model_n_audio_layer(struct whisper_context * ctx); + WHISPER_API int whisper_model_n_text_ctx (struct whisper_context * ctx); + WHISPER_API int whisper_model_n_text_state (struct whisper_context * ctx); + WHISPER_API int whisper_model_n_text_head (struct whisper_context * ctx); + WHISPER_API int whisper_model_n_text_layer (struct whisper_context * ctx); + WHISPER_API int whisper_model_n_mels (struct whisper_context * ctx); + WHISPER_API int whisper_model_ftype (struct whisper_context * ctx); + WHISPER_API int whisper_model_type (struct whisper_context * ctx); + + // Token logits obtained from the last call to whisper_decode() + // The logits for the last token are stored in the last row + // Rows: n_tokens + // Cols: n_vocab + WHISPER_API float * whisper_get_logits (struct whisper_context * ctx); + WHISPER_API float * whisper_get_logits_from_state(struct whisper_state * state); + + // Token Id -> String. Uses the vocabulary in the provided context + WHISPER_API const char * whisper_token_to_str(struct whisper_context * ctx, whisper_token token); + WHISPER_API const char * whisper_model_type_readable(struct whisper_context * ctx); + + + // Special tokens + WHISPER_API whisper_token whisper_token_eot (struct whisper_context * ctx); + WHISPER_API whisper_token whisper_token_sot (struct whisper_context * ctx); + WHISPER_API whisper_token whisper_token_prev(struct whisper_context * ctx); + WHISPER_API whisper_token whisper_token_solm(struct whisper_context * ctx); + WHISPER_API whisper_token whisper_token_not (struct whisper_context * ctx); + WHISPER_API whisper_token whisper_token_beg (struct whisper_context * ctx); + WHISPER_API whisper_token whisper_token_lang(struct whisper_context * ctx, int lang_id); + + // Task tokens + WHISPER_API whisper_token whisper_token_translate (void); + WHISPER_API whisper_token whisper_token_transcribe(void); + + // Performance information from the default state. + WHISPER_API void whisper_print_timings(struct whisper_context * ctx); + WHISPER_API void whisper_reset_timings(struct whisper_context * ctx); + + // Print system information + WHISPER_API const char * whisper_print_system_info(void); + + //////////////////////////////////////////////////////////////////////////// + + // Available sampling strategies + enum whisper_sampling_strategy { + WHISPER_SAMPLING_GREEDY, // similar to OpenAI's GreedyDecoder + WHISPER_SAMPLING_BEAM_SEARCH, // similar to OpenAI's BeamSearchDecoder + }; + + // Text segment callback + // Called on every newly generated text segment + // Use the whisper_full_...() functions to obtain the text segments + typedef void (*whisper_new_segment_callback)(struct whisper_context * ctx, struct whisper_state * state, int n_new, void * user_data); + + // Progress callback + typedef void (*whisper_progress_callback)(struct whisper_context * ctx, struct whisper_state * state, int progress, void * user_data); + + // Encoder begin callback + // If not NULL, called before the encoder starts + // If it returns false, the computation is aborted + typedef bool (*whisper_encoder_begin_callback)(struct whisper_context * ctx, struct whisper_state * state, void * user_data); + + // Logits filter callback + // Can be used to modify the logits before sampling + // If not NULL, called after applying temperature to logits + typedef void (*whisper_logits_filter_callback)( + struct whisper_context * ctx, + struct whisper_state * state, + const whisper_token_data * tokens, + int n_tokens, + float * logits, + void * user_data); + + // Parameters for the whisper_full() function + // If you chnage the order or add new parameters, make sure to update the default values in whisper.cpp: + // whisper_full_default_params() + struct whisper_full_params { + enum whisper_sampling_strategy strategy; + + int n_threads; + int n_max_text_ctx; // max tokens to use from past text as prompt for the decoder + int offset_ms; // start offset in ms + int duration_ms; // audio duration to process in ms + + bool translate; + bool no_context; // do not use past transcription (if any) as initial prompt for the decoder + bool single_segment; // force single segment output (useful for streaming) + bool print_special; // print special tokens (e.g. , , , etc.) + bool print_progress; // print progress information + bool print_realtime; // print results from within whisper.cpp (avoid it, use callback instead) + bool print_timestamps; // print timestamps for each text segment when printing realtime + + // [EXPERIMENTAL] token-level timestamps + bool token_timestamps; // enable token-level timestamps + float thold_pt; // timestamp token probability threshold (~0.01) + float thold_ptsum; // timestamp token sum probability threshold (~0.01) + int max_len; // max segment length in characters + bool split_on_word; // split on word rather than on token (when used with max_len) + int max_tokens; // max tokens per segment (0 = no limit) + + // [EXPERIMENTAL] speed-up techniques + // note: these can significantly reduce the quality of the output + bool speed_up; // speed-up the audio by 2x using Phase Vocoder + int audio_ctx; // overwrite the audio context size (0 = use default) + + // tokens to provide to the whisper decoder as initial prompt + // these are prepended to any existing text context from a previous call + const char * initial_prompt; + const whisper_token * prompt_tokens; + int prompt_n_tokens; + + // for auto-detection, set to nullptr, "" or "auto" + const char * language; + bool detect_language; + + // common decoding parameters: + bool suppress_blank; // ref: https://github.com/openai/whisper/blob/f82bc59f5ea234d4b97fb2860842ed38519f7e65/whisper/decoding.py#L89 + bool suppress_non_speech_tokens; // ref: https://github.com/openai/whisper/blob/7858aa9c08d98f75575035ecd6481f462d66ca27/whisper/tokenizer.py#L224-L253 + + float temperature; // initial decoding temperature, ref: https://ai.stackexchange.com/a/32478 + float max_initial_ts; // ref: https://github.com/openai/whisper/blob/f82bc59f5ea234d4b97fb2860842ed38519f7e65/whisper/decoding.py#L97 + float length_penalty; // ref: https://github.com/openai/whisper/blob/f82bc59f5ea234d4b97fb2860842ed38519f7e65/whisper/transcribe.py#L267 + + // fallback parameters + // ref: https://github.com/openai/whisper/blob/f82bc59f5ea234d4b97fb2860842ed38519f7e65/whisper/transcribe.py#L274-L278 + float temperature_inc; + float entropy_thold; // similar to OpenAI's "compression_ratio_threshold" + float logprob_thold; + float no_speech_thold; // TODO: not implemented + + struct { + int best_of; // ref: https://github.com/openai/whisper/blob/f82bc59f5ea234d4b97fb2860842ed38519f7e65/whisper/transcribe.py#L264 + } greedy; + + struct { + int beam_size; // ref: https://github.com/openai/whisper/blob/f82bc59f5ea234d4b97fb2860842ed38519f7e65/whisper/transcribe.py#L265 + + float patience; // TODO: not implemented, ref: https://arxiv.org/pdf/2204.05424.pdf + } beam_search; + + // called for every newly generated text segment + whisper_new_segment_callback new_segment_callback; + void * new_segment_callback_user_data; + + // called on each progress update + whisper_progress_callback progress_callback; + void * progress_callback_user_data; + + // called each time before the encoder starts + whisper_encoder_begin_callback encoder_begin_callback; + void * encoder_begin_callback_user_data; + + // called by each decoder to filter obtained logits + whisper_logits_filter_callback logits_filter_callback; + void * logits_filter_callback_user_data; + }; + + WHISPER_API struct whisper_full_params whisper_full_default_params(enum whisper_sampling_strategy strategy); + + // Run the entire model: PCM -> log mel spectrogram -> encoder -> decoder -> text + // Not thread safe for same context + // Uses the specified decoding strategy to obtain the text. + WHISPER_API int whisper_full( + struct whisper_context * ctx, + struct whisper_full_params params, + const float * samples, + int n_samples); + + WHISPER_API int whisper_full_with_state( + struct whisper_context * ctx, + struct whisper_state * state, + struct whisper_full_params params, + const float * samples, + int n_samples); + + // Split the input audio in chunks and process each chunk separately using whisper_full_with_state() + // Result is stored in the default state of the context + // Not thread safe if executed in parallel on the same context. + // It seems this approach can offer some speedup in some cases. + // However, the transcription accuracy can be worse at the beginning and end of each chunk. + WHISPER_API int whisper_full_parallel( + struct whisper_context * ctx, + struct whisper_full_params params, + const float * samples, + int n_samples, + int n_processors); + + // Number of generated text segments + // A segment can be a few words, a sentence, or even a paragraph. + WHISPER_API int whisper_full_n_segments (struct whisper_context * ctx); + WHISPER_API int whisper_full_n_segments_from_state(struct whisper_state * state); + + // Language id associated with the context's default state + WHISPER_API int whisper_full_lang_id(struct whisper_context * ctx); + + // Language id associated with the provided state + WHISPER_API int whisper_full_lang_id_from_state(struct whisper_state * state); + + // Get the start and end time of the specified segment + WHISPER_API int64_t whisper_full_get_segment_t0 (struct whisper_context * ctx, int i_segment); + WHISPER_API int64_t whisper_full_get_segment_t0_from_state(struct whisper_state * state, int i_segment); + + WHISPER_API int64_t whisper_full_get_segment_t1 (struct whisper_context * ctx, int i_segment); + WHISPER_API int64_t whisper_full_get_segment_t1_from_state(struct whisper_state * state, int i_segment); + + // Get the text of the specified segment + WHISPER_API const char * whisper_full_get_segment_text (struct whisper_context * ctx, int i_segment); + WHISPER_API const char * whisper_full_get_segment_text_from_state(struct whisper_state * state, int i_segment); + + // Get number of tokens in the specified segment + WHISPER_API int whisper_full_n_tokens (struct whisper_context * ctx, int i_segment); + WHISPER_API int whisper_full_n_tokens_from_state(struct whisper_state * state, int i_segment); + + // Get the token text of the specified token in the specified segment + WHISPER_API const char * whisper_full_get_token_text (struct whisper_context * ctx, int i_segment, int i_token); + WHISPER_API const char * whisper_full_get_token_text_from_state(struct whisper_context * ctx, struct whisper_state * state, int i_segment, int i_token); + + WHISPER_API whisper_token whisper_full_get_token_id (struct whisper_context * ctx, int i_segment, int i_token); + WHISPER_API whisper_token whisper_full_get_token_id_from_state(struct whisper_state * state, int i_segment, int i_token); + + // Get token data for the specified token in the specified segment + // This contains probabilities, timestamps, etc. + WHISPER_API whisper_token_data whisper_full_get_token_data (struct whisper_context * ctx, int i_segment, int i_token); + WHISPER_API whisper_token_data whisper_full_get_token_data_from_state(struct whisper_state * state, int i_segment, int i_token); + + // Get the probability of the specified token in the specified segment + WHISPER_API float whisper_full_get_token_p (struct whisper_context * ctx, int i_segment, int i_token); + WHISPER_API float whisper_full_get_token_p_from_state(struct whisper_state * state, int i_segment, int i_token); + + //////////////////////////////////////////////////////////////////////////// + + // Temporary helpers needed for exposing ggml interface + + WHISPER_API int whisper_bench_memcpy(int n_threads); + WHISPER_API const char * whisper_bench_memcpy_str(int n_threads); + WHISPER_API int whisper_bench_ggml_mul_mat(int n_threads); + WHISPER_API const char * whisper_bench_ggml_mul_mat_str(int n_threads); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/ggml_old/include/ggml/ggml.h b/ggml_old/include/ggml/ggml.h new file mode 100644 index 0000000..51a616c --- /dev/null +++ b/ggml_old/include/ggml/ggml.h @@ -0,0 +1,1138 @@ +#pragma once + +// +// GGML Tensor Library +// +// This documentation is still a work in progress. +// If you wish some specific topics to be covered, feel free to drop a comment: +// +// https://github.com/ggerganov/whisper.cpp/issues/40 +// +// ## Overview +// +// This library implements: +// +// - a set of tensor operations +// - automatic differentiation +// - basic optimization algorithms +// +// The aim of this library is to provide a minimalistic approach for various machine learning tasks. This includes, +// but is not limited to, the following: +// +// - linear regression +// - support vector machines +// - neural networks +// +// The library allows the user to define a certain function using the available tensor operations. This function +// definition is represented internally via a computation graph. Each tensor operation in the function definition +// corresponds to a node in the graph. Having the computation graph defined, the user can choose to compute the +// function's value and/or its gradient with respect to the input variables. Optionally, the function can be optimized +// using one of the available optimization algorithms. +// +// For example, here we define the function: f(x) = a*x^2 + b +// +// { +// struct ggml_init_params params = { +// .mem_size = 16*1024*1024, +// .mem_buffer = NULL, +// }; +// +// // memory allocation happens here +// struct ggml_context * ctx = ggml_init(params); +// +// struct ggml_tensor * x = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1); +// +// ggml_set_param(ctx, x); // x is an input variable +// +// struct ggml_tensor * a = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1); +// struct ggml_tensor * b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1); +// struct ggml_tensor * x2 = ggml_mul(ctx, x, x); +// struct ggml_tensor * f = ggml_add(ctx, ggml_mul(ctx, a, x2), b); +// +// ... +// } +// +// Notice that the function definition above does not involve any actual computation. The computation is performed only +// when the user explicitly requests it. For example, to compute the function's value at x = 2.0: +// +// { +// ... +// +// struct ggml_cgraph gf = ggml_build_forward(f); +// +// // set the input variable and parameter values +// ggml_set_f32(x, 2.0f); +// ggml_set_f32(a, 3.0f); +// ggml_set_f32(b, 4.0f); +// +// ggml_graph_compute(ctx0, &gf); +// +// printf("f = %f\n", ggml_get_f32_1d(f, 0)); +// +// ... +// } +// +// The actual computation is performed in the ggml_graph_compute() function. +// +// The ggml_new_tensor_...() functions create new tensors. They are allocated in the memory buffer provided to the +// ggml_init() function. You have to be careful not to exceed the memory buffer size. Therefore, you have to know +// in advance how much memory you need for your computation. Alternatively, you can allocate a large enough memory +// and after defining the computation graph, call the ggml_used_mem() function to find out how much memory was +// actually needed. +// +// The ggml_set_param() function marks a tensor as an input variable. This is used by the automatic +// differentiation and optimization algorithms. +// +// The described approach allows to define the function graph once and then compute its forward or backward graphs +// multiple times. All computations will use the same memory buffer allocated in the ggml_init() function. This way +// the user can avoid the memory allocation overhead at runtime. +// +// The library supports multi-dimensional tensors - up to 4 dimensions. The FP16 and FP32 data types are first class +// citizens, but in theory the library can be extended to support FP8 and integer data types. +// +// Each tensor operation produces a new tensor. Initially the library was envisioned to support only the use of unary +// and binary operations. Most of the available operations fall into one of these two categories. With time, it became +// clear that the library needs to support more complex operations. The way to support these operations is not clear +// yet, but a few examples are demonstrated in the following operations: +// +// - ggml_permute() +// - ggml_conv_1d_1s() +// - ggml_conv_1d_2s() +// +// For each tensor operator, the library implements a forward and backward computation function. The forward function +// computes the output tensor value given the input tensor values. The backward function computes the adjoint of the +// input tensors given the adjoint of the output tensor. For a detailed explanation of what this means, take a +// calculus class, or watch the following video: +// +// What is Automatic Differentiation? +// https://www.youtube.com/watch?v=wG_nF1awSSY +// +// +// ## Tensor data (struct ggml_tensor) +// +// The tensors are stored in memory via the ggml_tensor struct. The structure provides information about the size of +// the tensor, the data type, and the memory buffer where the tensor data is stored. Additionally, it contains +// pointers to the "source" tensors - i.e. the tensors that were used to compute the current tensor. For example: +// +// { +// struct ggml_tensor * c = ggml_add(ctx, a, b); +// +// assert(c->src[0] == a); +// assert(c->src[1] == b); +// } +// +// The multi-dimensional tensors are stored in row-major order. The ggml_tensor struct contains fields for the +// number of elements in each dimension ("ne") as well as the number of bytes ("nb", a.k.a. stride). This allows +// to store tensors that are not contiguous in memory, which is useful for operations such as transposition and +// permutation. All tensor operations have to take the stride into account and not assume that the tensor is +// contiguous in memory. +// +// The data of the tensor is accessed via the "data" pointer. For example: +// +// { +// struct ggml_tensor * a = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, 2, 3); +// +// // a[1, 2] = 1.0f; +// *(float *) ((char *) a->data + 2*a->nb[1] + 1*a->nb[0]) = 1.0f; +// +// // a[2, 0] = 2.0f; +// *(float *) ((char *) a->data + 0*a->nb[1] + 2*a->nb[0]) = 2.0f; +// +// ... +// } +// +// Alternatively, there are helper functions, such as ggml_get_f32_1d() and ggml_set_f32_1d() that can be used. +// +// ## The matrix multiplication operator (ggml_mul_mat) +// +// TODO +// +// +// ## Multi-threading +// +// TODO +// +// +// ## Overview of ggml.c +// +// TODO +// +// +// ## SIMD optimizations +// +// TODO +// +// +// ## Debugging ggml +// +// TODO +// +// + +#ifdef GGML_SHARED +# if defined(_WIN32) && !defined(__MINGW32__) +# ifdef GGML_BUILD +# define GGML_API __declspec(dllexport) +# else +# define GGML_API __declspec(dllimport) +# endif +# else +# define GGML_API __attribute__ ((visibility ("default"))) +# endif +#else +# define GGML_API +#endif + +#include +#include +#include + +#define GGML_FILE_MAGIC 0x67676d6c // "ggml" +#define GGML_FILE_VERSION 1 + +#define GGML_QNT_VERSION 2 // bump this on quantization format changes +#define GGML_QNT_VERSION_FACTOR 1000 // do not change this + +#define GGML_MAX_DIMS 4 +#define GGML_MAX_NODES 4096 +#define GGML_MAX_PARAMS 256 +#define GGML_MAX_CONTEXTS 64 +#define GGML_MAX_OPT 4 +#define GGML_DEFAULT_N_THREADS 4 + +#define GGML_ASSERT(x) \ + do { \ + if (!(x)) { \ + fprintf(stderr, "GGML_ASSERT: %s:%d: %s\n", __FILE__, __LINE__, #x); \ + abort(); \ + } \ + } while (0) + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __ARM_NEON + // we use the built-in 16-bit float type + typedef __fp16 ggml_fp16_t; +#else + typedef uint16_t ggml_fp16_t; +#endif + + // convert FP16 <-> FP32 + GGML_API float ggml_fp16_to_fp32(ggml_fp16_t x); + GGML_API ggml_fp16_t ggml_fp32_to_fp16(float x); + + GGML_API void ggml_fp16_to_fp32_row(const ggml_fp16_t * x, float * y, size_t n); + GGML_API void ggml_fp32_to_fp16_row(const float * x, ggml_fp16_t * y, size_t n); + + struct ggml_object; + struct ggml_context; + + enum ggml_type { + GGML_TYPE_F32 = 0, + GGML_TYPE_F16 = 1, + GGML_TYPE_Q4_0 = 2, + GGML_TYPE_Q4_1 = 3, + // GGML_TYPE_Q4_2 = 4, support has been removed + // GGML_TYPE_Q4_3 (5) support has been removed + GGML_TYPE_Q5_0 = 6, + GGML_TYPE_Q5_1 = 7, + GGML_TYPE_Q8_0 = 8, + GGML_TYPE_Q8_1 = 9, + GGML_TYPE_I8, + GGML_TYPE_I16, + GGML_TYPE_I32, + GGML_TYPE_COUNT, + }; + + enum ggml_backend { + GGML_BACKEND_CPU = 0, + GGML_BACKEND_CUDA = 1, + }; + + // model file types + enum ggml_ftype { + GGML_FTYPE_UNKNOWN = -1, + GGML_FTYPE_ALL_F32 = 0, + GGML_FTYPE_MOSTLY_F16 = 1, // except 1d tensors + GGML_FTYPE_MOSTLY_Q4_0 = 2, // except 1d tensors + GGML_FTYPE_MOSTLY_Q4_1 = 3, // except 1d tensors + GGML_FTYPE_MOSTLY_Q4_1_SOME_F16 = 4, // tok_embeddings.weight and output.weight are F16 + GGML_FTYPE_MOSTLY_Q8_0 = 7, // except 1d tensors + GGML_FTYPE_MOSTLY_Q5_0 = 8, // except 1d tensors + GGML_FTYPE_MOSTLY_Q5_1 = 9, // except 1d tensors + }; + + // available tensor operations: + enum ggml_op { + GGML_OP_NONE = 0, + + GGML_OP_DUP, + GGML_OP_ADD, + GGML_OP_ADD1, + GGML_OP_ACC, + GGML_OP_SUB, + GGML_OP_MUL, + GGML_OP_DIV, + GGML_OP_SQR, + GGML_OP_SQRT, + GGML_OP_LOG, + GGML_OP_SUM, + GGML_OP_SUM_ROWS, + GGML_OP_MEAN, + GGML_OP_REPEAT, + GGML_OP_ABS, + GGML_OP_SGN, + GGML_OP_NEG, + GGML_OP_STEP, + GGML_OP_RELU, + GGML_OP_GELU, + GGML_OP_SILU, + GGML_OP_SILU_BACK, + GGML_OP_NORM, // normalize + GGML_OP_RMS_NORM, + GGML_OP_RMS_NORM_BACK, + + GGML_OP_MUL_MAT, + + GGML_OP_SCALE, + GGML_OP_SET, + GGML_OP_CPY, + GGML_OP_CONT, + GGML_OP_RESHAPE, + GGML_OP_VIEW, + GGML_OP_PERMUTE, + GGML_OP_TRANSPOSE, + GGML_OP_GET_ROWS, + GGML_OP_GET_ROWS_BACK, + GGML_OP_DIAG, + GGML_OP_DIAG_MASK_INF, + GGML_OP_DIAG_MASK_ZERO, + GGML_OP_SOFT_MAX, + GGML_OP_ROPE, + GGML_OP_ROPE_BACK, + GGML_OP_ALIBI, + GGML_OP_CLAMP, + GGML_OP_CONV_1D_1S, + GGML_OP_CONV_1D_2S, + + GGML_OP_FLASH_ATTN, + GGML_OP_FLASH_FF, + + GGML_OP_MAP_UNARY, + GGML_OP_MAP_BINARY, + + GGML_OP_COUNT, + }; + + + // ggml object + struct ggml_object { + size_t offs; + size_t size; + + struct ggml_object * next; + + char padding[8]; + }; + + static const size_t GGML_OBJECT_SIZE = sizeof(struct ggml_object); + + // n-dimensional tensor + struct ggml_tensor { + enum ggml_type type; + enum ggml_backend backend; + + int n_dims; + int64_t ne[GGML_MAX_DIMS]; // number of elements + size_t nb[GGML_MAX_DIMS]; // stride in bytes: + // nb[0] = sizeof(type) + // nb[1] = nb[0] * ne[0] + padding + // nb[i] = nb[i-1] * ne[i-1] + + // compute data + enum ggml_op op; + + bool is_param; + + struct ggml_tensor * grad; + struct ggml_tensor * src0; + struct ggml_tensor * src1; + struct ggml_tensor * opt[GGML_MAX_OPT]; + + // thread scheduling + int n_tasks; + + // performance + int perf_runs; + int64_t perf_cycles; + int64_t perf_time_us; + + void * data; + + char name[32]; + + char padding[16]; + }; + + // computation graph + struct ggml_cgraph { + int n_nodes; + int n_leafs; + int n_threads; + + size_t work_size; + struct ggml_tensor * work; + + struct ggml_tensor * nodes[GGML_MAX_NODES]; + struct ggml_tensor * grads[GGML_MAX_NODES]; + struct ggml_tensor * leafs[GGML_MAX_NODES]; + + // performance + int perf_runs; + int64_t perf_cycles; + int64_t perf_time_us; + }; + + // scratch buffer + struct ggml_scratch { + size_t offs; + size_t size; + void * data; + }; + + struct ggml_init_params { + // memory pool + size_t mem_size; // bytes + void * mem_buffer; // if NULL, memory will be allocated internally + bool no_alloc; // don't allocate memory for the tensor data + }; + + // misc + + GGML_API void ggml_time_init(void); // call this once at the beginning of the program + GGML_API int64_t ggml_time_ms(void); + GGML_API int64_t ggml_time_us(void); + GGML_API int64_t ggml_cycles(void); + GGML_API int64_t ggml_cycles_per_ms(void); + + GGML_API void ggml_print_object (const struct ggml_object * obj); + GGML_API void ggml_print_objects(const struct ggml_context * ctx); + + GGML_API int64_t ggml_nelements(const struct ggml_tensor * tensor); + GGML_API size_t ggml_nbytes (const struct ggml_tensor * tensor); + + GGML_API int ggml_blck_size (enum ggml_type type); + GGML_API size_t ggml_type_size (enum ggml_type type); // size in bytes for all elements in a block + GGML_API float ggml_type_sizef(enum ggml_type type); // ggml_type_size()/ggml_blck_size() as float + + GGML_API const char * ggml_type_name(enum ggml_type type); + + GGML_API size_t ggml_element_size(const struct ggml_tensor * tensor); + + GGML_API bool ggml_is_quantized(enum ggml_type type); + + // TODO: temporary until model loading of ggml examples is refactored + GGML_API enum ggml_type ggml_ftype_to_ggml_type(enum ggml_ftype ftype); + + // main + + GGML_API struct ggml_context * ggml_init(struct ggml_init_params params); + GGML_API void ggml_free(struct ggml_context * ctx); + + GGML_API size_t ggml_used_mem(const struct ggml_context * ctx); + + GGML_API size_t ggml_set_scratch(struct ggml_context * ctx, struct ggml_scratch scratch); + + GGML_API struct ggml_tensor * ggml_new_tensor( + struct ggml_context * ctx, + enum ggml_type type, + int n_dims, + const int64_t *ne); + + GGML_API struct ggml_tensor * ggml_new_tensor_1d( + struct ggml_context * ctx, + enum ggml_type type, + int64_t ne0); + + GGML_API struct ggml_tensor * ggml_new_tensor_2d( + struct ggml_context * ctx, + enum ggml_type type, + int64_t ne0, + int64_t ne1); + + GGML_API struct ggml_tensor * ggml_new_tensor_3d( + struct ggml_context * ctx, + enum ggml_type type, + int64_t ne0, + int64_t ne1, + int64_t ne2); + + GGML_API struct ggml_tensor * ggml_new_tensor_4d( + struct ggml_context * ctx, + enum ggml_type type, + int64_t ne0, + int64_t ne1, + int64_t ne2, + int64_t ne3); + + GGML_API struct ggml_tensor * ggml_new_i32(struct ggml_context * ctx, int32_t value); + GGML_API struct ggml_tensor * ggml_new_f32(struct ggml_context * ctx, float value); + + GGML_API struct ggml_tensor * ggml_dup_tensor (struct ggml_context * ctx, const struct ggml_tensor * src); + GGML_API struct ggml_tensor * ggml_view_tensor(struct ggml_context * ctx, const struct ggml_tensor * src); + + GGML_API struct ggml_tensor * ggml_set_zero(struct ggml_tensor * tensor); + GGML_API struct ggml_tensor * ggml_set_i32 (struct ggml_tensor * tensor, int32_t value); + GGML_API struct ggml_tensor * ggml_set_f32 (struct ggml_tensor * tensor, float value); + + GGML_API int32_t ggml_get_i32_1d(const struct ggml_tensor * tensor, int i); + GGML_API void ggml_set_i32_1d(const struct ggml_tensor * tensor, int i, int32_t value); + + GGML_API float ggml_get_f32_1d(const struct ggml_tensor * tensor, int i); + GGML_API void ggml_set_f32_1d(const struct ggml_tensor * tensor, int i, float value); + + GGML_API void * ggml_get_data (const struct ggml_tensor * tensor); + GGML_API float * ggml_get_data_f32(const struct ggml_tensor * tensor); + + GGML_API const char * ggml_get_name(const struct ggml_tensor * tensor); + GGML_API void ggml_set_name(struct ggml_tensor * tensor, const char * name); + + // + // operations on tensors with backpropagation + // + + GGML_API struct ggml_tensor * ggml_dup( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_add( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_add_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_add1( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_acc( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t nb2, + size_t nb3, + size_t offset); + + GGML_API struct ggml_tensor * ggml_acc_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t nb2, + size_t nb3, + size_t offset); + + GGML_API struct ggml_tensor * ggml_sub( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_mul( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_div( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_sqr( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_sqrt( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_log( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_log_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // return scalar + GGML_API struct ggml_tensor * ggml_sum( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // sums along rows, with input shape [a,b,c,d] return shape [1,b,c,d] + GGML_API struct ggml_tensor * ggml_sum_rows( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // mean along rows + GGML_API struct ggml_tensor * ggml_mean( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // if a is the same shape as b, and a is not parameter, return a + // otherwise, return a new tensor: repeat(a) to fit in b + GGML_API struct ggml_tensor * ggml_repeat( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_abs( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_sgn( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_neg( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_step( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_relu( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // TODO: double-check this computation is correct + GGML_API struct ggml_tensor * ggml_gelu( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_silu( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // a - x + // b - dy + GGML_API struct ggml_tensor * ggml_silu_back( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // normalize along rows + // TODO: eps is hardcoded to 1e-5 for now + GGML_API struct ggml_tensor * ggml_norm( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_rms_norm( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // a - x + // b - dy + GGML_API struct ggml_tensor * ggml_rms_norm_back( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // A: m rows, n columns + // B: p rows, n columns (i.e. we transpose it internally) + // result is m columns, p rows + GGML_API struct ggml_tensor * ggml_mul_mat( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // + // operations on tensors without backpropagation + // + + GGML_API struct ggml_tensor * ggml_scale( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_scale_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // b -> view(a,offset,nb1,nb2,3), return modified a + GGML_API struct ggml_tensor * ggml_set( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t nb2, + size_t nb3, + size_t offset); + + // b -> view(a,offset,nb1,nb2,3), return view(a) + GGML_API struct ggml_tensor * ggml_set_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t nb2, + size_t nb3, + size_t offset); + + GGML_API struct ggml_tensor * ggml_set_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t offset); + + GGML_API struct ggml_tensor * ggml_set_1d_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t offset); + + // b -> view(a,offset,nb1,nb2,3), return modified a + GGML_API struct ggml_tensor * ggml_set_2d( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t offset); + + // b -> view(a,offset,nb1,nb2,3), return view(a) + GGML_API struct ggml_tensor * ggml_set_2d_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t offset); + + + // a -> b, return view(b) + GGML_API struct ggml_tensor * ggml_cpy( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // make contiguous + GGML_API struct ggml_tensor * ggml_cont( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // return view(a), b specifies the new shape + // TODO: when we start computing gradient, make a copy instead of view + GGML_API struct ggml_tensor * ggml_reshape( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // return view(a) + // TODO: when we start computing gradient, make a copy instead of view + GGML_API struct ggml_tensor * ggml_reshape_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0); + + GGML_API struct ggml_tensor * ggml_reshape_2d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1); + + // return view(a) + // TODO: when we start computing gradient, make a copy instead of view + GGML_API struct ggml_tensor * ggml_reshape_3d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2); + + GGML_API struct ggml_tensor * ggml_reshape_4d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2, + int64_t ne3); + + // offset in bytes + GGML_API struct ggml_tensor * ggml_view_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + size_t offset); + + GGML_API struct ggml_tensor * ggml_view_2d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + size_t nb1, // row stride in bytes + size_t offset); + + GGML_API struct ggml_tensor * ggml_view_3d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2, + size_t nb1, // row stride in bytes + size_t nb2, // slice stride in bytes + size_t offset); + + GGML_API struct ggml_tensor * ggml_view_4d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2, + int64_t ne3, + size_t nb1, // row stride in bytes + size_t nb2, // slice stride in bytes + size_t nb3, + size_t offset); + + GGML_API struct ggml_tensor * ggml_permute( + struct ggml_context * ctx, + struct ggml_tensor * a, + int axis0, + int axis1, + int axis2, + int axis3); + + // alias for ggml_permute(ctx, a, 1, 0, 2, 3) + GGML_API struct ggml_tensor * ggml_transpose( + struct ggml_context * ctx, + struct ggml_tensor * a); + + GGML_API struct ggml_tensor * ggml_get_rows( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_get_rows_back( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * c); + + GGML_API struct ggml_tensor * ggml_diag( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // set elements above the diagonal to -INF + GGML_API struct ggml_tensor * ggml_diag_mask_inf( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past); + + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_diag_mask_inf_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past); + + // set elements above the diagonal to 0 + GGML_API struct ggml_tensor * ggml_diag_mask_zero( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past); + + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_diag_mask_zero_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past); + + GGML_API struct ggml_tensor * ggml_soft_max( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_soft_max_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + + // rotary position embedding + // if mode & 1 == 1, skip n_past elements + // if mode & 2 == 1, GPT-NeoX style + // TODO: avoid creating a new tensor every time + GGML_API struct ggml_tensor * ggml_rope( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past, + int n_dims, + int mode); + + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_rope_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past, + int n_dims, + int mode); + + // rotary position embedding backward, i.e compute dx from dy + // a - dy + GGML_API struct ggml_tensor * ggml_rope_back( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past, + int n_dims, + int mode); + + // alibi position embedding + // in-place, returns view(a) + struct ggml_tensor * ggml_alibi( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past, + int n_head, + float bias_max); + + // clamp + // in-place, returns view(a) + struct ggml_tensor * ggml_clamp( + struct ggml_context * ctx, + struct ggml_tensor * a, + float min, + float max); + + // padding = 1 + // TODO: we don't support extra parameters for now + // that's why we are hard-coding the stride, padding, and dilation + // not great .. + GGML_API struct ggml_tensor * ggml_conv_1d_1s( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_conv_1d_2s( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_flash_attn( + struct ggml_context * ctx, + struct ggml_tensor * q, + struct ggml_tensor * k, + struct ggml_tensor * v, + bool masked); + + GGML_API struct ggml_tensor * ggml_flash_ff( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b0, + struct ggml_tensor * b1, + struct ggml_tensor * c0, + struct ggml_tensor * c1); + + // Mapping operations + typedef void (*ggml_unary_op_f32_t)(const int, float *, const float *); + typedef void (*ggml_binary_op_f32_t)(const int, float *, const float *, const float *); + + GGML_API struct ggml_tensor * ggml_map_unary_f32( + struct ggml_context * ctx, + struct ggml_tensor * a, + ggml_unary_op_f32_t fun); + + GGML_API struct ggml_tensor * ggml_map_binary_f32( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + ggml_binary_op_f32_t fun); + + // + // automatic differentiation + // + + GGML_API void ggml_set_param( + struct ggml_context * ctx, + struct ggml_tensor * tensor); + + GGML_API void ggml_build_forward_expand(struct ggml_cgraph * cgraph, struct ggml_tensor * tensor); + + GGML_API struct ggml_cgraph ggml_build_forward (struct ggml_tensor * tensor); + GGML_API struct ggml_cgraph ggml_build_backward(struct ggml_context * ctx, struct ggml_cgraph * gf, bool keep); + + GGML_API void ggml_graph_compute(struct ggml_context * ctx, struct ggml_cgraph * cgraph); + GGML_API void ggml_graph_reset (struct ggml_cgraph * cgraph); + + // print info and performance information for the graph + GGML_API void ggml_graph_print(const struct ggml_cgraph * cgraph); + + // dump the graph into a file using the dot format + GGML_API void ggml_graph_dump_dot(const struct ggml_cgraph * gb, const struct ggml_cgraph * gf, const char * filename); + + // + // optimization + // + + // optimization methods + enum ggml_opt_type { + GGML_OPT_ADAM, + GGML_OPT_LBFGS, + }; + + // linesearch methods + enum ggml_linesearch { + GGML_LINESEARCH_DEFAULT = 1, + + GGML_LINESEARCH_BACKTRACKING_ARMIJO = 0, + GGML_LINESEARCH_BACKTRACKING_WOLFE = 1, + GGML_LINESEARCH_BACKTRACKING_STRONG_WOLFE = 2, + }; + + // optimization return values + enum ggml_opt_result { + GGML_OPT_OK = 0, + GGML_OPT_DID_NOT_CONVERGE, + GGML_OPT_NO_CONTEXT, + GGML_OPT_INVALID_WOLFE, + GGML_OPT_FAIL, + + GGML_LINESEARCH_FAIL = -128, + GGML_LINESEARCH_MINIMUM_STEP, + GGML_LINESEARCH_MAXIMUM_STEP, + GGML_LINESEARCH_MAXIMUM_ITERATIONS, + GGML_LINESEARCH_INVALID_PARAMETERS, + }; + + // optimization parameters + // + // see ggml.c (ggml_opt_default_params) for default values + // + struct ggml_opt_params { + enum ggml_opt_type type; + + int n_threads; + + // delta-based convergence test + // + // if past == 0 - disabled + // if past > 0: + // stop if |f(x) - f(x_past)| < delta * max(1, |f(x)|) + // + int past; + float delta; + + // maximum number of iterations without improvement + // + // if 0 - disabled + // if > 0: + // assume convergence if no cost improvement in this number of iterations + // + int max_no_improvement; + + bool print_forward_graph; + bool print_backward_graph; + + // ADAM parameters + struct { + int n_iter; + + float alpha; // learning rate + float beta1; + float beta2; + float eps; // epsilon for numerical stability + float eps_f; // epsilon for convergence test + float eps_g; // epsilon for convergence test + } adam; + + // LBFGS parameters + struct { + int m; // number of corrections to approximate the inv. Hessian + int n_iter; + int max_linesearch; + + float eps; // convergence tolerance + float ftol; // line search tolerance + float wolfe; + float min_step; + float max_step; + + enum ggml_linesearch linesearch; + } lbfgs; + }; + + GGML_API struct ggml_opt_params ggml_opt_default_params(enum ggml_opt_type type); + + // optimize the function defined by the tensor f + GGML_API enum ggml_opt_result ggml_opt( + struct ggml_context * ctx, + struct ggml_opt_params params, + struct ggml_tensor * f); + + // + // quantization + // + + GGML_API size_t ggml_quantize_q4_0(const float * src, void * dst, int n, int k, int64_t * hist); + GGML_API size_t ggml_quantize_q4_1(const float * src, void * dst, int n, int k, int64_t * hist); + GGML_API size_t ggml_quantize_q5_0(const float * src, void * dst, int n, int k, int64_t * hist); + GGML_API size_t ggml_quantize_q5_1(const float * src, void * dst, int n, int k, int64_t * hist); + GGML_API size_t ggml_quantize_q8_0(const float * src, void * dst, int n, int k, int64_t * hist); + + GGML_API size_t ggml_quantize_chunk(enum ggml_type type, const float * src, void * dst, int start, int n, int64_t * hist); + + // + // system info + // + + GGML_API int ggml_cpu_has_avx (void); + GGML_API int ggml_cpu_has_avx2 (void); + GGML_API int ggml_cpu_has_avx512 (void); + GGML_API int ggml_cpu_has_avx512_vbmi(void); + GGML_API int ggml_cpu_has_avx512_vnni(void); + GGML_API int ggml_cpu_has_fma (void); + GGML_API int ggml_cpu_has_neon (void); + GGML_API int ggml_cpu_has_arm_fma (void); + GGML_API int ggml_cpu_has_f16c (void); + GGML_API int ggml_cpu_has_fp16_va (void); + GGML_API int ggml_cpu_has_wasm_simd (void); + GGML_API int ggml_cpu_has_blas (void); + GGML_API int ggml_cpu_has_cublas (void); + GGML_API int ggml_cpu_has_clblast (void); + GGML_API int ggml_cpu_has_gpublas (void); + GGML_API int ggml_cpu_has_sse3 (void); + GGML_API int ggml_cpu_has_vsx (void); + + // + // Internal types and functions exposed for tests and benchmarks + // + +#ifdef __cplusplus + // restrict not standard in C++ +#define GGML_RESTRICT +#else +#define GGML_RESTRICT restrict +#endif + typedef void (*dequantize_row_q_t)(const void * GGML_RESTRICT x, float * GGML_RESTRICT y, int k); + typedef void (*quantize_row_q_t) (const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int k); + typedef void (*vec_dot_q_t) (const int n, float * GGML_RESTRICT s, const void * GGML_RESTRICT x, const void * GGML_RESTRICT y); + + typedef struct { + dequantize_row_q_t dequantize_row_q; + quantize_row_q_t quantize_row_q; + quantize_row_q_t quantize_row_q_reference; + quantize_row_q_t quantize_row_q_dot; + vec_dot_q_t vec_dot_q; + enum ggml_type vec_dot_type; + } quantize_fns_t; + + quantize_fns_t ggml_internal_get_quantize_fn(size_t i); + +#ifdef __cplusplus +} +#endif diff --git a/ggml_old/scripts/sync-llama.sh b/ggml_old/scripts/sync-llama.sh new file mode 100755 index 0000000..85c45ba --- /dev/null +++ b/ggml_old/scripts/sync-llama.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +cp -rpv ../llama.cpp/ggml.c src/ggml.c +cp -rpv ../llama.cpp/ggml-cuda.h src/ggml-cuda.h +cp -rpv ../llama.cpp/ggml-cuda.cu src/ggml-cuda.cu +cp -rpv ../llama.cpp/ggml-opencl.h src/ggml-opencl.h +cp -rpv ../llama.cpp/ggml-opencl.c src/ggml-opencl.c +cp -rpv ../llama.cpp/ggml.h include/ggml/ggml.h diff --git a/ggml_old/scripts/sync-whisper.sh b/ggml_old/scripts/sync-whisper.sh new file mode 100755 index 0000000..df69513 --- /dev/null +++ b/ggml_old/scripts/sync-whisper.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +cp -rpv ../whisper.cpp/ggml.c src/ggml.c +cp -rpv ../whisper.cpp/ggml-cuda.h src/ggml-cuda.h +cp -rpv ../whisper.cpp/ggml-cuda.cu src/ggml-cuda.cu +cp -rpv ../whisper.cpp/ggml-opencl.h src/ggml-opencl.h +cp -rpv ../whisper.cpp/ggml-opencl.c src/ggml-opencl.c +cp -rpv ../whisper.cpp/ggml.h include/ggml/ggml.h +cp -rpv ../whisper.cpp/examples/common.h examples/common.h +cp -rpv ../whisper.cpp/examples/common.cpp examples/common.cpp +cp -rpv ../whisper.cpp/examples/common-ggml.h examples/common-ggml.h +cp -rpv ../whisper.cpp/examples/common-ggml.cpp examples/common-ggml.cpp +cp -rpv ../whisper.cpp/whisper.h examples/whisper/whisper.h +cp -rpv ../whisper.cpp/whisper.cpp examples/whisper/whisper.cpp +cp -rpv ../whisper.cpp/examples/main/main.cpp examples/whisper/main.cpp +cp -rpv ../whisper.cpp/examples/quantize/quantize.cpp examples/whisper/quantize.cpp diff --git a/ggml_old/src/CMakeLists.txt b/ggml_old/src/CMakeLists.txt new file mode 100644 index 0000000..26f14b1 --- /dev/null +++ b/ggml_old/src/CMakeLists.txt @@ -0,0 +1,241 @@ +if (GGML_ALL_WARNINGS) + if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang") + #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} \ + -Wall \ + -Wextra \ + -Wpedantic \ + -Wshadow \ + -Wcast-qual \ + -Wstrict-prototypes \ + -Wpointer-arith \ + -Wdouble-promotion \ + -Wno-unused-function \ + ") + else() + # todo : windows + endif() +endif() + +# compiler flags + +if (NOT MSVC) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=vla") + #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-math-errno -ffinite-math-only -funsafe-math-optimizations") +endif() + +message(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") + +if (NOT UNAME_S) + execute_process(COMMAND uname -s OUTPUT_VARIABLE UNAME_S) +endif() +if (NOT UNAME_P) + execute_process(COMMAND uname -p OUTPUT_VARIABLE UNAME_P) +endif() +if (NOT UNAME_M) + execute_process(COMMAND uname -m OUTPUT_VARIABLE UNAME_M) +endif() +#message(STATUS "UNAME_S: ${UNAME_S} UNAME_P: ${UNAME_P} UNAME_M: ${UNAME_M}") + +# Mac OS + Arm can report x86_64 +# ref: https://github.com/ggerganov/whisper.cpp/issues/66#issuecomment-1282546789 +if (UNAME_S MATCHES "Darwin") + if (NOT UNAME_P MATCHES "arm") + execute_process(COMMAND sysctl -n hw.optional.arm64 OUTPUT_VARIABLE SYSCTL_M) + if (SYSCTL_M MATCHES "1") + #set(UNAME_P "arm") + #set(UNAME_M "arm64") + message(WARNING "Your arch is announced as x86_64, but it seems to actually be ARM64. Not fixing that can lead to bad performance. For more info see: https://github.com/ggerganov/whisper.cpp/issues/66\#issuecomment-#1282546789") + endif() + endif() +endif() + +if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm" OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch64") + message(STATUS "ARM detected") + #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mcpu=apple-m1") +else() + message(STATUS "x86 detected") + #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx -mavx2 -mfma -mf16c") + if (UNAME_S MATCHES "Darwin") + execute_process(COMMAND sysctl machdep.cpu.features OUTPUT_VARIABLE AVX1_M) + if (AVX1_M MATCHES "AVX1.0") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx") + endif() + execute_process(COMMAND sysctl machdep.cpu.leaf7_features OUTPUT_VARIABLE AVX2_M) + if (AVX2_M MATCHES "AVX2") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx2") + endif() + if (AVX1_M MATCHES "FMA") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfma") + endif() + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mf16c") + elseif (UNAME_S MATCHES "Linux") + message(STATUS "Linux detected") + execute_process(COMMAND grep "avx " /proc/cpuinfo OUTPUT_VARIABLE AVX1_M) + if (AVX1_M MATCHES "avx") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx") + endif() + execute_process(COMMAND grep "avx2 " /proc/cpuinfo OUTPUT_VARIABLE AVX2_M) + if (AVX2_M MATCHES "avx2") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx2") + endif() + execute_process(COMMAND grep "fma " /proc/cpuinfo OUTPUT_VARIABLE FMA_M) + if (FMA_M MATCHES "fma") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfma") + endif() + execute_process(COMMAND grep "f16c " /proc/cpuinfo OUTPUT_VARIABLE F16C_M) + if (F16C_M MATCHES "f16c") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mf16c") + endif() + execute_process(COMMAND grep "sse3 " /proc/cpuinfo OUTPUT_VARIABLE SSE3_M) + if (SSE3_M MATCHES "sse3") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse3") + endif() + elseif (UNAME_S MATCHES "Haiku") + message(STATUS "Haiku detected") + execute_process(COMMAND sysinfo -cpu COMMAND grep "AVX " OUTPUT_VARIABLE AVX1_M) + if (AVX1_M MATCHES "avx") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx") + endif() + execute_process(COMMAND sysinfo -cpu COMMAND grep "AVX2 " OUTPUT_VARIABLE AVX2_M) + if (AVX2_M MATCHES "avx2") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx2") + endif() + execute_process(COMMAND sysinfo -cpu COMMAND grep "FMA " OUTPUT_VARIABLE FMA_M) + if (FMA_M MATCHES "fma") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfma") + endif() + execute_process(COMMAND sysinfo -cpu COMMAND grep "F16C " OUTPUT_VARIABLE F16C_M) + if (F16C_M MATCHES "f16c") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mf16c") + endif() + else() + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfma -mf16c -mavx -mavx2") + endif() +endif() + + +# ggml + +set(TARGET ggml) + +# on APPLE - include Accelerate framework +if (APPLE AND NOT GGML_NO_ACCELERATE) + find_library(ACCELERATE_FRAMEWORK Accelerate) + if (ACCELERATE_FRAMEWORK) + message(STATUS "Accelerate framework found") + + set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} ${ACCELERATE_FRAMEWORK}) + set(GGML_EXTRA_FLAGS ${GGML_EXTRA_FLAGS} -DGGML_USE_ACCELERATE) + else() + message(WARNING "Accelerate framework not found") + endif() +endif() + +if (GGML_OPENBLAS) + set(OPENBLAS_INCLUDE_SEARCH_PATHS + /usr/include + /usr/include/openblas + /usr/include/openblas-base + /usr/local/include + /usr/local/include/openblas + /usr/local/include/openblas-base + /opt/OpenBLAS/include + $ENV{OpenBLAS_HOME} + $ENV{OpenBLAS_HOME}/include + ) + find_path(OPENBLAS_INC NAMES cblas.h PATHS ${OPENBLAS_INCLUDE_SEARCH_PATHS}) + find_library(OPENBLAS_LIB NAMES openblas libopenblas) + if (OPENBLAS_LIB) + message(STATUS "OpenBLAS found") + + set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} ${OPENBLAS_LIB}) + set(GGML_EXTRA_INCS ${GGML_EXTRA_INCS} ${OPENBLAS_INC}) + set(GGML_EXTRA_FLAGS ${GGML_EXTRA_FLAGS} -DGGML_USE_OPENBLAS) + else() + message(WARNING "OpenBLAS not found") + endif() +endif() + +if (GGML_CUBLAS) + cmake_minimum_required(VERSION 3.17) + + find_package(CUDAToolkit) + if (CUDAToolkit_FOUND) + message(STATUS "cuBLAS found") + + enable_language(CUDA) + + set(GGML_CUDA_SOURCES ggml-cuda.cu ggml-cuda.h) + + add_compile_definitions(GGML_USE_CUBLAS) + + if (GGML_STATIC) + set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} CUDA::cudart_static CUDA::cublas_static CUDA::cublasLt_static) + else() + set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} CUDA::cudart CUDA::cublas CUDA::cublasLt) + endif() + + else() + message(WARNING "cuBLAS not found") + endif() +endif() + + +if (GGML_PERF) + set(GGML_EXTRA_FLAGS ${GGML_EXTRA_FLAGS} -DGGML_PERF) +endif() + +add_library(${TARGET} + ggml.c + ../include/ggml/ggml.h + ${GGML_CUDA_SOURCES}) + +target_include_directories(${TARGET} PUBLIC + . + ../include + ../include/ggml + ${GGML_EXTRA_INCS} + ) + +if (MSVC) + target_link_libraries(${TARGET} PUBLIC ${GGML_EXTRA_LIBS} ${CMAKE_THREAD_LIBS_INIT}) +else() + target_link_libraries(${TARGET} PUBLIC m ${GGML_EXTRA_LIBS} ${CMAKE_THREAD_LIBS_INIT}) +endif() + +if (BUILD_SHARED_LIBS) + target_link_libraries(${TARGET} PUBLIC + ${CMAKE_DL_LIBS} + ) + + target_compile_definitions(${TARGET} PUBLIC + GGML_SHARED + ) + + target_compile_definitions(${TARGET} PRIVATE + GGML_BUILD + ) +endif() + +target_compile_definitions(${TARGET} PUBLIC + ${GGML_EXTRA_FLAGS} + ) + +if (MINGW) + target_link_libraries(${TARGET} PUBLIC + stdc++ + ) +endif() + +if (GGML_CUDA_SOURCES) + message(STATUS "GGML CUDA sources found, configuring CUDA architecture") + set_property(TARGET ggml PROPERTY CUDA_ARCHITECTURES OFF) + set_property(TARGET ggml PROPERTY CUDA_SELECT_NVCC_ARCH_FLAGS "Auto") + target_link_libraries(ggml PUBLIC stdc++) +endif() + +install(TARGETS ${TARGET} + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib/static + ) diff --git a/ggml_old/src/ggml-cuda.cu b/ggml_old/src/ggml-cuda.cu new file mode 100644 index 0000000..35d2e45 --- /dev/null +++ b/ggml_old/src/ggml-cuda.cu @@ -0,0 +1,925 @@ +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "ggml-cuda.h" +#include "ggml.h" + +static_assert(sizeof(half) == sizeof(ggml_fp16_t), "wrong fp16 size"); + +#define CUDA_CHECK(err) \ + do { \ + cudaError_t err_ = (err); \ + if (err_ != cudaSuccess) { \ + fprintf(stderr, "CUDA error %d at %s:%d: %s\n", err_, __FILE__, __LINE__, \ + cudaGetErrorString(err_)); \ + exit(1); \ + } \ + } while (0) + +#define CUBLAS_CHECK(err) \ + do { \ + cublasStatus_t err_ = (err); \ + if (err_ != CUBLAS_STATUS_SUCCESS) { \ + fprintf(stderr, "cuBLAS error %d at %s:%d\n", err_, __FILE__, __LINE__); \ + exit(1); \ + } \ + } while (0) + +typedef void (*dequantize_kernel_t)(const void * vx, const int ib, const int iqs, float & v0, float & v1); +typedef void (*to_fp32_cuda_t)(const void * x, float * y, int k, cudaStream_t stream); +typedef void (*dequantize_mul_mat_vec_cuda_t)(const void * vx, const float * y, float * dst, const int ncols, const int nrows, cudaStream_t stream); + +// QK = number of values after dequantization +// QR = QK / number of values before dequantization + +#define QK4_0 32 +#define QR4_0 2 +typedef struct { + half d; // delta + uint8_t qs[QK4_0 / 2]; // nibbles / quants +} block_q4_0; +static_assert(sizeof(block_q4_0) == sizeof(ggml_fp16_t) + QK4_0 / 2, "wrong q4_0 block size/padding"); + +#define QK4_1 32 +#define QR4_1 2 +typedef struct { + half d; // delta + half m; // min + uint8_t qs[QK4_1 / 2]; // nibbles / quants +} block_q4_1; +static_assert(sizeof(block_q4_1) == sizeof(ggml_fp16_t) * 2 + QK4_1 / 2, "wrong q4_1 block size/padding"); + +#define QK5_0 32 +#define QR5_0 2 +typedef struct { + half d; // delta + uint8_t qh[4]; // 5-th bit of quants + uint8_t qs[QK5_0 / 2]; // nibbles / quants +} block_q5_0; +static_assert(sizeof(block_q5_0) == sizeof(ggml_fp16_t) + sizeof(uint32_t) + QK5_0 / 2, "wrong q5_0 block size/padding"); + +#define QK5_1 32 +#define QR5_1 2 +typedef struct { + half d; // delta + half m; // min + uint8_t qh[4]; // 5-th bit of quants + uint8_t qs[QK5_1 / 2]; // nibbles / quants +} block_q5_1; +static_assert(sizeof(block_q5_1) == 2 * sizeof(ggml_fp16_t) + sizeof(uint32_t) + QK5_1 / 2, "wrong q5_1 block size/padding"); + +#define QK8_0 32 +#define QR8_0 1 +typedef struct { + half d; // delta + int8_t qs[QK8_0]; // quants +} block_q8_0; +static_assert(sizeof(block_q8_0) == sizeof(ggml_fp16_t) + QK8_0, "wrong q8_0 block size/padding"); + +#define CUDA_MUL_BLOCK_SIZE 256 +#define CUDA_DEQUANTIZE_BLOCK_SIZE 256 +#define CUDA_DMMV_BLOCK_SIZE 32 // dmmv = dequantize_mul_mat_vec + +static __global__ void mul_f32(const float * x, const float * y, float * dst, const int kx, const int ky) { + const int i = blockDim.x*blockIdx.x + threadIdx.x; + + if (i >= kx) { + return; + } + dst[i] = x[i] * y[i%ky]; +} + +static __device__ void dequantize_q4_0(const void * vx, const int ib, const int iqs, float & v0, float & v1){ + const block_q4_0 * x = (const block_q4_0 *) vx; + + const float d = x[ib].d; + + const uint8_t vui = x[ib].qs[iqs]; + + const int8_t vi0 = vui & 0xF; + const int8_t vi1 = vui >> 4; + + v0 = (vi0 - 8)*d; + v1 = (vi1 - 8)*d; +} + +static __device__ void dequantize_q4_1(const void * vx, const int ib, const int iqs, float & v0, float & v1){ + const block_q4_1 * x = (const block_q4_1 *) vx; + + const float d = x[ib].d; + const float m = x[ib].m; + + const uint8_t vui = x[ib].qs[iqs]; + + const int8_t vi0 = vui & 0xF; + const int8_t vi1 = vui >> 4; + + v0 = vi0*d + m; + v1 = vi1*d + m; +} + +static __device__ void dequantize_q5_0(const void * vx, const int ib, const int iqs, float & v0, float & v1){ + const block_q5_0 * x = (const block_q5_0 *) vx; + + const float d = x[ib].d; + + uint32_t qh; + memcpy(&qh, x[ib].qh, sizeof(qh)); + + const uint8_t xh_0 = ((qh >> (iqs + 0)) << 4) & 0x10; + const uint8_t xh_1 = ((qh >> (iqs + 12)) ) & 0x10; + + const int32_t x0 = ((x[ib].qs[iqs] & 0xf) | xh_0) - 16; + const int32_t x1 = ((x[ib].qs[iqs] >> 4) | xh_1) - 16; + + v0 = x0*d; + v1 = x1*d; +} + +static __device__ void dequantize_q5_1(const void * vx, const int ib, const int iqs, float & v0, float & v1){ + const block_q5_1 * x = (const block_q5_1 *) vx; + + const float d = x[ib].d; + const float m = x[ib].m; + + uint32_t qh; + memcpy(&qh, x[ib].qh, sizeof(qh)); + + const uint8_t xh_0 = ((qh >> (iqs + 0)) << 4) & 0x10; + const uint8_t xh_1 = ((qh >> (iqs + 12)) ) & 0x10; + + const int32_t x0 = ((x[ib].qs[iqs] & 0xf) | xh_0); + const int32_t x1 = ((x[ib].qs[iqs] >> 4) | xh_1); + + v0 = x0*d + m; + v1 = x1*d + m; +} + +static __device__ void dequantize_q8_0(const void * vx, const int ib, const int iqs, float & v0, float & v1){ + const block_q8_0 * x = (const block_q8_0 *) vx; + + const float d = x[ib].d; + + const int8_t vi0 = x[ib].qs[iqs + 0]; + const int8_t vi1 = x[ib].qs[iqs + 1]; + + v0 = vi0*d; + v1 = vi1*d; +} + +static __device__ void convert_f16(const void * vx, const int ib, const int iqs, float & v0, float & v1){ + const half * x = (const half *) vx; + + v0 = __half2float(x[ib + 0]); + v1 = __half2float(x[ib + 1]); +} + +template +static __global__ void dequantize_block(const void * vx, float * y, const int k) { + const int i = blockDim.x*blockIdx.x + 2*threadIdx.x; + + if (i >= k) { + return; + } + + const int ib = i/qk; // block index + const int iqs = (i%qk)/qr; // quant index + const int iybs = i - i%qk; // y block start index + const int y_offset = qr == 1 ? 1 : qk/2; + + // dequantize + float & v0 = y[iybs + iqs + 0]; + float & v1 = y[iybs + iqs + y_offset]; + dequantize_kernel(vx, ib, iqs, v0, v1); +} + +template +static __global__ void dequantize_mul_mat_vec(const void * vx, const float * y, float * dst, const int ncols) { + const int row = blockIdx.x; + const int tid = threadIdx.x; + + const int y_offset = qr == 1 ? 1 : qk/2; + + __shared__ float tmp[block_size]; // separate sum for each thread + tmp[tid] = 0; + + for (int i = 0; i < ncols/block_size; i += 2) { + const int col = i*block_size + 2*tid; + const int ib = (row*ncols + col)/qk; // block index + const int iqs = (col%qk)/qr; // quant index + const int iybs = col - col%qk; // y block start index + + // dequantize + float v0, v1; + dequantize_kernel(vx, ib, iqs, v0, v1); + + // matrix multiplication + tmp[tid] += v0 * y[iybs + iqs + 0]; + tmp[tid] += v1 * y[iybs + iqs + y_offset]; + } + + // sum up partial sums and write back result + __syncthreads(); + for (int s=block_size/2; s>0; s>>=1) { + if (tid < s) { + tmp[tid] += tmp[tid + s]; + } + __syncthreads(); + } + if (tid == 0) { + dst[row] = tmp[0]; + } +} + +static void mul_f32_cuda(const float * x, const float * y, float * dst, const int kx, const int ky, cudaStream_t stream) { + const int num_blocks = (kx + CUDA_MUL_BLOCK_SIZE - 1) / CUDA_MUL_BLOCK_SIZE; + mul_f32<<>>(x, y, dst, kx, ky); +} + +static void dequantize_row_q4_0_cuda(const void * vx, float * y, const int k, cudaStream_t stream) { + const int num_blocks = (k + CUDA_DEQUANTIZE_BLOCK_SIZE - 1) / CUDA_DEQUANTIZE_BLOCK_SIZE; + dequantize_block<<>>(vx, y, k); +} + +static void dequantize_row_q4_1_cuda(const void * vx, float * y, const int k, cudaStream_t stream) { + const int num_blocks = (k + CUDA_DEQUANTIZE_BLOCK_SIZE - 1) / CUDA_DEQUANTIZE_BLOCK_SIZE; + dequantize_block<<>>(vx, y, k); +} + +static void dequantize_row_q5_0_cuda(const void * vx, float * y, const int k, cudaStream_t stream) { + const int num_blocks = (k + CUDA_DEQUANTIZE_BLOCK_SIZE - 1) / CUDA_DEQUANTIZE_BLOCK_SIZE; + dequantize_block<<>>(vx, y, k); +} + +static void dequantize_row_q5_1_cuda(const void * vx, float * y, const int k, cudaStream_t stream) { + const int num_blocks = (k + CUDA_DEQUANTIZE_BLOCK_SIZE - 1) / CUDA_DEQUANTIZE_BLOCK_SIZE; + dequantize_block<<>>(vx, y, k); +} + +static void dequantize_row_q8_0_cuda(const void * vx, float * y, const int k, cudaStream_t stream) { + const int num_blocks = (k + CUDA_DEQUANTIZE_BLOCK_SIZE - 1) / CUDA_DEQUANTIZE_BLOCK_SIZE; + dequantize_block<<>>(vx, y, k); +} + +static void dequantize_mul_mat_vec_q4_0_cuda(const void * vx, const float * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) { + GGML_ASSERT(ncols % CUDA_DMMV_BLOCK_SIZE == 0); + dequantize_mul_mat_vec + <<>>(vx, y, dst, ncols); +} + +static void dequantize_mul_mat_vec_q4_1_cuda(const void * vx, const float * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) { + GGML_ASSERT(ncols % CUDA_DMMV_BLOCK_SIZE == 0); + dequantize_mul_mat_vec + <<>>(vx, y, dst, ncols); +} + +static void dequantize_mul_mat_vec_q5_0_cuda(const void * vx, const float * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) { + GGML_ASSERT(ncols % CUDA_DMMV_BLOCK_SIZE == 0); + dequantize_mul_mat_vec + <<>>(vx, y, dst, ncols); +} + +static void dequantize_mul_mat_vec_q5_1_cuda(const void * vx, const float * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) { + GGML_ASSERT(ncols % CUDA_DMMV_BLOCK_SIZE == 0); + dequantize_mul_mat_vec + <<>>(vx, y, dst, ncols); +} + +static void dequantize_mul_mat_vec_q8_0_cuda(const void * vx, const float * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) { + GGML_ASSERT(ncols % CUDA_DMMV_BLOCK_SIZE == 0); + dequantize_mul_mat_vec + <<>>(vx, y, dst, ncols); +} + +static void convert_fp16_to_fp32_cuda(const void * vx, float * y, const int k, cudaStream_t stream) { + const int num_blocks = (k + CUDA_DEQUANTIZE_BLOCK_SIZE - 1) / CUDA_DEQUANTIZE_BLOCK_SIZE; + dequantize_block<32, 1, convert_f16><<>>(vx, y, k); +} + +static void convert_mul_mat_vec_f16_cuda(const void * vx, const float * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) { + GGML_ASSERT(ncols % CUDA_DMMV_BLOCK_SIZE == 0); + dequantize_mul_mat_vec + <<>>(vx, y, dst, ncols); +} + +static to_fp32_cuda_t ggml_get_to_fp32_cuda(ggml_type type) { + switch (type) { + case GGML_TYPE_Q4_0: + return dequantize_row_q4_0_cuda; + case GGML_TYPE_Q4_1: + return dequantize_row_q4_1_cuda; + case GGML_TYPE_Q5_0: + return dequantize_row_q5_0_cuda; + case GGML_TYPE_Q5_1: + return dequantize_row_q5_1_cuda; + case GGML_TYPE_Q8_0: + return dequantize_row_q8_0_cuda; + case GGML_TYPE_F16: + return convert_fp16_to_fp32_cuda; + default: + return nullptr; + } +} + +static dequantize_mul_mat_vec_cuda_t ggml_get_dequantize_mul_mat_vec_cuda(ggml_type type) { + switch (type) { + case GGML_TYPE_Q4_0: + return dequantize_mul_mat_vec_q4_0_cuda; + case GGML_TYPE_Q4_1: + return dequantize_mul_mat_vec_q4_1_cuda; + case GGML_TYPE_Q5_0: + return dequantize_mul_mat_vec_q5_0_cuda; + case GGML_TYPE_Q5_1: + return dequantize_mul_mat_vec_q5_1_cuda; + case GGML_TYPE_Q8_0: + return dequantize_mul_mat_vec_q8_0_cuda; + case GGML_TYPE_F16: + return convert_mul_mat_vec_f16_cuda; + default: + return nullptr; + } +} + +// buffer pool for cuda +#define MAX_CUDA_BUFFERS 256 + +struct scoped_spin_lock { + std::atomic_flag& lock; + scoped_spin_lock(std::atomic_flag& lock) : lock(lock) { + while (lock.test_and_set(std::memory_order_acquire)) { + ; // spin + } + } + ~scoped_spin_lock() { + lock.clear(std::memory_order_release); + } + scoped_spin_lock(const scoped_spin_lock&) = delete; + scoped_spin_lock& operator=(const scoped_spin_lock&) = delete; +}; + +struct cuda_buffer { + void * ptr = nullptr; + size_t size = 0; +}; + +static cuda_buffer g_cuda_buffer_pool[MAX_CUDA_BUFFERS]; +static std::atomic_flag g_cuda_pool_lock = ATOMIC_FLAG_INIT; + +static void * ggml_cuda_pool_malloc(size_t size, size_t * actual_size) { + scoped_spin_lock lock(g_cuda_pool_lock); + + for (int i = 0; i < MAX_CUDA_BUFFERS; ++i) { + cuda_buffer& b = g_cuda_buffer_pool[i]; + if (b.size >= size && b.ptr != nullptr) { + void * ptr = b.ptr; + *actual_size = b.size; + b.ptr = nullptr; + b.size = 0; + return ptr; + } + } + void * ptr; + CUDA_CHECK(cudaMalloc((void **) &ptr, size)); + *actual_size = size; + return ptr; +} + +static void ggml_cuda_pool_free(void * ptr, size_t size) { + scoped_spin_lock lock(g_cuda_pool_lock); + + for (int i = 0; i < MAX_CUDA_BUFFERS; ++i) { + cuda_buffer& b = g_cuda_buffer_pool[i]; + if (b.ptr == nullptr) { + b.ptr = ptr; + b.size = size; + return; + } + } + fprintf(stderr, "WARNING: cuda buffer pool full, increase MAX_CUDA_BUFFERS\n"); + CUDA_CHECK(cudaFree(ptr)); +} + +#define GGML_CUDA_MAX_STREAMS 8 // Set this to 1 for reproducible matrix multiplication. +#define GGML_CUDA_MAX_EVENTS 64 +static cublasHandle_t g_cublasH = nullptr; +static cudaStream_t g_cudaStreams[GGML_CUDA_MAX_STREAMS] = { nullptr }; +static cudaStream_t g_cudaStreams2[GGML_CUDA_MAX_STREAMS] = { nullptr }; +static cudaEvent_t g_cudaEvents[GGML_CUDA_MAX_EVENTS] = { nullptr }; + +void ggml_init_cublas() { + if (g_cublasH == nullptr) { + // create streams + for (int i = 0; i < GGML_CUDA_MAX_STREAMS; ++i) { + CUDA_CHECK(cudaStreamCreateWithFlags(&g_cudaStreams[i], cudaStreamNonBlocking)); + CUDA_CHECK(cudaStreamCreateWithFlags(&g_cudaStreams2[i], cudaStreamNonBlocking)); + } + // create events + for (int i = 0; i < GGML_CUDA_MAX_EVENTS; ++i) { + CUDA_CHECK(cudaEventCreateWithFlags(&g_cudaEvents[i], cudaEventDisableTiming)); + } + + // create cublas handle + CUBLAS_CHECK(cublasCreate(&g_cublasH)); + CUBLAS_CHECK(cublasSetMathMode(g_cublasH, CUBLAS_TF32_TENSOR_OP_MATH)); + + // configure logging to stdout + // CUBLAS_CHECK(cublasLoggerConfigure(1, 1, 0, nullptr)); + } +} + +void * ggml_cuda_host_malloc(size_t size) { + if (getenv("GGML_CUDA_NO_PINNED") != nullptr) { + return nullptr; + } + + void * ptr = nullptr; + cudaError_t err = cudaMallocHost((void **) &ptr, size); + if (err != cudaSuccess) { + fprintf(stderr, "WARNING: failed to allocate %.2f MB of pinned memory: %s\n", + size/1024.0/1024.0, cudaGetErrorString(err)); + return nullptr; + } + + return ptr; +} + +void ggml_cuda_host_free(void * ptr) { + CUDA_CHECK(cudaFreeHost(ptr)); +} + +static cudaError_t ggml_cuda_h2d_tensor_2d(void * dst, const struct ggml_tensor * src, uint64_t i3, uint64_t i2, cudaStream_t stream) { + const uint64_t ne0 = src->ne[0]; + const uint64_t ne1 = src->ne[1]; + const uint64_t nb0 = src->nb[0]; + const uint64_t nb1 = src->nb[1]; + const uint64_t nb2 = src->nb[2]; + const uint64_t nb3 = src->nb[3]; + const enum ggml_type type = src->type; + const size_t ts = ggml_type_size(type); + const size_t bs = ggml_blck_size(type); + + const void * x = (const void *) ((const char *) src->data + i2*nb2 + i3*nb3); + if (nb0 == ts && nb1 == ts*ne0/bs) { + return cudaMemcpyAsync(dst, x, ne1*nb1, cudaMemcpyHostToDevice, stream); + } else if (nb0 == ts) { + return cudaMemcpy2DAsync(dst, ts*ne0/bs, x, nb1, ts*ne0/bs, ne1, cudaMemcpyHostToDevice, stream); + } else { + for (uint64_t i1 = 0; i1 < ne1; i1++) { + const void * rx = (const void *) ((const char *) x + i1*nb1); + void * rd = (void *) ((char *) dst + i1*ts*ne0/bs); + // pretend the row is a matrix with cols=1 + cudaError_t r = cudaMemcpy2DAsync(rd, ts/bs, rx, nb0, ts/bs, ne0, cudaMemcpyHostToDevice, stream); + if (r != cudaSuccess) return r; + } + return cudaSuccess; + } +} + +static void ggml_cuda_mul_f32(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { + GGML_ASSERT(src1->backend == GGML_BACKEND_CUDA); + const int64_t ne00 = src0->ne[0]; + const int64_t ne01 = src0->ne[1]; + const int64_t ne02 = src0->ne[2]; + const int64_t ne03 = src0->ne[2]; + const int64_t ne0 = ne00 * ne01 * ne02 * ne03; + const int64_t ne10 = src1->ne[0]; + const int64_t ne11 = src1->ne[1]; + const int64_t ne12 = src1->ne[2]; + const int64_t ne13 = src1->ne[3]; + const int nb2 = dst->nb[2]; + const int nb3 = dst->nb[3]; + size_t x_size, d_size; + + float * d_X = (float *) ggml_cuda_pool_malloc(ne0 * sizeof(float), &x_size); // src0 + float * d_Y = (float *) src1->data; // src1 is already on device, broadcasted. + float * d_D = (float *) ggml_cuda_pool_malloc(ne0 * sizeof(float), &d_size); // dst + + for (int64_t i03 = 0; i03 < ne03; i03++) { + for (int64_t i02 = 0; i02 < ne02; i02++) { + const int i0 = i03*ne02 + i02; + float * c_X2 = d_X + i0*ne01*ne00; + float * c_D2 = d_D + i0*ne01*ne00; + + cudaStream_t cudaStream = g_cudaStreams[i0 % GGML_CUDA_MAX_STREAMS]; + cudaStream_t cudaStream2 = g_cudaStreams2[i0 % GGML_CUDA_MAX_STREAMS]; + cudaEvent_t cudaEvent = g_cudaEvents[i0 % GGML_CUDA_MAX_EVENTS]; + + // copy src0 to device + CUDA_CHECK(ggml_cuda_h2d_tensor_2d(c_X2, src0, i03, i02, cudaStream2)); + CUDA_CHECK(cudaEventRecord(cudaEvent, cudaStream2)); + + // wait for data + CUDA_CHECK(cudaStreamWaitEvent(cudaStream, cudaEvent, 0)); + + for (int64_t i01 = 0; i01 < ne01; i01++) { + const int64_t i13 = i03%ne13; + const int64_t i12 = i02%ne12; + const int64_t i11 = i01%ne11; + const int i1 = i13*ne12*ne11 + i12*ne11 + i11; + + float * c_X1 = c_X2 + i01*ne00; + float * c_Y = d_Y + i1*ne10; + float * c_D1 = c_D2 + i01*ne00; + + // compute + mul_f32_cuda(c_X1, c_Y, c_D1, ne00, ne10, cudaStream); + CUDA_CHECK(cudaGetLastError()); + } + + // copy dst to host + float * d = (float *) ((char *) dst->data + i02*nb2 + i03*nb3); + CUDA_CHECK(cudaMemcpyAsync(d, c_D2, sizeof(float)*ne00*ne01, cudaMemcpyDeviceToHost, cudaStream)); + } + } + CUDA_CHECK(cudaDeviceSynchronize()); + ggml_cuda_pool_free(d_X, x_size); + ggml_cuda_pool_free(d_D, d_size); +} + +static void ggml_cuda_mul_mat_f32(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { + const int64_t ne00 = src0->ne[0]; + const int64_t ne01 = src0->ne[1]; + const int64_t ne02 = src0->ne[2]; + const int64_t ne03 = src0->ne[3]; + + const int64_t ne10 = src1->ne[0]; + const int64_t ne11 = src1->ne[1]; + + const int nb2 = dst->nb[2]; + const int nb3 = dst->nb[3]; + + const float alpha = 1.0f; + const float beta = 0.0f; + const int x_ne = ne01 * ne00; + const int y_ne = ne11 * ne10; + const int d_ne = ne11 * ne01; + const int n_mm = ne03 * ne02; + + size_t x_size, y_size, d_size; + float * d_X = (float *) ggml_cuda_pool_malloc(n_mm * sizeof(float) * x_ne, &x_size); + float * d_Y = (float *) ggml_cuda_pool_malloc(n_mm * sizeof(float) * y_ne, &y_size); + float * d_D = (float *) ggml_cuda_pool_malloc(n_mm * sizeof(float) * d_ne, &d_size); + + for (int64_t i03 = 0; i03 < ne03; i03++) { + for (int64_t i02 = 0; i02 < ne02; i02++) { + int i = i03*ne02 + i02; + cudaStream_t cudaStream = g_cudaStreams[i % GGML_CUDA_MAX_STREAMS]; + + float * c_X = d_X + i * x_ne; + float * c_Y = d_Y + i * y_ne; + float * c_D = d_D + i * d_ne; + + // copy data to device + CUDA_CHECK(ggml_cuda_h2d_tensor_2d(c_X, src0, i03, i02, cudaStream)); + CUDA_CHECK(ggml_cuda_h2d_tensor_2d(c_Y, src1, i03, i02, cudaStream)); + + // compute + CUBLAS_CHECK(cublasSetStream(g_cublasH, cudaStream)); + CUBLAS_CHECK( + cublasSgemm(g_cublasH, CUBLAS_OP_T, CUBLAS_OP_N, + ne01, ne11, ne10, + &alpha, c_X, ne00, + c_Y, ne10, + &beta, c_D, ne01)); + + // copy dst to host + float * d = (float *) ((char *) dst->data + i02*nb2 + i03*nb3); + CUDA_CHECK(cudaMemcpyAsync(d, c_D, sizeof(float) * d_ne, cudaMemcpyDeviceToHost, cudaStream)); + } + } + + CUDA_CHECK(cudaDeviceSynchronize()); + ggml_cuda_pool_free(d_X, x_size); + ggml_cuda_pool_free(d_Y, y_size); + ggml_cuda_pool_free(d_D, d_size); +} + +static void ggml_cuda_mul_mat_f16(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, void * wdata, size_t /* wsize */) { + const int64_t ne00 = src0->ne[0]; + const int64_t ne01 = src0->ne[1]; + const int64_t ne02 = src0->ne[2]; + const int64_t ne03 = src0->ne[3]; + + const int64_t ne10 = src1->ne[0]; + const int64_t ne11 = src1->ne[1]; + + const int nb10 = src1->nb[0]; + const int nb11 = src1->nb[1]; + const int nb12 = src1->nb[2]; + const int nb13 = src1->nb[3]; + + const int nb2 = dst->nb[2]; + const int nb3 = dst->nb[3]; + + const float alpha = 1.0f; + const float beta = 0.0f; + const int x_ne = ne01 * ne00; + const int y_ne = ne11 * ne10; + const int d_ne = ne11 * ne01; + const int n_mm = ne03 * ne02; + + size_t x_size, y_size, d_size; + half * d_X = (half *) ggml_cuda_pool_malloc(n_mm * sizeof(half) * x_ne, &x_size); + half * d_Y = (half *) ggml_cuda_pool_malloc(n_mm * sizeof(half) * y_ne, &y_size); + float * d_D = (float *) ggml_cuda_pool_malloc(n_mm * sizeof(float) * d_ne, &d_size); + + bool src1_cont_rows = nb10 == sizeof(float); + bool src1_cont_cols = (size_t)nb11 == ne11*sizeof(float); + + for (int64_t i03 = 0; i03 < ne03; i03++) { + for (int64_t i02 = 0; i02 < ne02; i02++) { + int i = i03*ne02 + i02; + cudaStream_t cudaStream = g_cudaStreams[i % GGML_CUDA_MAX_STREAMS]; + + half * c_X = d_X + i * x_ne; + half * c_Y = d_Y + i * y_ne; + float * c_D = d_D + i * d_ne; + + // copy src0 to device + CUDA_CHECK(ggml_cuda_h2d_tensor_2d(c_X, src0, i03, i02, cudaStream)); + + // convert src1 to fp16 + // TODO: use multiple threads + ggml_fp16_t * const tmp = (ggml_fp16_t *) wdata + (ne11 * ne10) * (i03 * ne02 + i02); + char * src1i = (char *) src1->data + i03*nb13 + i02*nb12; + if (src1_cont_rows) { + if (src1_cont_cols) { + ggml_fp32_to_fp16_row((float *) src1i, tmp, ne10*ne11); + } + else { + for (int64_t i01 = 0; i01 < ne11; i01++) { + ggml_fp32_to_fp16_row((float *) (src1i + i01*nb11), tmp + i01*ne10, ne10); + } + } + } + else { + for (int64_t i01 = 0; i01 < ne11; i01++) { + for (int64_t i00 = 0; i00 < ne10; i00++) { + // very slow due to no inlining + tmp[i01*ne10 + i00] = ggml_fp32_to_fp16(*(float *) (src1i + i01*nb11 + i00*nb10)); + } + } + } + + // copy src1 to device + CUDA_CHECK(cudaMemcpyAsync(c_Y, tmp, sizeof(half) * y_ne, cudaMemcpyHostToDevice, cudaStream)); + + // compute + CUBLAS_CHECK(cublasSetStream(g_cublasH, cudaStream)); + CUBLAS_CHECK( + cublasGemmEx(g_cublasH, CUBLAS_OP_T, CUBLAS_OP_N, + ne01, ne11, ne10, + &alpha, c_X, CUDA_R_16F, ne00, + c_Y, CUDA_R_16F, ne10, + &beta, c_D, CUDA_R_32F, ne01, + CUBLAS_COMPUTE_32F_FAST_16F, + CUBLAS_GEMM_DEFAULT)); + + // copy dst to host + float * d = (float *) ((char *) dst->data + i02*nb2 + i03*nb3); + CUDA_CHECK(cudaMemcpyAsync(d, c_D, sizeof(float) * d_ne, cudaMemcpyDeviceToHost, cudaStream)); + } + } + + CUDA_CHECK(cudaDeviceSynchronize()); + ggml_cuda_pool_free(d_X, x_size); + ggml_cuda_pool_free(d_Y, y_size); + ggml_cuda_pool_free(d_D, d_size); +} + +static void ggml_cuda_mul_mat_q_f32(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { + const int64_t ne00 = src0->ne[0]; + const int64_t ne01 = src0->ne[1]; + const int64_t ne02 = src0->ne[2]; + const int64_t ne03 = src0->ne[3]; + + const int64_t ne10 = src1->ne[0]; + const int64_t ne11 = src1->ne[1]; + + const int nb2 = dst->nb[2]; + const int nb3 = dst->nb[3]; + const ggml_type type = src0->type; + const bool mul_mat_vec = ne11 == 1; + + const float alpha = 1.0f; + const float beta = 0.0f; + const int x_ne = ne01 * ne00; + const int y_ne = ne11 * ne10; + const int d_ne = ne11 * ne01; + const int n_mm = ne03 * ne02; + const size_t q_sz = ggml_type_size(type) * x_ne / ggml_blck_size(type); + + size_t x_size, y_size, d_size, q_size; + float * d_X = nullptr; + if (!mul_mat_vec) { + d_X = (float *) ggml_cuda_pool_malloc(n_mm * sizeof(float) * x_ne, &x_size); + } + float * d_Y = (float *) ggml_cuda_pool_malloc(n_mm * sizeof(float) * y_ne, &y_size); + float * d_D = (float *) ggml_cuda_pool_malloc(n_mm * sizeof(float) * d_ne, &d_size); + char * d_Q = (char *) ggml_cuda_pool_malloc(n_mm * q_sz, &q_size); + + const to_fp32_cuda_t to_fp32_cuda = ggml_get_to_fp32_cuda(type); + dequantize_mul_mat_vec_cuda_t dmmv = ggml_get_dequantize_mul_mat_vec_cuda(type); + GGML_ASSERT(to_fp32_cuda != nullptr); + + for (int64_t i03 = 0; i03 < ne03; i03++) { + for (int64_t i02 = 0; i02 < ne02; i02++) { + int i = i03*ne02 + i02; + cudaStream_t cudaStream = g_cudaStreams[i % GGML_CUDA_MAX_STREAMS]; + cudaStream_t cudaStream2 = g_cudaStreams2[i % GGML_CUDA_MAX_STREAMS]; + cudaEvent_t cudaEvent = g_cudaEvents[i % GGML_CUDA_MAX_EVENTS]; + + float * c_Y = d_Y + i * y_ne; + float * c_D = d_D + i * d_ne; + char * c_Q = d_Q + i * q_sz; + + // copy src0 to device if necessary + if (src0->backend == GGML_BACKEND_CPU) { + CUDA_CHECK(ggml_cuda_h2d_tensor_2d(c_Q, src0, i03, i02, cudaStream2)); + } else if (src0->backend == GGML_BACKEND_CUDA) { + c_Q = ((char *) src0->data) + i * q_sz; + } else { + GGML_ASSERT(false); + } + if (mul_mat_vec) { // specialized dequantize_mul_mat_vec kernel + CUDA_CHECK(cudaEventRecord(cudaEvent, cudaStream2)); + + // copy src1 to device + CUDA_CHECK(ggml_cuda_h2d_tensor_2d(c_Y, src1, i03, i02, cudaStream)); + + // wait for data + CUDA_CHECK(cudaStreamWaitEvent(cudaStream, cudaEvent, 0)); + + // compute + dmmv(c_Q, c_Y, c_D, ne00, ne01, cudaStream); + CUDA_CHECK(cudaGetLastError()); + + } else { // general dequantization kernel + cuBLAS matrix matrix multiplication + float * c_X = d_X + i * x_ne; + + // convert src0 to fp32 on device + to_fp32_cuda(c_Q, c_X, x_ne, cudaStream2); + CUDA_CHECK(cudaGetLastError()); + CUDA_CHECK(cudaEventRecord(cudaEvent, cudaStream2)); + + // copy src1 to device + CUDA_CHECK(ggml_cuda_h2d_tensor_2d(c_Y, src1, i03, i02, cudaStream)); + + // wait for conversion + CUDA_CHECK(cudaStreamWaitEvent(cudaStream, cudaEvent, 0)); + + // compute + CUBLAS_CHECK(cublasSetStream(g_cublasH, cudaStream)); + CUBLAS_CHECK( + cublasSgemm(g_cublasH, CUBLAS_OP_T, CUBLAS_OP_N, + ne01, ne11, ne10, + &alpha, c_X, ne00, + c_Y, ne10, + &beta, c_D, ne01)); + } + + // copy dst to host + float * d = (float *) ((char *) dst->data + i02*nb2 + i03*nb3); + CUDA_CHECK(cudaMemcpyAsync(d, c_D, sizeof(float) * d_ne, cudaMemcpyDeviceToHost, cudaStream)); + } + } + + CUDA_CHECK(cudaDeviceSynchronize()); + if (!mul_mat_vec) { + ggml_cuda_pool_free(d_X, x_size); + } + ggml_cuda_pool_free(d_Y, y_size); + ggml_cuda_pool_free(d_D, d_size); + ggml_cuda_pool_free(d_Q, q_size); +} + +void ggml_cuda_mul(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst) { + GGML_ASSERT(src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32); + ggml_cuda_mul_f32(src0, src1, dst); +} + +bool ggml_cuda_can_mul_mat(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst) { + const int64_t ne10 = src1->ne[0]; + + const int64_t ne0 = dst->ne[0]; + const int64_t ne1 = dst->ne[1]; + + // TODO: find the optimal values for these + if ((src0->type == GGML_TYPE_F32 || src0->type == GGML_TYPE_F16 || ggml_is_quantized(src0->type)) && + src1->type == GGML_TYPE_F32 && + dst->type == GGML_TYPE_F32 && + ((ne0 >= 32 && ne1 >= 32 && ne10 >= 32) || src0->backend == GGML_BACKEND_CUDA)) { + return true; + } + + return false; +} + +bool ggml_cuda_mul_mat_use_f16(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * /* dst */) { + size_t src0_sz = ggml_nbytes(src0); + size_t src1_sz = ggml_nbytes(src1); + + // mul_mat_q: src0 is converted to fp32 on device + size_t mul_mat_q_transfer = src0_sz + src1_sz; + + // mul_mat_f16: src1 is converted to fp16 on cpu + size_t mul_mat_f16_transfer = src0_sz + sizeof(half) * ggml_nelements(src1); + + // choose the smaller one to transfer to the device + // TODO: this is not always the best choice due to the overhead of converting to fp16 + return mul_mat_f16_transfer < mul_mat_q_transfer; +} + +void ggml_cuda_mul_mat(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, void * wdata, size_t wsize) { + GGML_ASSERT(ggml_cuda_can_mul_mat(src0, src1, dst)); + + if (src0->type == GGML_TYPE_F32) { + ggml_cuda_mul_mat_f32(src0, src1, dst); + } + else if (src0->type == GGML_TYPE_F16) { + if (ggml_cuda_mul_mat_use_f16(src0, src1, dst)) { + ggml_cuda_mul_mat_f16(src0, src1, dst, wdata, wsize); + } + else { + ggml_cuda_mul_mat_q_f32(src0, src1, dst); + } + } + else if (ggml_is_quantized(src0->type)) { + ggml_cuda_mul_mat_q_f32(src0, src1, dst); + } + else { + GGML_ASSERT(false); + } +} + +size_t ggml_cuda_mul_mat_get_wsize(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst) { + if (ggml_cuda_mul_mat_use_f16(src0, src1, dst)) { + return ggml_nelements(src1) * sizeof(ggml_fp16_t); + } + else { + return 0; + } +} + +void ggml_cuda_transform_tensor(ggml_tensor * tensor) { + const int64_t ne0 = tensor->ne[0]; + const int64_t ne1 = tensor->ne[1]; + const int64_t ne2 = tensor->ne[2]; + const int64_t ne3 = tensor->ne[3]; + + const ggml_type type = tensor->type; + const size_t q_sz = ggml_type_size(type) * ne0 * ne1 * ne2 * ne3 / ggml_blck_size(type); + + size_t q_size; + char * dst = (char *) ggml_cuda_pool_malloc(q_sz, &q_size); + + cudaStream_t cudaStream2 = g_cudaStreams2[0]; + + // copy tensor to device + for (int64_t i3 = 0; i3 < ne3; i3++) { + for (int64_t i2 = 0; i2 < ne2; i2++) { + int i = i3*ne2 + i2; + CUDA_CHECK(ggml_cuda_h2d_tensor_2d(dst + i*ne0*ne1, tensor, i3, i2, cudaStream2)); + } + } + + tensor->data = dst; + tensor->backend = GGML_BACKEND_CUDA; +} + +void ggml_cuda_load_data(const char * fname, struct ggml_tensor * tensor, const size_t offset) { + FILE * fp = fopen(fname, "rb"); + + const size_t size = ggml_nbytes(tensor); + + void * buf; + CUDA_CHECK(cudaMalloc(&buf, size)); + void * buf_host = malloc(size); + +#ifdef _WIN32 + int ret = _fseeki64(fp, (__int64) offset, SEEK_SET); +#else + int ret = fseek(fp, (long) offset, SEEK_SET); +#endif + GGML_ASSERT(ret == 0); // same + + size_t ret2 = fread(buf_host, size, 1, fp); + if (ret2 != 1) { + fprintf(stderr, "unexpectedly reached end of file"); + exit(1); + } + + cudaMemcpy(buf, buf_host, size, cudaMemcpyHostToDevice); + cudaDeviceSynchronize(); + + tensor->data = buf; + free(buf_host); + fclose(fp); +} diff --git a/ggml_old/src/ggml-cuda.h b/ggml_old/src/ggml-cuda.h new file mode 100644 index 0000000..6a04dde --- /dev/null +++ b/ggml_old/src/ggml-cuda.h @@ -0,0 +1,23 @@ +#include "ggml.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void ggml_init_cublas(void); + +void ggml_cuda_mul(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst); +bool ggml_cuda_can_mul_mat(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst); +size_t ggml_cuda_mul_mat_get_wsize(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst); +void ggml_cuda_mul_mat(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst, void * wdata, size_t wsize); + +// TODO: export these with GGML_API +void * ggml_cuda_host_malloc(size_t size); +void ggml_cuda_host_free(void * ptr); + +void ggml_cuda_transform_tensor(struct ggml_tensor * tensor); +void ggml_cuda_load_data(const char * fname, struct ggml_tensor * tensors, size_t offset); + +#ifdef __cplusplus +} +#endif diff --git a/ggml_old/src/ggml-opencl.c b/ggml_old/src/ggml-opencl.c new file mode 100644 index 0000000..31ab13b --- /dev/null +++ b/ggml_old/src/ggml-opencl.c @@ -0,0 +1,361 @@ +#include "ggml-opencl.h" + +#define CL_TARGET_OPENCL_VERSION 110 +#include + +#include +#include +#include + +#include "ggml.h" + +#define MULTILINE_QUOTE(...) #__VA_ARGS__ +const char * clblast_dequant = MULTILINE_QUOTE( + +typedef uchar uint8_t; +typedef int int32_t; +typedef uint uint32_t; + +constant uint QK4_0 = 32; +struct block_q4_0 +{ + float d; + uint8_t qs[QK4_0 / 2]; +}; + +constant uint QK4_1 = 32; +struct block_q4_1 +{ + float d; + float m; + uint8_t qs[QK4_1 / 2]; +}; + +constant uint QK5_0 = 32; +struct __attribute__ ((packed)) block_q5_0 +{ + half d; + uint32_t qh; + uint8_t qs[QK5_0 / 2]; +}; + +constant uint QK5_1 = 32; +struct block_q5_1 +{ + half d; + half m; + uint32_t qh; + uint8_t qs[QK5_1 / 2]; +}; + +constant uint QK8_0 = 32; +struct block_q8_0 +{ + float d; + uint8_t qs[QK8_0]; +}; + + +__kernel void dequantize_row_q4_0(__global struct block_q4_0* x, __global float* y) { + constant uint qk = QK4_0; + + const uint i = get_global_id(0) / qk; + const uint j = get_local_id(0); + + const float d = x[i].d; + + const int x0 = (x[i].qs[j] & 0xf) - 8; + const int x1 = (x[i].qs[j] >> 4) - 8; + + y[i*qk + j + 0 ] = x0*d; + y[i*qk + j + qk/2] = x1*d; +} + +__kernel void dequantize_row_q4_1(__global struct block_q4_1* x, __global float* y) { + constant uint qk = QK4_1; + + const uint i = get_global_id(0) / qk; + const uint j = get_local_id(0); + + const float d = x[i].d; + const float m = x[i].m; + + const int x0 = (x[i].qs[j] & 0xf); + const int x1 = (x[i].qs[j] >> 4); + + y[i*qk + j + 0 ] = x0*d + m; + y[i*qk + j + qk/2] = x1*d + m; +} + +__kernel void dequantize_row_q5_0(__global struct block_q5_0* x, __global float* y) { + constant uint qk = QK5_0; + + const uint i = get_global_id(0) / qk; + const uint j = get_local_id(0); + + const float d = vload_half(0, (__global half*) &x[i].d); + + uint32_t qh = x[i].qh; + + const uint8_t xh_0 = ((qh >> (j + 0)) << 4) & 0x10; + const uint8_t xh_1 = ((qh >> (j + 12)) ) & 0x10; + + const int32_t x0 = ((x[i].qs[j] & 0xf) | xh_0) - 16; + const int32_t x1 = ((x[i].qs[j] >> 4) | xh_1) - 16; + + y[i*qk + j + 0 ] = x0*d; + y[i*qk + j + qk/2] = x1*d; +} + +__kernel void dequantize_row_q5_1(__global struct block_q5_1* x, __global float* y) { + constant uint qk = QK5_1; + + const uint i = get_global_id(0) / qk; + const uint j = get_local_id(0); + + const float d = vload_half(0, (__global half*) &x[i].d); + const float m = vload_half(0, (__global half*) &x[i].m); + + uint32_t qh = x[i].qh; + + const uint8_t xh_0 = ((qh >> (j + 0)) << 4) & 0x10; + const uint8_t xh_1 = ((qh >> (j + 12)) ) & 0x10; + + const int x0 = (x[i].qs[j] & 0xf) | xh_0; + const int x1 = (x[i].qs[j] >> 4) | xh_1; + + y[i*qk + j + 0 ] = x0*d + m; + y[i*qk + j + qk/2] = x1*d + m; +} + +__kernel void dequantize_row_q8_0(__global struct block_q8_0* x, __global float* y) { + constant uint qk = QK8_0; + const uint i = get_global_id(0) / qk; + const uint j = get_local_id(0); + + const float d = x[i].d; + y[i*qk + j] = x[i].qs[j]*d; +} + +); + +#define CL_CHECK(err, name) \ + do { \ + cl_int err_ = (err); \ + if (err_ != CL_SUCCESS) { \ + fprintf(stderr, "OpenCL %s error %d at %s:%d\n", name, err_, __FILE__, __LINE__); \ + exit(1); \ + } \ + } while (0) + +static cl_platform_id platform; +static cl_device_id device; +static cl_context context; +static cl_command_queue queue; +static cl_program program; +static cl_kernel kernel_q4_0, kernel_q4_1, kernel_q5_0, kernel_q5_1, kernel_q8_0; +static cl_mem cl_buffer_a, cl_buffer_qb, cl_buffer_b, cl_buffer_c; +static size_t cl_size_a = 0, cl_size_qb = 0, cl_size_b = 0, cl_size_c = 0; + +static cl_program build_program_from_source(cl_context ctx, cl_device_id dev, const char* program_buffer) { + cl_program p; + char *program_log; + size_t program_size, log_size; + int err; + + program_size = strlen(program_buffer); + + p = clCreateProgramWithSource(ctx, 1, (const char**)&program_buffer, &program_size, &err); + if(err < 0) { + fprintf(stderr, "OpenCL error creating program"); + exit(1); + } + + err = clBuildProgram(p, 0, NULL, NULL, NULL, NULL); + if(err < 0) { + + clGetProgramBuildInfo(p, dev, CL_PROGRAM_BUILD_LOG, 0, NULL, &log_size); + program_log = (char*) malloc(log_size + 1); + program_log[log_size] = '\0'; + clGetProgramBuildInfo(p, dev, CL_PROGRAM_BUILD_LOG, log_size + 1, program_log, NULL); + printf("%s\n", program_log); + free(program_log); + exit(1); + } + + return p; +} + +void ggml_cl_init(void) { + cl_int err = 0; + char * GGML_CLBLAST_PLATFORM = getenv("GGML_CLBLAST_PLATFORM"); + char * GGML_CLBLAST_DEVICE = getenv("GGML_CLBLAST_DEVICE"); + int plat_num = (GGML_CLBLAST_PLATFORM == NULL ? 0 : atoi(GGML_CLBLAST_PLATFORM)); + int dev_num = (GGML_CLBLAST_DEVICE == NULL ? 0 : atoi(GGML_CLBLAST_DEVICE)); + printf("\nInitializing CLBlast (First Run)..."); + printf("\nAttempting to use: Platform=%d, Device=%d (If invalid, program will crash)\n",plat_num,dev_num); + cl_uint num_platforms; + clGetPlatformIDs(0, NULL, &num_platforms); + cl_platform_id* platforms = (cl_platform_id*)malloc(num_platforms*sizeof(cl_platform_id)); + clGetPlatformIDs(num_platforms, platforms, NULL); + platform = platforms[plat_num]; + char platform_buffer[1024]; + clGetPlatformInfo(platform, CL_PLATFORM_NAME, sizeof(platform_buffer), &platform_buffer, NULL); + cl_uint num_devices; + clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, 0, NULL, &num_devices); + cl_device_id* devices = (cl_device_id*)malloc(num_devices*sizeof(cl_device_id)); + clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, num_devices, devices, NULL); + device = devices[dev_num]; + char device_buffer[1024]; + clGetDeviceInfo(device, CL_DEVICE_NAME, sizeof(device_buffer), &device_buffer, NULL); + printf("Using Platform: %s Device: %s\n", platform_buffer, device_buffer); + context = clCreateContext(NULL, 1, &device, NULL, NULL, &err); + CL_CHECK(err, "clCreateContext"); + queue = clCreateCommandQueue(context, device, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, &err); + CL_CHECK(err, "clCreateCommandQueue"); + + free(platforms); + free(devices); + + program = build_program_from_source(context, device, clblast_dequant); + + // Prepare dequantize kernels + kernel_q4_0 = clCreateKernel(program, "dequantize_row_q4_0", &err); + CL_CHECK(err, "clCreateKernel"); + kernel_q4_1 = clCreateKernel(program, "dequantize_row_q4_1", &err); + CL_CHECK(err, "clCreateKernel"); + kernel_q5_0 = clCreateKernel(program, "dequantize_row_q5_0", &err); + CL_CHECK(err, "clCreateKernel"); + kernel_q5_1 = clCreateKernel(program, "dequantize_row_q5_1", &err); + CL_CHECK(err, "clCreateKernel"); + kernel_q8_0 = clCreateKernel(program, "dequantize_row_q8_0", &err); + CL_CHECK(err, "clCreateKernel"); +} + +static void ggml_cl_malloc(size_t req_size, size_t* cur_size, cl_mem_flags flags, cl_mem* buf) { + if (req_size <= *cur_size) { + return; + } + + // Reallocate buffer with enough space + if (*cur_size > 0) { + clReleaseMemObject(*buf); + } + cl_int err; + *buf = clCreateBuffer(context, flags, req_size, NULL, &err); + *cur_size = req_size; + CL_CHECK(err, "clCreateBuffer"); +} + +void ggml_cl_sgemm_wrapper( + const enum ggml_blas_order order, const enum ggml_blas_op trans_a, const enum ggml_blas_op trans_b, + const int m, const int n, const int k, + const float alpha, const void *host_a, const int lda, + const float *host_b, const int ldb, const float beta, + float *host_c, const int ldc, const int btype) { + cl_int err = 0; + + cl_kernel kernel; + size_t global = n * k, local, size_qb; + bool dequant; + + switch (btype) { + case GGML_TYPE_F32: + dequant = false; + break; + case GGML_TYPE_Q4_0: + dequant = true; + kernel = kernel_q4_0; + local = 16; + size_qb = global * (sizeof(float) + local) / 32; + break; + case GGML_TYPE_Q4_1: + dequant = true; + kernel = kernel_q4_1; + local = 16; + size_qb = global * (sizeof(float) * 2 + local) / 32; + break; + case GGML_TYPE_Q5_0: + dequant = true; + kernel = kernel_q5_0; + local = 16; + size_qb = global * (sizeof(ggml_fp16_t) + sizeof(uint32_t) + local) / 32; + break; + case GGML_TYPE_Q5_1: + dequant = true; + kernel = kernel_q5_1; + local = 16; + size_qb = global * (sizeof(ggml_fp16_t) * 2 + sizeof(uint32_t) + local) / 32; + break; + case GGML_TYPE_Q8_0: + dequant = true; + kernel = kernel_q8_0; + local = 32; + size_qb = global * (sizeof(float) + local) / 32; + break; + default: + fprintf(stderr, "Error: Unsupported OpenCL btype %d\n", btype); + abort(); + } + + const size_t size_a = m * k * sizeof(float); + const size_t size_b = n * k * sizeof(float); + const size_t size_c = m * n * sizeof(float); + + // Prepare buffers + ggml_cl_malloc(size_a, &cl_size_a, CL_MEM_READ_ONLY, &cl_buffer_a); + if (dequant) { + ggml_cl_malloc(size_qb, &cl_size_qb, CL_MEM_READ_ONLY, &cl_buffer_qb); + } + ggml_cl_malloc(size_b, &cl_size_b, CL_MEM_READ_WRITE, &cl_buffer_b); + ggml_cl_malloc(size_c, &cl_size_c, CL_MEM_WRITE_ONLY, &cl_buffer_c); + + cl_event ev_a, ev_qb, ev_b; + + if (dequant) { + err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &cl_buffer_qb); + err |= clSetKernelArg(kernel, 1, sizeof(cl_mem), &cl_buffer_b); + CL_CHECK(err, "clSetKernelArg"); + err = clEnqueueWriteBuffer(queue, cl_buffer_qb, CL_FALSE, 0, size_qb, host_b, 0, NULL, &ev_qb); + CL_CHECK(err, "clEnqueueWriteBuffer qb"); + } else { + err = clEnqueueWriteBuffer(queue, cl_buffer_b, CL_FALSE, 0, size_b, host_b, 0, NULL, &ev_b); + CL_CHECK(err, "clEnqueueWriteBuffer b"); + } + + err = clEnqueueWriteBuffer(queue, cl_buffer_a, CL_FALSE, 0, size_a, host_a, 0, NULL, &ev_a); + CL_CHECK(err, "clEnqueueWriteBuffer a"); + if (dequant) { + err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, &local, 1, &ev_qb, &ev_b); + CL_CHECK(err, "clEnqueueNDRangeKernel"); + clReleaseEvent(ev_qb); + } + clWaitForEvents(1, &ev_a); + clWaitForEvents(1, &ev_b); + clReleaseEvent(ev_a); + clReleaseEvent(ev_b); + + cl_event ev_sgemm; + CLBlastStatusCode status = CLBlastSgemm((CLBlastLayout)order, + (CLBlastTranspose)trans_a, (CLBlastTranspose)trans_b, + m, n, k, + alpha, + cl_buffer_a, 0, lda, + cl_buffer_b, 0, ldb, + beta, + cl_buffer_c, 0, ldc, + &queue, &ev_sgemm); + + if (status != CLBlastSuccess) { + fprintf(stderr, "Error: CLBlast SGEMM %d\n", status); + abort(); + } + + cl_event ev_c; + clEnqueueReadBuffer(queue, cl_buffer_c, CL_TRUE, 0, size_c, host_c, 1, &ev_sgemm, &ev_c); + + // Wait for completion + clWaitForEvents(1, &ev_c); + clReleaseEvent(ev_sgemm); + clReleaseEvent(ev_c); +} diff --git a/ggml_old/src/ggml-opencl.h b/ggml_old/src/ggml-opencl.h new file mode 100644 index 0000000..7bcc603 --- /dev/null +++ b/ggml_old/src/ggml-opencl.h @@ -0,0 +1,24 @@ +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +void ggml_cl_init(void); + +enum ggml_blas_order { + GGML_BLAS_ORDER_ROW_MAJOR = 101, + GGML_BLAS_ORDER_COLUMN_MAJOR = 102, +}; + +enum ggml_blas_op { + GGML_BLAS_OP_N = 111, + GGML_BLAS_OP_T = 112, + GGML_BLAS_OP_C = 113, +}; + +void ggml_cl_sgemm_wrapper(const enum ggml_blas_order order, const enum ggml_blas_op trans_a, const enum ggml_blas_op trans_b, const int m, const int n, const int k, const float alpha, const void *host_a, const int lda, const float *host_b, const int ldb, const float beta, float *host_c, const int ldc, const int btype); + +#ifdef __cplusplus +} +#endif diff --git a/ggml_old/src/ggml.c b/ggml_old/src/ggml.c new file mode 100644 index 0000000..7612c86 --- /dev/null +++ b/ggml_old/src/ggml.c @@ -0,0 +1,15700 @@ +// Defines CLOCK_MONOTONIC on Linux +#define _GNU_SOURCE + +#include "ggml.h" + +#if defined(_MSC_VER) || defined(__MINGW32__) +#include // using malloc.h with MSC/MINGW +#elif !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__OpenBSD__) +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// if C99 - static_assert is noop +// ref: https://stackoverflow.com/a/53923785/4039976 +#ifndef static_assert +#define static_assert(cond, msg) struct global_scope_noop_trick +#endif + +#if defined(_WIN32) + +#include + +typedef volatile LONG atomic_int; +typedef atomic_int atomic_bool; + +static void atomic_store(atomic_int* ptr, LONG val) { + InterlockedExchange(ptr, val); +} +static LONG atomic_load(atomic_int* ptr) { + return InterlockedCompareExchange(ptr, 0, 0); +} +static LONG atomic_fetch_add(atomic_int* ptr, LONG inc) { + return InterlockedExchangeAdd(ptr, inc); +} +static LONG atomic_fetch_sub(atomic_int* ptr, LONG dec) { + return atomic_fetch_add(ptr, -(dec)); +} + +typedef HANDLE pthread_t; + +typedef DWORD thread_ret_t; +static int pthread_create(pthread_t* out, void* unused, thread_ret_t(*func)(void*), void* arg) { + (void) unused; + HANDLE handle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) func, arg, 0, NULL); + if (handle == NULL) + { + return EAGAIN; + } + + *out = handle; + return 0; +} + +static int pthread_join(pthread_t thread, void* unused) { + (void) unused; + return (int) WaitForSingleObject(thread, INFINITE); +} + +static int sched_yield (void) { + Sleep (0); + return 0; +} +#else +#include +#include + +typedef void* thread_ret_t; +#endif + +// __FMA__ and __F16C__ are not defined in MSVC, however they are implied with AVX2/AVX512 +#if defined(_MSC_VER) && (defined(__AVX2__) || defined(__AVX512F__)) +#ifndef __FMA__ +#define __FMA__ +#endif +#ifndef __F16C__ +#define __F16C__ +#endif +#ifndef __SSE3__ +#define __SSE3__ +#endif +#endif + +#ifdef __HAIKU__ +#define static_assert(cond, msg) _Static_assert(cond, msg) +#endif + +/*#define GGML_PERF*/ +#define GGML_DEBUG 0 +#define GGML_GELU_FP16 +#define GGML_SILU_FP16 + +#define GGML_SOFT_MAX_UNROLL 4 +#define GGML_VEC_DOT_UNROLL 2 + +#ifdef GGML_USE_ACCELERATE +// uncomment to use vDSP for soft max computation +// note: not sure if it is actually faster +//#define GGML_SOFT_MAX_ACCELERATE +#endif + +#if UINTPTR_MAX == 0xFFFFFFFF + #define GGML_MEM_ALIGN 4 +#else + #define GGML_MEM_ALIGN 16 +#endif + +#if defined(_MSC_VER) || defined(__MINGW32__) +#define GGML_ALIGNED_MALLOC(size) _aligned_malloc(size, GGML_MEM_ALIGN) +#define GGML_ALIGNED_FREE(ptr) _aligned_free(ptr) +#else +inline static void* ggml_aligned_malloc(size_t size) { + void* aligned_memory = NULL; + int result = posix_memalign(&aligned_memory, GGML_MEM_ALIGN, size); + if (result != 0) { + // Handle allocation failure + return NULL; + } + return aligned_memory; +} +#define GGML_ALIGNED_MALLOC(size) ggml_aligned_malloc(size) +#define GGML_ALIGNED_FREE(ptr) free(ptr) +#endif + +#define UNUSED(x) (void)(x) +#define SWAP(x, y, T) do { T SWAP = x; x = y; y = SWAP; } while (0) + +#if defined(GGML_USE_ACCELERATE) +#include +#if defined(GGML_USE_CLBLAST) // allow usage of CLBlast alongside Accelerate functions +#include "ggml-opencl.h" +#endif +#elif defined(GGML_USE_OPENBLAS) +#include +#elif defined(GGML_USE_CUBLAS) +#include "ggml-cuda.h" +#elif defined(GGML_USE_CLBLAST) +#include "ggml-opencl.h" +#endif + +#undef MIN +#undef MAX +#define MIN(a, b) ((a) < (b) ? (a) : (b)) +#define MAX(a, b) ((a) > (b) ? (a) : (b)) + +// floating point type used to accumulate sums +typedef double ggml_float; + +// 16-bit float +// on Arm, we use __fp16 +// on x86, we use uint16_t +#ifdef __ARM_NEON + +// if YCM cannot find , make a symbolic link to it, for example: +// +// $ ln -sfn /Library/Developer/CommandLineTools/usr/lib/clang/13.1.6/include/arm_neon.h ./src/ +// +#include + +#define GGML_COMPUTE_FP16_TO_FP32(x) ((float) (x)) +#define GGML_COMPUTE_FP32_TO_FP16(x) (x) + +#define GGML_FP16_TO_FP32(x) ((float) (x)) +#define GGML_FP32_TO_FP16(x) (x) + +#else + +#ifdef __wasm_simd128__ +#include +#else +#ifdef __POWER9_VECTOR__ +#include +#undef bool +#define bool _Bool +#else +#if defined(_MSC_VER) || defined(__MINGW32__) +#include +#else +#include +#endif +#endif +#endif + +#ifdef __F16C__ + +#ifdef _MSC_VER +#define GGML_COMPUTE_FP16_TO_FP32(x) _mm_cvtss_f32(_mm_cvtph_ps(_mm_cvtsi32_si128(x))) +#define GGML_COMPUTE_FP32_TO_FP16(x) _mm_extract_epi16(_mm_cvtps_ph(_mm_set_ss(x), 0), 0) +#else +#define GGML_COMPUTE_FP16_TO_FP32(x) _cvtsh_ss(x) +#define GGML_COMPUTE_FP32_TO_FP16(x) _cvtss_sh(x, 0) +#endif + +#elif defined(__POWER9_VECTOR__) + +#define GGML_COMPUTE_FP16_TO_FP32(x) ggml_compute_fp16_to_fp32(x) +#define GGML_COMPUTE_FP32_TO_FP16(x) ggml_compute_fp32_to_fp16(x) +/* the inline asm below is about 12% faster than the lookup method */ +#define GGML_FP16_TO_FP32(x) GGML_COMPUTE_FP16_TO_FP32(x) +#define GGML_FP32_TO_FP16(x) GGML_COMPUTE_FP32_TO_FP16(x) + +static inline float ggml_compute_fp16_to_fp32(ggml_fp16_t h) { + register float f; + register double d; + __asm__( + "mtfprd %0,%2\n" + "xscvhpdp %0,%0\n" + "frsp %1,%0\n" : + /* temp */ "=d"(d), + /* out */ "=f"(f): + /* in */ "r"(h)); + return f; +} + +static inline ggml_fp16_t ggml_compute_fp32_to_fp16(float f) { + register double d; + register ggml_fp16_t r; + __asm__( /* xscvdphp can work on double or single precision */ + "xscvdphp %0,%2\n" + "mffprd %1,%0\n" : + /* temp */ "=d"(d), + /* out */ "=r"(r): + /* in */ "f"(f)); + return r; +} + +#else + +// FP16 <-> FP32 +// ref: https://github.com/Maratyszcza/FP16 + +static inline float fp32_from_bits(uint32_t w) { + union { + uint32_t as_bits; + float as_value; + } fp32; + fp32.as_bits = w; + return fp32.as_value; +} + +static inline uint32_t fp32_to_bits(float f) { + union { + float as_value; + uint32_t as_bits; + } fp32; + fp32.as_value = f; + return fp32.as_bits; +} + +static inline float ggml_compute_fp16_to_fp32(ggml_fp16_t h) { + const uint32_t w = (uint32_t) h << 16; + const uint32_t sign = w & UINT32_C(0x80000000); + const uint32_t two_w = w + w; + + const uint32_t exp_offset = UINT32_C(0xE0) << 23; +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) || defined(__GNUC__) && !defined(__STRICT_ANSI__) + const float exp_scale = 0x1.0p-112f; +#else + const float exp_scale = fp32_from_bits(UINT32_C(0x7800000)); +#endif + const float normalized_value = fp32_from_bits((two_w >> 4) + exp_offset) * exp_scale; + + const uint32_t magic_mask = UINT32_C(126) << 23; + const float magic_bias = 0.5f; + const float denormalized_value = fp32_from_bits((two_w >> 17) | magic_mask) - magic_bias; + + const uint32_t denormalized_cutoff = UINT32_C(1) << 27; + const uint32_t result = sign | + (two_w < denormalized_cutoff ? fp32_to_bits(denormalized_value) : fp32_to_bits(normalized_value)); + return fp32_from_bits(result); +} + +static inline ggml_fp16_t ggml_compute_fp32_to_fp16(float f) { +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) || defined(__GNUC__) && !defined(__STRICT_ANSI__) + const float scale_to_inf = 0x1.0p+112f; + const float scale_to_zero = 0x1.0p-110f; +#else + const float scale_to_inf = fp32_from_bits(UINT32_C(0x77800000)); + const float scale_to_zero = fp32_from_bits(UINT32_C(0x08800000)); +#endif + float base = (fabsf(f) * scale_to_inf) * scale_to_zero; + + const uint32_t w = fp32_to_bits(f); + const uint32_t shl1_w = w + w; + const uint32_t sign = w & UINT32_C(0x80000000); + uint32_t bias = shl1_w & UINT32_C(0xFF000000); + if (bias < UINT32_C(0x71000000)) { + bias = UINT32_C(0x71000000); + } + + base = fp32_from_bits((bias >> 1) + UINT32_C(0x07800000)) + base; + const uint32_t bits = fp32_to_bits(base); + const uint32_t exp_bits = (bits >> 13) & UINT32_C(0x00007C00); + const uint32_t mantissa_bits = bits & UINT32_C(0x00000FFF); + const uint32_t nonsign = exp_bits + mantissa_bits; + return (sign >> 16) | (shl1_w > UINT32_C(0xFF000000) ? UINT16_C(0x7E00) : nonsign); +} + +#define GGML_COMPUTE_FP16_TO_FP32(x) ggml_compute_fp16_to_fp32(x) +#define GGML_COMPUTE_FP32_TO_FP16(x) ggml_compute_fp32_to_fp16(x) + +#endif // __F16C__ + +#endif // __ARM_NEON + +// +// global data +// + +// precomputed gelu table for f16 (128 KB) +static ggml_fp16_t table_gelu_f16[1 << 16]; + +// precomputed silu table for f16 (128 KB) +static ggml_fp16_t table_silu_f16[1 << 16]; + +// precomputed exp table for f16 (128 KB) +static ggml_fp16_t table_exp_f16[1 << 16]; + +// precomputed f32 table for f16 (256 KB) +static float table_f32_f16[1 << 16]; + +#if defined(__ARM_NEON) || defined(__wasm_simd128__) +#define B1(c,s,n) 0x ## n ## c , 0x ## n ## s +#define B2(c,s,n) B1(c,s,n ## c), B1(c,s,n ## s) +#define B3(c,s,n) B2(c,s,n ## c), B2(c,s,n ## s) +#define B4(c,s,n) B3(c,s,n ## c), B3(c,s,n ## s) +#define B5(c,s,n) B4(c,s,n ## c), B4(c,s,n ## s) +#define B6(c,s,n) B5(c,s,n ## c), B5(c,s,n ## s) +#define B7(c,s,n) B6(c,s,n ## c), B6(c,s,n ## s) +#define B8(c,s ) B7(c,s, c), B7(c,s, s) + +// precomputed tables for expanding 8bits to 8 bytes: +static const uint64_t table_b2b_0[1 << 8] = { B8(00, 10) }; // ( b) << 4 +static const uint64_t table_b2b_1[1 << 8] = { B8(10, 00) }; // (!b) << 4 +#endif + +// On ARM NEON, it's quicker to directly convert x -> x instead of calling into ggml_lookup_fp16_to_fp32, +// so we define GGML_FP16_TO_FP32 and GGML_FP32_TO_FP16 elsewhere for NEON. +// This is also true for POWER9. +#if !defined(GGML_FP16_TO_FP32) || !defined(GGML_FP32_TO_FP16) + +inline static float ggml_lookup_fp16_to_fp32(ggml_fp16_t f) { + uint16_t s; + memcpy(&s, &f, sizeof(uint16_t)); + return table_f32_f16[s]; +} + +#define GGML_FP16_TO_FP32(x) ggml_lookup_fp16_to_fp32(x) +#define GGML_FP32_TO_FP16(x) GGML_COMPUTE_FP32_TO_FP16(x) + +#endif + +// note: do not use these inside ggml.c +// these are meant to be used via the ggml.h API +float ggml_fp16_to_fp32(ggml_fp16_t x) { + return (float) GGML_FP16_TO_FP32(x); +} + +ggml_fp16_t ggml_fp32_to_fp16(float x) { + return GGML_FP32_TO_FP16(x); +} + +void ggml_fp16_to_fp32_row(const ggml_fp16_t * x, float * y, size_t n) { + for (size_t i = 0; i < n; i++) { + y[i] = GGML_FP16_TO_FP32(x[i]); + } +} + +void ggml_fp32_to_fp16_row(const float * x, ggml_fp16_t * y, size_t n) { + size_t i = 0; +#if defined(__F16C__) + for (; i + 7 < n; i += 8) { + __m256 x_vec = _mm256_loadu_ps(x + i); + __m128i y_vec = _mm256_cvtps_ph(x_vec, _MM_FROUND_TO_NEAREST_INT); + _mm_storeu_si128((__m128i *)(y + i), y_vec); + } + for(; i + 3 < n; i += 4) { + __m128 x_vec = _mm_loadu_ps(x + i); + __m128i y_vec = _mm_cvtps_ph(x_vec, _MM_FROUND_TO_NEAREST_INT); + _mm_storel_epi64((__m128i *)(y + i), y_vec); + } +#endif + for (; i < n; i++) { + y[i] = GGML_FP32_TO_FP16(x[i]); + } +} + + +// +// timing +// + +#if defined(_MSC_VER) || defined(__MINGW32__) +static int64_t timer_freq; +void ggml_time_init(void) { + LARGE_INTEGER frequency; + QueryPerformanceFrequency(&frequency); + timer_freq = frequency.QuadPart; +} +int64_t ggml_time_ms(void) { + LARGE_INTEGER t; + QueryPerformanceCounter(&t); + return (t.QuadPart * 1000) / timer_freq; +} +int64_t ggml_time_us(void) { + LARGE_INTEGER t; + QueryPerformanceCounter(&t); + return (t.QuadPart * 1000000) / timer_freq; +} +#else +void ggml_time_init(void) {} +int64_t ggml_time_ms(void) { + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + return (int64_t)ts.tv_sec*1000 + (int64_t)ts.tv_nsec/1000000; +} + +int64_t ggml_time_us(void) { + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + return (int64_t)ts.tv_sec*1000000 + (int64_t)ts.tv_nsec/1000; +} +#endif + +int64_t ggml_cycles(void) { + return clock(); +} + +int64_t ggml_cycles_per_ms(void) { + return CLOCKS_PER_SEC/1000; +} + +#ifdef GGML_PERF +#define ggml_perf_time_ms() ggml_time_ms() +#define ggml_perf_time_us() ggml_time_us() +#define ggml_perf_cycles() ggml_cycles() +#define ggml_perf_cycles_per_ms() ggml_cycles_per_ms() +#else +#define ggml_perf_time_ms() 0 +#define ggml_perf_time_us() 0 +#define ggml_perf_cycles() 0 +#define ggml_perf_cycles_per_ms() 0 +#endif + +// +// cache line +// + +#if defined(__cpp_lib_hardware_interference_size) +#define CACHE_LINE_SIZE hardware_destructive_interference_size +#else +#if defined(__POWER9_VECTOR__) +#define CACHE_LINE_SIZE 128 +#else +#define CACHE_LINE_SIZE 64 +#endif +#endif + +static const size_t CACHE_LINE_SIZE_F32 = CACHE_LINE_SIZE/sizeof(float); + +// +// quantization +// + +#if defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) || defined(__SSSE3__) +// multiply int8_t, add results pairwise twice +static inline __m128i mul_sum_i8_pairs(const __m128i x, const __m128i y) { + // Get absolute values of x vectors + const __m128i ax = _mm_sign_epi8(x, x); + // Sign the values of the y vectors + const __m128i sy = _mm_sign_epi8(y, x); + // Perform multiplication and create 16-bit values + const __m128i dot = _mm_maddubs_epi16(ax, sy); + const __m128i ones = _mm_set1_epi16(1); + return _mm_madd_epi16(ones, dot); +} + +#if __AVX__ || __AVX2__ || __AVX512F__ +// horizontally add 8 floats +static inline float hsum_float_8(const __m256 x) { + __m128 res = _mm256_extractf128_ps(x, 1); + res = _mm_add_ps(res, _mm256_castps256_ps128(x)); + res = _mm_add_ps(res, _mm_movehl_ps(res, res)); + res = _mm_add_ss(res, _mm_movehdup_ps(res)); + return _mm_cvtss_f32(res); +} + +// horizontally add 8 int32_t +static inline int hsum_i32_8(const __m256i a) { + const __m128i sum128 = _mm_add_epi32(_mm256_castsi256_si128(a), _mm256_extractf128_si256(a, 1)); + const __m128i hi64 = _mm_unpackhi_epi64(sum128, sum128); + const __m128i sum64 = _mm_add_epi32(hi64, sum128); + const __m128i hi32 = _mm_shuffle_epi32(sum64, _MM_SHUFFLE(2, 3, 0, 1)); + return _mm_cvtsi128_si32(_mm_add_epi32(sum64, hi32)); +} + +// horizontally add 4 int32_t +static inline int hsum_i32_4(const __m128i a) { + const __m128i hi64 = _mm_unpackhi_epi64(a, a); + const __m128i sum64 = _mm_add_epi32(hi64, a); + const __m128i hi32 = _mm_shuffle_epi32(sum64, _MM_SHUFFLE(2, 3, 0, 1)); + return _mm_cvtsi128_si32(_mm_add_epi32(sum64, hi32)); +} + +#if defined(__AVX2__) || defined(__AVX512F__) +// spread 32 bits to 32 bytes { 0x00, 0xFF } +static inline __m256i bytes_from_bits_32(const uint8_t * x) { + uint32_t x32; + memcpy(&x32, x, sizeof(uint32_t)); + const __m256i shuf_mask = _mm256_set_epi64x( + 0x0303030303030303, 0x0202020202020202, + 0x0101010101010101, 0x0000000000000000); + __m256i bytes = _mm256_shuffle_epi8(_mm256_set1_epi32(x32), shuf_mask); + const __m256i bit_mask = _mm256_set1_epi64x(0x7fbfdfeff7fbfdfe); + bytes = _mm256_or_si256(bytes, bit_mask); + return _mm256_cmpeq_epi8(bytes, _mm256_set1_epi64x(-1)); +} + +// Unpack 32 4-bit fields into 32 bytes +// The output vector contains 32 bytes, each one in [ 0 .. 15 ] interval +static inline __m256i bytes_from_nibbles_32(const uint8_t * rsi) +{ + const __m128i tmp = _mm_loadu_si128((const __m128i *)rsi); + const __m256i bytes = _mm256_set_m128i(_mm_srli_epi16(tmp, 4), tmp); + const __m256i lowMask = _mm256_set1_epi8( 0xF ); + return _mm256_and_si256(lowMask, bytes); +} + +// add int16_t pairwise and return as float vector +static inline __m256 sum_i16_pairs_float(const __m256i x) { + const __m256i ones = _mm256_set1_epi16(1); + const __m256i summed_pairs = _mm256_madd_epi16(ones, x); + return _mm256_cvtepi32_ps(summed_pairs); +} + +static inline __m256 mul_sum_us8_pairs_float(const __m256i ax, const __m256i sy) { +#if __AVXVNNI__ + const __m256i zero = _mm256_setzero_si256(); + const __m256i summed_pairs = _mm256_dpbusd_epi32(zero, ax, sy); + return _mm256_cvtepi32_ps(summed_pairs); +#else + // Perform multiplication and create 16-bit values + const __m256i dot = _mm256_maddubs_epi16(ax, sy); + return sum_i16_pairs_float(dot); +#endif +} + +// multiply int8_t, add results pairwise twice and return as float vector +static inline __m256 mul_sum_i8_pairs_float(const __m256i x, const __m256i y) { +#if __AVXVNNIINT8__ + const __m256i zero = _mm256_setzero_si256(); + const __m256i summed_pairs = _mm256_dpbssd_epi32(zero, x, y); + return _mm256_cvtepi32_ps(summed_pairs); +#else + // Get absolute values of x vectors + const __m256i ax = _mm256_sign_epi8(x, x); + // Sign the values of the y vectors + const __m256i sy = _mm256_sign_epi8(y, x); + return mul_sum_us8_pairs_float(ax, sy); +#endif +} + +static inline __m128i packNibbles( __m256i bytes ) +{ + // Move bits within 16-bit lanes from 0000_abcd_0000_efgh into 0000_0000_abcd_efgh +#if __AVX512F__ + const __m256i bytes_srli_4 = _mm256_srli_epi16(bytes, 4); // 0000_0000_abcd_0000 + bytes = _mm256_or_si256(bytes, bytes_srli_4); // 0000_abcd_abcd_efgh + return _mm256_cvtepi16_epi8(bytes); // abcd_efgh +#else + const __m256i lowByte = _mm256_set1_epi16( 0xFF ); + __m256i high = _mm256_andnot_si256( lowByte, bytes ); + __m256i low = _mm256_and_si256( lowByte, bytes ); + high = _mm256_srli_epi16( high, 4 ); + bytes = _mm256_or_si256( low, high ); + + // Compress uint16_t lanes into bytes + __m128i r0 = _mm256_castsi256_si128( bytes ); + __m128i r1 = _mm256_extracti128_si256( bytes, 1 ); + return _mm_packus_epi16( r0, r1 ); +#endif +} +#elif defined(__AVX__) +// spread 32 bits to 32 bytes { 0x00, 0xFF } +static inline __m256i bytes_from_bits_32(const uint8_t * x) { + uint32_t x32; + memcpy(&x32, x, sizeof(uint32_t)); + const __m128i shuf_maskl = _mm_set_epi64x(0x0101010101010101, 0x0000000000000000); + const __m128i shuf_maskh = _mm_set_epi64x(0x0303030303030303, 0x0202020202020202); + __m128i bytesl = _mm_shuffle_epi8(_mm_set1_epi32(x32), shuf_maskl); + __m128i bytesh = _mm_shuffle_epi8(_mm_set1_epi32(x32), shuf_maskh); + const __m128i bit_mask = _mm_set1_epi64x(0x7fbfdfeff7fbfdfe); + bytesl = _mm_or_si128(bytesl, bit_mask); + bytesh = _mm_or_si128(bytesh, bit_mask); + bytesl = _mm_cmpeq_epi8(bytesl, _mm_set1_epi64x(-1)); + bytesh = _mm_cmpeq_epi8(bytesh, _mm_set1_epi64x(-1)); + return _mm256_set_m128i(bytesh, bytesl); +} + +// Unpack 32 4-bit fields into 32 bytes +// The output vector contains 32 bytes, each one in [ 0 .. 15 ] interval +static inline __m256i bytes_from_nibbles_32(const uint8_t * rsi) +{ + // Load 16 bytes from memory + __m128i tmpl = _mm_loadu_si128((const __m128i *)rsi); + __m128i tmph = _mm_srli_epi16(tmpl, 4); + const __m128i lowMask = _mm_set1_epi8(0xF); + tmpl = _mm_and_si128(lowMask, tmpl); + tmph = _mm_and_si128(lowMask, tmph); + return _mm256_set_m128i(tmph, tmpl); +} + +// add int16_t pairwise and return as float vector +static inline __m256 sum_i16_pairs_float(const __m128i xh, const __m128i xl) { + const __m128i ones = _mm_set1_epi16(1); + const __m128i summed_pairsl = _mm_madd_epi16(ones, xl); + const __m128i summed_pairsh = _mm_madd_epi16(ones, xh); + const __m256i summed_pairs = _mm256_set_m128i(summed_pairsh, summed_pairsl); + return _mm256_cvtepi32_ps(summed_pairs); +} + +static inline __m256 mul_sum_us8_pairs_float(const __m256i ax, const __m256i sy) { + const __m128i axl = _mm256_castsi256_si128(ax); + const __m128i axh = _mm256_extractf128_si256(ax, 1); + const __m128i syl = _mm256_castsi256_si128(sy); + const __m128i syh = _mm256_extractf128_si256(sy, 1); + // Perform multiplication and create 16-bit values + const __m128i dotl = _mm_maddubs_epi16(axl, syl); + const __m128i doth = _mm_maddubs_epi16(axh, syh); + return sum_i16_pairs_float(doth, dotl); +} + +// multiply int8_t, add results pairwise twice and return as float vector +static inline __m256 mul_sum_i8_pairs_float(const __m256i x, const __m256i y) { + const __m128i xl = _mm256_castsi256_si128(x); + const __m128i xh = _mm256_extractf128_si256(x, 1); + const __m128i yl = _mm256_castsi256_si128(y); + const __m128i yh = _mm256_extractf128_si256(y, 1); + // Get absolute values of x vectors + const __m128i axl = _mm_sign_epi8(xl, xl); + const __m128i axh = _mm_sign_epi8(xh, xh); + // Sign the values of the y vectors + const __m128i syl = _mm_sign_epi8(yl, xl); + const __m128i syh = _mm_sign_epi8(yh, xh); + // Perform multiplication and create 16-bit values + const __m128i dotl = _mm_maddubs_epi16(axl, syl); + const __m128i doth = _mm_maddubs_epi16(axh, syh); + return sum_i16_pairs_float(doth, dotl); +} + +static inline __m128i packNibbles( __m128i bytes1, __m128i bytes2 ) +{ + // Move bits within 16-bit lanes from 0000_abcd_0000_efgh into 0000_0000_abcd_efgh + const __m128i lowByte = _mm_set1_epi16( 0xFF ); + __m128i high = _mm_andnot_si128( lowByte, bytes1 ); + __m128i low = _mm_and_si128( lowByte, bytes1 ); + high = _mm_srli_epi16( high, 4 ); + bytes1 = _mm_or_si128( low, high ); + high = _mm_andnot_si128( lowByte, bytes2 ); + low = _mm_and_si128( lowByte, bytes2 ); + high = _mm_srli_epi16( high, 4 ); + bytes2 = _mm_or_si128( low, high ); + + return _mm_packus_epi16( bytes1, bytes2); +} +#endif +#elif defined(__SSSE3__) +// horizontally add 4x4 floats +static inline float hsum_float_4x4(const __m128 a, const __m128 b, const __m128 c, const __m128 d) { + __m128 res_0 =_mm_hadd_ps(a, b); + __m128 res_1 =_mm_hadd_ps(c, d); + __m128 res =_mm_hadd_ps(res_0, res_1); + res =_mm_hadd_ps(res, res); + res =_mm_hadd_ps(res, res); + + return _mm_cvtss_f32(res); +} +#endif // __AVX__ || __AVX2__ || __AVX512F__ +#endif // defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) || defined(__SSSE3__) + +#if defined(__ARM_NEON) + +#if !defined(__aarch64__) + +inline static uint16_t vaddvq_u8(uint8x16_t v) { + return + (uint16_t)vgetq_lane_u8(v, 0) + (uint16_t)vgetq_lane_u8(v, 1) + + (uint16_t)vgetq_lane_u8(v, 2) + (uint16_t)vgetq_lane_u8(v, 3) + + (uint16_t)vgetq_lane_u8(v, 4) + (uint16_t)vgetq_lane_u8(v, 5) + + (uint16_t)vgetq_lane_u8(v, 6) + (uint16_t)vgetq_lane_u8(v, 7) + + (uint16_t)vgetq_lane_u8(v, 8) + (uint16_t)vgetq_lane_u8(v, 9) + + (uint16_t)vgetq_lane_u8(v, 10) + (uint16_t)vgetq_lane_u8(v, 11) + + (uint16_t)vgetq_lane_u8(v, 12) + (uint16_t)vgetq_lane_u8(v, 13) + + (uint16_t)vgetq_lane_u8(v, 14) + (uint16_t)vgetq_lane_u8(v, 15); +} + +inline static int16_t vaddvq_s8(int8x16_t v) { + return + (int16_t)vgetq_lane_s8(v, 0) + (int16_t)vgetq_lane_s8(v, 1) + + (int16_t)vgetq_lane_s8(v, 2) + (int16_t)vgetq_lane_s8(v, 3) + + (int16_t)vgetq_lane_s8(v, 4) + (int16_t)vgetq_lane_s8(v, 5) + + (int16_t)vgetq_lane_s8(v, 6) + (int16_t)vgetq_lane_s8(v, 7) + + (int16_t)vgetq_lane_s8(v, 8) + (int16_t)vgetq_lane_s8(v, 9) + + (int16_t)vgetq_lane_s8(v, 10) + (int16_t)vgetq_lane_s8(v, 11) + + (int16_t)vgetq_lane_s8(v, 12) + (int16_t)vgetq_lane_s8(v, 13) + + (int16_t)vgetq_lane_s8(v, 14) + (int16_t)vgetq_lane_s8(v, 15); +} + +inline static int32_t vaddvq_s16(int16x8_t v) { + return + (int32_t)vgetq_lane_s16(v, 0) + (int32_t)vgetq_lane_s16(v, 1) + + (int32_t)vgetq_lane_s16(v, 2) + (int32_t)vgetq_lane_s16(v, 3) + + (int32_t)vgetq_lane_s16(v, 4) + (int32_t)vgetq_lane_s16(v, 5) + + (int32_t)vgetq_lane_s16(v, 6) + (int32_t)vgetq_lane_s16(v, 7); +} + +inline static uint32_t vaddvq_u16(uint16x8_t v) { + return + (uint32_t)vgetq_lane_u16(v, 0) + (uint32_t)vgetq_lane_u16(v, 1) + + (uint32_t)vgetq_lane_u16(v, 2) + (uint32_t)vgetq_lane_u16(v, 3) + + (uint32_t)vgetq_lane_u16(v, 4) + (uint32_t)vgetq_lane_u16(v, 5) + + (uint32_t)vgetq_lane_u16(v, 6) + (uint32_t)vgetq_lane_u16(v, 7); +} + +inline static int32_t vaddvq_s32(int32x4_t v) { + return vgetq_lane_s32(v, 0) + vgetq_lane_s32(v, 1) + vgetq_lane_s32(v, 2) + vgetq_lane_s32(v, 3); +} + +inline static float vaddvq_f32(float32x4_t v) { + return vgetq_lane_f32(v, 0) + vgetq_lane_f32(v, 1) + vgetq_lane_f32(v, 2) + vgetq_lane_f32(v, 3); +} + +inline static float vminvq_f32(float32x4_t v) { + return + MIN(MIN(vgetq_lane_f32(v, 0), vgetq_lane_f32(v, 1)), + MIN(vgetq_lane_f32(v, 2), vgetq_lane_f32(v, 3))); +} + +inline static float vmaxvq_f32(float32x4_t v) { + return + MAX(MAX(vgetq_lane_f32(v, 0), vgetq_lane_f32(v, 1)), + MAX(vgetq_lane_f32(v, 2), vgetq_lane_f32(v, 3))); +} + +inline static int32x4_t vcvtnq_s32_f32(float32x4_t v) { + int32x4_t res; + + res[0] = roundf(vgetq_lane_f32(v, 0)); + res[1] = roundf(vgetq_lane_f32(v, 1)); + res[2] = roundf(vgetq_lane_f32(v, 2)); + res[3] = roundf(vgetq_lane_f32(v, 3)); + + return res; +} + +#endif +#endif + +#define QK4_0 32 +typedef struct { + ggml_fp16_t d; // delta + uint8_t qs[QK4_0 / 2]; // nibbles / quants +} block_q4_0; +static_assert(sizeof(block_q4_0) == sizeof(ggml_fp16_t) + QK4_0 / 2, "wrong q4_0 block size/padding"); + +#define QK4_1 32 +typedef struct { + ggml_fp16_t d; // delta + ggml_fp16_t m; // min + uint8_t qs[QK4_1 / 2]; // nibbles / quants +} block_q4_1; +static_assert(sizeof(block_q4_1) == 2 * sizeof(ggml_fp16_t) + QK4_1 / 2, "wrong q4_1 block size/padding"); + +#define QK5_0 32 +typedef struct { + ggml_fp16_t d; // delta + uint8_t qh[4]; // 5-th bit of quants + uint8_t qs[QK5_0 / 2]; // nibbles / quants +} block_q5_0; +static_assert(sizeof(block_q5_0) == sizeof(ggml_fp16_t) + sizeof(uint32_t) + QK5_0 / 2, "wrong q5_0 block size/padding"); + +#define QK5_1 32 +typedef struct { + ggml_fp16_t d; // delta + ggml_fp16_t m; // min + uint8_t qh[4]; // 5-th bit of quants + uint8_t qs[QK5_1 / 2]; // nibbles / quants +} block_q5_1; +static_assert(sizeof(block_q5_1) == 2 * sizeof(ggml_fp16_t) + sizeof(uint32_t) + QK5_1 / 2, "wrong q5_1 block size/padding"); + +#define QK8_0 32 +typedef struct { + ggml_fp16_t d; // delta + int8_t qs[QK8_0]; // quants +} block_q8_0; +static_assert(sizeof(block_q8_0) == sizeof(ggml_fp16_t) + QK8_0, "wrong q8_0 block size/padding"); + +#define QK8_1 32 +typedef struct { + float d; // delta + float s; // d * sum(qs[i]) + int8_t qs[QK8_1]; // quants +} block_q8_1; +static_assert(sizeof(block_q8_1) == 2*sizeof(float) + QK8_1, "wrong q8_1 block size/padding"); + +// reference implementation for deterministic creation of model files +static void quantize_row_q4_0_reference(const float * restrict x, block_q4_0 * restrict y, int k) { + static const int qk = QK4_0; + + assert(k % qk == 0); + + const int nb = k / qk; + + for (int i = 0; i < nb; i++) { + float amax = 0.0f; // absolute max + float max = 0.0f; + + for (int j = 0; j < qk; j++) { + const float v = x[i*qk + j]; + if (amax < fabsf(v)) { + amax = fabsf(v); + max = v; + } + } + + const float d = max / -8; + const float id = d ? 1.0f/d : 0.0f; + + y[i].d = GGML_FP32_TO_FP16(d); + + for (int j = 0; j < qk/2; ++j) { + const float x0 = x[i*qk + 0 + j]*id; + const float x1 = x[i*qk + qk/2 + j]*id; + + const uint8_t xi0 = MIN(15, (int8_t)(x0 + 8.5f)); + const uint8_t xi1 = MIN(15, (int8_t)(x1 + 8.5f)); + + y[i].qs[j] = xi0; + y[i].qs[j] |= xi1 << 4; + } + } +} + +static void quantize_row_q4_0(const float * restrict x, void * restrict y, int k) { + quantize_row_q4_0_reference(x, y, k); +} + +static void quantize_row_q4_1_reference(const float * restrict x, block_q4_1 * restrict y, int k) { + const int qk = QK4_1; + + assert(k % qk == 0); + + const int nb = k / qk; + + for (int i = 0; i < nb; i++) { + float min = FLT_MAX; + float max = -FLT_MAX; + + for (int j = 0; j < qk; j++) { + const float v = x[i*qk + j]; + + if (v < min) min = v; + if (v > max) max = v; + } + + const float d = (max - min) / ((1 << 4) - 1); + const float id = d ? 1.0f/d : 0.0f; + + y[i].d = GGML_FP32_TO_FP16(d); + y[i].m = GGML_FP32_TO_FP16(min); + + for (int j = 0; j < qk/2; ++j) { + const float x0 = (x[i*qk + 0 + j] - min)*id; + const float x1 = (x[i*qk + qk/2 + j] - min)*id; + + const uint8_t xi0 = MIN(15, (int8_t)(x0 + 0.5f)); + const uint8_t xi1 = MIN(15, (int8_t)(x1 + 0.5f)); + + y[i].qs[j] = xi0; + y[i].qs[j] |= xi1 << 4; + } + } +} + +static void quantize_row_q4_1(const float * restrict x, void * restrict y, int k) { + quantize_row_q4_1_reference(x, y, k); +} + +static void quantize_row_q5_0_reference(const float * restrict x, block_q5_0 * restrict y, int k) { + static const int qk = QK5_0; + + assert(k % qk == 0); + + const int nb = k / qk; + + for (int i = 0; i < nb; i++) { + float amax = 0.0f; // absolute max + float max = 0.0f; + + for (int j = 0; j < qk; j++) { + const float v = x[i*qk + j]; + if (amax < fabsf(v)) { + amax = fabsf(v); + max = v; + } + } + + const float d = max / -16; + const float id = d ? 1.0f/d : 0.0f; + + y[i].d = GGML_FP32_TO_FP16(d); + + uint32_t qh = 0; + + for (int j = 0; j < qk/2; ++j) { + const float x0 = x[i*qk + 0 + j]*id; + const float x1 = x[i*qk + qk/2 + j]*id; + + const uint8_t xi0 = MIN(31, (int8_t)(x0 + 16.5f)); + const uint8_t xi1 = MIN(31, (int8_t)(x1 + 16.5f)); + + y[i].qs[j] = (xi0 & 0x0F) | ((xi1 & 0x0F) << 4); + + // get the 5-th bit and store it in qh at the right position + qh |= ((xi0 & 0x10) >> 4) << (j + 0); + qh |= ((xi1 & 0x10) >> 4) << (j + qk/2); + } + + memcpy(&y[i].qh, &qh, sizeof(qh)); + } +} + +static void quantize_row_q5_0(const float * restrict x, void * restrict y, int k) { + quantize_row_q5_0_reference(x, y, k); +} + +static void quantize_row_q5_1_reference(const float * restrict x, block_q5_1 * restrict y, int k) { + const int qk = QK5_1; + + assert(k % qk == 0); + + const int nb = k / qk; + + for (int i = 0; i < nb; i++) { + float min = FLT_MAX; + float max = -FLT_MAX; + + for (int j = 0; j < qk; j++) { + const float v = x[i*qk + j]; + + if (v < min) min = v; + if (v > max) max = v; + } + + const float d = (max - min) / ((1 << 5) - 1); + const float id = d ? 1.0f/d : 0.0f; + + y[i].d = GGML_FP32_TO_FP16(d); + y[i].m = GGML_FP32_TO_FP16(min); + + uint32_t qh = 0; + + for (int j = 0; j < qk/2; ++j) { + const float x0 = (x[i*qk + 0 + j] - min)*id; + const float x1 = (x[i*qk + qk/2 + j] - min)*id; + + const uint8_t xi0 = (uint8_t)(x0 + 0.5f); + const uint8_t xi1 = (uint8_t)(x1 + 0.5f); + + y[i].qs[j] = (xi0 & 0x0F) | ((xi1 & 0x0F) << 4); + + // get the 5-th bit and store it in qh at the right position + qh |= ((xi0 & 0x10) >> 4) << (j + 0); + qh |= ((xi1 & 0x10) >> 4) << (j + qk/2); + } + + memcpy(&y[i].qh, &qh, sizeof(y[i].qh)); + } +} + +static void quantize_row_q5_1(const float * restrict x, void * restrict y, int k) { + quantize_row_q5_1_reference(x, y, k); +} + +// reference implementation for deterministic creation of model files +static void quantize_row_q8_0_reference(const float * restrict x, block_q8_0 * restrict y, int k) { + assert(k % QK8_0 == 0); + const int nb = k / QK8_0; + + for (int i = 0; i < nb; i++) { + float amax = 0.0f; // absolute max + + for (int j = 0; j < QK8_0; j++) { + const float v = x[i*QK8_0 + j]; + amax = MAX(amax, fabsf(v)); + } + + const float d = amax / ((1 << 7) - 1); + const float id = d ? 1.0f/d : 0.0f; + + y[i].d = GGML_FP32_TO_FP16(d); + + for (int j = 0; j < QK8_0; ++j) { + const float x0 = x[i*QK8_0 + j]*id; + + y[i].qs[j] = roundf(x0); + } + } +} + +static void quantize_row_q8_0(const float * restrict x, void * restrict vy, int k) { + assert(QK8_0 == 32); + assert(k % QK8_0 == 0); + const int nb = k / QK8_0; + + block_q8_0 * restrict y = vy; + +#if defined(__ARM_NEON) + for (int i = 0; i < nb; i++) { + float32x4_t srcv [8]; + float32x4_t asrcv[8]; + float32x4_t amaxv[8]; + + for (int j = 0; j < 8; j++) srcv[j] = vld1q_f32(x + i*32 + 4*j); + for (int j = 0; j < 8; j++) asrcv[j] = vabsq_f32(srcv[j]); + + for (int j = 0; j < 4; j++) amaxv[2*j] = vmaxq_f32(asrcv[2*j], asrcv[2*j+1]); + for (int j = 0; j < 2; j++) amaxv[4*j] = vmaxq_f32(amaxv[4*j], amaxv[4*j+2]); + for (int j = 0; j < 1; j++) amaxv[8*j] = vmaxq_f32(amaxv[8*j], amaxv[8*j+4]); + + const float amax = vmaxvq_f32(amaxv[0]); + + const float d = amax / ((1 << 7) - 1); + const float id = d ? 1.0f/d : 0.0f; + + y[i].d = GGML_FP32_TO_FP16(d); + + for (int j = 0; j < 8; j++) { + const float32x4_t v = vmulq_n_f32(srcv[j], id); + const int32x4_t vi = vcvtnq_s32_f32(v); + + y[i].qs[4*j + 0] = vgetq_lane_s32(vi, 0); + y[i].qs[4*j + 1] = vgetq_lane_s32(vi, 1); + y[i].qs[4*j + 2] = vgetq_lane_s32(vi, 2); + y[i].qs[4*j + 3] = vgetq_lane_s32(vi, 3); + } + } +#elif defined(__wasm_simd128__) + for (int i = 0; i < nb; i++) { + v128_t srcv [8]; + v128_t asrcv[8]; + v128_t amaxv[8]; + + for (int j = 0; j < 8; j++) srcv[j] = wasm_v128_load(x + i*32 + 4*j); + for (int j = 0; j < 8; j++) asrcv[j] = wasm_f32x4_abs(srcv[j]); + + for (int j = 0; j < 4; j++) amaxv[2*j] = wasm_f32x4_max(asrcv[2*j], asrcv[2*j+1]); + for (int j = 0; j < 2; j++) amaxv[4*j] = wasm_f32x4_max(amaxv[4*j], amaxv[4*j+2]); + for (int j = 0; j < 1; j++) amaxv[8*j] = wasm_f32x4_max(amaxv[8*j], amaxv[8*j+4]); + + const float amax = MAX(MAX(wasm_f32x4_extract_lane(amaxv[0], 0), + wasm_f32x4_extract_lane(amaxv[0], 1)), + MAX(wasm_f32x4_extract_lane(amaxv[0], 2), + wasm_f32x4_extract_lane(amaxv[0], 3))); + + const float d = amax / ((1 << 7) - 1); + const float id = d ? 1.0f/d : 0.0f; + + y[i].d = GGML_FP32_TO_FP16(d); + + for (int j = 0; j < 8; j++) { + const v128_t v = wasm_f32x4_mul(srcv[j], wasm_f32x4_splat(id)); + const v128_t vi = wasm_i32x4_trunc_sat_f32x4(v); + + y[i].qs[4*j + 0] = wasm_i32x4_extract_lane(vi, 0); + y[i].qs[4*j + 1] = wasm_i32x4_extract_lane(vi, 1); + y[i].qs[4*j + 2] = wasm_i32x4_extract_lane(vi, 2); + y[i].qs[4*j + 3] = wasm_i32x4_extract_lane(vi, 3); + } + } +#elif defined(__AVX2__) || defined(__AVX__) + for (int i = 0; i < nb; i++) { + // Load elements into 4 AVX vectors + __m256 v0 = _mm256_loadu_ps( x ); + __m256 v1 = _mm256_loadu_ps( x + 8 ); + __m256 v2 = _mm256_loadu_ps( x + 16 ); + __m256 v3 = _mm256_loadu_ps( x + 24 ); + x += 32; + + // Compute max(abs(e)) for the block + const __m256 signBit = _mm256_set1_ps( -0.0f ); + __m256 maxAbs = _mm256_andnot_ps( signBit, v0 ); + maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v1 ) ); + maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v2 ) ); + maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v3 ) ); + + __m128 max4 = _mm_max_ps( _mm256_extractf128_ps( maxAbs, 1 ), _mm256_castps256_ps128( maxAbs ) ); + max4 = _mm_max_ps( max4, _mm_movehl_ps( max4, max4 ) ); + max4 = _mm_max_ss( max4, _mm_movehdup_ps( max4 ) ); + const float maxScalar = _mm_cvtss_f32( max4 ); + + // Quantize these floats + const float d = maxScalar / 127.f; + y[i].d = GGML_FP32_TO_FP16(d); + const float id = ( maxScalar != 0.0f ) ? 127.f / maxScalar : 0.0f; + const __m256 mul = _mm256_set1_ps( id ); + + // Apply the multiplier + v0 = _mm256_mul_ps( v0, mul ); + v1 = _mm256_mul_ps( v1, mul ); + v2 = _mm256_mul_ps( v2, mul ); + v3 = _mm256_mul_ps( v3, mul ); + + // Round to nearest integer + v0 = _mm256_round_ps( v0, _MM_ROUND_NEAREST ); + v1 = _mm256_round_ps( v1, _MM_ROUND_NEAREST ); + v2 = _mm256_round_ps( v2, _MM_ROUND_NEAREST ); + v3 = _mm256_round_ps( v3, _MM_ROUND_NEAREST ); + + // Convert floats to integers + __m256i i0 = _mm256_cvtps_epi32( v0 ); + __m256i i1 = _mm256_cvtps_epi32( v1 ); + __m256i i2 = _mm256_cvtps_epi32( v2 ); + __m256i i3 = _mm256_cvtps_epi32( v3 ); + +#if defined(__AVX2__) + // Convert int32 to int16 + i0 = _mm256_packs_epi32( i0, i1 ); // 0, 1, 2, 3, 8, 9, 10, 11, 4, 5, 6, 7, 12, 13, 14, 15 + i2 = _mm256_packs_epi32( i2, i3 ); // 16, 17, 18, 19, 24, 25, 26, 27, 20, 21, 22, 23, 28, 29, 30, 31 + // Convert int16 to int8 + i0 = _mm256_packs_epi16( i0, i2 ); // 0, 1, 2, 3, 8, 9, 10, 11, 16, 17, 18, 19, 24, 25, 26, 27, 4, 5, 6, 7, 12, 13, 14, 15, 20, 21, 22, 23, 28, 29, 30, 31 + + // We got our precious signed bytes, but the order is now wrong + // These AVX2 pack instructions process 16-byte pieces independently + // The following instruction is fixing the order + const __m256i perm = _mm256_setr_epi32( 0, 4, 1, 5, 2, 6, 3, 7 ); + i0 = _mm256_permutevar8x32_epi32( i0, perm ); + + _mm256_storeu_si256((__m256i *)y[i].qs, i0); +#else + // Since we don't have in AVX some necessary functions, + // we split the registers in half and call AVX2 analogs from SSE + __m128i ni0 = _mm256_castsi256_si128( i0 ); + __m128i ni1 = _mm256_extractf128_si256( i0, 1); + __m128i ni2 = _mm256_castsi256_si128( i1 ); + __m128i ni3 = _mm256_extractf128_si256( i1, 1); + __m128i ni4 = _mm256_castsi256_si128( i2 ); + __m128i ni5 = _mm256_extractf128_si256( i2, 1); + __m128i ni6 = _mm256_castsi256_si128( i3 ); + __m128i ni7 = _mm256_extractf128_si256( i3, 1); + + // Convert int32 to int16 + ni0 = _mm_packs_epi32( ni0, ni1 ); + ni2 = _mm_packs_epi32( ni2, ni3 ); + ni4 = _mm_packs_epi32( ni4, ni5 ); + ni6 = _mm_packs_epi32( ni6, ni7 ); + // Convert int16 to int8 + ni0 = _mm_packs_epi16( ni0, ni2 ); + ni4 = _mm_packs_epi16( ni4, ni6 ); + + _mm_storeu_si128((__m128i *)(y[i].qs + 0), ni0); + _mm_storeu_si128((__m128i *)(y[i].qs + 16), ni4); +#endif + } +#else + // scalar + quantize_row_q8_0_reference(x, y, k); +#endif +} + +// reference implementation for deterministic creation of model files +static void quantize_row_q8_1_reference(const float * restrict x, block_q8_1 * restrict y, int k) { + assert(QK8_1 == 32); + assert(k % QK8_1 == 0); + const int nb = k / QK8_1; + + for (int i = 0; i < nb; i++) { + float amax = 0.0f; // absolute max + + for (int j = 0; j < QK8_1; j++) { + const float v = x[i*QK8_1 + j]; + amax = MAX(amax, fabsf(v)); + } + + const float d = amax / ((1 << 7) - 1); + const float id = d ? 1.0f/d : 0.0f; + + y[i].d = d; + + int sum = 0; + + for (int j = 0; j < QK8_1/2; ++j) { + const float v0 = x[i*QK8_1 + j]*id; + const float v1 = x[i*QK8_1 + QK8_1/2 + j]*id; + + y[i].qs[ j] = roundf(v0); + y[i].qs[QK8_1/2 + j] = roundf(v1); + + sum += y[i].qs[ j]; + sum += y[i].qs[QK8_1/2 + j]; + } + + y[i].s = sum*d; + } +} + +static void quantize_row_q8_1(const float * restrict x, void * restrict vy, int k) { + assert(k % QK8_1 == 0); + const int nb = k / QK8_1; + + block_q8_1 * restrict y = vy; + +#if defined(__ARM_NEON) + for (int i = 0; i < nb; i++) { + float32x4_t srcv [8]; + float32x4_t asrcv[8]; + float32x4_t amaxv[8]; + + for (int j = 0; j < 8; j++) srcv[j] = vld1q_f32(x + i*32 + 4*j); + for (int j = 0; j < 8; j++) asrcv[j] = vabsq_f32(srcv[j]); + + for (int j = 0; j < 4; j++) amaxv[2*j] = vmaxq_f32(asrcv[2*j], asrcv[2*j+1]); + for (int j = 0; j < 2; j++) amaxv[4*j] = vmaxq_f32(amaxv[4*j], amaxv[4*j+2]); + for (int j = 0; j < 1; j++) amaxv[8*j] = vmaxq_f32(amaxv[8*j], amaxv[8*j+4]); + + const float amax = vmaxvq_f32(amaxv[0]); + + const float d = amax / ((1 << 7) - 1); + const float id = d ? 1.0f/d : 0.0f; + + y[i].d = d; + + int32x4_t accv = vdupq_n_s32(0); + + for (int j = 0; j < 8; j++) { + const float32x4_t v = vmulq_n_f32(srcv[j], id); + const int32x4_t vi = vcvtnq_s32_f32(v); + + y[i].qs[4*j + 0] = vgetq_lane_s32(vi, 0); + y[i].qs[4*j + 1] = vgetq_lane_s32(vi, 1); + y[i].qs[4*j + 2] = vgetq_lane_s32(vi, 2); + y[i].qs[4*j + 3] = vgetq_lane_s32(vi, 3); + + accv = vaddq_s32(accv, vi); + } + + y[i].s = d * vaddvq_s32(accv); + } +#elif defined(__wasm_simd128__) + for (int i = 0; i < nb; i++) { + v128_t srcv [8]; + v128_t asrcv[8]; + v128_t amaxv[8]; + + for (int j = 0; j < 8; j++) srcv[j] = wasm_v128_load(x + i*32 + 4*j); + for (int j = 0; j < 8; j++) asrcv[j] = wasm_f32x4_abs(srcv[j]); + + for (int j = 0; j < 4; j++) amaxv[2*j] = wasm_f32x4_max(asrcv[2*j], asrcv[2*j+1]); + for (int j = 0; j < 2; j++) amaxv[4*j] = wasm_f32x4_max(amaxv[4*j], amaxv[4*j+2]); + for (int j = 0; j < 1; j++) amaxv[8*j] = wasm_f32x4_max(amaxv[8*j], amaxv[8*j+4]); + + const float amax = MAX(MAX(wasm_f32x4_extract_lane(amaxv[0], 0), + wasm_f32x4_extract_lane(amaxv[0], 1)), + MAX(wasm_f32x4_extract_lane(amaxv[0], 2), + wasm_f32x4_extract_lane(amaxv[0], 3))); + + const float d = amax / ((1 << 7) - 1); + const float id = d ? 1.0f/d : 0.0f; + + y[i].d = d; + + v128_t accv = wasm_i32x4_splat(0); + + for (int j = 0; j < 8; j++) { + const v128_t v = wasm_f32x4_mul(srcv[j], wasm_f32x4_splat(id)); + const v128_t vi = wasm_i32x4_trunc_sat_f32x4(v); + + y[i].qs[4*j + 0] = wasm_i32x4_extract_lane(vi, 0); + y[i].qs[4*j + 1] = wasm_i32x4_extract_lane(vi, 1); + y[i].qs[4*j + 2] = wasm_i32x4_extract_lane(vi, 2); + y[i].qs[4*j + 3] = wasm_i32x4_extract_lane(vi, 3); + + accv = wasm_i32x4_add(accv, vi); + } + + y[i].s = d * (wasm_i32x4_extract_lane(accv, 0) + + wasm_i32x4_extract_lane(accv, 1) + + wasm_i32x4_extract_lane(accv, 2) + + wasm_i32x4_extract_lane(accv, 3)); + } +#elif defined(__AVX2__) || defined(__AVX__) + for (int i = 0; i < nb; i++) { + // Load elements into 4 AVX vectors + __m256 v0 = _mm256_loadu_ps( x ); + __m256 v1 = _mm256_loadu_ps( x + 8 ); + __m256 v2 = _mm256_loadu_ps( x + 16 ); + __m256 v3 = _mm256_loadu_ps( x + 24 ); + x += 32; + + // Compute max(abs(e)) for the block + const __m256 signBit = _mm256_set1_ps( -0.0f ); + __m256 maxAbs = _mm256_andnot_ps( signBit, v0 ); + maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v1 ) ); + maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v2 ) ); + maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v3 ) ); + + __m128 max4 = _mm_max_ps( _mm256_extractf128_ps( maxAbs, 1 ), _mm256_castps256_ps128( maxAbs ) ); + max4 = _mm_max_ps( max4, _mm_movehl_ps( max4, max4 ) ); + max4 = _mm_max_ss( max4, _mm_movehdup_ps( max4 ) ); + const float maxScalar = _mm_cvtss_f32( max4 ); + + // Quantize these floats + const float d = maxScalar / 127.f; + y[i].d = d; + const float id = ( maxScalar != 0.0f ) ? 127.f / maxScalar : 0.0f; + const __m256 mul = _mm256_set1_ps( id ); + + // Apply the multiplier + v0 = _mm256_mul_ps( v0, mul ); + v1 = _mm256_mul_ps( v1, mul ); + v2 = _mm256_mul_ps( v2, mul ); + v3 = _mm256_mul_ps( v3, mul ); + + // Round to nearest integer + v0 = _mm256_round_ps( v0, _MM_ROUND_NEAREST ); + v1 = _mm256_round_ps( v1, _MM_ROUND_NEAREST ); + v2 = _mm256_round_ps( v2, _MM_ROUND_NEAREST ); + v3 = _mm256_round_ps( v3, _MM_ROUND_NEAREST ); + + // Convert floats to integers + __m256i i0 = _mm256_cvtps_epi32( v0 ); + __m256i i1 = _mm256_cvtps_epi32( v1 ); + __m256i i2 = _mm256_cvtps_epi32( v2 ); + __m256i i3 = _mm256_cvtps_epi32( v3 ); + +#if defined(__AVX2__) + // Compute the sum of the quants and set y[i].s + y[i].s = d * hsum_i32_8(_mm256_add_epi32(_mm256_add_epi32(i0, i1), _mm256_add_epi32(i2, i3))); + + // Convert int32 to int16 + i0 = _mm256_packs_epi32( i0, i1 ); // 0, 1, 2, 3, 8, 9, 10, 11, 4, 5, 6, 7, 12, 13, 14, 15 + i2 = _mm256_packs_epi32( i2, i3 ); // 16, 17, 18, 19, 24, 25, 26, 27, 20, 21, 22, 23, 28, 29, 30, 31 + // Convert int16 to int8 + i0 = _mm256_packs_epi16( i0, i2 ); // 0, 1, 2, 3, 8, 9, 10, 11, 16, 17, 18, 19, 24, 25, 26, 27, 4, 5, 6, 7, 12, 13, 14, 15, 20, 21, 22, 23, 28, 29, 30, 31 + + // We got our precious signed bytes, but the order is now wrong + // These AVX2 pack instructions process 16-byte pieces independently + // The following instruction is fixing the order + const __m256i perm = _mm256_setr_epi32( 0, 4, 1, 5, 2, 6, 3, 7 ); + i0 = _mm256_permutevar8x32_epi32( i0, perm ); + + _mm256_storeu_si256((__m256i *)y[i].qs, i0); +#else + // Since we don't have in AVX some necessary functions, + // we split the registers in half and call AVX2 analogs from SSE + __m128i ni0 = _mm256_castsi256_si128( i0 ); + __m128i ni1 = _mm256_extractf128_si256( i0, 1); + __m128i ni2 = _mm256_castsi256_si128( i1 ); + __m128i ni3 = _mm256_extractf128_si256( i1, 1); + __m128i ni4 = _mm256_castsi256_si128( i2 ); + __m128i ni5 = _mm256_extractf128_si256( i2, 1); + __m128i ni6 = _mm256_castsi256_si128( i3 ); + __m128i ni7 = _mm256_extractf128_si256( i3, 1); + + // Compute the sum of the quants and set y[i].s + const __m128i s0 = _mm_add_epi32(_mm_add_epi32(ni0, ni1), _mm_add_epi32(ni2, ni3)); + const __m128i s1 = _mm_add_epi32(_mm_add_epi32(ni4, ni5), _mm_add_epi32(ni6, ni7)); + y[i].s = d * hsum_i32_4(_mm_add_epi32(s0, s1)); + + // Convert int32 to int16 + ni0 = _mm_packs_epi32( ni0, ni1 ); + ni2 = _mm_packs_epi32( ni2, ni3 ); + ni4 = _mm_packs_epi32( ni4, ni5 ); + ni6 = _mm_packs_epi32( ni6, ni7 ); + // Convert int16 to int8 + ni0 = _mm_packs_epi16( ni0, ni2 ); + ni4 = _mm_packs_epi16( ni4, ni6 ); + + _mm_storeu_si128((__m128i *)(y[i].qs + 0), ni0); + _mm_storeu_si128((__m128i *)(y[i].qs + 16), ni4); +#endif + } +#else + // scalar + quantize_row_q8_1_reference(x, y, k); +#endif +} + +static void dequantize_row_q4_0(const block_q4_0 * restrict x, float * restrict y, int k) { + static const int qk = QK4_0; + + assert(k % qk == 0); + + const int nb = k / qk; + + for (int i = 0; i < nb; i++) { + const float d = GGML_FP16_TO_FP32(x[i].d); + + for (int j = 0; j < qk/2; ++j) { + const int x0 = (x[i].qs[j] & 0x0F) - 8; + const int x1 = (x[i].qs[j] >> 4) - 8; + + y[i*qk + j + 0 ] = x0*d; + y[i*qk + j + qk/2] = x1*d; + } + } +} + +static void dequantize_row_q4_1(const block_q4_1 * restrict x, float * restrict y, int k) { + static const int qk = QK4_1; + + assert(k % qk == 0); + + const int nb = k / qk; + + for (int i = 0; i < nb; i++) { + const float d = GGML_FP16_TO_FP32(x[i].d); + const float m = GGML_FP16_TO_FP32(x[i].m); + + for (int j = 0; j < qk/2; ++j) { + const int x0 = (x[i].qs[j] & 0x0F); + const int x1 = (x[i].qs[j] >> 4); + + y[i*qk + j + 0 ] = x0*d + m; + y[i*qk + j + qk/2] = x1*d + m; + } + } +} + +static void dequantize_row_q5_0(const block_q5_0 * restrict x, float * restrict y, int k) { + static const int qk = QK5_0; + + assert(k % qk == 0); + + const int nb = k / qk; + + for (int i = 0; i < nb; i++) { + const float d = GGML_FP16_TO_FP32(x[i].d); + + uint32_t qh; + memcpy(&qh, x[i].qh, sizeof(qh)); + + for (int j = 0; j < qk/2; ++j) { + const uint8_t xh_0 = ((qh >> (j + 0)) << 4) & 0x10; + const uint8_t xh_1 = ((qh >> (j + 12)) ) & 0x10; + + const int32_t x0 = ((x[i].qs[j] & 0x0F) | xh_0) - 16; + const int32_t x1 = ((x[i].qs[j] >> 4) | xh_1) - 16; + + y[i*qk + j + 0 ] = x0*d; + y[i*qk + j + qk/2] = x1*d; + } + } +} + +static void dequantize_row_q5_1(const block_q5_1 * restrict x, float * restrict y, int k) { + static const int qk = QK5_1; + + assert(k % qk == 0); + + const int nb = k / qk; + + for (int i = 0; i < nb; i++) { + const float d = GGML_FP16_TO_FP32(x[i].d); + const float m = GGML_FP16_TO_FP32(x[i].m); + + uint32_t qh; + memcpy(&qh, x[i].qh, sizeof(qh)); + + for (int j = 0; j < qk/2; ++j) { + const uint8_t xh_0 = ((qh >> (j + 0)) << 4) & 0x10; + const uint8_t xh_1 = ((qh >> (j + 12)) ) & 0x10; + + const int x0 = (x[i].qs[j] & 0x0F) | xh_0; + const int x1 = (x[i].qs[j] >> 4) | xh_1; + + y[i*qk + j + 0 ] = x0*d + m; + y[i*qk + j + qk/2] = x1*d + m; + } + } +} + +static void dequantize_row_q8_0(const void * restrict vx, float * restrict y, int k) { + static const int qk = QK8_0; + + assert(k % qk == 0); + + const int nb = k / qk; + + const block_q8_0 * restrict x = vx; + + for (int i = 0; i < nb; i++) { + const float d = GGML_FP16_TO_FP32(x[i].d); + + for (int j = 0; j < qk; ++j) { + y[i*qk + j] = x[i].qs[j]*d; + } + } +} + +static void ggml_vec_dot_q4_0_q8_0(const int n, float * restrict s, const void * restrict vx, const void * restrict vy); +static void ggml_vec_dot_q4_1_q8_1(const int n, float * restrict s, const void * restrict vx, const void * restrict vy); +static void ggml_vec_dot_q5_0_q8_0(const int n, float * restrict s, const void * restrict vx, const void * restrict vy); +static void ggml_vec_dot_q5_1_q8_1(const int n, float * restrict s, const void * restrict vx, const void * restrict vy); +static void ggml_vec_dot_q8_0_q8_0(const int n, float * restrict s, const void * restrict vx, const void * restrict vy); + +static const quantize_fns_t quantize_fns[GGML_TYPE_COUNT] = { + [GGML_TYPE_Q4_0] = { + .dequantize_row_q = (dequantize_row_q_t) dequantize_row_q4_0, + .quantize_row_q = quantize_row_q4_0, + .quantize_row_q_reference = (quantize_row_q_t) quantize_row_q4_0_reference, + .quantize_row_q_dot = quantize_row_q8_0, + .vec_dot_q = ggml_vec_dot_q4_0_q8_0, + .vec_dot_type = GGML_TYPE_Q8_0, + }, + [GGML_TYPE_Q4_1] = { + .dequantize_row_q = (dequantize_row_q_t)dequantize_row_q4_1, + .quantize_row_q = quantize_row_q4_1, + .quantize_row_q_reference = (quantize_row_q_t) quantize_row_q4_1_reference, + .quantize_row_q_dot = quantize_row_q8_1, + .vec_dot_q = ggml_vec_dot_q4_1_q8_1, + .vec_dot_type = GGML_TYPE_Q8_1, + }, + [GGML_TYPE_Q5_0] = { + .dequantize_row_q = (dequantize_row_q_t) dequantize_row_q5_0, + .quantize_row_q = quantize_row_q5_0, + .quantize_row_q_reference = (quantize_row_q_t) quantize_row_q5_0_reference, + .quantize_row_q_dot = quantize_row_q8_0, + .vec_dot_q = ggml_vec_dot_q5_0_q8_0, + .vec_dot_type = GGML_TYPE_Q8_0, + }, + [GGML_TYPE_Q5_1] = { + .dequantize_row_q = (dequantize_row_q_t) dequantize_row_q5_1, + .quantize_row_q = quantize_row_q5_1, + .quantize_row_q_reference = (quantize_row_q_t) quantize_row_q5_1_reference, + .quantize_row_q_dot = quantize_row_q8_1, + .vec_dot_q = ggml_vec_dot_q5_1_q8_1, + .vec_dot_type = GGML_TYPE_Q8_1, + }, + [GGML_TYPE_Q8_0] = { + .dequantize_row_q = dequantize_row_q8_0, + .quantize_row_q = quantize_row_q8_0, + .quantize_row_q_reference = (quantize_row_q_t) quantize_row_q8_0_reference, + .quantize_row_q_dot = quantize_row_q8_0, + .vec_dot_q = ggml_vec_dot_q8_0_q8_0, + .vec_dot_type = GGML_TYPE_Q8_0, + }, + [GGML_TYPE_Q8_1] = { + .dequantize_row_q = NULL, // TODO + .quantize_row_q = quantize_row_q8_1, + .quantize_row_q_reference = (quantize_row_q_t) quantize_row_q8_1_reference, + .quantize_row_q_dot = quantize_row_q8_1, + .vec_dot_q = NULL, // TODO + .vec_dot_type = GGML_TYPE_Q8_1, + }, +}; + +// For internal test use +quantize_fns_t ggml_internal_get_quantize_fn(size_t i) { + GGML_ASSERT(i < GGML_TYPE_COUNT); + return quantize_fns[i]; +} + + +// +// simd mappings +// + +// we define a common set of C macros which map to specific intrinsics based on the current architecture +// we then implement the fundamental computation operations below using only these macros +// adding support for new architectures requires to define the corresponding SIMD macros +// +// GGML_F32_STEP / GGML_F16_STEP +// number of elements to process in a single step +// +// GGML_F32_EPR / GGML_F16_EPR +// number of elements to fit in a single register +// + +#if defined(__ARM_NEON) && defined(__ARM_FEATURE_FMA) + +#define GGML_SIMD + +// F32 NEON + +#define GGML_F32_STEP 16 +#define GGML_F32_EPR 4 + +#define GGML_F32x4 float32x4_t +#define GGML_F32x4_ZERO vdupq_n_f32(0.0f) +#define GGML_F32x4_SET1(x) vdupq_n_f32(x) +#define GGML_F32x4_LOAD vld1q_f32 +#define GGML_F32x4_STORE vst1q_f32 +#define GGML_F32x4_FMA(a, b, c) vfmaq_f32(a, b, c) +#define GGML_F32x4_ADD vaddq_f32 +#define GGML_F32x4_MUL vmulq_f32 +#define GGML_F32x4_REDUCE_ONE(x) vaddvq_f32(x) +#define GGML_F32x4_REDUCE(res, x) \ +{ \ + for (int i = 0; i < GGML_F32_ARR/2; ++i) { \ + x[2*i] = vaddq_f32(x[2*i], x[2*i+1]); \ + } \ + for (int i = 0; i < GGML_F32_ARR/4; ++i) { \ + x[4*i] = vaddq_f32(x[4*i], x[4*i+2]); \ + } \ + for (int i = 0; i < GGML_F32_ARR/8; ++i) { \ + x[8*i] = vaddq_f32(x[8*i], x[8*i+4]); \ + } \ + res = GGML_F32x4_REDUCE_ONE(x[0]); \ +} + +#define GGML_F32_VEC GGML_F32x4 +#define GGML_F32_VEC_ZERO GGML_F32x4_ZERO +#define GGML_F32_VEC_SET1 GGML_F32x4_SET1 +#define GGML_F32_VEC_LOAD GGML_F32x4_LOAD +#define GGML_F32_VEC_STORE GGML_F32x4_STORE +#define GGML_F32_VEC_FMA GGML_F32x4_FMA +#define GGML_F32_VEC_ADD GGML_F32x4_ADD +#define GGML_F32_VEC_MUL GGML_F32x4_MUL +#define GGML_F32_VEC_REDUCE GGML_F32x4_REDUCE + +// F16 NEON + +#if defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC) + #define GGML_F16_STEP 32 + #define GGML_F16_EPR 8 + + #define GGML_F16x8 float16x8_t + #define GGML_F16x8_ZERO vdupq_n_f16(0.0f) + #define GGML_F16x8_SET1(x) vdupq_n_f16(x) + #define GGML_F16x8_LOAD vld1q_f16 + #define GGML_F16x8_STORE vst1q_f16 + #define GGML_F16x8_FMA(a, b, c) vfmaq_f16(a, b, c) + #define GGML_F16x8_ADD vaddq_f16 + #define GGML_F16x8_MUL vmulq_f16 + #define GGML_F16x8_REDUCE(res, x) \ + { \ + for (int i = 0; i < GGML_F16_ARR/2; ++i) { \ + x[2*i] = vaddq_f16(x[2*i], x[2*i+1]); \ + } \ + for (int i = 0; i < GGML_F16_ARR/4; ++i) { \ + x[4*i] = vaddq_f16(x[4*i], x[4*i+2]); \ + } \ + for (int i = 0; i < GGML_F16_ARR/8; ++i) { \ + x[8*i] = vaddq_f16(x[8*i], x[8*i+4]); \ + } \ + const float32x4_t t0 = vcvt_f32_f16(vget_low_f16 (x[0])); \ + const float32x4_t t1 = vcvt_f32_f16(vget_high_f16(x[0])); \ + res = (ggml_float) vaddvq_f32(vaddq_f32(t0, t1)); \ + } + + #define GGML_F16_VEC GGML_F16x8 + #define GGML_F16_VEC_ZERO GGML_F16x8_ZERO + #define GGML_F16_VEC_SET1 GGML_F16x8_SET1 + #define GGML_F16_VEC_LOAD(p, i) GGML_F16x8_LOAD(p) + #define GGML_F16_VEC_STORE(p, r, i) GGML_F16x8_STORE(p, r[i]) + #define GGML_F16_VEC_FMA GGML_F16x8_FMA + #define GGML_F16_VEC_ADD GGML_F16x8_ADD + #define GGML_F16_VEC_MUL GGML_F16x8_MUL + #define GGML_F16_VEC_REDUCE GGML_F16x8_REDUCE +#else + // if FP16 vector arithmetic is not supported, we use FP32 instead + // and take advantage of the vcvt_ functions to convert to/from FP16 + + #define GGML_F16_STEP 16 + #define GGML_F16_EPR 4 + + #define GGML_F32Cx4 float32x4_t + #define GGML_F32Cx4_ZERO vdupq_n_f32(0.0f) + #define GGML_F32Cx4_SET1(x) vdupq_n_f32(x) + #define GGML_F32Cx4_LOAD(x) vcvt_f32_f16(vld1_f16(x)) + #define GGML_F32Cx4_STORE(x, y) vst1_f16(x, vcvt_f16_f32(y)) + #define GGML_F32Cx4_FMA(a, b, c) vfmaq_f32(a, b, c) + #define GGML_F32Cx4_ADD vaddq_f32 + #define GGML_F32Cx4_MUL vmulq_f32 + #define GGML_F32Cx4_REDUCE GGML_F32x4_REDUCE + + #define GGML_F16_VEC GGML_F32Cx4 + #define GGML_F16_VEC_ZERO GGML_F32Cx4_ZERO + #define GGML_F16_VEC_SET1 GGML_F32Cx4_SET1 + #define GGML_F16_VEC_LOAD(p, i) GGML_F32Cx4_LOAD(p) + #define GGML_F16_VEC_STORE(p, r, i) GGML_F32Cx4_STORE(p, r[i]) + #define GGML_F16_VEC_FMA GGML_F32Cx4_FMA + #define GGML_F16_VEC_ADD GGML_F32Cx4_ADD + #define GGML_F16_VEC_MUL GGML_F32Cx4_MUL + #define GGML_F16_VEC_REDUCE GGML_F32Cx4_REDUCE +#endif + +#elif defined(__AVX__) + +#define GGML_SIMD + +// F32 AVX + +#define GGML_F32_STEP 32 +#define GGML_F32_EPR 8 + +#define GGML_F32x8 __m256 +#define GGML_F32x8_ZERO _mm256_setzero_ps() +#define GGML_F32x8_SET1(x) _mm256_set1_ps(x) +#define GGML_F32x8_LOAD _mm256_loadu_ps +#define GGML_F32x8_STORE _mm256_storeu_ps +#if defined(__FMA__) + #define GGML_F32x8_FMA(a, b, c) _mm256_fmadd_ps(b, c, a) +#else + #define GGML_F32x8_FMA(a, b, c) _mm256_add_ps(_mm256_mul_ps(b, c), a) +#endif +#define GGML_F32x8_ADD _mm256_add_ps +#define GGML_F32x8_MUL _mm256_mul_ps +#define GGML_F32x8_REDUCE(res, x) \ +{ \ + for (int i = 0; i < GGML_F32_ARR/2; ++i) { \ + x[2*i] = _mm256_add_ps(x[2*i], x[2*i+1]); \ + } \ + for (int i = 0; i < GGML_F32_ARR/4; ++i) { \ + x[4*i] = _mm256_add_ps(x[4*i], x[4*i+2]); \ + } \ + for (int i = 0; i < GGML_F32_ARR/8; ++i) { \ + x[8*i] = _mm256_add_ps(x[8*i], x[8*i+4]); \ + } \ + const __m128 t0 = _mm_add_ps(_mm256_castps256_ps128(x[0]), \ + _mm256_extractf128_ps(x[0], 1)); \ + const __m128 t1 = _mm_hadd_ps(t0, t0); \ + res = _mm_cvtss_f32(_mm_hadd_ps(t1, t1)); \ +} +// TODO: is this optimal ? + +#define GGML_F32_VEC GGML_F32x8 +#define GGML_F32_VEC_ZERO GGML_F32x8_ZERO +#define GGML_F32_VEC_SET1 GGML_F32x8_SET1 +#define GGML_F32_VEC_LOAD GGML_F32x8_LOAD +#define GGML_F32_VEC_STORE GGML_F32x8_STORE +#define GGML_F32_VEC_FMA GGML_F32x8_FMA +#define GGML_F32_VEC_ADD GGML_F32x8_ADD +#define GGML_F32_VEC_MUL GGML_F32x8_MUL +#define GGML_F32_VEC_REDUCE GGML_F32x8_REDUCE + +// F16 AVX + +#define GGML_F16_STEP 32 +#define GGML_F16_EPR 8 + +// F16 arithmetic is not supported by AVX, so we use F32 instead + +#define GGML_F32Cx8 __m256 +#define GGML_F32Cx8_ZERO _mm256_setzero_ps() +#define GGML_F32Cx8_SET1(x) _mm256_set1_ps(x) + +#if defined(__F16C__) +// the _mm256_cvt intrinsics require F16C +#define GGML_F32Cx8_LOAD(x) _mm256_cvtph_ps(_mm_loadu_si128((__m128i *)(x))) +#define GGML_F32Cx8_STORE(x, y) _mm_storeu_si128((__m128i *)(x), _mm256_cvtps_ph(y, 0)) +#else +static inline __m256 __avx_f32cx8_load(ggml_fp16_t *x) { + float tmp[8]; + + for (int i = 0; i < 8; i++) { + tmp[i] = GGML_FP16_TO_FP32(x[i]); + } + + return _mm256_loadu_ps(tmp); +} +static inline void __avx_f32cx8_store(ggml_fp16_t *x, __m256 y) { + float arr[8]; + + _mm256_storeu_ps(arr, y); + + for (int i = 0; i < 8; i++) + x[i] = GGML_FP32_TO_FP16(arr[i]); +} +#define GGML_F32Cx8_LOAD(x) __avx_f32cx8_load(x) +#define GGML_F32Cx8_STORE(x, y) __avx_f32cx8_store(x, y) +#endif + +#define GGML_F32Cx8_FMA GGML_F32x8_FMA +#define GGML_F32Cx8_ADD _mm256_add_ps +#define GGML_F32Cx8_MUL _mm256_mul_ps +#define GGML_F32Cx8_REDUCE GGML_F32x8_REDUCE + +#define GGML_F16_VEC GGML_F32Cx8 +#define GGML_F16_VEC_ZERO GGML_F32Cx8_ZERO +#define GGML_F16_VEC_SET1 GGML_F32Cx8_SET1 +#define GGML_F16_VEC_LOAD(p, i) GGML_F32Cx8_LOAD(p) +#define GGML_F16_VEC_STORE(p, r, i) GGML_F32Cx8_STORE(p, r[i]) +#define GGML_F16_VEC_FMA GGML_F32Cx8_FMA +#define GGML_F16_VEC_ADD GGML_F32Cx8_ADD +#define GGML_F16_VEC_MUL GGML_F32Cx8_MUL +#define GGML_F16_VEC_REDUCE GGML_F32Cx8_REDUCE + +#elif defined(__POWER9_VECTOR__) + +#define GGML_SIMD + +// F32 POWER9 + +#define GGML_F32_STEP 32 +#define GGML_F32_EPR 4 + +#define GGML_F32x4 vector float +#define GGML_F32x4_ZERO 0.0f +#define GGML_F32x4_SET1 vec_splats +#define GGML_F32x4_LOAD(p) vec_xl(0, p) +#define GGML_F32x4_STORE(p, r) vec_xst(r, 0, p) +#define GGML_F32x4_FMA(a, b, c) vec_madd(b, c, a) +#define GGML_F32x4_ADD vec_add +#define GGML_F32x4_MUL vec_mul +#define GGML_F32x4_REDUCE(res, x) \ +{ \ + for (int i = 0; i < GGML_F32_ARR/2; ++i) { \ + x[2*i] = vec_add(x[2*i], x[2*i+1]); \ + } \ + for (int i = 0; i < GGML_F32_ARR/4; ++i) { \ + x[4*i] = vec_add(x[4*i], x[4*i+2]); \ + } \ + for (int i = 0; i < GGML_F32_ARR/8; ++i) { \ + x[8*i] = vec_add(x[8*i], x[8*i+4]); \ + } \ + res = vec_extract(x[0], 0) + \ + vec_extract(x[0], 1) + \ + vec_extract(x[0], 2) + \ + vec_extract(x[0], 3); \ +} + +#define GGML_F32_VEC GGML_F32x4 +#define GGML_F32_VEC_ZERO GGML_F32x4_ZERO +#define GGML_F32_VEC_SET1 GGML_F32x4_SET1 +#define GGML_F32_VEC_LOAD GGML_F32x4_LOAD +#define GGML_F32_VEC_STORE GGML_F32x4_STORE +#define GGML_F32_VEC_FMA GGML_F32x4_FMA +#define GGML_F32_VEC_ADD GGML_F32x4_ADD +#define GGML_F32_VEC_MUL GGML_F32x4_MUL +#define GGML_F32_VEC_REDUCE GGML_F32x4_REDUCE + +// F16 POWER9 +#define GGML_F16_STEP GGML_F32_STEP +#define GGML_F16_EPR GGML_F32_EPR +#define GGML_F16_VEC GGML_F32x4 +#define GGML_F16_VEC_ZERO GGML_F32x4_ZERO +#define GGML_F16_VEC_SET1 GGML_F32x4_SET1 +#define GGML_F16_VEC_FMA GGML_F32x4_FMA +#define GGML_F16_VEC_REDUCE GGML_F32x4_REDUCE +// Use vec_xl, not vec_ld, in case the load address is not aligned. +#define GGML_F16_VEC_LOAD(p, i) (i & 0x1) ? \ + vec_extract_fp32_from_shorth(vec_xl(0, p - GGML_F16_EPR)) : \ + vec_extract_fp32_from_shortl(vec_xl(0, p)) +#define GGML_ENDIAN_BYTE(i) ((unsigned char *)&(uint16_t){1})[i] +#define GGML_F16_VEC_STORE(p, r, i) \ + if (i & 0x1) \ + vec_xst(vec_pack_to_short_fp32(r[i - GGML_ENDIAN_BYTE(1)], \ + r[i - GGML_ENDIAN_BYTE(0)]), \ + 0, p - GGML_F16_EPR) + +#elif defined(__wasm_simd128__) + +#define GGML_SIMD + +// F32 WASM + +#define GGML_F32_STEP 16 +#define GGML_F32_EPR 4 + +#define GGML_F32x4 v128_t +#define GGML_F32x4_ZERO wasm_f32x4_splat(0.0f) +#define GGML_F32x4_SET1(x) wasm_f32x4_splat(x) +#define GGML_F32x4_LOAD wasm_v128_load +#define GGML_F32x4_STORE wasm_v128_store +#define GGML_F32x4_FMA(a, b, c) wasm_f32x4_add(wasm_f32x4_mul(b, c), a) +#define GGML_F32x4_ADD wasm_f32x4_add +#define GGML_F32x4_MUL wasm_f32x4_mul +#define GGML_F32x4_REDUCE(res, x) \ +{ \ + for (int i = 0; i < GGML_F32_ARR/2; ++i) { \ + x[2*i] = wasm_f32x4_add(x[2*i], x[2*i+1]); \ + } \ + for (int i = 0; i < GGML_F32_ARR/4; ++i) { \ + x[4*i] = wasm_f32x4_add(x[4*i], x[4*i+2]); \ + } \ + for (int i = 0; i < GGML_F32_ARR/8; ++i) { \ + x[8*i] = wasm_f32x4_add(x[8*i], x[8*i+4]); \ + } \ + res = wasm_f32x4_extract_lane(x[0], 0) + \ + wasm_f32x4_extract_lane(x[0], 1) + \ + wasm_f32x4_extract_lane(x[0], 2) + \ + wasm_f32x4_extract_lane(x[0], 3); \ +} + +#define GGML_F32_VEC GGML_F32x4 +#define GGML_F32_VEC_ZERO GGML_F32x4_ZERO +#define GGML_F32_VEC_SET1 GGML_F32x4_SET1 +#define GGML_F32_VEC_LOAD GGML_F32x4_LOAD +#define GGML_F32_VEC_STORE GGML_F32x4_STORE +#define GGML_F32_VEC_FMA GGML_F32x4_FMA +#define GGML_F32_VEC_ADD GGML_F32x4_ADD +#define GGML_F32_VEC_MUL GGML_F32x4_MUL +#define GGML_F32_VEC_REDUCE GGML_F32x4_REDUCE + +// F16 WASM + +#define GGML_F16_STEP 16 +#define GGML_F16_EPR 4 + +inline static v128_t __wasm_f16x4_load(const ggml_fp16_t * p) { + float tmp[4]; + + tmp[0] = GGML_FP16_TO_FP32(p[0]); + tmp[1] = GGML_FP16_TO_FP32(p[1]); + tmp[2] = GGML_FP16_TO_FP32(p[2]); + tmp[3] = GGML_FP16_TO_FP32(p[3]); + + return wasm_v128_load(tmp); +} + +inline static void __wasm_f16x4_store(ggml_fp16_t * p, v128_t x) { + float tmp[4]; + + wasm_v128_store(tmp, x); + + p[0] = GGML_FP32_TO_FP16(tmp[0]); + p[1] = GGML_FP32_TO_FP16(tmp[1]); + p[2] = GGML_FP32_TO_FP16(tmp[2]); + p[3] = GGML_FP32_TO_FP16(tmp[3]); +} + +#define GGML_F16x4 v128_t +#define GGML_F16x4_ZERO wasm_f32x4_splat(0.0f) +#define GGML_F16x4_SET1(x) wasm_f32x4_splat(x) +#define GGML_F16x4_LOAD(x) __wasm_f16x4_load(x) +#define GGML_F16x4_STORE(x, y) __wasm_f16x4_store(x, y) +#define GGML_F16x4_FMA GGML_F32x4_FMA +#define GGML_F16x4_ADD wasm_f32x4_add +#define GGML_F16x4_MUL wasm_f32x4_mul +#define GGML_F16x4_REDUCE(res, x) \ +{ \ + for (int i = 0; i < GGML_F16_ARR/2; ++i) { \ + x[2*i] = wasm_f32x4_add(x[2*i], x[2*i+1]); \ + } \ + for (int i = 0; i < GGML_F16_ARR/4; ++i) { \ + x[4*i] = wasm_f32x4_add(x[4*i], x[4*i+2]); \ + } \ + for (int i = 0; i < GGML_F16_ARR/8; ++i) { \ + x[8*i] = wasm_f32x4_add(x[8*i], x[8*i+4]); \ + } \ + res = wasm_f32x4_extract_lane(x[0], 0) + \ + wasm_f32x4_extract_lane(x[0], 1) + \ + wasm_f32x4_extract_lane(x[0], 2) + \ + wasm_f32x4_extract_lane(x[0], 3); \ +} + +#define GGML_F16_VEC GGML_F16x4 +#define GGML_F16_VEC_ZERO GGML_F16x4_ZERO +#define GGML_F16_VEC_SET1 GGML_F16x4_SET1 +#define GGML_F16_VEC_LOAD(p, i) GGML_F16x4_LOAD(p) +#define GGML_F16_VEC_STORE(p, r, i) GGML_F16x4_STORE(p, r[i]) +#define GGML_F16_VEC_FMA GGML_F16x4_FMA +#define GGML_F16_VEC_ADD GGML_F16x4_ADD +#define GGML_F16_VEC_MUL GGML_F16x4_MUL +#define GGML_F16_VEC_REDUCE GGML_F16x4_REDUCE + +#elif defined(__SSE3__) + +#define GGML_SIMD + +// F32 SSE + +#define GGML_F32_STEP 32 +#define GGML_F32_EPR 4 + +#define GGML_F32x4 __m128 +#define GGML_F32x4_ZERO _mm_setzero_ps() +#define GGML_F32x4_SET1(x) _mm_set1_ps(x) +#define GGML_F32x4_LOAD _mm_loadu_ps +#define GGML_F32x4_STORE _mm_storeu_ps +#if defined(__FMA__) + // TODO: Does this work? + #define GGML_F32x4_FMA(a, b, c) _mm_fmadd_ps(b, c, a) +#else + #define GGML_F32x4_FMA(a, b, c) _mm_add_ps(_mm_mul_ps(b, c), a) +#endif +#define GGML_F32x4_ADD _mm_add_ps +#define GGML_F32x4_MUL _mm_mul_ps +#define GGML_F32x4_REDUCE(res, x) \ +{ \ + for (int i = 0; i < GGML_F32_ARR/2; ++i) { \ + x[2*i] = _mm_add_ps(x[2*i], x[2*i+1]); \ + } \ + for (int i = 0; i < GGML_F32_ARR/4; ++i) { \ + x[4*i] = _mm_add_ps(x[4*i], x[4*i+2]); \ + } \ + for (int i = 0; i < GGML_F32_ARR/8; ++i) { \ + x[8*i] = _mm_add_ps(x[8*i], x[8*i+4]); \ + } \ + const __m128 t0 = _mm_hadd_ps(x[0], x[0]); \ + res = _mm_cvtss_f32(_mm_hadd_ps(t0, t0)); \ +} +// TODO: is this optimal ? + +#define GGML_F32_VEC GGML_F32x4 +#define GGML_F32_VEC_ZERO GGML_F32x4_ZERO +#define GGML_F32_VEC_SET1 GGML_F32x4_SET1 +#define GGML_F32_VEC_LOAD GGML_F32x4_LOAD +#define GGML_F32_VEC_STORE GGML_F32x4_STORE +#define GGML_F32_VEC_FMA GGML_F32x4_FMA +#define GGML_F32_VEC_ADD GGML_F32x4_ADD +#define GGML_F32_VEC_MUL GGML_F32x4_MUL +#define GGML_F32_VEC_REDUCE GGML_F32x4_REDUCE + +// F16 SSE + +#define GGML_F16_STEP 32 +#define GGML_F16_EPR 4 + +static inline __m128 __sse_f16x4_load(ggml_fp16_t *x) { + float tmp[4]; + + tmp[0] = GGML_FP16_TO_FP32(x[0]); + tmp[1] = GGML_FP16_TO_FP32(x[1]); + tmp[2] = GGML_FP16_TO_FP32(x[2]); + tmp[3] = GGML_FP16_TO_FP32(x[3]); + + return _mm_loadu_ps(tmp); +} + +static inline void __sse_f16x4_store(ggml_fp16_t *x, __m128 y) { + float arr[4]; + + _mm_storeu_ps(arr, y); + + x[0] = GGML_FP32_TO_FP16(arr[0]); + x[1] = GGML_FP32_TO_FP16(arr[1]); + x[2] = GGML_FP32_TO_FP16(arr[2]); + x[3] = GGML_FP32_TO_FP16(arr[3]); +} + +#define GGML_F32Cx4 __m128 +#define GGML_F32Cx4_ZERO _mm_setzero_ps() +#define GGML_F32Cx4_SET1(x) _mm_set1_ps(x) +#define GGML_F32Cx4_LOAD(x) __sse_f16x4_load(x) +#define GGML_F32Cx4_STORE(x, y) __sse_f16x4_store(x, y) +#define GGML_F32Cx4_FMA GGML_F32x4_FMA +#define GGML_F32Cx4_ADD _mm_add_ps +#define GGML_F32Cx4_MUL _mm_mul_ps +#define GGML_F32Cx4_REDUCE GGML_F32x4_REDUCE + +#define GGML_F16_VEC GGML_F32Cx4 +#define GGML_F16_VEC_ZERO GGML_F32Cx4_ZERO +#define GGML_F16_VEC_SET1 GGML_F32Cx4_SET1 +#define GGML_F16_VEC_LOAD(p, i) GGML_F32Cx4_LOAD(p) +#define GGML_F16_VEC_STORE(p, r, i) GGML_F32Cx4_STORE(p, r[i]) +#define GGML_F16_VEC_FMA GGML_F32Cx4_FMA +#define GGML_F16_VEC_ADD GGML_F32Cx4_ADD +#define GGML_F16_VEC_MUL GGML_F32Cx4_MUL +#define GGML_F16_VEC_REDUCE GGML_F32Cx4_REDUCE + +#endif + +// GGML_F32_ARR / GGML_F16_ARR +// number of registers to use per step +#ifdef GGML_SIMD +#define GGML_F32_ARR (GGML_F32_STEP/GGML_F32_EPR) +#define GGML_F16_ARR (GGML_F16_STEP/GGML_F16_EPR) +#endif + +// +// fundamental operations +// + +inline static void ggml_vec_set_i8(const int n, int8_t * x, const int8_t v) { for (int i = 0; i < n; ++i) x[i] = v; } + +inline static void ggml_vec_set_i16(const int n, int16_t * x, const int16_t v) { for (int i = 0; i < n; ++i) x[i] = v; } + +inline static void ggml_vec_set_i32(const int n, int32_t * x, const int32_t v) { for (int i = 0; i < n; ++i) x[i] = v; } + +inline static void ggml_vec_set_f16(const int n, ggml_fp16_t * x, const int32_t v) { for (int i = 0; i < n; ++i) x[i] = v; } + +inline static void ggml_vec_add_f32 (const int n, float * z, const float * x, const float * y) { for (int i = 0; i < n; ++i) z[i] = x[i] + y[i]; } +inline static void ggml_vec_add1_f32(const int n, float * z, const float * x, const float v) { for (int i = 0; i < n; ++i) z[i] = x[i] + v; } +inline static void ggml_vec_acc_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] += x[i]; } +inline static void ggml_vec_acc1_f32(const int n, float * y, const float v) { for (int i = 0; i < n; ++i) y[i] += v; } +inline static void ggml_vec_sub_f32 (const int n, float * z, const float * x, const float * y) { for (int i = 0; i < n; ++i) z[i] = x[i] - y[i]; } +inline static void ggml_vec_set_f32 (const int n, float * x, const float v) { for (int i = 0; i < n; ++i) x[i] = v; } +inline static void ggml_vec_cpy_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = x[i]; } +inline static void ggml_vec_neg_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = -x[i]; } +inline static void ggml_vec_mul_f32 (const int n, float * z, const float * x, const float * y) { for (int i = 0; i < n; ++i) z[i] = x[i]*y[i]; } +inline static void ggml_vec_div_f32 (const int n, float * z, const float * x, const float * y) { for (int i = 0; i < n; ++i) z[i] = x[i]/y[i]; } + +inline static void ggml_vec_dot_f32(const int n, float * restrict s, const float * restrict x, const float * restrict y) { +#ifdef GGML_SIMD + float sumf = 0.0f; + const int np = (n & ~(GGML_F32_STEP - 1)); + + GGML_F32_VEC sum[GGML_F32_ARR] = { GGML_F32_VEC_ZERO }; + + GGML_F32_VEC ax[GGML_F32_ARR]; + GGML_F32_VEC ay[GGML_F32_ARR]; + + for (int i = 0; i < np; i += GGML_F32_STEP) { + for (int j = 0; j < GGML_F32_ARR; j++) { + ax[j] = GGML_F32_VEC_LOAD(x + i + j*GGML_F32_EPR); + ay[j] = GGML_F32_VEC_LOAD(y + i + j*GGML_F32_EPR); + + sum[j] = GGML_F32_VEC_FMA(sum[j], ax[j], ay[j]); + } + } + + // reduce sum0..sum3 to sum0 + GGML_F32_VEC_REDUCE(sumf, sum); + + // leftovers + for (int i = np; i < n; ++i) { + sumf += x[i]*y[i]; + } +#else + // scalar + ggml_float sumf = 0.0; + for (int i = 0; i < n; ++i) { + sumf += (ggml_float)(x[i]*y[i]); + } +#endif + + *s = sumf; +} + +inline static void ggml_vec_dot_f16(const int n, float * restrict s, ggml_fp16_t * restrict x, ggml_fp16_t * restrict y) { + ggml_float sumf = 0.0; + +#if defined(GGML_SIMD) + const int np = (n & ~(GGML_F16_STEP - 1)); + + GGML_F16_VEC sum[GGML_F16_ARR] = { GGML_F16_VEC_ZERO }; + + GGML_F16_VEC ax[GGML_F16_ARR]; + GGML_F16_VEC ay[GGML_F16_ARR]; + + for (int i = 0; i < np; i += GGML_F16_STEP) { + for (int j = 0; j < GGML_F16_ARR; j++) { + ax[j] = GGML_F16_VEC_LOAD(x + i + j*GGML_F16_EPR, j); + ay[j] = GGML_F16_VEC_LOAD(y + i + j*GGML_F16_EPR, j); + + sum[j] = GGML_F16_VEC_FMA(sum[j], ax[j], ay[j]); + } + } + + // reduce sum0..sum3 to sum0 + GGML_F16_VEC_REDUCE(sumf, sum); + + // leftovers + for (int i = np; i < n; ++i) { + sumf += (ggml_float)(GGML_FP16_TO_FP32(x[i])*GGML_FP16_TO_FP32(y[i])); + } +#else + for (int i = 0; i < n; ++i) { + sumf += (ggml_float)(GGML_FP16_TO_FP32(x[i])*GGML_FP16_TO_FP32(y[i])); + } +#endif + + *s = sumf; +} + +static void ggml_vec_dot_q4_0_q8_0(const int n, float * restrict s, const void * restrict vx, const void * restrict vy) { + const int qk = QK8_0; + const int nb = n / qk; + + assert(n % qk == 0); + assert(nb % 2 == 0); + + const block_q4_0 * restrict x = vx; + const block_q8_0 * restrict y = vy; + +#if defined(__ARM_NEON) + float32x4_t sumv0 = vdupq_n_f32(0.0f); + float32x4_t sumv1 = vdupq_n_f32(0.0f); + + for (int i = 0; i < nb; i += 2) { + const block_q4_0 * restrict x0 = &x[i + 0]; + const block_q4_0 * restrict x1 = &x[i + 1]; + const block_q8_0 * restrict y0 = &y[i + 0]; + const block_q8_0 * restrict y1 = &y[i + 1]; + + const uint8x16_t m4b = vdupq_n_u8(0x0F); + const int8x16_t s8b = vdupq_n_s8(0x8); + + const uint8x16_t v0_0 = vld1q_u8(x0->qs); + const uint8x16_t v0_1 = vld1q_u8(x1->qs); + + // 4-bit -> 8-bit + const int8x16_t v0_0l = vreinterpretq_s8_u8(vandq_u8 (v0_0, m4b)); + const int8x16_t v0_0h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4)); + const int8x16_t v0_1l = vreinterpretq_s8_u8(vandq_u8 (v0_1, m4b)); + const int8x16_t v0_1h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4)); + + // sub 8 + const int8x16_t v0_0ls = vsubq_s8(v0_0l, s8b); + const int8x16_t v0_0hs = vsubq_s8(v0_0h, s8b); + const int8x16_t v0_1ls = vsubq_s8(v0_1l, s8b); + const int8x16_t v0_1hs = vsubq_s8(v0_1h, s8b); + + // load y + const int8x16_t v1_0l = vld1q_s8(y0->qs); + const int8x16_t v1_0h = vld1q_s8(y0->qs + 16); + const int8x16_t v1_1l = vld1q_s8(y1->qs); + const int8x16_t v1_1h = vld1q_s8(y1->qs + 16); + +#if defined(__ARM_FEATURE_DOTPROD) + // dot product into int32x4_t + const int32x4_t p_0 = vdotq_s32(vdotq_s32(vdupq_n_s32(0), v0_0ls, v1_0l), v0_0hs, v1_0h); + const int32x4_t p_1 = vdotq_s32(vdotq_s32(vdupq_n_s32(0), v0_1ls, v1_1l), v0_1hs, v1_1h); + + sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(p_0), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d)); + sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(p_1), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d)); +#else + const int16x8_t pl0l = vmull_s8(vget_low_s8 (v0_0ls), vget_low_s8 (v1_0l)); + const int16x8_t pl0h = vmull_s8(vget_high_s8(v0_0ls), vget_high_s8(v1_0l)); + const int16x8_t ph0l = vmull_s8(vget_low_s8 (v0_0hs), vget_low_s8 (v1_0h)); + const int16x8_t ph0h = vmull_s8(vget_high_s8(v0_0hs), vget_high_s8(v1_0h)); + + const int16x8_t pl1l = vmull_s8(vget_low_s8 (v0_1ls), vget_low_s8 (v1_1l)); + const int16x8_t pl1h = vmull_s8(vget_high_s8(v0_1ls), vget_high_s8(v1_1l)); + const int16x8_t ph1l = vmull_s8(vget_low_s8 (v0_1hs), vget_low_s8 (v1_1h)); + const int16x8_t ph1h = vmull_s8(vget_high_s8(v0_1hs), vget_high_s8(v1_1h)); + + const int32x4_t pl0 = vaddq_s32(vpaddlq_s16(pl0l), vpaddlq_s16(pl0h)); + const int32x4_t ph0 = vaddq_s32(vpaddlq_s16(ph0l), vpaddlq_s16(ph0h)); + const int32x4_t pl1 = vaddq_s32(vpaddlq_s16(pl1l), vpaddlq_s16(pl1h)); + const int32x4_t ph1 = vaddq_s32(vpaddlq_s16(ph1l), vpaddlq_s16(ph1h)); + + sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(pl0, ph0)), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d)); + sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(pl1, ph1)), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d)); +#endif + } + + *s = vaddvq_f32(sumv0) + vaddvq_f32(sumv1); +#elif defined(__AVX2__) + // Initialize accumulator with zeros + __m256 acc = _mm256_setzero_ps(); + + // Main loop + for (int i = 0; i < nb; ++i) { + /* Compute combined scale for the block */ + const __m256 d = _mm256_set1_ps( GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d) ); + + __m256i bx = bytes_from_nibbles_32(x[i].qs); + + // Now we have a vector with bytes in [ 0 .. 15 ] interval. Offset them into [ -8 .. +7 ] interval. + const __m256i off = _mm256_set1_epi8( 8 ); + bx = _mm256_sub_epi8( bx, off ); + + __m256i by = _mm256_loadu_si256((const __m256i *)y[i].qs); + + const __m256 q = mul_sum_i8_pairs_float(bx, by); + + /* Multiply q with scale and accumulate */ + acc = _mm256_fmadd_ps( d, q, acc ); + } + + *s = hsum_float_8(acc); +#elif defined(__AVX__) + // Initialize accumulator with zeros + __m256 acc = _mm256_setzero_ps(); + + // Main loop + for (int i = 0; i < nb; ++i) { + // Compute combined scale for the block + const __m256 d = _mm256_set1_ps( GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d) ); + + const __m128i lowMask = _mm_set1_epi8(0xF); + const __m128i off = _mm_set1_epi8(8); + + const __m128i tmp = _mm_loadu_si128((const __m128i *)x[i].qs); + + __m128i bx = _mm_and_si128(lowMask, tmp); + __m128i by = _mm_loadu_si128((const __m128i *)y[i].qs); + bx = _mm_sub_epi8(bx, off); + const __m128i i32_0 = mul_sum_i8_pairs(bx, by); + + bx = _mm_and_si128(lowMask, _mm_srli_epi64(tmp, 4)); + by = _mm_loadu_si128((const __m128i *)(y[i].qs + 16)); + bx = _mm_sub_epi8(bx, off); + const __m128i i32_1 = mul_sum_i8_pairs(bx, by); + + // Convert int32_t to float + __m256 p = _mm256_cvtepi32_ps(_mm256_set_m128i(i32_0, i32_1)); + + // Apply the scale, and accumulate + acc = _mm256_add_ps(_mm256_mul_ps( d, p ), acc); + } + + *s = hsum_float_8(acc); +#elif defined(__SSSE3__) + // set constants + const __m128i lowMask = _mm_set1_epi8(0xF); + const __m128i off = _mm_set1_epi8(8); + + // Initialize accumulator with zeros + __m128 acc_0 = _mm_setzero_ps(); + __m128 acc_1 = _mm_setzero_ps(); + __m128 acc_2 = _mm_setzero_ps(); + __m128 acc_3 = _mm_setzero_ps(); + + // First round without accumulation + { + _mm_prefetch(&x[0] + sizeof(block_q4_0), _MM_HINT_T0); + _mm_prefetch(&y[0] + sizeof(block_q8_0), _MM_HINT_T0); + + // Compute combined scale for the block 0 and 1 + const __m128 d_0_1 = _mm_set1_ps( GGML_FP16_TO_FP32(x[0].d) * GGML_FP16_TO_FP32(y[0].d) ); + + const __m128i tmp_0_1 = _mm_loadu_si128((const __m128i *)x[0].qs); + + __m128i bx_0 = _mm_and_si128(lowMask, tmp_0_1); + __m128i by_0 = _mm_loadu_si128((const __m128i *)y[0].qs); + bx_0 = _mm_sub_epi8(bx_0, off); + const __m128i i32_0 = mul_sum_i8_pairs(bx_0, by_0); + + __m128i bx_1 = _mm_and_si128(lowMask, _mm_srli_epi64(tmp_0_1, 4)); + __m128i by_1 = _mm_loadu_si128((const __m128i *)(y[0].qs + 16)); + bx_1 = _mm_sub_epi8(bx_1, off); + const __m128i i32_1 = mul_sum_i8_pairs(bx_1, by_1); + + _mm_prefetch(&x[1] + sizeof(block_q4_0), _MM_HINT_T0); + _mm_prefetch(&y[1] + sizeof(block_q8_0), _MM_HINT_T0); + + // Compute combined scale for the block 2 and 3 + const __m128 d_2_3 = _mm_set1_ps( GGML_FP16_TO_FP32(x[1].d) * GGML_FP16_TO_FP32(y[1].d) ); + + const __m128i tmp_2_3 = _mm_loadu_si128((const __m128i *)x[1].qs); + + __m128i bx_2 = _mm_and_si128(lowMask, tmp_2_3); + __m128i by_2 = _mm_loadu_si128((const __m128i *)y[1].qs); + bx_2 = _mm_sub_epi8(bx_2, off); + const __m128i i32_2 = mul_sum_i8_pairs(bx_2, by_2); + + __m128i bx_3 = _mm_and_si128(lowMask, _mm_srli_epi64(tmp_2_3, 4)); + __m128i by_3 = _mm_loadu_si128((const __m128i *)(y[1].qs + 16)); + bx_3 = _mm_sub_epi8(bx_3, off); + const __m128i i32_3 = mul_sum_i8_pairs(bx_3, by_3); + + // Convert int32_t to float + __m128 p0 = _mm_cvtepi32_ps(i32_0); + __m128 p1 = _mm_cvtepi32_ps(i32_1); + __m128 p2 = _mm_cvtepi32_ps(i32_2); + __m128 p3 = _mm_cvtepi32_ps(i32_3); + + // Apply the scale + acc_0 = _mm_mul_ps( d_0_1, p0 ); + acc_1 = _mm_mul_ps( d_0_1, p1 ); + acc_2 = _mm_mul_ps( d_2_3, p2 ); + acc_3 = _mm_mul_ps( d_2_3, p3 ); + } + + // Main loop + for (int i = 2; i < nb; i+=2) { + _mm_prefetch(&x[i] + sizeof(block_q4_0), _MM_HINT_T0); + _mm_prefetch(&y[i] + sizeof(block_q8_0), _MM_HINT_T0); + + // Compute combined scale for the block 0 and 1 + const __m128 d_0_1 = _mm_set1_ps( GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d) ); + + const __m128i tmp_0_1 = _mm_loadu_si128((const __m128i *)x[i].qs); + + __m128i bx_0 = _mm_and_si128(lowMask, tmp_0_1); + __m128i by_0 = _mm_loadu_si128((const __m128i *)y[i].qs); + bx_0 = _mm_sub_epi8(bx_0, off); + const __m128i i32_0 = mul_sum_i8_pairs(bx_0, by_0); + + __m128i bx_1 = _mm_and_si128(lowMask, _mm_srli_epi64(tmp_0_1, 4)); + __m128i by_1 = _mm_loadu_si128((const __m128i *)(y[i].qs + 16)); + bx_1 = _mm_sub_epi8(bx_1, off); + const __m128i i32_1 = mul_sum_i8_pairs(bx_1, by_1); + + _mm_prefetch(&x[i] + 2 * sizeof(block_q4_0), _MM_HINT_T0); + _mm_prefetch(&y[i] + 2 * sizeof(block_q8_0), _MM_HINT_T0); + + // Compute combined scale for the block 2 and 3 + const __m128 d_2_3 = _mm_set1_ps( GGML_FP16_TO_FP32(x[i + 1].d) * GGML_FP16_TO_FP32(y[i + 1].d) ); + + const __m128i tmp_2_3 = _mm_loadu_si128((const __m128i *)x[i + 1].qs); + + __m128i bx_2 = _mm_and_si128(lowMask, tmp_2_3); + __m128i by_2 = _mm_loadu_si128((const __m128i *)y[i + 1].qs); + bx_2 = _mm_sub_epi8(bx_2, off); + const __m128i i32_2 = mul_sum_i8_pairs(bx_2, by_2); + + __m128i bx_3 = _mm_and_si128(lowMask, _mm_srli_epi64(tmp_2_3, 4)); + __m128i by_3 = _mm_loadu_si128((const __m128i *)(y[i + 1].qs + 16)); + bx_3 = _mm_sub_epi8(bx_3, off); + const __m128i i32_3 = mul_sum_i8_pairs(bx_3, by_3); + + // Convert int32_t to float + __m128 p0 = _mm_cvtepi32_ps(i32_0); + __m128 p1 = _mm_cvtepi32_ps(i32_1); + __m128 p2 = _mm_cvtepi32_ps(i32_2); + __m128 p3 = _mm_cvtepi32_ps(i32_3); + + // Apply the scale + __m128 p0_d = _mm_mul_ps( d_0_1, p0 ); + __m128 p1_d = _mm_mul_ps( d_0_1, p1 ); + __m128 p2_d = _mm_mul_ps( d_2_3, p2 ); + __m128 p3_d = _mm_mul_ps( d_2_3, p3 ); + + // Acummulate + acc_0 = _mm_add_ps(p0_d, acc_0); + acc_1 = _mm_add_ps(p1_d, acc_1); + acc_2 = _mm_add_ps(p2_d, acc_2); + acc_3 = _mm_add_ps(p3_d, acc_3); + } + + *s = hsum_float_4x4(acc_0, acc_1, acc_2, acc_3); +#else + // scalar + float sumf = 0.0; + + for (int i = 0; i < nb; i++) { + int sumi = 0; + + for (int j = 0; j < qk/2; ++j) { + const int v0 = (x[i].qs[j] & 0x0F) - 8; + const int v1 = (x[i].qs[j] >> 4) - 8; + + sumi += (v0 * y[i].qs[j]) + (v1 * y[i].qs[j + qk/2]); + } + + sumf += sumi*GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d); + } + + *s = sumf; +#endif +} + +static void ggml_vec_dot_q4_1_q8_1(const int n, float * restrict s, const void * restrict vx, const void * restrict vy) { + const int qk = QK8_1; + const int nb = n / qk; + + assert(n % qk == 0); + assert(nb % 2 == 0); + + const block_q4_1 * restrict x = vx; + const block_q8_1 * restrict y = vy; + + // TODO: add WASM SIMD +#if defined(__ARM_NEON) + float32x4_t sumv0 = vdupq_n_f32(0.0f); + float32x4_t sumv1 = vdupq_n_f32(0.0f); + + float summs = 0; + + for (int i = 0; i < nb; i += 2) { + const block_q4_1 * restrict x0 = &x[i + 0]; + const block_q4_1 * restrict x1 = &x[i + 1]; + const block_q8_1 * restrict y0 = &y[i + 0]; + const block_q8_1 * restrict y1 = &y[i + 1]; + + summs += GGML_FP16_TO_FP32(x0->m) * y0->s + GGML_FP16_TO_FP32(x1->m) * y1->s; + + const uint8x16_t m4b = vdupq_n_u8(0x0F); + + const uint8x16_t v0_0 = vld1q_u8(x0->qs); + const uint8x16_t v0_1 = vld1q_u8(x1->qs); + + // 4-bit -> 8-bit + const int8x16_t v0_0l = vreinterpretq_s8_u8(vandq_u8 (v0_0, m4b)); + const int8x16_t v0_0h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4)); + const int8x16_t v0_1l = vreinterpretq_s8_u8(vandq_u8 (v0_1, m4b)); + const int8x16_t v0_1h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4)); + + // load y + const int8x16_t v1_0l = vld1q_s8(y0->qs); + const int8x16_t v1_0h = vld1q_s8(y0->qs + 16); + const int8x16_t v1_1l = vld1q_s8(y1->qs); + const int8x16_t v1_1h = vld1q_s8(y1->qs + 16); + +#if defined(__ARM_FEATURE_DOTPROD) + // dot product into int32x4_t + const int32x4_t p_0 = vdotq_s32(vdotq_s32(vdupq_n_s32(0), v0_0l, v1_0l), v0_0h, v1_0h); + const int32x4_t p_1 = vdotq_s32(vdotq_s32(vdupq_n_s32(0), v0_1l, v1_1l), v0_1h, v1_1h); + + sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(p_0), GGML_FP16_TO_FP32(x0->d)*y0->d); + sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(p_1), GGML_FP16_TO_FP32(x1->d)*y1->d); +#else + const int16x8_t pl0l = vmull_s8(vget_low_s8 (v0_0l), vget_low_s8 (v1_0l)); + const int16x8_t pl0h = vmull_s8(vget_high_s8(v0_0l), vget_high_s8(v1_0l)); + const int16x8_t ph0l = vmull_s8(vget_low_s8 (v0_0h), vget_low_s8 (v1_0h)); + const int16x8_t ph0h = vmull_s8(vget_high_s8(v0_0h), vget_high_s8(v1_0h)); + + const int16x8_t pl1l = vmull_s8(vget_low_s8 (v0_1l), vget_low_s8 (v1_1l)); + const int16x8_t pl1h = vmull_s8(vget_high_s8(v0_1l), vget_high_s8(v1_1l)); + const int16x8_t ph1l = vmull_s8(vget_low_s8 (v0_1h), vget_low_s8 (v1_1h)); + const int16x8_t ph1h = vmull_s8(vget_high_s8(v0_1h), vget_high_s8(v1_1h)); + + const int32x4_t pl0 = vaddq_s32(vpaddlq_s16(pl0l), vpaddlq_s16(pl0h)); + const int32x4_t ph0 = vaddq_s32(vpaddlq_s16(ph0l), vpaddlq_s16(ph0h)); + const int32x4_t pl1 = vaddq_s32(vpaddlq_s16(pl1l), vpaddlq_s16(pl1h)); + const int32x4_t ph1 = vaddq_s32(vpaddlq_s16(ph1l), vpaddlq_s16(ph1h)); + + sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(pl0, ph0)), GGML_FP16_TO_FP32(x0->d)*y0->d); + sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(pl1, ph1)), GGML_FP16_TO_FP32(x1->d)*y1->d); +#endif + } + + *s = vaddvq_f32(sumv0) + vaddvq_f32(sumv1) + summs; +#elif defined(__AVX2__) || defined(__AVX__) + // Initialize accumulator with zeros + __m256 acc = _mm256_setzero_ps(); + + float summs = 0; + + // Main loop + for (int i = 0; i < nb; ++i) { + const float d0 = GGML_FP16_TO_FP32(x[i].d); + const float d1 = y[i].d; + + summs += GGML_FP16_TO_FP32(x[i].m) * y[i].s; + + const __m256 d0v = _mm256_set1_ps( d0 ); + const __m256 d1v = _mm256_set1_ps( d1 ); + + // Compute combined scales + const __m256 d0d1 = _mm256_mul_ps( d0v, d1v ); + + // Load 16 bytes, and unpack 4 bit fields into bytes, making 32 bytes + const __m256i bx = bytes_from_nibbles_32(x[i].qs); + const __m256i by = _mm256_loadu_si256( (const __m256i *)y[i].qs ); + + const __m256 xy = mul_sum_us8_pairs_float(bx, by); + + // Accumulate d0*d1*x*y +#if defined(__AVX2__) + acc = _mm256_fmadd_ps( d0d1, xy, acc ); +#else + acc = _mm256_add_ps( _mm256_mul_ps( d0d1, xy ), acc ); +#endif + } + + *s = hsum_float_8(acc) + summs; +#else + // scalar + float sumf = 0.0; + + for (int i = 0; i < nb; i++) { + int sumi = 0; + + for (int j = 0; j < qk/2; ++j) { + const int v0 = (x[i].qs[j] & 0x0F); + const int v1 = (x[i].qs[j] >> 4); + + sumi += (v0 * y[i].qs[j]) + (v1 * y[i].qs[j + qk/2]); + } + + sumf += (GGML_FP16_TO_FP32(x[i].d)*y[i].d)*sumi + GGML_FP16_TO_FP32(x[i].m)*y[i].s; + } + + *s = sumf; +#endif +} + +static void ggml_vec_dot_q5_0_q8_0(const int n, float * restrict s, const void * restrict vx, const void * restrict vy) { + const int qk = QK8_0; + const int nb = n / qk; + + assert(n % qk == 0); + assert(nb % 2 == 0); + assert(qk == QK5_0); + + const block_q5_0 * restrict x = vx; + const block_q8_0 * restrict y = vy; + +#if defined(__ARM_NEON) + float32x4_t sumv0 = vdupq_n_f32(0.0f); + float32x4_t sumv1 = vdupq_n_f32(0.0f); + + uint32_t qh0; + uint32_t qh1; + + uint64_t tmp0[4]; + uint64_t tmp1[4]; + + for (int i = 0; i < nb; i += 2) { + const block_q5_0 * restrict x0 = &x[i]; + const block_q5_0 * restrict x1 = &x[i + 1]; + const block_q8_0 * restrict y0 = &y[i]; + const block_q8_0 * restrict y1 = &y[i + 1]; + + const uint8x16_t m4b = vdupq_n_u8(0x0F); + + // extract the 5th bit via lookup table ((!b) << 4) + memcpy(&qh0, x0->qh, sizeof(qh0)); + memcpy(&qh1, x1->qh, sizeof(qh1)); + + tmp0[0] = table_b2b_1[(qh0 >> 0) & 0xFF]; + tmp0[1] = table_b2b_1[(qh0 >> 8) & 0xFF]; + tmp0[2] = table_b2b_1[(qh0 >> 16) & 0xFF]; + tmp0[3] = table_b2b_1[(qh0 >> 24) ]; + + tmp1[0] = table_b2b_1[(qh1 >> 0) & 0xFF]; + tmp1[1] = table_b2b_1[(qh1 >> 8) & 0xFF]; + tmp1[2] = table_b2b_1[(qh1 >> 16) & 0xFF]; + tmp1[3] = table_b2b_1[(qh1 >> 24) ]; + + const int8x16_t qhl0 = vld1q_s8((const int8_t *)(tmp0 + 0)); + const int8x16_t qhh0 = vld1q_s8((const int8_t *)(tmp0 + 2)); + const int8x16_t qhl1 = vld1q_s8((const int8_t *)(tmp1 + 0)); + const int8x16_t qhh1 = vld1q_s8((const int8_t *)(tmp1 + 2)); + + const uint8x16_t v0_0 = vld1q_u8(x0->qs); + const uint8x16_t v0_1 = vld1q_u8(x1->qs); + + // 4-bit -> 8-bit + int8x16_t v0_0l = vreinterpretq_s8_u8(vandq_u8 (v0_0, m4b)); + int8x16_t v0_0h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4)); + int8x16_t v0_1l = vreinterpretq_s8_u8(vandq_u8 (v0_1, m4b)); + int8x16_t v0_1h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4)); + + // add high bit and sub 16 (equivalent to sub 0x10 when bit is zero) + const int8x16_t v0_0lf = vsubq_s8(v0_0l, qhl0); + const int8x16_t v0_0hf = vsubq_s8(v0_0h, qhh0); + const int8x16_t v0_1lf = vsubq_s8(v0_1l, qhl1); + const int8x16_t v0_1hf = vsubq_s8(v0_1h, qhh1); + + // load y + const int8x16_t v1_0l = vld1q_s8(y0->qs); + const int8x16_t v1_0h = vld1q_s8(y0->qs + 16); + const int8x16_t v1_1l = vld1q_s8(y1->qs); + const int8x16_t v1_1h = vld1q_s8(y1->qs + 16); + +#if defined(__ARM_FEATURE_DOTPROD) + sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32( + vdotq_s32(vdupq_n_s32(0), v0_0lf, v1_0l), + vdotq_s32(vdupq_n_s32(0), v0_0hf, v1_0h))), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d)); + sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32( + vdotq_s32(vdupq_n_s32(0), v0_1lf, v1_1l), + vdotq_s32(vdupq_n_s32(0), v0_1hf, v1_1h))), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d)); +#else + const int16x8_t pl0l = vmull_s8(vget_low_s8 (v0_0lf), vget_low_s8 (v1_0l)); + const int16x8_t pl0h = vmull_s8(vget_high_s8(v0_0lf), vget_high_s8(v1_0l)); + const int16x8_t ph0l = vmull_s8(vget_low_s8 (v0_0hf), vget_low_s8 (v1_0h)); + const int16x8_t ph0h = vmull_s8(vget_high_s8(v0_0hf), vget_high_s8(v1_0h)); + + const int16x8_t pl1l = vmull_s8(vget_low_s8 (v0_1lf), vget_low_s8 (v1_1l)); + const int16x8_t pl1h = vmull_s8(vget_high_s8(v0_1lf), vget_high_s8(v1_1l)); + const int16x8_t ph1l = vmull_s8(vget_low_s8 (v0_1hf), vget_low_s8 (v1_1h)); + const int16x8_t ph1h = vmull_s8(vget_high_s8(v0_1hf), vget_high_s8(v1_1h)); + + const int32x4_t pl0 = vaddq_s32(vpaddlq_s16(pl0l), vpaddlq_s16(pl0h)); + const int32x4_t ph0 = vaddq_s32(vpaddlq_s16(ph0l), vpaddlq_s16(ph0h)); + const int32x4_t pl1 = vaddq_s32(vpaddlq_s16(pl1l), vpaddlq_s16(pl1h)); + const int32x4_t ph1 = vaddq_s32(vpaddlq_s16(ph1l), vpaddlq_s16(ph1h)); + + sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(pl0, ph0)), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d)); + sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(pl1, ph1)), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d)); +#endif + } + + *s = vaddvq_f32(sumv0) + vaddvq_f32(sumv1); +#elif defined(__wasm_simd128__) + v128_t sumv = wasm_f32x4_splat(0.0f); + + uint32_t qh; + uint64_t tmp[4]; + + // TODO: check if unrolling this is better + for (int i = 0; i < nb; ++i) { + const block_q5_0 * restrict x0 = &x[i]; + const block_q8_0 * restrict y0 = &y[i]; + + const v128_t m4b = wasm_i8x16_splat(0x0F); + + // extract the 5th bit + memcpy(&qh, x0->qh, sizeof(qh)); + + tmp[0] = table_b2b_1[(qh >> 0) & 0xFF]; + tmp[1] = table_b2b_1[(qh >> 8) & 0xFF]; + tmp[2] = table_b2b_1[(qh >> 16) & 0xFF]; + tmp[3] = table_b2b_1[(qh >> 24) ]; + + const v128_t qhl = wasm_v128_load(tmp + 0); + const v128_t qhh = wasm_v128_load(tmp + 2); + + const v128_t v0 = wasm_v128_load(x0->qs); + + // 4-bit -> 8-bit + const v128_t v0l = wasm_v128_and (v0, m4b); + const v128_t v0h = wasm_u8x16_shr(v0, 4); + + // add high bit and sub 16 (equivalent to sub 0x10 when bit is zero) + const v128_t v0lf = wasm_i8x16_sub(v0l, qhl); + const v128_t v0hf = wasm_i8x16_sub(v0h, qhh); + + // load y + const v128_t v1l = wasm_v128_load(y0->qs); + const v128_t v1h = wasm_v128_load(y0->qs + 16); + + // int8x16 -> int16x8 + const v128_t v0lfl = wasm_i16x8_extend_low_i8x16 (v0lf); + const v128_t v0lfh = wasm_i16x8_extend_high_i8x16(v0lf); + const v128_t v0hfl = wasm_i16x8_extend_low_i8x16 (v0hf); + const v128_t v0hfh = wasm_i16x8_extend_high_i8x16(v0hf); + + const v128_t v1ll = wasm_i16x8_extend_low_i8x16 (v1l); + const v128_t v1lh = wasm_i16x8_extend_high_i8x16(v1l); + const v128_t v1hl = wasm_i16x8_extend_low_i8x16 (v1h); + const v128_t v1hh = wasm_i16x8_extend_high_i8x16(v1h); + + // dot product + sumv = wasm_f32x4_add(sumv, wasm_f32x4_mul(wasm_f32x4_convert_i32x4( + wasm_i32x4_add( + wasm_i32x4_add(wasm_i32x4_dot_i16x8(v0lfl, v1ll), + wasm_i32x4_dot_i16x8(v0lfh, v1lh)), + wasm_i32x4_add(wasm_i32x4_dot_i16x8(v0hfl, v1hl), + wasm_i32x4_dot_i16x8(v0hfh, v1hh)))), + wasm_f32x4_splat(GGML_FP16_TO_FP32(x0->d) * GGML_FP16_TO_FP32(y0->d)))); + } + + *s = wasm_f32x4_extract_lane(sumv, 0) + wasm_f32x4_extract_lane(sumv, 1) + + wasm_f32x4_extract_lane(sumv, 2) + wasm_f32x4_extract_lane(sumv, 3); +#elif defined(__AVX2__) + // Initialize accumulator with zeros + __m256 acc = _mm256_setzero_ps(); + + // Main loop + for (int i = 0; i < nb; i++) { + /* Compute combined scale for the block */ + const __m256 d = _mm256_set1_ps(GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d)); + + __m256i bx = bytes_from_nibbles_32(x[i].qs); + __m256i bxhi = bytes_from_bits_32(x[i].qh); + bxhi = _mm256_andnot_si256(bxhi, _mm256_set1_epi8((char)0xF0)); + bx = _mm256_or_si256(bx, bxhi); + + __m256i by = _mm256_loadu_si256((const __m256i *)y[i].qs); + + const __m256 q = mul_sum_i8_pairs_float(bx, by); + + /* Multiply q with scale and accumulate */ + acc = _mm256_fmadd_ps(d, q, acc); + } + + *s = hsum_float_8(acc); +#elif defined(__AVX__) + // Initialize accumulator with zeros + __m256 acc = _mm256_setzero_ps(); + __m128i mask = _mm_set1_epi8((char)0xF0); + + // Main loop + for (int i = 0; i < nb; i++) { + /* Compute combined scale for the block */ + const __m256 d = _mm256_set1_ps(GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d)); + + __m256i bx = bytes_from_nibbles_32(x[i].qs); + const __m256i bxhi = bytes_from_bits_32(x[i].qh); + __m128i bxhil = _mm256_castsi256_si128(bxhi); + __m128i bxhih = _mm256_extractf128_si256(bxhi, 1); + bxhil = _mm_andnot_si128(bxhil, mask); + bxhih = _mm_andnot_si128(bxhih, mask); + __m128i bxl = _mm256_castsi256_si128(bx); + __m128i bxh = _mm256_extractf128_si256(bx, 1); + bxl = _mm_or_si128(bxl, bxhil); + bxh = _mm_or_si128(bxh, bxhih); + bx = _mm256_set_m128i(bxh, bxl); + + const __m256i by = _mm256_loadu_si256((const __m256i *)y[i].qs); + + const __m256 q = mul_sum_i8_pairs_float(bx, by); + + /* Multiply q with scale and accumulate */ + acc = _mm256_add_ps(_mm256_mul_ps(d, q), acc); + } + + *s = hsum_float_8(acc); +#else + // scalar + float sumf = 0.0; + + for (int i = 0; i < nb; i++) { + uint32_t qh; + memcpy(&qh, x[i].qh, sizeof(qh)); + + int sumi = 0; + + for (int j = 0; j < qk/2; ++j) { + const uint8_t xh_0 = ((qh & (1u << (j + 0 ))) >> (j + 0 )) << 4; + const uint8_t xh_1 = ((qh & (1u << (j + 16))) >> (j + 12)); + + const int32_t x0 = ((x[i].qs[j] & 0x0F) | xh_0) - 16; + const int32_t x1 = ((x[i].qs[j] >> 4) | xh_1) - 16; + + sumi += (x0 * y[i].qs[j]) + (x1 * y[i].qs[j + qk/2]); + } + + sumf += (GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d)) * sumi; + } + + *s = sumf; +#endif +} + +static void ggml_vec_dot_q5_1_q8_1(const int n, float * restrict s, const void * restrict vx, const void * restrict vy) { + const int qk = QK8_1; + const int nb = n / qk; + + assert(n % qk == 0); + assert(nb % 2 == 0); + assert(qk == QK5_1); + + const block_q5_1 * restrict x = vx; + const block_q8_1 * restrict y = vy; + +#if defined(__ARM_NEON) + float32x4_t sumv0 = vdupq_n_f32(0.0f); + float32x4_t sumv1 = vdupq_n_f32(0.0f); + + float summs0 = 0.0f; + float summs1 = 0.0f; + + uint32_t qh0; + uint32_t qh1; + + uint64_t tmp0[4]; + uint64_t tmp1[4]; + + for (int i = 0; i < nb; i += 2) { + const block_q5_1 * restrict x0 = &x[i]; + const block_q5_1 * restrict x1 = &x[i + 1]; + const block_q8_1 * restrict y0 = &y[i]; + const block_q8_1 * restrict y1 = &y[i + 1]; + + const uint8x16_t m4b = vdupq_n_u8(0x0F); + + summs0 += GGML_FP16_TO_FP32(x0->m) * y0->s; + summs1 += GGML_FP16_TO_FP32(x1->m) * y1->s; + + // extract the 5th bit via lookup table ((b) << 4) + memcpy(&qh0, x0->qh, sizeof(qh0)); + memcpy(&qh1, x1->qh, sizeof(qh1)); + + tmp0[0] = table_b2b_0[(qh0 >> 0) & 0xFF]; + tmp0[1] = table_b2b_0[(qh0 >> 8) & 0xFF]; + tmp0[2] = table_b2b_0[(qh0 >> 16) & 0xFF]; + tmp0[3] = table_b2b_0[(qh0 >> 24) ]; + + tmp1[0] = table_b2b_0[(qh1 >> 0) & 0xFF]; + tmp1[1] = table_b2b_0[(qh1 >> 8) & 0xFF]; + tmp1[2] = table_b2b_0[(qh1 >> 16) & 0xFF]; + tmp1[3] = table_b2b_0[(qh1 >> 24) ]; + + const int8x16_t qhl0 = vld1q_s8((const int8_t *)(tmp0 + 0)); + const int8x16_t qhh0 = vld1q_s8((const int8_t *)(tmp0 + 2)); + const int8x16_t qhl1 = vld1q_s8((const int8_t *)(tmp1 + 0)); + const int8x16_t qhh1 = vld1q_s8((const int8_t *)(tmp1 + 2)); + + const uint8x16_t v0_0 = vld1q_u8(x0->qs); + const uint8x16_t v0_1 = vld1q_u8(x1->qs); + + // 4-bit -> 8-bit + const int8x16_t v0_0l = vreinterpretq_s8_u8(vandq_u8 (v0_0, m4b)); + const int8x16_t v0_0h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4)); + const int8x16_t v0_1l = vreinterpretq_s8_u8(vandq_u8 (v0_1, m4b)); + const int8x16_t v0_1h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4)); + + // add high bit + const int8x16_t v0_0lf = vorrq_s8(v0_0l, qhl0); + const int8x16_t v0_0hf = vorrq_s8(v0_0h, qhh0); + const int8x16_t v0_1lf = vorrq_s8(v0_1l, qhl1); + const int8x16_t v0_1hf = vorrq_s8(v0_1h, qhh1); + + // load y + const int8x16_t v1_0l = vld1q_s8(y0->qs); + const int8x16_t v1_0h = vld1q_s8(y0->qs + 16); + const int8x16_t v1_1l = vld1q_s8(y1->qs); + const int8x16_t v1_1h = vld1q_s8(y1->qs + 16); + +#if defined(__ARM_FEATURE_DOTPROD) + sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32( + vdotq_s32(vdupq_n_s32(0), v0_0lf, v1_0l), + vdotq_s32(vdupq_n_s32(0), v0_0hf, v1_0h))), GGML_FP16_TO_FP32(x0->d)*y0->d); + sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32( + vdotq_s32(vdupq_n_s32(0), v0_1lf, v1_1l), + vdotq_s32(vdupq_n_s32(0), v0_1hf, v1_1h))), GGML_FP16_TO_FP32(x1->d)*y1->d); +#else + const int16x8_t pl0l = vmull_s8(vget_low_s8 (v0_0lf), vget_low_s8 (v1_0l)); + const int16x8_t pl0h = vmull_s8(vget_high_s8(v0_0lf), vget_high_s8(v1_0l)); + const int16x8_t ph0l = vmull_s8(vget_low_s8 (v0_0hf), vget_low_s8 (v1_0h)); + const int16x8_t ph0h = vmull_s8(vget_high_s8(v0_0hf), vget_high_s8(v1_0h)); + + const int16x8_t pl1l = vmull_s8(vget_low_s8 (v0_1lf), vget_low_s8 (v1_1l)); + const int16x8_t pl1h = vmull_s8(vget_high_s8(v0_1lf), vget_high_s8(v1_1l)); + const int16x8_t ph1l = vmull_s8(vget_low_s8 (v0_1hf), vget_low_s8 (v1_1h)); + const int16x8_t ph1h = vmull_s8(vget_high_s8(v0_1hf), vget_high_s8(v1_1h)); + + const int32x4_t pl0 = vaddq_s32(vpaddlq_s16(pl0l), vpaddlq_s16(pl0h)); + const int32x4_t ph0 = vaddq_s32(vpaddlq_s16(ph0l), vpaddlq_s16(ph0h)); + const int32x4_t pl1 = vaddq_s32(vpaddlq_s16(pl1l), vpaddlq_s16(pl1h)); + const int32x4_t ph1 = vaddq_s32(vpaddlq_s16(ph1l), vpaddlq_s16(ph1h)); + + sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(pl0, ph0)), GGML_FP16_TO_FP32(x0->d)*y0->d); + sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(pl1, ph1)), GGML_FP16_TO_FP32(x1->d)*y1->d); +#endif + } + + *s = vaddvq_f32(sumv0) + vaddvq_f32(sumv1) + summs0 + summs1; +#elif defined(__wasm_simd128__) + v128_t sumv = wasm_f32x4_splat(0.0f); + + float summs = 0.0f; + + uint32_t qh; + uint64_t tmp[4]; + + // TODO: check if unrolling this is better + for (int i = 0; i < nb; ++i) { + const block_q5_1 * restrict x0 = &x[i]; + const block_q8_1 * restrict y0 = &y[i]; + + summs += GGML_FP16_TO_FP32(x0->m) * y0->s; + + const v128_t m4b = wasm_i8x16_splat(0x0F); + + // extract the 5th bit + memcpy(&qh, x0->qh, sizeof(qh)); + + tmp[0] = table_b2b_0[(qh >> 0) & 0xFF]; + tmp[1] = table_b2b_0[(qh >> 8) & 0xFF]; + tmp[2] = table_b2b_0[(qh >> 16) & 0xFF]; + tmp[3] = table_b2b_0[(qh >> 24) ]; + + const v128_t qhl = wasm_v128_load(tmp + 0); + const v128_t qhh = wasm_v128_load(tmp + 2); + + const v128_t v0 = wasm_v128_load(x0->qs); + + // 4-bit -> 8-bit + const v128_t v0l = wasm_v128_and (v0, m4b); + const v128_t v0h = wasm_u8x16_shr(v0, 4); + + // add high bit + const v128_t v0lf = wasm_v128_or(v0l, qhl); + const v128_t v0hf = wasm_v128_or(v0h, qhh); + + // load y + const v128_t v1l = wasm_v128_load(y0->qs); + const v128_t v1h = wasm_v128_load(y0->qs + 16); + + // int8x16 -> int16x8 + const v128_t v0lfl = wasm_i16x8_extend_low_i8x16 (v0lf); + const v128_t v0lfh = wasm_i16x8_extend_high_i8x16(v0lf); + const v128_t v0hfl = wasm_i16x8_extend_low_i8x16 (v0hf); + const v128_t v0hfh = wasm_i16x8_extend_high_i8x16(v0hf); + + const v128_t v1ll = wasm_i16x8_extend_low_i8x16 (v1l); + const v128_t v1lh = wasm_i16x8_extend_high_i8x16(v1l); + const v128_t v1hl = wasm_i16x8_extend_low_i8x16 (v1h); + const v128_t v1hh = wasm_i16x8_extend_high_i8x16(v1h); + + // dot product + sumv = wasm_f32x4_add(sumv, + wasm_f32x4_mul(wasm_f32x4_convert_i32x4(wasm_i32x4_add( + wasm_i32x4_add(wasm_i32x4_dot_i16x8(v0lfl, v1ll), + wasm_i32x4_dot_i16x8(v0lfh, v1lh)), + wasm_i32x4_add(wasm_i32x4_dot_i16x8(v0hfl, v1hl), + wasm_i32x4_dot_i16x8(v0hfh, v1hh)))), + wasm_f32x4_splat(GGML_FP16_TO_FP32(x0->d) * y0->d))); + } + + *s = wasm_f32x4_extract_lane(sumv, 0) + wasm_f32x4_extract_lane(sumv, 1) + + wasm_f32x4_extract_lane(sumv, 2) + wasm_f32x4_extract_lane(sumv, 3) + summs; +#elif defined(__AVX2__) + // Initialize accumulator with zeros + __m256 acc = _mm256_setzero_ps(); + + float summs = 0.0f; + + // Main loop + for (int i = 0; i < nb; i++) { + const __m256 dx = _mm256_set1_ps(GGML_FP16_TO_FP32(x[i].d)); + + summs += GGML_FP16_TO_FP32(x[i].m) * y[i].s; + + __m256i bx = bytes_from_nibbles_32(x[i].qs); + __m256i bxhi = bytes_from_bits_32(x[i].qh); + bxhi = _mm256_and_si256(bxhi, _mm256_set1_epi8(0x10)); + bx = _mm256_or_si256(bx, bxhi); + + const __m256 dy = _mm256_set1_ps(y[i].d); + const __m256i by = _mm256_loadu_si256((const __m256i *)y[i].qs); + + const __m256 q = mul_sum_us8_pairs_float(bx, by); + + acc = _mm256_fmadd_ps(q, _mm256_mul_ps(dx, dy), acc); + } + + *s = hsum_float_8(acc) + summs; +#elif defined(__AVX__) + // Initialize accumulator with zeros + __m256 acc = _mm256_setzero_ps(); + __m128i mask = _mm_set1_epi8(0x10); + + float summs = 0.0f; + + // Main loop + for (int i = 0; i < nb; i++) { + const __m256 dx = _mm256_set1_ps(GGML_FP16_TO_FP32(x[i].d)); + + summs += GGML_FP16_TO_FP32(x[i].m) * y[i].s; + + __m256i bx = bytes_from_nibbles_32(x[i].qs); + const __m256i bxhi = bytes_from_bits_32(x[i].qh); + __m128i bxhil = _mm256_castsi256_si128(bxhi); + __m128i bxhih = _mm256_extractf128_si256(bxhi, 1); + bxhil = _mm_and_si128(bxhil, mask); + bxhih = _mm_and_si128(bxhih, mask); + __m128i bxl = _mm256_castsi256_si128(bx); + __m128i bxh = _mm256_extractf128_si256(bx, 1); + bxl = _mm_or_si128(bxl, bxhil); + bxh = _mm_or_si128(bxh, bxhih); + bx = _mm256_set_m128i(bxh, bxl); + + const __m256 dy = _mm256_set1_ps(y[i].d); + const __m256i by = _mm256_loadu_si256((const __m256i *)y[i].qs); + + const __m256 q = mul_sum_us8_pairs_float(bx, by); + + acc = _mm256_add_ps(_mm256_mul_ps(q, _mm256_mul_ps(dx, dy)), acc); + } + + *s = hsum_float_8(acc) + summs; +#else + // scalar + float sumf = 0.0; + + for (int i = 0; i < nb; i++) { + uint32_t qh; + memcpy(&qh, x[i].qh, sizeof(qh)); + + int sumi = 0; + + for (int j = 0; j < qk/2; ++j) { + const uint8_t xh_0 = ((qh >> (j + 0)) << 4) & 0x10; + const uint8_t xh_1 = ((qh >> (j + 12)) ) & 0x10; + + const int32_t x0 = (x[i].qs[j] & 0xF) | xh_0; + const int32_t x1 = (x[i].qs[j] >> 4) | xh_1; + + sumi += (x0 * y[i].qs[j]) + (x1 * y[i].qs[j + qk/2]); + } + + sumf += (GGML_FP16_TO_FP32(x[i].d)*y[i].d)*sumi + GGML_FP16_TO_FP32(x[i].m)*y[i].s; + } + + *s = sumf; +#endif +} + +static void ggml_vec_dot_q8_0_q8_0(const int n, float * restrict s, const void * restrict vx, const void * restrict vy) { + const int qk = QK8_0; + const int nb = n / qk; + + assert(n % qk == 0); + assert(nb % 2 == 0); + + const block_q8_0 * restrict x = vx; + const block_q8_0 * restrict y = vy; + +#if defined(__ARM_NEON) + float32x4_t sumv0 = vdupq_n_f32(0.0f); + float32x4_t sumv1 = vdupq_n_f32(0.0f); + + for (int i = 0; i < nb; i += 2) { + const block_q8_0 * restrict x0 = &x[i + 0]; + const block_q8_0 * restrict x1 = &x[i + 1]; + const block_q8_0 * restrict y0 = &y[i + 0]; + const block_q8_0 * restrict y1 = &y[i + 1]; + + const int8x16_t x0_0 = vld1q_s8(x0->qs); + const int8x16_t x0_1 = vld1q_s8(x0->qs + 16); + const int8x16_t x1_0 = vld1q_s8(x1->qs); + const int8x16_t x1_1 = vld1q_s8(x1->qs + 16); + + // load y + const int8x16_t y0_0 = vld1q_s8(y0->qs); + const int8x16_t y0_1 = vld1q_s8(y0->qs + 16); + const int8x16_t y1_0 = vld1q_s8(y1->qs); + const int8x16_t y1_1 = vld1q_s8(y1->qs + 16); + +#if defined(__ARM_FEATURE_DOTPROD) + sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32( + vdotq_s32(vdupq_n_s32(0), x0_0, y0_0), + vdotq_s32(vdupq_n_s32(0), x0_1, y0_1))), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d)); + + sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32( + vdotq_s32(vdupq_n_s32(0), x1_0, y1_0), + vdotq_s32(vdupq_n_s32(0), x1_1, y1_1))), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d)); + +#else + const int16x8_t p0_0 = vmull_s8(vget_low_s8 (x0_0), vget_low_s8 (y0_0)); + const int16x8_t p0_1 = vmull_s8(vget_high_s8(x0_0), vget_high_s8(y0_0)); + const int16x8_t p0_2 = vmull_s8(vget_low_s8 (x0_1), vget_low_s8 (y0_1)); + const int16x8_t p0_3 = vmull_s8(vget_high_s8(x0_1), vget_high_s8(y0_1)); + + const int16x8_t p1_0 = vmull_s8(vget_low_s8 (x1_0), vget_low_s8 (y1_0)); + const int16x8_t p1_1 = vmull_s8(vget_high_s8(x1_0), vget_high_s8(y1_0)); + const int16x8_t p1_2 = vmull_s8(vget_low_s8 (x1_1), vget_low_s8 (y1_1)); + const int16x8_t p1_3 = vmull_s8(vget_high_s8(x1_1), vget_high_s8(y1_1)); + + const int32x4_t p0 = vaddq_s32(vpaddlq_s16(p0_0), vpaddlq_s16(p0_1)); + const int32x4_t p1 = vaddq_s32(vpaddlq_s16(p0_2), vpaddlq_s16(p0_3)); + const int32x4_t p2 = vaddq_s32(vpaddlq_s16(p1_0), vpaddlq_s16(p1_1)); + const int32x4_t p3 = vaddq_s32(vpaddlq_s16(p1_2), vpaddlq_s16(p1_3)); + + sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(p0, p1)), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d)); + sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(p2, p3)), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d)); +#endif + } + + *s = vaddvq_f32(sumv0) + vaddvq_f32(sumv1); +#elif defined(__AVX2__) || defined(__AVX__) + // Initialize accumulator with zeros + __m256 acc = _mm256_setzero_ps(); + + // Main loop + for (int i = 0; i < nb; ++i) { + // Compute combined scale for the block + const __m256 d = _mm256_set1_ps(GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d)); + __m256i bx = _mm256_loadu_si256((const __m256i *)x[i].qs); + __m256i by = _mm256_loadu_si256((const __m256i *)y[i].qs); + + const __m256 q = mul_sum_i8_pairs_float(bx, by); + + // Multiply q with scale and accumulate +#if defined(__AVX2__) + acc = _mm256_fmadd_ps( d, q, acc ); +#else + acc = _mm256_add_ps( _mm256_mul_ps( d, q ), acc ); +#endif + } + + *s = hsum_float_8(acc); +#else + // scalar + float sumf = 0.0; + + for (int i = 0; i < nb; i++) { + int sumi = 0; + + for (int j = 0; j < qk; j++) { + sumi += x[i].qs[j]*y[i].qs[j]; + } + + sumf += sumi*(GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d)); + } + + *s = sumf; +#endif +} + +// compute GGML_VEC_DOT_UNROLL dot products at once +// xs - x row stride in bytes +inline static void ggml_vec_dot_f16_unroll(const int n, const int xs, float * restrict s, void * restrict xv, ggml_fp16_t * restrict y) { + ggml_float sumf[GGML_VEC_DOT_UNROLL] = { 0.0 }; + + ggml_fp16_t * restrict x[GGML_VEC_DOT_UNROLL]; + + for (int i = 0; i < GGML_VEC_DOT_UNROLL; ++i) { + x[i] = (ggml_fp16_t *) ((char *) xv + i*xs); + } + +#if defined(GGML_SIMD) + const int np = (n & ~(GGML_F16_STEP - 1)); + + GGML_F16_VEC sum[GGML_VEC_DOT_UNROLL][GGML_F16_ARR] = { { GGML_F16_VEC_ZERO } }; + + GGML_F16_VEC ax[GGML_F16_ARR]; + GGML_F16_VEC ay[GGML_F16_ARR]; + + for (int i = 0; i < np; i += GGML_F16_STEP) { + for (int j = 0; j < GGML_F16_ARR; j++) { + ay[j] = GGML_F16_VEC_LOAD(y + i + j*GGML_F16_EPR, j); + + for (int k = 0; k < GGML_VEC_DOT_UNROLL; ++k) { + ax[j] = GGML_F16_VEC_LOAD(x[k] + i + j*GGML_F16_EPR, j); + + sum[k][j] = GGML_F16_VEC_FMA(sum[k][j], ax[j], ay[j]); + } + } + } + + // reduce sum0..sum3 to sum0 + for (int k = 0; k < GGML_VEC_DOT_UNROLL; ++k) { + GGML_F16_VEC_REDUCE(sumf[k], sum[k]); + } + + // leftovers + for (int i = np; i < n; ++i) { + for (int j = 0; j < GGML_VEC_DOT_UNROLL; ++j) { + sumf[j] += (ggml_float)(GGML_FP16_TO_FP32(x[j][i])*GGML_FP16_TO_FP32(y[i])); + } + } +#else + for (int i = 0; i < n; ++i) { + for (int j = 0; j < GGML_VEC_DOT_UNROLL; ++j) { + sumf[j] += (ggml_float)(GGML_FP16_TO_FP32(x[j][i])*GGML_FP16_TO_FP32(y[i])); + } + } +#endif + + for (int i = 0; i < GGML_VEC_DOT_UNROLL; ++i) { + s[i] = sumf[i]; + } +} + +inline static void ggml_vec_mad_f32(const int n, float * restrict y, const float * restrict x, const float v) { +#if defined(GGML_SIMD) + const int np = (n & ~(GGML_F32_STEP - 1)); + + GGML_F32_VEC vx = GGML_F32_VEC_SET1(v); + + GGML_F32_VEC ax[GGML_F32_ARR]; + GGML_F32_VEC ay[GGML_F32_ARR]; + + for (int i = 0; i < np; i += GGML_F32_STEP) { + for (int j = 0; j < GGML_F32_ARR; j++) { + ax[j] = GGML_F32_VEC_LOAD(x + i + j*GGML_F32_EPR); + ay[j] = GGML_F32_VEC_LOAD(y + i + j*GGML_F32_EPR); + ay[j] = GGML_F32_VEC_FMA(ay[j], ax[j], vx); + + GGML_F32_VEC_STORE(y + i + j*GGML_F32_EPR, ay[j]); + } + } + + // leftovers + for (int i = np; i < n; ++i) { + y[i] += x[i]*v; + } +#else + // scalar + for (int i = 0; i < n; ++i) { + y[i] += x[i]*v; + } +#endif +} + +//inline static void ggml_vec_scale_f32(const int n, float * y, const float v) { for (int i = 0; i < n; ++i) y[i] *= v; } +inline static void ggml_vec_scale_f32(const int n, float * y, const float v) { +#if defined(GGML_SIMD) + const int np = (n & ~(GGML_F32_STEP - 1)); + + GGML_F32_VEC vx = GGML_F32_VEC_SET1(v); + + GGML_F32_VEC ay[GGML_F32_ARR]; + + for (int i = 0; i < np; i += GGML_F32_STEP) { + for (int j = 0; j < GGML_F32_ARR; j++) { + ay[j] = GGML_F32_VEC_LOAD(y + i + j*GGML_F32_EPR); + ay[j] = GGML_F32_VEC_MUL(ay[j], vx); + + GGML_F32_VEC_STORE(y + i + j*GGML_F32_EPR, ay[j]); + } + } + + // leftovers + for (int i = np; i < n; ++i) { + y[i] *= v; + } +#else + // scalar + for (int i = 0; i < n; ++i) { + y[i] *= v; + } +#endif +} + +inline static void ggml_vec_norm_f32 (const int n, float * s, const float * x) { ggml_vec_dot_f32(n, s, x, x); *s = sqrtf(*s); } +inline static void ggml_vec_sqr_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = x[i]*x[i]; } +inline static void ggml_vec_sqrt_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = sqrtf(x[i]); } +inline static void ggml_vec_log_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = logf(x[i]); } +inline static void ggml_vec_abs_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = fabsf(x[i]); } +inline static void ggml_vec_sgn_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = (x[i] > 0.f) ? 1.f : ((x[i] < 0.f) ? -1.f : 0.f); } +inline static void ggml_vec_step_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = (x[i] > 0.f) ? 1.f : 0.f; } +inline static void ggml_vec_relu_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = (x[i] > 0.f) ? x[i] : 0.f; } + +static const float GELU_COEF_A = 0.044715f; +static const float SQRT_2_OVER_PI = 0.79788456080286535587989211986876f; + +inline static float ggml_gelu_f32(float x) { + return 0.5f*x*(1.0f + tanhf(SQRT_2_OVER_PI*x*(1.0f + GELU_COEF_A*x*x))); +} + +inline static void ggml_vec_gelu_f16(const int n, ggml_fp16_t * y, const ggml_fp16_t * x) { + const uint16_t * i16 = (const uint16_t *) x; + for (int i = 0; i < n; ++i) { + y[i] = table_gelu_f16[i16[i]]; + } +} + +#ifdef GGML_GELU_FP16 +inline static void ggml_vec_gelu_f32(const int n, float * y, const float * x) { + uint16_t t; + for (int i = 0; i < n; ++i) { + ggml_fp16_t fp16 = GGML_FP32_TO_FP16(x[i]); + memcpy(&t, &fp16, sizeof(uint16_t)); + y[i] = GGML_FP16_TO_FP32(table_gelu_f16[t]); + } +} +#else +inline static void ggml_vec_gelu_f32(const int n, float * y, const float * x) { + for (int i = 0; i < n; ++i) { + y[i] = ggml_gelu_f32(x[i]); + } +} +#endif + +// Sigmoid Linear Unit (SiLU) function +inline static float ggml_silu_f32(float x) { + return x/(1.0f + expf(-x)); +} + +//inline static void ggml_vec_silu_f16(const int n, ggml_fp16_t * y, const ggml_fp16_t * x) { +// const uint16_t * i16 = (const uint16_t *) x; +// for (int i = 0; i < n; ++i) { +// y[i] = table_silu_f16[i16[i]]; +// } +//} + +#ifdef GGML_SILU_FP16 +inline static void ggml_vec_silu_f32(const int n, float * y, const float * x) { + uint16_t t; + for (int i = 0; i < n; ++i) { + ggml_fp16_t fp16 = GGML_FP32_TO_FP16(x[i]); + memcpy(&t, &fp16, sizeof(uint16_t)); + y[i] = GGML_FP16_TO_FP32(table_silu_f16[t]); + } +} +#else +inline static void ggml_vec_silu_f32(const int n, float * y, const float * x) { + for (int i = 0; i < n; ++i) { + y[i] = ggml_silu_f32(x[i]); + } +} +#endif + +inline static float ggml_silu_backward_f32(float x, float dy) { + const float s = 1.0f/(1.0f + expf(-x)); + return dy*s*(1.0f + x*(1.0f - s)); +} + +#ifdef GGML_SILU_FP16 +inline static void ggml_vec_silu_backward_f32(const int n, float * dx, const float * x, const float * dy) { + for (int i = 0; i < n; ++i) { + // we did not use x[i] to compute forward silu but its f16 equivalent + // take derivative at f16 of x[i]: + ggml_fp16_t fp16 = GGML_FP32_TO_FP16(x[i]); + float usedx = GGML_FP16_TO_FP32(fp16); + dx[i] = ggml_silu_backward_f32(usedx, dy[i]); + } +} +#else +inline static void ggml_vec_silu_backward_f32(const int n, float * dx, const float * x, const float * dy) { + for (int i = 0; i < n; ++i) { + dx[i] = ggml_silu_backward_f32(x[i], dy[i]); + } +} +#endif + +inline static void ggml_vec_sum_f32(const int n, float * s, const float * x) { +#ifndef GGML_USE_ACCELERATE + ggml_float sum = 0.0; + for (int i = 0; i < n; ++i) { + sum += (ggml_float)x[i]; + } + *s = sum; +#else + vDSP_sve(x, 1, s, n); +#endif +} + +inline static void ggml_vec_sum_ggf(const int n, ggml_float * s, const float * x) { + ggml_float sum = 0.0; + for (int i = 0; i < n; ++i) { + sum += (ggml_float)x[i]; + } + *s = sum; +} + +inline static void ggml_vec_max_f32(const int n, float * s, const float * x) { +#ifndef GGML_USE_ACCELERATE + float max = -INFINITY; + for (int i = 0; i < n; ++i) { + max = MAX(max, x[i]); + } + *s = max; +#else + vDSP_maxv(x, 1, s, n); +#endif +} + +inline static void ggml_vec_norm_inv_f32(const int n, float * s, const float * x) { + ggml_vec_norm_f32(n, s, x); + *s = 1.f/(*s); +} + +// +// logging +// + +#if (GGML_DEBUG >= 1) +#define GGML_PRINT_DEBUG(...) printf(__VA_ARGS__) +#else +#define GGML_PRINT_DEBUG(...) +#endif + +#if (GGML_DEBUG >= 5) +#define GGML_PRINT_DEBUG_5(...) printf(__VA_ARGS__) +#else +#define GGML_PRINT_DEBUG_5(...) +#endif + +#if (GGML_DEBUG >= 10) +#define GGML_PRINT_DEBUG_10(...) printf(__VA_ARGS__) +#else +#define GGML_PRINT_DEBUG_10(...) +#endif + +#define GGML_PRINT(...) printf(__VA_ARGS__) + +// +// data types +// + +static const int GGML_BLCK_SIZE[GGML_TYPE_COUNT] = { + [GGML_TYPE_F32] = 1, + [GGML_TYPE_F16] = 1, + [GGML_TYPE_Q4_0] = QK4_0, + [GGML_TYPE_Q4_1] = QK4_1, + [GGML_TYPE_Q5_0] = QK5_0, + [GGML_TYPE_Q5_1] = QK5_1, + [GGML_TYPE_Q8_0] = QK8_0, + [GGML_TYPE_Q8_1] = QK8_1, + [GGML_TYPE_I8] = 1, + [GGML_TYPE_I16] = 1, + [GGML_TYPE_I32] = 1, +}; +static_assert(GGML_TYPE_COUNT == 13, "GGML_BLCK_SIZE is outdated"); + +static const size_t GGML_TYPE_SIZE[GGML_TYPE_COUNT] = { + [GGML_TYPE_F32] = sizeof(float), + [GGML_TYPE_F16] = sizeof(ggml_fp16_t), + [GGML_TYPE_Q4_0] = sizeof(block_q4_0), + [GGML_TYPE_Q4_1] = sizeof(block_q4_1), + [GGML_TYPE_Q5_0] = sizeof(block_q5_0), + [GGML_TYPE_Q5_1] = sizeof(block_q5_1), + [GGML_TYPE_Q8_0] = sizeof(block_q8_0), + [GGML_TYPE_Q8_1] = sizeof(block_q8_1), + [GGML_TYPE_I8] = sizeof(int8_t), + [GGML_TYPE_I16] = sizeof(int16_t), + [GGML_TYPE_I32] = sizeof(int32_t), +}; +static_assert(GGML_TYPE_COUNT == 13, "GGML_TYPE_SIZE is outdated"); + + +static const char * GGML_TYPE_NAME[GGML_TYPE_COUNT] = { + [GGML_TYPE_F32] = "f32", + [GGML_TYPE_F16] = "f16", + [GGML_TYPE_Q4_0] = "q4_0", + [GGML_TYPE_Q4_1] = "q4_1", + [GGML_TYPE_Q5_0] = "q5_0", + [GGML_TYPE_Q5_1] = "q5_1", + [GGML_TYPE_Q8_0] = "q8_0", + [GGML_TYPE_Q8_1] = "q8_1", + [GGML_TYPE_I8] = "i8", + [GGML_TYPE_I16] = "i16", + [GGML_TYPE_I32] = "i32", +}; +static_assert(GGML_TYPE_COUNT == 13, "GGML_TYPE_NAME is outdated"); + +static bool GGML_IS_QUANTIZED[GGML_TYPE_COUNT] = { + [GGML_TYPE_F32] = false, + [GGML_TYPE_F16] = false, + [GGML_TYPE_Q4_0] = true, + [GGML_TYPE_Q4_1] = true, + [GGML_TYPE_Q5_0] = true, + [GGML_TYPE_Q5_1] = true, + [GGML_TYPE_Q8_0] = true, + [GGML_TYPE_Q8_1] = true, + [GGML_TYPE_I8] = false, + [GGML_TYPE_I16] = false, + [GGML_TYPE_I32] = false, +}; +static_assert(GGML_TYPE_COUNT == 13, "GGML_IS_QUANTIZED is outdated"); + +static const char * GGML_OP_LABEL[GGML_OP_COUNT] = { + "NONE", + + "DUP", + "ADD", + "ADD1", + "ACC", + "SUB", + "MUL", + "DIV", + "SQR", + "SQRT", + "LOG", + "SUM", + "SUM_ROWS", + "MEAN", + "REPEAT", + "ABS", + "SGN", + "NEG", + "STEP", + "RELU", + "GELU", + "SILU", + "SILU_BACK", + "NORM", + "RMS_NORM", + "RMS_NORM_BACK", + + "MUL_MAT", + + "SCALE", + "SET", + "CPY", + "CONT", + "RESHAPE", + "VIEW", + "PERMUTE", + "TRANSPOSE", + "GET_ROWS", + "GET_ROWS_BACK", + "DIAG", + "DIAG_MASK_INF", + "DIAG_MASK_ZERO", + "SOFT_MAX", + "ROPE", + "ROPE_BACK", + "ALIBI", + "CLAMP", + "CONV_1D_1S", + "CONV_1D_2S", + + "FLASH_ATTN", + "FLASH_FF", + + "MAP_UNARY", + "MAP_BINARY", +}; + +static_assert(GGML_OP_COUNT == 51, "GGML_OP_COUNT != 51"); + + +static const char * GGML_OP_SYMBOL[GGML_OP_COUNT] = { + "none", + + "x", + "x+y", + "x+y", + "view(x,nb,offset)+=y->x", + "x-y", + "x*y", + "x/y", + "x^2", + "√x", + "log(x)", + "Σx", + "Σx_k", + "Σx/n", + "repeat(x)", + "abs(x)", + "sgn(x)", + "-x", + "step(x)", + "relu(x)", + "gelu(x)", + "silu(x)", + "silu_back(x)", + "norm(x)", + "rms_norm(x)", + "rms_norm_back(x)", + + "X*Y", + + "x*v", + "y-\\>view(x)", + "x-\\>y", + "cont(x)", + "reshape(x)", + "view(x)", + "permute(x)", + "transpose(x)", + "get_rows(x)", + "get_rows_back(x)", + "diag(x)", + "diag_mask_inf(x)", + "diag_mask_zero(x)", + "soft_max(x)", + "rope(x)", + "rope_back(x)", + "alibi(x)", + "clamp(x)", + "conv_1d_1s(x)", + "conv_1d_2s(x)", + + "flash_attn(x)", + "flash_ff(x)", + + "f(x)", + "f(x,y)", +}; + +static_assert(GGML_OP_COUNT == 51, "GGML_OP_COUNT != 51"); + +static_assert(sizeof(struct ggml_object)%GGML_MEM_ALIGN == 0, "ggml_object size must be a multiple of GGML_MEM_ALIGN"); +static_assert(sizeof(struct ggml_tensor)%GGML_MEM_ALIGN == 0, "ggml_tensor size must be a multiple of GGML_MEM_ALIGN"); + +// +// ggml context +// + +struct ggml_context { + size_t mem_size; + void * mem_buffer; + bool mem_buffer_owned; + bool no_alloc; + + int n_objects; + + struct ggml_object * objects_begin; + struct ggml_object * objects_end; + + struct ggml_scratch scratch; + struct ggml_scratch scratch_save; +}; + +struct ggml_context_container { + bool used; + + struct ggml_context context; +}; + +// +// compute types +// + +enum ggml_task_type { + GGML_TASK_INIT = 0, + GGML_TASK_COMPUTE, + GGML_TASK_FINALIZE, +}; + +struct ggml_compute_params { + enum ggml_task_type type; + + int ith, nth; + + // work buffer for all threads + size_t wsize; + void * wdata; +}; + +// +// ggml state +// + +struct ggml_state { + struct ggml_context_container contexts[GGML_MAX_CONTEXTS]; +}; + +// global state +static struct ggml_state g_state; +static atomic_int g_state_barrier = 0; + +// barrier via spin lock +inline static void ggml_critical_section_start(void) { + int processing = atomic_fetch_add(&g_state_barrier, 1); + + while (processing > 0) { + // wait for other threads to finish + atomic_fetch_sub(&g_state_barrier, 1); + sched_yield(); // TODO: reconsider this + processing = atomic_fetch_add(&g_state_barrier, 1); + } +} + +// TODO: make this somehow automatically executed +// some sort of "sentry" mechanism +inline static void ggml_critical_section_end(void) { + atomic_fetch_sub(&g_state_barrier, 1); +} + +//////////////////////////////////////////////////////////////////////////////// + +void ggml_print_object(const struct ggml_object * obj) { + GGML_PRINT(" - ggml_object: offset = %zu, size = %zu, next = %p\n", + obj->offs, obj->size, (const void *) obj->next); +} + +void ggml_print_objects(const struct ggml_context * ctx) { + struct ggml_object * obj = ctx->objects_begin; + + GGML_PRINT("%s: objects in context %p:\n", __func__, (const void *) ctx); + + while (obj != NULL) { + ggml_print_object(obj); + obj = obj->next; + } + + GGML_PRINT("%s: --- end ---\n", __func__); +} + +int64_t ggml_nelements(const struct ggml_tensor * tensor) { + static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); + + return tensor->ne[0]*tensor->ne[1]*tensor->ne[2]*tensor->ne[3]; +} + +int ggml_nrows(const struct ggml_tensor * tensor) { + static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); + + return tensor->ne[1]*tensor->ne[2]*tensor->ne[3]; +} + +size_t ggml_nbytes(const struct ggml_tensor * tensor) { + static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); + + return (ggml_nelements(tensor)*GGML_TYPE_SIZE[tensor->type])/GGML_BLCK_SIZE[tensor->type]; +} + +int ggml_blck_size(enum ggml_type type) { + return GGML_BLCK_SIZE[type]; +} + +size_t ggml_type_size(enum ggml_type type) { + return GGML_TYPE_SIZE[type]; +} + +float ggml_type_sizef(enum ggml_type type) { + return ((float)(GGML_TYPE_SIZE[type]))/GGML_BLCK_SIZE[type]; +} + +const char * ggml_type_name(enum ggml_type type) { + return GGML_TYPE_NAME[type]; +} + + +size_t ggml_element_size(const struct ggml_tensor * tensor) { + return GGML_TYPE_SIZE[tensor->type]; +} + +static inline bool ggml_is_scalar(const struct ggml_tensor * tensor) { + static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); + + return tensor->ne[0] == 1 && tensor->ne[1] == 1 && tensor->ne[2] == 1 && tensor->ne[3] == 1; +} + +static inline bool ggml_is_vector(const struct ggml_tensor * tensor) { + static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); + + return tensor->ne[1] == 1 && tensor->ne[2] == 1 && tensor->ne[3] == 1; +} + +static inline bool ggml_is_matrix(const struct ggml_tensor * tensor) { + static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); + + return tensor->ne[2] == 1 && tensor->ne[3] == 1; +} + +static inline bool ggml_can_mul_mat(const struct ggml_tensor * t0, const struct ggml_tensor * t1) { + static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); + + return + (t0->ne[0] == t1->ne[0]) && + (t0->ne[2] == t1->ne[2]) && + (t0->ne[3] == t1->ne[3]); +} + +bool ggml_is_quantized(enum ggml_type type) { + return GGML_IS_QUANTIZED[type]; +} + +enum ggml_type ggml_ftype_to_ggml_type(enum ggml_ftype ftype) { + enum ggml_type wtype = GGML_TYPE_COUNT; + + switch (ftype) { + case GGML_FTYPE_ALL_F32: wtype = GGML_TYPE_F32; break; + case GGML_FTYPE_MOSTLY_F16: wtype = GGML_TYPE_F16; break; + case GGML_FTYPE_MOSTLY_Q4_0: wtype = GGML_TYPE_Q4_0; break; + case GGML_FTYPE_MOSTLY_Q4_1: wtype = GGML_TYPE_Q4_1; break; + case GGML_FTYPE_MOSTLY_Q5_0: wtype = GGML_TYPE_Q5_0; break; + case GGML_FTYPE_MOSTLY_Q5_1: wtype = GGML_TYPE_Q5_1; break; + case GGML_FTYPE_MOSTLY_Q8_0: wtype = GGML_TYPE_Q8_0; break; + case GGML_FTYPE_UNKNOWN: wtype = GGML_TYPE_COUNT; break; + case GGML_FTYPE_MOSTLY_Q4_1_SOME_F16: wtype = GGML_TYPE_COUNT; break; + } + + GGML_ASSERT(wtype != GGML_TYPE_COUNT); + + return wtype; +} + +static inline bool ggml_is_transposed(const struct ggml_tensor * tensor) { + return tensor->nb[0] > tensor->nb[1]; +} + +static inline bool ggml_is_contiguous(const struct ggml_tensor * tensor) { + static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); + + return + tensor->nb[0] == GGML_TYPE_SIZE[tensor->type] && + tensor->nb[1] == (tensor->nb[0]*tensor->ne[0])/GGML_BLCK_SIZE[tensor->type] && + tensor->nb[2] == tensor->nb[1]*tensor->ne[1] && + tensor->nb[3] == tensor->nb[2]*tensor->ne[2]; +} + +static inline bool ggml_is_padded_1d(const struct ggml_tensor * tensor) { + static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); + + return + tensor->nb[0] == GGML_TYPE_SIZE[tensor->type] && + tensor->nb[2] == tensor->nb[1]*tensor->ne[1] && + tensor->nb[3] == tensor->nb[2]*tensor->ne[2]; +} + +static inline bool ggml_are_same_shape(const struct ggml_tensor * t0, const struct ggml_tensor * t1) { + static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); + + return + (t0->ne[0] == t1->ne[0] ) && + (t0->ne[1] == t1->ne[1] ) && + (t0->ne[2] == t1->ne[2] ) && + (t0->ne[3] == t1->ne[3] ); +} + +// check if t1 can be represented as a repeatition of t0 +static inline bool ggml_can_repeat(const struct ggml_tensor * t0, const struct ggml_tensor * t1) { + static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); + + return + (t1->ne[0]%t0->ne[0] == 0) && + (t1->ne[1]%t0->ne[1] == 0) && + (t1->ne[2]%t0->ne[2] == 0) && + (t1->ne[3]%t0->ne[3] == 0); +} + +static inline bool ggml_can_repeat_rows(const struct ggml_tensor * t0, const struct ggml_tensor * t1) { + static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); + + return (t0->ne[0] == t1->ne[0]) && ggml_can_repeat(t0, t1); +} + +static inline int ggml_up32(int n) { + return (n + 31) & ~31; +} + +//static inline int ggml_up64(int n) { +// return (n + 63) & ~63; +//} + +static inline int ggml_up(int n, int m) { + // assert m is a power of 2 + GGML_ASSERT((m & (m - 1)) == 0); + return (n + m - 1) & ~(m - 1); +} + +// assert that pointer is aligned to GGML_MEM_ALIGN +#define ggml_assert_aligned(ptr) \ + GGML_ASSERT(((uintptr_t) (ptr))%GGML_MEM_ALIGN == 0) + +//////////////////////////////////////////////////////////////////////////////// + +struct ggml_context * ggml_init(struct ggml_init_params params) { + // make this function thread safe + ggml_critical_section_start(); + + static bool is_first_call = true; + + if (is_first_call) { + // initialize time system (required on Windows) + ggml_time_init(); + + // initialize GELU, SILU and EXP F32 tables + { + const uint64_t t_start = ggml_time_us(); UNUSED(t_start); + + ggml_fp16_t ii; + for (int i = 0; i < (1 << 16); ++i) { + uint16_t ui = i; + memcpy(&ii, &ui, sizeof(ii)); + const float f = table_f32_f16[i] = GGML_COMPUTE_FP16_TO_FP32(ii); + table_gelu_f16[i] = GGML_FP32_TO_FP16(ggml_gelu_f32(f)); + table_silu_f16[i] = GGML_FP32_TO_FP16(ggml_silu_f32(f)); + table_exp_f16[i] = GGML_FP32_TO_FP16(expf(f)); + } + + const uint64_t t_end = ggml_time_us(); UNUSED(t_end); + + GGML_PRINT_DEBUG("%s: GELU, SILU and EXP tables initialized in %f ms\n", __func__, (t_end - t_start)/1000.0f); + } + + // initialize g_state + { + const uint64_t t_start = ggml_time_us(); UNUSED(t_start); + + g_state = (struct ggml_state) { + /*.contexts =*/ { { 0 } }, + }; + + for (int i = 0; i < GGML_MAX_CONTEXTS; ++i) { + g_state.contexts[i].used = false; + } + + const uint64_t t_end = ggml_time_us(); UNUSED(t_end); + + GGML_PRINT_DEBUG("%s: g_state initialized in %f ms\n", __func__, (t_end - t_start)/1000.0f); + } + +#if defined(GGML_USE_CUBLAS) + ggml_init_cublas(); +#elif defined(GGML_USE_CLBLAST) + ggml_cl_init(); +#endif + + is_first_call = false; + } + + // find non-used context in g_state + struct ggml_context * ctx = NULL; + + for (int i = 0; i < GGML_MAX_CONTEXTS; i++) { + if (!g_state.contexts[i].used) { + g_state.contexts[i].used = true; + ctx = &g_state.contexts[i].context; + + GGML_PRINT_DEBUG("%s: found unused context %d\n", __func__, i); + break; + } + } + + if (ctx == NULL) { + GGML_PRINT_DEBUG("%s: no unused context found\n", __func__); + + ggml_critical_section_end(); + + return NULL; + } + + const size_t mem_size = (params.mem_size + GGML_MEM_ALIGN - 1) & ~(GGML_MEM_ALIGN - 1); + + *ctx = (struct ggml_context) { + /*.mem_size =*/ mem_size, + /*.mem_buffer =*/ params.mem_buffer ? params.mem_buffer : GGML_ALIGNED_MALLOC(mem_size), + /*.mem_buffer_owned =*/ params.mem_buffer ? false : true, + /*.no_alloc =*/ params.no_alloc, + /*.n_objects =*/ 0, + /*.objects_begin =*/ NULL, + /*.objects_end =*/ NULL, + /*.scratch =*/ { 0, 0, NULL, }, + /*.scratch_save =*/ { 0, 0, NULL, }, + }; + + GGML_ASSERT(ctx->mem_buffer != NULL); + + ggml_assert_aligned(ctx->mem_buffer); + + GGML_PRINT_DEBUG("%s: context initialized\n", __func__); + + ggml_critical_section_end(); + + return ctx; +} + +void ggml_free(struct ggml_context * ctx) { + // make this function thread safe + ggml_critical_section_start(); + + bool found = false; + + for (int i = 0; i < GGML_MAX_CONTEXTS; i++) { + if (&g_state.contexts[i].context == ctx) { + g_state.contexts[i].used = false; + + GGML_PRINT_DEBUG("%s: context %d with %d objects has been freed. memory used = %zu\n", + __func__, i, ctx->n_objects, ctx->objects_end->offs + ctx->objects_end->size); + + if (ctx->mem_buffer_owned) { + GGML_ALIGNED_FREE(ctx->mem_buffer); + } + + found = true; + break; + } + } + + if (!found) { + GGML_PRINT_DEBUG("%s: context not found\n", __func__); + } + + ggml_critical_section_end(); +} + +size_t ggml_used_mem(const struct ggml_context * ctx) { + return ctx->objects_end == NULL ? 0 : ctx->objects_end->offs + ctx->objects_end->size; +} + +size_t ggml_set_scratch(struct ggml_context * ctx, struct ggml_scratch scratch) { + const size_t result = ctx->scratch.data ? ctx->scratch.offs : 0; + + ctx->scratch = scratch; + + return result; +} + +// IMPORTANT: +// when creating "opt" tensors, always save and load the scratch buffer +// this is an error prone process, but it is necessary to support inplace +// operators when using scratch buffers +// TODO: implement a better way +void ggml_scratch_save(struct ggml_context * ctx) { + ctx->scratch_save = ctx->scratch; + ctx->scratch.data = NULL; +} + +void ggml_scratch_load(struct ggml_context * ctx) { + ctx->scratch = ctx->scratch_save; +} + +//////////////////////////////////////////////////////////////////////////////// + +struct ggml_tensor * ggml_new_tensor_impl( + struct ggml_context * ctx, + enum ggml_type type, + int n_dims, + const int64_t* ne, + void* data) { + // always insert objects at the end of the context's memory pool + struct ggml_object * obj_cur = ctx->objects_end; + + const size_t cur_offs = obj_cur == NULL ? 0 : obj_cur->offs; + const size_t cur_size = obj_cur == NULL ? 0 : obj_cur->size; + const size_t cur_end = cur_offs + cur_size; + + size_t size_needed = 0; + + if (data == NULL && !ctx->no_alloc) { + size_needed += GGML_TYPE_SIZE[type]*(ne[0]/GGML_BLCK_SIZE[type]); + for (int i = 1; i < n_dims; i++) { + size_needed *= ne[i]; + } + // align to GGML_MEM_ALIGN + size_needed = ((size_needed + GGML_MEM_ALIGN - 1)/GGML_MEM_ALIGN)*GGML_MEM_ALIGN; + } + + char * const mem_buffer = ctx->mem_buffer; + struct ggml_object * const obj_new = (struct ggml_object *)(mem_buffer + cur_end); + + if (ctx->scratch.data == NULL || data != NULL) { + size_needed += sizeof(struct ggml_tensor); + + if (cur_end + size_needed + GGML_OBJECT_SIZE > ctx->mem_size) { + GGML_PRINT("%s: not enough space in the context's memory pool (needed %zu, available %zu)\n", + __func__, cur_end + size_needed + GGML_OBJECT_SIZE, ctx->mem_size); + assert(false); + return NULL; + } + + *obj_new = (struct ggml_object) { + .offs = cur_end + GGML_OBJECT_SIZE, + .size = size_needed, + .next = NULL, + }; + } else { + if (ctx->scratch.offs + size_needed > ctx->scratch.size) { + GGML_PRINT("%s: not enough space in the scratch memory pool (needed %zu, available %zu)\n", + __func__, ctx->scratch.offs + size_needed, ctx->scratch.size); + assert(false); + return NULL; + } + + if (cur_end + sizeof(struct ggml_tensor) + GGML_OBJECT_SIZE > ctx->mem_size) { + GGML_PRINT("%s: not enough space in the context's memory pool (needed %zu, available %zu)\n", + __func__, cur_end + sizeof(struct ggml_tensor) + GGML_OBJECT_SIZE, ctx->mem_size); + assert(false); + return NULL; + } + + data = (char * const) ctx->scratch.data + ctx->scratch.offs; + + *obj_new = (struct ggml_object) { + .offs = cur_end + GGML_OBJECT_SIZE, + .size = sizeof(struct ggml_tensor), + .next = NULL, + }; + + //printf("scratch offs = %zu, size_needed = %zu\n", ctx->scratch.offs, size_needed); + + ctx->scratch.offs += size_needed; + } + + if (obj_cur != NULL) { + obj_cur->next = obj_new; + } else { + // this is the first object in this context + ctx->objects_begin = obj_new; + } + + ctx->objects_end = obj_new; + + //printf("%s: inserted new object at %zu, size = %zu\n", __func__, cur_end, obj_new->size); + + struct ggml_tensor * const result = (struct ggml_tensor *)(mem_buffer + obj_new->offs); + + ggml_assert_aligned(result); + + *result = (struct ggml_tensor) { + /*.type =*/ type, + /*.backend =*/ GGML_BACKEND_CPU, + /*.n_dims =*/ n_dims, + /*.ne =*/ { 1, 1, 1, 1 }, + /*.nb =*/ { 0, 0, 0, 0 }, + /*.op =*/ GGML_OP_NONE, + /*.is_param =*/ false, + /*.grad =*/ NULL, + /*.src0 =*/ NULL, + /*.src1 =*/ NULL, + /*.opt =*/ { NULL }, + /*.n_tasks =*/ 0, + /*.perf_runs =*/ 0, + /*.perf_cycles =*/ 0, + /*.perf_time_us =*/ 0, + /*.data =*/ (data == NULL && !ctx->no_alloc) ? (void *)(result + 1) : data, + /*.name =*/ { 0 }, + /*.pad =*/ { 0 }, + }; + + // TODO: this should not be needed as long as we don't rely on aligned SIMD loads + //ggml_assert_aligned(result->data); + + for (int i = 0; i < n_dims; i++) { + result->ne[i] = ne[i]; + } + + result->nb[0] = GGML_TYPE_SIZE[type]; + result->nb[1] = result->nb[0]*(result->ne[0]/GGML_BLCK_SIZE[type]); + for (int i = 2; i < GGML_MAX_DIMS; i++) { + result->nb[i] = result->nb[i - 1]*result->ne[i - 1]; + } + + ctx->n_objects++; + + return result; +} + +struct ggml_tensor * ggml_new_tensor( + struct ggml_context * ctx, + enum ggml_type type, + int n_dims, + const int64_t * ne) { + return ggml_new_tensor_impl(ctx, type, n_dims, ne, NULL); +} + +struct ggml_tensor * ggml_new_tensor_1d( + struct ggml_context * ctx, + enum ggml_type type, + int64_t ne0) { + return ggml_new_tensor(ctx, type, 1, &ne0); +} + +struct ggml_tensor * ggml_new_tensor_2d( + struct ggml_context * ctx, + enum ggml_type type, + int64_t ne0, + int64_t ne1) { + const int64_t ne[2] = { ne0, ne1 }; + return ggml_new_tensor(ctx, type, 2, ne); +} + +struct ggml_tensor * ggml_new_tensor_3d( + struct ggml_context * ctx, + enum ggml_type type, + int64_t ne0, + int64_t ne1, + int64_t ne2) { + const int64_t ne[3] = { ne0, ne1, ne2 }; + return ggml_new_tensor(ctx, type, 3, ne); +} + +struct ggml_tensor * ggml_new_tensor_4d( + struct ggml_context * ctx, + enum ggml_type type, + int64_t ne0, + int64_t ne1, + int64_t ne2, + int64_t ne3) { + const int64_t ne[4] = { ne0, ne1, ne2, ne3 }; + return ggml_new_tensor(ctx, type, 4, ne); +} + +struct ggml_tensor * ggml_new_i32(struct ggml_context * ctx, int32_t value) { + ggml_scratch_save(ctx); + + struct ggml_tensor * result = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 1); + + ggml_scratch_load(ctx); + + ggml_set_i32(result, value); + + return result; +} + +struct ggml_tensor * ggml_new_f32(struct ggml_context * ctx, float value) { + ggml_scratch_save(ctx); + + struct ggml_tensor * result = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1); + + ggml_scratch_load(ctx); + + ggml_set_f32(result, value); + + return result; +} + +struct ggml_tensor * ggml_dup_tensor(struct ggml_context * ctx, const struct ggml_tensor * src) { + return ggml_new_tensor_impl(ctx, src->type, src->n_dims, src->ne, NULL); +} + +struct ggml_tensor * ggml_set_zero(struct ggml_tensor * tensor) { + memset(tensor->data, 0, ggml_nbytes(tensor)); + return tensor; +} + +struct ggml_tensor * ggml_set_i32 (struct ggml_tensor * tensor, int32_t value) { + const int n = ggml_nrows(tensor); + const int nc = tensor->ne[0]; + const size_t n1 = tensor->nb[1]; + + char * const data = tensor->data; + + switch (tensor->type) { + case GGML_TYPE_I8: + { + assert(tensor->nb[0] == sizeof(int8_t)); + for (int i = 0; i < n; i++) { + ggml_vec_set_i8(nc, (int8_t *)(data + i*n1), value); + } + } break; + case GGML_TYPE_I16: + { + assert(tensor->nb[0] == sizeof(int16_t)); + for (int i = 0; i < n; i++) { + ggml_vec_set_i16(nc, (int16_t *)(data + i*n1), value); + } + } break; + case GGML_TYPE_I32: + { + assert(tensor->nb[0] == sizeof(int32_t)); + for (int i = 0; i < n; i++) { + ggml_vec_set_i32(nc, (int32_t *)(data + i*n1), value); + } + } break; + case GGML_TYPE_F16: + { + assert(tensor->nb[0] == sizeof(ggml_fp16_t)); + for (int i = 0; i < n; i++) { + ggml_vec_set_f16(nc, (ggml_fp16_t *)(data + i*n1), value); + } + } break; + case GGML_TYPE_F32: + { + assert(tensor->nb[0] == sizeof(float)); + for (int i = 0; i < n; i++) { + ggml_vec_set_f32(nc, (float *)(data + i*n1), value); + } + } break; + default: + { + GGML_ASSERT(false); + } break; + } + + return tensor; +} + +struct ggml_tensor * ggml_set_f32(struct ggml_tensor * tensor, float value) { + const int n = ggml_nrows(tensor); + const int nc = tensor->ne[0]; + const size_t n1 = tensor->nb[1]; + + char * const data = tensor->data; + + switch (tensor->type) { + case GGML_TYPE_I8: + { + assert(tensor->nb[0] == sizeof(int8_t)); + for (int i = 0; i < n; i++) { + ggml_vec_set_i8(nc, (int8_t *)(data + i*n1), value); + } + } break; + case GGML_TYPE_I16: + { + assert(tensor->nb[0] == sizeof(int16_t)); + for (int i = 0; i < n; i++) { + ggml_vec_set_i16(nc, (int16_t *)(data + i*n1), value); + } + } break; + case GGML_TYPE_I32: + { + assert(tensor->nb[0] == sizeof(int32_t)); + for (int i = 0; i < n; i++) { + ggml_vec_set_i32(nc, (int32_t *)(data + i*n1), value); + } + } break; + case GGML_TYPE_F16: + { + assert(tensor->nb[0] == sizeof(ggml_fp16_t)); + for (int i = 0; i < n; i++) { + ggml_vec_set_f16(nc, (ggml_fp16_t *)(data + i*n1), value); + } + } break; + case GGML_TYPE_F32: + { + assert(tensor->nb[0] == sizeof(float)); + for (int i = 0; i < n; i++) { + ggml_vec_set_f32(nc, (float *)(data + i*n1), value); + } + } break; + default: + { + GGML_ASSERT(false); + } break; + } + + return tensor; +} + +int32_t ggml_get_i32_1d(const struct ggml_tensor * tensor, int i) { + switch (tensor->type) { + case GGML_TYPE_I8: + { + GGML_ASSERT(tensor->nb[0] == sizeof(int8_t)); + return ((int8_t *)(tensor->data))[i]; + } break; + case GGML_TYPE_I16: + { + GGML_ASSERT(tensor->nb[0] == sizeof(int16_t)); + return ((int16_t *)(tensor->data))[i]; + } break; + case GGML_TYPE_I32: + { + GGML_ASSERT(tensor->nb[0] == sizeof(int32_t)); + return ((int32_t *)(tensor->data))[i]; + } break; + case GGML_TYPE_F16: + { + GGML_ASSERT(tensor->nb[0] == sizeof(ggml_fp16_t)); + return GGML_FP16_TO_FP32(((ggml_fp16_t *)(tensor->data))[i]); + } break; + case GGML_TYPE_F32: + { + GGML_ASSERT(tensor->nb[0] == sizeof(float)); + return ((float *)(tensor->data))[i]; + } break; + default: + { + GGML_ASSERT(false); + } break; + } + + return 0.0f; +} + +void ggml_set_i32_1d(const struct ggml_tensor * tensor, int i, int32_t value) { + switch (tensor->type) { + case GGML_TYPE_I8: + { + GGML_ASSERT(tensor->nb[0] == sizeof(int8_t)); + ((int8_t *)(tensor->data))[i] = value; + } break; + case GGML_TYPE_I16: + { + GGML_ASSERT(tensor->nb[0] == sizeof(int16_t)); + ((int16_t *)(tensor->data))[i] = value; + } break; + case GGML_TYPE_I32: + { + GGML_ASSERT(tensor->nb[0] == sizeof(int32_t)); + ((int32_t *)(tensor->data))[i] = value; + } break; + case GGML_TYPE_F16: + { + GGML_ASSERT(tensor->nb[0] == sizeof(ggml_fp16_t)); + ((ggml_fp16_t *)(tensor->data))[i] = GGML_FP32_TO_FP16(value); + } break; + case GGML_TYPE_F32: + { + GGML_ASSERT(tensor->nb[0] == sizeof(float)); + ((float *)(tensor->data))[i] = value; + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +float ggml_get_f32_1d(const struct ggml_tensor * tensor, int i) { + switch (tensor->type) { + case GGML_TYPE_I8: + { + GGML_ASSERT(tensor->nb[0] == sizeof(int8_t)); + return ((int8_t *)(tensor->data))[i]; + } break; + case GGML_TYPE_I16: + { + GGML_ASSERT(tensor->nb[0] == sizeof(int16_t)); + return ((int16_t *)(tensor->data))[i]; + } break; + case GGML_TYPE_I32: + { + GGML_ASSERT(tensor->nb[0] == sizeof(int32_t)); + return ((int32_t *)(tensor->data))[i]; + } break; + case GGML_TYPE_F16: + { + GGML_ASSERT(tensor->nb[0] == sizeof(ggml_fp16_t)); + return GGML_FP16_TO_FP32(((ggml_fp16_t *)(tensor->data))[i]); + } break; + case GGML_TYPE_F32: + { + GGML_ASSERT(tensor->nb[0] == sizeof(float)); + return ((float *)(tensor->data))[i]; + } break; + default: + { + GGML_ASSERT(false); + } break; + } + + return 0.0f; +} + +void ggml_set_f32_1d(const struct ggml_tensor * tensor, int i, float value) { + switch (tensor->type) { + case GGML_TYPE_I8: + { + GGML_ASSERT(tensor->nb[0] == sizeof(int8_t)); + ((int8_t *)(tensor->data))[i] = value; + } break; + case GGML_TYPE_I16: + { + GGML_ASSERT(tensor->nb[0] == sizeof(int16_t)); + ((int16_t *)(tensor->data))[i] = value; + } break; + case GGML_TYPE_I32: + { + GGML_ASSERT(tensor->nb[0] == sizeof(int32_t)); + ((int32_t *)(tensor->data))[i] = value; + } break; + case GGML_TYPE_F16: + { + GGML_ASSERT(tensor->nb[0] == sizeof(ggml_fp16_t)); + ((ggml_fp16_t *)(tensor->data))[i] = GGML_FP32_TO_FP16(value); + } break; + case GGML_TYPE_F32: + { + GGML_ASSERT(tensor->nb[0] == sizeof(float)); + ((float *)(tensor->data))[i] = value; + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +void * ggml_get_data(const struct ggml_tensor * tensor) { + return tensor->data; +} + +float * ggml_get_data_f32(const struct ggml_tensor * tensor) { + assert(tensor->type == GGML_TYPE_F32); + return (float *)(tensor->data); +} + +const char * ggml_get_name(const struct ggml_tensor * tensor) { + return tensor->name; +} + +void ggml_set_name(struct ggml_tensor * tensor, const char * name) { + strncpy(tensor->name, name, sizeof(tensor->name)); + tensor->name[sizeof(tensor->name) - 1] = '\0'; +} + +struct ggml_tensor * ggml_view_tensor( + struct ggml_context * ctx, + const struct ggml_tensor * src) { + struct ggml_tensor * result = ggml_new_tensor_impl(ctx, src->type, src->n_dims, src->ne, src->data); + + result->nb[0] = src->nb[0]; + result->nb[1] = src->nb[1]; + result->nb[2] = src->nb[2]; + result->nb[3] = src->nb[3]; + + return result; +} + +//////////////////////////////////////////////////////////////////////////////// + +// ggml_dup + +struct ggml_tensor * ggml_dup_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + bool inplace) { + bool is_node = false; + + if (!inplace && (a->grad)) { + is_node = true; + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + result->op = GGML_OP_DUP; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; + + return result; +} + +struct ggml_tensor * ggml_dup( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_dup_impl(ctx, a, false); +} + +struct ggml_tensor * ggml_dup_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_dup_impl(ctx, a, true); +} + +// ggml_add + +struct ggml_tensor * ggml_add_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + bool inplace) { + GGML_ASSERT(ggml_are_same_shape(a, b)); + + bool is_node = false; + + if (!inplace && (a->grad || b->grad)) { + is_node = true; + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + result->op = GGML_OP_ADD; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = b; + + return result; +} + +struct ggml_tensor * ggml_add( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b) { + return ggml_add_impl(ctx, a, b, false); +} + +struct ggml_tensor * ggml_add_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b) { + return ggml_add_impl(ctx, a, b, true); +} + +// ggml_add1 + +struct ggml_tensor * ggml_add1_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + bool inplace) { + GGML_ASSERT(ggml_is_scalar(b)); + GGML_ASSERT(ggml_is_padded_1d(a)); + + bool is_node = false; + + if (!inplace && (a->grad || b->grad)) { + is_node = true; + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + result->op = GGML_OP_ADD1; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = b; + + return result; +} + +struct ggml_tensor * ggml_add1( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b) { + return ggml_add1_impl(ctx, a, b, false); +} + +struct ggml_tensor * ggml_add1_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b) { + return ggml_add1_impl(ctx, a, b, true); +} + +// ggml_acc + +struct ggml_tensor * ggml_acc_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t nb2, + size_t nb3, + size_t offset, + bool inplace) { + GGML_ASSERT(ggml_nelements(b) <= ggml_nelements(a)); + GGML_ASSERT(ggml_is_contiguous(a)); + GGML_ASSERT(a->type == GGML_TYPE_F32); + GGML_ASSERT(b->type == GGML_TYPE_F32); + + bool is_node = false; + + if (!inplace && (a->grad || b->grad)) { + is_node = true; + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + ggml_scratch_save(ctx); + + struct ggml_tensor * c = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 5); + + ((int32_t *) c->data)[0] = nb1; + ((int32_t *) c->data)[1] = nb2; + ((int32_t *) c->data)[2] = nb3; + ((int32_t *) c->data)[3] = offset; + ((int32_t *) c->data)[4] = inplace ? 1 : 0; + + ggml_scratch_load(ctx); + + result->op = GGML_OP_ACC; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = b; + result->opt[0] = c; + + return result; +} + +struct ggml_tensor * ggml_acc( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t nb2, + size_t nb3, + size_t offset) { + return ggml_acc_impl(ctx, a, b, nb1, nb2, nb3, offset, false); +} + +struct ggml_tensor * ggml_acc_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t nb2, + size_t nb3, + size_t offset) { + return ggml_acc_impl(ctx, a, b, nb1, nb2, nb3, offset, true); +} + +// ggml_sub + +struct ggml_tensor * ggml_sub_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + bool inplace) { + GGML_ASSERT(ggml_are_same_shape(a, b)); + + bool is_node = false; + + if (!inplace && (a->grad || b->grad)) { + is_node = true; + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + result->op = GGML_OP_SUB; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = b; + + return result; +} + +struct ggml_tensor * ggml_sub( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b) { + return ggml_sub_impl(ctx, a, b, false); +} + +struct ggml_tensor * ggml_sub_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b) { + return ggml_sub_impl(ctx, a, b, true); +} + +// ggml_mul + +struct ggml_tensor * ggml_mul_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + bool inplace) { + // TODO: support less-strict constraint + // GGML_ASSERT(ggml_can_repeat(b, a)); + GGML_ASSERT(ggml_can_repeat_rows(b, a)); + + bool is_node = false; + + if (!inplace && (a->grad || b->grad)) { + // TODO: support backward pass for broadcasting + GGML_ASSERT(ggml_are_same_shape(a, b)); + is_node = true; + } + + if (inplace) { + GGML_ASSERT(is_node == false); + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + result->op = GGML_OP_MUL; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = b; + + return result; +} + +struct ggml_tensor * ggml_mul( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b) { + return ggml_mul_impl(ctx, a, b, false); +} + +struct ggml_tensor * ggml_mul_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b) { + return ggml_mul_impl(ctx, a, b, true); +} + +// ggml_div + +struct ggml_tensor * ggml_div_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + bool inplace) { + GGML_ASSERT(ggml_are_same_shape(a, b)); + + bool is_node = false; + + if (!inplace && (a->grad || b->grad)) { + is_node = true; + } + + if (inplace) { + GGML_ASSERT(is_node == false); + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + result->op = GGML_OP_DIV; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = b; + + return result; +} + +struct ggml_tensor * ggml_div( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b) { + return ggml_div_impl(ctx, a, b, false); +} + +struct ggml_tensor * ggml_div_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b) { + return ggml_div_impl(ctx, a, b, true); +} + +// ggml_sqr + +struct ggml_tensor * ggml_sqr_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + bool inplace) { + bool is_node = false; + + if (!inplace && (a->grad)) { + is_node = true; + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + result->op = GGML_OP_SQR; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; + + return result; +} + +struct ggml_tensor * ggml_sqr( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_sqr_impl(ctx, a, false); +} + +struct ggml_tensor * ggml_sqr_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_sqr_impl(ctx, a, true); +} + +// ggml_sqrt + +struct ggml_tensor * ggml_sqrt_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + bool inplace) { + bool is_node = false; + + if (!inplace && (a->grad)) { + is_node = true; + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + result->op = GGML_OP_SQRT; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; + + return result; +} + +struct ggml_tensor * ggml_sqrt( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_sqrt_impl(ctx, a, false); +} + +struct ggml_tensor * ggml_sqrt_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_sqrt_impl(ctx, a, true); +} + + +// ggml_log + +struct ggml_tensor * ggml_log_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + bool inplace) { + bool is_node = false; + + if (!inplace && (a->grad)) { + is_node = true; + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + result->op = GGML_OP_LOG; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; + + return result; +} + +struct ggml_tensor * ggml_log( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_log_impl(ctx, a, false); +} + +struct ggml_tensor * ggml_log_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_log_impl(ctx, a, true); +} + +// ggml_sum + +struct ggml_tensor * ggml_sum( + struct ggml_context * ctx, + struct ggml_tensor * a) { + bool is_node = false; + + if (a->grad) { + is_node = true; + } + + struct ggml_tensor * result = ggml_new_tensor_1d(ctx, a->type, 1); + + result->op = GGML_OP_SUM; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; + + return result; +} + + +// ggml_sum_rows + +struct ggml_tensor * ggml_sum_rows( + struct ggml_context * ctx, + struct ggml_tensor * a) { + bool is_node = false; + + if (a->grad) { + is_node = true; + } + + int64_t ne[4] = {1,1,1,1}; + for (int i=1; in_dims; ++i) { + ne[i] = a->ne[i]; + } + + struct ggml_tensor * result = ggml_new_tensor(ctx, a->type, a->n_dims, ne); + + result->op = GGML_OP_SUM_ROWS; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; + + return result; +} + +// ggml_mean + +struct ggml_tensor * ggml_mean( + struct ggml_context * ctx, + struct ggml_tensor * a) { + bool is_node = false; + + if (a->grad) { + GGML_ASSERT(false); // TODO: implement + is_node = true; + } + + int64_t ne[GGML_MAX_DIMS] = { 1, a->ne[1], a->ne[2], a->ne[3] }; + struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, a->n_dims, ne); + + result->op = GGML_OP_MEAN; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; + + return result; +} + +// ggml_repeat + +struct ggml_tensor * ggml_repeat( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b) { + GGML_ASSERT(ggml_can_repeat(a, b)); + + bool is_node = false; + + if (a->grad) { + is_node = true; + } + + if (ggml_are_same_shape(a, b) && !is_node) { + return a; + } + + struct ggml_tensor * result = ggml_new_tensor(ctx, a->type, b->n_dims, b->ne); + + result->op = GGML_OP_REPEAT; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = b; + + return result; +} + +// ggml_abs + +struct ggml_tensor * ggml_abs_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + bool inplace) { + bool is_node = false; + + if (!inplace && (a->grad)) { + is_node = true; + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + result->op = GGML_OP_ABS; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; + + return result; +} + +struct ggml_tensor * ggml_abs( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_abs_impl(ctx, a, false); +} + +struct ggml_tensor * ggml_abs_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_abs_impl(ctx, a, true); +} + + +// ggml_sgn + +struct ggml_tensor * ggml_sgn_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + bool inplace) { + bool is_node = false; + + if (!inplace && (a->grad)) { + is_node = true; + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + result->op = GGML_OP_SGN; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; + + return result; +} + +struct ggml_tensor * ggml_sgn( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_sgn_impl(ctx, a, false); +} + +struct ggml_tensor * ggml_sgn_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_sgn_impl(ctx, a, true); +} + +// ggml_neg + +struct ggml_tensor * ggml_neg_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + bool inplace) { + bool is_node = false; + + if (!inplace && (a->grad)) { + is_node = true; + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + result->op = GGML_OP_NEG; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; + + return result; +} + +struct ggml_tensor * ggml_neg( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_neg_impl(ctx, a, false); +} + +struct ggml_tensor * ggml_neg_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_neg_impl(ctx, a, true); +} + +// ggml_step + +struct ggml_tensor * ggml_step_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + bool inplace) { + bool is_node = false; + + if (!inplace && (a->grad)) { + is_node = true; + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + result->op = GGML_OP_STEP; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; + + return result; +} + +struct ggml_tensor * ggml_step( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_step_impl(ctx, a, false); +} + +struct ggml_tensor * ggml_step_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_step_impl(ctx, a, true); +} + +// ggml_relu + +struct ggml_tensor * ggml_relu_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + bool inplace) { + bool is_node = false; + + if (!inplace && (a->grad)) { + is_node = true; + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + result->op = GGML_OP_RELU; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; + + return result; +} + +struct ggml_tensor * ggml_relu( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_relu_impl(ctx, a, false); +} + +struct ggml_tensor * ggml_relu_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_relu_impl(ctx, a, true); +} + +// ggml_gelu + +struct ggml_tensor * ggml_gelu_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + bool inplace) { + bool is_node = false; + + if (!inplace && (a->grad)) { + is_node = true; + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + result->op = GGML_OP_GELU; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; + + return result; +} + +struct ggml_tensor * ggml_gelu( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_gelu_impl(ctx, a, false); +} + +struct ggml_tensor * ggml_gelu_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_gelu_impl(ctx, a, true); +} + +// ggml_silu + +struct ggml_tensor * ggml_silu_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + bool inplace) { + bool is_node = false; + + if (!inplace && (a->grad)) { + is_node = true; + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + result->op = GGML_OP_SILU; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; + + return result; +} + +struct ggml_tensor * ggml_silu( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_silu_impl(ctx, a, false); +} + +struct ggml_tensor * ggml_silu_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_silu_impl(ctx, a, true); +} + +// ggml_silu_back + +struct ggml_tensor * ggml_silu_back( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b) { + bool is_node = false; + + if (a->grad || b->grad) { + // TODO: implement backward + is_node = true; + } + + struct ggml_tensor * result = ggml_dup_tensor(ctx, a); + + result->op = GGML_OP_SILU_BACK; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = b; + + return result; +} + +// ggml_norm + +struct ggml_tensor * ggml_norm_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + bool inplace) { + bool is_node = false; + + if (!inplace && (a->grad)) { + GGML_ASSERT(false); // TODO: implement backward + is_node = true; + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + result->op = GGML_OP_NORM; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; // TODO: maybe store epsilon here? + + return result; +} + +struct ggml_tensor * ggml_norm( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_norm_impl(ctx, a, false); +} + +struct ggml_tensor * ggml_norm_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_norm_impl(ctx, a, true); +} + +struct ggml_tensor * ggml_rms_norm_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + bool inplace) { + bool is_node = false; + + if (!inplace && (a->grad)) { + is_node = true; + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + result->op = GGML_OP_RMS_NORM; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; // TODO: maybe store epsilon here? + + return result; +} + +struct ggml_tensor * ggml_rms_norm( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_rms_norm_impl(ctx, a, false); +} + +struct ggml_tensor * ggml_rms_norm_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_rms_norm_impl(ctx, a, true); +} + +struct ggml_tensor * ggml_rms_norm_back( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b) { + bool is_node = false; + + if (a->grad) { + // TODO: implement backward + is_node = true; + } + + struct ggml_tensor * result = ggml_dup_tensor(ctx, a); + + result->op = GGML_OP_RMS_NORM_BACK; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = b; + + return result; +} + + +// ggml_mul_mat + +struct ggml_tensor * ggml_mul_mat( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b) { + GGML_ASSERT(ggml_can_mul_mat(a, b)); + GGML_ASSERT(!ggml_is_transposed(a)); + + bool is_node = false; + + if (a->grad || b->grad) { + is_node = true; + } + + const int64_t ne[4] = { a->ne[1], b->ne[1], a->ne[2], b->ne[3] }; + struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, MIN(a->n_dims, b->n_dims), ne); + + result->op = GGML_OP_MUL_MAT; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = b; + + return result; +} + +// ggml_scale + +struct ggml_tensor * ggml_scale_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + bool inplace) { + GGML_ASSERT(ggml_is_scalar(b)); + GGML_ASSERT(ggml_is_padded_1d(a)); + + bool is_node = false; + + if (!inplace && (a->grad || b->grad)) { + is_node = true; + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + result->op = GGML_OP_SCALE; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = b; + + return result; +} + +struct ggml_tensor * ggml_scale( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b) { + return ggml_scale_impl(ctx, a, b, false); +} + +struct ggml_tensor * ggml_scale_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b) { + return ggml_scale_impl(ctx, a, b, true); +} + +// ggml_set + +struct ggml_tensor * ggml_set_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t nb2, + size_t nb3, + size_t offset, + bool inplace) { + GGML_ASSERT(ggml_nelements(a) >= ggml_nelements(b)); + + bool is_node = false; + + if (!inplace && (a->grad || b->grad)) { + is_node = true; + } + + // make a view of the destination + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + ggml_scratch_save(ctx); + + struct ggml_tensor * c = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 5); + + (( int32_t * ) c->data)[0] = nb1; + (( int32_t * ) c->data)[1] = nb2; + (( int32_t * ) c->data)[2] = nb3; + (( int32_t * ) c->data)[3] = offset; + (( int32_t * ) c->data)[4] = inplace ? 1 : 0; + + ggml_scratch_load(ctx); + + result->op = GGML_OP_SET; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = b; + result->opt[0] = c; + + return result; +} + +struct ggml_tensor * ggml_set( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t nb2, + size_t nb3, + size_t offset) { + return ggml_set_impl(ctx, a, b, nb1, nb2, nb3, offset, false); +} + +struct ggml_tensor * ggml_set_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t nb2, + size_t nb3, + size_t offset) { + return ggml_set_impl(ctx, a, b, nb1, nb2, nb3, offset, true); +} + +struct ggml_tensor * ggml_set_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t offset) { + return ggml_set_impl(ctx, a, b, a->nb[1], a->nb[2], a->nb[3], offset, false); +} + +struct ggml_tensor * ggml_set_1d_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t offset) { + return ggml_set_impl(ctx, a, b, a->nb[1], a->nb[2], a->nb[3], offset, true); +} + +struct ggml_tensor * ggml_set_2d( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t offset) { + return ggml_set_impl(ctx, a, b, nb1, a->nb[2], a->nb[3], offset, false); +} + +struct ggml_tensor * ggml_set_2d_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + size_t nb1, + size_t offset) { + return ggml_set_impl(ctx, a, b, nb1, a->nb[2], a->nb[3], offset, false); +} + + +// ggml_cpy + +struct ggml_tensor * ggml_cpy_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + bool inplace) { + GGML_ASSERT(ggml_nelements(a) == ggml_nelements(b)); + + bool is_node = false; + + if (!inplace && (a->grad || b->grad)) { + is_node = true; + } + + // make a view of the destination + struct ggml_tensor * result = ggml_view_tensor(ctx, b); + + result->op = GGML_OP_CPY; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = b; + + return result; +} + +struct ggml_tensor * ggml_cpy( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b) { + return ggml_cpy_impl(ctx, a, b, false); +} + +struct ggml_tensor * ggml_cpy_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b) { + return ggml_cpy_impl(ctx, a, b, true); +} + +// ggml_cont + +struct ggml_tensor * ggml_cont_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + bool inplace) { + bool is_node = false; + + if (!inplace && a->grad) { + is_node = true; + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + result->op = GGML_OP_CONT; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; + + return result; +} + +struct ggml_tensor * ggml_cont( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_cont_impl(ctx, a, false); +} + +struct ggml_tensor * ggml_cont_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_cont_impl(ctx, a, true); +} + +// ggml_reshape + +struct ggml_tensor * ggml_reshape( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b) { + GGML_ASSERT(ggml_is_contiguous(a)); + GGML_ASSERT(ggml_is_contiguous(b)); + GGML_ASSERT(ggml_nelements(a) == ggml_nelements(b)); + + bool is_node = false; + + if (a->grad) { + is_node = true; + } + + if (b->grad) { + // gradient propagation is not supported + //GGML_ASSERT(false); + } + + struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, b->n_dims, b->ne, a->data); + + result->op = GGML_OP_RESHAPE; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; + + return result; +} + +struct ggml_tensor * ggml_reshape_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0) { + GGML_ASSERT(ggml_is_contiguous(a)); + GGML_ASSERT(ggml_nelements(a) == ne0); + + bool is_node = false; + + if (a->grad) { + is_node = true; + } + + const int64_t ne[1] = { ne0 }; + struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 1, ne, a->data); + + result->op = GGML_OP_RESHAPE; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; + + return result; +} + +struct ggml_tensor * ggml_reshape_2d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1) { + GGML_ASSERT(ggml_is_contiguous(a)); + GGML_ASSERT(ggml_nelements(a) == ne0*ne1); + + bool is_node = false; + + if (a->grad) { + is_node = true; + } + + const int64_t ne[2] = { ne0, ne1 }; + struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 2, ne, a->data); + + result->op = GGML_OP_RESHAPE; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; + + return result; +} + +struct ggml_tensor * ggml_reshape_3d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2) { + GGML_ASSERT(ggml_is_contiguous(a)); + GGML_ASSERT(ggml_nelements(a) == ne0*ne1*ne2); + + bool is_node = false; + + if (a->grad) { + is_node = true; + } + + const int64_t ne[3] = { ne0, ne1, ne2 }; + struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 3, ne, a->data); + + result->op = GGML_OP_RESHAPE; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; + + return result; +} + + +struct ggml_tensor * ggml_reshape_4d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2, + int64_t ne3) { + GGML_ASSERT(ggml_is_contiguous(a)); + GGML_ASSERT(ggml_nelements(a) == ne0*ne1*ne2*ne3); + + bool is_node = false; + + if (a->grad) { + is_node = true; + } + + const int64_t ne[4] = { ne0, ne1, ne2, ne3 }; + struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 4, ne, a->data); + + result->op = GGML_OP_RESHAPE; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; + + return result; +} + +// ggml_view_1d + +struct ggml_tensor * ggml_view_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + size_t offset) { + + bool is_node = false; + + if (a->grad) { + is_node = true; + } + + struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 1, &ne0, (char *) a->data + offset); + + result->op = GGML_OP_VIEW; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; + + if (is_node) { + memcpy(result->padding, &offset, sizeof(offset)); + } + + return result; +} + +// ggml_view_2d + +struct ggml_tensor * ggml_view_2d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + size_t nb1, + size_t offset) { + + bool is_node = false; + + if (a->grad) { + is_node = true; + } + + const int64_t ne[GGML_MAX_DIMS] = { ne0, ne1, 1, 1 }; + + struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 2, ne, (char *) a->data + offset); + + result->nb[1] = nb1; + result->nb[2] = result->nb[1]*ne1; + result->nb[3] = result->nb[2]; + + result->op = GGML_OP_VIEW; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; + + if (is_node) { + memcpy(result->padding, &offset, sizeof(offset)); + } + + return result; +} + +// ggml_view_3d + +struct ggml_tensor * ggml_view_3d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2, + size_t nb1, + size_t nb2, + size_t offset) { + + bool is_node = false; + + if (a->grad) { + is_node = true; + } + + const int64_t ne[GGML_MAX_DIMS] = { ne0, ne1, ne2, 1 }; + + struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 3, ne, (char *) a->data + offset); + + result->nb[1] = nb1; + result->nb[2] = nb2; + result->nb[3] = result->nb[2]*ne2; + + result->op = GGML_OP_VIEW; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; + + if (is_node) { + memcpy(result->padding, &offset, sizeof(offset)); + } + + return result; +} + +// ggml_view_4d + +struct ggml_tensor * ggml_view_4d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + int64_t ne1, + int64_t ne2, + int64_t ne3, + size_t nb1, + size_t nb2, + size_t nb3, + size_t offset) { + + bool is_node = false; + + if (a->grad) { + is_node = true; + } + + const int64_t ne[GGML_MAX_DIMS] = { ne0, ne1, ne2, ne3 }; + + struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 4, ne, (char *) a->data + offset); + + result->nb[1] = nb1; + result->nb[2] = nb2; + result->nb[3] = nb3; + + result->op = GGML_OP_VIEW; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; + + if (is_node) { + memcpy(result->padding, &offset, sizeof(offset)); + } + + return result; +} + +// ggml_permute + +struct ggml_tensor * ggml_permute( + struct ggml_context * ctx, + struct ggml_tensor * a, + int axis0, + int axis1, + int axis2, + int axis3) { + GGML_ASSERT(axis0 >= 0 && axis0 < GGML_MAX_DIMS); + GGML_ASSERT(axis1 >= 0 && axis1 < GGML_MAX_DIMS); + GGML_ASSERT(axis2 >= 0 && axis2 < GGML_MAX_DIMS); + GGML_ASSERT(axis3 >= 0 && axis3 < GGML_MAX_DIMS); + + GGML_ASSERT(axis0 != axis1); + GGML_ASSERT(axis0 != axis2); + GGML_ASSERT(axis0 != axis3); + GGML_ASSERT(axis1 != axis2); + GGML_ASSERT(axis1 != axis3); + GGML_ASSERT(axis2 != axis3); + + bool is_node = false; + + if (a->grad) { + is_node = true; + } + + struct ggml_tensor * result = ggml_view_tensor(ctx, a); + + int ne[GGML_MAX_DIMS]; + int nb[GGML_MAX_DIMS]; + + ne[axis0] = a->ne[0]; + ne[axis1] = a->ne[1]; + ne[axis2] = a->ne[2]; + ne[axis3] = a->ne[3]; + + nb[axis0] = a->nb[0]; + nb[axis1] = a->nb[1]; + nb[axis2] = a->nb[2]; + nb[axis3] = a->nb[3]; + + result->ne[0] = ne[0]; + result->ne[1] = ne[1]; + result->ne[2] = ne[2]; + result->ne[3] = ne[3]; + + result->nb[0] = nb[0]; + result->nb[1] = nb[1]; + result->nb[2] = nb[2]; + result->nb[3] = nb[3]; + + result->op = GGML_OP_PERMUTE; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; + + if (is_node) { + result->padding[0] = axis0; + result->padding[1] = axis1; + result->padding[2] = axis2; + result->padding[3] = axis3; + } + + return result; +} + +// ggml_transpose + +struct ggml_tensor * ggml_transpose( + struct ggml_context * ctx, + struct ggml_tensor * a) { + bool is_node = false; + + if (a->grad) { + is_node = true; + } + + struct ggml_tensor * result = ggml_view_tensor(ctx, a); + + result->ne[0] = a->ne[1]; + result->ne[1] = a->ne[0]; + + result->nb[0] = a->nb[1]; + result->nb[1] = a->nb[0]; + + result->op = GGML_OP_TRANSPOSE; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; + + return result; +} + +// ggml_get_rows + +struct ggml_tensor * ggml_get_rows( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b) { + GGML_ASSERT(ggml_is_matrix(a) && ggml_is_vector(b) && b->type == GGML_TYPE_I32); + + bool is_node = false; + + if (a->grad || b->grad) { + is_node = true; + } + + // TODO: implement non F32 return + //struct ggml_tensor * result = ggml_new_tensor_2d(ctx, a->type, a->ne[0], b->ne[0]); + struct ggml_tensor * result = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, a->ne[0], b->ne[0]); + + result->op = GGML_OP_GET_ROWS; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = b; + + return result; +} + +// ggml_get_rows_back + +struct ggml_tensor * ggml_get_rows_back( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * c) { + GGML_ASSERT(ggml_is_matrix(a) && ggml_is_vector(b) && b->type == GGML_TYPE_I32); + GGML_ASSERT(ggml_is_matrix(c) && (a->ne[0] == c->ne[0])); + + bool is_node = false; + + if (a->grad || b->grad) { + is_node = true; + } + + // TODO: implement non F32 return + //struct ggml_tensor * result = ggml_new_tensor_2d(ctx, a->type, a->ne[0], b->ne[0]); + struct ggml_tensor * result = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, c->ne[0], c->ne[1]); + + result->op = GGML_OP_GET_ROWS_BACK; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = b; + result->opt[0] = c; + + return result; +} + +// ggml_diag + +struct ggml_tensor * ggml_diag( + struct ggml_context * ctx, + struct ggml_tensor * a) { + GGML_ASSERT(a->ne[1] == 1); + bool is_node = false; + + if (a->grad) { + is_node = true; + } + + const int64_t ne[4] = { a->ne[0], a->ne[0], a->ne[2], a->ne[3] }; + struct ggml_tensor * result = ggml_new_tensor(ctx, a->type, MAX(a->n_dims, 2), ne); + + result->op = GGML_OP_DIAG; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; + + return result; +} + + +// ggml_diag_mask_inf + +struct ggml_tensor * ggml_diag_mask_inf_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past, + bool inplace) { + bool is_node = false; + + if (a->grad) { + is_node = true; + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + ggml_scratch_save(ctx); + + struct ggml_tensor * b = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 2); + + ((int32_t *) b->data)[0] = n_past; + ((int32_t *) b->data)[1] = inplace ? 1 : 0; + + ggml_scratch_load(ctx); + + result->op = GGML_OP_DIAG_MASK_INF; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = b; + + return result; +} + +struct ggml_tensor * ggml_diag_mask_inf( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past) { + return ggml_diag_mask_inf_impl(ctx, a, n_past, false); +} + + +struct ggml_tensor * ggml_diag_mask_inf_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past) { + return ggml_diag_mask_inf_impl(ctx, a, n_past, true); +} + +// ggml_diag_mask_zero + +struct ggml_tensor * ggml_diag_mask_zero_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past, + bool inplace) { + bool is_node = false; + + if (a->grad) { + is_node = true; + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + ggml_scratch_save(ctx); + + struct ggml_tensor * b = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 2); + ggml_set_name(b, "n_past, inplace"); + + ((int32_t *) b->data)[0] = n_past; + ((int32_t *) b->data)[1] = inplace ? 1 : 0; + + ggml_scratch_load(ctx); + + result->op = GGML_OP_DIAG_MASK_ZERO; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = b; + + return result; +} + +struct ggml_tensor * ggml_diag_mask_zero( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past) { + return ggml_diag_mask_zero_impl(ctx, a, n_past, false); +} + +struct ggml_tensor * ggml_diag_mask_zero_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past) { + return ggml_diag_mask_zero_impl(ctx, a, n_past, true); +} + +// ggml_soft_max + +struct ggml_tensor * ggml_soft_max_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + bool inplace) { + bool is_node = false; + + if (a->grad) { + is_node = true; + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + result->op = GGML_OP_SOFT_MAX; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = NULL; + + return result; +} + +struct ggml_tensor * ggml_soft_max( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_soft_max_impl(ctx, a, false); +} + +struct ggml_tensor * ggml_soft_max_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a) { + return ggml_soft_max_impl(ctx, a, true); +} + +// ggml_rope + +struct ggml_tensor * ggml_rope_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past, + int n_dims, + int mode, + bool inplace) { + GGML_ASSERT(n_past >= 0); + bool is_node = false; + + if (!inplace && a->grad) { + is_node = true; + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + ggml_scratch_save(ctx); + + struct ggml_tensor * b = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 3); + + ((int32_t *) b->data)[0] = n_past; + ((int32_t *) b->data)[1] = n_dims; + ((int32_t *) b->data)[2] = mode; + + ggml_scratch_load(ctx); + + result->op = GGML_OP_ROPE; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = b; + + return result; +} + +struct ggml_tensor * ggml_rope( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past, + int n_dims, + int mode) { + return ggml_rope_impl(ctx, a, n_past, n_dims, mode, false); +} + +struct ggml_tensor * ggml_rope_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past, + int n_dims, + int mode) { + return ggml_rope_impl(ctx, a, n_past, n_dims, mode, true); +} + +// ggml_rope_back + +struct ggml_tensor * ggml_rope_back( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past, + int n_dims, + int mode) { + GGML_ASSERT(n_past >= 0); + bool is_node = false; + + if (a->grad) { + GGML_ASSERT(false); // TODO: implement backward + is_node = true; + } + + struct ggml_tensor * result = ggml_dup_tensor(ctx, a); + + ggml_scratch_save(ctx); + + struct ggml_tensor * b = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 3); + ggml_set_name(b, "n_past, n_dims, mode"); + + ((int32_t *) b->data)[0] = n_past; + ((int32_t *) b->data)[1] = n_dims; + ((int32_t *) b->data)[2] = mode; + + ggml_scratch_load(ctx); + + result->op = GGML_OP_ROPE_BACK; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = b; + + return result; +} + +// ggml_alibi + +struct ggml_tensor * ggml_alibi( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past, + int n_head, + float bias_max) { + GGML_ASSERT(n_past >= 0); + bool is_node = false; + + if (a->grad) { + GGML_ASSERT(false); // TODO: implement backward + is_node = true; + } + + // TODO: when implement backward, fix this: + //struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + struct ggml_tensor * result = ggml_view_tensor(ctx, a); + + ggml_scratch_save(ctx); + + struct ggml_tensor * b = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 2); + + ((int32_t *) b->data)[0] = n_past; + ((int32_t *) b->data)[1] = n_head; + GGML_ASSERT(sizeof(float) == sizeof(int32_t)); + (((float *) b->data)[2]) = bias_max; + + ggml_scratch_load(ctx); + + result->op = GGML_OP_ALIBI; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = b; + + return result; +} + +// ggml_clamp + +struct ggml_tensor * ggml_clamp( + struct ggml_context * ctx, + struct ggml_tensor * a, + float min, + float max) { + bool is_node = false; + + if (a->grad) { + GGML_ASSERT(false); // TODO: implement backward + is_node = true; + } + + // TODO: when implement backward, fix this: + struct ggml_tensor * result = ggml_view_tensor(ctx, a); + + ggml_scratch_save(ctx); + + struct ggml_tensor * b = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 3); + + ((float *) b->data)[0] = min; + ((float *) b->data)[1] = max; + + ggml_scratch_load(ctx); + + result->op = GGML_OP_CLAMP; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = b; + + return result; +} + +// ggml_conv_1d_1s + +struct ggml_tensor * ggml_conv_1d_1s( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b) { + GGML_ASSERT(ggml_is_matrix(b)); + GGML_ASSERT(a->ne[1] == b->ne[1]); + GGML_ASSERT(a->ne[3] == 1); + bool is_node = false; + + if (a->grad || b->grad) { + GGML_ASSERT(false); // TODO: implement backward + is_node = true; + } + + const int64_t ne[4] = { b->ne[0], a->ne[2], 1, 1, }; + struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 2, ne); + + result->op = GGML_OP_CONV_1D_1S; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = b; + + return result; +} + +// ggml_conv_1d_2s + +struct ggml_tensor * ggml_conv_1d_2s( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b) { + GGML_ASSERT(ggml_is_matrix(b)); + GGML_ASSERT(a->ne[1] == b->ne[1]); + GGML_ASSERT(a->ne[3] == 1); + bool is_node = false; + + if (a->grad || b->grad) { + GGML_ASSERT(false); // TODO: implement backward + is_node = true; + } + + const int64_t ne[4] = { b->ne[0]/2, a->ne[2], 1, 1, }; + struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 2, ne); + + result->op = GGML_OP_CONV_1D_2S; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = b; + + return result; +} + +// ggml_flash_attn + +struct ggml_tensor * ggml_flash_attn( + struct ggml_context * ctx, + struct ggml_tensor * q, + struct ggml_tensor * k, + struct ggml_tensor * v, + bool masked) { + GGML_ASSERT(ggml_can_mul_mat(k, q)); + // TODO: check if vT can be multiplied by (k*qT) + + bool is_node = false; + + if (q->grad || k->grad || v->grad) { + GGML_ASSERT(false); // TODO: implement backward + is_node = true; + } + + //struct ggml_tensor * result = ggml_dup_tensor(ctx, q); + struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, q->ne); + + result->op = GGML_OP_FLASH_ATTN; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = q; + result->src1 = k; + result->opt[0] = v; + result->opt[1] = ggml_new_i32(ctx, masked ? 1 : 0); + + return result; +} + +// ggml_flash_ff + +struct ggml_tensor * ggml_flash_ff( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b0, + struct ggml_tensor * b1, + struct ggml_tensor * c0, + struct ggml_tensor * c1) { + GGML_ASSERT(ggml_can_mul_mat(b0, a)); + // TODO: more checks + + bool is_node = false; + + if (a->grad || b0->grad || b1->grad || c0->grad || c1->grad) { + GGML_ASSERT(false); // TODO: implement backward + is_node = true; + } + + //struct ggml_tensor * result = ggml_dup_tensor(ctx, a); + struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, a->ne); + + result->op = GGML_OP_FLASH_FF; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = b0; + result->opt[0] = b1; + result->opt[1] = c0; + result->opt[2] = c1; + + return result; +} + +// ggml_map_unary + +struct ggml_tensor * ggml_map_unary_impl_f32( + struct ggml_context * ctx, + struct ggml_tensor * a, + const ggml_unary_op_f32_t fun, + bool inplace) { + bool is_node = false; + + if (!inplace && a->grad) { + is_node = true; + } + + struct ggml_tensor * addr_tensor = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, sizeof(void *) / sizeof(int32_t)); + *((void (**)(void))addr_tensor->data) = (void (*)(void))fun; + struct ggml_tensor *result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + result->op = GGML_OP_MAP_UNARY; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->opt[0] = addr_tensor; + + return result; +} + +struct ggml_tensor * ggml_map_unary_f32( + struct ggml_context * ctx, + struct ggml_tensor * a, + const ggml_unary_op_f32_t fun) { + return ggml_map_unary_impl_f32(ctx, a, fun, false); +} + +struct ggml_tensor * ggml_map_unary_inplace_f32( + struct ggml_context * ctx, + struct ggml_tensor * a, + const ggml_unary_op_f32_t fun) { + return ggml_map_unary_impl_f32(ctx, a, fun, true); +} + +// ggml_map_binary + +struct ggml_tensor * ggml_map_binary_impl_f32( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + const ggml_binary_op_f32_t fun, + bool inplace) { + GGML_ASSERT(ggml_are_same_shape(a, b)); + + bool is_node = false; + + if (!inplace && (a->grad || b->grad)) { + is_node = true; + } + + struct ggml_tensor * addr_tensor = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, sizeof(void *) / sizeof(int32_t)); + *((void (**)(void))addr_tensor->data) = (void (*)(void))fun; + struct ggml_tensor *result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + result->op = GGML_OP_MAP_BINARY; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src0 = a; + result->src1 = b; + result->opt[0] = addr_tensor; + + return result; +} + +struct ggml_tensor * ggml_map_binary_f32( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + const ggml_binary_op_f32_t fun) { + return ggml_map_binary_impl_f32(ctx, a, b, fun, false); +} + +struct ggml_tensor * ggml_map_binary_inplace_f32( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + const ggml_binary_op_f32_t fun) { + return ggml_map_binary_impl_f32(ctx, a, b, fun, true); +} + +//////////////////////////////////////////////////////////////////////////////// + +void ggml_set_param( + struct ggml_context * ctx, + struct ggml_tensor * tensor) { + tensor->is_param = true; + + GGML_ASSERT(tensor->grad == NULL); + tensor->grad = ggml_dup_tensor(ctx, tensor); +} + +// ggml_compute_forward_dup + +static void ggml_compute_forward_dup_same_cont( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + GGML_ASSERT(ggml_nelements(dst) == ggml_nelements(src0)); + GGML_ASSERT(ggml_is_contiguous(dst) && ggml_is_contiguous(src0)); + GGML_ASSERT(src0->type == dst->type); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const size_t nb00 = src0->nb[0]; + const size_t nb0 = dst->nb[0]; + + const int ith = params->ith; // thread index + const int nth = params->nth; // number of threads + + // parallelize by elements + const int ne = ggml_nelements(dst); + const int dr = (ne + nth - 1) / nth; + const int ie0 = dr * ith; + const int ie1 = MIN(ie0 + dr, ne); + + if (ie0 < ie1) { + memcpy( + ((char *) dst->data + ie0*nb0), + ((char *) src0->data + ie0*nb00), + (ie1 - ie0) * GGML_TYPE_SIZE[src0->type]); + } + +} +static void ggml_compute_forward_dup_f16( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + GGML_ASSERT(ggml_nelements(dst) == ggml_nelements(src0)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int64_t ne00 = src0->ne[0]; + const int64_t ne01 = src0->ne[1]; + const int64_t ne02 = src0->ne[2]; + const int64_t ne03 = src0->ne[3]; + + const int64_t ne0 = dst->ne[0]; + const int64_t ne1 = dst->ne[1]; + const int64_t ne2 = dst->ne[2]; + const int64_t ne3 = dst->ne[3]; + + const size_t nb00 = src0->nb[0]; + const size_t nb01 = src0->nb[1]; + const size_t nb02 = src0->nb[2]; + const size_t nb03 = src0->nb[3]; + + const size_t nb0 = dst->nb[0]; + const size_t nb1 = dst->nb[1]; + const size_t nb2 = dst->nb[2]; + const size_t nb3 = dst->nb[3]; + + const int ith = params->ith; // thread index + const int nth = params->nth; // number of threads + + if (ggml_is_contiguous(src0) && ggml_is_contiguous(dst) && src0->type == dst->type) { + ggml_compute_forward_dup_same_cont(params, src0, dst); + return; + } + + // parallelize by rows + const int nr = ne01; + // number of rows per thread + const int dr = (nr + nth - 1) / nth; + // row range for this thread + const int ir0 = dr * ith; + const int ir1 = MIN(ir0 + dr, nr); + + if (src0->type == dst->type && + ne00 == ne0 && + nb00 == GGML_TYPE_SIZE[src0->type] && nb0 == GGML_TYPE_SIZE[dst->type]) { + // copy by rows + const size_t rs = ne00*nb00; + for (int64_t i03 = 0; i03 < ne03; i03++) { + for (int64_t i02 = 0; i02 < ne02; i02++) { + for (int64_t i01 = ir0; i01 < ir1; i01++) { + memcpy( + ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3), + ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03), + rs); + } + } + } + return; + } + + // TODO: add more special-case implementations for tensor shapes/strides that can benefit from memcpy + + if (ggml_is_contiguous(dst)) { + if (nb00 == sizeof(ggml_fp16_t)) { + if (dst->type == GGML_TYPE_F16) { + size_t id = 0; + const size_t rs = ne00 * nb00; + char * dst_ptr = (char *) dst->data; + + for (int i03 = 0; i03 < ne03; i03++) { + for (int i02 = 0; i02 < ne02; i02++) { + id += rs * ir0; + for (int i01 = ir0; i01 < ir1; i01++) { + const char * src0_ptr = (char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03; + memcpy(dst_ptr + id, src0_ptr, rs); + id += rs; + } + id += rs * (ne01 - ir1); + } + } + } else if (dst->type == GGML_TYPE_F32) { + size_t id = 0; + float * dst_ptr = (float *) dst->data; + + for (int i03 = 0; i03 < ne03; i03++) { + for (int i02 = 0; i02 < ne02; i02++) { + id += ne00 * ir0; + for (int i01 = ir0; i01 < ir1; i01++) { + const ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03); + for (int i00 = 0; i00 < ne00; i00++) { + dst_ptr[id] = GGML_FP16_TO_FP32(src0_ptr[i00]); + id++; + } + } + id += ne00 * (ne01 - ir1); + } + } + } else if (ggml_is_quantized(dst->type)) { + quantize_row_q_t const quantize_row_q = quantize_fns[dst->type].quantize_row_q; + float * src0_f32 = (float *) params->wdata + (ne00 + CACHE_LINE_SIZE_F32) * ith; + + size_t id = 0; + size_t rs = nb0 * (ne00 / GGML_BLCK_SIZE[dst->type]); + char * dst_ptr = (char *) dst->data; + + for (int i03 = 0; i03 < ne03; i03++) { + for (int i02 = 0; i02 < ne02; i02++) { + id += rs * ir0; + for (int i01 = ir0; i01 < ir1; i01++) { + const ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03); + + for (int i00 = 0; i00 < ne00; i00++) { + src0_f32[i00] = GGML_FP16_TO_FP32(src0_ptr[i00]); + } + + quantize_row_q(src0_f32, dst_ptr + id, ne00); + id += rs; + } + id += rs * (ne01 - ir1); + } + } + } else { + GGML_ASSERT(false); // TODO: implement + } + } else { + //printf("%s: this is not optimal - fix me\n", __func__); + + if (dst->type == GGML_TYPE_F32) { + size_t id = 0; + float * dst_ptr = (float *) dst->data; + + for (int i03 = 0; i03 < ne03; i03++) { + for (int i02 = 0; i02 < ne02; i02++) { + id += ne00 * ir0; + for (int i01 = ir0; i01 < ir1; i01++) { + for (int i00 = 0; i00 < ne00; i00++) { + const ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); + + dst_ptr[id] = GGML_FP16_TO_FP32(*src0_ptr); + id++; + } + } + id += ne00 * (ne01 - ir1); + } + } + } else if (dst->type == GGML_TYPE_F16) { + size_t id = 0; + ggml_fp16_t * dst_ptr = (ggml_fp16_t *) dst->data; + + for (int i03 = 0; i03 < ne03; i03++) { + for (int i02 = 0; i02 < ne02; i02++) { + id += ne00 * ir0; + for (int i01 = ir0; i01 < ir1; i01++) { + for (int i00 = 0; i00 < ne00; i00++) { + const ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); + + dst_ptr[id] = *src0_ptr; + id++; + } + } + id += ne00 * (ne01 - ir1); + } + } + } else { + GGML_ASSERT(false); // TODO: implement + } + } + return; + } + + // dst counters + int64_t i10 = 0; + int64_t i11 = 0; + int64_t i12 = 0; + int64_t i13 = 0; + + if (dst->type == GGML_TYPE_F16) { + for (int64_t i03 = 0; i03 < ne03; i03++) { + for (int64_t i02 = 0; i02 < ne02; i02++) { + i10 += ne00 * ir0; + while (i10 >= ne0) { + i10 -= ne0; + if (++i11 == ne1) { + i11 = 0; + if (++i12 == ne2) { + i12 = 0; + if (++i13 == ne3) { + i13 = 0; + } + } + } + } + for (int64_t i01 = ir0; i01 < ir1; i01++) { + for (int64_t i00 = 0; i00 < ne00; i00++) { + const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); + char * dst_ptr = ((char *) dst->data + i10*nb0 + i11*nb1 + i12*nb2 + i13*nb3); + + memcpy(dst_ptr, src0_ptr, sizeof(ggml_fp16_t)); + + if (++i10 == ne00) { + i10 = 0; + if (++i11 == ne01) { + i11 = 0; + if (++i12 == ne02) { + i12 = 0; + if (++i13 == ne03) { + i13 = 0; + } + } + } + } + } + } + i10 += ne00 * (ne01 - ir1); + while (i10 >= ne0) { + i10 -= ne0; + if (++i11 == ne1) { + i11 = 0; + if (++i12 == ne2) { + i12 = 0; + if (++i13 == ne3) { + i13 = 0; + } + } + } + } + } + } + } else if (dst->type == GGML_TYPE_F32) { + for (int64_t i03 = 0; i03 < ne03; i03++) { + for (int64_t i02 = 0; i02 < ne02; i02++) { + i10 += ne00 * ir0; + while (i10 >= ne0) { + i10 -= ne0; + if (++i11 == ne1) { + i11 = 0; + if (++i12 == ne2) { + i12 = 0; + if (++i13 == ne3) { + i13 = 0; + } + } + } + } + for (int64_t i01 = ir0; i01 < ir1; i01++) { + for (int64_t i00 = 0; i00 < ne00; i00++) { + const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); + char * dst_ptr = ((char *) dst->data + i10*nb0 + i11*nb1 + i12*nb2 + i13*nb3); + + *(float *) dst_ptr = GGML_FP16_TO_FP32(*(const ggml_fp16_t *) src0_ptr); + + if (++i10 == ne0) { + i10 = 0; + if (++i11 == ne1) { + i11 = 0; + if (++i12 == ne2) { + i12 = 0; + if (++i13 == ne3) { + i13 = 0; + } + } + } + } + } + } + i10 += ne00 * (ne01 - ir1); + while (i10 >= ne0) { + i10 -= ne0; + if (++i11 == ne1) { + i11 = 0; + if (++i12 == ne2) { + i12 = 0; + if (++i13 == ne3) { + i13 = 0; + } + } + } + } + } + } + } else { + GGML_ASSERT(false); // TODO: implement + } +} + +static void ggml_compute_forward_dup_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + GGML_ASSERT(ggml_nelements(dst) == ggml_nelements(src0)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int64_t ne00 = src0->ne[0]; + const int64_t ne01 = src0->ne[1]; + const int64_t ne02 = src0->ne[2]; + const int64_t ne03 = src0->ne[3]; + + const int64_t ne0 = dst->ne[0]; + const int64_t ne1 = dst->ne[1]; + const int64_t ne2 = dst->ne[2]; + const int64_t ne3 = dst->ne[3]; + + const size_t nb00 = src0->nb[0]; + const size_t nb01 = src0->nb[1]; + const size_t nb02 = src0->nb[2]; + const size_t nb03 = src0->nb[3]; + + const size_t nb0 = dst->nb[0]; + const size_t nb1 = dst->nb[1]; + const size_t nb2 = dst->nb[2]; + const size_t nb3 = dst->nb[3]; + + const int ith = params->ith; // thread index + const int nth = params->nth; // number of threads + + if (ggml_is_contiguous(src0) && ggml_is_contiguous(dst) && src0->type == dst->type) { + ggml_compute_forward_dup_same_cont(params, src0, dst); + return; + } + + // parallelize by rows + const int nr = ne01; + // number of rows per thread + const int dr = (nr + nth - 1) / nth; + // row range for this thread + const int ir0 = dr * ith; + const int ir1 = MIN(ir0 + dr, nr); + + if (src0->type == dst->type && + ne00 == ne0 && + nb00 == GGML_TYPE_SIZE[src0->type] && nb0 == GGML_TYPE_SIZE[dst->type]) { + // copy by rows + const size_t rs = ne00*nb00; + for (int64_t i03 = 0; i03 < ne03; i03++) { + for (int64_t i02 = 0; i02 < ne02; i02++) { + for (int64_t i01 = ir0; i01 < ir1; i01++) { + memcpy( + ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3), + ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03), + rs); + } + } + } + return; + } + + if (ggml_is_contiguous(dst)) { + // TODO: simplify + if (nb00 == sizeof(float)) { + if (dst->type == GGML_TYPE_F32) { + size_t id = 0; + const size_t rs = ne00 * nb00; + char * dst_ptr = (char *) dst->data; + + for (int i03 = 0; i03 < ne03; i03++) { + for (int i02 = 0; i02 < ne02; i02++) { + id += rs * ir0; + for (int i01 = ir0; i01 < ir1; i01++) { + const char * src0_ptr = (char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03; + memcpy(dst_ptr + id, src0_ptr, rs); + id += rs; + } + id += rs * (ne01 - ir1); + } + } + } else if (dst->type == GGML_TYPE_F16) { + size_t id = 0; + ggml_fp16_t * dst_ptr = (ggml_fp16_t *) dst->data; + + for (int i03 = 0; i03 < ne03; i03++) { + for (int i02 = 0; i02 < ne02; i02++) { + id += ne00 * ir0; + for (int i01 = ir0; i01 < ir1; i01++) { + for (int i00 = 0; i00 < ne00; i00++) { + const float * src0_ptr = (float *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); + + dst_ptr[id] = GGML_FP32_TO_FP16(*src0_ptr); + id++; + } + } + id += ne00 * (ne01 - ir1); + } + } + } else if (ggml_is_quantized(dst->type)) { + quantize_row_q_t const quantize_row_q = quantize_fns[dst->type].quantize_row_q; + + size_t id = 0; + size_t rs = nb0 * (ne00 / GGML_BLCK_SIZE[dst->type]); + char * dst_ptr = (char *) dst->data; + + for (int i03 = 0; i03 < ne03; i03++) { + for (int i02 = 0; i02 < ne02; i02++) { + id += rs * ir0; + for (int i01 = ir0; i01 < ir1; i01++) { + const float * src0_ptr = (float *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03); + quantize_row_q(src0_ptr, dst_ptr + id, ne00); + id += rs; + } + id += rs * (ne01 - ir1); + } + } + } else { + GGML_ASSERT(false); // TODO: implement + } + } else { + //printf("%s: this is not optimal - fix me\n", __func__); + + if (dst->type == GGML_TYPE_F32) { + size_t id = 0; + float * dst_ptr = (float *) dst->data; + + for (int i03 = 0; i03 < ne03; i03++) { + for (int i02 = 0; i02 < ne02; i02++) { + id += ne00 * ir0; + for (int i01 = ir0; i01 < ir1; i01++) { + for (int i00 = 0; i00 < ne00; i00++) { + const float * src0_ptr = (float *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); + + dst_ptr[id] = *src0_ptr; + id++; + } + } + id += ne00 * (ne01 - ir1); + } + } + } else if (dst->type == GGML_TYPE_F16) { + size_t id = 0; + ggml_fp16_t * dst_ptr = (ggml_fp16_t *) dst->data; + + for (int i03 = 0; i03 < ne03; i03++) { + for (int i02 = 0; i02 < ne02; i02++) { + id += ne00 * ir0; + for (int i01 = ir0; i01 < ir1; i01++) { + for (int i00 = 0; i00 < ne00; i00++) { + const float * src0_ptr = (float *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); + + dst_ptr[id] = GGML_FP32_TO_FP16(*src0_ptr); + id++; + } + } + id += ne00 * (ne01 - ir1); + } + } + } else { + GGML_ASSERT(false); // TODO: implement + } + } + + return; + } + + // dst counters + + int64_t i10 = 0; + int64_t i11 = 0; + int64_t i12 = 0; + int64_t i13 = 0; + + if (dst->type == GGML_TYPE_F32) { + for (int64_t i03 = 0; i03 < ne03; i03++) { + for (int64_t i02 = 0; i02 < ne02; i02++) { + i10 += ne00 * ir0; + while (i10 >= ne0) { + i10 -= ne0; + if (++i11 == ne1) { + i11 = 0; + if (++i12 == ne2) { + i12 = 0; + if (++i13 == ne3) { + i13 = 0; + } + } + } + } + for (int64_t i01 = ir0; i01 < ir1; i01++) { + for (int64_t i00 = 0; i00 < ne00; i00++) { + const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); + char * dst_ptr = ((char *) dst->data + i10*nb0 + i11*nb1 + i12*nb2 + i13*nb3); + + memcpy(dst_ptr, src0_ptr, sizeof(float)); + + if (++i10 == ne0) { + i10 = 0; + if (++i11 == ne1) { + i11 = 0; + if (++i12 == ne2) { + i12 = 0; + if (++i13 == ne3) { + i13 = 0; + } + } + } + } + } + } + i10 += ne00 * (ne01 - ir1); + while (i10 >= ne0) { + i10 -= ne0; + if (++i11 == ne1) { + i11 = 0; + if (++i12 == ne2) { + i12 = 0; + if (++i13 == ne3) { + i13 = 0; + } + } + } + } + } + } + } else if (dst->type == GGML_TYPE_F16) { + for (int64_t i03 = 0; i03 < ne03; i03++) { + for (int64_t i02 = 0; i02 < ne02; i02++) { + i10 += ne00 * ir0; + while (i10 >= ne0) { + i10 -= ne0; + if (++i11 == ne1) { + i11 = 0; + if (++i12 == ne2) { + i12 = 0; + if (++i13 == ne3) { + i13 = 0; + } + } + } + } + for (int64_t i01 = ir0; i01 < ir1; i01++) { + for (int64_t i00 = 0; i00 < ne00; i00++) { + const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); + char * dst_ptr = ((char *) dst->data + i10*nb0 + i11*nb1 + i12*nb2 + i13*nb3); + + *(ggml_fp16_t *) dst_ptr = GGML_FP32_TO_FP16(*(const float *) src0_ptr); + + if (++i10 == ne0) { + i10 = 0; + if (++i11 == ne1) { + i11 = 0; + if (++i12 == ne2) { + i12 = 0; + if (++i13 == ne3) { + i13 = 0; + } + } + } + } + } + } + i10 += ne00 * (ne01 - ir1); + while (i10 >= ne0) { + i10 -= ne0; + if (++i11 == ne1) { + i11 = 0; + if (++i12 == ne2) { + i12 = 0; + if (++i13 == ne3) { + i13 = 0; + } + } + } + } + } + } + } else { + GGML_ASSERT(false); // TODO: implement + } +} + +static void ggml_compute_forward_dup( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + if (ggml_is_contiguous(src0) && ggml_is_contiguous(dst) && src0->type == dst->type) { + ggml_compute_forward_dup_same_cont(params, src0, dst); + return; + } + switch (src0->type) { + case GGML_TYPE_F16: + { + ggml_compute_forward_dup_f16(params, src0, dst); + } break; + case GGML_TYPE_F32: + { + ggml_compute_forward_dup_f32(params, src0, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_add + +static void ggml_compute_forward_add_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + GGML_ASSERT(ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int ith = params->ith; + const int nth = params->nth; + + const int nr = ggml_nrows(src0); + const int64_t ne0 = src0->ne[0]; + const int64_t ne1 = src0->ne[1]; + const int64_t ne2 = src0->ne[2]; + + const size_t nb00 = src0->nb[0]; + const size_t nb01 = src0->nb[1]; + const size_t nb02 = src0->nb[2]; + const size_t nb03 = src0->nb[3]; + + const size_t nb10 = src1->nb[0]; + const size_t nb11 = src1->nb[1]; + const size_t nb12 = src1->nb[2]; + const size_t nb13 = src1->nb[3]; + + const size_t nb0 = dst->nb[0]; + const size_t nb1 = dst->nb[1]; + const size_t nb2 = dst->nb[2]; + const size_t nb3 = dst->nb[3]; + + GGML_ASSERT( nb0 == sizeof(float)); + GGML_ASSERT(nb00 == sizeof(float)); + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + if (nb10 == sizeof(float)) { + for (int ir = ir0; ir < ir1; ++ir) { + // src0, src1 and dst are same shape => same indices + const int i3 = ir/(ne2*ne1); + const int i2 = (ir - i3*ne2*ne1)/ne1; + const int i1 = (ir - i3*ne2*ne1 - i2*ne1); + + +#ifdef GGML_USE_ACCELERATE + vDSP_vadd( + (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01), 1, + (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11), 1, + (float *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 ), 1, + ne0); +#else + ggml_vec_add_f32(ne0, + (float *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 ), + (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01), + (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11)); +#endif + // } + // } + } + } else { + // src1 is not contiguous + for (int ir = ir0; ir < ir1; ++ir) { + // src0, src1 and dst are same shape => same indices + const int i3 = ir/(ne2*ne1); + const int i2 = (ir - i3*ne2*ne1)/ne1; + const int i1 = (ir - i3*ne2*ne1 - i2*ne1); + + float * dst_ptr = (float *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 ); + float * src0_ptr = (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01); + for (int i0 = 0; i0 < ne0; i0++) { + float * src1_ptr = (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11 + i0*nb10); + + dst_ptr[i0] = src0_ptr[i0] + *src1_ptr; + } + } + } +} + +static void ggml_compute_forward_add_f16_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + GGML_ASSERT(ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int ith = params->ith; + const int nth = params->nth; + + const int nr = ggml_nrows(src0); + const int64_t ne0 = src0->ne[0]; + const int64_t ne1 = src0->ne[1]; + const int64_t ne2 = src0->ne[2]; + + const size_t nb00 = src0->nb[0]; + const size_t nb01 = src0->nb[1]; + const size_t nb02 = src0->nb[2]; + const size_t nb03 = src0->nb[3]; + + const size_t nb10 = src1->nb[0]; + const size_t nb11 = src1->nb[1]; + const size_t nb12 = src1->nb[2]; + const size_t nb13 = src1->nb[3]; + + const size_t nb0 = dst->nb[0]; + const size_t nb1 = dst->nb[1]; + const size_t nb2 = dst->nb[2]; + const size_t nb3 = dst->nb[3]; + + GGML_ASSERT(src0->type == GGML_TYPE_F16); + GGML_ASSERT(src1->type == GGML_TYPE_F32); + GGML_ASSERT(dst->type == GGML_TYPE_F16); + + GGML_ASSERT( nb0 == sizeof(ggml_fp16_t)); + GGML_ASSERT(nb00 == sizeof(ggml_fp16_t)); + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + if (nb10 == sizeof(float)) { + for (int ir = ir0; ir < ir1; ++ir) { + // src0, src1 and dst are same shape => same indices + const int i3 = ir/(ne2*ne1); + const int i2 = (ir - i3*ne2*ne1)/ne1; + const int i1 = (ir - i3*ne2*ne1 - i2*ne1); + + ggml_fp16_t * dst_ptr = (ggml_fp16_t *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1); + ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01); + float * src1_ptr = (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11); + + for (int i = 0; i < ne0; i++) { + dst_ptr[i] = GGML_FP32_TO_FP16(GGML_FP16_TO_FP32(src0_ptr[i]) + src1_ptr[i]); + } + } + } + else { + // src1 is not contiguous + GGML_ASSERT(false); + } +} + +static void ggml_compute_forward_add_f16_f16( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + GGML_ASSERT(ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int ith = params->ith; + const int nth = params->nth; + + const int nr = ggml_nrows(src0); + const int64_t ne0 = src0->ne[0]; + const int64_t ne1 = src0->ne[1]; + const int64_t ne2 = src0->ne[2]; + + const size_t nb00 = src0->nb[0]; + const size_t nb01 = src0->nb[1]; + const size_t nb02 = src0->nb[2]; + const size_t nb03 = src0->nb[3]; + + const size_t nb10 = src1->nb[0]; + const size_t nb11 = src1->nb[1]; + const size_t nb12 = src1->nb[2]; + const size_t nb13 = src1->nb[3]; + + const size_t nb0 = dst->nb[0]; + const size_t nb1 = dst->nb[1]; + const size_t nb2 = dst->nb[2]; + const size_t nb3 = dst->nb[3]; + + GGML_ASSERT(src0->type == GGML_TYPE_F16); + GGML_ASSERT(src1->type == GGML_TYPE_F16); + GGML_ASSERT(dst->type == GGML_TYPE_F16); + + GGML_ASSERT( nb0 == sizeof(ggml_fp16_t)); + GGML_ASSERT(nb00 == sizeof(ggml_fp16_t)); + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + if (nb10 == sizeof(ggml_fp16_t)) { + for (int ir = ir0; ir < ir1; ++ir) { + // src0, src1 and dst are same shape => same indices + const int i3 = ir/(ne2*ne1); + const int i2 = (ir - i3*ne2*ne1)/ne1; + const int i1 = (ir - i3*ne2*ne1 - i2*ne1); + + ggml_fp16_t * dst_ptr = (ggml_fp16_t *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1); + ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01); + ggml_fp16_t * src1_ptr = (ggml_fp16_t *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11); + + for (int i = 0; i < ne0; i++) { + dst_ptr[i] = GGML_FP32_TO_FP16(GGML_FP16_TO_FP32(src0_ptr[i]) + GGML_FP16_TO_FP32(src1_ptr[i])); + } + } + } + else { + // src1 is not contiguous + GGML_ASSERT(false); + } +} + +static void ggml_compute_forward_add_q_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + GGML_ASSERT(ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int nr = ggml_nrows(src0); + const int64_t ne00 = src0->ne[0]; + const int64_t ne01 = src0->ne[1]; + const int64_t ne02 = src0->ne[2]; + //const int64_t ne03 = src0->ne[3]; + + const size_t nb00 = src0->nb[0]; + const size_t nb01 = src0->nb[1]; + const size_t nb02 = src0->nb[2]; + const size_t nb03 = src0->nb[3]; + + const size_t nb10 = src1->nb[0]; + const size_t nb11 = src1->nb[1]; + const size_t nb12 = src1->nb[2]; + const size_t nb13 = src1->nb[3]; + + const size_t nb0 = dst->nb[0]; + const size_t nb1 = dst->nb[1]; + const size_t nb2 = dst->nb[2]; + const size_t nb3 = dst->nb[3]; + + const int ith = params->ith; + const int nth = params->nth; + + const enum ggml_type type = src0->type; + dequantize_row_q_t const dequantize_row_q = quantize_fns[type].dequantize_row_q; + quantize_row_q_t const quantize_row_q = quantize_fns[type].quantize_row_q; + + // we don't support permuted src0 or src1 + GGML_ASSERT(nb00 == GGML_TYPE_SIZE[type]); + GGML_ASSERT(nb10 == sizeof(float)); + + // dst cannot be transposed or permuted + GGML_ASSERT(nb0 <= nb1); + GGML_ASSERT(nb1 <= nb2); + GGML_ASSERT(nb2 <= nb3); + + GGML_ASSERT(ggml_is_quantized(src0->type)); + GGML_ASSERT(dst->type == src0->type); + GGML_ASSERT(src1->type == GGML_TYPE_F32); + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + float * wdata = (float *) params->wdata + (ne00 + CACHE_LINE_SIZE_F32) * ith; + + for (int ir = ir0; ir < ir1; ++ir) { + // src0 indices + const int i03 = ir/(ne02*ne01); + const int i02 = (ir - i03*ne02*ne01)/ne01; + const int i01 = (ir - i03*ne02*ne01 - i02*ne01); + + // src1 and dst are same shape as src0 => same indices + const int i13 = i03; + const int i12 = i02; + const int i11 = i01; + + const int i3 = i03; + const int i2 = i02; + const int i1 = i01; + + void * src0_row = (void *) ((char *) src0->data + (i01*nb01 + i02*nb02 + i03*nb03)); + float * src1_row = (float *)((char *) src1->data + (i11*nb11 + i12*nb12 + i13*nb13)); + void * dst_row = (void *) ((char *) dst->data + ( i1*nb1 + i2*nb2 + i3*nb0)); + + assert(ne00 % 32 == 0); + + // unquantize row from src0 to temp buffer + dequantize_row_q(src0_row, wdata, ne00); + // add src1 + ggml_vec_acc_f32(ne00, wdata, src1_row); + // quantize row to dst + quantize_row_q(wdata, dst_row, ne00); + } +} + +static void ggml_compute_forward_add( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_add_f32(params, src0, src1, dst); + } break; + case GGML_TYPE_F16: + { + if (src1->type == GGML_TYPE_F16) { + ggml_compute_forward_add_f16_f16(params, src0, src1, dst); + } + else if (src1->type == GGML_TYPE_F32) { + ggml_compute_forward_add_f16_f32(params, src0, src1, dst); + } + else { + GGML_ASSERT(false); + } + } break; + case GGML_TYPE_Q4_0: + case GGML_TYPE_Q4_1: + case GGML_TYPE_Q5_0: + case GGML_TYPE_Q5_1: + case GGML_TYPE_Q8_0: + { + ggml_compute_forward_add_q_f32(params, src0, src1, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_add1 + +static void ggml_compute_forward_add1_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + GGML_ASSERT(ggml_are_same_shape(src0, dst)); + GGML_ASSERT(ggml_is_scalar(src1)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int ith = params->ith; + const int nth = params->nth; + + const int nr = ggml_nrows(src0); + const int64_t ne0 = src0->ne[0]; + const int64_t ne1 = src0->ne[1]; + const int64_t ne2 = src0->ne[2]; + + const size_t nb00 = src0->nb[0]; + const size_t nb01 = src0->nb[1]; + const size_t nb02 = src0->nb[2]; + const size_t nb03 = src0->nb[3]; + + const size_t nb0 = dst->nb[0]; + const size_t nb1 = dst->nb[1]; + const size_t nb2 = dst->nb[2]; + const size_t nb3 = dst->nb[3]; + + GGML_ASSERT( nb0 == sizeof(float)); + GGML_ASSERT(nb00 == sizeof(float)); + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + for (int ir = ir0; ir < ir1; ++ir) { + // src0 and dst are same shape => same indices + const int i3 = ir/(ne2*ne1); + const int i2 = (ir - i3*ne2*ne1)/ne1; + const int i1 = (ir - i3*ne2*ne1 - i2*ne1); + +#ifdef GGML_USE_ACCELERATE + UNUSED(ggml_vec_add1_f32); + + vDSP_vadd( + (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01), 1, + (float *) ((char *) src1->data), 0, + (float *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 ), 1, + ne0); +#else + ggml_vec_add1_f32(ne0, + (float *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 ), + (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01), + *(float *) src1->data); +#endif + } +} + +static void ggml_compute_forward_add1_f16_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + GGML_ASSERT(ggml_are_same_shape(src0, dst)); + GGML_ASSERT(ggml_is_scalar(src1)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + // scalar to add + const float v = *(float *) src1->data; + + const int ith = params->ith; + const int nth = params->nth; + + const int nr = ggml_nrows(src0); + const int64_t ne0 = src0->ne[0]; + const int64_t ne1 = src0->ne[1]; + const int64_t ne2 = src0->ne[2]; + + const size_t nb00 = src0->nb[0]; + const size_t nb01 = src0->nb[1]; + const size_t nb02 = src0->nb[2]; + const size_t nb03 = src0->nb[3]; + + const size_t nb0 = dst->nb[0]; + const size_t nb1 = dst->nb[1]; + const size_t nb2 = dst->nb[2]; + const size_t nb3 = dst->nb[3]; + + GGML_ASSERT(src0->type == GGML_TYPE_F16); + GGML_ASSERT(src1->type == GGML_TYPE_F32); + GGML_ASSERT(dst->type == GGML_TYPE_F16); + + GGML_ASSERT( nb0 == sizeof(ggml_fp16_t)); + GGML_ASSERT(nb00 == sizeof(ggml_fp16_t)); + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + for (int ir = ir0; ir < ir1; ++ir) { + // src0 and dst are same shape => same indices + const int i3 = ir/(ne2*ne1); + const int i2 = (ir - i3*ne2*ne1)/ne1; + const int i1 = (ir - i3*ne2*ne1 - i2*ne1); + + ggml_fp16_t * dst_ptr = (ggml_fp16_t *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 ); + ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01); + for (int i = 0; i < ne0; i++) { + dst_ptr[i] = GGML_FP32_TO_FP16(GGML_FP16_TO_FP32(src0_ptr[i]) + v); + } + } +} + +static void ggml_compute_forward_add1_f16_f16( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + GGML_ASSERT(ggml_are_same_shape(src0, dst)); + GGML_ASSERT(ggml_is_scalar(src1)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + // scalar to add + const float v = GGML_FP16_TO_FP32(*(ggml_fp16_t *) src1->data); + + const int ith = params->ith; + const int nth = params->nth; + + const int nr = ggml_nrows(src0); + const int64_t ne0 = src0->ne[0]; + const int64_t ne1 = src0->ne[1]; + const int64_t ne2 = src0->ne[2]; + + const size_t nb00 = src0->nb[0]; + const size_t nb01 = src0->nb[1]; + const size_t nb02 = src0->nb[2]; + const size_t nb03 = src0->nb[3]; + + const size_t nb0 = dst->nb[0]; + const size_t nb1 = dst->nb[1]; + const size_t nb2 = dst->nb[2]; + const size_t nb3 = dst->nb[3]; + + GGML_ASSERT(src0->type == GGML_TYPE_F16); + GGML_ASSERT(src1->type == GGML_TYPE_F16); + GGML_ASSERT(dst->type == GGML_TYPE_F16); + + GGML_ASSERT( nb0 == sizeof(ggml_fp16_t)); + GGML_ASSERT(nb00 == sizeof(ggml_fp16_t)); + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + for (int ir = ir0; ir < ir1; ++ir) { + // src0 and dst are same shape => same indices + const int i3 = ir/(ne2*ne1); + const int i2 = (ir - i3*ne2*ne1)/ne1; + const int i1 = (ir - i3*ne2*ne1 - i2*ne1); + + ggml_fp16_t * dst_ptr = (ggml_fp16_t *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 ); + ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01); + for (int i = 0; i < ne0; i++) { + dst_ptr[i] = GGML_FP32_TO_FP16(GGML_FP16_TO_FP32(src0_ptr[i]) + v); + } + } +} + +static void ggml_compute_forward_add1_q_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + GGML_ASSERT(ggml_are_same_shape(src0, dst)); + GGML_ASSERT(ggml_is_scalar(src1)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + // scalar to add + const float v = *(float *) src1->data; + + const int ith = params->ith; + const int nth = params->nth; + + const int nr = ggml_nrows(src0); + const int64_t ne0 = src0->ne[0]; + const int64_t ne1 = src0->ne[1]; + const int64_t ne2 = src0->ne[2]; + + const size_t nb00 = src0->nb[0]; + const size_t nb01 = src0->nb[1]; + const size_t nb02 = src0->nb[2]; + const size_t nb03 = src0->nb[3]; + + const size_t nb0 = dst->nb[0]; + const size_t nb1 = dst->nb[1]; + const size_t nb2 = dst->nb[2]; + const size_t nb3 = dst->nb[3]; + + const enum ggml_type type = src0->type; + dequantize_row_q_t const dequantize_row_q = quantize_fns[type].dequantize_row_q; + quantize_row_q_t const quantize_row_q = quantize_fns[type].quantize_row_q; + + // we don't support permuted src0 + GGML_ASSERT(nb00 == GGML_TYPE_SIZE[type]); + + // dst cannot be transposed or permuted + GGML_ASSERT(nb0 <= nb1); + GGML_ASSERT(nb1 <= nb2); + GGML_ASSERT(nb2 <= nb3); + + GGML_ASSERT(ggml_is_quantized(src0->type)); + GGML_ASSERT(dst->type == src0->type); + GGML_ASSERT(src1->type == GGML_TYPE_F32); + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + float * wdata = (float *) params->wdata + (ne0 + CACHE_LINE_SIZE_F32) * ith; + + for (int ir = ir0; ir < ir1; ++ir) { + // src0 and dst are same shape => same indices + const int i3 = ir/(ne2*ne1); + const int i2 = (ir - i3*ne2*ne1)/ne1; + const int i1 = (ir - i3*ne2*ne1 - i2*ne1); + + void * src0_row = (void *) ((char *) src0->data + (i1*nb01 + i2*nb02 + i3*nb03)); + void * dst_row = (void *) ((char *) dst->data + (i1*nb1 + i2*nb2 + i3*nb0 )); + + assert(ne0 % 32 == 0); + + // unquantize row from src0 to temp buffer + dequantize_row_q(src0_row, wdata, ne0); + // add src1 + ggml_vec_acc1_f32(ne0, wdata, v); + // quantize row to dst + quantize_row_q(wdata, dst_row, ne0); + } +} + +static void ggml_compute_forward_add1( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_add1_f32(params, src0, src1, dst); + } break; + case GGML_TYPE_F16: + { + if (src1->type == GGML_TYPE_F16) { + ggml_compute_forward_add1_f16_f16(params, src0, src1, dst); + } + else if (src1->type == GGML_TYPE_F32) { + ggml_compute_forward_add1_f16_f32(params, src0, src1, dst); + } + else { + GGML_ASSERT(false); + } + } break; + case GGML_TYPE_Q4_0: + case GGML_TYPE_Q4_1: + case GGML_TYPE_Q5_0: + case GGML_TYPE_Q5_1: + case GGML_TYPE_Q8_0: + case GGML_TYPE_Q8_1: + { + ggml_compute_forward_add1_q_f32(params, src0, src1, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + + +// ggml_compute_forward_acc + +static void ggml_compute_forward_acc_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + const struct ggml_tensor * opt0, + struct ggml_tensor * dst) { + GGML_ASSERT(ggml_are_same_shape(src0, dst)); + GGML_ASSERT(ggml_is_contiguous(dst) && ggml_is_contiguous(src0)); + + GGML_ASSERT(opt0->type == GGML_TYPE_I32); + GGML_ASSERT(ggml_nelements(opt0) == 5); + + // view src0 and dst with these strides and data offset inbytes during acc + // nb0 is implicitely element_size because src0 and dst are contiguous + size_t nb1 = ((int32_t *) opt0->data)[0]; + size_t nb2 = ((int32_t *) opt0->data)[1]; + size_t nb3 = ((int32_t *) opt0->data)[2]; + size_t offset = ((int32_t *) opt0->data)[3]; + bool inplace = (bool) ((int32_t *) opt0->data)[4]; + + if (!inplace && (params->type == GGML_TASK_INIT)) { + // memcpy needs to be synchronized across threads to avoid race conditions. + // => do it in INIT phase + memcpy( + ((char *) dst->data), + ((char *) src0->data), + ggml_nbytes(dst)); + } + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int ith = params->ith; + const int nth = params->nth; + + const int nr = ggml_nrows(src1); + const int nc = src1->ne[0]; + + const int64_t ne10 = src1->ne[0]; + const int64_t ne11 = src1->ne[1]; + const int64_t ne12 = src1->ne[2]; + const int64_t ne13 = src1->ne[3]; + + const size_t nb10 = src1->nb[0]; + const size_t nb11 = src1->nb[1]; + const size_t nb12 = src1->nb[2]; + const size_t nb13 = src1->nb[3]; + + // src0 and dst as viewed during acc + const size_t nb0 = ggml_element_size(src0); + + const size_t nb00 = nb0; + const size_t nb01 = nb1; + const size_t nb02 = nb2; + const size_t nb03 = nb3; + + GGML_ASSERT(offset + (ne10 == 0 ? 0 : ne10-1)*nb0 + (ne11 == 0 ? 0 : ne11-1)*nb1 + (ne12 == 0 ? 0 : ne12-1)*nb2 + (ne13 == 0 ? 0 : ne13-1)*nb3 < ggml_nbytes(dst)); + GGML_ASSERT(offset + (ne10 == 0 ? 0 : ne10-1)*nb00 + (ne11 == 0 ? 0 : ne11-1)*nb01 + (ne12 == 0 ? 0 : ne12-1)*nb02 + (ne13 == 0 ? 0 : ne13-1)*nb03 < ggml_nbytes(src0)); + + GGML_ASSERT(nb10 == sizeof(float)); + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + for (int ir = ir0; ir < ir1; ++ir) { + // src0 and dst are viewed with shape of src1 and offset + // => same indices + const int i3 = ir/(ne12*ne11); + const int i2 = (ir - i3*ne12*ne11)/ne11; + const int i1 = (ir - i3*ne12*ne11 - i2*ne11); + +#ifdef GGML_USE_ACCELERATE + vDSP_vadd( + (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + offset), 1, + (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11), 1, + (float *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + offset), 1, nc); +#else + ggml_vec_add_f32(nc, + (float *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + offset), + (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + offset), + (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11)); +#endif + } +} + +static void ggml_compute_forward_acc( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + const struct ggml_tensor * opt0, + struct ggml_tensor * dst) { + + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_acc_f32(params, src0, src1, opt0, dst); + } break; + case GGML_TYPE_F16: + case GGML_TYPE_Q4_0: + case GGML_TYPE_Q4_1: + case GGML_TYPE_Q5_0: + case GGML_TYPE_Q5_1: + case GGML_TYPE_Q8_0: + case GGML_TYPE_Q8_1: + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_sub + +static void ggml_compute_forward_sub_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + assert(params->ith == 0); + assert(ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int nr = ggml_nrows(src0); + const int64_t ne0 = src0->ne[0]; + const int64_t ne1 = src0->ne[1]; + const int64_t ne2 = src0->ne[2]; + + const size_t nb00 = src0->nb[0]; + const size_t nb01 = src0->nb[1]; + const size_t nb02 = src0->nb[2]; + const size_t nb03 = src0->nb[3]; + + const size_t nb10 = src1->nb[0]; + const size_t nb11 = src1->nb[1]; + const size_t nb12 = src1->nb[2]; + const size_t nb13 = src1->nb[3]; + + const size_t nb0 = dst->nb[0]; + const size_t nb1 = dst->nb[1]; + const size_t nb2 = dst->nb[2]; + const size_t nb3 = dst->nb[3]; + + GGML_ASSERT( nb0 == sizeof(float)); + GGML_ASSERT(nb00 == sizeof(float)); + + if (nb10 == sizeof(float)) { + for (int ir = 0; ir < nr; ++ir) { + // src0, src1 and dst are same shape => same indices + const int i3 = ir/(ne2*ne1); + const int i2 = (ir - i3*ne2*ne1)/ne1; + const int i1 = (ir - i3*ne2*ne1 - i2*ne1); + + +#ifdef GGML_USE_ACCELERATE + vDSP_vsub( + (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11), 1, + (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01), 1, + (float *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 ), 1, + ne0); +#else + ggml_vec_sub_f32(ne0, + (float *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 ), + (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01), + (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11)); +#endif + // } + // } + } + } else { + // src1 is not contiguous + for (int ir = 0; ir < nr; ++ir) { + // src0, src1 and dst are same shape => same indices + const int i3 = ir/(ne2*ne1); + const int i2 = (ir - i3*ne2*ne1)/ne1; + const int i1 = (ir - i3*ne2*ne1 - i2*ne1); + + float * dst_ptr = (float *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 ); + float * src0_ptr = (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01); + for (int i0 = 0; i0 < ne0; i0++) { + float * src1_ptr = (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11 + i0*nb10); + + dst_ptr[i0] = src0_ptr[i0] - *src1_ptr; + } + } + } +} + +static void ggml_compute_forward_sub( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_sub_f32(params, src0, src1, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_mul + +static void ggml_compute_forward_mul_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + GGML_ASSERT(ggml_can_repeat_rows(src1, src0) && ggml_are_same_shape(src0, dst)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + const int ith = params->ith; + const int nth = params->nth; + +#ifdef GGML_USE_CUBLAS + if (src1->backend == GGML_BACKEND_CUDA) { + if (ith == 0) { + ggml_cuda_mul(src0, src1, dst); + } + return; + } +#endif + + const int64_t nr = ggml_nrows(src0); + + const int64_t ne00 = src0->ne[0]; + const int64_t ne01 = src0->ne[1]; + const int64_t ne02 = src0->ne[2]; + + const int64_t ne10 = src1->ne[0]; + const int64_t ne11 = src1->ne[1]; + const int64_t ne12 = src1->ne[2]; + const int64_t ne13 = src1->ne[3]; + + const size_t nb00 = src0->nb[0]; + const size_t nb01 = src0->nb[1]; + const size_t nb02 = src0->nb[2]; + const size_t nb03 = src0->nb[3]; + + const size_t nb10 = src1->nb[0]; + const size_t nb11 = src1->nb[1]; + const size_t nb12 = src1->nb[2]; + const size_t nb13 = src1->nb[3]; + + const size_t nb0 = dst->nb[0]; + const size_t nb1 = dst->nb[1]; + const size_t nb2 = dst->nb[2]; + const size_t nb3 = dst->nb[3]; + + GGML_ASSERT( nb0 == sizeof(float)); + GGML_ASSERT(nb00 == sizeof(float)); + GGML_ASSERT(ne00 == ne10); + + if (nb10 == sizeof(float)) { + for (int64_t ir = ith; ir < nr; ir += nth) { + // src0 and dst are same shape => same indices + const int64_t i03 = ir/(ne02*ne01); + const int64_t i02 = (ir - i03*ne02*ne01)/ne01; + const int64_t i01 = (ir - i03*ne02*ne01 - i02*ne01); + + const int64_t i13 = i03 % ne13; + const int64_t i12 = i02 % ne12; + const int64_t i11 = i01 % ne11; + + float * dst_ptr = (float *) ((char *) dst->data + i03*nb3 + i02*nb2 + i01*nb1 ); + float * src0_ptr = (float *) ((char *) src0->data + i03*nb03 + i02*nb02 + i01*nb01); + float * src1_ptr = (float *) ((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11); + +#ifdef GGML_USE_ACCELERATE + UNUSED(ggml_vec_mul_f32); + + vDSP_vmul( src0_ptr, 1, src1_ptr, 1, dst_ptr, 1, ne00); +#else + ggml_vec_mul_f32(ne00, dst_ptr, src0_ptr, src1_ptr); +#endif + // } + // } + } + } else { + // src1 is not contiguous + for (int64_t ir = ith; ir < nr; ir += nth) { + // src0 and dst are same shape => same indices + // src1 is broadcastable across src0 and dst in i1, i2, i3 + const int64_t i03 = ir/(ne02*ne01); + const int64_t i02 = (ir - i03*ne02*ne01)/ne01; + const int64_t i01 = (ir - i03*ne02*ne01 - i02*ne01); + + const int64_t i13 = i03 % ne13; + const int64_t i12 = i02 % ne12; + const int64_t i11 = i01 % ne11; + + float * dst_ptr = (float *) ((char *) dst->data + i03*nb3 + i02*nb2 + i01*nb1 ); + float * src0_ptr = (float *) ((char *) src0->data + i03*nb03 + i02*nb02 + i01*nb01); + + for (int64_t i0 = 0; i0 < ne00; i0++) { + float * src1_ptr = (float *) ((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11 + i0*nb10); + + dst_ptr[i0] = src0_ptr[i0] * (*src1_ptr); + } + } + } +} + +static void ggml_compute_forward_mul( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_mul_f32(params, src0, src1, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_div + +static void ggml_compute_forward_div_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + assert(params->ith == 0); + assert(ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int nr = ggml_nrows(src0); + const int64_t ne0 = src0->ne[0]; + const int64_t ne1 = src0->ne[1]; + const int64_t ne2 = src0->ne[2]; + + const size_t nb00 = src0->nb[0]; + const size_t nb01 = src0->nb[1]; + const size_t nb02 = src0->nb[2]; + const size_t nb03 = src0->nb[3]; + + const size_t nb10 = src1->nb[0]; + const size_t nb11 = src1->nb[1]; + const size_t nb12 = src1->nb[2]; + const size_t nb13 = src1->nb[3]; + + const size_t nb0 = dst->nb[0]; + const size_t nb1 = dst->nb[1]; + const size_t nb2 = dst->nb[2]; + const size_t nb3 = dst->nb[3]; + + GGML_ASSERT( nb0 == sizeof(float)); + GGML_ASSERT(nb00 == sizeof(float)); + + if (nb10 == sizeof(float)) { + for (int ir = 0; ir < nr; ++ir) { + // src0, src1 and dst are same shape => same indices + const int i3 = ir/(ne2*ne1); + const int i2 = (ir - i3*ne2*ne1)/ne1; + const int i1 = (ir - i3*ne2*ne1 - i2*ne1); + + +#ifdef GGML_USE_ACCELERATE + vDSP_vdiv( + (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11), 1, + (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01), 1, + (float *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 ), 1, + ne0); +#else + ggml_vec_div_f32(ne0, + (float *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 ), + (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01), + (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11)); +#endif + // } + // } + } + } else { + // src1 is not contiguous + for (int ir = 0; ir < nr; ++ir) { + // src0, src1 and dst are same shape => same indices + const int i3 = ir/(ne2*ne1); + const int i2 = (ir - i3*ne2*ne1)/ne1; + const int i1 = (ir - i3*ne2*ne1 - i2*ne1); + + float * dst_ptr = (float *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 ); + float * src0_ptr = (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01); + for (int i0 = 0; i0 < ne0; i0++) { + float * src1_ptr = (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11 + i0*nb10); + + dst_ptr[i0] = src0_ptr[i0] / (*src1_ptr); + } + } + } +} + +static void ggml_compute_forward_div( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_div_f32(params, src0, src1, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_sqr + +static void ggml_compute_forward_sqr_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + assert(params->ith == 0); + assert(ggml_are_same_shape(src0, dst)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int n = ggml_nrows(src0); + const int nc = src0->ne[0]; + + assert( dst->nb[0] == sizeof(float)); + assert(src0->nb[0] == sizeof(float)); + + for (int i = 0; i < n; i++) { + ggml_vec_sqr_f32(nc, + (float *) ((char *) dst->data + i*( dst->nb[1])), + (float *) ((char *) src0->data + i*(src0->nb[1]))); + } +} + +static void ggml_compute_forward_sqr( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_sqr_f32(params, src0, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_sqrt + +static void ggml_compute_forward_sqrt_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + assert(params->ith == 0); + assert(ggml_are_same_shape(src0, dst)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int n = ggml_nrows(src0); + const int nc = src0->ne[0]; + + assert( dst->nb[0] == sizeof(float)); + assert(src0->nb[0] == sizeof(float)); + + for (int i = 0; i < n; i++) { + ggml_vec_sqrt_f32(nc, + (float *) ((char *) dst->data + i*( dst->nb[1])), + (float *) ((char *) src0->data + i*(src0->nb[1]))); + } +} + +static void ggml_compute_forward_sqrt( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_sqrt_f32(params, src0, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + + +// ggml_compute_forward_log + +static void ggml_compute_forward_log_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + GGML_ASSERT(params->ith == 0); + GGML_ASSERT(ggml_are_same_shape(src0, dst)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int n = ggml_nrows(src0); + const int nc = src0->ne[0]; + + GGML_ASSERT( dst->nb[0] == sizeof(float)); + GGML_ASSERT(src0->nb[0] == sizeof(float)); + + for (int i = 0; i < n; i++) { + ggml_vec_log_f32(nc, + (float *) ((char *) dst->data + i*( dst->nb[1])), + (float *) ((char *) src0->data + i*(src0->nb[1]))); + } +} + +static void ggml_compute_forward_log( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_log_f32(params, src0, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_sum + +static void ggml_compute_forward_sum_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + assert(params->ith == 0); + assert(ggml_is_scalar(dst)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + assert(ggml_is_scalar(dst)); + assert(src0->nb[0] == sizeof(float)); + + const int64_t ne00 = src0->ne[0]; + const int64_t ne01 = src0->ne[1]; + const int64_t ne02 = src0->ne[2]; + const int64_t ne03 = src0->ne[3]; + + const size_t nb01 = src0->nb[1]; + const size_t nb02 = src0->nb[2]; + const size_t nb03 = src0->nb[3]; + + ggml_float sum = 0; + ggml_float row_sum = 0; + + for (int64_t i03 = 0; i03 < ne03; i03++) { + for (int64_t i02 = 0; i02 < ne02; i02++) { + for (int64_t i01 = 0; i01 < ne01; i01++) { + ggml_vec_sum_ggf(ne00, + &row_sum, + (float *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03)); + sum += row_sum; + } + } + } + ((float *) dst->data)[0] = sum; +} + +static void ggml_compute_forward_sum( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_sum_f32(params, src0, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_sum_rows + +static void ggml_compute_forward_sum_rows_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + GGML_ASSERT(params->ith == 0); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + GGML_ASSERT(src0->nb[0] == sizeof(float)); + GGML_ASSERT(dst->nb[0] == sizeof(float)); + + const int64_t ne00 = src0->ne[0]; + const int64_t ne01 = src0->ne[1]; + const int64_t ne02 = src0->ne[2]; + const int64_t ne03 = src0->ne[3]; + + const int64_t ne0 = dst->ne[0]; + const int64_t ne1 = dst->ne[1]; + const int64_t ne2 = dst->ne[2]; + const int64_t ne3 = dst->ne[3]; + + GGML_ASSERT(ne0 == 1); + GGML_ASSERT(ne1 == ne01); + GGML_ASSERT(ne2 == ne02); + GGML_ASSERT(ne3 == ne03); + + const size_t nb01 = src0->nb[1]; + const size_t nb02 = src0->nb[2]; + const size_t nb03 = src0->nb[3]; + + const size_t nb1 = dst->nb[1]; + const size_t nb2 = dst->nb[2]; + const size_t nb3 = dst->nb[3]; + + for (int64_t i3 = 0; i3 < ne03; i3++) { + for (int64_t i2 = 0; i2 < ne02; i2++) { + for (int64_t i1 = 0; i1 < ne01; i1++) { + float* src_row = (float *) ((char *) src0->data + i1*nb01 + i2*nb02 + i3*nb03); + float* dst_row = (float *) ((char *) dst->data + i1*nb1 + i2*nb2 + i3*nb3); + float row_sum = 0; + ggml_vec_sum_f32(ne00, &row_sum, src_row); + dst_row[0] = row_sum; + } + } + } +} + +static void ggml_compute_forward_sum_rows( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_sum_rows_f32(params, src0, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_mean + +static void ggml_compute_forward_mean_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + assert(params->ith == 0); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + assert(src0->nb[0] == sizeof(float)); + + const int64_t ne00 = src0->ne[0]; + const int64_t ne01 = src0->ne[1]; + const int64_t ne02 = src0->ne[2]; + const int64_t ne03 = src0->ne[3]; + + const size_t nb01 = src0->nb[1]; + const size_t nb02 = src0->nb[2]; + const size_t nb03 = src0->nb[3]; + + const int64_t ne0 = dst->ne[0]; + const int64_t ne1 = dst->ne[1]; + const int64_t ne2 = dst->ne[2]; + const int64_t ne3 = dst->ne[3]; + + assert(ne0 == 1); + assert(ne1 == ne01); + assert(ne2 == ne02); + assert(ne3 == ne03); + + UNUSED(ne0); + UNUSED(ne1); + UNUSED(ne2); + UNUSED(ne3); + + const size_t nb1 = dst->nb[1]; + const size_t nb2 = dst->nb[2]; + const size_t nb3 = dst->nb[3]; + + for (int64_t i03 = 0; i03 < ne03; i03++) { + for (int64_t i02 = 0; i02 < ne02; i02++) { + for (int64_t i01 = 0; i01 < ne01; i01++) { + ggml_vec_sum_f32(ne00, + (float *) ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3), + (float *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03)); + + *(float *) ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3) /= (float) ne00; + } + } + } +} + +static void ggml_compute_forward_mean( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_mean_f32(params, src0, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_repeat + +static void ggml_compute_forward_repeat_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + GGML_ASSERT(params->ith == 0); + GGML_ASSERT(ggml_can_repeat(src0, dst)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int64_t ne0 = dst->ne[0]; + const int64_t ne1 = dst->ne[1]; + const int64_t ne2 = dst->ne[2]; + const int64_t ne3 = dst->ne[3]; + + const int64_t ne00 = src0->ne[0]; + const int64_t ne01 = src0->ne[1]; + const int64_t ne02 = src0->ne[2]; + const int64_t ne03 = src0->ne[3]; + + const size_t nb0 = dst->nb[0]; + const size_t nb1 = dst->nb[1]; + const size_t nb2 = dst->nb[2]; + const size_t nb3 = dst->nb[3]; + + const size_t nb00 = src0->nb[0]; + const size_t nb01 = src0->nb[1]; + const size_t nb02 = src0->nb[2]; + const size_t nb03 = src0->nb[3]; + + // guaranteed to be an integer due to the check in ggml_can_repeat + const int nr0 = (int)(ne0/ne00); + const int nr1 = (int)(ne1/ne01); + const int nr2 = (int)(ne2/ne02); + const int nr3 = (int)(ne3/ne03); + + // TODO: support for transposed / permuted tensors + GGML_ASSERT(nb0 == sizeof(float)); + GGML_ASSERT(nb00 == sizeof(float)); + + // TODO: maybe this is not optimal? + for (int i3 = 0; i3 < nr3; i3++) { + for (int k3 = 0; k3 < ne03; k3++) { + for (int i2 = 0; i2 < nr2; i2++) { + for (int k2 = 0; k2 < ne02; k2++) { + for (int i1 = 0; i1 < nr1; i1++) { + for (int k1 = 0; k1 < ne01; k1++) { + for (int i0 = 0; i0 < nr0; i0++) { + ggml_vec_cpy_f32(ne00, + (float *) ((char *) dst->data + (i3*ne03 + k3)*nb3 + (i2*ne02 + k2)*nb2 + (i1*ne01 + k1)*nb1 + (i0*ne00)*nb0), + (float *) ((char *) src0->data + ( k3)*nb03 + ( k2)*nb02 + ( k1)*nb01)); + } + } + } + } + } + } + } +} + +static void ggml_compute_forward_repeat( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_repeat_f32(params, src0, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_abs + +static void ggml_compute_forward_abs_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + assert(params->ith == 0); + assert(ggml_are_same_shape(src0, dst)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int n = ggml_nrows(src0); + const int nc = src0->ne[0]; + + assert(dst->nb[0] == sizeof(float)); + assert(src0->nb[0] == sizeof(float)); + + for (int i = 0; i < n; i++) { + ggml_vec_abs_f32(nc, + (float *) ((char *) dst->data + i*( dst->nb[1])), + (float *) ((char *) src0->data + i*(src0->nb[1]))); + } +} + +static void ggml_compute_forward_abs( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_abs_f32(params, src0, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_sgn + +static void ggml_compute_forward_sgn_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + assert(params->ith == 0); + assert(ggml_are_same_shape(src0, dst)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int n = ggml_nrows(src0); + const int nc = src0->ne[0]; + + assert(dst->nb[0] == sizeof(float)); + assert(src0->nb[0] == sizeof(float)); + + for (int i = 0; i < n; i++) { + ggml_vec_sgn_f32(nc, + (float *) ((char *) dst->data + i*( dst->nb[1])), + (float *) ((char *) src0->data + i*(src0->nb[1]))); + } +} + +static void ggml_compute_forward_sgn( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_sgn_f32(params, src0, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_neg + +static void ggml_compute_forward_neg_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + assert(params->ith == 0); + assert(ggml_are_same_shape(src0, dst)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int n = ggml_nrows(src0); + const int nc = src0->ne[0]; + + assert(dst->nb[0] == sizeof(float)); + assert(src0->nb[0] == sizeof(float)); + + for (int i = 0; i < n; i++) { + ggml_vec_neg_f32(nc, + (float *) ((char *) dst->data + i*( dst->nb[1])), + (float *) ((char *) src0->data + i*(src0->nb[1]))); + } +} + +static void ggml_compute_forward_neg( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_neg_f32(params, src0, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_step + +static void ggml_compute_forward_step_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + assert(params->ith == 0); + assert(ggml_are_same_shape(src0, dst)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int n = ggml_nrows(src0); + const int nc = src0->ne[0]; + + assert(dst->nb[0] == sizeof(float)); + assert(src0->nb[0] == sizeof(float)); + + for (int i = 0; i < n; i++) { + ggml_vec_step_f32(nc, + (float *) ((char *) dst->data + i*( dst->nb[1])), + (float *) ((char *) src0->data + i*(src0->nb[1]))); + } +} + +static void ggml_compute_forward_step( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_step_f32(params, src0, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_relu + +static void ggml_compute_forward_relu_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + assert(params->ith == 0); + assert(ggml_are_same_shape(src0, dst)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int n = ggml_nrows(src0); + const int nc = src0->ne[0]; + + assert(dst->nb[0] == sizeof(float)); + assert(src0->nb[0] == sizeof(float)); + + for (int i = 0; i < n; i++) { + ggml_vec_relu_f32(nc, + (float *) ((char *) dst->data + i*( dst->nb[1])), + (float *) ((char *) src0->data + i*(src0->nb[1]))); + } +} + +static void ggml_compute_forward_relu( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_relu_f32(params, src0, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_gelu + +static void ggml_compute_forward_gelu_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + GGML_ASSERT(ggml_is_contiguous(src0)); + GGML_ASSERT(ggml_is_contiguous(dst)); + GGML_ASSERT(ggml_are_same_shape(src0, dst)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int ith = params->ith; + const int nth = params->nth; + + const int nc = src0->ne[0]; + const int nr = ggml_nrows(src0); + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + for (int i1 = ir0; i1 < ir1; i1++) { + ggml_vec_gelu_f32(nc, + (float *) ((char *) dst->data + i1*( dst->nb[1])), + (float *) ((char *) src0->data + i1*(src0->nb[1]))); + +#ifndef NDEBUG + for (int k = 0; k < nc; k++) { + const float x = ((float *) ((char *) dst->data + i1*( dst->nb[1])))[k]; + UNUSED(x); + assert(!isnan(x)); + assert(!isinf(x)); + } +#endif + } +} + +static void ggml_compute_forward_gelu( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_gelu_f32(params, src0, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } + + //printf("XXXXXXXX gelu\n"); +} + +// ggml_compute_forward_silu + +static void ggml_compute_forward_silu_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + GGML_ASSERT(ggml_is_contiguous(src0)); + GGML_ASSERT(ggml_is_contiguous(dst)); + GGML_ASSERT(ggml_are_same_shape(src0, dst)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int ith = params->ith; + const int nth = params->nth; + + const int nc = src0->ne[0]; + const int nr = ggml_nrows(src0); + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + for (int i1 = ir0; i1 < ir1; i1++) { + ggml_vec_silu_f32(nc, + (float *) ((char *) dst->data + i1*( dst->nb[1])), + (float *) ((char *) src0->data + i1*(src0->nb[1]))); + +#ifndef NDEBUG + for (int k = 0; k < nc; k++) { + const float x = ((float *) ((char *) dst->data + i1*( dst->nb[1])))[k]; + UNUSED(x); + assert(!isnan(x)); + assert(!isinf(x)); + } +#endif + } +} + +static void ggml_compute_forward_silu( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_silu_f32(params, src0, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + + +// ggml_compute_forward_silu_back + +static void ggml_compute_forward_silu_back_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * grad, + struct ggml_tensor * dst) { + GGML_ASSERT(ggml_is_contiguous(grad)); + GGML_ASSERT(ggml_is_contiguous(src0)); + GGML_ASSERT(ggml_is_contiguous(dst)); + GGML_ASSERT(ggml_are_same_shape(src0, dst)); + GGML_ASSERT(ggml_are_same_shape(src0, grad)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int ith = params->ith; + const int nth = params->nth; + + const int nc = src0->ne[0]; + const int nr = ggml_nrows(src0); + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + for (int i1 = ir0; i1 < ir1; i1++) { + ggml_vec_silu_backward_f32(nc, + (float *) ((char *) dst->data + i1*( dst->nb[1])), + (float *) ((char *) src0->data + i1*(src0->nb[1])), + (float *) ((char *) grad->data + i1*(grad->nb[1]))); + +#ifndef NDEBUG + for (int k = 0; k < nc; k++) { + const float x = ((float *) ((char *) dst->data + i1*( dst->nb[1])))[k]; + UNUSED(x); + assert(!isnan(x)); + assert(!isinf(x)); + } +#endif + } +} + +static void ggml_compute_forward_silu_back( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * grad, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_silu_back_f32(params, src0, grad, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_norm + +static void ggml_compute_forward_norm_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + GGML_ASSERT(ggml_are_same_shape(src0, dst)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + GGML_ASSERT(src0->nb[0] == sizeof(float)); + + const int ith = params->ith; + const int nth = params->nth; + + const int64_t ne00 = src0->ne[0]; + const int64_t ne01 = src0->ne[1]; + const int64_t ne02 = src0->ne[2]; + const int64_t ne03 = src0->ne[3]; + + const size_t nb01 = src0->nb[1]; + const size_t nb02 = src0->nb[2]; + const size_t nb03 = src0->nb[3]; + + const size_t nb1 = dst->nb[1]; + const size_t nb2 = dst->nb[2]; + const size_t nb3 = dst->nb[3]; + + const float eps = 1e-5f; // TODO: make this a parameter + + // TODO: optimize + for (int64_t i03 = 0; i03 < ne03; i03++) { + for (int64_t i02 = 0; i02 < ne02; i02++) { + for (int64_t i01 = ith; i01 < ne01; i01 += nth) { + const float * x = (float *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03); + + ggml_float sum = 0.0; + for (int64_t i00 = 0; i00 < ne00; i00++) { + sum += (ggml_float)x[i00]; + } + + float mean = sum/ne00; + + float * y = (float *) ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3); + + ggml_float sum2 = 0.0; + for (int64_t i00 = 0; i00 < ne00; i00++) { + float v = x[i00] - mean; + y[i00] = v; + sum2 += (ggml_float)(v*v); + } + + float variance = sum2/ne00; + const float scale = 1.0f/sqrtf(variance + eps); + + ggml_vec_scale_f32(ne00, y, scale); + } + } + } +} + +static void ggml_compute_forward_norm( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_norm_f32(params, src0, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +static void ggml_compute_forward_rms_norm_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + GGML_ASSERT(ggml_are_same_shape(src0, dst)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + GGML_ASSERT(src0->nb[0] == sizeof(float)); + + const int ith = params->ith; + const int nth = params->nth; + + const int64_t ne00 = src0->ne[0]; + const int64_t ne01 = src0->ne[1]; + const int64_t ne02 = src0->ne[2]; + const int64_t ne03 = src0->ne[3]; + + const size_t nb01 = src0->nb[1]; + const size_t nb02 = src0->nb[2]; + const size_t nb03 = src0->nb[3]; + + const size_t nb1 = dst->nb[1]; + const size_t nb2 = dst->nb[2]; + const size_t nb3 = dst->nb[3]; + + const float eps = 1e-6f; // TODO: make this a parameter + + // TODO: optimize + for (int64_t i03 = 0; i03 < ne03; i03++) { + for (int64_t i02 = 0; i02 < ne02; i02++) { + for (int64_t i01 = ith; i01 < ne01; i01 += nth) { + const float * x = (float *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03); + + ggml_float sum = 0.0; + for (int64_t i00 = 0; i00 < ne00; i00++) { + sum += (ggml_float)(x[i00] * x[i00]); + } + + float mean = sum/ne00; + + float * y = (float *) ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3); + + memcpy(y, x, ne00 * sizeof(float)); + // for (int i00 = 0; i00 < ne00; i00++) { + // y[i00] = x[i00]; + // } + + const float scale = 1.0f/sqrtf(mean + eps); + + ggml_vec_scale_f32(ne00, y, scale); + } + } + } +} + +static void ggml_compute_forward_rms_norm( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_rms_norm_f32(params, src0, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + + +static void ggml_compute_forward_rms_norm_back_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + GGML_ASSERT(ggml_are_same_shape(src0, dst) && ggml_are_same_shape(src0, src1)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + GGML_ASSERT(src0->nb[0] == sizeof(float)); + + const int ith = params->ith; + const int nth = params->nth; + + const int64_t ne00 = src0->ne[0]; + const int64_t ne01 = src0->ne[1]; + const int64_t ne02 = src0->ne[2]; + const int64_t ne03 = src0->ne[3]; + + const size_t nb01 = src0->nb[1]; + const size_t nb02 = src0->nb[2]; + const size_t nb03 = src0->nb[3]; + + const size_t nb11 = src1->nb[1]; + const size_t nb12 = src1->nb[2]; + const size_t nb13 = src1->nb[3]; + + const size_t nb1 = dst->nb[1]; + const size_t nb2 = dst->nb[2]; + const size_t nb3 = dst->nb[3]; + + const float eps = 1e-6f; // TODO: make this a parameter + + // TODO: optimize + for (int64_t i03 = 0; i03 < ne03; i03++) { + for (int64_t i02 = 0; i02 < ne02; i02++) { + for (int64_t i01 = ith; i01 < ne01; i01 += nth) { + // src1 is same shape as src0 => same indices + const int64_t i11 = i01; + const int64_t i12 = i02; + const int64_t i13 = i03; + + const float * x = (float *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03); + const float * dz = (float *) ((char *) src1->data + i11*nb11 + i12*nb12 + i13*nb13); + + ggml_float sum_xx = 0.0; + ggml_float sum_xdz = 0.0; + + for (int64_t i00 = 0; i00 < ne00; i00++) { + sum_xx += (ggml_float)(x[i00] * x[i00]); + sum_xdz += (ggml_float)(x[i00] * dz[i00]); + } + + //const float mean = (float)(sum_xx)/ne00; + const float mean_eps = (float)(sum_xx)/ne00 + eps; + const float sum_eps = (float)(sum_xx) + eps*ne00; + //const float mean_xdz = (float)(sum_xdz)/ne00; + // we could cache rms from forward pass to improve performance. + // to do this implement ggml_rms and compose ggml_rms_norm using ggml_rms. + //const float rms = sqrtf(mean_eps); + const float rrms = 1.0f / sqrtf(mean_eps); + //const float scale = -rrms/(ne00 * mean_eps); // -1/(n*rms**3) + + { + // z = rms_norm(x) + // + // rms_norm(src0) = + // scale( + // src0, + // div( + // 1, + // sqrt( + // add( + // scale( + // sum( + // sqr( + // src0)), + // (1.0/N)), + // eps)))); + + // postorder: + // ## op args grad + // 00 param src0 grad[#00] + // 01 const 1 + // 02 sqr (#00) grad[#02] + // 03 sum (#02) grad[#03] + // 04 const 1/N + // 05 scale (#03, #04) grad[#05] + // 06 const eps + // 07 add (#05, #06) grad[#07] + // 08 sqrt (#07) grad[#08] + // 09 div (#01,#08) grad[#09] + // 10 scale (#00,#09) grad[#10] + // + // backward pass, given grad[#10] + // #10: scale + // grad[#00] += scale(grad[#10],#09) + // grad[#09] += sum(mul(grad[#10],#00)) + // #09: div + // grad[#08] += neg(mul(grad[#09], div(#09,#08))) + // #08: sqrt + // grad[#07] += mul(grad[#08], div(0.5, #08)) + // #07: add + // grad[#05] += grad[#07] + // #05: scale + // grad[#03] += scale(grad[#05],#04) + // #03: sum + // grad[#02] += repeat(grad[#03], #02) + // #02: + // grad[#00] += scale(mul(#00, grad[#02]), 2.0) + // + // substitute and simplify: + // grad[#00] = scale(grad(#10), #09) + scale(mul(#00, grad[#02]), 2.0) + // grad[#02] = repeat(grad[#03], #02) + // grad[#02] = repeat(scale(grad[#05],#04), #02) + // grad[#02] = repeat(scale(grad[#07],#04), #02) + // grad[#02] = repeat(scale(mul(grad[#08], div(0.5, #08)),#04), #02) + // grad[#02] = repeat(scale(mul(neg(mul(grad[#09], div(#09,#08))), div(0.5, #08)),#04), #02) + // grad[#02] = repeat(scale(mul(neg(mul(sum(mul(grad[#10],#00)), div(#09,#08))), div(0.5, #08)),#04), #02) + // grad[#02] = repeat(-(sum(mul(grad[#10],#00)) * div(#09,#08) * div(0.5, #08) * (1/N)), #02) + // grad[#02] = repeat(-(sum(mul(grad[#10],#00)) * div(div(#01,#08),#08) * div(0.5, #08) * (1/N)), #02) + // grad[#02] = repeat(-(sum(mul(grad[#10],#00)) * div(1,#08*#08) * div(0.5, #08) * (1/N)), #02) + // grad[#02] = repeat(-(sum(mul(grad[#10],#00)) * div(1,#07) * div(0.5, #08) * (1/N)), #02) + // grad[#00] = scale(grad(#10), #09) + scale(mul(#00, grad[#02]), 2.0) + // grad[#00] = scale(grad(#10), #09) + scale(mul(#00, repeat(-(sum(mul(grad[#10],#00)) * div(1,#07) * div(0.5, #08) * (1/N)), #02)), 2.0) + // grad[#00] = scale(grad(#10), #09) + scale(scale(#00, -(sum(mul(grad[#10],#00)) * div(1,#07) * div(0.5, #08) * (1/N))), 2.0) + // grad[#00] = scale(grad(#10), #09) + scale(#00, -(sum(mul(grad[#10],#00)) * div(1,#07) * div(1,#08) * (1/N))) + // grad[#00] = scale(grad(#10), #09) + scale(#00, sum(mul(grad[#10],#00)) * div(1,#07*#08) * (-1/N)) + // grad[#00] = scale(grad(#10), #09) + scale(#00, sum(mul(grad[#10],#00)) * div(1,#07*#08) * (-1/N)) + // grad[#00] = scale(grad(#10), #09) + scale(#00, sum(mul(grad[#10],#00)) * div(1,mean_eps*rms) * (-1/N)) + // grad[#00] = scale(grad(#10), #09) + scale(#00, sum(mul(grad[#10],#00)) * div(-1,rms*N*mean_eps)) + // grad[#00] = scale(grad(#10), #09) + scale(#00, sum(mul(grad[#10],#00)) * div(-1,rms*N*(sum_xx/N+eps))) + // grad[#00] = scale(grad(#10), #09) + scale(#00, sum(mul(grad[#10],#00)) * div(-1,rms*N*sum_xx+rms*N*eps)) + // grad[#00] = scale(dz, rrms) + scale(x, sum(mul(dz,x)) * div(-1,rms*N*mean_eps)) + // grad[#00] = scale(dz, rrms) + scale(x, sum_xdz * div(-1,rms*N*mean_eps)) + // a = b*c + d*e + // a = b*c*f/f + d*e*f/f + // a = (b*c*f + d*e*f)*(1/f) + // a = (b*c*(1/c) + d*e*(1/c))*(1/(1/c)) + // a = (b + d*e/c)*c + // b = dz, c = rrms, d = x, e = sum_xdz * div(-1,rms*N*mean_eps) + // a = (dz + x*sum_xdz * div(-1,rms*N*mean_eps)/rrms)*rrms + // a = (dz + x*sum_xdz * div(-1,rms*N*mean_eps)*rms)*rrms + // a = (dz + x*sum_xdz * div(-rms,rms*N*mean_eps))*rrms + // a = (dz + x*sum_xdz * div(-1,N*mean_eps))*rrms + // a = (dz + x*div(-sum_xdz,N*mean_eps))*rrms + // a = (dz + x*div(-mean_xdz,mean_eps))*rrms + // grad[#00] = scale(dz + scale(x, div(-mean_xdz,mean_eps)),rrms) + // grad[#00] = scale(dz + scale(x, -mean_xdz/mean_eps),rrms) + // dx = scale(dz + scale(x, -mean_xdz/mean_eps),rrms) + } + // dx = scale(dz + scale(x, -mean_xdz/mean_eps),rrms) + // post-order: + // dx := x + // dx := scale(dx,-mean_xdz/mean_eps) + // dx := add(dx, dz) + // dx := scale(dx, rrms) + float * dx = (float *) ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3); + + ggml_vec_cpy_f32 (ne00, dx, x); + // ggml_vec_scale_f32(ne00, dx, -mean_xdz/mean_eps); + ggml_vec_scale_f32(ne00, dx, (float)(-sum_xdz)/sum_eps); + ggml_vec_acc_f32 (ne00, dx, dz); + ggml_vec_scale_f32(ne00, dx, rrms); + } + } + } +} + +static void ggml_compute_forward_rms_norm_back( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_rms_norm_back_f32(params, src0, src1, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + + +// ggml_compute_forward_mul_mat + +#if defined(GGML_USE_ACCELERATE) || defined(GGML_USE_OPENBLAS) || defined(GGML_USE_CLBLAST) +// helper function to determine if it is better to use BLAS or not +// for large matrices, BLAS is faster +static bool ggml_compute_forward_mul_mat_use_blas( + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + //const int64_t ne00 = src0->ne[0]; + //const int64_t ne01 = src0->ne[1]; + + const int64_t ne10 = src1->ne[0]; + + const int64_t ne0 = dst->ne[0]; + const int64_t ne1 = dst->ne[1]; + + // TODO: find the optimal values for these + if (ggml_is_contiguous(src0) && + ggml_is_contiguous(src1) && + (ne0 >= 32 && ne1 >= 32 && ne10 >= 32)) { + + /*printf("BLAS: %d %d %d %d %d\n", ne0, ne1, ne10, ne00, ne01);*/ + return true; + } + + return false; +} +#endif + +static void ggml_compute_forward_mul_mat_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + int64_t t0 = ggml_perf_time_us(); + UNUSED(t0); + + const int64_t ne00 = src0->ne[0]; + const int64_t ne01 = src0->ne[1]; + const int64_t ne02 = src0->ne[2]; + const int64_t ne03 = src0->ne[3]; + +#if defined(GGML_USE_ACCELERATE) || defined(GGML_USE_OPENBLAS) || defined(GGML_USE_CLBLAST) + const int64_t ne10 = src1->ne[0]; +#endif + const int64_t ne11 = src1->ne[1]; +#ifndef NDEBUG + const int64_t ne12 = src1->ne[2]; + const int64_t ne13 = src1->ne[3]; + + const int64_t ne0 = dst->ne[0]; + const int64_t ne1 = dst->ne[1]; + const int64_t ne2 = dst->ne[2]; + const int64_t ne3 = dst->ne[3]; + + const int nb00 = src0->nb[0]; +#endif + const int nb01 = src0->nb[1]; + const int nb02 = src0->nb[2]; + const int nb03 = src0->nb[3]; + +#ifndef NDEBUG + const int nb10 = src1->nb[0]; +#endif + const int nb11 = src1->nb[1]; + const int nb12 = src1->nb[2]; + const int nb13 = src1->nb[3]; + + const int nb0 = dst->nb[0]; + const int nb1 = dst->nb[1]; + const int nb2 = dst->nb[2]; + const int nb3 = dst->nb[3]; + + const int ith = params->ith; + const int nth = params->nth; + + assert(ne02 == ne12); + assert(ne03 == ne13); + assert(ne2 == ne12); + assert(ne3 == ne13); + + // we don't support permuted src0 or src1 + assert(nb00 == sizeof(float)); + assert(nb10 == sizeof(float)); + + // dst cannot be transposed or permuted + assert(nb0 == sizeof(float)); + assert(nb0 <= nb1); + assert(nb1 <= nb2); + assert(nb2 <= nb3); + + assert(ne0 == ne01); + assert(ne1 == ne11); + assert(ne2 == ne02); + assert(ne3 == ne03); + + // nb01 >= nb00 - src0 is not transposed + // compute by src0 rows + +#if defined(GGML_USE_CUBLAS) + if (ggml_cuda_can_mul_mat(src0, src1, dst)) { + if (params->ith == 0 && params->type == GGML_TASK_COMPUTE) { + ggml_cuda_mul_mat(src0, src1, dst, params->wdata, params->wsize); + } + return; + } +#endif + +#if defined(GGML_USE_ACCELERATE) || defined(GGML_USE_OPENBLAS) || defined(GGML_USE_CLBLAST) + if (ggml_compute_forward_mul_mat_use_blas(src0, src1, dst)) { + if (params->ith != 0) { + return; + } + + if (params->type == GGML_TASK_INIT) { + return; + } + + if (params->type == GGML_TASK_FINALIZE) { + return; + } + + for (int64_t i03 = 0; i03 < ne03; i03++) { + for (int64_t i02 = 0; i02 < ne02; i02++) { + const float * x = (float *) ((char *) src0->data + i02*nb02 + i03*nb03); + const float * y = (float *) ((char *) src1->data + i02*nb12 + i03*nb13); + float * d = (float *) ((char *) dst->data + i02*nb2 + i03*nb3); + +#if defined(GGML_USE_CLBLAST) + // zT = y * xT + ggml_cl_sgemm_wrapper(GGML_BLAS_ORDER_ROW_MAJOR, GGML_BLAS_OP_N, GGML_BLAS_OP_T, + ne11, ne01, ne10, + 1.0f, y, ne10, + x, ne10, + 0.0f, d, ne01, + GGML_TYPE_F32); +#else + cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasTrans, + ne11, ne01, ne10, + 1.0f, y, ne10, + x, ne00, + 0.0f, d, ne01); +#endif + } + } + //printf("CBLAS F32 = %f ms, %d x %d x %d x %d\n", (ggml_perf_time_us() - t0)/1000.0, ne0, ne1, ne2, ne3); + + return; + } +#endif + + if (params->type == GGML_TASK_INIT) { + return; + } + + if (params->type == GGML_TASK_FINALIZE) { + return; + } + + // parallelize by src0 rows using ggml_vec_dot_f32 + + // total rows in src0 + const int nr = ne01*ne02*ne03; + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + for (int ir = ir0; ir < ir1; ++ir) { + // src0 indices + const int i03 = ir/(ne02*ne01); + const int i02 = (ir - i03*ne02*ne01)/ne01; + const int i01 = (ir - i03*ne02*ne01 - i02*ne01); + + for (int64_t ic = 0; ic < ne11; ++ic) { + // src1 indices + const int i13 = i03; + const int i12 = i02; + const int i11 = ic; + + // dst indices + const int i0 = i01; + const int i1 = i11; + const int i2 = i02; + const int i3 = i03; + + ggml_vec_dot_f32(ne00, + (float *) ((char *) dst->data + (i0*nb0 + i1*nb1 + i2*nb2 + i3*nb3)), + (float *) ((char *) src0->data + (i01*nb01 + i02*nb02 + i03*nb03)), + (float *) ((char *) src1->data + (i11*nb11 + i12*nb12 + i13*nb13))); + } + } + + //int64_t t1 = ggml_perf_time_us(); + //static int64_t acc = 0; + //acc += t1 - t0; + //if (t1 - t0 > 10) { + // printf("\n"); + // printf("ne00 = %5d, ne01 = %5d, ne02 = %5d, ne03 = %5d\n", ne00, ne01, ne02, ne03); + // printf("nb00 = %5d, nb01 = %5d, nb02 = %5d, nb03 = %5d\n", nb00, nb01, nb02, nb03); + // printf("ne10 = %5d, ne11 = %5d, ne12 = %5d, ne13 = %5d\n", ne10, ne11, ne12, ne13); + // printf("nb10 = %5d, nb11 = %5d, nb12 = %5d, nb13 = %5d\n", nb10, nb11, nb12, nb13); + + // printf("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX task %d/%d: %d us, acc = %d\n", ith, nth, (int) (t1 - t0), (int) acc); + //} +} + +static void ggml_compute_forward_mul_mat_f16_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + int64_t t0 = ggml_perf_time_us(); + UNUSED(t0); + + const int64_t ne00 = src0->ne[0]; + const int64_t ne01 = src0->ne[1]; + const int64_t ne02 = src0->ne[2]; + const int64_t ne03 = src0->ne[3]; + + const int64_t ne10 = src1->ne[0]; + const int64_t ne11 = src1->ne[1]; + const int64_t ne12 = src1->ne[2]; + const int64_t ne13 = src1->ne[3]; + + const int64_t ne0 = dst->ne[0]; + const int64_t ne1 = dst->ne[1]; + const int64_t ne2 = dst->ne[2]; + const int64_t ne3 = dst->ne[3]; + //const int64_t ne = ne0*ne1*ne2*ne3; + + const int nb00 = src0->nb[0]; + const int nb01 = src0->nb[1]; + const int nb02 = src0->nb[2]; + const int nb03 = src0->nb[3]; + + const int nb10 = src1->nb[0]; + const int nb11 = src1->nb[1]; + const int nb12 = src1->nb[2]; + const int nb13 = src1->nb[3]; + + const int nb0 = dst->nb[0]; + const int nb1 = dst->nb[1]; + const int nb2 = dst->nb[2]; + const int nb3 = dst->nb[3]; + + const int ith = params->ith; + const int nth = params->nth; + + GGML_ASSERT(ne02 == ne12); + GGML_ASSERT(ne03 == ne13); + GGML_ASSERT(ne2 == ne12); + GGML_ASSERT(ne3 == ne13); + + // TODO: we don't support permuted src0 + GGML_ASSERT(nb00 == sizeof(ggml_fp16_t)); + + // dst cannot be transposed or permuted + GGML_ASSERT(nb0 == sizeof(float)); + GGML_ASSERT(nb0 <= nb1); + GGML_ASSERT(nb1 <= nb2); + GGML_ASSERT(nb2 <= nb3); + + GGML_ASSERT(ne0 == ne01); + GGML_ASSERT(ne1 == ne11); + GGML_ASSERT(ne2 == ne02); + GGML_ASSERT(ne3 == ne03); + + // nb01 >= nb00 - src0 is not transposed + // compute by src0 rows + +#if defined(GGML_USE_CUBLAS) + if (ggml_cuda_can_mul_mat(src0, src1, dst)) { + if (params->ith == 0 && params->type == GGML_TASK_COMPUTE) { + ggml_cuda_mul_mat(src0, src1, dst, params->wdata, params->wsize); + } + return; + } +#endif + +#if defined(GGML_USE_ACCELERATE) || defined(GGML_USE_OPENBLAS) || defined(GGML_USE_CLBLAST) + if (ggml_compute_forward_mul_mat_use_blas(src0, src1, dst)) { + GGML_ASSERT(nb10 == sizeof(float)); + + if (params->ith != 0) { + return; + } + + if (params->type == GGML_TASK_INIT) { + return; + } + + if (params->type == GGML_TASK_FINALIZE) { + return; + } + + for (int64_t i03 = 0; i03 < ne03; i03++) { + for (int64_t i02 = 0; i02 < ne02; i02++) { + float * const wdata = params->wdata; + { + size_t id = 0; + for (int64_t i01 = 0; i01 < ne01; ++i01) { + for (int64_t i00 = 0; i00 < ne00; ++i00) { + wdata[id++] = GGML_FP16_TO_FP32(*(ggml_fp16_t *) ((char *) src0->data + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00)); + } + } + + assert(id*sizeof(float) <= params->wsize); + } + +#if defined(GGML_USE_CLBLAST) + const float * x = wdata; + const float * y = (float *) ((char *) src1->data + i02*nb12 + i03*nb13); + + float * d = (float *) ((char *) dst->data + i02*nb2 + i03*nb3); + + // zT = y * xT + ggml_cl_sgemm_wrapper(GGML_BLAS_ORDER_ROW_MAJOR, GGML_BLAS_OP_N, GGML_BLAS_OP_T, + ne11, ne01, ne10, + 1.0f, y, ne10, + x, ne10, + 0.0f, d, ne01, + GGML_TYPE_F32); +#else + const float * x = wdata; + const float * y = (float *) ((char *) src1->data + i02*nb12 + i03*nb13); + + float * d = (float *) ((char *) dst->data + i02*nb2 + i03*nb3); + + // zT = y * xT + cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasTrans, + ne11, ne01, ne10, + 1.0f, y, ne10, + x, ne00, + 0.0f, d, ne01); +#endif + } + } + + /*printf("CBLAS F16 = %f ms, %d x %d x %d x %d\n", (ggml_perf_time_us() - t0)/1000.0, ne0, ne1, ne2, ne3);*/ + + return; + } +#endif + + if (params->type == GGML_TASK_INIT) { + ggml_fp16_t * const wdata = params->wdata; + + size_t id = 0; + for (int64_t i13 = 0; i13 < ne13; ++i13) { + for (int64_t i12 = 0; i12 < ne12; ++i12) { + for (int64_t i11 = 0; i11 < ne11; ++i11) { + for (int64_t i10 = 0; i10 < ne10; ++i10) { + wdata[id++] = GGML_FP32_TO_FP16(*(float *)((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11 + i10*nb10)); + } + } + } + } + + GGML_ASSERT(id*sizeof(ggml_fp16_t) <= params->wsize); + + return; + } + + if (params->type == GGML_TASK_FINALIZE) { + return; + } + + // fp16 -> half the size, so divide by 2 + // TODO: do not support transposed src1 + assert(nb10/2 == sizeof(ggml_fp16_t)); + + // parallelize by src0 rows using ggml_vec_dot_f16 + + // total rows in src0 + const int nr = ne01*ne02*ne03; + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + ggml_fp16_t * wdata = params->wdata; + + for (int ir = ir0; ir < ir1; ++ir) { + // src0 indices + const int i03 = ir/(ne02*ne01); + const int i02 = (ir - i03*ne02*ne01)/ne01; + const int i01 = (ir - i03*ne02*ne01 - i02*ne01); + + const int i13 = i03; + const int i12 = i02; + + const int i0 = i01; + const int i2 = i02; + const int i3 = i03; + + ggml_fp16_t * src0_row = (ggml_fp16_t *) ((char *) src0->data + (i01*nb01 + i02*nb02 + i03*nb03)); + ggml_fp16_t * src1_col = wdata + ( 0 + i12*ne11 + i13*ne12*ne11)*ne00; + + float * dst_col = (float *) ((char *) dst->data + (i0*nb0 + 0*nb1 + i2*nb2 + i3*nb3)); + + for (int64_t ic = 0; ic < ne11; ++ic) { + ggml_vec_dot_f16(ne00, &dst_col[ic*ne0], src0_row, src1_col + ic*ne00); + } + } + + //int64_t t1 = ggml_time_us(); + //static int64_t acc = 0; + //acc += t1 - t0; + //if (t1 - t0 > 10) { + // printf("\n"); + // printf("ne00 = %5d, ne01 = %5d, ne02 = %5d, ne03 = %5d\n", ne00, ne01, ne02, ne03); + // printf("nb00 = %5d, nb01 = %5d, nb02 = %5d, nb03 = %5d\n", nb00, nb01, nb02, nb03); + // printf("ne10 = %5d, ne11 = %5d, ne12 = %5d, ne13 = %5d\n", ne10, ne11, ne12, ne13); + + // printf("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX task %d/%d: %d us, acc = %d\n", ith, nth, (int) (t1 - t0), (int) acc); + //} +} + +static void ggml_compute_forward_mul_mat_q_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + int64_t t0 = ggml_perf_time_us(); + UNUSED(t0); + + const int64_t ne00 = src0->ne[0]; + const int64_t ne01 = src0->ne[1]; + const int64_t ne02 = src0->ne[2]; + const int64_t ne03 = src0->ne[3]; + + const int64_t ne10 = src1->ne[0]; + const int64_t ne11 = src1->ne[1]; + const int64_t ne12 = src1->ne[2]; + const int64_t ne13 = src1->ne[3]; + + const int64_t ne0 = dst->ne[0]; + const int64_t ne1 = dst->ne[1]; + const int64_t ne2 = dst->ne[2]; + const int64_t ne3 = dst->ne[3]; + + const int nb00 = src0->nb[0]; + const int nb01 = src0->nb[1]; + const int nb02 = src0->nb[2]; + const int nb03 = src0->nb[3]; + + const int nb10 = src1->nb[0]; + const int nb11 = src1->nb[1]; + const int nb12 = src1->nb[2]; + const int nb13 = src1->nb[3]; + + const int nb0 = dst->nb[0]; + const int nb1 = dst->nb[1]; + const int nb2 = dst->nb[2]; + const int nb3 = dst->nb[3]; + + const int ith = params->ith; + const int nth = params->nth; + + GGML_ASSERT(ne02 == ne12); + GGML_ASSERT(ne03 == ne13); + GGML_ASSERT(ne2 == ne12); + GGML_ASSERT(ne3 == ne13); + + const enum ggml_type type = src0->type; + quantize_row_q_t const quantize_row_q_dot = quantize_fns[type].quantize_row_q_dot; + vec_dot_q_t const vec_dot_q = quantize_fns[type].vec_dot_q; + enum ggml_type const vec_dot_type = quantize_fns[type].vec_dot_type; + + // we don't support permuted src0 or src1 + GGML_ASSERT(nb00 == (int) GGML_TYPE_SIZE[type]); + GGML_ASSERT(nb10 == sizeof(float)); + + // dst cannot be transposed or permuted + GGML_ASSERT(nb0 == sizeof(float)); + GGML_ASSERT(nb0 <= nb1); + GGML_ASSERT(nb1 <= nb2); + GGML_ASSERT(nb2 <= nb3); + + GGML_ASSERT(ne0 == ne01); + GGML_ASSERT(ne1 == ne11); + GGML_ASSERT(ne2 == ne02); + GGML_ASSERT(ne3 == ne03); + + // nb01 >= nb00 - src0 is not transposed + // compute by src0 rows + +#if defined(GGML_USE_CUBLAS) + if (ggml_cuda_can_mul_mat(src0, src1, dst)) { + if (params->ith == 0 && params->type == GGML_TASK_COMPUTE) { + ggml_cuda_mul_mat(src0, src1, dst, params->wdata, params->wsize); + } + return; + } +#endif + +#if defined(GGML_USE_ACCELERATE) || defined(GGML_USE_OPENBLAS) || defined(GGML_USE_CLBLAST) + if (ggml_compute_forward_mul_mat_use_blas(src0, src1, dst)) { + if (params->ith != 0) { + return; + } + + if (params->type == GGML_TASK_INIT) { + return; + } + + if (params->type == GGML_TASK_FINALIZE) { + return; + } + + float * const wdata = params->wdata; + dequantize_row_q_t const dequantize_row_q = quantize_fns[type].dequantize_row_q; + + for (int64_t i03 = 0; i03 < ne03; i03++) { + for (int64_t i02 = 0; i02 < ne02; i02++) { + const float * y = (float *) ((char *) src1->data + i02*nb12 + i03*nb13); + + float * d = (float *) ((char *) dst->data + i02*nb2 + i03*nb3); + +#if defined(GGML_USE_CLBLAST) + const void* x = (char *) src0->data + i03*nb03 + i02*nb02; +#else + { + size_t id = 0; + for (int64_t i01 = 0; i01 < ne01; ++i01) { + dequantize_row_q((char *) src0->data + i03*nb03 + i02*nb02 + i01*nb01, wdata + id, ne00); + id += ne00; + } + + assert(id*sizeof(float) <= params->wsize); + } + + const float * x = wdata; +#endif + +#if defined(GGML_USE_CLBLAST) + // zT = y * xT + ggml_cl_sgemm_wrapper(GGML_BLAS_ORDER_ROW_MAJOR, GGML_BLAS_OP_N, GGML_BLAS_OP_T, + ne11, ne01, ne10, + 1.0f, y, ne10, + x, ne10, + 0.0f, d, ne01, + type); +#else + cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasTrans, + ne11, ne01, ne10, + 1.0f, y, ne10, + x, ne00, + 0.0f, d, ne01); +#endif + } + } + + //printf("CBLAS = %f ms, %d x %d x %d x %d\n", (ggml_perf_time_us() - t0)/1000.0, ne0, ne1, ne2, ne3); + + return; + } +#endif + + if (params->type == GGML_TASK_INIT) { + char * wdata = params->wdata; + const size_t row_size = ne10*GGML_TYPE_SIZE[vec_dot_type]/GGML_BLCK_SIZE[vec_dot_type]; + + for (int64_t i13 = 0; i13 < ne13; ++i13) { + for (int64_t i12 = 0; i12 < ne12; ++i12) { + for (int64_t i11 = 0; i11 < ne11; ++i11) { + quantize_row_q_dot((float *)((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11), (void *) wdata, ne10); + wdata += row_size; + } + } + } + + return; + } + + if (params->type == GGML_TASK_FINALIZE) { + return; + } + + // parallelize by src0 rows using ggml_vec_dot_q + + // total rows in src0 + const int nr = ne01*ne02*ne03; + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + void * wdata = params->wdata; + const size_t row_size = ne00*GGML_TYPE_SIZE[vec_dot_type]/GGML_BLCK_SIZE[vec_dot_type]; + + for (int ir = ir0; ir < ir1; ++ir) { + // src0 indices + const int i03 = ir/(ne02*ne01); + const int i02 = (ir - i03*ne02*ne01)/ne01; + const int i01 = (ir - i03*ne02*ne01 - i02*ne01); + + const int i13 = i03; + const int i12 = i02; + + const int i0 = i01; + const int i2 = i02; + const int i3 = i03; + + void * src0_row = (void *) ((char *) src0->data + (i01*nb01 + i02*nb02 + i03*nb03)); + char * src1_col = ((char *) wdata + ( (0 + i12*ne11 + i13*ne12*ne11)*row_size)); + + float * dst_col = (float *) ((char *) dst->data + (i0*nb0 + 0*nb1 + i2*nb2 + i3*nb3)); + + assert(ne00 % 32 == 0); + + for (int64_t ic = 0; ic < ne11; ++ic) { + vec_dot_q(ne00, &dst_col[ic*ne0], src0_row, (void *) (src1_col + ic*row_size)); + } + } + + //int64_t t1 = ggml_time_us(); + //static int64_t acc = 0; + //acc += t1 - t0; + //if (t1 - t0 > 10) { + // printf("\n"); + // printf("ne00 = %5d, ne01 = %5d, ne02 = %5d, ne03 = %5d\n", ne00, ne01, ne02, ne03); + // printf("nb00 = %5d, nb01 = %5d, nb02 = %5d, nb03 = %5d\n", nb00, nb01, nb02, nb03); + // printf("ne10 = %5d, ne11 = %5d, ne12 = %5d, ne13 = %5d\n", ne10, ne11, ne12, ne13); + + // printf("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX task %d/%d: %d us, acc = %d\n", ith, nth, (int) (t1 - t0), (int) acc); + //} +} + +static void ggml_compute_forward_mul_mat( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_Q4_0: + case GGML_TYPE_Q4_1: + case GGML_TYPE_Q5_0: + case GGML_TYPE_Q5_1: + case GGML_TYPE_Q8_0: + case GGML_TYPE_Q8_1: + { + ggml_compute_forward_mul_mat_q_f32(params, src0, src1, dst); + } break; + case GGML_TYPE_F16: + { + ggml_compute_forward_mul_mat_f16_f32(params, src0, src1, dst); + } break; + case GGML_TYPE_F32: + { + ggml_compute_forward_mul_mat_f32(params, src0, src1, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_scale + +static void ggml_compute_forward_scale_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + GGML_ASSERT(ggml_is_contiguous(src0)); + GGML_ASSERT(ggml_is_contiguous(dst)); + GGML_ASSERT(ggml_are_same_shape(src0, dst)); + GGML_ASSERT(ggml_is_scalar(src1)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + // scale factor + const float v = *(float *) src1->data; + + const int ith = params->ith; + const int nth = params->nth; + + const int nc = src0->ne[0]; + const int nr = ggml_nrows(src0); + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + const size_t nb01 = src0->nb[1]; + + const size_t nb1 = dst->nb[1]; + + + for (int i1 = ir0; i1 < ir1; i1++) { + if (dst->data != src0->data) { + // src0 is same shape as dst => same indices + memcpy((char *)dst->data + i1*nb1, (char *)src0->data + i1*nb01, nc * sizeof(float)); + } + ggml_vec_scale_f32(nc, (float *) ((char *) dst->data + i1*nb1), v); + } +} + +static void ggml_compute_forward_scale( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_scale_f32(params, src0, src1, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_set + +static void ggml_compute_forward_set_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + const struct ggml_tensor * opt0, + struct ggml_tensor * dst) { + GGML_ASSERT(ggml_are_same_shape(src0, dst)); + GGML_ASSERT(ggml_is_contiguous(dst) && ggml_is_contiguous(src0)); + + GGML_ASSERT(opt0->type == GGML_TYPE_I32); + GGML_ASSERT(ggml_nelements(opt0) == 5); + + // view src0 and dst with these strides and data offset inbytes during set + // nb0 is implicitely element_size because src0 and dst are contiguous + size_t nb1 = ((int32_t *) opt0->data)[0]; + size_t nb2 = ((int32_t *) opt0->data)[1]; + size_t nb3 = ((int32_t *) opt0->data)[2]; + size_t offset = ((int32_t *) opt0->data)[3]; + bool inplace = (bool) ((int32_t *) opt0->data)[4]; + + if (!inplace && (params->type == GGML_TASK_INIT)) { + // memcpy needs to be synchronized across threads to avoid race conditions. + // => do it in INIT phase + memcpy( + ((char *) dst->data), + ((char *) src0->data), + ggml_nbytes(dst)); + } + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int ith = params->ith; + const int nth = params->nth; + + const int nr = ggml_nrows(src1); + const int nc = src1->ne[0]; + + const int64_t ne10 = src1->ne[0]; + const int64_t ne11 = src1->ne[1]; + const int64_t ne12 = src1->ne[2]; + const int64_t ne13 = src1->ne[3]; + + const size_t nb10 = src1->nb[0]; + const size_t nb11 = src1->nb[1]; + const size_t nb12 = src1->nb[2]; + const size_t nb13 = src1->nb[3]; + + // src0 and dst as viewed during set + const size_t nb0 = ggml_element_size(src0); + + const int im0 = (ne10 == 0 ? 0 : ne10-1); + const int im1 = (ne11 == 0 ? 0 : ne11-1); + const int im2 = (ne12 == 0 ? 0 : ne12-1); + const int im3 = (ne13 == 0 ? 0 : ne13-1); + + GGML_ASSERT(offset + im0*nb0 + im1*nb1 + im2*nb2 + im3*nb3 < ggml_nbytes(dst)); + + GGML_ASSERT(nb10 == sizeof(float)); + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + for (int ir = ir0; ir < ir1; ++ir) { + // src0 and dst are viewed with shape of src1 and offset + // => same indices + const int i3 = ir/(ne12*ne11); + const int i2 = (ir - i3*ne12*ne11)/ne11; + const int i1 = (ir - i3*ne12*ne11 - i2*ne11); + + ggml_vec_cpy_f32(nc, + (float *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + offset), + (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11)); + } +} + +static void ggml_compute_forward_set( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + const struct ggml_tensor * opt0, + struct ggml_tensor * dst) { + + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_set_f32(params, src0, src1, opt0, dst); + } break; + case GGML_TYPE_F16: + case GGML_TYPE_Q4_0: + case GGML_TYPE_Q4_1: + case GGML_TYPE_Q5_0: + case GGML_TYPE_Q5_1: + case GGML_TYPE_Q8_0: + case GGML_TYPE_Q8_1: + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_cpy + +static void ggml_compute_forward_cpy( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + ggml_compute_forward_dup(params, src0, dst); +} + +// ggml_compute_forward_cont + +static void ggml_compute_forward_cont( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + ggml_compute_forward_dup(params, src0, dst); +} + +// ggml_compute_forward_reshape + +static void ggml_compute_forward_reshape( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + // NOP + UNUSED(params); + UNUSED(src0); + UNUSED(dst); +} + +// ggml_compute_forward_view + +static void ggml_compute_forward_view( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0) { + // NOP + UNUSED(params); + UNUSED(src0); +} + +// ggml_compute_forward_permute + +static void ggml_compute_forward_permute( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0) { + // NOP + UNUSED(params); + UNUSED(src0); +} + +// ggml_compute_forward_transpose + +static void ggml_compute_forward_transpose( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0) { + // NOP + UNUSED(params); + UNUSED(src0); +} + +// ggml_compute_forward_get_rows + +static void ggml_compute_forward_get_rows_q( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + assert(params->ith == 0); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int nc = src0->ne[0]; + const int nr = ggml_nelements(src1); + const enum ggml_type type = src0->type; + dequantize_row_q_t const dequantize_row_q = quantize_fns[type].dequantize_row_q; + + assert( dst->ne[0] == nc); + assert( dst->ne[1] == nr); + assert(src0->nb[0] == GGML_TYPE_SIZE[type]); + + for (int i = 0; i < nr; ++i) { + const int r = ((int32_t *) src1->data)[i]; + + dequantize_row_q( + (const void *) ((char *) src0->data + r*src0->nb[1]), + (float *) ((char *) dst->data + i*dst->nb[1]), nc); + } +} + +static void ggml_compute_forward_get_rows_f16( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + assert(params->ith == 0); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int nc = src0->ne[0]; + const int nr = ggml_nelements(src1); + + assert( dst->ne[0] == nc); + assert( dst->ne[1] == nr); + assert(src0->nb[0] == sizeof(ggml_fp16_t)); + + for (int i = 0; i < nr; ++i) { + const int r = ((int32_t *) src1->data)[i]; + + for (int j = 0; j < nc; ++j) { + ggml_fp16_t v = ((ggml_fp16_t *) ((char *) src0->data + r*src0->nb[1]))[j]; + ((float *) ((char *) dst->data + i*dst->nb[1]))[j] = GGML_FP16_TO_FP32(v); + } + } +} + +static void ggml_compute_forward_get_rows_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + assert(params->ith == 0); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int nc = src0->ne[0]; + const int nr = ggml_nelements(src1); + + assert( dst->ne[0] == nc); + assert( dst->ne[1] == nr); + assert(src0->nb[0] == sizeof(float)); + + for (int i = 0; i < nr; ++i) { + const int r = ((int32_t *) src1->data)[i]; + + ggml_vec_cpy_f32(nc, + (float *) ((char *) dst->data + i*dst->nb[1]), + (float *) ((char *) src0->data + r*src0->nb[1])); + } +} + +static void ggml_compute_forward_get_rows( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_Q4_0: + case GGML_TYPE_Q4_1: + case GGML_TYPE_Q5_0: + case GGML_TYPE_Q5_1: + case GGML_TYPE_Q8_0: + case GGML_TYPE_Q8_1: + { + ggml_compute_forward_get_rows_q(params, src0, src1, dst); + } break; + case GGML_TYPE_F16: + { + ggml_compute_forward_get_rows_f16(params, src0, src1, dst); + } break; + case GGML_TYPE_F32: + { + ggml_compute_forward_get_rows_f32(params, src0, src1, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } + + //static bool first = true; + //printf("ne0 = %d, ne1 = %d, ne2 = %d\n", dst->ne[0], dst->ne[1], dst->ne[2]); + //if (first) { + // first = false; + //} else { + // for (int k = 0; k < dst->ne[1]; ++k) { + // for (int j = 0; j < dst->ne[0]/16; ++j) { + // for (int i = 0; i < 16; ++i) { + // printf("%8.4f ", ((float *) dst->data)[k*dst->ne[0] + j*16 + i]); + // } + // printf("\n"); + // } + // printf("\n"); + // } + // printf("\n"); + // exit(0); + //} +} + +// ggml_compute_forward_get_rows_back + +static void ggml_compute_forward_get_rows_back_f32_f16( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + const struct ggml_tensor * opt0, + struct ggml_tensor * dst) { + GGML_ASSERT(params->ith == 0); + GGML_ASSERT(ggml_are_same_shape(opt0, dst)); + GGML_ASSERT(ggml_is_contiguous(opt0)); + GGML_ASSERT(ggml_is_contiguous(dst)); + + ggml_compute_forward_dup_same_cont(params, opt0, dst); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int nc = src0->ne[0]; + const int nr = ggml_nelements(src1); + + GGML_ASSERT( dst->ne[0] == nc); + GGML_ASSERT(src0->nb[0] == sizeof(ggml_fp16_t)); + + for (int i = 0; i < nr; ++i) { + const int r = ((int32_t *) src1->data)[i]; + + for (int j = 0; j < nc; ++j) { + ggml_fp16_t v = ((ggml_fp16_t *) ((char *) src0->data + i*src0->nb[1]))[j]; + ((float *) ((char *) dst->data + r*dst->nb[1]))[j] += GGML_FP16_TO_FP32(v); + } + } +} + +static void ggml_compute_forward_get_rows_back_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + const struct ggml_tensor * opt0, + struct ggml_tensor * dst) { + GGML_ASSERT(params->ith == 0); + GGML_ASSERT(ggml_are_same_shape(opt0, dst)); + GGML_ASSERT(ggml_is_contiguous(opt0)); + GGML_ASSERT(ggml_is_contiguous(dst)); + + ggml_compute_forward_dup_same_cont(params, opt0, dst); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int nc = src0->ne[0]; + const int nr = ggml_nelements(src1); + + GGML_ASSERT( dst->ne[0] == nc); + GGML_ASSERT(src0->nb[0] == sizeof(float)); + + for (int i = 0; i < nr; ++i) { + const int r = ((int32_t *) src1->data)[i]; + + ggml_vec_add_f32(nc, + (float *) ((char *) dst->data + r*dst->nb[1]), + (float *) ((char *) dst->data + r*dst->nb[1]), + (float *) ((char *) src0->data + i*src0->nb[1])); + } +} + + +static void ggml_compute_forward_get_rows_back( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + const struct ggml_tensor * opt0, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F16: + { + ggml_compute_forward_get_rows_back_f32_f16(params, src0, src1, opt0, dst); + } break; + case GGML_TYPE_F32: + { + ggml_compute_forward_get_rows_back_f32(params, src0, src1, opt0, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } + + //static bool first = true; + //printf("ne0 = %d, ne1 = %d, ne2 = %d\n", dst->ne[0], dst->ne[1], dst->ne[2]); + //if (first) { + // first = false; + //} else { + // for (int k = 0; k < dst->ne[1]; ++k) { + // for (int j = 0; j < dst->ne[0]/16; ++j) { + // for (int i = 0; i < 16; ++i) { + // printf("%8.4f ", ((float *) dst->data)[k*dst->ne[0] + j*16 + i]); + // } + // printf("\n"); + // } + // printf("\n"); + // } + // printf("\n"); + // exit(0); + //} +} + +// ggml_compute_forward_diag + +static void ggml_compute_forward_diag_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + GGML_ASSERT(params->ith == 0); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + // TODO: handle transposed/permuted matrices + + const int ne00 = src0->ne[0]; + const int ne01 = src0->ne[1]; + const int ne02 = src0->ne[2]; + const int ne03 = src0->ne[3]; + const int ne0 = dst->ne[0]; + const int ne1 = dst->ne[1]; + const int ne2 = dst->ne[2]; + const int ne3 = dst->ne[3]; + GGML_ASSERT(ne00 == ne0); + GGML_ASSERT(ne00 == ne1); + GGML_ASSERT(ne01 == 1); + GGML_ASSERT(ne02 == ne2); + GGML_ASSERT(ne03 == ne3); + + const int nb00 = src0->nb[0]; + //const int nb01 = src0->nb[1]; + const int nb02 = src0->nb[2]; + const int nb03 = src0->nb[3]; + const int nb0 = dst->nb[0]; + const int nb1 = dst->nb[1]; + const int nb2 = dst->nb[2]; + const int nb3 = dst->nb[3]; + + GGML_ASSERT(nb00 == sizeof(float)); + GGML_ASSERT(nb0 == sizeof(float)); + + for (int i3 = 0; i3 < ne3; i3++) { + for (int i2 = 0; i2 < ne2; i2++) { + for (int i1 = 0; i1 < ne1; i1++) { + float * d = (float *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1); + float * s = (float *)((char *) src0->data + i3*nb03 + i2*nb02); + for (int i0 = 0; i0 < i1; i0++) { + d[i0] = 0; + } + d[i1] = s[i1]; + for (int i0 = i1+1; i0 < ne0; i0++) { + d[i0] = 0; + } + } + } + } +} + +static void ggml_compute_forward_diag( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_diag_f32(params, src0, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_diag_mask_inf + +static void ggml_compute_forward_diag_mask_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst, + const float value) { + assert(src1->type == GGML_TYPE_I32); + assert(ggml_nelements(src1) == 2); + + const int ith = params->ith; + const int nth = params->nth; + + const int n_past = ((int32_t *) src1->data)[0]; + const bool inplace = (bool)((int32_t *) src1->data)[1]; + + assert(n_past >= 0); + + if (!inplace && (params->type == GGML_TASK_INIT)) { + // memcpy needs to be synchronized across threads to avoid race conditions. + // => do it in INIT phase + GGML_ASSERT(ggml_nelements(dst) == ggml_nelements(src0)); + GGML_ASSERT(ggml_is_contiguous(dst) && ggml_is_contiguous(src0)); + memcpy( + ((char *) dst->data), + ((char *) src0->data), + ggml_nbytes(dst)); + } + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + // TODO: handle transposed/permuted matrices + + const int n = ggml_nrows(src0); + const int nc = src0->ne[0]; + const int nr = src0->ne[1]; + const int nz = n/nr; + + assert( dst->nb[0] == sizeof(float)); + assert(src0->nb[0] == sizeof(float)); + + for (int k = 0; k < nz; k++) { + for (int j = ith; j < nr; j += nth) { + for (int i = n_past; i < nc; i++) { + if (i > n_past + j) { + *(float *)((char *) dst->data + k*dst->nb[2] + j*dst->nb[1] + i*dst->nb[0]) = value; + } + } + } + } +} + +static void ggml_compute_forward_diag_mask_inf( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_diag_mask_f32(params, src0, src1, dst, -INFINITY); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +static void ggml_compute_forward_diag_mask_zero( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_diag_mask_f32(params, src0, src1, dst, 0); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_soft_max + +static void ggml_compute_forward_soft_max_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + GGML_ASSERT(ggml_is_contiguous(src0)); + GGML_ASSERT(ggml_is_contiguous(dst)); + GGML_ASSERT(ggml_are_same_shape(src0, dst)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + // TODO: handle transposed/permuted matrices + + const int ith = params->ith; + const int nth = params->nth; + + const int nc = src0->ne[0]; + const int nr = ggml_nrows(src0); + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + for (int i1 = ir0; i1 < ir1; i1++) { + float *sp = (float *)((char *) src0->data + i1*src0->nb[1]); + float *dp = (float *)((char *) dst->data + i1*dst->nb[1]); + +#ifndef NDEBUG + for (int i = 0; i < nc; ++i) { + //printf("p[%d] = %f\n", i, p[i]); + assert(!isnan(sp[i])); + } +#endif + + float max = -INFINITY; + ggml_vec_max_f32(nc, &max, sp); + + ggml_float sum = 0.0; + + uint16_t scvt; + for (int i = 0; i < nc; i++) { + if (sp[i] == -INFINITY) { + dp[i] = 0.0f; + } else { + // const float val = (sp[i] == -INFINITY) ? 0.0 : exp(sp[i] - max); + ggml_fp16_t s = GGML_FP32_TO_FP16(sp[i] - max); + memcpy(&scvt, &s, sizeof(scvt)); + const float val = GGML_FP16_TO_FP32(table_exp_f16[scvt]); + sum += (ggml_float)val; + dp[i] = val; + } + } + + assert(sum > 0.0); + + sum = 1.0/sum; + ggml_vec_scale_f32(nc, dp, sum); + +#ifndef NDEBUG + for (int i = 0; i < nc; ++i) { + assert(!isnan(dp[i])); + assert(!isinf(dp[i])); + } +#endif + } +} + +static void ggml_compute_forward_soft_max( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_soft_max_f32(params, src0, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_alibi + +static void ggml_compute_forward_alibi_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + assert(params->ith == 0); + assert(src1->type == GGML_TYPE_I32); + assert(ggml_nelements(src1) == 3); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int n_past = ((int32_t *) src1->data)[0]; + const int n_head = ((int32_t *) src1->data)[1]; + const float max_bias = ((float *) src1->data)[2]; + + assert(n_past >= 0); + + const int ne0 = src0->ne[0]; // all_seq_len = n_past + ne1 + const int ne1 = src0->ne[1]; // seq_len_without_past + //const int ne2 = src0->ne[2]; // n_head -> this is k + //const int ne3 = src0->ne[3]; // 1 -> bsz + + const int n = ggml_nrows(src0); + const int ne2_ne3 = n/ne1; // ne2*ne3 + + const int nb0 = src0->nb[0]; + const int nb1 = src0->nb[1]; + const int nb2 = src0->nb[2]; + //const int nb3 = src0->nb[3]; + + assert(nb0 == sizeof(float)); + assert(ne1 + n_past == ne0); (void) n_past; + + // add alibi to src0 (KQ_scaled) + const int n_heads_log2_floor = 1 << (int) floor(log2(n_head)); + + const float m0 = powf(2.0f, -(max_bias) / n_heads_log2_floor); + const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_heads_log2_floor); + + for (int i = 0; i < ne0; i++) { + for (int j = 0; j < ne1; j++) { + for (int k = 0; k < ne2_ne3; k++) { + float * const src = (float *)((char *) src0->data + i*nb0 + j*nb1 + k*nb2); + float * pdst = (float *)((char *) dst->data + i*nb0 + j*nb1 + k*nb2); + + // TODO: k*nb2 or k*nb3 + + float m_k; + + if (k < n_heads_log2_floor) { + m_k = powf(m0, k + 1); + } else { + m_k = powf(m1, 2 * (k - n_heads_log2_floor) + 1); + } + + pdst[0] = (i-ne0+1) * m_k + src[0]; + + } + } + } +} + +static void ggml_compute_forward_alibi_f16( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + assert(params->ith == 0); + assert(src1->type == GGML_TYPE_I32); + assert(ggml_nelements(src1) == 3); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int n_past = ((int32_t *) src1->data)[0]; + const int n_head = ((int32_t *) src1->data)[1]; + const float max_bias = ((float *) src1->data)[2]; + + assert(n_past >= 0); + + const int ne0 = src0->ne[0]; // all_seq_len = n_past + ne1 + const int ne1 = src0->ne[1]; // seq_len_without_past + //const int ne2 = src0->ne[2]; // n_head -> this is k + //const int ne3 = src0->ne[3]; // 1 -> bsz + + const int n = ggml_nrows(src0); + const int ne2_ne3 = n/ne1; // ne2*ne3 + + const int nb0 = src0->nb[0]; + const int nb1 = src0->nb[1]; + const int nb2 = src0->nb[2]; + //const int nb3 = src0->nb[3]; + + assert(nb0 == sizeof(ggml_fp16_t)); + assert(ne1 + n_past == ne0); (void) n_past; + + // add alibi to src0 (KQ_scaled) + const int n_heads_log2_floor = 1 << (int) floor(log2(n_head)); + + const float m0 = powf(2.0f, -(max_bias) / n_heads_log2_floor); + const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_heads_log2_floor); + + for (int i = 0; i < ne0; i++) { + for (int j = 0; j < ne1; j++) { + for (int k = 0; k < ne2_ne3; k++) { + ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i*nb0 + j*nb1 + k*nb2); + float * pdst = (float *)((char *) dst->data + i*nb0 + j*nb1 + k*nb2); + + // TODO: k*nb2 or k*nb3 + + float m_k; + + if (k < n_heads_log2_floor) { + m_k = powf(m0, k + 1); + } else { + m_k = powf(m1, 2 * (k - n_heads_log2_floor) + 1); + } + + // we return F32 + pdst[0] = (i-ne0+1) * m_k + GGML_FP16_TO_FP32(src[0]); + } + } + } +} + +static void ggml_compute_forward_alibi( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F16: + { + ggml_compute_forward_alibi_f16(params, src0, src1, dst); + } break; + case GGML_TYPE_F32: + { + ggml_compute_forward_alibi_f32(params, src0, src1, dst); + } break; + case GGML_TYPE_Q4_0: + case GGML_TYPE_Q4_1: + case GGML_TYPE_Q5_0: + case GGML_TYPE_Q5_1: + case GGML_TYPE_Q8_0: + case GGML_TYPE_Q8_1: + case GGML_TYPE_I8: + case GGML_TYPE_I16: + case GGML_TYPE_I32: + case GGML_TYPE_COUNT: + { + GGML_ASSERT(false); + } break; + } +} + + +// ggml_compute_forward_clamp + +static void ggml_compute_forward_clamp_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + assert(params->ith == 0); + assert(src1->type == GGML_TYPE_I32); + assert(ggml_nelements(src1) == 2); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int min = ((float *) src1->data)[0]; + const int max = ((float *) src1->data)[1]; + + const int ith = params->ith; + const int nth = params->nth; + + const int n = ggml_nrows(src0); + const int nc = src0->ne[0]; + + const size_t nb00 = src0->nb[0]; + const size_t nb01 = src0->nb[1]; + + const size_t nb0 = dst->nb[0]; + const size_t nb1 = dst->nb[1]; + + GGML_ASSERT( nb0 == sizeof(float)); + GGML_ASSERT(nb00 == sizeof(float)); + + for (int j = ith; j < n; j += nth) { + float * dst_ptr = (float *) ((char *) dst->data + j*nb1); + float * src0_ptr = (float *) ((char *) src0->data + j*nb01); + + for (int i = 0; i < nc; i++) { + dst_ptr[i] = MAX(MIN(src0_ptr[i], max), min); + } + } +} + +static void ggml_compute_forward_clamp( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_clamp_f32(params, src0, src1, dst); + } break; + case GGML_TYPE_F16: + case GGML_TYPE_Q4_0: + case GGML_TYPE_Q4_1: + case GGML_TYPE_Q5_0: + case GGML_TYPE_Q5_1: + case GGML_TYPE_Q8_0: + case GGML_TYPE_Q8_1: + case GGML_TYPE_I8: + case GGML_TYPE_I16: + case GGML_TYPE_I32: + case GGML_TYPE_COUNT: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_rope + +static void ggml_compute_forward_rope_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + GGML_ASSERT(src1->type == GGML_TYPE_I32); + GGML_ASSERT(ggml_nelements(src1) == 3); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int n_past = ((int32_t *) src1->data)[0]; + const int n_dims = ((int32_t *) src1->data)[1]; + const int mode = ((int32_t *) src1->data)[2]; + + assert(n_past >= 0); + + const size_t nb00 = src0->nb[0]; + const size_t nb01 = src0->nb[1]; + const size_t nb02 = src0->nb[2]; + const size_t nb03 = src0->nb[3]; + + const int64_t ne0 = dst->ne[0]; + const int64_t ne1 = dst->ne[1]; + const int64_t ne2 = dst->ne[2]; + const int64_t ne3 = dst->ne[3]; + + const size_t nb0 = dst->nb[0]; + const size_t nb1 = dst->nb[1]; + const size_t nb2 = dst->nb[2]; + const size_t nb3 = dst->nb[3]; + + //printf("ne0: %d, ne1: %d, ne2: %d, ne3: %d\n", ne0, ne1, ne2, ne3); + //printf("n_past = %d, ne2 = %d\n", n_past, ne2); + + GGML_ASSERT(nb00 == sizeof(float)); + + const int ith = params->ith; + const int nth = params->nth; + + const int nr = ggml_nrows(dst); + + GGML_ASSERT(n_dims <= ne0); + GGML_ASSERT(n_dims % 2 == 0); + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + // row index used to determine which thread to use + int ir = 0; + + const float theta_scale = powf(10000.0, -2.0f/n_dims); + + const bool is_neox = mode & 2; + + for (int64_t i3 = 0; i3 < ne3; i3++) { + for (int64_t i2 = ((mode & 1) == 0 ? 0 : n_past); i2 < ne2; i2++) { + const int64_t p = ((mode & 1) == 0 ? n_past + i2 : i2); + for (int64_t i1 = 0; i1 < ne1; i1++) { + if (ir++ < ir0) continue; + if (ir > ir1) break; + + float theta = (float)p; + + if (!is_neox) { + for (int64_t i0 = 0; i0 < ne0; i0 += 2) { + const float cos_theta = cosf(theta); + const float sin_theta = sinf(theta); + + theta *= theta_scale; + + const float * const src = (float *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); + float * dst_data = (float *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); + + const float x0 = src[0]; + const float x1 = src[1]; + + dst_data[0] = x0*cos_theta - x1*sin_theta; + dst_data[1] = x0*sin_theta + x1*cos_theta; + } + } else { + // TODO: this is probably wrong, but I can't figure it out .. + // ref: https://github.com/huggingface/transformers/blob/main/src/transformers/models/gpt_neox/modeling_gpt_neox.py#LL251C1-L294C28 + for (int64_t ib = 0; ib < ne0/n_dims; ++ib) { + for (int64_t ic = 0; ic < n_dims; ic += 2) { + const float cos_theta = cosf(theta); + const float sin_theta = sinf(theta); + + theta *= theta_scale; + + const int64_t i0 = ib*n_dims + ic/2; + + const float * const src = (float *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); + float * dst_data = (float *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); + + const float x0 = src[0]; + const float x1 = src[n_dims/2]; + + dst_data[0] = x0*cos_theta - x1*sin_theta; + dst_data[n_dims/2] = x0*sin_theta + x1*cos_theta; + } + } + } + } + } + } +} + +static void ggml_compute_forward_rope_f16( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + GGML_ASSERT(src1->type == GGML_TYPE_I32); + GGML_ASSERT(ggml_nelements(src1) == 3); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int n_past = ((int32_t *) src1->data)[0]; + const int n_dims = ((int32_t *) src1->data)[1]; + const int mode = ((int32_t *) src1->data)[2]; + + assert(n_past >= 0); + + const size_t nb00 = src0->nb[0]; + const size_t nb01 = src0->nb[1]; + const size_t nb02 = src0->nb[2]; + const size_t nb03 = src0->nb[3]; + + const int64_t ne0 = dst->ne[0]; + const int64_t ne1 = dst->ne[1]; + const int64_t ne2 = dst->ne[2]; + const int64_t ne3 = dst->ne[3]; + + const size_t nb0 = dst->nb[0]; + const size_t nb1 = dst->nb[1]; + const size_t nb2 = dst->nb[2]; + const size_t nb3 = dst->nb[3]; + + //printf("ne0: %d, ne1: %d, ne2: %d, ne3: %d\n", ne0, ne1, ne2, ne3); + //printf("n_past = %d, ne2 = %d\n", n_past, ne2); + + GGML_ASSERT(nb0 == sizeof(ggml_fp16_t)); + + const int ith = params->ith; + const int nth = params->nth; + + const int nr = ggml_nrows(dst); + + GGML_ASSERT(n_dims <= ne0); + GGML_ASSERT(n_dims % 2 == 0); + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + // row index used to determine which thread to use + int ir = 0; + + const float theta_scale = powf(10000.0, -2.0f/n_dims); + + const bool is_neox = mode & 2; + + for (int64_t i3 = 0; i3 < ne3; i3++) { + for (int64_t i2 = ((mode & 1) == 0 ? 0 : n_past); i2 < ne2; i2++) { + const int64_t p = ((mode & 1) == 0 ? n_past + i2 : i2); + for (int64_t i1 = 0; i1 < ne1; i1++) { + if (ir++ < ir0) continue; + if (ir > ir1) break; + + float theta = (float)p; + + if (!is_neox) { + for (int64_t i0 = 0; i0 < ne0; i0 += 2) { + const float cos_theta = cosf(theta); + const float sin_theta = sinf(theta); + + theta *= theta_scale; + + const ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); + ggml_fp16_t * dst_data = (ggml_fp16_t *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); + + const float x0 = GGML_FP16_TO_FP32(src[0]); + const float x1 = GGML_FP16_TO_FP32(src[1]); + + dst_data[0] = GGML_FP32_TO_FP16(x0*cos_theta - x1*sin_theta); + dst_data[1] = GGML_FP32_TO_FP16(x0*sin_theta + x1*cos_theta); + } + } else { + // TODO: this is probably wrong, but I can't figure it out .. + // ref: https://github.com/huggingface/transformers/blob/main/src/transformers/models/gpt_neox/modeling_gpt_neox.py#LL251C1-L294C28 + for (int64_t ib = 0; ib < ne0/n_dims; ++ib) { + for (int64_t ic = 0; ic < n_dims; ic += 2) { + const float cos_theta = cosf(theta); + const float sin_theta = sinf(theta); + + theta *= theta_scale; + + const int64_t i0 = ib*n_dims + ic/2; + + const ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); + ggml_fp16_t * dst_data = (ggml_fp16_t *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); + + const float x0 = GGML_FP16_TO_FP32(src[0]); + const float x1 = GGML_FP16_TO_FP32(src[n_dims/2]); + + dst_data[0] = GGML_FP32_TO_FP16(x0*cos_theta - x1*sin_theta); + dst_data[n_dims/2] = GGML_FP32_TO_FP16(x0*sin_theta + x1*cos_theta); + } + } + } + } + } + } +} + +static void ggml_compute_forward_rope( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F16: + { + ggml_compute_forward_rope_f16(params, src0, src1, dst); + } break; + case GGML_TYPE_F32: + { + ggml_compute_forward_rope_f32(params, src0, src1, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_rope_back + +static void ggml_compute_forward_rope_back_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + assert(src1->type == GGML_TYPE_I32); + assert(ggml_nelements(src1) == 3); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + // y = rope(x, src1) + // dx = rope_back(dy, src1) + // src0 is dy, src1 contains options + + const int n_past = ((int32_t *) src1->data)[0]; + const int n_dims = ((int32_t *) src1->data)[1]; + const int mode = ((int32_t *) src1->data)[2]; + + assert(n_past >= 0); + + const size_t nb00 = src0->nb[0]; + const size_t nb01 = src0->nb[1]; + const size_t nb02 = src0->nb[2]; + const size_t nb03 = src0->nb[3]; + + const int64_t ne0 = dst->ne[0]; + const int64_t ne1 = dst->ne[1]; + const int64_t ne2 = dst->ne[2]; + const int64_t ne3 = dst->ne[3]; + + const size_t nb0 = dst->nb[0]; + const size_t nb1 = dst->nb[1]; + const size_t nb2 = dst->nb[2]; + const size_t nb3 = dst->nb[3]; + + + //printf("ne0: %d, ne1: %d, ne2: %d, ne3: %d\n", ne0, ne1, ne2, ne3); + //printf("n_past = %d, ne2 = %d\n", n_past, ne2); + + assert(nb0 == sizeof(float)); + + const int ith = params->ith; + const int nth = params->nth; + + const int nr = ggml_nrows(dst); + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + // row index used to determine which thread to use + int ir = 0; + + const float theta_scale = powf(10000.0, -2.0f/n_dims); + + const bool is_neox = mode & 2; + + for (int64_t i3 = 0; i3 < ne3; i3++) { + for (int64_t i2 = ((mode & 1) == 0 ? 0 : n_past); i2 < ne2; i2++) { + const int64_t p = ((mode & 1) == 0 ? n_past + i2 : i2); + for (int64_t i1 = 0; i1 < ne1; i1++) { + if (ir++ < ir0) continue; + if (ir > ir1) break; + + float theta = (float)p; + + if (!is_neox) { + for (int64_t i0 = 0; i0 < ne0; i0 += 2) { + const float cos_theta = cosf(theta); + const float sin_theta = sinf(theta); + + theta *= theta_scale; + + const float * const dy = (float *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); + float * dx = (float *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); + + const float dy0 = dy[0]; + const float dy1 = dy[1]; + + dx[0] = dy0*cos_theta + dy1*sin_theta; + dx[1] = - dy0*sin_theta + dy1*cos_theta; + } + } else { + for (int64_t ib = 0; ib < ne0/n_dims; ++ib) { + for (int64_t ic = 0; ic < n_dims; ic += 2) { + const float cos_theta = cosf(theta); + const float sin_theta = sinf(theta); + + theta *= theta_scale; + + const int64_t i0 = ib*n_dims + ic/2; + + const float * const dy = (float *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); + float * dx = (float *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); + + const float dy0 = dy[0]; + const float dy1 = dy[n_dims/2]; + + dx[0] = dy0*cos_theta + dy1*sin_theta; + dx[n_dims/2] = - dy0*sin_theta + dy1*cos_theta; + } + } + } + } + } + } +} + +static void ggml_compute_forward_rope_back_f16( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + assert(src1->type == GGML_TYPE_I32); + assert(ggml_nelements(src1) == 3); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + // y = rope(x, src1) + // dx = rope_back(dy, src1) + // src0 is dy, src1 contains options + + const int n_past = ((int32_t *) src1->data)[0]; + const int n_dims = ((int32_t *) src1->data)[1]; + const int mode = ((int32_t *) src1->data)[2]; + + assert(n_past >= 0); + + const size_t nb00 = src0->nb[0]; + const size_t nb01 = src0->nb[1]; + const size_t nb02 = src0->nb[2]; + const size_t nb03 = src0->nb[3]; + + const int64_t ne0 = dst->ne[0]; + const int64_t ne1 = dst->ne[1]; + const int64_t ne2 = dst->ne[2]; + const int64_t ne3 = dst->ne[3]; + + const size_t nb0 = dst->nb[0]; + const size_t nb1 = dst->nb[1]; + const size_t nb2 = dst->nb[2]; + const size_t nb3 = dst->nb[3]; + + + //printf("ne0: %d, ne1: %d, ne2: %d, ne3: %d\n", ne0, ne1, ne2, ne3); + //printf("n_past = %d, ne2 = %d\n", n_past, ne2); + + assert(nb0 == sizeof(ggml_fp16_t)); + + const int ith = params->ith; + const int nth = params->nth; + + const int nr = ggml_nrows(dst); + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + // row index used to determine which thread to use + int ir = 0; + + const float theta_scale = powf(10000.0, -2.0f/n_dims); + + const bool is_neox = mode & 2; + + for (int64_t i3 = 0; i3 < ne3; i3++) { + for (int64_t i2 = ((mode & 1) == 0 ? 0 : n_past); i2 < ne2; i2++) { + const int64_t p = ((mode & 1) == 0 ? n_past + i2 : i2); + for (int64_t i1 = 0; i1 < ne1; i1++) { + if (ir++ < ir0) continue; + if (ir > ir1) break; + + float theta = (float)p; + + if (!is_neox) { + for (int64_t i0 = 0; i0 < ne0; i0 += 2) { + const float cos_theta = cosf(theta); + const float sin_theta = sinf(theta); + + theta *= theta_scale; + + const ggml_fp16_t * const dy = (ggml_fp16_t *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); + ggml_fp16_t * dx = (ggml_fp16_t *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); + + const float dy0 = GGML_FP16_TO_FP32(dy[0]); + const float dy1 = GGML_FP16_TO_FP32(dy[1]); + + dx[0] = GGML_FP32_TO_FP16( dy0*cos_theta + dy1*sin_theta); + dx[1] = GGML_FP32_TO_FP16(-dy0*sin_theta + dy1*cos_theta); + } + } else { + for (int64_t ib = 0; ib < ne0/n_dims; ++ib) { + for (int64_t ic = 0; ic < n_dims; ic += 2) { + const float cos_theta = cosf(theta); + const float sin_theta = sinf(theta); + + theta *= theta_scale; + + const int64_t i0 = ib*n_dims + ic/2; + + const ggml_fp16_t * const dy = (ggml_fp16_t *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); + ggml_fp16_t * dx = (ggml_fp16_t *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); + + const float dy0 = GGML_FP16_TO_FP32(dy[0]); + const float dy1 = GGML_FP16_TO_FP32(dy[n_dims/2]); + + dx[0] = GGML_FP32_TO_FP16( dy0*cos_theta + dy1*sin_theta); + dx[n_dims/2] = GGML_FP32_TO_FP16(-dy0*sin_theta + dy1*cos_theta); + } + } + } + } + } + } +} + +static void ggml_compute_forward_rope_back( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F16: + { + ggml_compute_forward_rope_back_f16(params, src0, src1, dst); + } break; + case GGML_TYPE_F32: + { + ggml_compute_forward_rope_back_f32(params, src0, src1, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_conv_1d_1s + +static void ggml_compute_forward_conv_1d_1s_f16_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + GGML_ASSERT(src0->type == GGML_TYPE_F16); + GGML_ASSERT(src1->type == GGML_TYPE_F32); + GGML_ASSERT( dst->type == GGML_TYPE_F32); + + int64_t t0 = ggml_perf_time_us(); + UNUSED(t0); + + const int64_t ne00 = src0->ne[0]; + const int64_t ne01 = src0->ne[1]; + const int64_t ne02 = src0->ne[2]; + //const int64_t ne03 = src0->ne[3]; + + const int64_t ne10 = src1->ne[0]; + const int64_t ne11 = src1->ne[1]; + //const int64_t ne12 = src1->ne[2]; + //const int64_t ne13 = src1->ne[3]; + + //const int64_t ne0 = dst->ne[0]; + //const int64_t ne1 = dst->ne[1]; + //const int64_t ne2 = dst->ne[2]; + //const int64_t ne3 = dst->ne[3]; + //const int64_t ne = ne0*ne1*ne2*ne3; + + const int nb00 = src0->nb[0]; + const int nb01 = src0->nb[1]; + const int nb02 = src0->nb[2]; + //const int nb03 = src0->nb[3]; + + const int nb10 = src1->nb[0]; + const int nb11 = src1->nb[1]; + //const int nb12 = src1->nb[2]; + //const int nb13 = src1->nb[3]; + + //const int nb0 = dst->nb[0]; + const int nb1 = dst->nb[1]; + //const int nb2 = dst->nb[2]; + //const int nb3 = dst->nb[3]; + + const int ith = params->ith; + const int nth = params->nth; + + const int nk = ne00; + const int nh = nk/2; + + const int ew0 = ggml_up32(ne01); + + GGML_ASSERT(ne00 % 2 == 1); // TODO: support even kernel sizes + GGML_ASSERT(nb00 == sizeof(ggml_fp16_t)); + GGML_ASSERT(nb10 == sizeof(float)); + + if (params->type == GGML_TASK_INIT) { + // TODO: fix this memset (wsize is overestimated) + memset(params->wdata, 0, params->wsize); + + // prepare kernel data (src0) + { + ggml_fp16_t * const wdata = (ggml_fp16_t *) params->wdata + 0; + + for (int64_t i02 = 0; i02 < ne02; i02++) { + for (int64_t i01 = 0; i01 < ne01; i01++) { + const ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i02*nb02 + i01*nb01); + ggml_fp16_t * dst_data = wdata + i02*ew0*ne00; + for (int64_t i00 = 0; i00 < ne00; i00++) { + dst_data[i00*ew0 + i01] = src[i00]; + } + } + } + } + + // prepare source data (src1) + { + ggml_fp16_t * const wdata = (ggml_fp16_t *) params->wdata + ne02*ew0*ne00; + + for (int64_t i11 = 0; i11 < ne11; i11++) { + const float * const src = (float *)((char *) src1->data + i11*nb11); + ggml_fp16_t * dst_data = wdata; + for (int64_t i10 = 0; i10 < ne10; i10++) { + dst_data[(i10 + nh)*ew0 + i11] = GGML_FP32_TO_FP16(src[i10]); + } + } + } + + return; + } + + if (params->type == GGML_TASK_FINALIZE) { + return; + } + + // total rows in dst + const int nr = ne02; + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + for (int i1 = ir0; i1 < ir1; i1++) { + float * dst_data = (float *)((char *) dst->data + i1*nb1); + for (int64_t i0 = 0; i0 < ne10; ++i0) { + dst_data[i0] = 0; + for (int k = -nh; k <= nh; k++) { + float v = 0.0f; + ggml_vec_dot_f16(ew0, &v, + (ggml_fp16_t *) params->wdata + i1*ew0*ne00 + (nh + k)*ew0, + (ggml_fp16_t *) params->wdata + ne02*ew0*ne00 + (i0 + nh + k)*ew0); + + dst_data[i0] += v; + } + } + } +} + +static void ggml_compute_forward_conv_1d_1s_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + GGML_ASSERT(src0->type == GGML_TYPE_F32); + GGML_ASSERT(src1->type == GGML_TYPE_F32); + GGML_ASSERT( dst->type == GGML_TYPE_F32); + + int64_t t0 = ggml_perf_time_us(); + UNUSED(t0); + + const int64_t ne00 = src0->ne[0]; + const int64_t ne01 = src0->ne[1]; + const int64_t ne02 = src0->ne[2]; + //const int64_t ne03 = src0->ne[3]; + + const int64_t ne10 = src1->ne[0]; + const int64_t ne11 = src1->ne[1]; + //const int64_t ne12 = src1->ne[2]; + //const int64_t ne13 = src1->ne[3]; + + //const int64_t ne0 = dst->ne[0]; + //const int64_t ne1 = dst->ne[1]; + //const int64_t ne2 = dst->ne[2]; + //const int64_t ne3 = dst->ne[3]; + //const int64_t ne = ne0*ne1*ne2*ne3; + + const int nb00 = src0->nb[0]; + const int nb01 = src0->nb[1]; + const int nb02 = src0->nb[2]; + //const int nb03 = src0->nb[3]; + + const int nb10 = src1->nb[0]; + const int nb11 = src1->nb[1]; + //const int nb12 = src1->nb[2]; + //const int nb13 = src1->nb[3]; + + //const int nb0 = dst->nb[0]; + const int nb1 = dst->nb[1]; + //const int nb2 = dst->nb[2]; + //const int nb3 = dst->nb[3]; + + const int ith = params->ith; + const int nth = params->nth; + + const int nk = ne00; + const int nh = nk/2; + + const int ew0 = ggml_up32(ne01); + + GGML_ASSERT(ne00 % 2 == 1); // TODO: support even kernel sizes + GGML_ASSERT(nb00 == sizeof(float)); + GGML_ASSERT(nb10 == sizeof(float)); + + if (params->type == GGML_TASK_INIT) { + // TODO: fix this memset (wsize is overestimated) + memset(params->wdata, 0, params->wsize); + + // prepare kernel data (src0) + { + float * const wdata = (float *) params->wdata + 0; + + for (int64_t i02 = 0; i02 < ne02; i02++) { + for (int64_t i01 = 0; i01 < ne01; i01++) { + const float * const src = (float *)((char *) src0->data + i02*nb02 + i01*nb01); + float * dst_data = wdata + i02*ew0*ne00; + for (int64_t i00 = 0; i00 < ne00; i00++) { + dst_data[i00*ew0 + i01] = src[i00]; + } + } + } + } + + // prepare source data (src1) + { + float * const wdata = (float *) params->wdata + ne02*ew0*ne00; + + for (int64_t i11 = 0; i11 < ne11; i11++) { + const float * const src = (float *)((char *) src1->data + i11*nb11); + float * dst_data = wdata; + for (int64_t i10 = 0; i10 < ne10; i10++) { + dst_data[(i10 + nh)*ew0 + i11] = src[i10]; + } + } + } + + return; + } + + if (params->type == GGML_TASK_FINALIZE) { + return; + } + + // total rows in dst + const int nr = ne02; + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + for (int i1 = ir0; i1 < ir1; i1++) { + float * dst_data = (float *)((char *) dst->data + i1*nb1); + for (int64_t i0 = 0; i0 < ne10; ++i0) { + dst_data[i0] = 0; + for (int k = -nh; k <= nh; k++) { + float v = 0.0f; + ggml_vec_dot_f32(ew0, &v, + (float *) params->wdata + i1*ew0*ne00 + (nh + k)*ew0, + (float *) params->wdata + ne02*ew0*ne00 + (i0 + nh + k)*ew0); + + dst_data[i0] += v; + } + } + } +} + +static void ggml_compute_forward_conv_1d_1s( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F16: + { + ggml_compute_forward_conv_1d_1s_f16_f32(params, src0, src1, dst); + } break; + case GGML_TYPE_F32: + { + ggml_compute_forward_conv_1d_1s_f32(params, src0, src1, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_conv_1d_2s + +static void ggml_compute_forward_conv_1d_2s_f16_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + GGML_ASSERT(src0->type == GGML_TYPE_F16); + GGML_ASSERT(src1->type == GGML_TYPE_F32); + GGML_ASSERT( dst->type == GGML_TYPE_F32); + + int64_t t0 = ggml_perf_time_us(); + UNUSED(t0); + + const int64_t ne00 = src0->ne[0]; + const int64_t ne01 = src0->ne[1]; + const int64_t ne02 = src0->ne[2]; + //const int64_t ne03 = src0->ne[3]; + + const int64_t ne10 = src1->ne[0]; + const int64_t ne11 = src1->ne[1]; + //const int64_t ne12 = src1->ne[2]; + //const int64_t ne13 = src1->ne[3]; + + //const int64_t ne0 = dst->ne[0]; + //const int64_t ne1 = dst->ne[1]; + //const int64_t ne2 = dst->ne[2]; + //const int64_t ne3 = dst->ne[3]; + //const int64_t ne = ne0*ne1*ne2*ne3; + + const int nb00 = src0->nb[0]; + const int nb01 = src0->nb[1]; + const int nb02 = src0->nb[2]; + //const int nb03 = src0->nb[3]; + + const int nb10 = src1->nb[0]; + const int nb11 = src1->nb[1]; + //const int nb12 = src1->nb[2]; + //const int nb13 = src1->nb[3]; + + //const int nb0 = dst->nb[0]; + const int nb1 = dst->nb[1]; + //const int nb2 = dst->nb[2]; + //const int nb3 = dst->nb[3]; + + const int ith = params->ith; + const int nth = params->nth; + + const int nk = ne00; + const int nh = nk/2; + + const int ew0 = ggml_up32(ne01); + + GGML_ASSERT(ne00 % 2 == 1); // TODO: support even kernel sizes + GGML_ASSERT(nb00 == sizeof(ggml_fp16_t)); + GGML_ASSERT(nb10 == sizeof(float)); + + if (params->type == GGML_TASK_INIT) { + // TODO: fix this memset (wsize is overestimated) + memset(params->wdata, 0, params->wsize); + + // prepare kernel data (src0) + { + ggml_fp16_t * const wdata = (ggml_fp16_t *) params->wdata + 0; + + for (int64_t i02 = 0; i02 < ne02; i02++) { + for (int64_t i01 = 0; i01 < ne01; i01++) { + const ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i02*nb02 + i01*nb01); + ggml_fp16_t * dst_data = wdata + i02*ew0*ne00; + for (int64_t i00 = 0; i00 < ne00; i00++) { + dst_data[i00*ew0 + i01] = src[i00]; + } + } + } + } + + // prepare source data (src1) + { + ggml_fp16_t * const wdata = (ggml_fp16_t *) params->wdata + ne02*ew0*ne00; + + for (int64_t i11 = 0; i11 < ne11; i11++) { + const float * const src = (float *)((char *) src1->data + i11*nb11); + ggml_fp16_t * dst_data = wdata; + for (int64_t i10 = 0; i10 < ne10; i10++) { + dst_data[(i10 + nh)*ew0 + i11] = GGML_FP32_TO_FP16(src[i10]); + } + } + } + + return; + } + + if (params->type == GGML_TASK_FINALIZE) { + return; + } + + // total rows in dst + const int nr = ne02; + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + for (int i1 = ir0; i1 < ir1; i1++) { + float * dst_data = (float *)((char *) dst->data + i1*nb1); + for (int64_t i0 = 0; i0 < ne10; i0 += 2) { + dst_data[i0/2] = 0; + for (int k = -nh; k <= nh; k++) { + float v = 0.0f; + ggml_vec_dot_f16(ew0, &v, + (ggml_fp16_t *) params->wdata + i1*ew0*ne00 + (nh + k)*ew0, + (ggml_fp16_t *) params->wdata + ne02*ew0*ne00 + (i0 + nh + k)*ew0); + + dst_data[i0/2] += v; + } + } + } +} + +static void ggml_compute_forward_conv_1d_2s_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + GGML_ASSERT(src0->type == GGML_TYPE_F32); + GGML_ASSERT(src1->type == GGML_TYPE_F32); + GGML_ASSERT( dst->type == GGML_TYPE_F32); + + int64_t t0 = ggml_perf_time_us(); + UNUSED(t0); + + const int64_t ne00 = src0->ne[0]; + const int64_t ne01 = src0->ne[1]; + const int64_t ne02 = src0->ne[2]; + //const int64_t ne03 = src0->ne[3]; + + const int64_t ne10 = src1->ne[0]; + const int64_t ne11 = src1->ne[1]; + //const int64_t ne12 = src1->ne[2]; + //const int64_t ne13 = src1->ne[3]; + + //const int64_t ne0 = dst->ne[0]; + //const int64_t ne1 = dst->ne[1]; + //const int64_t ne2 = dst->ne[2]; + //const int64_t ne3 = dst->ne[3]; + //const int64_t ne = ne0*ne1*ne2*ne3; + + const int nb00 = src0->nb[0]; + const int nb01 = src0->nb[1]; + const int nb02 = src0->nb[2]; + //const int nb03 = src0->nb[3]; + + const int nb10 = src1->nb[0]; + const int nb11 = src1->nb[1]; + //const int nb12 = src1->nb[2]; + //const int nb13 = src1->nb[3]; + + //const int nb0 = dst->nb[0]; + const int nb1 = dst->nb[1]; + //const int nb2 = dst->nb[2]; + //const int nb3 = dst->nb[3]; + + const int ith = params->ith; + const int nth = params->nth; + + const int nk = ne00; + const int nh = nk/2; + + const int ew0 = ggml_up32(ne01); + + GGML_ASSERT(ne00 % 2 == 1); // TODO: support even kernel sizes + GGML_ASSERT(nb00 == sizeof(float)); + GGML_ASSERT(nb10 == sizeof(float)); + + if (params->type == GGML_TASK_INIT) { + // TODO: fix this memset (wsize is overestimated) + memset(params->wdata, 0, params->wsize); + + // prepare kernel data (src0) + { + float * const wdata = (float *) params->wdata + 0; + + for (int64_t i02 = 0; i02 < ne02; i02++) { + for (int64_t i01 = 0; i01 < ne01; i01++) { + const float * const src = (float *)((char *) src0->data + i02*nb02 + i01*nb01); + float * dst_data = wdata + i02*ew0*ne00; + for (int64_t i00 = 0; i00 < ne00; i00++) { + dst_data[i00*ew0 + i01] = src[i00]; + } + } + } + } + + // prepare source data (src1) + { + float * const wdata = (float *) params->wdata + ne02*ew0*ne00; + + for (int64_t i11 = 0; i11 < ne11; i11++) { + const float * const src = (float *)((char *) src1->data + i11*nb11); + float * dst_data = wdata; + for (int64_t i10 = 0; i10 < ne10; i10++) { + dst_data[(i10 + nh)*ew0 + i11] = src[i10]; + } + } + } + + return; + } + + if (params->type == GGML_TASK_FINALIZE) { + return; + } + + // total rows in dst + const int nr = ne02; + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + for (int i1 = ir0; i1 < ir1; i1++) { + float * dst_data = (float *)((char *) dst->data + i1*nb1); + for (int64_t i0 = 0; i0 < ne10; i0 += 2) { + dst_data[i0/2] = 0; + for (int k = -nh; k <= nh; k++) { + float v = 0.0f; + ggml_vec_dot_f32(ew0, &v, + (float *) params->wdata + i1*ew0*ne00 + (nh + k)*ew0, + (float *) params->wdata + ne02*ew0*ne00 + (i0 + nh + k)*ew0); + + dst_data[i0/2] += v; + } + } + } +} + +static void ggml_compute_forward_conv_1d_2s( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F16: + { + ggml_compute_forward_conv_1d_2s_f16_f32(params, src0, src1, dst); + } break; + case GGML_TYPE_F32: + { + ggml_compute_forward_conv_1d_2s_f32(params, src0, src1, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_flash_attn + +static void ggml_compute_forward_flash_attn_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * q, + const struct ggml_tensor * k, + const struct ggml_tensor * v, + const bool masked, + struct ggml_tensor * dst) { + int64_t t0 = ggml_perf_time_us(); + UNUSED(t0); + + const int64_t neq0 = q->ne[0]; + const int64_t neq1 = q->ne[1]; + const int64_t neq2 = q->ne[2]; + const int64_t neq3 = q->ne[3]; + + const int64_t nek0 = k->ne[0]; + const int64_t nek1 = k->ne[1]; + //const int64_t nek2 = k->ne[2]; + //const int64_t nek3 = k->ne[3]; + + //const int64_t nev0 = v->ne[0]; + const int64_t nev1 = v->ne[1]; + //const int64_t nev2 = v->ne[2]; + //const int64_t nev3 = v->ne[3]; + + const int64_t ne0 = dst->ne[0]; + const int64_t ne1 = dst->ne[1]; + //const int64_t ne2 = dst->ne[2]; + //const int64_t ne3 = dst->ne[3]; + + const int nbk0 = k->nb[0]; + const int nbk1 = k->nb[1]; + const int nbk2 = k->nb[2]; + const int nbk3 = k->nb[3]; + + const int nbq0 = q->nb[0]; + const int nbq1 = q->nb[1]; + const int nbq2 = q->nb[2]; + const int nbq3 = q->nb[3]; + + const int nbv0 = v->nb[0]; + const int nbv1 = v->nb[1]; + const int nbv2 = v->nb[2]; + const int nbv3 = v->nb[3]; + + const int nb0 = dst->nb[0]; + const int nb1 = dst->nb[1]; + const int nb2 = dst->nb[2]; + const int nb3 = dst->nb[3]; + + const int ith = params->ith; + const int nth = params->nth; + + const int64_t D = neq0; + const int64_t N = neq1; + const int64_t P = nek1 - N; + const int64_t M = P + N; + + const int Mup = ggml_up(M, GGML_SOFT_MAX_UNROLL); + + GGML_ASSERT(ne0 == D); + GGML_ASSERT(ne1 == N); + GGML_ASSERT(P >= 0); + + GGML_ASSERT(nbq0 == sizeof(float)); + GGML_ASSERT(nbk0 == sizeof(float)); + GGML_ASSERT(nbv0 == sizeof(float)); + + GGML_ASSERT(neq0 == D); + GGML_ASSERT(nek0 == D); + GGML_ASSERT(nev1 == D); + + GGML_ASSERT(neq1 == N); + GGML_ASSERT(nek1 == N + P); + GGML_ASSERT(nev1 == D); + + // dst cannot be transposed or permuted + GGML_ASSERT(nb0 == sizeof(float)); + GGML_ASSERT(nb0 <= nb1); + GGML_ASSERT(nb1 <= nb2); + GGML_ASSERT(nb2 <= nb3); + + if (params->type == GGML_TASK_INIT) { + return; + } + + if (params->type == GGML_TASK_FINALIZE) { + return; + } + + // parallelize by q rows using ggml_vec_dot_f32 + + // total rows in q + const int nr = neq1*neq2*neq3; + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + const float scale = 1.0f/sqrtf(D); + + //printf("P=%d N=%d D=%d ir0=%d ir1=%d scale = %f\n", P, N, D, ir0, ir1, scale); + + for (int ir = ir0; ir < ir1; ++ir) { + // q indices + const int iq3 = ir/(neq2*neq1); + const int iq2 = (ir - iq3*neq2*neq1)/neq1; + const int iq1 = (ir - iq3*neq2*neq1 - iq2*neq1); + + float * S = (float *) params->wdata + ith*(Mup + CACHE_LINE_SIZE_F32); + + for (int i = M; i < Mup; ++i) { + S[i] = -INFINITY; + } + + for (int64_t ic = 0; ic < nek1; ++ic) { + // k indices + const int ik3 = iq3; + const int ik2 = iq2; + const int ik1 = ic; + + // S indices + const int i1 = ik1; + + ggml_vec_dot_f32(neq0, + S + i1, + (float *) ((char *) k->data + (ik1*nbk1 + ik2*nbk2 + ik3*nbk3)), + (float *) ((char *) q->data + (iq1*nbq1 + iq2*nbq2 + iq3*nbq3))); + } + + // scale + ggml_vec_scale_f32(nek1, S, scale); + + if (masked) { + for (int64_t i = P; i < M; i++) { + if (i > P + iq1) { + S[i] = -INFINITY; + } + } + } + + // softmax + { + float max = -INFINITY; + ggml_vec_max_f32(M, &max, S); + + ggml_float sum = 0.0; + { +#ifdef GGML_SOFT_MAX_ACCELERATE + max = -max; + vDSP_vsadd(S, 1, &max, S, 1, Mup); + vvexpf(S, S, &Mup); + ggml_vec_sum_f32(Mup, &sum, S); +#else + uint16_t scvt[GGML_SOFT_MAX_UNROLL]; + ggml_float sump[GGML_SOFT_MAX_UNROLL] = { 0.0 }; + + for (int i = 0; i < Mup; i += GGML_SOFT_MAX_UNROLL) { + float * SS = S + i; + + for (int j = 0; j < GGML_SOFT_MAX_UNROLL; ++j) { + if (SS[j] == -INFINITY) { + SS[j] = 0.0f; + } else { + ggml_fp16_t s = GGML_FP32_TO_FP16(SS[j] - max); + memcpy(&scvt[j], &s, sizeof(uint16_t)); + const float val = GGML_FP16_TO_FP32(table_exp_f16[scvt[j]]); + sump[j] += (ggml_float)val; + SS[j] = val; + } + } + } + + for (int i = 0; i < GGML_SOFT_MAX_UNROLL; i++) { + sum += sump[i]; + } +#endif + } + + assert(sum > 0.0); + + sum = 1.0/sum; + ggml_vec_scale_f32(M, S, sum); + +#ifndef NDEBUG + for (int i = 0; i < M; ++i) { + assert(!isnan(S[i])); + assert(!isinf(S[i])); + } +#endif + } + + for (int64_t ic = 0; ic < nev1; ++ic) { + // dst indices + const int i1 = iq1; + const int i2 = iq2; + const int i3 = iq3; + + ggml_vec_dot_f32(nek1, + (float *) ((char *) dst->data + (ic*nb0 + i1*nb1 + i2*nb2 + i3*nb3)), + (float *) ((char *) v->data + ( ic*nbv1 + i2*nbv2 + i3*nbv3)), + S); + } + } +} + +static void ggml_compute_forward_flash_attn_f16( + const struct ggml_compute_params * params, + const struct ggml_tensor * q, + const struct ggml_tensor * k, + const struct ggml_tensor * v, + const bool masked, + struct ggml_tensor * dst) { + int64_t t0 = ggml_perf_time_us(); + UNUSED(t0); + + const int64_t neq0 = q->ne[0]; + const int64_t neq1 = q->ne[1]; + const int64_t neq2 = q->ne[2]; + const int64_t neq3 = q->ne[3]; + + const int64_t nek0 = k->ne[0]; + const int64_t nek1 = k->ne[1]; + //const int64_t nek2 = k->ne[2]; + //const int64_t nek3 = k->ne[3]; + + //const int64_t nev0 = v->ne[0]; + const int64_t nev1 = v->ne[1]; + //const int64_t nev2 = v->ne[2]; + //const int64_t nev3 = v->ne[3]; + + const int64_t ne0 = dst->ne[0]; + const int64_t ne1 = dst->ne[1]; + //const int64_t ne2 = dst->ne[2]; + //const int64_t ne3 = dst->ne[3]; + + const int nbk0 = k->nb[0]; + const int nbk1 = k->nb[1]; + const int nbk2 = k->nb[2]; + const int nbk3 = k->nb[3]; + + const int nbq0 = q->nb[0]; + const int nbq1 = q->nb[1]; + const int nbq2 = q->nb[2]; + const int nbq3 = q->nb[3]; + + const int nbv0 = v->nb[0]; + const int nbv1 = v->nb[1]; + const int nbv2 = v->nb[2]; + const int nbv3 = v->nb[3]; + + const int nb0 = dst->nb[0]; + const int nb1 = dst->nb[1]; + const int nb2 = dst->nb[2]; + const int nb3 = dst->nb[3]; + + const int ith = params->ith; + const int nth = params->nth; + + const int64_t D = neq0; + const int64_t N = neq1; + const int64_t P = nek1 - N; + const int64_t M = P + N; + + const int Mup = ggml_up(M, GGML_SOFT_MAX_UNROLL); + + GGML_ASSERT(ne0 == D); + GGML_ASSERT(ne1 == N); + GGML_ASSERT(P >= 0); + + GGML_ASSERT(nbq0 == sizeof(ggml_fp16_t)); + GGML_ASSERT(nbk0 == sizeof(ggml_fp16_t)); + GGML_ASSERT(nbv0 == sizeof(ggml_fp16_t)); + + GGML_ASSERT(neq0 == D); + GGML_ASSERT(nek0 == D); + GGML_ASSERT(nev1 == D); + + GGML_ASSERT(neq1 == N); + GGML_ASSERT(nek1 == N + P); + GGML_ASSERT(nev1 == D); + + // dst cannot be transposed or permuted + GGML_ASSERT(nb0 == sizeof(float)); + GGML_ASSERT(nb0 <= nb1); + GGML_ASSERT(nb1 <= nb2); + GGML_ASSERT(nb2 <= nb3); + + if (params->type == GGML_TASK_INIT) { + return; + } + + if (params->type == GGML_TASK_FINALIZE) { + return; + } + + // parallelize by q rows using ggml_vec_dot_f32 + + // total rows in q + const int nr = neq1*neq2*neq3; + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + const float scale = 1.0f/sqrtf(D); + + //printf("P=%d N=%d D=%d ir0=%d ir1=%d scale = %f\n", P, N, D, ir0, ir1, scale); + + for (int ir = ir0; ir < ir1; ++ir) { + // q indices + const int iq3 = ir/(neq2*neq1); + const int iq2 = (ir - iq3*neq2*neq1)/neq1; + const int iq1 = (ir - iq3*neq2*neq1 - iq2*neq1); + + float * S = (float *) params->wdata + ith*(2*Mup + CACHE_LINE_SIZE_F32); + + for (int i = M; i < Mup; ++i) { + S[i] = -INFINITY; + } + + if (GGML_VEC_DOT_UNROLL > 2 || nek1 % GGML_VEC_DOT_UNROLL != 0) { + for (int64_t ic = 0; ic < nek1; ++ic) { + // k indices + const int ik3 = iq3; + const int ik2 = iq2; + const int ik1 = ic; + + // S indices + const int i1 = ik1; + + ggml_vec_dot_f16(neq0, + S + i1, + (ggml_fp16_t *) ((char *) k->data + (ik1*nbk1 + ik2*nbk2 + ik3*nbk3)), + (ggml_fp16_t *) ((char *) q->data + (iq1*nbq1 + iq2*nbq2 + iq3*nbq3))); + } + } else { + for (int64_t ic = 0; ic < nek1; ic += GGML_VEC_DOT_UNROLL) { + // k indices + const int ik3 = iq3; + const int ik2 = iq2; + const int ik1 = ic; + + // S indices + const int i1 = ik1; + + ggml_vec_dot_f16_unroll(neq0, nbk1, + S + i1, + ((char *) k->data + (ik1*nbk1 + ik2*nbk2 + ik3*nbk3)), + (ggml_fp16_t *) ((char *) q->data + (iq1*nbq1 + iq2*nbq2 + iq3*nbq3))); + } + } + + // scale + ggml_vec_scale_f32(nek1, S, scale); + + if (masked) { + for (int64_t i = P; i < M; i++) { + if (i > P + iq1) { + S[i] = -INFINITY; + } + } + } + + // softmax + { + float max = -INFINITY; + ggml_vec_max_f32(M, &max, S); + + ggml_float sum = 0.0; + { +#ifdef GGML_SOFT_MAX_ACCELERATE + max = -max; + vDSP_vsadd(S, 1, &max, S, 1, Mup); + vvexpf(S, S, &Mup); + ggml_vec_sum_f32(Mup, &sum, S); +#else + uint16_t scvt[GGML_SOFT_MAX_UNROLL]; + ggml_float sump[GGML_SOFT_MAX_UNROLL] = { 0.0 }; + + for (int i = 0; i < Mup; i += GGML_SOFT_MAX_UNROLL) { + float * SS = S + i; + + for (int j = 0; j < GGML_SOFT_MAX_UNROLL; ++j) { + if (SS[j] == -INFINITY) { + SS[j] = 0.0f; + } else { + ggml_fp16_t s = GGML_FP32_TO_FP16(SS[j] - max); + memcpy(&scvt[j], &s, sizeof(uint16_t)); + const float val = GGML_FP16_TO_FP32(table_exp_f16[scvt[j]]); + sump[j] += (ggml_float)val; + SS[j] = val; + } + } + } + + for (int i = 0; i < GGML_SOFT_MAX_UNROLL; i++) { + sum += sump[i]; + } +#endif + } + + assert(sum > 0.0); + + sum = 1.0/sum; + ggml_vec_scale_f32(M, S, sum); + +#ifndef NDEBUG + for (int i = 0; i < M; ++i) { + assert(!isnan(S[i])); + assert(!isinf(S[i])); + } +#endif + } + + ggml_fp16_t * S16 = (ggml_fp16_t *) ((float *) params->wdata + ith*(2*Mup + CACHE_LINE_SIZE_F32) + Mup); + + for (int64_t i = 0; i < M; i++) { + S16[i] = GGML_FP32_TO_FP16(S[i]); + } + + if (GGML_VEC_DOT_UNROLL == 1 || (nev1 % GGML_VEC_DOT_UNROLL != 0)) { + for (int64_t ic = 0; ic < nev1; ++ic) { + // dst indices + const int i1 = iq1; + const int i2 = iq2; + const int i3 = iq3; + + ggml_vec_dot_f16(nek1, + (float *) ((char *) dst->data + (ic*nb0 + i1*nb1 + i2*nb2 + i3*nb3)), + (ggml_fp16_t *) ((char *) v->data + ( ic*nbv1 + i2*nbv2 + i3*nbv3)), + S16); + } + } else { + for (int64_t ic = 0; ic < nev1; ic += GGML_VEC_DOT_UNROLL) { + // dst indices + const int i1 = iq1; + const int i2 = iq2; + const int i3 = iq3; + + ggml_vec_dot_f16_unroll(nek1, nbv1, + (float *) ((char *) dst->data + (ic*nb0 + i1*nb1 + i2*nb2 + i3*nb3)), + ((char *) v->data + ( ic*nbv1 + i2*nbv2 + i3*nbv3)), + S16); + } + } + } +} + +static void ggml_compute_forward_flash_attn( + const struct ggml_compute_params * params, + const struct ggml_tensor * q, + const struct ggml_tensor * k, + const struct ggml_tensor * v, + const bool masked, + struct ggml_tensor * dst) { + switch (q->type) { + case GGML_TYPE_F16: + { + ggml_compute_forward_flash_attn_f16(params, q, k, v, masked, dst); + } break; + case GGML_TYPE_F32: + { + ggml_compute_forward_flash_attn_f32(params, q, k, v, masked, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_flash_ff + +static void ggml_compute_forward_flash_ff_f16( + const struct ggml_compute_params * params, + const struct ggml_tensor * a, // F16 + const struct ggml_tensor * b0, // F16 fc_w + const struct ggml_tensor * b1, // F32 fc_b + const struct ggml_tensor * c0, // F16 proj_w + const struct ggml_tensor * c1, // F32 proj_b + struct ggml_tensor * dst) { + int64_t t0 = ggml_perf_time_us(); + UNUSED(t0); + + const int64_t nea0 = a->ne[0]; + const int64_t nea1 = a->ne[1]; + const int64_t nea2 = a->ne[2]; + const int64_t nea3 = a->ne[3]; + + const int64_t neb00 = b0->ne[0]; + const int64_t neb01 = b0->ne[1]; + //const int64_t neb02 = b0->ne[2]; + //const int64_t neb03 = b0->ne[3]; + + const int64_t neb10 = b1->ne[0]; + const int64_t neb11 = b1->ne[1]; + //const int64_t neb12 = b1->ne[2]; + //const int64_t neb13 = b1->ne[3]; + + const int64_t nec00 = c0->ne[0]; + const int64_t nec01 = c0->ne[1]; + //const int64_t nec02 = c0->ne[2]; + //const int64_t nec03 = c0->ne[3]; + + const int64_t nec10 = c1->ne[0]; + const int64_t nec11 = c1->ne[1]; + //const int64_t nec12 = c1->ne[2]; + //const int64_t nec13 = c1->ne[3]; + + const int64_t ne0 = dst->ne[0]; + const int64_t ne1 = dst->ne[1]; + const int64_t ne2 = dst->ne[2]; + //const int64_t ne3 = dst->ne[3]; + + const int nba0 = a->nb[0]; + const int nba1 = a->nb[1]; + const int nba2 = a->nb[2]; + const int nba3 = a->nb[3]; + + const int nbb00 = b0->nb[0]; + const int nbb01 = b0->nb[1]; + const int nbb02 = b0->nb[2]; + const int nbb03 = b0->nb[3]; + + const int nbb10 = b1->nb[0]; + //const int nbb11 = b1->nb[1]; + //const int nbb12 = b1->nb[2]; + //const int nbb13 = b1->nb[3]; + + const int nbc00 = c0->nb[0]; + const int nbc01 = c0->nb[1]; + const int nbc02 = c0->nb[2]; + const int nbc03 = c0->nb[3]; + + const int nbc10 = c1->nb[0]; + //const int nbc11 = c1->nb[1]; + //const int nbc12 = c1->nb[2]; + //const int nbc13 = c1->nb[3]; + + const int nb0 = dst->nb[0]; + const int nb1 = dst->nb[1]; + const int nb2 = dst->nb[2]; + const int nb3 = dst->nb[3]; + + const int ith = params->ith; + const int nth = params->nth; + + const int64_t D = nea0; + //const int64_t N = nea1; + const int64_t M = neb01; + + GGML_ASSERT(ne0 == nea0); + GGML_ASSERT(ne1 == nea1); + GGML_ASSERT(ne2 == nea2); + + GGML_ASSERT(nba0 == sizeof(ggml_fp16_t)); + GGML_ASSERT(nbb00 == sizeof(ggml_fp16_t)); + GGML_ASSERT(nbb10 == sizeof(float)); + GGML_ASSERT(nbc00 == sizeof(ggml_fp16_t)); + GGML_ASSERT(nbc10 == sizeof(float)); + + GGML_ASSERT(neb00 == D); + GGML_ASSERT(neb01 == M); + GGML_ASSERT(neb10 == M); + GGML_ASSERT(neb11 == 1); + + GGML_ASSERT(nec00 == M); + GGML_ASSERT(nec01 == D); + GGML_ASSERT(nec10 == D); + GGML_ASSERT(nec11 == 1); + + // dst cannot be transposed or permuted + GGML_ASSERT(nb0 == sizeof(float)); + GGML_ASSERT(nb0 <= nb1); + GGML_ASSERT(nb1 <= nb2); + GGML_ASSERT(nb2 <= nb3); + + if (params->type == GGML_TASK_INIT) { + return; + } + + if (params->type == GGML_TASK_FINALIZE) { + return; + } + + // parallelize by a rows using ggml_vec_dot_f32 + + // total rows in a + const int nr = nea1*nea2*nea3; + + // rows per thread + const int dr = (nr + nth - 1)/nth; + + // row range for this thread + const int ir0 = dr*ith; + const int ir1 = MIN(ir0 + dr, nr); + + for (int ir = ir0; ir < ir1; ++ir) { + // a indices + const int ia3 = ir/(nea2*nea1); + const int ia2 = (ir - ia3*nea2*nea1)/nea1; + const int ia1 = (ir - ia3*nea2*nea1 - ia2*nea1); + + float * S = (float *) params->wdata + ith*(2*M + CACHE_LINE_SIZE_F32); + + for (int64_t ic = 0; ic < neb01; ++ic) { + // b0 indices + const int ib03 = ia3; + const int ib02 = ia2; + const int ib01 = ic; + + // S indices + const int i1 = ib01; + + ggml_vec_dot_f16(nea0, + S + i1, + (ggml_fp16_t *) ((char *) b0->data + (ib01*nbb01 + ib02*nbb02 + ib03*nbb03)), + (ggml_fp16_t *) ((char *) a->data + ( ia1*nba1 + ia2*nba2 + ia3*nba3))); + } + + ggml_vec_add_f32(neb01, S, S, (float *) b1->data); + //ggml_vec_gelu_f32(neb01, S, S); + + ggml_fp16_t * S16 = (ggml_fp16_t *) ((float *) params->wdata + ith*(2*M + CACHE_LINE_SIZE_F32) + M); + + for (int64_t i = 0; i < M; i++) { + S16[i] = GGML_FP32_TO_FP16(S[i]); + } + + ggml_vec_gelu_f16(neb01, S16, S16); + + { + // dst indices + const int i1 = ia1; + const int i2 = ia2; + const int i3 = ia3; + + for (int64_t ic = 0; ic < nec01; ++ic) { + + ggml_vec_dot_f16(neb01, + (float *) ((char *) dst->data + (ic*nb0 + i1*nb1 + i2*nb2 + i3*nb3)), + (ggml_fp16_t *) ((char *) c0->data + ( ic*nbc01 + i2*nbc02 + i3*nbc03)), + S16); + } + + ggml_vec_add_f32(nec01, + (float *) ((char *) dst->data + (i1*nb1 + i2*nb2 + i3*nb3)), + (float *) ((char *) dst->data + (i1*nb1 + i2*nb2 + i3*nb3)), + (float *) c1->data); + } + } +} + +static void ggml_compute_forward_flash_ff( + const struct ggml_compute_params * params, + const struct ggml_tensor * a, + const struct ggml_tensor * b0, + const struct ggml_tensor * b1, + const struct ggml_tensor * c0, + const struct ggml_tensor * c1, + struct ggml_tensor * dst) { + switch (b0->type) { + case GGML_TYPE_F16: + { + ggml_compute_forward_flash_ff_f16(params, a, b0, b1, c0, c1, dst); + } break; + case GGML_TYPE_F32: + { + GGML_ASSERT(false); // TODO + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_map_unary + +static void ggml_compute_forward_map_unary_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst, + const ggml_unary_op_f32_t fun) { + GGML_ASSERT(ggml_are_same_shape(src0, dst)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int n = ggml_nrows(src0); + const int nc = src0->ne[0]; + + assert( dst->nb[0] == sizeof(float)); + assert(src0->nb[0] == sizeof(float)); + + for (int i = 0; i < n; i++) { + fun(nc, + (float *) ((char *) dst->data + i*( dst->nb[1])), + (float *) ((char *) src0->data + i*(src0->nb[1]))); + } +} + + +static void ggml_compute_forward_map_unary( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst, + const ggml_unary_op_f32_t fun) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_map_unary_f32(params, src0, dst, fun); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_map_binary + +static void ggml_compute_forward_map_binary_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst, + const ggml_binary_op_f32_t fun) { + assert(params->ith == 0); + assert(ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const int n = ggml_nrows(src0); + const int nc = src0->ne[0]; + + assert( dst->nb[0] == sizeof(float)); + assert(src0->nb[0] == sizeof(float)); + assert(src1->nb[0] == sizeof(float)); + + for (int i = 0; i < n; i++) { + fun(nc, + (float *) ((char *) dst->data + i*( dst->nb[1])), + (float *) ((char *) src0->data + i*(src0->nb[1])), + (float *) ((char *) src1->data + i*(src1->nb[1]))); + } +} + + +static void ggml_compute_forward_map_binary( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst, + const ggml_binary_op_f32_t fun) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_map_binary_f32(params, src0, src1, dst, fun); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +///////////////////////////////// + +static void ggml_compute_forward(struct ggml_compute_params * params, struct ggml_tensor * tensor) { + GGML_ASSERT(params); + + switch (tensor->op) { + case GGML_OP_DUP: + { + ggml_compute_forward_dup(params, tensor->src0, tensor); + } break; + case GGML_OP_ADD: + { + ggml_compute_forward_add(params, tensor->src0, tensor->src1, tensor); + } break; + case GGML_OP_ADD1: + { + ggml_compute_forward_add1(params, tensor->src0, tensor->src1, tensor); + } break; + case GGML_OP_ACC: + { + ggml_compute_forward_acc(params, tensor->src0, tensor->src1, tensor->opt[0], tensor); + } break; + case GGML_OP_SUB: + { + ggml_compute_forward_sub(params, tensor->src0, tensor->src1, tensor); + } break; + case GGML_OP_MUL: + { + ggml_compute_forward_mul(params, tensor->src0, tensor->src1, tensor); + } break; + case GGML_OP_DIV: + { + ggml_compute_forward_div(params, tensor->src0, tensor->src1, tensor); + } break; + case GGML_OP_SQR: + { + ggml_compute_forward_sqr(params, tensor->src0, tensor); + } break; + case GGML_OP_SQRT: + { + ggml_compute_forward_sqrt(params, tensor->src0, tensor); + } break; + case GGML_OP_LOG: + { + ggml_compute_forward_log(params, tensor->src0, tensor); + } break; + case GGML_OP_SUM: + { + ggml_compute_forward_sum(params, tensor->src0, tensor); + } break; + case GGML_OP_SUM_ROWS: + { + ggml_compute_forward_sum_rows(params, tensor->src0, tensor); + } break; + case GGML_OP_MEAN: + { + ggml_compute_forward_mean(params, tensor->src0, tensor); + } break; + case GGML_OP_REPEAT: + { + ggml_compute_forward_repeat(params, tensor->src0, tensor); + } break; + case GGML_OP_ABS: + { + ggml_compute_forward_abs(params, tensor->src0, tensor); + } break; + case GGML_OP_SGN: + { + ggml_compute_forward_sgn(params, tensor->src0, tensor); + } break; + case GGML_OP_NEG: + { + ggml_compute_forward_neg(params, tensor->src0, tensor); + } break; + case GGML_OP_STEP: + { + ggml_compute_forward_step(params, tensor->src0, tensor); + } break; + case GGML_OP_RELU: + { + ggml_compute_forward_relu(params, tensor->src0, tensor); + } break; + case GGML_OP_GELU: + { + ggml_compute_forward_gelu(params, tensor->src0, tensor); + } break; + case GGML_OP_SILU: + { + ggml_compute_forward_silu(params, tensor->src0, tensor); + } break; + case GGML_OP_SILU_BACK: + { + ggml_compute_forward_silu_back(params, tensor->src0, tensor->src1, tensor); + } break; + case GGML_OP_NORM: + { + ggml_compute_forward_norm(params, tensor->src0, tensor); + } break; + case GGML_OP_RMS_NORM: + { + ggml_compute_forward_rms_norm(params, tensor->src0, tensor); + } break; + case GGML_OP_RMS_NORM_BACK: + { + ggml_compute_forward_rms_norm_back(params, tensor->src0, tensor->src1, tensor); + } break; + case GGML_OP_MUL_MAT: + { + ggml_compute_forward_mul_mat(params, tensor->src0, tensor->src1, tensor); + } break; + case GGML_OP_SCALE: + { + ggml_compute_forward_scale(params, tensor->src0, tensor->src1, tensor); + } break; + case GGML_OP_SET: + { + ggml_compute_forward_set(params, tensor->src0, tensor->src1, tensor->opt[0], tensor); + } break; + case GGML_OP_CPY: + { + ggml_compute_forward_cpy(params, tensor->src0, tensor); + } break; + case GGML_OP_CONT: + { + ggml_compute_forward_cont(params, tensor->src0, tensor); + } break; + case GGML_OP_RESHAPE: + { + ggml_compute_forward_reshape(params, tensor->src0, tensor); + } break; + case GGML_OP_VIEW: + { + ggml_compute_forward_view(params, tensor->src0); + } break; + case GGML_OP_PERMUTE: + { + ggml_compute_forward_permute(params, tensor->src0); + } break; + case GGML_OP_TRANSPOSE: + { + ggml_compute_forward_transpose(params, tensor->src0); + } break; + case GGML_OP_GET_ROWS: + { + ggml_compute_forward_get_rows(params, tensor->src0, tensor->src1, tensor); + } break; + case GGML_OP_GET_ROWS_BACK: + { + ggml_compute_forward_get_rows_back(params, tensor->src0, tensor->src1, tensor->opt[0], tensor); + } break; + case GGML_OP_DIAG: + { + ggml_compute_forward_diag(params, tensor->src0, tensor); + } break; + case GGML_OP_DIAG_MASK_INF: + { + ggml_compute_forward_diag_mask_inf(params, tensor->src0, tensor->src1, tensor); + } break; + case GGML_OP_DIAG_MASK_ZERO: + { + ggml_compute_forward_diag_mask_zero(params, tensor->src0, tensor->src1, tensor); + } break; + case GGML_OP_SOFT_MAX: + { + ggml_compute_forward_soft_max(params, tensor->src0, tensor); + } break; + case GGML_OP_ROPE: + { + ggml_compute_forward_rope(params, tensor->src0, tensor->src1, tensor); + } break; + case GGML_OP_ROPE_BACK: + { + ggml_compute_forward_rope_back(params, tensor->src0, tensor->src1, tensor); + } break; + case GGML_OP_ALIBI: + { + ggml_compute_forward_alibi(params, tensor->src0, tensor->src1, tensor); + } break; + case GGML_OP_CLAMP: + { + ggml_compute_forward_clamp(params, tensor->src0, tensor->src1, tensor); + } break; + case GGML_OP_CONV_1D_1S: + { + ggml_compute_forward_conv_1d_1s(params, tensor->src0, tensor->src1, tensor); + } break; + case GGML_OP_CONV_1D_2S: + { + ggml_compute_forward_conv_1d_2s(params, tensor->src0, tensor->src1, tensor); + } break; + case GGML_OP_FLASH_ATTN: + { + int32_t t = ggml_get_i32_1d(tensor->opt[1], 0); + GGML_ASSERT(t == 0 || t == 1); + bool masked = t != 0; + ggml_compute_forward_flash_attn(params, tensor->src0, tensor->src1, tensor->opt[0], masked, tensor); + } break; + case GGML_OP_FLASH_FF: + { + ggml_compute_forward_flash_ff(params, tensor->src0, tensor->src1, tensor->opt[0], tensor->opt[1], tensor->opt[2], tensor); + } break; + case GGML_OP_MAP_UNARY: + { + const ggml_unary_op_f32_t fun = *((ggml_unary_op_f32_t *)tensor->opt[0]->data); + ggml_compute_forward_map_unary(params, tensor->src0, tensor, fun); + } + break; + case GGML_OP_MAP_BINARY: + { + const ggml_binary_op_f32_t fun = *((ggml_binary_op_f32_t *)tensor->opt[0]->data); + ggml_compute_forward_map_binary(params, tensor->src0, tensor->src1, tensor, fun); + } + break; + case GGML_OP_NONE: + { + // nop + } break; + case GGML_OP_COUNT: + { + GGML_ASSERT(false); + } break; + } +} + +//////////////////////////////////////////////////////////////////////////////// + +static void ggml_compute_backward(struct ggml_context * ctx, struct ggml_tensor * tensor, bool inplace) { + struct ggml_tensor * src0 = tensor->src0; + struct ggml_tensor * src1 = tensor->src1; + + switch (tensor->op) { + case GGML_OP_DUP: + { + if (src0->grad) { + src0->grad = ggml_add_impl(ctx, src0->grad, tensor->grad, inplace); + } + } break; + case GGML_OP_ADD: + { + if (src0->grad) { + src0->grad = ggml_add_impl(ctx, src0->grad, tensor->grad, inplace); + } + if (src1->grad) { + src1->grad = ggml_add_impl(ctx, src1->grad, tensor->grad, inplace); + } + } break; + case GGML_OP_ADD1: + { + if (src0->grad) { + src0->grad = ggml_add_impl(ctx, src0->grad, tensor->grad, inplace); + } + if (src1->grad) { + src1->grad = ggml_add_impl(ctx, + src1->grad, + ggml_mean(ctx, tensor->grad), // TODO: should probably be sum instead of mean + inplace); + } + } break; + case GGML_OP_ACC: + { + if (src0->grad) { + src0->grad = ggml_add_impl(ctx, src0->grad, tensor->grad, inplace); + } + if (src1->grad) { + GGML_ASSERT(ggml_nelements(tensor->opt[0]) == 5); + GGML_ASSERT(tensor->opt[0]->type == GGML_TYPE_I32); + const size_t nb1 = (( int32_t * ) tensor->opt[0]->data)[0]; + const size_t nb2 = (( int32_t * ) tensor->opt[0]->data)[1]; + const size_t nb3 = (( int32_t * ) tensor->opt[0]->data)[2]; + const size_t offset = (( int32_t * ) tensor->opt[0]->data)[3]; + + struct ggml_tensor * tensor_grad_view = ggml_view_4d(ctx, + tensor->grad, + src1->grad->ne[0], + src1->grad->ne[1], + src1->grad->ne[2], + src1->grad->ne[3], + nb1, nb2, nb3, offset); + + src1->grad = + ggml_add_impl(ctx, + src1->grad, + ggml_reshape(ctx, + ggml_cont(ctx, tensor_grad_view), + src1->grad), + inplace); + } + } break; + case GGML_OP_SUB: + { + if (src0->grad) { + src0->grad = ggml_add_impl(ctx, src0->grad, tensor->grad, inplace); + } + if (src1->grad) { + src1->grad = ggml_sub_impl(ctx, src1->grad, tensor->grad, inplace); + } + } break; + case GGML_OP_MUL: + { + if (src0->grad) { + src0->grad = + ggml_add_impl(ctx, + src0->grad, + ggml_mul(ctx, src1, tensor->grad), + inplace); + } + if (src1->grad) { + src1->grad = + ggml_add_impl(ctx, + src1->grad, + ggml_mul(ctx, src0, tensor->grad), + inplace); + } + } break; + case GGML_OP_DIV: + { + if (src0->grad) { + src0->grad = + ggml_add_impl(ctx, + src0->grad, + ggml_div(ctx, tensor->grad, src1), + inplace); + } + if (src1->grad) { + src1->grad = + ggml_sub_impl(ctx, + src1->grad, + ggml_mul(ctx, + tensor->grad, + ggml_div(ctx, tensor, src1)), + inplace); + } + } break; + case GGML_OP_SQR: + { + if (src0->grad) { + src0->grad = + ggml_add_impl(ctx, + src0->grad, + ggml_scale(ctx, + ggml_mul(ctx, src0, tensor->grad), + ggml_new_f32(ctx, 2.0f)), + inplace); + } + } break; + case GGML_OP_SQRT: + { + if (src0->grad) { + src0->grad = + ggml_add_impl(ctx, + src0->grad, + ggml_mul(ctx, + tensor->grad, // this was not catched by test_grad because in test_grad tensor->grad is 1 + ggml_div(ctx, + ggml_repeat(ctx, ggml_new_f32(ctx, 0.5f), tensor), + tensor)), + inplace); + } + } break; + case GGML_OP_LOG: + { + if (src0->grad) { + src0->grad = + ggml_add_impl(ctx, + src0->grad, + ggml_div(ctx, + tensor->grad, + src0), + inplace); + } + } break; + case GGML_OP_SUM: + { + if (src0->grad) { + src0->grad = + ggml_add1_impl(ctx, + src0->grad, + tensor->grad, + inplace); + } + } break; + case GGML_OP_SUM_ROWS: + { + if (src0->grad) { + src0->grad = + ggml_add_impl(ctx, + src0->grad, + ggml_repeat(ctx, + tensor->grad, + src0->grad), + inplace); + } + } break; + case GGML_OP_MEAN: + { + GGML_ASSERT(false); // TODO: implement + } break; + case GGML_OP_REPEAT: + { + // necessary for llama + if (src0->grad) { + GGML_ASSERT(src0->n_dims == 1 || src0->n_dims == 2); + const int nc = tensor->ne[0]; + const int nr = tensor->ne[1]; + const int nc0 = src0->ne[0]; + const int nr0 = src0->ne[1]; + const int ncr = nc/nc0; // guaranteed to be an integer due to the check in ggml_can_repeat + const int nrr = nr/nr0; // guaranteed to be an integer due to the check in ggml_can_repeat + // tensor->grad [nc,nr,1,1] + // reshape [nc0,nc/nc0,nr0,nr/nr0] + // permute [nc0,nr0,nc/nc0,nr/nr0] + // substitute [nc0,nr0,ncr,nrr] + // reshape [nc0*nr0,ncr*nrr,1,1] + // transpose [ncr*nrr,nc0*nr0,1,1] + // sum rows [1,nc0*nr0,1,1] + // transpose [nc0*nr0,1,1] + // reshape [nc0,nr0,1,1] reshape_1d or reshape_2d + // add to src0->grad + + int64_t ne[4] = {nc0,ncr,nr0,nrr}; + + struct ggml_tensor* F00 = tensor->grad; + struct ggml_tensor* F01 = ggml_reshape (ctx, F00, ggml_new_tensor(ctx,tensor->grad->type,4,ne)); + struct ggml_tensor* F02 = ggml_permute (ctx, F01, 0,2,1,3); + struct ggml_tensor* F03 = ggml_cont (ctx, F02); + struct ggml_tensor* F04 = ggml_reshape_2d(ctx, F03, nc0*nr0, ncr*nrr); + struct ggml_tensor* F05 = ggml_transpose (ctx, F04); + struct ggml_tensor* F06 = ggml_cont (ctx, F05); + struct ggml_tensor* F07 = ggml_sum_rows (ctx, F06); + struct ggml_tensor* F08 = ggml_transpose (ctx, F07); + struct ggml_tensor* F09 = ggml_cont (ctx, F08); + struct ggml_tensor* F10 = ggml_reshape (ctx, F09, src0->grad); + + src0->grad = + ggml_add_impl(ctx, + src0->grad, + F10, + inplace); + } + } break; + case GGML_OP_ABS: + { + if (src0->grad) { + src0->grad = + ggml_add_impl(ctx, + src0->grad, + ggml_mul(ctx, + ggml_sgn(ctx, src0), + tensor->grad), + inplace); + } + } break; + case GGML_OP_SGN: + { + if (src0->grad) { + // noop + } + } break; + case GGML_OP_NEG: + { + if (src0->grad) { + src0->grad = ggml_sub_impl(ctx, src0->grad, tensor->grad, inplace); + } + } break; + case GGML_OP_STEP: + { + if (src0->grad) { + // noop + } + } break; + case GGML_OP_RELU: + { + if (src0->grad) { + src0->grad = ggml_sub_impl(ctx, + src0->grad, + ggml_mul(ctx, + ggml_step(ctx, src0), + tensor->grad), + inplace); + } + } break; + case GGML_OP_GELU: + { + GGML_ASSERT(false); // TODO: not implemented + } break; + case GGML_OP_ALIBI: + { + GGML_ASSERT(false); // TODO: not implemented + } break; + case GGML_OP_CLAMP: + { + GGML_ASSERT(false); // TODO: not implemented + } break; + case GGML_OP_SILU: + { + // necessary for llama + if (src0->grad) { + src0->grad = ggml_add_impl(ctx, + src0->grad, + ggml_silu_back(ctx, src0, tensor->grad), + inplace); + } + } break; + case GGML_OP_SILU_BACK: + { + GGML_ASSERT(false); // TODO: not implemented + } break; + case GGML_OP_NORM: + { + GGML_ASSERT(false); // TODO: not implemented + } break; + case GGML_OP_RMS_NORM: + { + // necessary for llama + if (src0->grad) { + src0->grad = ggml_add_impl(ctx, + src0->grad, + ggml_rms_norm_back(ctx, src0, tensor->grad), + inplace); + } + } break; + case GGML_OP_RMS_NORM_BACK: + { + GGML_ASSERT(false); // TODO: not implemented + } break; + case GGML_OP_MUL_MAT: + { + // https://cs231n.github.io/optimization-2/#staged + // # forward pass + // s0 = np.random.randn(5, 10) + // s1 = np.random.randn(10, 3) + // t = s0.dot(s1) + + // # now suppose we had the gradient on t from above in the circuit + // dt = np.random.randn(*t.shape) # same shape as t + // ds0 = dt.dot(s1.T) #.T gives the transpose of the matrix + // ds1 = t.T.dot(dt) + + // tensor.shape [m,p] + // src0.shape [n,m] + // src1.shape [n,p] + + // necessary for llama + if (src0->grad) { + // TODO: this requires outer product - ggml_out_prod(ctx, src1, tensor->grad); + src0->grad = + ggml_add_impl(ctx, + src0->grad, + // ds0 = dt.dot(s1.T) + // ggml_out_prod(ctx, // [n,m] + // src1, // [n,p] + // tensor->grad), // [m,p] + // for now just using A*B==(B.T*A.T).T + ggml_cont(ctx, // [n,m] + ggml_transpose(ctx, // [n,m] + ggml_mul_mat(ctx, // [m,n] + ggml_cont(ctx, // [p,m] + ggml_transpose(ctx, // [p,m] + tensor->grad)), // [m,p] + ggml_cont(ctx, // [p,n] + ggml_transpose(ctx, // [p,n] + src1))))), // [n,p] + inplace); + } + if (src1->grad) { + src1->grad = + ggml_add_impl(ctx, + src1->grad, + // ds1 = s0.T.dot(dt): + ggml_mul_mat(ctx, // [n,p] + ggml_cont(ctx, // [m,n] + ggml_transpose(ctx, src0)), // [m,n] + tensor->grad), // [m,p] + inplace); + } + } break; + case GGML_OP_SCALE: + { + // necessary for llama + if (src0->grad) { + src0->grad = + ggml_add_impl(ctx, + src0->grad, + ggml_scale_impl(ctx, tensor->grad, src1, false), + inplace); + } + if (src1->grad) { + src1->grad = + ggml_add_impl(ctx, + src1->grad, + ggml_sum(ctx, ggml_mul_impl(ctx, tensor->grad, src0, false)), + inplace); + } + } break; + case GGML_OP_SET: + { + GGML_ASSERT(ggml_nelements(tensor->opt[0]) == 5); + GGML_ASSERT(tensor->opt[0]->type == GGML_TYPE_I32); + const size_t nb1 = (( int32_t * ) tensor->opt[0]->data)[0]; + const size_t nb2 = (( int32_t * ) tensor->opt[0]->data)[1]; + const size_t nb3 = (( int32_t * ) tensor->opt[0]->data)[2]; + const size_t offset = (( int32_t * ) tensor->opt[0]->data)[3]; + + struct ggml_tensor * tensor_grad_view = NULL; + + if (src0->grad || src1->grad) { + GGML_ASSERT(src0->type == tensor->type); + GGML_ASSERT(tensor->grad->type == tensor->type); + GGML_ASSERT(tensor->grad->type == src1->grad->type); + + tensor_grad_view = ggml_view_4d(ctx, + tensor->grad, + src1->grad->ne[0], + src1->grad->ne[1], + src1->grad->ne[2], + src1->grad->ne[3], + nb1, nb2, nb3, offset); + } + + if (src0->grad) { + src0->grad = ggml_add_impl(ctx, + src0->grad, + ggml_acc_impl(ctx, + tensor->grad, + ggml_neg(ctx, tensor_grad_view), + nb1, nb2, nb3, offset, false), + inplace); + } + + if (src1->grad) { + src1->grad = + ggml_add_impl(ctx, + src1->grad, + ggml_reshape(ctx, + ggml_cont(ctx, tensor_grad_view), + src1->grad), + inplace); + } + } break; + case GGML_OP_CPY: + { + // necessary for llama + // cpy overwrites value of src1 by src0 and returns view(src1) + // the overwriting is mathematically equivalent to: + // tensor = src0 * 1 + src1 * 0 + if (src0->grad) { + // dsrc0 = dtensor * 1 + src0->grad = ggml_add_impl(ctx, src0->grad, tensor->grad, inplace); + } + if (src1->grad) { + // dsrc1 = dtensor * 0 -> noop + } + } break; + case GGML_OP_CONT: + { + // same as cpy + if (src0->grad) { + GGML_ASSERT(ggml_is_contiguous(src0->grad)); + GGML_ASSERT(ggml_is_contiguous(tensor->grad)); + src0->grad = ggml_add_impl(ctx, src0->grad, tensor->grad, inplace); + } + } break; + case GGML_OP_RESHAPE: + { + // necessary for llama + if (src0->grad) { + src0->grad = + ggml_add_impl(ctx, src0->grad, + ggml_reshape(ctx, tensor->grad, src0->grad), + inplace); + } + } break; + case GGML_OP_VIEW: + { + // necessary for llama + if (src0->grad) { + size_t offset; + memcpy(&offset, tensor->padding, sizeof(offset)); + + size_t nb1 = tensor->nb[1]; + size_t nb2 = tensor->nb[2]; + size_t nb3 = tensor->nb[3]; + + if (src0->type != src0->grad->type) { + // gradient is typically F32, but src0 could be other type + size_t ng = ggml_element_size(src0->grad); + size_t n0 = ggml_element_size(src0); + GGML_ASSERT(offset % n0 == 0); + GGML_ASSERT(nb1 % n0 == 0); + GGML_ASSERT(nb2 % n0 == 0); + GGML_ASSERT(nb3 % n0 == 0); + offset = (offset / n0) * ng; + nb1 = (nb1 / n0) * ng; + nb2 = (nb2 / n0) * ng; + nb3 = (nb3 / n0) * ng; + } + + src0->grad = ggml_acc_impl(ctx, src0->grad, tensor->grad, nb1, nb2, nb3, offset, inplace); + } + } break; + case GGML_OP_PERMUTE: + { + // necessary for llama + if (src0->grad) { + int axis0 = tensor->padding[0] & 0x3; + int axis1 = tensor->padding[1] & 0x3; + int axis2 = tensor->padding[2] & 0x3; + int axis3 = tensor->padding[3] & 0x3; + int axes_backward[4] = {0,0,0,0}; + axes_backward[axis0] = 0; + axes_backward[axis1] = 1; + axes_backward[axis2] = 2; + axes_backward[axis3] = 3; + src0->grad = + ggml_add_impl(ctx, src0->grad, + ggml_permute(ctx, + tensor->grad, + axes_backward[0], + axes_backward[1], + axes_backward[2], + axes_backward[3]), + inplace); + } + } break; + case GGML_OP_TRANSPOSE: + { + // necessary for llama + if (src0->grad) { + src0->grad = + ggml_add_impl(ctx, src0->grad, + ggml_transpose(ctx, tensor->grad), + inplace); + } + } break; + case GGML_OP_GET_ROWS: + { + // necessary for llama (only for tokenizer) + if (src0->grad) { + src0->grad = + ggml_add_impl(ctx, src0->grad, + ggml_get_rows_back(ctx, tensor->grad, src1, src0->grad), + inplace); + } + if (src1->grad) { + // noop + } + } break; + case GGML_OP_GET_ROWS_BACK: + { + GGML_ASSERT(false); // TODO: not implemented + } break; + case GGML_OP_DIAG: + { + GGML_ASSERT(false); // TODO: not implemented + } break; + case GGML_OP_DIAG_MASK_INF: + { + // necessary for llama + if (src0->grad) { + assert(src1->type == GGML_TYPE_I32); + assert(ggml_nelements(src1) == 2); + const int n_past = ((int32_t *) src1->data)[0]; + src0->grad = + ggml_add_impl(ctx, src0->grad, + ggml_diag_mask_zero_impl(ctx, tensor->grad, n_past, false), + inplace); + } + if (src1->grad) { + // noop + } + } break; + case GGML_OP_DIAG_MASK_ZERO: + { + // necessary for llama + if (src0->grad) { + assert(src1->type == GGML_TYPE_I32); + assert(ggml_nelements(src1) == 2); + const int n_past = ((int32_t *) src1->data)[0]; + src0->grad = + ggml_add_impl(ctx, src0->grad, + ggml_diag_mask_zero_impl(ctx, tensor->grad, n_past, false), + inplace); + } + if (src1->grad) { + // noop + } + } break; + case GGML_OP_SOFT_MAX: + { + // necessary for llama + if (src0->grad) { + // y = softmax(x) + // + // Jii = yi - yi*yi + // Jij = -yi*yj + // J = diag(y)-y.*y + // dx = J * dy + // dxk = sum(Jkj * dyk) + + int64_t ne2[4] = { + tensor->ne[0], + 1, + tensor->ne[1]*tensor->ne[2], + tensor->ne[3] + }; + struct ggml_tensor * tensor2 = ggml_cont(ctx, + ggml_reshape_4d(ctx, + ggml_cont(ctx, tensor), + ne2[0], ne2[1], ne2[2], ne2[3])); + + struct ggml_tensor * grad2 = ggml_cont(ctx, + ggml_reshape_4d(ctx, + ggml_cont(ctx, tensor->grad), + ne2[0], ne2[1], ne2[2], ne2[3])); + + struct ggml_tensor * tensor2_t = ggml_cont(ctx, // [1,ne0,ne1*ne2,ne3] + ggml_permute(ctx, // [1,ne0,ne1*ne2,ne3] + tensor2, // [ne0,1,ne1*ne2,ne3] + 1, 0, 2, 3)); + + src0->grad = + ggml_add_impl(ctx, + src0->grad, // [ne0,ne1,ne2,ne3] + ggml_reshape(ctx, // [ne0,ne1,ne2,ne3] + ggml_mul_mat(ctx, // [ne0,1,ne1*ne2,ne3] + ggml_sub(ctx, // [ne0,ne0,ne1*ne2,ne3] + ggml_diag(ctx, // [ne0,ne0,ne1*ne2,ne3] + tensor2), // [ne0,1,ne1*ne2,ne3] + ggml_mul_mat(ctx, // [ne0,ne0,ne1*ne2,ne3] + tensor2_t, // [1,ne0,ne1*ne2,ne3] + tensor2_t)), // [1,ne0,ne1*ne2,ne3] + grad2), // [ne0,1,ne1*ne2,ne3] + src0->grad), + inplace); + } + } break; + case GGML_OP_ROPE: + { + // necessary for llama + if (src0->grad) { + assert(src1->type == GGML_TYPE_I32); + assert(ggml_nelements(src1) == 3); + const int n_past = ((int32_t *) src1->data)[0]; + const int n_dims = ((int32_t *) src1->data)[1]; + const int mode = ((int32_t *) src1->data)[2]; + src0->grad = ggml_add_impl(ctx, + src0->grad, + ggml_rope_back(ctx, + tensor->grad, + n_past, + n_dims, + mode), + inplace); + } + if (src1->grad) { + // noop + } + } break; + case GGML_OP_ROPE_BACK: + { + if (src0->grad) { + assert(src1->type == GGML_TYPE_I32); + assert(ggml_nelements(src1) == 3); + const int n_past = ((int32_t *) src1->data)[0]; + const int n_dims = ((int32_t *) src1->data)[1]; + const int mode = ((int32_t *) src1->data)[2]; + src0->grad = ggml_add_impl(ctx, + src0->grad, + ggml_rope(ctx, + tensor->grad, + n_past, + n_dims, + mode), + inplace); + } + if (src1->grad) { + // noop + } + } break; + case GGML_OP_CONV_1D_1S: + { + GGML_ASSERT(false); // TODO: not implemented + } break; + case GGML_OP_CONV_1D_2S: + { + GGML_ASSERT(false); // TODO: not implemented + } break; + case GGML_OP_FLASH_ATTN: + { + GGML_ASSERT(false); // not supported + } break; + case GGML_OP_FLASH_FF: + { + GGML_ASSERT(false); // not supported + } break; + case GGML_OP_MAP_UNARY: + case GGML_OP_MAP_BINARY: + { + GGML_ASSERT(false); // not supported + } break; + case GGML_OP_NONE: + { + // nop + } break; + case GGML_OP_COUNT: + { + GGML_ASSERT(false); + } break; + } +} + +static void ggml_visit_parents(struct ggml_cgraph * cgraph, struct ggml_tensor * node) { + if (node->grad == NULL) { + // this usually happens when we generate intermediate nodes from constants in the backward pass + // it can also happen during forward pass, if the user performs computations with constants + if (node->op != GGML_OP_NONE) { + //GGML_PRINT_DEBUG("%s: warning: node %p has no grad, but op %d\n", __func__, (void *) node, node->op); + } + } + + // check if already visited + for (int i = 0; i < cgraph->n_nodes; i++) { + if (cgraph->nodes[i] == node) { + return; + } + } + + for (int i = 0; i < cgraph->n_leafs; i++) { + if (cgraph->leafs[i] == node) { + return; + } + } + + if (node->src0) { + ggml_visit_parents(cgraph, node->src0); + } + + if (node->src1) { + ggml_visit_parents(cgraph, node->src1); + } + + for (int i = 0; i < GGML_MAX_OPT; ++i) { + if (node->opt[i]) { + ggml_visit_parents(cgraph, node->opt[i]); + } + } + + if (node->op == GGML_OP_NONE && node->grad == NULL) { + // reached a leaf node, not part of the gradient graph (e.g. a constant) + GGML_ASSERT(cgraph->n_leafs < GGML_MAX_NODES); + + cgraph->leafs[cgraph->n_leafs] = node; + cgraph->n_leafs++; + } else { + GGML_ASSERT(cgraph->n_nodes < GGML_MAX_NODES); + + cgraph->nodes[cgraph->n_nodes] = node; + cgraph->grads[cgraph->n_nodes] = node->grad; + cgraph->n_nodes++; + } +} + +static void ggml_build_forward_impl(struct ggml_cgraph * cgraph, struct ggml_tensor * tensor, bool expand) { + if (!expand) { + cgraph->n_nodes = 0; + cgraph->n_leafs = 0; + } + + const int n0 = cgraph->n_nodes; + UNUSED(n0); + + ggml_visit_parents(cgraph, tensor); + + const int n_new = cgraph->n_nodes - n0; + GGML_PRINT_DEBUG("%s: visited %d new nodes\n", __func__, n_new); + + if (n_new > 0) { + // the last added node should always be starting point + GGML_ASSERT(cgraph->nodes[cgraph->n_nodes - 1] == tensor); + } +} + +void ggml_build_forward_expand(struct ggml_cgraph * cgraph, struct ggml_tensor * tensor) { + ggml_build_forward_impl(cgraph, tensor, true); +} + +struct ggml_cgraph ggml_build_forward(struct ggml_tensor * tensor) { + struct ggml_cgraph result = { + /*.n_nodes =*/ 0, + /*.n_leafs =*/ 0, + /*.n_threads =*/ GGML_DEFAULT_N_THREADS, + /*.work_size =*/ 0, + /*.work =*/ NULL, + /*.nodes =*/ { NULL }, + /*.grads =*/ { NULL }, + /*.leafs =*/ { NULL }, + /*.perf_runs =*/ 0, + /*.perf_cycles =*/ 0, + /*.perf_time_us =*/ 0, + }; + + ggml_build_forward_impl(&result, tensor, false); + + return result; +} + +struct ggml_cgraph ggml_build_backward(struct ggml_context * ctx, struct ggml_cgraph * gf, bool keep) { + struct ggml_cgraph result = *gf; + + GGML_ASSERT(gf->n_nodes > 0); + + // if we are keeping the gradient graph, we have to detach the gradient nodes from the original graph + if (keep) { + for (int i = 0; i < gf->n_nodes; i++) { + struct ggml_tensor * node = gf->nodes[i]; + + if (node->grad) { + node->grad = ggml_dup_tensor(ctx, node); + gf->grads[i] = node->grad; + } + } + } + + for (int i = gf->n_nodes - 1; i >= 0; i--) { + struct ggml_tensor * node = gf->nodes[i]; + + // because we detached the grad nodes from the original graph, we can afford inplace operations + if (node->grad) { + ggml_compute_backward(ctx, node, keep); + } + } + + for (int i = gf->n_nodes - 1; i >= 0; i--) { + struct ggml_tensor * node = gf->nodes[i]; + + if (node->is_param) { + GGML_PRINT_DEBUG("%s: found root node %p\n", __func__, (void *) node); + ggml_build_forward_impl(&result, node->grad, true); + } + } + + return result; +} + +// +// thread data +// +// synchronization is done via busy loops +// I tried using spin locks, but not sure how to use them correctly - the things I tried were slower than busy loops +// + +#ifdef __APPLE__ + +//#include +// +//typedef os_unfair_lock ggml_lock_t; +// +//#define ggml_lock_init(x) UNUSED(x) +//#define ggml_lock_destroy(x) UNUSED(x) +//#define ggml_lock_lock os_unfair_lock_lock +//#define ggml_lock_unlock os_unfair_lock_unlock +// +//#define GGML_LOCK_INITIALIZER OS_UNFAIR_LOCK_INIT + +typedef int ggml_lock_t; + +#define ggml_lock_init(x) UNUSED(x) +#define ggml_lock_destroy(x) UNUSED(x) +#define ggml_lock_lock(x) UNUSED(x) +#define ggml_lock_unlock(x) UNUSED(x) + +#define GGML_LOCK_INITIALIZER 0 + +typedef pthread_t ggml_thread_t; + +#define ggml_thread_create pthread_create +#define ggml_thread_join pthread_join + +#else + +//typedef pthread_spinlock_t ggml_lock_t; + +//#define ggml_lock_init(x) pthread_spin_init(x, PTHREAD_PROCESS_PRIVATE) +//#define ggml_lock_destroy pthread_spin_destroy +//#define ggml_lock_lock pthread_spin_lock +//#define ggml_lock_unlock pthread_spin_unlock + +typedef int ggml_lock_t; + +#define ggml_lock_init(x) UNUSED(x) +#define ggml_lock_destroy(x) UNUSED(x) +#if defined(__x86_64__) || (defined(_MSC_VER) && defined(_M_AMD64)) +#define ggml_lock_lock(x) _mm_pause() +#else +#define ggml_lock_lock(x) UNUSED(x) +#endif +#define ggml_lock_unlock(x) UNUSED(x) + +#define GGML_LOCK_INITIALIZER 0 + +typedef pthread_t ggml_thread_t; + +#define ggml_thread_create pthread_create +#define ggml_thread_join pthread_join + +#endif + +struct ggml_compute_state_shared { + ggml_lock_t spin; + + int n_threads; + + // synchronization primitives + atomic_int n_ready; + atomic_bool has_work; + atomic_bool stop; // stop all threads +}; + +struct ggml_compute_state { + ggml_thread_t thrd; + + struct ggml_compute_params params; + struct ggml_tensor * node; + + struct ggml_compute_state_shared * shared; +}; + +static thread_ret_t ggml_graph_compute_thread(void * data) { + struct ggml_compute_state * state = (struct ggml_compute_state *) data; + + const int n_threads = state->shared->n_threads; + + while (true) { + if (atomic_fetch_add(&state->shared->n_ready, 1) == n_threads - 1) { + atomic_store(&state->shared->has_work, false); + } else { + while (atomic_load(&state->shared->has_work)) { + if (atomic_load(&state->shared->stop)) { + return 0; + } + ggml_lock_lock (&state->shared->spin); + ggml_lock_unlock(&state->shared->spin); + } + } + + atomic_fetch_sub(&state->shared->n_ready, 1); + + // wait for work + while (!atomic_load(&state->shared->has_work)) { + if (atomic_load(&state->shared->stop)) { + return 0; + } + ggml_lock_lock (&state->shared->spin); + ggml_lock_unlock(&state->shared->spin); + } + + // check if we should stop + if (atomic_load(&state->shared->stop)) { + break; + } + + if (state->node) { + if (state->params.ith < state->params.nth) { + ggml_compute_forward(&state->params, state->node); + } + + state->node = NULL; + } else { + break; + } + } + + return 0; +} + +void ggml_graph_compute(struct ggml_context * ctx, struct ggml_cgraph * cgraph) { + const int n_threads = cgraph->n_threads; + + struct ggml_compute_state_shared state_shared = { + /*.spin =*/ GGML_LOCK_INITIALIZER, + /*.n_threads =*/ n_threads, + /*.n_ready =*/ 0, + /*.has_work =*/ false, + /*.stop =*/ false, + }; + struct ggml_compute_state * workers = n_threads > 1 ? alloca(sizeof(struct ggml_compute_state)*(n_threads - 1)) : NULL; + + // create thread pool + if (n_threads > 1) { + ggml_lock_init(&state_shared.spin); + + atomic_store(&state_shared.has_work, true); + + for (int j = 0; j < n_threads - 1; j++) { + workers[j] = (struct ggml_compute_state) { + .thrd = 0, + .params = { + .type = GGML_TASK_COMPUTE, + .ith = j + 1, + .nth = n_threads, + .wsize = cgraph->work ? ggml_nbytes(cgraph->work) : 0, + .wdata = cgraph->work ? cgraph->work->data : NULL, + }, + .node = NULL, + .shared = &state_shared, + }; + + int rc = ggml_thread_create(&workers[j].thrd, NULL, ggml_graph_compute_thread, &workers[j]); + GGML_ASSERT(rc == 0); + UNUSED(rc); + } + } + + // initialize tasks + work buffer + { + size_t work_size = 0; + + // thread scheduling for the different operations + for (int i = 0; i < cgraph->n_nodes; i++) { + struct ggml_tensor * node = cgraph->nodes[i]; + + switch (node->op) { + case GGML_OP_CPY: + case GGML_OP_DUP: + { + node->n_tasks = n_threads; + + size_t cur = 0; + if (ggml_is_quantized(node->type)) { + cur = GGML_TYPE_SIZE[GGML_TYPE_F32] * node->ne[0] * n_threads; + } + + work_size = MAX(work_size, cur); + } break; + case GGML_OP_ADD: + case GGML_OP_ADD1: + { + node->n_tasks = n_threads; + + size_t cur = 0; + + if (ggml_is_quantized(node->src0->type)) { + cur = GGML_TYPE_SIZE[GGML_TYPE_F32] * node->src0->ne[0] * n_threads; + } + + work_size = MAX(work_size, cur); + } break; + case GGML_OP_ACC: + { + node->n_tasks = n_threads; + + size_t cur = 0; + + if (ggml_is_quantized(node->src0->type)) { + cur = GGML_TYPE_SIZE[GGML_TYPE_F32] * node->src1->ne[0] * n_threads; + } + + work_size = MAX(work_size, cur); + } break; + case GGML_OP_SUB: + case GGML_OP_DIV: + case GGML_OP_SQR: + case GGML_OP_SQRT: + case GGML_OP_LOG: + case GGML_OP_SUM: + case GGML_OP_SUM_ROWS: + case GGML_OP_MEAN: + case GGML_OP_REPEAT: + case GGML_OP_ABS: + case GGML_OP_SGN: + case GGML_OP_NEG: + case GGML_OP_STEP: + case GGML_OP_RELU: + { + node->n_tasks = 1; + } break; + case GGML_OP_MUL: + case GGML_OP_GELU: + case GGML_OP_SILU: + case GGML_OP_SILU_BACK: + case GGML_OP_NORM: + case GGML_OP_RMS_NORM: + case GGML_OP_RMS_NORM_BACK: + { + node->n_tasks = n_threads; + } break; + case GGML_OP_MUL_MAT: + { + node->n_tasks = n_threads; + + // TODO: use different scheduling for different matrix sizes + //const int nr0 = ggml_nrows(node->src0); + //const int nr1 = ggml_nrows(node->src1); + + //node->n_tasks = MIN(n_threads, MAX(1, nr0/128)); + //printf("nr0 = %8d, nr1 = %8d, nr0*nr1 = %8d, n_tasks = %d\n", nr0, nr1, nr0*nr1, node->n_tasks); + + size_t cur = 0; + +#if defined(GGML_USE_CUBLAS) + if (ggml_cuda_can_mul_mat(node->src0, node->src1, node)) { + node->n_tasks = 1; // TODO: this actually is doing nothing + // the threads are still spinning + cur = ggml_cuda_mul_mat_get_wsize(node->src0, node->src1, node); + } + else +#endif + if (node->src0->type == GGML_TYPE_F16 && node->src1->type == GGML_TYPE_F32) { +#if defined(GGML_USE_ACCELERATE) || defined(GGML_USE_OPENBLAS) || defined(GGML_USE_CLBLAST) + if (ggml_compute_forward_mul_mat_use_blas(node->src0, node->src1, node)) { + node->n_tasks = 1; // TODO: this actually is doing nothing + // the threads are still spinning + // here we need memory just for single 2D matrix from src0 + cur = GGML_TYPE_SIZE[GGML_TYPE_F32]*(node->src0->ne[0]*node->src0->ne[1]); + } else { + cur = GGML_TYPE_SIZE[GGML_TYPE_F16]*ggml_nelements(node->src1); + } +#else + cur = GGML_TYPE_SIZE[GGML_TYPE_F16]*ggml_nelements(node->src1); +#endif + } else if (node->src0->type == GGML_TYPE_F32 && node->src1->type == GGML_TYPE_F32) { + cur = 0; +#if defined(GGML_USE_ACCELERATE) || defined(GGML_USE_OPENBLAS) || defined(GGML_USE_CLBLAST) + if (ggml_compute_forward_mul_mat_use_blas(node->src0, node->src1, node)) { + node->n_tasks = 1; + } +#endif + } else if (ggml_is_quantized(node->src0->type) && node->src1->type == GGML_TYPE_F32) { +#if defined(GGML_USE_ACCELERATE) || defined(GGML_USE_OPENBLAS) || defined(GGML_USE_CLBLAST) + if (ggml_compute_forward_mul_mat_use_blas(node->src0, node->src1, node)) { + node->n_tasks = 1; + cur = GGML_TYPE_SIZE[GGML_TYPE_F32]*(node->src0->ne[0]*node->src0->ne[1]); + } else +#endif + { + const enum ggml_type type_q = quantize_fns[node->src0->type].vec_dot_type; + cur = GGML_TYPE_SIZE[type_q]*ggml_nelements(node->src1)/GGML_BLCK_SIZE[type_q]; + } + } else { + GGML_ASSERT(false); + } + + work_size = MAX(work_size, cur); + } break; + case GGML_OP_SCALE: + { + node->n_tasks = n_threads; + } break; + case GGML_OP_SET: + case GGML_OP_CONT: + case GGML_OP_RESHAPE: + case GGML_OP_VIEW: + case GGML_OP_PERMUTE: + case GGML_OP_TRANSPOSE: + case GGML_OP_GET_ROWS: + case GGML_OP_GET_ROWS_BACK: + case GGML_OP_DIAG: + case GGML_OP_DIAG_MASK_ZERO: + { + node->n_tasks = 1; + } break; + case GGML_OP_DIAG_MASK_INF: + case GGML_OP_SOFT_MAX: + case GGML_OP_ROPE: + case GGML_OP_ROPE_BACK: + { + node->n_tasks = n_threads; + } break; + case GGML_OP_ALIBI: + { + node->n_tasks = 1; //TODO + } break; + case GGML_OP_CLAMP: + { + node->n_tasks = 1; //TODO + } break; + case GGML_OP_CONV_1D_1S: + case GGML_OP_CONV_1D_2S: + { + node->n_tasks = n_threads; + + GGML_ASSERT(node->src0->ne[3] == 1); + GGML_ASSERT(node->src1->ne[2] == 1); + GGML_ASSERT(node->src1->ne[3] == 1); + + size_t cur = 0; + const int nk = node->src0->ne[0]; + + if (node->src0->type == GGML_TYPE_F16 && + node->src1->type == GGML_TYPE_F32) { + cur = sizeof(ggml_fp16_t)*( + nk*ggml_up32(node->src0->ne[1])*node->src0->ne[2] + + ( 2*(nk/2) + node->src1->ne[0])*node->src1->ne[1] + ); + } else if (node->src0->type == GGML_TYPE_F32 && + node->src1->type == GGML_TYPE_F32) { + cur = sizeof(float)*( + nk*ggml_up32(node->src0->ne[1])*node->src0->ne[2] + + ( 2*(nk/2) + node->src1->ne[0])*node->src1->ne[1] + ); + } else { + GGML_ASSERT(false); + } + + work_size = MAX(work_size, cur); + } break; + case GGML_OP_FLASH_ATTN: + { + node->n_tasks = n_threads; + + size_t cur = 0; + + const int64_t ne11 = ggml_up(node->src1->ne[1], GGML_SOFT_MAX_UNROLL); + + if (node->src1->type == GGML_TYPE_F32) { + cur = sizeof(float)*ne11*node->n_tasks; // TODO: this can become (n_tasks-1) + cur += sizeof(float)*ne11*node->n_tasks; // this is overestimated by x2 + } + + if (node->src1->type == GGML_TYPE_F16) { + cur = sizeof(float)*ne11*node->n_tasks; // TODO: this can become (n_tasks-1) + cur += sizeof(float)*ne11*node->n_tasks; // this is overestimated by x2 + } + + work_size = MAX(work_size, cur); + } break; + case GGML_OP_FLASH_FF: + { + node->n_tasks = n_threads; + + size_t cur = 0; + + if (node->src1->type == GGML_TYPE_F32) { + cur = sizeof(float)*node->src1->ne[1]*node->n_tasks; // TODO: this can become (n_tasks-1) + cur += sizeof(float)*node->src1->ne[1]*node->n_tasks; // this is overestimated by x2 + } + + if (node->src1->type == GGML_TYPE_F16) { + cur = sizeof(float)*node->src1->ne[1]*node->n_tasks; // TODO: this can become (n_tasks-1) + cur += sizeof(float)*node->src1->ne[1]*node->n_tasks; // this is overestimated by x2 + } + + work_size = MAX(work_size, cur); + } break; + case GGML_OP_MAP_UNARY: + case GGML_OP_MAP_BINARY: + { + node->n_tasks = 1; + } break; + case GGML_OP_NONE: + { + node->n_tasks = 1; + } break; + case GGML_OP_COUNT: + { + GGML_ASSERT(false); + } break; + } + } + + if (cgraph->work != NULL && work_size > cgraph->work_size) { + GGML_ASSERT(false); // TODO: better handling + } + + if (work_size > 0 && cgraph->work == NULL) { + cgraph->work_size = work_size + CACHE_LINE_SIZE*(n_threads - 1); + + GGML_PRINT_DEBUG("%s: allocating work buffer for graph (%zu bytes)\n", __func__, cgraph->work_size); + cgraph->work = ggml_new_tensor_1d(ctx, GGML_TYPE_I8, cgraph->work_size); + } + } + + const int64_t perf_start_cycles = ggml_perf_cycles(); + const int64_t perf_start_time_us = ggml_perf_time_us(); + + for (int i = 0; i < cgraph->n_nodes; i++) { + GGML_PRINT_DEBUG_5("%s: %d/%d\n", __func__, i, cgraph->n_nodes); + + struct ggml_tensor * node = cgraph->nodes[i]; + + // TODO: this could be used to avoid unnecessary computations, but it needs to be improved + //if (node->grad == NULL && node->perf_runs > 0) { + // continue; + //} + + const int64_t perf_node_start_cycles = ggml_perf_cycles(); + const int64_t perf_node_start_time_us = ggml_perf_time_us(); + + // INIT + struct ggml_compute_params params = { + /*.type =*/ GGML_TASK_INIT, + /*.ith =*/ 0, + /*.nth =*/ node->n_tasks, + /*.wsize =*/ cgraph->work ? ggml_nbytes(cgraph->work) : 0, + /*.wdata =*/ cgraph->work ? cgraph->work->data : NULL, + }; + + ggml_compute_forward(¶ms, node); + + // COMPUTE + if (node->n_tasks > 1) { + if (atomic_fetch_add(&state_shared.n_ready, 1) == n_threads - 1) { + atomic_store(&state_shared.has_work, false); + } + + while (atomic_load(&state_shared.has_work)) { + ggml_lock_lock (&state_shared.spin); + ggml_lock_unlock(&state_shared.spin); + } + + // launch thread pool + for (int j = 0; j < n_threads - 1; j++) { + workers[j].params = (struct ggml_compute_params) { + .type = GGML_TASK_COMPUTE, + .ith = j + 1, + .nth = node->n_tasks, + .wsize = cgraph->work ? ggml_nbytes(cgraph->work) : 0, + .wdata = cgraph->work ? cgraph->work->data : NULL, + }; + workers[j].node = node; + } + + atomic_fetch_sub(&state_shared.n_ready, 1); + + while (atomic_load(&state_shared.n_ready) > 0) { + ggml_lock_lock (&state_shared.spin); + ggml_lock_unlock(&state_shared.spin); + } + + atomic_store(&state_shared.has_work, true); + } + + params.type = GGML_TASK_COMPUTE; + ggml_compute_forward(¶ms, node); + + // wait for thread pool + if (node->n_tasks > 1) { + if (atomic_fetch_add(&state_shared.n_ready, 1) == n_threads - 1) { + atomic_store(&state_shared.has_work, false); + } + + while (atomic_load(&state_shared.has_work)) { + ggml_lock_lock (&state_shared.spin); + ggml_lock_unlock(&state_shared.spin); + } + + atomic_fetch_sub(&state_shared.n_ready, 1); + + while (atomic_load(&state_shared.n_ready) != 0) { + ggml_lock_lock (&state_shared.spin); + ggml_lock_unlock(&state_shared.spin); + } + } + + // FINALIZE + if (node->n_tasks > 1) { + if (atomic_fetch_add(&state_shared.n_ready, 1) == n_threads - 1) { + atomic_store(&state_shared.has_work, false); + } + + while (atomic_load(&state_shared.has_work)) { + ggml_lock_lock (&state_shared.spin); + ggml_lock_unlock(&state_shared.spin); + } + + // launch thread pool + for (int j = 0; j < n_threads - 1; j++) { + workers[j].params = (struct ggml_compute_params) { + .type = GGML_TASK_FINALIZE, + .ith = j + 1, + .nth = node->n_tasks, + .wsize = cgraph->work ? ggml_nbytes(cgraph->work) : 0, + .wdata = cgraph->work ? cgraph->work->data : NULL, + }; + workers[j].node = node; + } + + atomic_fetch_sub(&state_shared.n_ready, 1); + + while (atomic_load(&state_shared.n_ready) > 0) { + ggml_lock_lock (&state_shared.spin); + ggml_lock_unlock(&state_shared.spin); + } + + atomic_store(&state_shared.has_work, true); + } + + params.type = GGML_TASK_FINALIZE; + ggml_compute_forward(¶ms, node); + + // wait for thread pool + if (node->n_tasks > 1) { + if (atomic_fetch_add(&state_shared.n_ready, 1) == n_threads - 1) { + atomic_store(&state_shared.has_work, false); + } + + while (atomic_load(&state_shared.has_work)) { + ggml_lock_lock (&state_shared.spin); + ggml_lock_unlock(&state_shared.spin); + } + + atomic_fetch_sub(&state_shared.n_ready, 1); + + while (atomic_load(&state_shared.n_ready) != 0) { + ggml_lock_lock (&state_shared.spin); + ggml_lock_unlock(&state_shared.spin); + } + } + + // performance stats (node) + { + int64_t perf_cycles_cur = ggml_perf_cycles() - perf_node_start_cycles; + int64_t perf_time_us_cur = ggml_perf_time_us() - perf_node_start_time_us; + + node->perf_runs++; + node->perf_cycles += perf_cycles_cur; + node->perf_time_us += perf_time_us_cur; + } + } + + // join thread pool + if (n_threads > 1) { + atomic_store(&state_shared.stop, true); + atomic_store(&state_shared.has_work, true); + + for (int j = 0; j < n_threads - 1; j++) { + int rc = ggml_thread_join(workers[j].thrd, NULL); + GGML_ASSERT(rc == 0); + UNUSED(rc); + } + + ggml_lock_destroy(&state_shared.spin); + } + + // performance stats (graph) + { + int64_t perf_cycles_cur = ggml_perf_cycles() - perf_start_cycles; + int64_t perf_time_us_cur = ggml_perf_time_us() - perf_start_time_us; + + cgraph->perf_runs++; + cgraph->perf_cycles += perf_cycles_cur; + cgraph->perf_time_us += perf_time_us_cur; + + GGML_PRINT_DEBUG("%s: perf (%d) - cpu = %.3f / %.3f ms, wall = %.3f / %.3f ms\n", + __func__, cgraph->perf_runs, + (double) perf_cycles_cur / (double) ggml_cycles_per_ms(), + (double) cgraph->perf_cycles / (double) ggml_cycles_per_ms() / (double) cgraph->perf_runs, + (double) perf_time_us_cur / 1000.0, + (double) cgraph->perf_time_us / 1000.0 / cgraph->perf_runs); + } +} + +void ggml_graph_reset(struct ggml_cgraph * cgraph) { + for (int i = 0; i < cgraph->n_nodes; i++) { + struct ggml_tensor * grad = cgraph->grads[i]; + + if (grad) { + ggml_set_zero(grad); + } + } +} + +void ggml_graph_print(const struct ggml_cgraph * cgraph) { + int64_t perf_total_per_op_us[GGML_OP_COUNT] = {0}; + + GGML_PRINT("=== GRAPH ===\n"); + + GGML_PRINT_DEBUG("n_threads = %d\n", cgraph->n_threads); + GGML_PRINT_DEBUG("total work size = %zu bytes\n", cgraph->work_size); + + GGML_PRINT("n_nodes = %d\n", cgraph->n_nodes); + for (int i = 0; i < cgraph->n_nodes; i++) { + struct ggml_tensor * node = cgraph->nodes[i]; + + perf_total_per_op_us[node->op] += MAX(1, node->perf_time_us); + + GGML_PRINT(" - %3d: [ %5" PRId64 ", %5" PRId64 ", %5" PRId64 "] %16s %s (%3d) cpu = %7.3f / %7.3f ms, wall = %7.3f / %7.3f ms\n", + i, + node->ne[0], node->ne[1], node->ne[2], + GGML_OP_LABEL[node->op], node->is_param ? "x" : node->grad ? "g" : " ", node->perf_runs, + (double) node->perf_cycles / (double) ggml_cycles_per_ms(), + (double) node->perf_cycles / (double) ggml_cycles_per_ms() / (double) node->perf_runs, + (double) node->perf_time_us / 1000.0, + (double) node->perf_time_us / 1000.0 / node->perf_runs); + } + + GGML_PRINT("n_leafs = %d\n", cgraph->n_leafs); + for (int i = 0; i < cgraph->n_leafs; i++) { + struct ggml_tensor * node = cgraph->leafs[i]; + + GGML_PRINT(" - %3d: [ %5" PRId64 ", %5" PRId64 "] %8s\n", + i, + node->ne[0], node->ne[1], + GGML_OP_LABEL[node->op]); + } + + for (int i = 0; i < GGML_OP_COUNT; i++) { + if (perf_total_per_op_us[i] == 0) { + continue; + } + + GGML_PRINT("perf_total_per_op_us[%16s] = %7.3f ms\n", GGML_OP_LABEL[i], (double) perf_total_per_op_us[i] / 1000.0); + } + + GGML_PRINT("========================================\n"); +} + +// check if node is part of the graph +static bool ggml_graph_find(const struct ggml_cgraph * cgraph, const struct ggml_tensor * node) { + if (cgraph == NULL) { + return true; + } + + for (int i = 0; i < cgraph->n_nodes; i++) { + if (cgraph->nodes[i] == node) { + return true; + } + } + + return false; +} + +static struct ggml_tensor * ggml_graph_get_parent(const struct ggml_cgraph * cgraph, const struct ggml_tensor * node) { + for (int i = 0; i < cgraph->n_nodes; i++) { + struct ggml_tensor * parent = cgraph->nodes[i]; + + if (parent->grad == node) { + return parent; + } + } + + return NULL; +} + +void ggml_graph_dump_dot(const struct ggml_cgraph * gb, const struct ggml_cgraph * gf, const char * filename) { + char color[16]; + + FILE * fp = fopen(filename, "w"); + GGML_ASSERT(fp); + + fprintf(fp, "digraph G {\n"); + fprintf(fp, " newrank = true;\n"); + fprintf(fp, " rankdir = LR;\n"); + + for (int i = 0; i < gb->n_nodes; i++) { + struct ggml_tensor * node = gb->nodes[i]; + + if (ggml_graph_get_parent(gb, node) != NULL) { + continue; + } + + if (node->is_param) { + snprintf(color, sizeof(color), "yellow"); + } else if (node->grad) { + if (ggml_graph_find(gf, node)) { + snprintf(color, sizeof(color), "green"); + } else { + snprintf(color, sizeof(color), "lightblue"); + } + } else { + snprintf(color, sizeof(color), "white"); + } + + fprintf(fp, " \"%p\" [ " + "style = filled; fillcolor = %s; shape = record; " + "label=\"", + (void *) node, color); + + if (strlen(node->name) > 0) { + fprintf(fp, "%s |", node->name); + } + + fprintf(fp, "%d [%" PRId64 ", %" PRId64 "] | %s", + i, node->ne[0], node->ne[1], + GGML_OP_SYMBOL[node->op]); + + if (node->grad) { + fprintf(fp, " | %s\"; ]\n", GGML_OP_SYMBOL[node->grad->op]); + } else { + fprintf(fp, "\"; ]\n"); + } + } + + for (int i = 0; i < gb->n_leafs; i++) { + struct ggml_tensor * node = gb->leafs[i]; + + snprintf(color, sizeof(color), "pink"); + + fprintf(fp, " \"%p\" [ " + "style = filled; fillcolor = %s; shape = record; " + "label=\"", + (void *) node, color); + + if (strlen(node->name) > 0) { + fprintf(fp, "%s | ", node->name); + } + if (ggml_nelements(node) == 1) { + if (node->type == GGML_TYPE_I8 || node->type == GGML_TYPE_I16 || node->type == GGML_TYPE_I32) { + fprintf(fp, "%d", ggml_get_i32_1d(node, 0)); + } + else { + fprintf(fp, "%.1e", (double)ggml_get_f32_1d(node, 0)); + } + } + else { + fprintf(fp, "CONST %d [%" PRId64 ", %" PRId64 "]", i, node->ne[0], node->ne[1]); + } + fprintf(fp, "\"; ]\n"); + } + + for (int i = 0; i < gb->n_nodes; i++) { + struct ggml_tensor * node = gb->nodes[i]; + + struct ggml_tensor * parent = ggml_graph_get_parent(gb, node); + + if (node->src0) { + struct ggml_tensor * parent0 = ggml_graph_get_parent(gb, node->src0); + + fprintf(fp, " \"%p\":%s -> \"%p\":%s [ arrowhead = %s; style = %s; label = \"x\"; ]\n", + parent0 ? (void *) parent0 : (void *) node->src0, + parent0 ? "g" : "x", + parent ? (void *) parent : (void *) node, + parent ? "g" : "x", + parent ? "empty" : "vee", + parent ? "dashed" : "solid"); + } + + if (node->src1) { + struct ggml_tensor * parent1 = ggml_graph_get_parent(gb, node->src1); + + fprintf(fp, " \"%p\":%s -> \"%p\":%s [ arrowhead = %s; style = %s; label = \"y\"; ]\n", + parent1 ? (void *) parent1 : (void *) node->src1, + parent1 ? "g" : "x", + parent ? (void *) parent : (void *) node, + parent ? "g" : "x", + parent ? "empty" : "vee", + parent ? "dashed" : "solid"); + } + } + + for (int i = 0; i < gb->n_leafs; i++) { + struct ggml_tensor * node = gb->leafs[i]; + + if (node->src0) { + fprintf(fp, " \"%p\":%s -> \"%p\":%s [ label = \"x\"; ]\n", + (void *) node->src0, "x", + (void *) node, "x"); + } + + if (node->src1) { + fprintf(fp, " \"%p\":%s -> \"%p\":%s [ label = \"y\"; ]\n", + (void *) node->src1, "x", + (void *) node, "x"); + } + } + + fprintf(fp, "}\n"); + + fclose(fp); + + GGML_PRINT("%s: dot -Tpng %s -o %s.png && open %s.png\n", __func__, filename, filename, filename); +} + +//////////////////////////////////////////////////////////////////////////////// + +static void ggml_opt_set_params(int np, struct ggml_tensor * const ps[], const float * x) { + int i = 0; + for (int p = 0; p < np; ++p) { + const int64_t ne = ggml_nelements(ps[p]) ; + // TODO: add function to set tensor from array + for (int64_t j = 0; j < ne; ++j) { + ggml_set_f32_1d(ps[p], j, x[i++]); + } + } +} + +static void ggml_opt_get_params(int np, struct ggml_tensor * const ps[], float * x) { + int i = 0; + for (int p = 0; p < np; ++p) { + const int64_t ne = ggml_nelements(ps[p]) ; + // TODO: add function to get all elements at once + for (int64_t j = 0; j < ne; ++j) { + x[i++] = ggml_get_f32_1d(ps[p], j); + } + } +} + +static void ggml_opt_get_grad(int np, struct ggml_tensor * const ps[], float * g) { + int i = 0; + for (int p = 0; p < np; ++p) { + const int64_t ne = ggml_nelements(ps[p]) ; + // TODO: add function to get all elements at once + for (int64_t j = 0; j < ne; ++j) { + g[i++] = ggml_get_f32_1d(ps[p]->grad, j); + } + } +} + +// +// ADAM +// +// ref: https://arxiv.org/pdf/1412.6980.pdf +// + +static enum ggml_opt_result ggml_opt_adam( + struct ggml_context * ctx, + struct ggml_opt_params params, + struct ggml_tensor * f, + struct ggml_cgraph * gf, + struct ggml_cgraph * gb) { + GGML_ASSERT(ggml_is_scalar(f)); + + gf->n_threads = params.n_threads; + gb->n_threads = params.n_threads; + + // these will store the parameters we want to optimize + struct ggml_tensor * ps[GGML_MAX_PARAMS]; + + int np = 0; + int nx = 0; + for (int i = 0; i < gf->n_nodes; ++i) { + if (gf->nodes[i]->is_param) { + GGML_PRINT_DEBUG("found param %d: grad->op = %d\n", np, gf->nodes[i]->grad->op); + + GGML_ASSERT(np < GGML_MAX_PARAMS); + + ps[np++] = gf->nodes[i]; + nx += ggml_nelements(gf->nodes[i]); + } + } + + // constants + const float alpha = params.adam.alpha; + const float beta1 = params.adam.beta1; + const float beta2 = params.adam.beta2; + const float eps = params.adam.eps; + + float * x = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, nx)->data; // view of the parameters + float * g1 = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, nx)->data; // gradient + float * g2 = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, nx)->data; // gradient squared + float * m = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, nx)->data; // first moment + float * v = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, nx)->data; // second moment + float * mh = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, nx)->data; // first moment hat + float * vh = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, nx)->data; // second moment hat + + float * pf = params.past > 0 ? ggml_new_tensor_1d(ctx, GGML_TYPE_F32, params.past)->data : NULL; // past function values + + // initialize + ggml_vec_set_f32(nx, m, 0.0f); + ggml_vec_set_f32(nx, v, 0.0f); + + // update view + ggml_opt_get_params(np, ps, x); + + // compute the function value + ggml_graph_reset (gf); + ggml_set_f32 (f->grad, 1.0f); + ggml_graph_compute(ctx, gb); + + float fx_prev = ggml_get_f32_1d(f, 0); + if (pf) { + pf[0] = fx_prev; + } + + int n_no_improvement = 0; + float fx_best = fx_prev; + + // run the optimizer + for (int t = 0; t < params.adam.n_iter; ++t) { + GGML_PRINT_DEBUG ("=== iter %d ===\n", t); + + GGML_PRINT_DEBUG ("f = %10.6f\n", ggml_get_f32_1d(f, 0)); + GGML_PRINT_DEBUG_5("df/dx0 = %10.6f\n", ggml_get_f32_1d(ps[0]->grad, 0)); + GGML_PRINT_DEBUG_5("df/dx1 = %10.6f\n", ggml_get_f32_1d(ps[1]->grad, 0)); + + for (int i = 0; i < np; ++i) { + GGML_PRINT_DEBUG("param %d: %10.6f, g = %10.6f\n", i, + ggml_get_f32_1d(ps[i], 0), ggml_get_f32_1d(ps[i]->grad, 0)); + } + + const int64_t t_start_wall = ggml_time_us(); + const int64_t t_start_cpu = ggml_cycles(); + UNUSED(t_start_wall); + UNUSED(t_start_cpu); + + { + // update the gradient + ggml_opt_get_grad(np, ps, g1); + + // m_t = beta1*m_t-1 + (1 - beta1)*g_t + ggml_vec_scale_f32(nx, m, beta1); + ggml_vec_mad_f32 (nx, m, g1, 1.0f - beta1); + + // g2 = g1^2 + ggml_vec_sqr_f32 (nx, g2, g1); + + // v_t = beta2*v_t-1 + (1 - beta2)*g_t^2 + ggml_vec_scale_f32(nx, v, beta2); + ggml_vec_mad_f32 (nx, v, g2, 1.0f - beta2); + + // m^hat = m_t / (1 - beta1^t) + // v^hat = v_t / (1 - beta2^t) + // x_t = x_t-1 - alpha*m^hat/(sqrt(v^hat) + eps) + ggml_vec_cpy_f32 (nx, mh, m); + ggml_vec_cpy_f32 (nx, vh, v); + + ggml_vec_scale_f32(nx, mh, alpha/(1.0f - powf(beta1, t + 1))); + ggml_vec_scale_f32(nx, vh, 1.0f/(1.0f - powf(beta2, t + 1))); + + ggml_vec_sqrt_f32 (nx, vh, vh); + ggml_vec_acc1_f32 (nx, vh, eps); + + ggml_vec_div_f32 (nx, mh, mh, vh); + ggml_vec_sub_f32 (nx, x, x, mh); + + // update the parameters + ggml_opt_set_params(np, ps, x); + } + + ggml_graph_reset (gf); + ggml_set_f32 (f->grad, 1.0f); + ggml_graph_compute(ctx, gb); + + const float fx = ggml_get_f32_1d(f, 0); + + // check convergence + if (fabsf(fx - fx_prev)/fx < params.adam.eps_f) { + GGML_PRINT_DEBUG("converged\n"); + + return GGML_OPT_OK; + } + + // delta-based convergence test + if (pf != NULL) { + // need at least params.past iterations to start checking for convergence + if (params.past <= t) { + const float rate = (pf[t%params.past] - fx)/fx; + + if (fabsf(rate) < params.delta) { + return GGML_OPT_OK; + } + } + + pf[t%params.past] = fx; + } + + // check for improvement + if (params.max_no_improvement > 0) { + if (fx_best > fx) { + fx_best = fx; + n_no_improvement = 0; + } else { + ++n_no_improvement; + + if (n_no_improvement >= params.max_no_improvement) { + return GGML_OPT_OK; + } + } + } + + fx_prev = fx; + + { + const int64_t t_end_cpu = ggml_cycles(); + GGML_PRINT_DEBUG("time iter: %5.3f s\n", ((float)(t_end_cpu - t_start_cpu))/CLOCKS_PER_SEC); + UNUSED(t_end_cpu); + + const int64_t t_end_wall = ggml_time_us(); + GGML_PRINT_DEBUG("wall time iter: %5.3f s\n", (t_end_wall - t_start_wall)/1e6); + UNUSED(t_end_wall); + } + } + + return GGML_OPT_DID_NOT_CONVERGE; +} + +// +// L-BFGS +// +// the L-BFGS implementation below is based on the following implementation: +// +// https://github.com/chokkan/liblbfgs +// + +struct ggml_lbfgs_iteration_data { + float alpha; + float ys; + float * s; + float * y; +}; + +static enum ggml_opt_result linesearch_backtracking( + struct ggml_context * ctx, + const struct ggml_opt_params * params, + int nx, + float * x, + float * fx, + float * g, + float * d, + float * step, + const float * xp, + struct ggml_tensor * f, + struct ggml_cgraph * gf, + struct ggml_cgraph * gb, + const int np, + struct ggml_tensor * ps[]) { + int count = 0; + + float width = 0.0f; + float dg = 0.0f; + float finit = 0.0f; + float dginit = 0.0f; + float dgtest = 0.0f; + + const float dec = 0.5f; + const float inc = 2.1f; + + if (*step <= 0.f) { + return GGML_LINESEARCH_INVALID_PARAMETERS; + } + + // compute the initial gradient in the search direction + ggml_vec_dot_f32(nx, &dginit, g, d); + + // make sure that d points to a descent direction + if (0 < dginit) { + return GGML_LINESEARCH_FAIL; + } + + // initialize local variables + finit = *fx; + dgtest = params->lbfgs.ftol*dginit; + + while (true) { + ggml_vec_cpy_f32(nx, x, xp); + ggml_vec_mad_f32(nx, x, d, *step); + + // evaluate the function and gradient values + { + ggml_opt_set_params(np, ps, x); + + ggml_graph_reset (gf); + ggml_set_f32 (f->grad, 1.0f); + ggml_graph_compute(ctx, gb); + + ggml_opt_get_grad(np, ps, g); + + *fx = ggml_get_f32_1d(f, 0); + } + + ++count; + + if (*fx > finit + (*step)*dgtest) { + width = dec; + } else { + // Armijo condition is satisfied + if (params->lbfgs.linesearch == GGML_LINESEARCH_BACKTRACKING_ARMIJO) { + return count; + } + + ggml_vec_dot_f32(nx, &dg, g, d); + + // check the Wolfe condition + if (dg < params->lbfgs.wolfe * dginit) { + width = inc; + } else { + if(params->lbfgs.linesearch == GGML_LINESEARCH_BACKTRACKING_WOLFE) { + // regular Wolfe conditions + return count; + } + + if(dg > -params->lbfgs.wolfe*dginit) { + width = dec; + } else { + // strong Wolfe condition (GGML_LINESEARCH_BACKTRACKING_STRONG_WOLFE) + return count; + } + return count; + } + } + + if (*step < params->lbfgs.min_step) { + return GGML_LINESEARCH_MINIMUM_STEP; + } + if (*step > params->lbfgs.max_step) { + return GGML_LINESEARCH_MAXIMUM_STEP; + } + if (params->lbfgs.max_linesearch <= count) { + return GGML_LINESEARCH_MAXIMUM_ITERATIONS; + } + + (*step) *= width; + } + + return GGML_LINESEARCH_FAIL; +} + +static enum ggml_opt_result ggml_opt_lbfgs( + struct ggml_context * ctx, + struct ggml_opt_params params, + struct ggml_tensor * f, + struct ggml_cgraph * gf, + struct ggml_cgraph * gb) { + if (params.lbfgs.linesearch == GGML_LINESEARCH_BACKTRACKING_WOLFE || + params.lbfgs.linesearch == GGML_LINESEARCH_BACKTRACKING_STRONG_WOLFE) { + if (params.lbfgs.wolfe <= params.lbfgs.ftol || 1.f <= params.lbfgs.wolfe) { + return GGML_OPT_INVALID_WOLFE; + } + } + + gf->n_threads = params.n_threads; + gb->n_threads = params.n_threads; + + const int m = params.lbfgs.m; + + // these will store the parameters we want to optimize + struct ggml_tensor * ps[GGML_MAX_PARAMS]; + + int np = 0; + int nx = 0; + for (int i = 0; i < gf->n_nodes; ++i) { + if (gf->nodes[i]->is_param) { + GGML_PRINT_DEBUG("found param %d: grad->op = %d\n", np, gf->nodes[i]->grad->op); + + GGML_ASSERT(np < GGML_MAX_PARAMS); + + ps[np++] = gf->nodes[i]; + nx += ggml_nelements(gf->nodes[i]); + } + } + + float * x = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, nx)->data; // current parameters + float * xp = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, nx)->data; // previous parameters + float * g = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, nx)->data; // current gradient + float * gp = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, nx)->data; // previous gradient + float * d = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, nx)->data; // search direction + + float * pf = params.past > 0 ? ggml_new_tensor_1d(ctx, GGML_TYPE_F32, params.past)->data : NULL; // past function values + + float fx = 0.0f; // cost function value + float xnorm = 0.0f; // ||x|| + float gnorm = 0.0f; // ||g|| + float step = 0.0f; + + // initialize x from the graph nodes + ggml_opt_get_params(np, ps, x); + + // the L-BFGS memory + struct ggml_lbfgs_iteration_data * lm = alloca(sizeof(struct ggml_lbfgs_iteration_data)*m); + + for (int i = 0; i < m; ++i) { + lm[i].alpha = 0.0f; + lm[i].ys = 0.0f; + lm[i].s = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, nx)->data; + lm[i].y = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, nx)->data; + } + + // evaluate the function value and its gradient + { + ggml_opt_set_params(np, ps, x); + + ggml_graph_reset (gf); + ggml_set_f32 (f->grad, 1.0f); + ggml_graph_compute(ctx, gb); + + ggml_opt_get_grad(np, ps, g); + + fx = ggml_get_f32_1d(f, 0); + } + + if (pf) { + pf[0] = fx; + } + + float fx_best = fx; + + // search direction = -gradient + ggml_vec_neg_f32(nx, d, g); + + // ||x||, ||g|| + ggml_vec_norm_f32(nx, &xnorm, x); + ggml_vec_norm_f32(nx, &gnorm, g); + + if (xnorm < 1.0f) { + xnorm = 1.0f; + } + + // already optimized + if (gnorm/xnorm <= params.lbfgs.eps) { + return GGML_OPT_OK; + } + + // initial step + ggml_vec_norm_inv_f32(nx, &step, d); + + int j = 0; + int k = 1; + int ls = 0; + int end = 0; + int bound = 0; + int n_no_improvement = 0; + + float ys = 0.0f; + float yy = 0.0f; + float beta = 0.0f; + + while (true) { + // store the current position and gradient vectors + ggml_vec_cpy_f32(nx, xp, x); + ggml_vec_cpy_f32(nx, gp, g); + + ls = linesearch_backtracking(ctx, ¶ms, nx, x, &fx, g, d, &step, xp, f, gf, gb, np, ps); + + if (ls < 0) { + // linesearch failed - go back to the previous point and return + ggml_vec_cpy_f32(nx, x, xp); + ggml_vec_cpy_f32(nx, g, gp); + + return ls; + } + + ggml_vec_norm_f32(nx, &xnorm, x); + ggml_vec_norm_f32(nx, &gnorm, g); + + GGML_PRINT_DEBUG("f = %10.6f\n", ggml_get_f32_1d(f, 0)); + + if (xnorm < 1.0f) { + xnorm = 1.0f; + } + if (gnorm/xnorm <= params.lbfgs.eps) { + // converged + return GGML_OPT_OK; + } + + // delta-based convergence test + if (pf != NULL) { + // need at least params.past iterations to start checking for convergence + if (params.past <= k) { + const float rate = (pf[k%params.past] - fx)/fx; + + if (fabsf(rate) < params.delta) { + return GGML_OPT_OK; + } + } + + pf[k%params.past] = fx; + } + + // check for improvement + if (params.max_no_improvement > 0) { + if (fx < fx_best) { + fx_best = fx; + n_no_improvement = 0; + } else { + n_no_improvement++; + + if (n_no_improvement >= params.max_no_improvement) { + return GGML_OPT_OK; + } + } + } + + if (params.lbfgs.n_iter != 0 && params.lbfgs.n_iter < k + 1) { + // reached the maximum number of iterations + return GGML_OPT_DID_NOT_CONVERGE; + } + + // update vectors s and y: + // s_{k+1} = x_{k+1} - x_{k} = \step * d_{k}. + // y_{k+1} = g_{k+1} - g_{k}. + // + ggml_vec_sub_f32(nx, lm[end].s, x, xp); + ggml_vec_sub_f32(nx, lm[end].y, g, gp); + + // compute scalars ys and yy: + // ys = y^t \cdot s -> 1 / \rho. + // yy = y^t \cdot y. + // + ggml_vec_dot_f32(nx, &ys, lm[end].y, lm[end].s); + ggml_vec_dot_f32(nx, &yy, lm[end].y, lm[end].y); + + lm[end].ys = ys; + + // find new search direction + // ref: https://en.wikipedia.org/wiki/Limited-memory_BFGS + + bound = (m <= k) ? m : k; + k++; + end = (end + 1)%m; + + // initialize search direction with -g + ggml_vec_neg_f32(nx, d, g); + + j = end; + for (int i = 0; i < bound; ++i) { + j = (j + m - 1) % m; + // \alpha_{j} = \rho_{j} s^{t}_{j} \cdot q_{k+1} + ggml_vec_dot_f32(nx, &lm[j].alpha, lm[j].s, d); + lm[j].alpha /= lm[j].ys; + // q_{i} = q_{i+1} - \alpha_{i} y_{i} + ggml_vec_mad_f32(nx, d, lm[j].y, -lm[j].alpha); + } + + ggml_vec_scale_f32(nx, d, ys/yy); + + for (int i = 0; i < bound; ++i) { + // \beta_{j} = \rho_{j} y^t_{j} \cdot \gamma_{i} + ggml_vec_dot_f32(nx, &beta, lm[j].y, d); + beta /= lm[j].ys; + // \gamma_{i+1} = \gamma_{i} + (\alpha_{j} - \beta_{j}) s_{j} + ggml_vec_mad_f32(nx, d, lm[j].s, lm[j].alpha - beta); + j = (j + 1)%m; + } + + step = 1.0; + } + + return GGML_OPT_DID_NOT_CONVERGE; +} + +struct ggml_opt_params ggml_opt_default_params(enum ggml_opt_type type) { + struct ggml_opt_params result; + + switch (type) { + case GGML_OPT_ADAM: + { + result = (struct ggml_opt_params) { + .type = GGML_OPT_ADAM, + .n_threads = 1, + .past = 0, + .delta = 1e-5f, + + .max_no_improvement = 100, + + .print_forward_graph = true, + .print_backward_graph = true, + + .adam = { + .n_iter = 10000, + .alpha = 0.001f, + .beta1 = 0.9f, + .beta2 = 0.999f, + .eps = 1e-8f, + .eps_f = 1e-5f, + .eps_g = 1e-3f, + }, + }; + } break; + case GGML_OPT_LBFGS: + { + result = (struct ggml_opt_params) { + .type = GGML_OPT_LBFGS, + .n_threads = 1, + .past = 0, + .delta = 1e-5f, + + .max_no_improvement = 0, + + .print_forward_graph = true, + .print_backward_graph = true, + + .lbfgs = { + .m = 6, + .n_iter = 100, + .max_linesearch = 20, + + .eps = 1e-5f, + .ftol = 1e-4f, + .wolfe = 0.9f, + .min_step = 1e-20f, + .max_step = 1e+20f, + + .linesearch = GGML_LINESEARCH_DEFAULT, + }, + }; + } break; + } + + return result; +} + +enum ggml_opt_result ggml_opt( + struct ggml_context * ctx, + struct ggml_opt_params params, + struct ggml_tensor * f) { + bool free_ctx = false; + if (ctx == NULL) { + struct ggml_init_params params_ctx = { + .mem_size = 16*1024*1024, + .mem_buffer = NULL, + .no_alloc = false, + }; + + ctx = ggml_init(params_ctx); + if (ctx == NULL) { + return GGML_OPT_NO_CONTEXT; + } + + free_ctx = true; + } + + enum ggml_opt_result result = GGML_OPT_OK; + + // build forward + backward compute graphs + struct ggml_cgraph gf = ggml_build_forward (f); + struct ggml_cgraph gb = ggml_build_backward(ctx, &gf, true); + + switch (params.type) { + case GGML_OPT_ADAM: + { + result = ggml_opt_adam(ctx, params, f, &gf, &gb); + } break; + case GGML_OPT_LBFGS: + { + result = ggml_opt_lbfgs(ctx, params, f, &gf, &gb); + } break; + } + + if (params.print_forward_graph) { + ggml_graph_print (&gf); + ggml_graph_dump_dot(&gf, NULL, "opt-forward.dot"); + } + + if (params.print_backward_graph) { + ggml_graph_print (&gb); + ggml_graph_dump_dot(&gb, &gf, "opt-backward.dot"); + } + + if (free_ctx) { + ggml_free(ctx); + } + + return result; +} + +//////////////////////////////////////////////////////////////////////////////// + +size_t ggml_quantize_q4_0(const float * src, void * dst, int n, int k, int64_t * hist) { + assert(k % QK4_0 == 0); + const int nb = k / QK4_0; + + for (int b = 0; b < n; b += k) { + block_q4_0 * restrict y = (block_q4_0 *) dst + b/QK4_0; + + quantize_row_q4_0_reference(src + b, y, k); + + for (int i = 0; i < nb; i++) { + for (int j = 0; j < QK4_0; j += 2) { + const uint8_t vi0 = y[i].qs[j/2] & 0x0F; + const uint8_t vi1 = y[i].qs[j/2] >> 4; + + hist[vi0]++; + hist[vi1]++; + } + } + } + + return (n/QK4_0*sizeof(block_q4_0)); +} + +size_t ggml_quantize_q4_1(const float * src, void * dst, int n, int k, int64_t * hist) { + assert(k % QK4_1 == 0); + const int nb = k / QK4_1; + + for (int b = 0; b < n; b += k) { + block_q4_1 * restrict y = (block_q4_1 *) dst + b/QK4_1; + + quantize_row_q4_1_reference(src + b, y, k); + + for (int i = 0; i < nb; i++) { + for (int j = 0; j < QK4_1; j += 2) { + const uint8_t vi0 = y[i].qs[j/2] & 0x0F; + const uint8_t vi1 = y[i].qs[j/2] >> 4; + + hist[vi0]++; + hist[vi1]++; + } + } + } + + return (n/QK4_1*sizeof(block_q4_1)); +} + +size_t ggml_quantize_q5_0(const float * src, void * dst, int n, int k, int64_t * hist) { + assert(k % QK5_0 == 0); + const int nb = k / QK5_0; + + for (int b = 0; b < n; b += k) { + block_q5_0 * restrict y = (block_q5_0 *)dst + b/QK5_0; + + quantize_row_q5_0_reference(src + b, y, k); + + for (int i = 0; i < nb; i++) { + uint32_t qh; + memcpy(&qh, &y[i].qh, sizeof(qh)); + + for (int j = 0; j < QK5_0; j += 2) { + const uint8_t vh0 = ((qh & (1u << (j + 0 ))) >> (j + 0 )) << 4; + const uint8_t vh1 = ((qh & (1u << (j + 16))) >> (j + 12)); + + // cast to 16 bins + const uint8_t vi0 = ((y[i].qs[j/2] & 0x0F) | vh0) / 2; + const uint8_t vi1 = ((y[i].qs[j/2] >> 4) | vh1) / 2; + + hist[vi0]++; + hist[vi1]++; + } + } + } + + return (n/QK5_0*sizeof(block_q5_0)); +} + +size_t ggml_quantize_q5_1(const float * src, void * dst, int n, int k, int64_t * hist) { + assert(k % QK5_1 == 0); + const int nb = k / QK5_1; + + for (int b = 0; b < n; b += k) { + block_q5_1 * restrict y = (block_q5_1 *)dst + b/QK5_1; + + quantize_row_q5_1_reference(src + b, y, k); + + for (int i = 0; i < nb; i++) { + uint32_t qh; + memcpy(&qh, &y[i].qh, sizeof(qh)); + + for (int j = 0; j < QK5_1; j += 2) { + const uint8_t vh0 = ((qh & (1u << (j + 0 ))) >> (j + 0 )) << 4; + const uint8_t vh1 = ((qh & (1u << (j + 16))) >> (j + 12)); + + // cast to 16 bins + const uint8_t vi0 = ((y[i].qs[j/2] & 0x0F) | vh0) / 2; + const uint8_t vi1 = ((y[i].qs[j/2] >> 4) | vh1) / 2; + + hist[vi0]++; + hist[vi1]++; + } + } + } + + return (n/QK5_1*sizeof(block_q5_1)); +} + +size_t ggml_quantize_q8_0(const float * src, void * dst, int n, int k, int64_t * hist) { + assert(k % QK8_0 == 0); + const int nb = k / QK8_0; + + for (int b = 0; b < n; b += k) { + block_q8_0 * restrict y = (block_q8_0 *)dst + b/QK8_0; + + quantize_row_q8_0_reference(src + b, y, k); + + for (int i = 0; i < nb; i++) { + for (int j = 0; j < QK8_0; ++j) { + const int8_t vi = y[i].qs[j]; + + hist[vi/16 + 8]++; + } + } + } + + return (n/QK8_0*sizeof(block_q8_0)); +} + +size_t ggml_quantize_chunk(enum ggml_type type, const float * src, void * dst, int start, int n, int64_t * hist) { + size_t result = 0; + switch (type) { + case GGML_TYPE_Q4_0: + { + GGML_ASSERT(start % QK4_0 == 0); + block_q4_0 * block = (block_q4_0*)dst + start / QK4_0; + result = ggml_quantize_q4_0(src + start, block, n, n, hist); + } break; + case GGML_TYPE_Q4_1: + { + GGML_ASSERT(start % QK4_1 == 0); + block_q4_1 * block = (block_q4_1*)dst + start / QK4_1; + result = ggml_quantize_q4_1(src + start, block, n, n, hist); + } break; + case GGML_TYPE_Q5_0: + { + GGML_ASSERT(start % QK5_0 == 0); + block_q5_0 * block = (block_q5_0*)dst + start / QK5_0; + result = ggml_quantize_q5_0(src + start, block, n, n, hist); + } break; + case GGML_TYPE_Q5_1: + { + GGML_ASSERT(start % QK5_1 == 0); + block_q5_1 * block = (block_q5_1*)dst + start / QK5_1; + result = ggml_quantize_q5_1(src + start, block, n, n, hist); + } break; + case GGML_TYPE_Q8_0: + { + GGML_ASSERT(start % QK8_0 == 0); + block_q8_0 * block = (block_q8_0*)dst + start / QK8_0; + result = ggml_quantize_q8_0(src + start, block, n, n, hist); + } break; + default: + assert(false); + } + return result; +} + +//////////////////////////////////////////////////////////////////////////////// + +int ggml_cpu_has_avx(void) { +#if defined(__AVX__) + return 1; +#else + return 0; +#endif +} + +int ggml_cpu_has_avx2(void) { +#if defined(__AVX2__) + return 1; +#else + return 0; +#endif +} + +int ggml_cpu_has_avx512(void) { +#if defined(__AVX512F__) + return 1; +#else + return 0; +#endif +} + +int ggml_cpu_has_avx512_vbmi(void) { +#if defined(__AVX512VBMI__) + return 1; +#else + return 0; +#endif +} + +int ggml_cpu_has_avx512_vnni(void) { +#if defined(__AVX512VNNI__) + return 1; +#else + return 0; +#endif +} + +int ggml_cpu_has_fma(void) { +#if defined(__FMA__) + return 1; +#else + return 0; +#endif +} + +int ggml_cpu_has_neon(void) { +#if defined(__ARM_NEON) + return 1; +#else + return 0; +#endif +} + +int ggml_cpu_has_arm_fma(void) { +#if defined(__ARM_FEATURE_FMA) + return 1; +#else + return 0; +#endif +} + +int ggml_cpu_has_f16c(void) { +#if defined(__F16C__) + return 1; +#else + return 0; +#endif +} + +int ggml_cpu_has_fp16_va(void) { +#if defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC) + return 1; +#else + return 0; +#endif +} + +int ggml_cpu_has_wasm_simd(void) { +#if defined(__wasm_simd128__) + return 1; +#else + return 0; +#endif +} + +int ggml_cpu_has_blas(void) { +#if defined(GGML_USE_ACCELERATE) || defined(GGML_USE_OPENBLAS) || defined(GGML_USE_CUBLAS) || defined(GGML_USE_CLBLAST) + return 1; +#else + return 0; +#endif +} + +int ggml_cpu_has_cublas(void) { +#if defined(GGML_USE_CUBLAS) + return 1; +#else + return 0; +#endif +} + +int ggml_cpu_has_clblast(void) { +#if defined(GGML_USE_CLBLAST) + return 1; +#else + return 0; +#endif +} + +int ggml_cpu_has_gpublas(void) { + return ggml_cpu_has_cublas() || ggml_cpu_has_clblast(); +} + +int ggml_cpu_has_sse3(void) { +#if defined(__SSE3__) + return 1; +#else + return 0; +#endif +} + +int ggml_cpu_has_vsx(void) { +#if defined(__POWER9_VECTOR__) + return 1; +#else + return 0; +#endif +} + +//////////////////////////////////////////////////////////////////////////////// diff --git a/ggml_old/tests/CMakeLists.txt b/ggml_old/tests/CMakeLists.txt new file mode 100644 index 0000000..2dfad2c --- /dev/null +++ b/ggml_old/tests/CMakeLists.txt @@ -0,0 +1,260 @@ +# check systems +if (NOT UNAME_S) + execute_process(COMMAND uname -s OUTPUT_VARIABLE UNAME_S) +endif() +if (NOT UNAME_P) + execute_process(COMMAND uname -p OUTPUT_VARIABLE UNAME_P) +endif() +if (NOT UNAME_M) + execute_process(COMMAND uname -m OUTPUT_VARIABLE UNAME_M) +endif() +#message(STATUS "UNAME_S: ${UNAME_S} UNAME_P: ${UNAME_P} UNAME_M: ${UNAME_M}") + +# Mac OS + Arm can report x86_64 +# ref: https://github.com/ggerganov/whisper.cpp/issues/66#issuecomment-1282546789 +if (UNAME_S MATCHES "Darwin") + if (NOT UNAME_P MATCHES "arm") + execute_process(COMMAND sysctl -n hw.optional.arm64 OUTPUT_VARIABLE SYSCTL_M) + if (SYSCTL_M MATCHES "1") + #set(UNAME_P "arm") + #set(UNAME_M "arm64") + message(WARNING "Your arch is announced as x86_64, but it seems to actually be ARM64. Not fixing that can lea +d to bad performance. For more info see: https://github.com/ggerganov/whisper.cpp/issues/66\#issuecomment-#1282546789") + endif() + endif() +endif() + +if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm" OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch64") + message(STATUS "ARM detected") + #set(GGML_C_FLAGS "${GGML_C_FLAGS} -mcpu=apple-m1") +else() + message(STATUS "x86 detected") + #set(GGML_C_FLAGS "${GGML_C_FLAGS} -mavx -mavx2 -mfma -mf16c") + if (UNAME_S MATCHES "Darwin") + execute_process(COMMAND sysctl machdep.cpu.features OUTPUT_VARIABLE AVX1_M) + if (AVX1_M MATCHES "AVX1.0") + set(GGML_C_FLAGS "${GGML_C_FLAGS} -mavx") + endif() + execute_process(COMMAND sysctl machdep.cpu.leaf7_features OUTPUT_VARIABLE AVX2_M) + if (AVX2_M MATCHES "AVX2") + set(GGML_C_FLAGS "${GGML_C_FLAGS} -mavx2") + endif() + if (AVX1_M MATCHES "FMA") + set(GGML_C_FLAGS "${GGML_C_FLAGS} -mfma") + endif() + set(GGML_C_FLAGS "${GGML_C_FLAGS} -mf16c") + elseif (UNAME_S MATCHES "Linux") + message(STATUS "Linux detected") + execute_process(COMMAND grep "avx " /proc/cpuinfo OUTPUT_VARIABLE AVX1_M) + if (AVX1_M MATCHES "avx") + set(GGML_C_FLAGS "${GGML_C_FLAGS} -mavx") + endif() + execute_process(COMMAND grep "avx2 " /proc/cpuinfo OUTPUT_VARIABLE AVX2_M) + if (AVX2_M MATCHES "avx2") + set(GGML_C_FLAGS "${GGML_C_FLAGS} -mavx2") + endif() + execute_process(COMMAND grep "fma " /proc/cpuinfo OUTPUT_VARIABLE FMA_M) + if (FMA_M MATCHES "fma") + set(GGML_C_FLAGS "${GGML_C_FLAGS} -mfma") + endif() + execute_process(COMMAND grep "f16c " /proc/cpuinfo OUTPUT_VARIABLE F16C_M) + if (F16C_M MATCHES "f16c") + set(GGML_C_FLAGS "${GGML_C_FLAGS} -mf16c") + endif() + execute_process(COMMAND grep "sse3 " /proc/cpuinfo OUTPUT_VARIABLE SSE3_M) + if (SSE3_M MATCHES "sse3") + set(GGML_C_FLAGS "${GGML_C_FLAGS} -msse3") + endif() + elseif (UNAME_S MATCHES "Haiku") + message(STATUS "Haiku detected") + execute_process(COMMAND sysinfo -cpu COMMAND grep "AVX " OUTPUT_VARIABLE AVX1_M) + if (AVX1_M MATCHES "avx") + set(GGML_C_FLAGS "${GGML_C_FLAGS} -mavx") + endif() + execute_process(COMMAND sysinfo -cpu COMMAND grep "AVX2 " OUTPUT_VARIABLE AVX2_M) + if (AVX2_M MATCHES "avx2") + set(GGML_C_FLAGS "${GGML_C_FLAGS} -mavx2") + endif() + execute_process(COMMAND sysinfo -cpu COMMAND grep "FMA " OUTPUT_VARIABLE FMA_M) + if (FMA_M MATCHES "fma") + set(GGML_C_FLAGS "${GGML_C_FLAGS} -mfma") + endif() + execute_process(COMMAND sysinfo -cpu COMMAND grep "F16C " OUTPUT_VARIABLE F16C_M) + if (F16C_M MATCHES "f16c") + set(GGML_C_FLAGS "${GGML_C_FLAGS} -mf16c") + endif() + else() + set(GGML_C_FLAGS "${GGML_C_FLAGS} -mfma -mf16c -mavx -mavx2") + endif() +endif() + +# on APPLE - include Accelerate framework +if (APPLE AND NOT GGML_NO_ACCELERATE) + find_library(ACCELERATE_FRAMEWORK Accelerate) + if (ACCELERATE_FRAMEWORK) + message(STATUS "Accelerate framework found") + + set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} ${ACCELERATE_FRAMEWORK}) + set(GGML_EXTRA_FLAGS ${GGML_EXTRA_FLAGS} -DGGML_USE_ACCELERATE) + else() + message(WARNING "Accelerate framework not found") + endif() +endif() + +if (GGML_OPENBLAS) + set(OPENBLAS_INCLUDE_SEARCH_PATHS + /usr/include + /usr/include/openblas + /usr/include/openblas-base + /usr/local/include + /usr/local/include/openblas + /usr/local/include/openblas-base + /opt/OpenBLAS/include + $ENV{OpenBLAS_HOME} + $ENV{OpenBLAS_HOME}/include + ) + find_path(OPENBLAS_INC NAMES cblas.h PATHS ${OPENBLAS_INCLUDE_SEARCH_PATHS}) + find_library(OPENBLAS_LIB NAMES openblas libopenblas) + if (OPENBLAS_LIB) + message(STATUS "OpenBLAS found") + + set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} ${OPENBLAS_LIB}) + set(GGML_EXTRA_INCS ${GGML_EXTRA_INCS} ${OPENBLAS_INC}) + set(GGML_EXTRA_FLAGS ${GGML_EXTRA_FLAGS} -DGGML_USE_OPENBLAS) + else() + message(WARNING "OpenBLAS not found") + endif() +endif() + +# +# test-vec0 + +set(TEST_TARGET test-vec0) +add_executable(${TEST_TARGET} ${TEST_TARGET}.c) +target_link_libraries(${TEST_TARGET} PRIVATE ggml) +add_test(NAME ${TEST_TARGET} COMMAND $) + +# +# test-vec1 (x86) +if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "x86") + set(TEST_TARGET test-vec1) + add_executable(${TEST_TARGET} ${TEST_TARGET}.c) + target_link_libraries(${TEST_TARGET} PRIVATE ggml) + add_test(NAME ${TEST_TARGET} COMMAND $) + #set_target_properties(${TEST_TARGET} PROPERTIES COMPILE_FLAGS "-mavx -mavx2 -mfma -mf16c") + set_target_properties(${TEST_TARGET} PROPERTIES COMPILE_FLAGS ${GGML_C_FLAGS}) +endif() + +# +# test-vec2 (arm) +if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm") + set(TEST_TARGET test-vec2) + add_executable(${TEST_TARGET} ${TEST_TARGET}.c) + target_link_libraries(${TEST_TARGET} PRIVATE ggml) + add_test(NAME ${TEST_TARGET} COMMAND $) +endif() + +# +# test-grad0 + +set(TEST_TARGET test-grad0) +add_executable(${TEST_TARGET} ${TEST_TARGET}.c) +target_link_libraries(${TEST_TARGET} PRIVATE ggml) +add_test(NAME ${TEST_TARGET} COMMAND $) + +# +# test-opt + +set(TEST_TARGET test-opt) +add_executable(${TEST_TARGET} ${TEST_TARGET}.c) +target_link_libraries(${TEST_TARGET} PRIVATE ggml) +add_test(NAME ${TEST_TARGET} COMMAND $) + +# +# test-mul-mat0 + +set(TEST_TARGET test-mul-mat0) +add_executable(${TEST_TARGET} ${TEST_TARGET}.c) +target_link_libraries(${TEST_TARGET} PRIVATE ggml ${GGML_EXTRA_LIBS}) +target_compile_options(${TEST_TARGET} PRIVATE ${GGML_EXTRA_FLAGS}) +add_test(NAME ${TEST_TARGET} COMMAND $) + +# +# test-mul-mat1 (arm) + +if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm" AND NOT GGML_NO_ACCELERATE) + set(TEST_TARGET test-mul-mat1) + add_executable(${TEST_TARGET} ${TEST_TARGET}.c) + target_link_libraries(${TEST_TARGET} PRIVATE ggml ${GGML_EXTRA_LIBS}) + target_compile_options(${TEST_TARGET} PRIVATE ${GGML_EXTRA_FLAGS}) + add_test(NAME ${TEST_TARGET} COMMAND $) +endif() + +# +# test-blas0 (arm) + +if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm" AND NOT GGML_NO_ACCELERATE) + set(TEST_TARGET test-blas0) + add_executable(${TEST_TARGET} ${TEST_TARGET}.c) + target_link_libraries(${TEST_TARGET} PRIVATE ggml ${GGML_EXTRA_LIBS}) + target_compile_options(${TEST_TARGET} PRIVATE ${GGML_EXTRA_FLAGS}) + add_test(NAME ${TEST_TARGET} COMMAND $ 128 128 128) +endif() + +# +# test-mul-mat2 + +set(TEST_TARGET test-mul-mat2) +add_executable(${TEST_TARGET} ${TEST_TARGET}.c) +target_link_libraries(${TEST_TARGET} PRIVATE ggml) +add_test(NAME ${TEST_TARGET} COMMAND $) + +# +# test0 + +set(TEST_TARGET test0) +add_executable(${TEST_TARGET} ${TEST_TARGET}.c) +target_link_libraries(${TEST_TARGET} PRIVATE ggml) +add_test(NAME ${TEST_TARGET} COMMAND $) + +# +# test1 + +set(TEST_TARGET test1) +add_executable(${TEST_TARGET} ${TEST_TARGET}.c) +target_link_libraries(${TEST_TARGET} PRIVATE ggml) +add_test(NAME ${TEST_TARGET} COMMAND $) + +# +# test2 + +set(TEST_TARGET test2) +add_executable(${TEST_TARGET} ${TEST_TARGET}.c) +target_link_libraries(${TEST_TARGET} PRIVATE ggml) +add_test(NAME ${TEST_TARGET} COMMAND $) + +# +# test3 + +set(TEST_TARGET test3) +add_executable(${TEST_TARGET} ${TEST_TARGET}.c) +target_link_libraries(${TEST_TARGET} PRIVATE ggml) +add_test(NAME ${TEST_TARGET} COMMAND $) + +# +# test-svd0 (arm/x86) + +if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm" AND NOT GGML_NO_ACCELERATE) + set(TEST_TARGET test-svd0) + add_executable(${TEST_TARGET} ${TEST_TARGET}.c) + target_link_libraries(${TEST_TARGET} PRIVATE ggml ${GGML_EXTRA_LIBS}) + target_compile_options(${TEST_TARGET} PRIVATE ${GGML_EXTRA_FLAGS}) + add_test(NAME ${TEST_TARGET} COMMAND $) +elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "x86" AND GGML_OPENBLAS) + set(TEST_TARGET test-svd0) + add_executable(${TEST_TARGET} ${TEST_TARGET}.c) + target_link_libraries(${TEST_TARGET} PRIVATE ggml ${GGML_EXTRA_LIBS}) + target_compile_options(${TEST_TARGET} PRIVATE ${GGML_EXTRA_FLAGS}) + add_test(NAME ${TEST_TARGET} COMMAND $) +endif() + diff --git a/ggml_old/tests/test-blas0.c b/ggml_old/tests/test-blas0.c new file mode 100644 index 0000000..aecccf0 --- /dev/null +++ b/ggml_old/tests/test-blas0.c @@ -0,0 +1,265 @@ +#include "ggml.h" + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +#include + +uint64_t get_time_us() { + struct timeval tv; + gettimeofday(&tv, NULL); + return tv.tv_sec * 1000000 + tv.tv_usec; +} + +// +// naive implementation +// + +void mul_mat_f32_0( + const float * restrict src0, // M x K + const float * restrict src1, // N x K (transposed) + float * dst, + int m, int n, int k) { + for (int i = 0; i < m; i++) { + for (int j = 0; j < n; j++) { + float sum = 0; + for (int l = 0; l < k; l++) { + sum += src0[i*k + l] * src1[j*k + l]; + } + dst[j*m + i] = sum; + } + } +} + +int main(int argc, const char ** argv) { + if (argc < 4) { + printf("Usage: %s M N K\n", argv[0]); + return 1; + } + + int M = atoi(argv[1]); + int N = atoi(argv[2]); + int K = atoi(argv[3]); + + srand(time(NULL)); + + if (M == 0) M = rand() % 1000 + 1; + if (N == 0) N = rand() % 1000 + 1; + if (K == 0) K = rand() % 1000 + 1; + + printf("M = %d, N = %d, K = %d\n", M, N, K); + + float * src0 = malloc(sizeof(float)*M*K); + float * src1 = malloc(sizeof(float)*N*K); + float * dst0 = malloc(sizeof(float)*M*N); // naive + float * dst1 = malloc(sizeof(float)*M*N); // blas + + struct ggml_init_params params = { + .mem_size = 2048ul*1024*1024, + .mem_buffer = NULL, + .no_alloc = false, + }; + + struct ggml_context * ctx0 = ggml_init(params); + + struct ggml_tensor * s0_f32 = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, K, M); + struct ggml_tensor * s1_f32 = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, K, N); + + struct ggml_tensor * s0_f16 = ggml_new_tensor_2d(ctx0, GGML_TYPE_F16, K, M); + struct ggml_tensor * s1_f16 = ggml_new_tensor_2d(ctx0, GGML_TYPE_F16, K, N); + + for (int j = 0; j < M; j++) { + for (int i = 0; i < K; i++) { + //src0[j*K + i] = j; + src0[j*K + i] = 1e-3*(rand() % 1000); + } + } + + for (int j = 0; j < N; j++) { + for (int i = 0; i < K; i++) { + //src1[j*K + i] = j + 1; + src1[j*K + i] = 1e-3*(rand() % 1000); + } + } + + // copy src0 to s0_f32 + { + float * p_f32 = s0_f32->data; + ggml_fp16_t * p_f16 = s0_f16->data; + for (int i = 0; i < M; i++) { + for (int j = 0; j < K; j++) { + p_f32[i*K + j] = src0[i*K + j]; + p_f16[i*K + j] = ggml_fp32_to_fp16(src0[i*K + j]); + } + } + } + + // copy src1 to s1_f32 + { + float * p_f32 = s1_f32->data; + ggml_fp16_t * p_f16 = s1_f16->data; + for (int i = 0; i < N; i++) { + for (int j = 0; j < K; j++) { + p_f32[i*K + j] = src1[i*K + j]; + p_f16[i*K + j] = ggml_fp32_to_fp16(src1[i*K + j]); + } + } + } + + const clock_t start = clock(); + const uint64_t start_us = get_time_us(); + + double iM = 1.0/M; + mul_mat_f32_0(src0, src1, dst0, M, N, K); + + // Use BLAS sgemm from Accelerate framework + cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasTrans, N, M, K, 1.0f, src1, K, src0, K, 0.0f, dst1, M); + + struct ggml_tensor * dst2 = NULL; + struct ggml_tensor * dst3 = NULL; + + { + dst2 = ggml_mul_mat(ctx0, s0_f32, s1_f32); + + struct ggml_cgraph gf = ggml_build_forward(dst2); + ggml_graph_compute(ctx0, &gf); + } + + { + dst3 = ggml_mul_mat(ctx0, s0_f16, s1_f32); + + struct ggml_cgraph gf = ggml_build_forward(dst3); + ggml_graph_compute(ctx0, &gf); + } + + bool ok_blas = true; + bool ok_ggml_f32 = true; + bool ok_ggml_f16 = true; + + // check BLAS + for (int i = 0; i < M*N; i++) { + if (fabs(dst0[i] - dst1[i])/fabs(dst0[i]) > 0.0001) { + printf("dst0[%d] = %f, dst1[%d] = %f\n", i, dst0[i], i, dst1[i]); + ok_blas = false; + } + } + + // check ggml (f32) + { + float * p = dst2->data; + for (int i = 0; i < M*N; i++) { + if (fabs(dst0[i] - p[i])/fabs(dst0[i]) > 0.0001) { + printf("dst0[%d] = %f, dst2[%d] = %f\n", i, dst0[i], i, p[i]); + ok_ggml_f32 = false; + } + } + } + + // check ggml (f16) + { + float * p = dst3->data; + for (int i = 0; i < M*N; i++) { + if (fabs(dst0[i] - p[i])/fabs(dst0[i]) > 0.01) { + printf("dst0[%d] = %f, dst3[%d] = %f\n", i, dst0[i], i, p[i]); + ok_ggml_f16 = false; + } + } + } + + { + const clock_t end = clock(); + const uint64_t end_us = get_time_us(); + printf("%s: elapsed ticks: %ld\n", __func__, end - start); + } + +#if 0 + // print src0 + printf("src0:\n"); + for (int i = 0; i < M; i++) { + for (int j = 0; j < K; j++) { + printf("%4.1f ", src0[i*K+j]); + } + printf("\n"); + } + + // print src1 + printf("src1:\n"); + for (int i = 0; i < N; i++) { + for (int j = 0; j < K; j++) { + printf("%4.1f ", src1[i*K+j]); + } + printf("\n"); + } + + printf("\n"); + printf("dst0 (naive):\n"); + for (int j = 0; j < N; j++) { + for (int i = 0; i < M; i++) { + printf("%4.1f ", dst0[j*M+i]); + } + printf("\n"); + } + + printf("\n"); + printf("dst1 (BLAS):\n"); + for (int j = 0; j < N; j++) { + for (int i = 0; i < M; i++) { + printf("%4.1f ", dst1[j*M+i]); + } + printf("\n"); + } + + printf("\n"); + printf("dst2 (ggml f32):\n"); + for (int j = 0; j < N; j++) { + for (int i = 0; i < M; i++) { + printf("%4.1f ", ((float *)dst2->data)[j*M+i]); + } + printf("\n"); + } + + printf("\n"); + printf("dst3 (ggml f16):\n"); + for (int j = 0; j < N; j++) { + for (int i = 0; i < M; i++) { + printf("%4.1f ", ((float *)dst3->data)[j*M+i]); + } + printf("\n"); + } + + printf("\n"); +#endif + + free(src0); + free(src1); + free(dst0); + free(dst1); + + ggml_free(ctx0); + + printf("ok_blas = %d\n", ok_blas); + if (!ok_blas) { + printf("ERROR: BLAS failed\n"); + } + + printf("ok_ggml_f32 = %d\n", ok_ggml_f32); + if (!ok_ggml_f32) { + printf("ERROR: ggml failed\n"); + } + + printf("ok_ggml_f16 = %d\n", ok_ggml_f16); + if (!ok_ggml_f16) { + printf("ERROR: ggml failed\n"); + } + + return (ok_blas && ok_ggml_f32 && ok_ggml_f16) ? 0 : 1; +} diff --git a/ggml_old/tests/test-grad0.c b/ggml_old/tests/test-grad0.c new file mode 100644 index 0000000..ec50592 --- /dev/null +++ b/ggml_old/tests/test-grad0.c @@ -0,0 +1,1131 @@ +#include "ggml.h" + +#include +#include +#include +#include + +#define MAX_NARGS 2 + +#undef MIN +#undef MAX +#define MIN(a, b) ((a) < (b) ? (a) : (b)) +#define MAX(a, b) ((a) > (b) ? (a) : (b)) + +#define GGML_SILU_FP16 + +// +// logging +// + +#if (GGML_DEBUG >= 1) +#define GGML_PRINT_DEBUG(...) printf(__VA_ARGS__) +#else +#define GGML_PRINT_DEBUG(...) +#endif + +#if (GGML_DEBUG >= 5) +#define GGML_PRINT_DEBUG_5(...) printf(__VA_ARGS__) +#else +#define GGML_PRINT_DEBUG_5(...) +#endif + +#if (GGML_DEBUG >= 10) +#define GGML_PRINT_DEBUG_10(...) printf(__VA_ARGS__) +#else +#define GGML_PRINT_DEBUG_10(...) +#endif + +#define GGML_PRINT(...) printf(__VA_ARGS__) + +float frand(void) { + return (float)rand()/(float)RAND_MAX; +} + +int irand(int n) { + if (n == 0) return 0; + else return rand()%n; +} + +void get_random_dims(int64_t * dims, int ndims) { + dims[0] = dims[1] = dims[2] = dims[3] = 1; + + for (int i = 0; i < ndims; i++) { + dims[i] = 1 + irand(4); + } +} + +struct ggml_tensor * get_random_tensor( + struct ggml_context * ctx0, + int ndims, + int64_t ne[], + float fmin, + float fmax) { + struct ggml_tensor * result = ggml_new_tensor(ctx0, GGML_TYPE_F32, ndims, ne); + + switch (ndims) { + case 1: + for (int i0 = 0; i0 < ne[0]; i0++) { + ((float *)result->data)[i0] = frand()*(fmax - fmin) + fmin; + } + break; + case 2: + for (int i1 = 0; i1 < ne[1]; i1++) { + for (int i0 = 0; i0 < ne[0]; i0++) { + ((float *)result->data)[i1*ne[0] + i0] = frand()*(fmax - fmin) + fmin; + } + } + break; + case 3: + for (int i2 = 0; i2 < ne[2]; i2++) { + for (int i1 = 0; i1 < ne[1]; i1++) { + for (int i0 = 0; i0 < ne[0]; i0++) { + ((float *)result->data)[i2*ne[1]*ne[0] + i1*ne[0] + i0] = frand()*(fmax - fmin) + fmin; + } + } + } + break; + case 4: + for (int i3 = 0; i3 < ne[3]; i3++) { + for (int i2 = 0; i2 < ne[2]; i2++) { + for (int i1 = 0; i1 < ne[1]; i1++) { + for (int i0 = 0; i0 < ne[0]; i0++) { + ((float *)result->data)[i3*ne[2]*ne[1]*ne[0] + i2*ne[1]*ne[0] + i1*ne[0] + i0] = frand()*(fmax - fmin) + fmin; + } + } + } + } + break; + default: + assert(false); + }; + + return result; +} + +struct ggml_tensor * get_random_tensor_int( + struct ggml_context * ctx0, + int ndims, + int64_t ne[], + int32_t imin, + int32_t imax) { + struct ggml_tensor * result = ggml_new_tensor(ctx0, GGML_TYPE_I32, ndims, ne); + + switch (ndims) { + case 1: + for (int i0 = 0; i0 < ne[0]; i0++) { + ((int32_t *)result->data)[i0] = irand(imax - imin) + imin; + } + break; + case 2: + for (int i1 = 0; i1 < ne[1]; i1++) { + for (int i0 = 0; i0 < ne[0]; i0++) { + ((int32_t *)result->data)[i1*ne[0] + i0] = irand(imax - imin) + imin; + } + } + break; + case 3: + for (int i2 = 0; i2 < ne[2]; i2++) { + for (int i1 = 0; i1 < ne[1]; i1++) { + for (int i0 = 0; i0 < ne[0]; i0++) { + ((int32_t *)result->data)[i2*ne[1]*ne[0] + i1*ne[0] + i0] = irand(imax - imin) + imin; + } + } + } + break; + case 4: + for (int i3 = 0; i3 < ne[3]; i3++) { + for (int i2 = 0; i2 < ne[2]; i2++) { + for (int i1 = 0; i1 < ne[1]; i1++) { + for (int i0 = 0; i0 < ne[0]; i0++) { + ((int32_t *)result->data)[i3*ne[2]*ne[1]*ne[0] + i2*ne[1]*ne[0] + i1*ne[0] + i0] = irand(imax - imin) + imin; + } + } + } + } + break; + default: + assert(false); + }; + + return result; +} + +float get_element(const struct ggml_tensor * t, int idx) { + if (t->type == GGML_TYPE_F32) { + return ((float *)t->data)[idx]; + } else if (t->type == GGML_TYPE_I32) { + return ((int32_t *)t->data)[idx]; + } else { + assert(false); + return INFINITY; + } +} + +void set_element(struct ggml_tensor * t, int idx, float value) { + ((float *)t->data)[idx] = value; +} + +void print_elements(const char* label, const struct ggml_tensor * t) { + if (!t) { + printf("%s: %s = null\n", __func__, label); + return; + } + const int nelements = ggml_nelements(t); + printf("%s: %s = [", __func__, label); + for (int k = 0; k < nelements; ++k) { + if (k > 0) { printf(", "); } + printf("%.5f", get_element(t, k)); + } + printf("] shape: ["); + for (int k = 0; k < t->n_dims; ++k) { + if (k > 0) { printf(", "); } + printf("%d", (int)t->ne[k]); + } + printf("]\n"); + +} + +bool check_gradient( + const char * op_name, + struct ggml_context * ctx0, + struct ggml_tensor * x[], + struct ggml_tensor * f, + int ndims, + int nargs, + float eps, + float max_error_abs, + float max_error_rel) { + + struct ggml_cgraph gf = ggml_build_forward (f); + struct ggml_cgraph gb = ggml_build_backward(ctx0, &gf, false); + + ggml_graph_compute(ctx0, &gf); + ggml_graph_reset (&gf); + ggml_set_f32 (f->grad, 1.0f); + ggml_graph_compute(ctx0, &gb); + + // ggml_graph_dump_dot(&gf, NULL, "test-grad0-forward.dot"); + // ggml_graph_dump_dot(&gb, &gf, "test-grad0-backward.dot"); + + for (int i = 0; i < nargs; ++i) { + const int nelements = ggml_nelements(x[i]); + for (int k = 0; k < nelements; ++k) { + // compute gradient using finite differences + const float x0 = get_element(x[i], k); + const float xm = x0 - eps; + const float xp = x0 + eps; + set_element(x[i], k, xp); + ggml_graph_compute(ctx0, &gf); + + const float f0 = ggml_get_f32_1d(f, 0); + + set_element(x[i], k, xm); + ggml_graph_compute(ctx0, &gf); + + const float f1 = ggml_get_f32_1d(f, 0); + + const float g0 = (f0 - f1)/(2.0f*eps); + + set_element(x[i], k, x0); + + // compute gradient using backward graph + ggml_graph_reset (&gf); + ggml_set_f32 (f->grad, 1.0f); + ggml_graph_compute(ctx0, &gb); + + const float g1 = get_element(x[i]->grad, k); + + const float error_abs = fabsf(g0 - g1); + const float error_rel = g0 != 0 ? fabsf(g0 - g1)/fabs(g0) : 0; + + if (error_abs > max_error_abs || error_rel > max_error_rel) { + printf("%s: ndims=%d, i=%d, k=%d, x0=%f, xm=%f, xp=%f, f0=%f, f1=%f, g0=%f, g1=%f, eps=%f, error_abs=%f, error_rel=%f\n", + op_name, ndims, i, k, x0, xm, xp, f0, f1, g0, g1, eps, error_abs, error_rel); + //assert(false); + return false; + } + } + } + + return true; +} + +// TODO: clean-up this .. +bool check_mat_mul( + const struct ggml_tensor * y, + const struct ggml_tensor * x0, + const struct ggml_tensor * x1) { + float * dst = (float *) y->data; + float * src0 = (float *) x0->data; + float * src1 = (float *) x1->data; + + const int nc = x0->ne[1]; + const int nr = x1->ne[1]; + const int nk = x0->ne[0]; + + GGML_PRINT_DEBUG("check_mat_mul: nc=%d, nr=%d, nk=%d\n", nc, nr, nk); + + GGML_PRINT_DEBUG("x0:\n"); + for (int j = 0; j < x0->ne[1]; ++j) { + for (int i = 0; i < x0->ne[0]; ++i) { + GGML_PRINT_DEBUG("%6.3f ", src0[j*nk + i]); + } + GGML_PRINT_DEBUG("\n"); + } + GGML_PRINT_DEBUG("\n"); + + GGML_PRINT_DEBUG("x1:\n"); + for (int j = 0; j < x1->ne[1]; ++j) { + for (int i = 0; i < x1->ne[0]; ++i) { + GGML_PRINT_DEBUG("%6.3f ", src1[j*nk + i]); + } + GGML_PRINT_DEBUG("\n"); + } + GGML_PRINT_DEBUG("\n"); + + GGML_PRINT_DEBUG("y: n_dims = %d, (%lld, %lld)\n", y->n_dims, y->ne[0], y->ne[1]); + for (int j = 0; j < y->ne[1]; ++j) { + for (int i = 0; i < y->ne[0]; ++i) { + GGML_PRINT_DEBUG("%6.3f ", dst[j*nr + i]); + } + GGML_PRINT_DEBUG("\n"); + } + + for (int i = 0; i < nr; ++i) { + for (int j = 0; j < nc; ++j) { + float sum = 0.0f; + + for (int k = 0; k < nk; ++k) { + sum += src0[j*nk + k]*src1[i*nk + k]; + } + + if (fabsf(dst[i*nc + j] - sum) > 1e-5f) { + fprintf(stderr, "check_mat_mul: dst[%d] = %f, sum = %f\n", i*nc + j, dst[i*nc + j], sum); + assert(false); + return false; + } + } + } + + return true; +} + +#define NUM_PERMUTATIONS (4*3*2*1) + +int main(int argc, const char ** argv) { + struct ggml_init_params params = { + .mem_size = 128*1024*1024, + .mem_buffer = NULL, + .no_alloc = false, + }; + + int64_t ne[4]; + + int all_permutations[4 * NUM_PERMUTATIONS]; + { + int count = 0; + for (int ax0=0; ax0<4; ++ax0) { + for (int ax1=0; ax1<4; ++ax1) { + if (ax1 == ax0) continue; + for (int ax2=0; ax2<4; ++ax2) { + if (ax2 == ax0) continue; + if (ax2 == ax1) continue; + for (int ax3=0; ax3<4; ++ax3) { + if (ax3 == ax0) continue; + if (ax3 == ax1) continue; + if (ax3 == ax2) continue; + assert(count < NUM_PERMUTATIONS); + all_permutations[count*4+0] = ax0; + all_permutations[count*4+1] = ax1; + all_permutations[count*4+2] = ax2; + all_permutations[count*4+3] = ax3; + ++count; + } + } + } + } + } + + + // original loop: 1000 + int niter = 4; + const char *env = getenv("GGML_NLOOP"); + if (env != NULL) { + niter = atoi(env); + } + if (argc > 1) { + niter = atoi(argv[1]); + } + for (int iter = 0; iter < niter; ++iter) { + printf("test-grad0: iter:%d/%d\n", iter, niter); + struct ggml_context * ctx0 = ggml_init(params); + + get_random_dims(ne, 4); + + struct ggml_tensor * x[MAX_NARGS]; + + // add + { + const int nargs = 2; + + for (int ndims = 1; ndims <= 4; ++ndims) { + for (int i = 0; i < nargs; ++i) { + x[i] = get_random_tensor(ctx0, ndims, ne, -1.0f, 1.0f); + ggml_set_param(ctx0, x[i]); + } + + struct ggml_tensor * f = ggml_sum(ctx0, ggml_add(ctx0, x[0], x[1])); + + check_gradient("add", ctx0, x, f, ndims, nargs, 1e-3f, 2e-3f, 2e-3f); + } + } + + // sub + { + const int nargs = 2; + + for (int ndims = 1; ndims <= 4; ++ndims) { + for (int i = 0; i < nargs; ++i) { + x[i] = get_random_tensor(ctx0, ndims, ne, -1.0f, 1.0f); + ggml_set_param(ctx0, x[i]); + } + + struct ggml_tensor * f = ggml_sum(ctx0, ggml_sub(ctx0, x[0], x[1])); + + check_gradient("sub", ctx0, x, f, ndims, nargs, 1e-3f, 1e-3f, 1e-3f); + } + } + + // mul + { + const int nargs = 2; + + for (int ndims = 1; ndims <= 4; ++ndims) { + for (int i = 0; i < nargs; ++i) { + x[i] = get_random_tensor(ctx0, ndims, ne, -1.0f, 1.0f); + ggml_set_param(ctx0, x[i]); + } + + struct ggml_tensor * f = ggml_sum(ctx0, ggml_mul(ctx0, x[0], x[1])); + + check_gradient("mul", ctx0, x, f, ndims, nargs, 1e-3f, 1e-3f, INFINITY); + } + } + + // div + { + const int nargs = 2; + + for (int ndims = 1; ndims <= 4; ++ndims) { + for (int i = 0; i < nargs; ++i) { + x[i] = get_random_tensor(ctx0, ndims, ne, 0.5f, 1.0f); + ggml_set_param(ctx0, x[i]); + } + + struct ggml_tensor * f = ggml_sum(ctx0, ggml_div(ctx0, x[0], x[1])); + + check_gradient("div", ctx0, x, f, ndims, nargs, 1e-3f, 1e-1f, 1e-1f); + } + } + + // sqr + { + const int nargs = 1; + + for (int ndims = 1; ndims <= 2; ++ndims) { + for (int i = 0; i < nargs; ++i) { + x[i] = get_random_tensor(ctx0, ndims, ne, -1.0f, 1.0f); + ggml_set_param(ctx0, x[i]); + } + + struct ggml_tensor * f = ggml_sum(ctx0, ggml_sqr(ctx0, x[0])); + + check_gradient("sqr", ctx0, x, f, ndims, nargs, 1e-3f, 1e-3f, INFINITY); + } + } + + // sqrt + { + const int nargs = 1; + + for (int ndims = 1; ndims <= 2; ++ndims) { + for (int i = 0; i < nargs; ++i) { + x[i] = get_random_tensor(ctx0, ndims, ne, 2.0f*1e-3f, 1.0f); + ggml_set_param(ctx0, x[i]); + } + + struct ggml_tensor * f = ggml_sum(ctx0, ggml_sqrt(ctx0, x[0])); + + check_gradient("sqrt", ctx0, x, f, ndims, nargs, 1e-3f, INFINITY, 1e-1f); + } + } + + // log + { + const int nargs = 1; + + for (int ndims = 1; ndims <= 2; ++ndims) { + for (int i = 0; i < nargs; ++i) { + x[i] = get_random_tensor(ctx0, ndims, ne, 2.0f*1e-3f, 1.0f); + ggml_set_param(ctx0, x[i]); + } + + struct ggml_tensor * f = ggml_sum(ctx0, ggml_log(ctx0, x[0])); + + check_gradient("log", ctx0, x, f, ndims, nargs, 1e-3f, INFINITY, 1e-1f); + } + } + + // sum + { + const int nargs = 1; + + for (int ndims = 1; ndims <= 2; ++ndims) { + for (int i = 0; i < nargs; ++i) { + x[i] = get_random_tensor(ctx0, ndims, ne, -1.0f, 1.0f); + ggml_set_param(ctx0, x[i]); + } + + struct ggml_tensor * f = ggml_sum(ctx0, x[0]); + + check_gradient("sum", ctx0, x, f, ndims, nargs, 1e-3f, 1e-3f, 1e-3f); + } + } + + + // sum_rows + { + const int nargs = 1; + + for (int ndims = 1; ndims <= 4; ++ndims) { + for (int i = 0; i < nargs; ++i) { + x[i] = get_random_tensor(ctx0, ndims, ne, -1.0f, 1.0f); + ggml_set_param(ctx0, x[i]); + } + + struct ggml_tensor * f = ggml_sum(ctx0, ggml_sqr(ctx0, ggml_sum_rows(ctx0, x[0]))); + + check_gradient("sum_rows", ctx0, x, f, ndims, nargs, 1e-3f, 1e-2f, INFINITY); + } + } + + // repeat + { + int64_t ne2[4]; + get_random_dims(ne2, 4); + + ne2[0] = ne[0] * ne2[0]; + ne2[1] = ne[1] * ne2[1]; + ne2[2] = 1; + ne2[3] = 1; + + const int nargs = 1; + for (int ndims = 1; ndims <= 2; ++ndims) { + x[0] = get_random_tensor(ctx0, ndims, ne, -1.0f, 1.0f); + x[1] = get_random_tensor(ctx0, ndims, ne2, -1.0f, 1.0f); + ggml_set_param(ctx0, x[0]); + + struct ggml_tensor * f = ggml_sum(ctx0, ggml_sqr(ctx0, ggml_sub(ctx0, x[1], ggml_repeat(ctx0, x[0], x[1])))); + + check_gradient("repeat", ctx0, x, f, ndims, nargs, 1e-3f, 1e-2f, INFINITY); + } + + } + + // abs (finite differences do not work) + //{ + // const int nargs = 1; + + // for (int ndims = 1; ndims <= 2; ++ndims) { + // for (int i = 0; i < nargs; ++i) { + // x[i] = get_random_tensor(ctx0, ndims, ne, -1.0f, 1.0f); + // ggml_set_param(ctx0, x[i]); + // } + + // struct ggml_tensor * f = ggml_sum(ctx0, ggml_abs(ctx0, x[0])); + + // check_gradient("abs", ctx0, x, f, ndims, nargs, 1e-3f, INFINITY, 1e-3f); + // } + //} + + // mul_mat + { + const int nargs = 2; + + for (int ndims = 2; ndims <= 2; ++ndims) { + x[0] = get_random_tensor(ctx0, ndims, ne, -1.0f, 1.0f); + { + int64_t ne2[4]; + get_random_dims(ne2, 4); + ne2[0] = ne[0]; + x[1] = get_random_tensor(ctx0, ndims, ne2, -1.0f, 1.0f); + } + + ggml_set_param(ctx0, x[0]); + ggml_set_param(ctx0, x[1]); + + struct ggml_tensor * m = ggml_mul_mat(ctx0, x[1], x[0]); + struct ggml_tensor * f = ggml_sum(ctx0, m); + + GGML_PRINT_DEBUG("testing: mul_mat, [%lld, %lld] (%d) * [%lld, %lld] (%d)\n", x[1]->ne[0], x[1]->ne[1], x[1]->n_dims, x[0]->ne[0], x[0]->ne[1], x[0]->n_dims); + + check_gradient("mul_mat", ctx0, x, f, ndims, nargs, 1e-3f, 1e-3f, INFINITY); + check_mat_mul(m, x[1], x[0]); + } + } + + // silu + { + const int nargs = 1; + + for (int ndims = 1; ndims <= 2; ++ndims) { + for (int i = 0; i < nargs; ++i) { + x[i] = get_random_tensor(ctx0, ndims, ne, -1.0f, 1.0f); + ggml_set_param(ctx0, x[i]); + } + + struct ggml_tensor * f = ggml_sum(ctx0, ggml_silu(ctx0, x[0])); + +#ifdef GGML_SILU_FP16 + // due to GGML_SILU_FP16 the finite difference method will be slightly wrong -> increase error bounds. + check_gradient("silu", ctx0, x, f, ndims, nargs, 1e-3f, 0.5, INFINITY); +#else + check_gradient("silu", ctx0, x, f, ndims, nargs, 1e-3f, 1e-3f, INFINITY); +#endif + } + } + + // rms_norm + { + const int nargs = 1; + + for (int ndims = 1; ndims <= 2; ++ndims) { + for (int i = 0; i < nargs; ++i) { + x[i] = get_random_tensor(ctx0, ndims, ne, -1.0f, 1.0f); + ggml_set_param(ctx0, x[i]); + } + + struct ggml_tensor * f = ggml_sum(ctx0, ggml_rms_norm(ctx0, x[0])); + + check_gradient("rms_norm", ctx0, x, f, ndims, nargs, 1e-4f, 1.0f, INFINITY); + } + } + + // scale + { + const int nargs = 2; + + int64_t ne2[4]; + ne2[0] = 1; + + for (int ndims = 1; ndims <= 2; ++ndims) { + x[1] = get_random_tensor(ctx0, 1, ne2, -1.0f, 1.0f); + x[0] = get_random_tensor(ctx0, ndims, ne, -1.0f, 1.0f); + + ggml_set_param(ctx0, x[0]); + ggml_set_param(ctx0, x[1]); + + struct ggml_tensor * f = ggml_sum(ctx0, ggml_scale(ctx0, x[0], x[1])); + + check_gradient("scale", ctx0, x, f, ndims, nargs, 1e-3f, 1e-3f, INFINITY); + } + } + + // cpy + { + const int nargs = 2; + + for (int ndims = 1; ndims <= 2; ++ndims) { + for (int i = 0; i < nargs; ++i) { + x[i] = get_random_tensor(ctx0, ndims, ne, -1.0f, 1.0f); + ggml_set_param(ctx0, x[i]); + } + // x[1] is overwritten by x[0], so the gradients don't propagate to x[1] + + struct ggml_tensor * f = ggml_sum(ctx0, ggml_cpy(ctx0, x[0], x[1])); + + check_gradient("cpy", ctx0, x, f, ndims, nargs, 1e-3f, 1e-3f, INFINITY); + } + } + + // reshape (1d->nd) + { + const int nargs = 1; + + for (int ndims = 1; ndims <= 2; ++ndims) { + int64_t ne2[4]; + ne2[0] = 1; + ne2[1] = 1; + ne2[2] = 1; + ne2[3] = 1; + for (int i = 0; i < ndims; ++i) { + ne2[0] *= ne[i]; + } + x[0] = get_random_tensor(ctx0, 1, ne2, -1.0f, 1.0f); + x[1] = get_random_tensor(ctx0, ndims, ne, -1.0f, 1.0f); + ggml_set_param(ctx0, x[0]); + + + struct ggml_tensor * f = ggml_sum(ctx0, ggml_reshape(ctx0, x[0], x[1])); + check_gradient("reshape", ctx0, x, f, ndims, nargs, 1e-3f, 1e-3f, INFINITY); + } + } + + // reshape (nd->1d) + { + const int nargs = 1; + + for (int ndims = 1; ndims <= 2; ++ndims) { + int64_t ne2[4]; + ne2[0] = 1; + ne2[1] = 1; + ne2[2] = 1; + ne2[3] = 1; + for (int i = 0; i < ndims; ++i) { + ne2[0] *= ne[i]; + } + x[0] = get_random_tensor(ctx0, ndims, ne, -1.0f, 1.0f); + x[1] = get_random_tensor(ctx0, 1, ne2, -1.0f, 1.0f); + ggml_set_param(ctx0, x[0]); + + + struct ggml_tensor * f = ggml_sum(ctx0, ggml_reshape(ctx0, x[0], x[1])); + check_gradient("reshape", ctx0, x, f, ndims, nargs, 1e-3f, 1e-3f, INFINITY); + } + } + + // acc 1d + { + int64_t ne2[4] = { 1, 1, 1, 1 }; + + const int nargs = 2; + for (int ndims = 1; ndims <= 4; ++ndims) { + + x[0] = get_random_tensor(ctx0, ndims, ne, -1.0f, 1.0f); + ggml_set_param(ctx0, x[0]); + + get_random_dims(ne2, 1); + while ((ne2[0] > ne[0]) || (ne2[0] > ggml_nelements(x[0]))) { + get_random_dims(ne2, 1); + } + + x[1] = get_random_tensor(ctx0, 1, ne2, -1.0f, 1.0f); + ggml_set_param(ctx0, x[1]); + + const int max_offset = MAX(0, ggml_nelements(x[0]) - ggml_nelements(x[1])); + const int offset = irand(max_offset) * ggml_element_size(x[0]); + + struct ggml_tensor * f = ggml_sum(ctx0, ggml_acc(ctx0, x[0], x[1], x[0]->nb[1], x[0]->nb[2], x[0]->nb[3], offset)); + + check_gradient("acc 1d", ctx0, x, f, ndims, nargs, 1e-3f, 1e-3f, INFINITY); + } + } + + // acc 2d + { + int64_t ne2[4] = { 1, 1, 1, 1 }; + int64_t max_offsets[4] = { 0, 0, 0, 0 }; + int64_t offsets[4] = { 0, 0, 0, 0 }; + + const int nargs = 2; + for (int ndims = 2; ndims <= 4; ++ndims) { + + x[0] = get_random_tensor(ctx0, ndims, ne, -1.0f, 1.0f); + ggml_set_param(ctx0, x[0]); + + get_random_dims(ne2, 2); + while ((ne2[0] > ne[0]) || (ne2[1] > ne[1]) || (ne2[0]*ne2[1] > ggml_nelements(x[0]))) { + get_random_dims(ne2, 2); + } + + x[1] = get_random_tensor(ctx0, 2, ne2, -1.0f, 1.0f); + ggml_set_param(ctx0, x[1]); + + max_offsets[0] = MAX(0, x[0]->ne[0] - x[1]->ne[0]); + max_offsets[1] = MAX(0, x[0]->ne[1] - x[1]->ne[1]); + offsets[0] = irand(max_offsets[0]) * x[0]->nb[0]; + offsets[1] = irand(max_offsets[1]) * x[0]->nb[1]; + const int offset = offsets[0] + offsets[1]; + + struct ggml_tensor * f = ggml_sum(ctx0, ggml_acc(ctx0, x[0], x[1], x[0]->nb[1], x[0]->nb[2], x[0]->nb[3], offset)); + + check_gradient("acc 2d", ctx0, x, f, ndims, nargs, 1e-3f, 1e-3f, INFINITY); + } + } + + // acc 3d + { + int64_t ne2[4] = { 1, 1, 1, 1 }; + int64_t max_offsets[4] = { 0, 0, 0, 0 }; + int64_t offsets[4] = { 0, 0, 0, 0 }; + + const int nargs = 2; + for (int ndims = 3; ndims <= 4; ++ndims) { + + x[0] = get_random_tensor(ctx0, ndims, ne, -1.0f, 1.0f); + ggml_set_param(ctx0, x[0]); + + get_random_dims(ne2, 3); + while ((ne2[0] > ne[0]) || (ne2[1] > ne[1]) || (ne2[2] > ne[2]) || (ne2[0]*ne2[1]*ne2[2] > ggml_nelements(x[0]))) { + get_random_dims(ne2, 3); + } + + x[1] = get_random_tensor(ctx0, 3, ne2, -1.0f, 1.0f); + ggml_set_param(ctx0, x[1]); + + max_offsets[0] = MAX(0, x[0]->ne[0] - x[1]->ne[0]); + max_offsets[1] = MAX(0, x[0]->ne[1] - x[1]->ne[1]); + max_offsets[2] = MAX(0, x[0]->ne[2] - x[1]->ne[2]); + offsets[0] = irand(max_offsets[0]) * x[0]->nb[0]; + offsets[1] = irand(max_offsets[1]) * x[0]->nb[1]; + offsets[2] = irand(max_offsets[2]) * x[0]->nb[2]; + const int offset = offsets[0] + offsets[1] + offsets[2]; + + struct ggml_tensor * f = ggml_sum(ctx0, ggml_acc(ctx0, x[0], x[1], x[0]->nb[1], x[0]->nb[2], x[0]->nb[3], offset)); + + check_gradient("acc 3d", ctx0, x, f, ndims, nargs, 1e-3f, 1e-3f, INFINITY); + } + } + + // acc 4d + { + int64_t ne2[4] = { 1, 1, 1, 1 }; + int64_t max_offsets[4] = { 0, 0, 0, 0 }; + int64_t offsets[4] = { 0, 0, 0, 0 }; + + const int nargs = 2; + for (int ndims = 4; ndims <= 4; ++ndims) { + + x[0] = get_random_tensor(ctx0, ndims, ne, -1.0f, 1.0f); + ggml_set_param(ctx0, x[0]); + + get_random_dims(ne2, 4); + while ((ne2[0] > ne[0]) || (ne2[1] > ne[1]) || (ne2[2] > ne[2]) || (ne2[3] > ne[3]) || (ne2[0]*ne2[1]*ne2[2]*ne2[3] > ggml_nelements(x[0]))) { + get_random_dims(ne2, 4); + } + + x[1] = get_random_tensor(ctx0, 4, ne2, -1.0f, 1.0f); + ggml_set_param(ctx0, x[1]); + + max_offsets[0] = MAX(0, x[0]->ne[0] - x[1]->ne[0]); + max_offsets[1] = MAX(0, x[0]->ne[1] - x[1]->ne[1]); + max_offsets[2] = MAX(0, x[0]->ne[2] - x[1]->ne[2]); + max_offsets[3] = MAX(0, x[0]->ne[3] - x[1]->ne[3]); + offsets[0] = irand(max_offsets[0]) * x[0]->nb[0]; + offsets[1] = irand(max_offsets[1]) * x[0]->nb[1]; + offsets[2] = irand(max_offsets[2]) * x[0]->nb[2]; + offsets[3] = irand(max_offsets[3]) * x[0]->nb[3]; + const int offset = offsets[0] + offsets[1] + offsets[2] + offsets[3]; + + struct ggml_tensor * f = ggml_sum(ctx0, ggml_acc(ctx0, x[0], x[1], x[0]->nb[1], x[0]->nb[2], x[0]->nb[3], offset)); + + check_gradient("acc 4d", ctx0, x, f, ndims, nargs, 1e-3f, 1e-3f, INFINITY); + } + } + + // set_1d + { + int64_t ne2[4]; + + const int nargs = 2; + for (int ndims = 1; ndims <= 4; ++ndims) { + + x[0] = get_random_tensor(ctx0, ndims, ne, -1.0f, 1.0f); + ggml_set_param(ctx0, x[0]); + + get_random_dims(ne2, 1); + while ((ne2[0] > ne[0]) || (ne2[0] > ggml_nelements(x[0]))) { + get_random_dims(ne2, 1); + } + + x[1] = get_random_tensor(ctx0, 1, ne2, -1.0f, 1.0f); + ggml_set_param(ctx0, x[1]); + + const int max_offset = MAX(0, ggml_nelements(x[0]) - ggml_nelements(x[1])); + const int offset = irand(max_offset) * ggml_element_size(x[0]); + + struct ggml_tensor * f = ggml_sum(ctx0, ggml_set_1d(ctx0, x[0], x[1], offset)); + + check_gradient("set_1d", ctx0, x, f, ndims, nargs, 1e-3f, 1e-3f, INFINITY); + } + } + + // set_2d + { + int64_t ne2[4]; + int64_t max_offsets[4] = { 0, 0, 0, 0 }; + int64_t offsets[4] = { 0, 0, 0, 0 }; + + const int nargs = 1; + for (int ndims = 2; ndims <= 4; ++ndims) { + + x[0] = get_random_tensor(ctx0, ndims, ne, -1.0f, 1.0f); + ggml_set_param(ctx0, x[0]); + + get_random_dims(ne2, 2); + while ((ne2[0] > ne[0]) || (ne2[1] > ne[1]) || (ne2[0]*ne2[1] > ggml_nelements(x[0]))) { + get_random_dims(ne2, 2); + } + + x[1] = get_random_tensor(ctx0, 2, ne2, -1.0f, 1.0f); + ggml_set_param(ctx0, x[1]); + + max_offsets[0] = MAX(0, x[0]->ne[0] - x[1]->ne[0]); + max_offsets[1] = MAX(0, x[0]->ne[1] - x[1]->ne[1]); + offsets[0] = irand(max_offsets[0]) * x[0]->nb[0]; + offsets[1] = irand(max_offsets[1]) * x[0]->nb[1]; + const int offset = offsets[0] + offsets[1]; + + struct ggml_tensor * f = ggml_sum(ctx0, ggml_set_2d(ctx0, x[0], x[1], x[1]->nb[1], offset)); + + check_gradient("set_2d", ctx0, x, f, ndims, nargs, 1e-3f, 1e-3f, INFINITY); + } + } + + // view_1d + { + const int nargs = 1; + for (int ndims = 1; ndims <= 4; ++ndims) { + + x[0] = get_random_tensor(ctx0, ndims, ne, -1.0f, 1.0f); + + ggml_set_param(ctx0, x[0]); + + const int k0 = irand(ggml_nelements(x[0])); + const int k1 = irand(ggml_nelements(x[0])); + const int i0 = MIN(k0, k1); + const int i1 = MAX(k0, k1); + + const int offset = i0 * sizeof(float); + const int nelem = i1 - i0; + + struct ggml_tensor * f = ggml_sum(ctx0, ggml_view_1d(ctx0, x[0], nelem, offset)); + + check_gradient("view_1d", ctx0, x, f, ndims, nargs, 1e-3f, 1e-3f, INFINITY); + } + } + + // view_2d + { + int64_t ne2[4]; + int64_t nb2[4]; + + const int nargs = 1; + for (int ndims = 1; ndims <= 4; ++ndims) { + + x[0] = get_random_tensor(ctx0, ndims, ne, -1.0f, 1.0f); + + get_random_dims(ne2, 2); + while (ne2[0]*ne2[1] > ggml_nelements(x[0])) { + get_random_dims(ne2, 2); + } + const int count = ne2[0]*ne2[1]; + + nb2[0] = sizeof(float); + nb2[1] = nb2[0]*ne2[0]; + + ggml_set_param(ctx0, x[0]); + + const int max_offset = ggml_nelements(x[0]) - count; + const int offset = irand(max_offset+1) * sizeof(float); + + struct ggml_tensor * f = ggml_sum(ctx0, ggml_view_2d(ctx0, x[0], ne2[0], ne2[1], nb2[1], offset)); + + check_gradient("view_2d", ctx0, x, f, ndims, nargs, 1e-3f, 1e-3f, INFINITY); + } + } + + // view_3d + { + int64_t ne2[4] = {1,1,1,1}; + int64_t nb2[4] = {0,0,0,0}; + + const int nargs = 1; + for (int ndims = 1; ndims <= 4; ++ndims) { + + x[0] = get_random_tensor(ctx0, ndims, ne, -1.0f, 1.0f); + + get_random_dims(ne2, 3); + while (ne2[0]*ne2[1]*ne2[2] > ggml_nelements(x[0])) { + get_random_dims(ne2, 3); + } + const int count = ne2[0]*ne2[1]*ne2[2]; + + nb2[0] = sizeof(float); + nb2[1] = nb2[0]*ne2[0]; + nb2[2] = nb2[1]*ne2[1]; + + ggml_set_param(ctx0, x[0]); + + const int max_offset = ggml_nelements(x[0]) - count; + const int offset = irand(max_offset+1) * sizeof(float); + + struct ggml_tensor * f = ggml_sum(ctx0, ggml_view_3d(ctx0, x[0], ne2[0], ne2[1], ne2[2], nb2[1], nb2[2], offset)); + + check_gradient("view_3d", ctx0, x, f, ndims, nargs, 1e-3f, 1e-3f, INFINITY); + } + } + + // permute + { + int64_t ne2[4]; + + const int nargs = 1; + for (int ndims = 1; ndims <= 4; ++ndims) + { + // ggml_permute will set axes of dimensions below n_dims to 1. + // to make ggml_permute work correctly on all axes, + // the input tensor needs maximal n_dim of 4. + for (int i=0; i +#include +#include +#include +#include + +#define MAX_NARGS 2 + +float frand() { + return (float)rand()/(float)RAND_MAX; +} + +int irand(int n) { + return rand()%n; +} + +void get_random_dims(int64_t * dims, int ndims) { + dims[0] = dims[1] = dims[2] = dims[3] = 1; + + for (int i = 0; i < ndims; i++) { + dims[i] = 1 + irand(4); + } +} + +struct ggml_tensor * get_random_tensor( + struct ggml_context * ctx0, + int ndims, + int64_t ne[], + float fmin, + float fmax) { + struct ggml_tensor * result = ggml_new_tensor(ctx0, GGML_TYPE_F32, ndims, ne); + + switch (ndims) { + case 1: + for (int i0 = 0; i0 < ne[0]; i0++) { + ((float *)result->data)[i0] = frand()*(fmax - fmin) + fmin; + } + break; + case 2: + for (int i1 = 0; i1 < ne[1]; i1++) { + for (int i0 = 0; i0 < ne[0]; i0++) { + ((float *)result->data)[i1*ne[0] + i0] = frand()*(fmax - fmin) + fmin; + } + } + break; + case 3: + for (int i2 = 0; i2 < ne[2]; i2++) { + for (int i1 = 0; i1 < ne[1]; i1++) { + for (int i0 = 0; i0 < ne[0]; i0++) { + ((float *)result->data)[i2*ne[1]*ne[0] + i1*ne[0] + i0] = frand()*(fmax - fmin) + fmin; + } + } + } + break; + case 4: + for (int i3 = 0; i3 < ne[3]; i3++) { + for (int i2 = 0; i2 < ne[2]; i2++) { + for (int i1 = 0; i1 < ne[1]; i1++) { + for (int i0 = 0; i0 < ne[0]; i0++) { + ((float *)result->data)[i3*ne[2]*ne[1]*ne[0] + i2*ne[1]*ne[0] + i1*ne[0] + i0] = frand()*(fmax - fmin) + fmin; + } + } + } + } + break; + default: + assert(false); + }; + + return result; +} + +float get_element(const struct ggml_tensor * t, int idx) { + return ((float *)t->data)[idx]; +} + +void set_element(struct ggml_tensor * t, int idx, float value) { + ((float *)t->data)[idx] = value; +} + +bool check_gradient( + const char * op_name, + struct ggml_context * ctx0, + struct ggml_tensor * x[], + struct ggml_tensor * f, + int ndims, + int nargs, + float eps, + float max_error_abs, + float max_error_rel) { + + struct ggml_cgraph gf = ggml_build_forward (f); + struct ggml_cgraph gb = ggml_build_backward(ctx0, &gf, false); + + ggml_graph_compute(ctx0, &gf); + ggml_graph_reset (&gf); + ggml_set_f32 (f->grad, 1.0f); + ggml_graph_compute(ctx0, &gb); + + ggml_graph_dump_dot(&gf, NULL, "test-grad0-forward.dot"); + ggml_graph_dump_dot(&gb, &gf, "test-grad0-backward.dot"); + + for (int i = 0; i < nargs; ++i) { + const int64_t nelements = ggml_nelements(x[i]); + for (int64_t k = 0; k < nelements; ++k) { + // compute gradient using finite differences + const float x0 = get_element(x[i], k); + + set_element(x[i], k, x0 + eps); + ggml_graph_compute(ctx0, &gf); + + const float f0 = ggml_get_f32_1d(f, 0); + + set_element(x[i], k, x0 - eps); + ggml_graph_compute(ctx0, &gf); + + const float f1 = ggml_get_f32_1d(f, 0); + + const float g0 = (f0 - f1)/(2.0f*eps); + + set_element(x[i], k, x0); + + // compute gradient using backward graph + ggml_graph_reset (&gf); + ggml_set_f32 (f->grad, 1.0f); + ggml_graph_compute(ctx0, &gb); + + const float g1 = get_element(x[i]->grad, k); + + const float error_abs = fabsf(g0 - g1); + const float error_rel = g0 != 0 ? fabsf(g0 - g1)/fabs(g0) : 0; + + if (error_abs > max_error_abs || error_rel > max_error_rel) { + printf("%s: ndims=%d, i=%d, k=%" PRId64 ", g0=%f, g1=%f, error_abs=%f, error_rel=%f\n", op_name, ndims, i, k, g0, g1, error_abs, error_rel); + assert(false); + } + } + } + + return true; +} + + +float mat_get(const struct ggml_tensor * t, int i0, int i1, int i2, int i3) { + const size_t nb0 = t->nb[0]; + const size_t nb1 = t->nb[1]; + const size_t nb2 = t->nb[2]; + const size_t nb3 = t->nb[3]; + + return + *((float*) ((char*)t->data + i0*nb0 + i1*nb1 + i2*nb2 + i3*nb3)); +} + +bool check_mat_mul( + const struct ggml_tensor * y, + const struct ggml_tensor * x0, + const struct ggml_tensor * x1) { + float * dst = (float *) y->data; + float * src0 = (float *) x0->data; + float * src1 = (float *) x1->data; + + const int64_t n00 = x0->ne[0]; + const int64_t n10 = x0->ne[1]; + const int64_t n20 = x0->ne[2]; + const int64_t n30 = x0->ne[3]; + + const int64_t n01 = x1->ne[0]; + const int64_t n11 = x1->ne[1]; + const int64_t n21 = x1->ne[2]; + const int64_t n31 = x1->ne[3]; + + const int64_t n02 = y->ne[0]; + const int64_t n12 = y->ne[1]; + const int64_t n22 = y->ne[2]; + const int64_t n32 = y->ne[3]; + + printf("x0: [%" PRId64 ", %" PRId64 ", %" PRId64 ", %" PRId64 "]\n", n00, n10, n20, n30); + for (int j = 0; j < n10; ++j) { + for (int i = 0; i < n00; ++i) { + printf("%6.3f ", mat_get(x0, i, j, 0, 0)); + } + printf("\n"); + } + printf("\n"); + + printf("x1: [%" PRId64 ", %" PRId64 ", %" PRId64 ", %" PRId64 "]\n", n01, n11, n21, n31); + for (int j = 0; j < n11; ++j) { + for (int i = 0; i < n01; ++i) { + printf("%6.3f ", mat_get(x1, i, j, 0, 0)); + } + printf("\n"); + } + printf("\n"); + + printf("y: [%" PRId64 ", %" PRId64 ", %" PRId64 ", %" PRId64 "]\n", n02, n12, n22, n32); + for (int j = 0; j < n12; ++j) { + for (int i = 0; i < n02; ++i) { + printf("%6.3f ", mat_get(y, i, j, 0, 0)); + } + printf("\n"); + } + + for (int i3 = 0; i3 < n32; ++i3) { + for (int i2 = 0; i2 < n22; ++i2) { + for (int i1 = 0; i1 < n12; ++i1) { + for (int i0 = 0; i0 < n02; ++i0) { + float sum = 0.0f; + for (int k = 0; k < n00; ++k) { + sum += mat_get(x0, k, i0, i2, i3) * mat_get(x1, k, i1, i2, i3); + } + if (fabsf(sum - mat_get(y, i0, i1, i2, i3)) > 1e-5) { + printf("error: i0=%d, i1=%d, i2=%d, i3=%d, sum=%f, y=%f\n", + i0, i1, i2, i3, sum, mat_get(y, i0, i1, i2, i3)); + assert(false); + return false; + } + } + } + } + } + + return true; +} + +int main(int argc, const char ** argv) { + struct ggml_init_params params = { + .mem_size = 128*1024*1024, + .mem_buffer = NULL, + .no_alloc = false, + }; + + int64_t ne[4]; + + // original loop: 500 + int niter = 500; + const char *env = getenv("GGML_NLOOP"); + if (env != NULL) { + niter = atoi(env); + } + if (argc > 1) { + niter = atoi(argv[1]); + } + for (int iter = 0; iter < niter; ++iter) { + printf("test-mul-mat0: iter:%d/%d\n", iter, niter); + struct ggml_context * ctx0 = ggml_init(params); + + get_random_dims(ne, 4); + + struct ggml_tensor * x[MAX_NARGS]; + + // mul_mat + { + const int nargs = 1; + + for (int ndims = 2; ndims <= 4; ++ndims) { + x[0] = get_random_tensor(ctx0, ndims, ne, -1.0f, 1.0f); + ne[1] = rand()%4 + 1; + x[1] = get_random_tensor(ctx0, ndims, ne, -1.0f, 1.0f); + + ggml_set_param(ctx0, x[0]); + + struct ggml_tensor * m = ggml_mul_mat(ctx0, x[1], x[0]); + struct ggml_tensor * f = ggml_sum(ctx0, m); + + printf("testing: mul_mat, [%" PRId64 ", %" PRId64 ", %" PRId64 ", %" PRId64 "] = [%" PRId64 ", %" PRId64 ", %" PRId64 ", %" PRId64 "] * [%" PRId64 ", %" PRId64 ", %" PRId64 ", %" PRId64 "]\n", + m->ne[0], m->ne[1], m->ne[2], m->ne[3], + x[1]->ne[0], x[1]->ne[1], x[1]->ne[2], x[1]->ne[3], + x[0]->ne[0], x[0]->ne[1], x[0]->ne[2], x[0]->ne[3]); + + assert(m->ne[0] == x[1]->ne[1]); + assert(m->ne[1] == x[0]->ne[1]); + assert(m->ne[2] == x[0]->ne[2]); + assert(m->ne[3] == x[0]->ne[3]); + + if (ndims <= 2) { + check_gradient("mul_mat", ctx0, x, f, ndims, nargs, 1e-3f, 1e-3f, INFINITY); + } else { + struct ggml_cgraph gf = ggml_build_forward(m); + ggml_graph_compute(ctx0, &gf); + } + + check_mat_mul(m, x[1], x[0]); + } + } + + // mul_mat (transposed) + { + const int nargs = 1; + + for (int ndims = 2; ndims <= 4; ++ndims) { + x[0] = get_random_tensor(ctx0, ndims, ne, -1.0f, 1.0f); + ne[1] = ne[0]; + ne[0] = rand()%4 + 1; + x[1] = ggml_cont(ctx0, ggml_transpose(ctx0, get_random_tensor(ctx0, ndims, ne, -1.0f, 1.0f))); + + ggml_set_param(ctx0, x[0]); + + struct ggml_tensor * m = ggml_mul_mat(ctx0, x[1], x[0]); + struct ggml_tensor * f = ggml_sum(ctx0, m); + + printf("testing: mul_mat, [%" PRId64 ", %" PRId64 ", %" PRId64 ", %" PRId64 "] = [%" PRId64 ", %" PRId64 ", %" PRId64 ", %" PRId64 "] * [%" PRId64 ", %" PRId64 ", %" PRId64 ", %" PRId64 "]\n", + m->ne[0], m->ne[1], m->ne[2], m->ne[3], + x[1]->ne[0], x[1]->ne[1], x[1]->ne[2], x[1]->ne[3], + x[0]->ne[0], x[0]->ne[1], x[0]->ne[2], x[0]->ne[3]); + + assert(m->ne[0] == x[1]->ne[1]); + assert(m->ne[1] == x[0]->ne[1]); + assert(m->ne[2] == x[0]->ne[2]); + assert(m->ne[3] == x[0]->ne[3]); + + if (ndims <= 2) { + check_gradient("mul_mat", ctx0, x, f, ndims, nargs, 1e-3f, 1e-3f, INFINITY); + } else { + struct ggml_cgraph gf = ggml_build_forward(m); + ggml_graph_compute(ctx0, &gf); + } + + check_mat_mul(m, x[1], x[0]); + } + } + ggml_free(ctx0); + } + + return 0; +} diff --git a/ggml_old/tests/test-mul-mat1.c b/ggml_old/tests/test-mul-mat1.c new file mode 100644 index 0000000..fc24077 --- /dev/null +++ b/ggml_old/tests/test-mul-mat1.c @@ -0,0 +1,312 @@ +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +#include + +const int M = 1280; +const int N = 1536; +const int K = 1280; + +uint64_t get_time_us() { + struct timeval tv; + gettimeofday(&tv, NULL); + return tv.tv_sec * 1000000 + tv.tv_usec; +} + +// +// naive implementation +// + +void mul_mat_f32_0( + const float * restrict src0, // M x K + const float * restrict src1, // N x K (transposed) + float * dst, + int m, int n, int k) { + for (int i = 0; i < m; i++) { + for (int j = 0; j < n; j++) { + float sum = 0; + for (int l = 0; l < k; l++) { + sum += src0[i*k + l] * src1[j*k + l]; + } + dst[i*n + j] = sum; + } + } +} + +void mul_mat_f16_0( + const __fp16 * src0, + const __fp16 * src1, + float * dst, + int m, int n, int k) { + const int k32 = k & ~31; + + for (int i = 0; i < m; i++) { + for (int j = 0; j < n; j++) { + float sumf = 0.0; + + float16x8_t sum0 = vdupq_n_f16(0.0f); + float16x8_t sum1 = vdupq_n_f16(0.0f); + float16x8_t sum2 = vdupq_n_f16(0.0f); + float16x8_t sum3 = vdupq_n_f16(0.0f); + + float16x8_t x0, x1, x2, x3; + float16x8_t y0, y1, y2, y3; + + const __fp16 * restrict p0 = src0 + i*k; + const __fp16 * restrict p1 = src1 + j*k; + + for (int l = 0; l < k32; l += 32) { + x0 = vld1q_f16(p0 + l + 0 ); + x1 = vld1q_f16(p0 + l + 8 ); + x2 = vld1q_f16(p0 + l + 16); + x3 = vld1q_f16(p0 + l + 24); + + y0 = vld1q_f16(p1 + l + 0 ); + y1 = vld1q_f16(p1 + l + 8 ); + y2 = vld1q_f16(p1 + l + 16); + y3 = vld1q_f16(p1 + l + 24); + + sum0 = vfmaq_f16(sum0, x0, y0); + sum1 = vfmaq_f16(sum1, x1, y1); + sum2 = vfmaq_f16(sum2, x2, y2); + sum3 = vfmaq_f16(sum3, x3, y3); + } + + // reduce sum0..sum3 to sum0 + sum0 = vaddq_f16(sum0, sum1); + sum2 = vaddq_f16(sum2, sum3); + sum0 = vaddq_f16(sum0, sum2); + + // load sum0 into 2 float32x4_t + float32x4_t sum0f32 = vcvt_f32_f16(vget_low_f16(sum0)); + float32x4_t sum1f32 = vcvt_f32_f16(vget_high_f16(sum0)); + + // reduce sum0f32 and sum1f32 to sumf + sum0f32 = vaddq_f32(sum0f32, sum1f32); + + float32x2_t sumf32 = vadd_f32(vget_low_f32(sum0f32), vget_high_f32(sum0f32)); + sumf = vget_lane_f32(sumf32, 0) + vget_lane_f32(sumf32, 1); + + //sumf = sum0[0] + sum0[1] + sum0[2] + sum0[3] + sum0[4] + sum0[5] + sum0[6] + sum0[7]; + + for (int l = k32; l < k32; l++) { + sumf += p0[l]*p1[l]; + } + + dst[i*n + j] = sumf; + } + } +} + +// blocking with block size 32 +void mul_mat_f16_1( + const __fp16 * src0, + const __fp16 * src1, + float * dst, + int m, int n, int k) { + + const int k32 = k & ~31; + const int bs = 32; + + memset(dst, 0, m*n*sizeof(float)); + + for (int i = 0; i < m; i += bs) { + for (int j = 0; j < n; j += bs) { + for (int l = 0; l < k; l += bs) { + for (int ii = i; ii < i + bs; ii++) { + const __fp16 * restrict p0 = src0 + ii*k; + + float16x8_t x0, x1, x2, x3; + + x0 = vld1q_f16(p0 + l + 0 ); + x1 = vld1q_f16(p0 + l + 8 ); + x2 = vld1q_f16(p0 + l + 16); + x3 = vld1q_f16(p0 + l + 24); + + for (int jj = j; jj < j + bs; jj++) { + float sumf = 0.0; + + float16x8_t sum0 = vdupq_n_f16(0.0f); + float16x8_t sum1 = vdupq_n_f16(0.0f); + float16x8_t sum2 = vdupq_n_f16(0.0f); + float16x8_t sum3 = vdupq_n_f16(0.0f); + + float16x8_t y0, y1, y2, y3; + + const __fp16 * restrict p1 = src1 + jj*k; + + y0 = vld1q_f16(p1 + l + 0 ); + y1 = vld1q_f16(p1 + l + 8 ); + y2 = vld1q_f16(p1 + l + 16); + y3 = vld1q_f16(p1 + l + 24); + + sum0 = vfmaq_f16(sum0, x0, y0); + sum1 = vfmaq_f16(sum1, x1, y1); + sum2 = vfmaq_f16(sum2, x2, y2); + sum3 = vfmaq_f16(sum3, x3, y3); + + // reduce sum0..sum3 to sum0 + sum0 = vaddq_f16(sum0, sum1); + sum2 = vaddq_f16(sum2, sum3); + sum0 = vaddq_f16(sum0, sum2); + + // load sum0 into 2 float32x4_t + float32x4_t sum0f32 = vcvt_f32_f16(vget_low_f16(sum0)); + float32x4_t sum1f32 = vcvt_f32_f16(vget_high_f16(sum0)); + + // reduce sum0f32 and sum1f32 to sumf + sum0f32 = vaddq_f32(sum0f32, sum1f32); + + float32x2_t sumf32 = vadd_f32(vget_low_f32(sum0f32), vget_high_f32(sum0f32)); + sumf = vget_lane_f32(sumf32, 0) + vget_lane_f32(sumf32, 1); + + //sumf = sum0[0] + sum0[1] + sum0[2] + sum0[3] + sum0[4] + sum0[5] + sum0[6] + sum0[7]; + + dst[ii*n + jj] += sumf; + } + } + } + } + } + +} + +void mul_mat_f8_0( + const uint8_t * src0, + const uint8_t * src1, + float * dst, + int m, int n, int k) { + const int k32 = k & ~31; + + for (int i = 0; i < m; i++) { + for (int j = 0; j < n; j++) { + float sumf = 0.0; + + const uint8_t * restrict p0 = src0 + i*k; + const uint8_t * restrict p1 = src1 + j*k; + + for (int l = 0; l < k32; l += 32) { + uint8x16_t x0 = vld1q_u8(p0 + l + 0 ); + uint8x16_t x1 = vld1q_u8(p0 + l + 16); + + uint8x16_t y0 = vld1q_u8(p1 + l + 0 ); + uint8x16_t y1 = vld1q_u8(p1 + l + 16); + + x0 = vmulq_u8(x0, y0); + x1 = vmulq_u8(x1, y1); + + sumf += vaddvq_u8(x0) + vaddvq_u8(x1); + } + + dst[i*n + j] = sumf; + } + } +} + +int main(int argc, const char ** argv) { + float * src0 = malloc(sizeof(float)*M*K); + float * src1 = malloc(sizeof(float)*N*K); + float * dst = malloc(sizeof(float)*M*N); + + for (int i = 0; i < M*K; i++) { + src0[i] = rand() / (float)RAND_MAX; + } + + for (int i = 0; i < N*K; i++) { + src1[i] = rand() / (float)RAND_MAX; + } + + // convert src0 and src1 to __fp16 + __fp16 * src0_fp16 = (__fp16 *)(malloc(sizeof(__fp16)*M*K)); + __fp16 * src1_fp16 = (__fp16 *)(malloc(sizeof(__fp16)*N*K)); + + uint8_t * src0_fp8 = (uint8_t *)(malloc(sizeof(__fp16)*M*K)); + uint8_t * src1_fp8 = (uint8_t *)(malloc(sizeof(__fp16)*N*K)); + + { + const uint64_t t_start = get_time_us(); + + for (int i = 0; i < M*K; i++) { + src0_fp16[i] = src0[i]; + //printf("%f %f\n", src0[i], src0_fp16[i]); + //assert(!isnan(src0_fp16[i])); + } + + for (int i = 0; i < N*K; i++) { + src1_fp16[i] = src1[i]; + } + + const uint64_t t_end = get_time_us(); + printf("convert time: %f ms\n", (t_end - t_start) / 1000.0); + } + + for (int i = 0; i < 16; ++i) { + printf("%f %f\n", src0[i], src0_fp16[i]); + } + + int method = 0; + if (argc > 1) { + method = atoi(argv[1]); + } + + const int nIter = 1; + + const clock_t start = clock(); + const uint64_t start_us = get_time_us(); + + double iM = 1.0/M; + double sum = 0.0f; + for (int i = 0; i < nIter; i++) { + if (method == 0) { + mul_mat_f32_0(src0, src1, dst, M, N, K); + } + + if (method == 1) { + mul_mat_f16_0(src0_fp16, src1_fp16, dst, M, N, K); + } + + if (method == 2) { + mul_mat_f16_1(src0_fp16, src1_fp16, dst, M, N, K); + } + + if (method == 3) { + mul_mat_f8_0(src0_fp8, src1_fp8, dst, M, N, K); + } + + if (method == 4) { + // Use BLAS sgemm from Accelerate framework + cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasTrans, M, N, K, 1.0f, src0, K, src1, K, 0.0f, dst, N); + } + } + + for (int i = 0; i < N; i++) { + sum += dst[i]*iM; + } + + { + const clock_t end = clock(); + const uint64_t end_us = get_time_us(); + printf("%s: elapsed ticks: %ld\n", __func__, end - start); + printf("%s: elapsed us: %llu / %f ms\n", __func__, end_us - start_us, (end_us - start_us) / 1000.0 / nIter); + } + + printf("%f\n", sum); + + free(src0); + free(src1); + free(dst); + + free(src0_fp16); + free(src1_fp16); + + return 0; +} diff --git a/ggml_old/tests/test-mul-mat2.c b/ggml_old/tests/test-mul-mat2.c new file mode 100644 index 0000000..e6728a5 --- /dev/null +++ b/ggml_old/tests/test-mul-mat2.c @@ -0,0 +1,2591 @@ +// quantized matrix multiplication + +#include "ggml.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#if defined(__ARM_NEON) +#include "arm_neon.h" +#elif defined(__AVX__) || defined(__AVX2__) +#include "immintrin.h" +#endif + +#ifndef MIN +#define MAX(a, b) ((a) > (b) ? (a) : (b)) +#define MIN(a, b) ((a) < (b) ? (a) : (b)) +#endif + +const int M = 1280; +const int N = 1536; +const int K = 1280; + +//const int M = 64; +//const int N = 64; +//const int K = 64; + +#define QK 64 +#define QB 4 + +//#define GGML_GQ_USE_FP16_SCALE + +#if defined(GGML_GQ_USE_FP16_SCALE) +#define gq_scale_t ggml_fp16_t +#define GGML_FP32_TO_GQ(x) ggml_fp32_to_fp16(x) +#define GGML_GQ_TO_FP32(x) ggml_fp16_to_fp32(x) +#else +#define gq_scale_t float +#define GGML_FP32_TO_GQ(x) (x) +#define GGML_GQ_TO_FP32(x) (x) +#endif + +#define gq_t_bits 64 +#define gq_quant_t uint64_t + +float frand() { + return (float) rand() / (float) RAND_MAX; +} + +uint64_t get_time_us() { + struct timeval tv; + gettimeofday(&tv, NULL); + return tv.tv_sec * 1000000 + tv.tv_usec; +} + +#if defined(__AVX2__) +// horizontally reduce 8 32-bit integers +static inline uint32_t _mm256_hadd_epi32_gg(__m256i v) { + __m128i v0 = _mm256_extractf128_si256(v, 0); + __m128i v1 = _mm256_extractf128_si256(v, 1); + + v0 = _mm_add_epi32(v0, v1); + + v1 = _mm_shuffle_epi32(v0, 0x0e); + v0 = _mm_add_epi32(v0, v1); + + v1 = _mm_shuffle_epi32(v0, 0x01); + v0 = _mm_add_epi32(v0, v1); + + return _mm_cvtsi128_si32(v0); +} + +//static inline float _mm256_hadd_epi32_gg(__m256i v) { +// const __m256 v0 = _mm256_cvtepi32_ps(v); +// const __m128 t0 = _mm_add_ps(_mm256_castps256_ps128(v0), _mm256_extractf128_ps(v0, 1)); +// const __m128 t1 = _mm_hadd_ps(t0, t0); +// +// return _mm_cvtss_f32(_mm_hadd_ps(t1, t1)); +//} + +// horizontally reduce 32 8-bit integers +static inline int32_t _mm256_hadd_epi8_gg(__m256i v0) { + __m256i v1 = _mm256_maddubs_epi16(v0, _mm256_set1_epi8(1)); + __m256i v2 = _mm256_madd_epi16 (v1, _mm256_set1_epi16(1)); + + return _mm256_hadd_epi32_gg(v2); +} + +static inline float _mm256_hadd_ps_gg(__m256 v) { + const __m128 t0 = _mm_add_ps(_mm256_castps256_ps128(v), _mm256_extractf128_ps(v, 1)); + const __m128 t1 = _mm_hadd_ps(t0, t0); + + return _mm_cvtss_f32(_mm_hadd_ps(t1, t1)); +} +#endif + +// +// naive implementation +// + +void mul_mat_f32_naive( + const float * restrict src0, // M x K + const float * restrict src1, // N x K (transposed) + float * dst, + int m, int n, int k) { + for (int i = 0; i < m; i++) { + for (int j = 0; j < n; j++) { + float sum = 0; + for (int l = 0; l < k; l++) { + sum += src0[i*k + l] * src1[j*k + l]; + } + dst[i*n + j] = sum; + } + } +} + +// +// method 1 +// + +static inline int quantize_1_blocks_per_row(int k) { + return k/QK; +} + +static inline int quantize_1_quants_per_block() { + return QK/gq_t_bits; +} + +static inline int quantize_1_row_size(int k) { + const int nb = quantize_1_blocks_per_row(k); + const int nq = quantize_1_quants_per_block(); + + return nb*(2*sizeof(gq_scale_t) + nq*QB*sizeof(gq_quant_t)); +} + +void quantize_1(const float * src, void * dst, int n, int k) { + char * p0 = dst; + + gq_quant_t pp[QB]; + + for (int j = 0; j < n; j++) { + for (int i = 0; i < k/QK; i++) { + float min = FLT_MAX; + float max = -FLT_MAX; + + // find min/max +#ifdef __ARM_NEON + { + float32x4_t minv = vdupq_n_f32(FLT_MAX); + float32x4_t maxv = vdupq_n_f32(-FLT_MAX); + + for (int l = 0; l < QK; l += 4) { + float32x4_t v = vld1q_f32(src + j*k + i*QK + l); + minv = vminq_f32(minv, v); + maxv = vmaxq_f32(maxv, v); + } + + float32x2_t minv32 = vpmin_f32(vget_low_f32(minv), vget_high_f32(minv)); + float32x2_t maxv32 = vpmax_f32(vget_low_f32(maxv), vget_high_f32(maxv)); + + min = MIN(vget_lane_f32(minv32, 0), vget_lane_f32(minv32, 1)); + max = MAX(vget_lane_f32(maxv32, 0), vget_lane_f32(maxv32, 1)); + + //printf("SIMD min/max: %f %f\n", min, max); + } +#else + { + for (int l = 0; l < QK; l++) { + const float v = src[j*k + i*QK + l]; + if (v < min) min = v; + if (v > max) max = v; + } + + //printf("NORM min/max: %f %f\n", min, max); + } +#endif + + const float d = (max - min) / ((1 << QB) - 1); + const float id = d ? 1.0/d : 0.0; + + memcpy(p0, &min, sizeof(float)); p0 += sizeof(float); + memcpy(p0, &d, sizeof(float)); p0 += sizeof(float); + + //printf("min/max/d/id: %f %f %f %f\n", min, max, d, id); + + for (int s = 0; s < QK/gq_t_bits; ++s) { + memset(pp, 0, sizeof(pp)); + + for (int l = 0; l < gq_t_bits; l++) { + const float v = src[j*k + i*QK + s*gq_t_bits + l]; + const uint8_t q = (v - min)*id; + + for (int b = 0; b < QB; b++) { + pp[b] |= q & (1 << b) ? (1ULL << l) : 0; + } + } + + for (int b = 0; b < QB; b++) { + memcpy(p0, &pp[b], sizeof(gq_quant_t)); p0 += sizeof(gq_quant_t); + } + } + } + } +} + +void mul_mat_gq_1( + const void * src0, + const void * src1, + float * dst, + int m, int n, int k) { + const int kp = k & ~(gq_t_bits - 1); + + const char * restrict p0 = src0; + const char * restrict p1 = src1; + + float s0[QB + 1]; + float s1[QB + 1]; + + gq_quant_t m0[QB + 1]; + gq_quant_t m1[QB + 1]; + + for (int ir0 = 0; ir0 < m; ir0++) { + for (int ir1 = 0; ir1 < n; ir1++) { + float sumf = 0.0; + + const char * restrict pp0 = p0 + ir0*((2*sizeof(float) + (QK/gq_t_bits)*QB*sizeof(gq_quant_t))*(k/QK)); + const char * restrict pp1 = p1 + ir1*((2*sizeof(float) + (QK/gq_t_bits)*QB*sizeof(gq_quant_t))*(k/QK)); + + for (int i = 0; i < kp/QK; i++) { + float min0, d0; + memcpy(&min0, pp0, sizeof(float)); pp0 += sizeof(float); + memcpy(&d0, pp0, sizeof(float)); pp0 += sizeof(float); + + float min1, d1; + memcpy(&min1, pp1, sizeof(float)); pp1 += sizeof(float); + memcpy(&d1, pp1, sizeof(float)); pp1 += sizeof(float); + + //printf("min0/d0 = %f %f | min1/d1 = %f %f\n", min0, d0, min1, d1); + +#if 1 + // >>> General case for any QB + + s0[0] = min0; + s1[0] = min1; + + for (int b = 0; b < QB; b++) { + s0[b + 1] = d0*(1 << b); + s1[b + 1] = d1*(1 << b); + } + + m0[0] = -1ULL; + m1[0] = -1ULL; + + for (int s = 0; s < QK/gq_t_bits; ++s) { + for (int b = 0; b < QB; b++) { + memcpy(&m0[b + 1], pp0, sizeof(gq_quant_t)); pp0 += sizeof(gq_quant_t); + memcpy(&m1[b + 1], pp1, sizeof(gq_quant_t)); pp1 += sizeof(gq_quant_t); + } + + for (int q0 = 0; q0 < QB + 1; q0++) { + for (int q1 = 0; q1 < QB + 1; q1++) { + sumf += s0[q0]*s1[q1]*__builtin_popcountll(m0[q0] & m1[q1]); + } + } + } +#else +#endif + } + + dst[ir0*n + ir1] = sumf; + } + } +} + +// +// method 2 +// n-bit quantization (2nd attempt) +// + +static inline int quantize_2_blocks_per_row(int k) { + return k/QK; +} + +static inline int quantize_2_quants_per_block() { + return QK/gq_t_bits; +} + +static inline int quantize_2_row_size(int k) { + const int nb = quantize_2_blocks_per_row(k); + const int nq = quantize_2_quants_per_block(); + + return nb*(2*sizeof(gq_scale_t) + nq*QB*sizeof(gq_quant_t)); +} + +void quantize_2_row(const float * restrict src, void * restrict dst, int k) { + assert(k % QK == 0); + + const int nb = quantize_2_blocks_per_row(k); + const int nq = quantize_2_quants_per_block(); + + gq_scale_t * restrict pm = (gq_scale_t *) (dst); + gq_scale_t * restrict pd = (gq_scale_t *) (pm + nb); + gq_quant_t * restrict pb = (gq_quant_t *) (pd + nb); + + gq_quant_t pp[QB]; + + static const int32_t sh[32] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + }; + + for (int i = 0; i < nb; i++) { + float min = FLT_MAX; + float max = -FLT_MAX; + +#ifdef __ARM_NEON + { + float32x4_t minv = vdupq_n_f32(FLT_MAX); + float32x4_t maxv = vdupq_n_f32(-FLT_MAX); + + for (int l = 0; l < QK; l += 4) { + float32x4_t v = vld1q_f32(src + i*QK + l); + minv = vminq_f32(minv, v); + maxv = vmaxq_f32(maxv, v); + } + + float32x2_t minv32 = vpmin_f32(vget_low_f32(minv), vget_high_f32(minv)); + float32x2_t maxv32 = vpmax_f32(vget_low_f32(maxv), vget_high_f32(maxv)); + + min = MIN(vget_lane_f32(minv32, 0), vget_lane_f32(minv32, 1)); + max = MAX(vget_lane_f32(maxv32, 0), vget_lane_f32(maxv32, 1)); + } +#else + { + for (int l = 0; l < QK; l++) { + const float v = src[i*QK + l]; + if (v < min) min = v; + if (v > max) max = v; + } + } +#endif + + const float d = (max - min) / ((1 << QB) - 1); + const float id = d ? 1.0/d : 0.0; + + pm[i] = GGML_FP32_TO_GQ(min); + pd[i] = GGML_FP32_TO_GQ(d); + + for (int s = 0; s < nq; ++s) { + memset(pp, 0, sizeof(pp)); + +#if 1 + for (int l = 0; l < gq_t_bits; l++) { + const float v = src[i*QK + s*gq_t_bits + l]; + const uint8_t q = (v - min)*id + frand(); + + for (int b = 0; b < QB; b++) { + pp[b] |= q & (1 << b) ? (1ULL << l) : 0; + } + } +#elif defined(__ARM_NEON) +#if 1 + { + uint32_t ppt[2*4*QB]; + + float32x4_t minv = vdupq_n_f32(min); + float32x4_t idv = vdupq_n_f32(id); + + assert(gq_t_bits % 16 == 0); + + uint32x4_t p0[QB] = { vdupq_n_u32(0) }; + uint32x4_t p1[QB] = { vdupq_n_u32(0) }; + + for (int l = 0; l < gq_t_bits; l += 16) { + float32x4_t v0 = vld1q_f32(src + i*QK + s*gq_t_bits + l + 0); + float32x4_t v1 = vld1q_f32(src + i*QK + s*gq_t_bits + l + 4); + float32x4_t v2 = vld1q_f32(src + i*QK + s*gq_t_bits + l + 8); + float32x4_t v3 = vld1q_f32(src + i*QK + s*gq_t_bits + l + 12); + + v0 = vsubq_f32(v0, minv); + v1 = vsubq_f32(v1, minv); + v2 = vsubq_f32(v2, minv); + v3 = vsubq_f32(v3, minv); + + v0 = vmulq_f32(v0, idv); + v1 = vmulq_f32(v1, idv); + v2 = vmulq_f32(v2, idv); + v3 = vmulq_f32(v3, idv); + +#if 1 + v0[0] += frand(); v0[1] += frand(); v0[2] += frand(); v0[3] += frand(); + v1[0] += frand(); v1[1] += frand(); v1[2] += frand(); v1[3] += frand(); + v2[0] += frand(); v2[1] += frand(); v2[2] += frand(); v2[3] += frand(); + v3[0] += frand(); v3[1] += frand(); v3[2] += frand(); v3[3] += frand(); +#endif + + uint32x4_t q0 = vcvtq_u32_f32(v0); + uint32x4_t q1 = vcvtq_u32_f32(v1); + uint32x4_t q2 = vcvtq_u32_f32(v2); + uint32x4_t q3 = vcvtq_u32_f32(v3); + + for (int b = 0; b < QB; ++b) { + uint32x4_t m = vdupq_n_u32(1 << b); + uint32x4_t r = vdupq_n_u32(-b); + + if (l < 32) { + p0[b] = vorrq_u32(p0[b], vshlq_u32(vshlq_u32(vandq_u32(q0, m), r), vld1q_s32(sh + l + 0))); + p0[b] = vorrq_u32(p0[b], vshlq_u32(vshlq_u32(vandq_u32(q1, m), r), vld1q_s32(sh + l + 4))); + p0[b] = vorrq_u32(p0[b], vshlq_u32(vshlq_u32(vandq_u32(q2, m), r), vld1q_s32(sh + l + 8))); + p0[b] = vorrq_u32(p0[b], vshlq_u32(vshlq_u32(vandq_u32(q3, m), r), vld1q_s32(sh + l + 12))); + } else { + p1[b] = vorrq_u32(p1[b], vshlq_u32(vshlq_u32(vandq_u32(q0, m), r), vld1q_s32(sh + l - 32))); + p1[b] = vorrq_u32(p1[b], vshlq_u32(vshlq_u32(vandq_u32(q1, m), r), vld1q_s32(sh + l - 28))); + p1[b] = vorrq_u32(p1[b], vshlq_u32(vshlq_u32(vandq_u32(q2, m), r), vld1q_s32(sh + l - 24))); + p1[b] = vorrq_u32(p1[b], vshlq_u32(vshlq_u32(vandq_u32(q3, m), r), vld1q_s32(sh + l - 20))); + } + } + } + +#if QB == 4 + vst1q_u32((uint32_t *) ppt + 0, p0[0]); + vst1q_u32((uint32_t *) ppt + 4, p1[0]); + vst1q_u32((uint32_t *) ppt + 8, p0[1]); + vst1q_u32((uint32_t *) ppt + 12, p1[1]); + vst1q_u32((uint32_t *) ppt + 16, p0[2]); + vst1q_u32((uint32_t *) ppt + 20, p1[2]); + vst1q_u32((uint32_t *) ppt + 24, p0[3]); + vst1q_u32((uint32_t *) ppt + 28, p1[3]); + + pp[0] = (ppt[0] | ppt[1] | ppt[2] | ppt[3] ) | ((uint64_t) (ppt[4] | ppt[5] | ppt[6] | ppt[7]) ) << 32; + pp[1] = (ppt[8] | ppt[9] | ppt[10] | ppt[11]) | ((uint64_t) (ppt[12] | ppt[13] | ppt[14] | ppt[15])) << 32; + pp[2] = (ppt[16] | ppt[17] | ppt[18] | ppt[19]) | ((uint64_t) (ppt[20] | ppt[21] | ppt[22] | ppt[23])) << 32; + pp[3] = (ppt[24] | ppt[25] | ppt[26] | ppt[27]) | ((uint64_t) (ppt[28] | ppt[29] | ppt[30] | ppt[31])) << 32; +#else + for (int b = 0; b < QB; ++b) { + vst1q_u32((uint32_t *) ppt + 0, p0[b]); + vst1q_u32((uint32_t *) ppt + 4, p1[b]); + + pp[b] = (ppt[0] | ppt[1] | ppt[2] | ppt[3]) | ((uint64_t) (ppt[4] | ppt[5] | ppt[6] | ppt[7])) << 32; + } +#endif + } +#else + // less optimal SIMD + { + float32x4_t minv = vdupq_n_f32(min); + float32x4_t idv = vdupq_n_f32(id); + + assert(gq_t_bits == 64); + uint8_t qq[gq_t_bits]; + + for (int l = 0; l < gq_t_bits; l += 16) { + float32x4_t v0 = vld1q_f32(src + i*QK + s*gq_t_bits + l + 0); + float32x4_t v1 = vld1q_f32(src + i*QK + s*gq_t_bits + l + 4); + float32x4_t v2 = vld1q_f32(src + i*QK + s*gq_t_bits + l + 8); + float32x4_t v3 = vld1q_f32(src + i*QK + s*gq_t_bits + l + 12); + + v0 = vsubq_f32(v0, minv); + v1 = vsubq_f32(v1, minv); + v2 = vsubq_f32(v2, minv); + v3 = vsubq_f32(v3, minv); + + v0 = vmulq_f32(v0, idv); + v1 = vmulq_f32(v1, idv); + v2 = vmulq_f32(v2, idv); + v3 = vmulq_f32(v3, idv); + +#if 0 + v0[0] += frand(); v0[1] += frand(); v0[2] += frand(); v0[3] += frand(); + v1[0] += frand(); v1[1] += frand(); v1[2] += frand(); v1[3] += frand(); + v2[0] += frand(); v2[1] += frand(); v2[2] += frand(); v2[3] += frand(); + v3[0] += frand(); v3[1] += frand(); v3[2] += frand(); v3[3] += frand(); +#endif + + uint32x4_t q0 = vcvtq_u32_f32(v0); + uint32x4_t q1 = vcvtq_u32_f32(v1); + uint32x4_t q2 = vcvtq_u32_f32(v2); + uint32x4_t q3 = vcvtq_u32_f32(v3); + + // store in qq as uint8_t + vst1_u8(qq + l + 0, vmovn_u16(vcombine_u16(vmovn_u32(q0), vmovn_u32(q1)))); + vst1_u8(qq + l + 8, vmovn_u16(vcombine_u16(vmovn_u32(q2), vmovn_u32(q3)))); + } + + for (int l = 0; l < gq_t_bits; l++) { + for (int b = 0; b < QB; b++) { + const uint64_t ql = qq[l]; + /*pp[b] |= qq[l] & (1 << b) ? (1ULL << l) : 0;*/ + pp[b] |= ((ql & (1 << b)) >> b) << l; + } + } + } +#endif +#endif + memcpy(pb + i*nq*QB + s*QB, pp, sizeof(pp)); + } + } +} + +// reimplementation of quantize_2 using quantize_2_row +void quantize_2(const float * restrict src, char * restrict dst, int n, int k) { + assert(k % QK == 0); + + for (int j = 0; j < n; j++) { + quantize_2_row(src + j*k, dst, k); + dst = (char *) dst + quantize_2_row_size(k); + } +} + +void vec_dot_gq_2(const int n, float * restrict s, const void * restrict x, const void * restrict y) { + const int nb = quantize_2_blocks_per_row(n); + const int nq = quantize_2_quants_per_block(); + + const gq_scale_t * restrict pm0 = (const gq_scale_t *) x; + const gq_scale_t * restrict pm1 = (const gq_scale_t *) y; + + const gq_scale_t * restrict pd0 = pm0 + nb; + const gq_scale_t * restrict pd1 = pm1 + nb; + + const gq_quant_t * restrict pb0 = (const gq_quant_t *) (pd0 + nb); + const gq_quant_t * restrict pb1 = (const gq_quant_t *) (pd1 + nb); + + float sumf = 0.0; + +#if 1 + for (int i = 0; i < nb; i++) { + const float m0 = GGML_GQ_TO_FP32(pm0[i]); + const float d0 = GGML_GQ_TO_FP32(pd0[i]); + + const float m1 = GGML_GQ_TO_FP32(pm1[i]); + const float d1 = GGML_GQ_TO_FP32(pd1[i]); + +#if QB == 4 + int isum01 = 0; + int isum10 = 0; + int isum11 = 0; + + for (int s = 0; s < nq; ++s) { + const gq_quant_t * restrict mm0 = pb0 + i*nq*QB + s*QB; + const gq_quant_t * restrict mm1 = pb1 + i*nq*QB + s*QB; + +#define bpcnt(x) __builtin_popcountll(x) + isum01 += (1 << 0)*(bpcnt(mm1[0])); + isum01 += (1 << 1)*(bpcnt(mm1[1])); + isum01 += (1 << 2)*(bpcnt(mm1[2])); + isum01 += (1 << 3)*(bpcnt(mm1[3])); + + isum10 += (1 << 0)*(bpcnt(mm0[0])); + isum10 += (1 << 1)*(bpcnt(mm0[1])); + isum10 += (1 << 2)*(bpcnt(mm0[2])); + isum10 += (1 << 3)*(bpcnt(mm0[3])); + + isum11 += (1 << 0)*(bpcnt(mm0[0] & mm1[0])); + isum11 += (1 << 1)*(bpcnt(mm0[0] & mm1[1]) + bpcnt(mm0[1] & mm1[0])); + isum11 += (1 << 2)*(bpcnt(mm0[0] & mm1[2]) + bpcnt(mm0[1] & mm1[1]) + bpcnt(mm0[2] & mm1[0])); + isum11 += (1 << 3)*(bpcnt(mm0[0] & mm1[3]) + bpcnt(mm0[1] & mm1[2]) + bpcnt(mm0[2] & mm1[1]) + bpcnt(mm0[3] & mm1[0])); + isum11 += (1 << 4)*(bpcnt(mm0[1] & mm1[3]) + bpcnt(mm0[2] & mm1[2]) + bpcnt(mm0[3] & mm1[1])); + isum11 += (1 << 5)*(bpcnt(mm0[2] & mm1[3]) + bpcnt(mm0[3] & mm1[2])); + isum11 += (1 << 6)*(bpcnt(mm0[3] & mm1[3])); +#undef bpcnt + } + + sumf += nq*gq_t_bits*(m0*m1) + isum01*(m0*d1) + isum10*(m1*d0) + isum11*(d0*d1); +#elif QB == 3 + int isum01 = 0; + int isum10 = 0; + int isum11 = 0; + + for (int s = 0; s < nq; ++s) { + const gq_quant_t * restrict mm0 = pb0 + i*nq*QB + s*QB; + const gq_quant_t * restrict mm1 = pb1 + i*nq*QB + s*QB; + +#if gq_t_bits == 32 +#define bpcnt(x) __builtin_popcount(x) +#else +#define bpcnt(x) __builtin_popcountll(x) +#endif + isum01 += (1 << 0)*(bpcnt(mm1[0])); + isum01 += (1 << 1)*(bpcnt(mm1[1])); + isum01 += (1 << 2)*(bpcnt(mm1[2])); + + isum10 += (1 << 0)*(bpcnt(mm0[0])); + isum10 += (1 << 1)*(bpcnt(mm0[1])); + isum10 += (1 << 2)*(bpcnt(mm0[2])); + + isum11 += (1 << 0)*(bpcnt(mm0[0] & mm1[0])); + isum11 += (1 << 1)*(bpcnt(mm0[0] & mm1[1]) + bpcnt(mm0[1] & mm1[0])); + isum11 += (1 << 2)*(bpcnt(mm0[0] & mm1[2]) + bpcnt(mm0[1] & mm1[1]) + bpcnt(mm0[2] & mm1[0])); + isum11 += (1 << 3)*(bpcnt(mm0[1] & mm1[2]) + bpcnt(mm0[2] & mm1[1])); + isum11 += (1 << 4)*(bpcnt(mm0[2] & mm1[2])); +#undef bpcnt + } + + sumf += nq*gq_t_bits*(m0*m1) + isum01*(m0*d1) + isum10*(m1*d0) + isum11*(d0*d1); +#elif QB == 2 + int isum01 = 0; + int isum10 = 0; + int isum11 = 0; + + for (int s = 0; s < nq; ++s) { + const gq_quant_t * restrict mm0 = pb0 + i*nq*QB + s*QB; + const gq_quant_t * restrict mm1 = pb1 + i*nq*QB + s*QB; + +#if gq_t_bits == 32 +#define bpcnt(x) __builtin_popcount(x) +#else +#define bpcnt(x) __builtin_popcountll(x) +#endif + isum01 += (1 << 0)*(bpcnt(mm1[0])); + isum01 += (1 << 1)*(bpcnt(mm1[1])); + + isum10 += (1 << 0)*(bpcnt(mm0[0])); + isum10 += (1 << 1)*(bpcnt(mm0[1])); + + isum11 += (1 << 0)*(bpcnt(mm0[0] & mm1[0])); + isum11 += (1 << 1)*(bpcnt(mm0[0] & mm1[1]) + bpcnt(mm0[1] & mm1[0])); + isum11 += (1 << 2)*(bpcnt(mm0[1] & mm1[1])); +#undef bpcnt + } + + sumf += nq*gq_t_bits*(m0*m1) + isum01*(m0*d1) + isum10*(m1*d0) + isum11*(d0*d1); +#else + float s0[QB + 1]; + float s1[QB + 1]; + + s0[0] = m0; + s1[0] = m1; + + for (int b = 0; b < QB; b++) { + s0[b + 1] = d0*(1 << b); + s1[b + 1] = d1*(1 << b); + } + + for (int s = 0; s < nq; ++s) { + for (int q0 = 0; q0 < QB + 1; q0++) { + const gq_quant_t mm0 = q0 ? pb0[i*nq*QB + s*QB + q0 - 1] : -1ULL; + for (int q1 = 0; q1 < QB + 1; q1++) { + const gq_quant_t mm1 = q1 ? pb1[i*nq*QB + s*QB + q1 - 1] : -1ULL; + sumf += s0[q0]*s1[q1]*__builtin_popcountll(mm0 & mm1); + } + } + } +#endif + } +#else +#error "not implemented" +#endif + + *s = sumf; +} + +// use vec_dot_gq_2 to compute the dot product of two rows +void mul_mat_gq_2( + const void * src0, + const void * src1, // transposed + float * dst, + int m, int n, int k) { + assert(k % QK == 0); + + const int nb = quantize_2_blocks_per_row(k); + const int nq = quantize_2_quants_per_block(); + + for (int ir0 = 0; ir0 < m; ir0++) { + for (int ir1 = 0; ir1 < n; ir1++) { + vec_dot_gq_2(k, dst + ir1, src0, src1); + src1 = (const char *) src1 + quantize_2_row_size(k); + } + src0 = (const char *) src0 + quantize_2_row_size(k); + src1 = (const char *) src1 - n*quantize_2_row_size(k); + + dst = (float *) dst + n; + } +} + +// +// method 3 +// (does not work) +// + +static inline int quantize_3_blocks_per_row(int k) { + return k/QK; +} + +static inline int quantize_3_quants_per_block() { + return QK/gq_t_bits; +} + +static inline int quantize_3_row_size(int k) { + const int nb = quantize_3_blocks_per_row(k); + const int nq = quantize_3_quants_per_block(); + + return nb*(sizeof(gq_scale_t) + nq*QB*sizeof(gq_quant_t)); +} + +void quantize_3_row(const float * restrict src, void * restrict dst, int k) { + assert(k % QK == 0); + + const int nb = quantize_3_blocks_per_row(k); + const int nq = quantize_3_quants_per_block(); + + gq_scale_t * restrict pd = (gq_scale_t *) (dst); + gq_quant_t * restrict pb = (gq_quant_t *) (pd + nb); + + gq_quant_t pp[QB]; + + static const int32_t sh[32] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + }; + + for (int i = 0; i < nb; i++) { + float amax = 0.0f; // abs max + +#ifdef __ARM_NEON + { + // min / max + //float32x4_t minv = vdupq_n_f32(FLT_MAX); + //float32x4_t maxv = vdupq_n_f32(-FLT_MAX); + + //for (int l = 0; l < QK; l += 4) { + // float32x4_t v = vld1q_f32(src + i*QK + l); + // minv = vminq_f32(minv, v); + // maxv = vmaxq_f32(maxv, v); + //} + + //float32x2_t minv32 = vpmin_f32(vget_low_f32(minv), vget_high_f32(minv)); + //float32x2_t maxv32 = vpmax_f32(vget_low_f32(maxv), vget_high_f32(maxv)); + + //min = MIN(vget_lane_f32(minv32, 0), vget_lane_f32(minv32, 1)); + //max = MAX(vget_lane_f32(maxv32, 0), vget_lane_f32(maxv32, 1)); + + // abs max + float32x4_t amaxv = vdupq_n_f32(0.0f); + + for (int l = 0; l < QK; l += 4) { + float32x4_t v = vld1q_f32(src + i*QK + l); + amaxv = vmaxq_f32(amaxv, vabsq_f32(v)); + } + + float32x2_t amaxv32 = vpmax_f32(vget_low_f32(amaxv), vget_high_f32(amaxv)); + + amax = MAX(vget_lane_f32(amaxv32, 0), vget_lane_f32(amaxv32, 1)); + } +#else + { + for (int l = 0; l < QK; l++) { + const float v = src[i*QK + l]; + amax = MAX(amax, fabsf(v)); + } + } +#endif + + const float d = amax / ((1 << (QB - 1)) - 1); + const float id = d ? 1.0/d : 0.0; + + pd[i] = GGML_FP32_TO_GQ(d); + + for (int s = 0; s < nq; ++s) { + memset(pp, 0, sizeof(pp)); + +#if 0 + for (int l = 0; l < gq_t_bits; l++) { + const float v = src[i*QK + s*gq_t_bits + l]; + const uint8_t q = v*id + frand(); + + for (int b = 0; b < QB; b++) { + pp[b] |= q & (1 << b) ? (1ULL << l) : 0; + } + } +#elif defined(__ARM_NEON) + { + uint32_t ppt[2*4*QB]; + + float32x4_t idv = vdupq_n_f32(id); + + assert(gq_t_bits == 64); + + uint32x4_t p0[QB] = { vdupq_n_u32(0) }; + uint32x4_t p1[QB] = { vdupq_n_u32(0) }; + + for (int l = 0; l < gq_t_bits; l += 16) { + float32x4_t v0 = vld1q_f32(src + i*QK + s*gq_t_bits + l + 0); + float32x4_t v1 = vld1q_f32(src + i*QK + s*gq_t_bits + l + 4); + float32x4_t v2 = vld1q_f32(src + i*QK + s*gq_t_bits + l + 8); + float32x4_t v3 = vld1q_f32(src + i*QK + s*gq_t_bits + l + 12); + + v0 = vmulq_f32(v0, idv); + v1 = vmulq_f32(v1, idv); + v2 = vmulq_f32(v2, idv); + v3 = vmulq_f32(v3, idv); + +#if 1 + v0[0] += frand(); v0[1] += frand(); v0[2] += frand(); v0[3] += frand(); + v1[0] += frand(); v1[1] += frand(); v1[2] += frand(); v1[3] += frand(); + v2[0] += frand(); v2[1] += frand(); v2[2] += frand(); v2[3] += frand(); + v3[0] += frand(); v3[1] += frand(); v3[2] += frand(); v3[3] += frand(); +#endif + + uint32x4_t q0 = vcvtq_u32_f32(v0); + uint32x4_t q1 = vcvtq_u32_f32(v1); + uint32x4_t q2 = vcvtq_u32_f32(v2); + uint32x4_t q3 = vcvtq_u32_f32(v3); + + for (int b = 0; b < QB; ++b) { + uint32x4_t m = vdupq_n_u32(1 << b); + int32x4_t r = vdupq_n_s32(-b); + + if (l < 32) { + p0[b] = vorrq_u32(p0[b], vshlq_u32(vshlq_u32(vandq_u32(q0, m), r), vld1q_s32(sh + l + 0))); + p0[b] = vorrq_u32(p0[b], vshlq_u32(vshlq_u32(vandq_u32(q1, m), r), vld1q_s32(sh + l + 4))); + p0[b] = vorrq_u32(p0[b], vshlq_u32(vshlq_u32(vandq_u32(q2, m), r), vld1q_s32(sh + l + 8))); + p0[b] = vorrq_u32(p0[b], vshlq_u32(vshlq_u32(vandq_u32(q3, m), r), vld1q_s32(sh + l + 12))); + } else { + p1[b] = vorrq_u32(p1[b], vshlq_u32(vshlq_u32(vandq_u32(q0, m), r), vld1q_s32(sh + l - 32))); + p1[b] = vorrq_u32(p1[b], vshlq_u32(vshlq_u32(vandq_u32(q1, m), r), vld1q_s32(sh + l - 28))); + p1[b] = vorrq_u32(p1[b], vshlq_u32(vshlq_u32(vandq_u32(q2, m), r), vld1q_s32(sh + l - 24))); + p1[b] = vorrq_u32(p1[b], vshlq_u32(vshlq_u32(vandq_u32(q3, m), r), vld1q_s32(sh + l - 20))); + } + } + } + +#if QB == 4 + vst1q_u32((uint32_t *) ppt + 0, p0[0]); + vst1q_u32((uint32_t *) ppt + 4, p1[0]); + vst1q_u32((uint32_t *) ppt + 8, p0[1]); + vst1q_u32((uint32_t *) ppt + 12, p1[1]); + vst1q_u32((uint32_t *) ppt + 16, p0[2]); + vst1q_u32((uint32_t *) ppt + 20, p1[2]); + vst1q_u32((uint32_t *) ppt + 24, p0[3]); + vst1q_u32((uint32_t *) ppt + 28, p1[3]); + + pp[0] = (ppt[0] | ppt[1] | ppt[2] | ppt[3] ) | ((uint64_t) (ppt[4] | ppt[5] | ppt[6] | ppt[7]) ) << 32; + pp[1] = (ppt[8] | ppt[9] | ppt[10] | ppt[11]) | ((uint64_t) (ppt[12] | ppt[13] | ppt[14] | ppt[15])) << 32; + pp[2] = (ppt[16] | ppt[17] | ppt[18] | ppt[19]) | ((uint64_t) (ppt[20] | ppt[21] | ppt[22] | ppt[23])) << 32; + pp[3] = (ppt[24] | ppt[25] | ppt[26] | ppt[27]) | ((uint64_t) (ppt[28] | ppt[29] | ppt[30] | ppt[31])) << 32; +#else + for (int q = 0; q < QB; ++q) { + vst1q_u32((uint32_t *) ppt + 0, p0[q]); + vst1q_u32((uint32_t *) ppt + 4, p1[q]); + + pp[q] = (ppt[0] | ppt[1] | ppt[2] | ppt[3]) | ((uint64_t) (ppt[4] | ppt[5] | ppt[6] | ppt[7])) << 32; + } +#endif + } +#endif + memcpy(pb + i*nq*QB + s*QB, pp, sizeof(pp)); + } + } +} + +// reimplementation of quantize_3 using quantize_3_row +void quantize_3(const float * restrict src, char * restrict dst, int n, int k) { + assert(k % QK == 0); + + for (int j = 0; j < n; j++) { + quantize_3_row(src + j*k, dst, k); + dst = (char *) dst + quantize_3_row_size(k); + } +} + +void vec_dot_gq_3(const int n, float * restrict s, const void * restrict x, const void * restrict y) { + float sumf = 0.0f; + + const int nb = quantize_3_blocks_per_row(n); + const int nq = quantize_3_quants_per_block(); + + const gq_scale_t * restrict pd0 = (const gq_scale_t *) x; + const gq_scale_t * restrict pd1 = (const gq_scale_t *) y; + + const gq_quant_t * restrict pb0 = (const gq_quant_t *) (pd0 + nb); + const gq_quant_t * restrict pb1 = (const gq_quant_t *) (pd1 + nb); + +#if 1 + for (int i = 0; i < nb; i++) { + int isum = 0; + +#if QB == 4 + for (int s = 0; s < nq; ++s) { + const gq_quant_t * restrict m0 = pb0 + i*nq*QB + s*QB; + const gq_quant_t * restrict m1 = pb1 + i*nq*QB + s*QB; + + isum += (1 << 0)*(__builtin_popcountll(m0[0] & m1[0])); + isum += (1 << 1)*(__builtin_popcountll(m0[0] & m1[1]) + __builtin_popcountll(m0[1] & m1[0])); + isum += (1 << 2)*(__builtin_popcountll(m0[0] & m1[2]) + __builtin_popcountll(m0[1] & m1[1]) + __builtin_popcountll(m0[2] & m1[0])); + isum += (1 << 3)*(__builtin_popcountll(m0[0] & m1[3]) + __builtin_popcountll(m0[1] & m1[2]) + __builtin_popcountll(m0[2] & m1[1]) + __builtin_popcountll(m0[3] & m1[0])); + isum += (1 << 4)*(__builtin_popcountll(m0[1] & m1[3]) + __builtin_popcountll(m0[2] & m1[2]) + __builtin_popcountll(m0[3] & m1[1])); + isum += (1 << 5)*(__builtin_popcountll(m0[2] & m1[3]) + __builtin_popcountll(m0[3] & m1[2])); + isum += (1 << 6)*(__builtin_popcountll(m0[3] & m1[3])); + } +#else + for (int s = 0; s < nq; ++s) { + for (int q0 = 0; q0 < QB; q0++) { + const gq_quant_t mm0 = pb0[i*nq*QB + s*QB + q0]; + for (int q1 = 0; q1 < QB; q1++) { + const gq_quant_t mm1 = pb1[i*nq*QB + s*QB + q1]; + isum += (1 << (q0 + q1))*(__builtin_popcountll(mm0 & mm1)); + } + } + } +#endif + + const float d0 = GGML_GQ_TO_FP32(pd0[i]); + const float d1 = GGML_GQ_TO_FP32(pd1[i]); + + sumf += d0*d1*isum; + } +#else +#ifdef __ARM_NEON + // gq_quant_t == uint64_t + for (int i = 0; i < nb; i += 4) { + int isum[4] = {0, 0, 0, 0}; + + for (int k = 0; k < 4; ++k) { + for (int s = 0; s < nq; ++s) { + const gq_quant_t * restrict m0 = pb0 + (i+k)*nq*QB + s*QB; + const gq_quant_t * restrict m1 = pb1 + (i+k)*nq*QB + s*QB; + +#if QB == 4 +#define bpcnt(x) __builtin_popcountll(x) + //isum[k] += (1ULL << 0)*(bpcnt(m0[0] & m1[0])) + + // (1ULL << 1)*(bpcnt(m0[0] & m1[1]) + bpcnt(m0[1] & m1[0])) + + // (1ULL << 2)*(bpcnt(m0[0] & m1[2]) + bpcnt(m0[1] & m1[1]) + bpcnt(m0[2] & m1[0])) + + // (1ULL << 3)*(bpcnt(m0[0] & m1[3]) + bpcnt(m0[1] & m1[2]) + bpcnt(m0[2] & m1[1]) + bpcnt(m0[3] & m1[0])) + + // (1ULL << 4)*(bpcnt(m0[1] & m1[3]) + bpcnt(m0[2] & m1[2]) + bpcnt(m0[3] & m1[1])) + + // (1ULL << 5)*(bpcnt(m0[2] & m1[3]) + bpcnt(m0[3] & m1[2])) + + // (1ULL << 6)*(bpcnt(m0[3] & m1[3])); +#undef bpcnt + + const uint8x8_t m00 = vld1_u8((const uint8_t *) (m0 + 0)); + const uint8x8_t m01 = vld1_u8((const uint8_t *) (m0 + 1)); + const uint8x8_t m02 = vld1_u8((const uint8_t *) (m0 + 2)); + const uint8x8_t m03 = vld1_u8((const uint8_t *) (m0 + 3)); + + const uint8x8_t m10 = vld1_u8((const uint8_t *) (m1 + 0)); + const uint8x8_t m11 = vld1_u8((const uint8_t *) (m1 + 1)); + const uint8x8_t m12 = vld1_u8((const uint8_t *) (m1 + 2)); + const uint8x8_t m13 = vld1_u8((const uint8_t *) (m1 + 3)); + + const uint8x8_t m00m10 = vand_u8(m00, m10); + + const uint8x8_t m00m11 = vand_u8(m00, m11); + const uint8x8_t m01m10 = vand_u8(m01, m10); + + const uint8x8_t m00m12 = vand_u8(m00, m12); + const uint8x8_t m01m11 = vand_u8(m01, m11); + const uint8x8_t m02m10 = vand_u8(m02, m10); + + const uint8x8_t m00m13 = vand_u8(m00, m13); + const uint8x8_t m01m12 = vand_u8(m01, m12); + const uint8x8_t m02m11 = vand_u8(m02, m11); + const uint8x8_t m03m10 = vand_u8(m03, m10); + + const uint8x8_t m01m13 = vand_u8(m01, m13); + const uint8x8_t m02m12 = vand_u8(m02, m12); + const uint8x8_t m03m11 = vand_u8(m03, m11); + + const uint8x8_t m02m13 = vand_u8(m02, m13); + const uint8x8_t m03m12 = vand_u8(m03, m12); + + const uint8x8_t m03m13 = vand_u8(m03, m13); + +#define bpcnt(x) vaddv_u8(vcnt_u8(x)) + isum[k] += (1ULL << 0)*(bpcnt(m00m10)) + + (1ULL << 1)*(bpcnt(m00m11) + bpcnt(m01m10)) + + (1ULL << 2)*(bpcnt(m00m12) + bpcnt(m01m11) + bpcnt(m02m10)) + + (1ULL << 3)*(bpcnt(m00m13) + bpcnt(m01m12) + bpcnt(m02m11) + bpcnt(m03m10)) + + (1ULL << 4)*(bpcnt(m01m13) + bpcnt(m02m12) + bpcnt(m03m11)) + + (1ULL << 5)*(bpcnt(m02m13) + bpcnt(m03m12)) + + (1ULL << 6)*(bpcnt(m03m13)); +#undef bpcnt +#else + for (int q0 = 0; q0 < QB; q0++) { + const gq_quant_t mm0 = m0[q0]; + for (int q1 = 0; q1 < QB; q1++) { + const gq_quant_t mm1 = m1[q1]; + isum[k] += (1ULL << (q0 + q1))*(__builtin_popcountll(mm0 & mm1)); + } + } +#endif + } + } + + int32x4_t isumv = vld1q_s32(isum); + + float32x4_t d0v = vld1q_f32(pd0 + i); + float32x4_t d1v = vld1q_f32(pd1 + i); + + float32x4_t sumfv = vmulq_f32(d0v, d1v); + + sumfv = vmulq_f32(sumfv, vcvtq_f32_s32(isumv)); + sumf += vaddvq_f32(sumfv); + } +#else +#error "not implemented" +#endif + +#endif + *s = sumf; +} + +// use vec_dot_gq_3 to compute the dot product of two rows +void mul_mat_gq_3( + const void * src0, + const void * src1, // transposed + float * dst, + int m, int n, int k) { + assert(k % QK == 0); + + const int nb = quantize_3_blocks_per_row(k); + const int nq = quantize_3_quants_per_block(); + + for (int ir0 = 0; ir0 < m; ir0++) { + for (int ir1 = 0; ir1 < n; ir1++) { + vec_dot_gq_3(k, dst + ir1, src0, src1); + src1 = (const char *) src1 + quantize_3_row_size(k); + } + src0 = (const char *) src0 + quantize_3_row_size(k); + src1 = (const char *) src1 - n*quantize_3_row_size(k); + + dst = (float *) dst + n; + } +} + +// +// method 4 +// 4-bit quantization +// + +static inline int quantize_4_blocks_per_row(int k) { + return k/QK; +} + +static inline int quantize_4_row_size(int k) { + const int nb = quantize_4_blocks_per_row(k); + + return nb*(2*sizeof(gq_scale_t) + QK/2); +} + +void quantize_4_row(const float * restrict src, void * restrict dst, int k) { + assert(k % QK == 0); + assert(QB == 4); + + const int nb = quantize_4_blocks_per_row(k); + + gq_scale_t * restrict pm = (gq_scale_t *) (dst); + gq_scale_t * restrict pd = (gq_scale_t *) (pm + nb); + uint8_t * restrict pb = (uint8_t *) (pd + nb); + + uint8_t pp[QK/2]; + + for (int i = 0; i < nb; i++) { + memset(pp, 0, sizeof(pp)); + + float min = FLT_MAX; + float max = -FLT_MAX; + +#if defined(__AVX2__) + { + assert(QK == 64); + const int QK8 = QK/8; + + __m256 srcv[QK8]; + __m256 minv[QK8]; + __m256 maxv[QK8]; + + for (int l = 0; l < QK8; l++) { + srcv[l] = _mm256_loadu_ps(src + i*QK + 8*l); + } + + for (int l = 0; l < QK8/2; l++) { + minv[2*l] = _mm256_min_ps(srcv[2*l], srcv[2*l+1]); + maxv[2*l] = _mm256_max_ps(srcv[2*l], srcv[2*l+1]); + } + + for (int l = 0; l < QK8/4; l++) { + minv[4*l] = _mm256_min_ps(minv[4*l], minv[4*l+2]); + maxv[4*l] = _mm256_max_ps(maxv[4*l], maxv[4*l+2]); + } + + for (int l = 0; l < QK8/8; l++) { + minv[8*l] = _mm256_min_ps(minv[8*l], minv[8*l+4]); + maxv[8*l] = _mm256_max_ps(maxv[8*l], maxv[8*l+4]); + } + + //min = MIN(minv[0][0], MIN(minv[0][1], MIN(minv[0][2], MIN(minv[0][3], MIN(minv[0][4], MIN(minv[0][5], MIN(minv[0][6], minv[0][7]))))))); + //max = MAX(maxv[0][0], MAX(maxv[0][1], MAX(maxv[0][2], MAX(maxv[0][3], MAX(maxv[0][4], MAX(maxv[0][5], MAX(maxv[0][6], maxv[0][7]))))))); + + const __m256 minv0_0 = _mm256_permute2f128_ps(minv[0], minv[0], 3); + const __m256 minv0_1 = _mm256_min_ps(minv[0], minv0_0); + const __m256 minv0_2 = _mm256_permute_ps(minv0_1, 0x4e); + const __m256 minv0_3 = _mm256_min_ps(minv0_1, minv0_2); + const __m256 minv0_4 = _mm256_permute_ps(minv0_3, 0xb1); + const __m256 minv0_5 = _mm256_min_ps(minv0_3, minv0_4); + + const __m256 maxv0_0 = _mm256_permute2f128_ps(maxv[0], maxv[0], 3); + const __m256 maxv0_1 = _mm256_max_ps(maxv[0], maxv0_0); + const __m256 maxv0_2 = _mm256_permute_ps(maxv0_1, 0x4e); + const __m256 maxv0_3 = _mm256_max_ps(maxv0_1, maxv0_2); + const __m256 maxv0_4 = _mm256_permute_ps(maxv0_3, 0xb1); + const __m256 maxv0_5 = _mm256_max_ps(maxv0_3, maxv0_4); + + min = _mm256_cvtss_f32(minv0_5); + max = _mm256_cvtss_f32(maxv0_5); + + const float d = (max - min) / ((1 << QB) - 2); + const float id = d ? 1.0/d : 0.0; + + pm[i] = GGML_FP32_TO_GQ(min); + pd[i] = GGML_FP32_TO_GQ(d); + + const __m256 idv = _mm256_set1_ps(id); + + for (int l = 0; l < QK/8; l++) { + __m256 v = _mm256_mul_ps(_mm256_sub_ps(srcv[l], _mm256_set1_ps(min)), idv); +#if 0 + v[0] += frand(); v[1] += frand(); v[2] += frand(); v[3] += frand(); + v[4] += frand(); v[5] += frand(); v[6] += frand(); v[7] += frand(); +#endif + + // convert to uint8 + __m256i vi = _mm256_cvtps_epi32(v); + + uint32_t vi_0 = _mm256_extract_epi32(vi, 0); + uint32_t vi_1 = _mm256_extract_epi32(vi, 1); + uint32_t vi_2 = _mm256_extract_epi32(vi, 2); + uint32_t vi_3 = _mm256_extract_epi32(vi, 3); + + uint32_t vi_4 = _mm256_extract_epi32(vi, 4); + uint32_t vi_5 = _mm256_extract_epi32(vi, 5); + uint32_t vi_6 = _mm256_extract_epi32(vi, 6); + uint32_t vi_7 = _mm256_extract_epi32(vi, 7); + + // convert to 4-bit, 2 consecutive packed into 1 byte + pp[4*l + 0] = vi_0 | (vi_1 << 4); + pp[4*l + 1] = vi_2 | (vi_3 << 4); + pp[4*l + 2] = vi_4 | (vi_5 << 4); + pp[4*l + 3] = vi_6 | (vi_7 << 4); + + //printf("vi: %7d %7d %7d %7d %7d %7d %7d %7d\n", vi_0, vi_1, vi_2, vi_3, vi_4, vi_5, vi_6, vi_7); + //printf("v : %7.3f %7.3f %7.3f %7.3f %7.3f %7.3f %7.3f %7.3f\n", v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7]); + } + + memcpy(pb + i*QK/2, pp, sizeof(pp)); + } +#elif defined(__ARM_NEON) && 0 + { + // TODO + } +#else + { + for (int l = 0; l < QK; l++) { + const float v = src[i*QK + l]; + if (v < min) min = v; + if (v > max) max = v; + } + + const float d = (max - min) / ((1 << QB) - 1); + const float id = d ? 1.0/d : 0.0; + + pm[i] = GGML_FP32_TO_GQ(min); + pd[i] = GGML_FP32_TO_GQ(d); + + for (int l = 0; l < QK; l++) { + const float v = (src[i*QK + l] - min) * id; + const uint8_t vi = (uint8_t) (v + frand()); + pp[l/2] |= (vi & 0xf) << (4*(l & 1)); + } + + memcpy(pb + i*QK/2, pp, sizeof(pp)); + } +#endif + //printf("min %f max %f\n", min, max); + } +} + +// reimplementation of quantize_4 using quantize_4_row +void quantize_4(const float * restrict src, char * restrict dst, int n, int k) { + assert(k % QK == 0); + + for (int j = 0; j < n; j++) { + quantize_4_row(src + j*k, dst, k); + dst = (char *) dst + quantize_4_row_size(k); + } +} + +void vec_dot_gq_4(const int n, float * restrict s, const void * restrict x, const void * restrict y) { + const int nb = quantize_4_blocks_per_row(n); + + const gq_scale_t * restrict pm0 = (const gq_scale_t *) x; + const gq_scale_t * restrict pm1 = (const gq_scale_t *) y; + + const gq_scale_t * restrict pd0 = pm0 + nb; + const gq_scale_t * restrict pd1 = pm1 + nb; + + const uint8_t * restrict pb0 = (const uint8_t *) (pd0 + nb); + const uint8_t * restrict pb1 = (const uint8_t *) (pd1 + nb); + + float sumf = 0.0; + +#if 0 + // scalar + for (int i = 0; i < nb; i++) { + const float m0 = GGML_GQ_TO_FP32(pm0[i]); + const float d0 = GGML_GQ_TO_FP32(pd0[i]); + + const float m1 = GGML_GQ_TO_FP32(pm1[i]); + const float d1 = GGML_GQ_TO_FP32(pd1[i]); + + const uint8_t * restrict p0 = pb0 + i*QK/2; + const uint8_t * restrict p1 = pb1 + i*QK/2; + + for (int j = 0; j < QK/2; j++) { + const uint8_t v0 = p0[j]; + const uint8_t v1 = p1[j]; + + const float f0 = d0*(v0 & 0xf) + m0; + const float f1 = d0*(v0 >> 4) + m0; + + const float f2 = d1*(v1 & 0xf) + m1; + const float f3 = d1*(v1 >> 4) + m1; + + sumf += f0*f2 + f1*f3; + } + } +#else +#if defined(__AVX2__) +#if QK == 64 && 0 + __m256 sumv0 = _mm256_setzero_ps(); + __m256 sumv1 = _mm256_setzero_ps(); + + for (int i = 0; i < nb; i++) { + const float m0 = GGML_GQ_TO_FP32(pm0[i]); + const float d0 = GGML_GQ_TO_FP32(pd0[i]); + + const float m1 = GGML_GQ_TO_FP32(pm1[i]); + const float d1 = GGML_GQ_TO_FP32(pd1[i]); + + const uint8_t * restrict p0 = pb0 + i*QK/2; + const uint8_t * restrict p1 = pb1 + i*QK/2; + + const __m256 m0v = _mm256_set1_ps(m0); + const __m256 d0v = _mm256_set1_ps(d0); + + const __m256 m1v = _mm256_set1_ps(m1); + const __m256 d1v = _mm256_set1_ps(d1); + + const __m256i m4b = _mm256_set1_epi8(0xf); + + __m256i v0 = _mm256_loadu_si256((__m256i *) p0); + + //_mm_prefetch((const char *) (p0 + 32), _MM_HINT_T0); + //_mm_prefetch((const char *) (p1 + 32), _MM_HINT_T0); + //_mm_prefetch((const char *) (pm0 + i + 1), _MM_HINT_T0); + //_mm_prefetch((const char *) (pm1 + i + 1), _MM_HINT_T0); + //_mm_prefetch((const char *) (pd0 + i + 1), _MM_HINT_T0); + //_mm_prefetch((const char *) (pd1 + i + 1), _MM_HINT_T0); + + __m256i v00 = _mm256_and_si256(v0, _mm256_set1_epi32(0x000000FF)); + __m256i v01 = _mm256_srli_epi32(_mm256_and_si256(v0, _mm256_set1_epi32(0x0000FFFF)), 8); + __m256i v02 = _mm256_srli_epi32(_mm256_and_si256(v0, _mm256_set1_epi32(0x00FFFFFF)), 16); + __m256i v03 = _mm256_srli_epi32(v0, 24); + + ////////////////////// + + //{ + // uint32_t vi_0 = _mm256_extract_epi32(v00, 0); + // uint32_t vi_1 = _mm256_extract_epi32(v00, 1); + // uint32_t vi_2 = _mm256_extract_epi32(v00, 2); + // uint32_t vi_3 = _mm256_extract_epi32(v00, 3); + // uint32_t vi_4 = _mm256_extract_epi32(v00, 4); + // uint32_t vi_5 = _mm256_extract_epi32(v00, 5); + // uint32_t vi_6 = _mm256_extract_epi32(v00, 6); + // uint32_t vi_7 = _mm256_extract_epi32(v00, 7); + // printf("v0: %7d %7d %7d %7d %7d %7d %7d %7d\n", vi_0, vi_1, vi_2, vi_3, vi_4, vi_5, vi_6, vi_7); + // printf("p0: %7d %7d %7d %7d %7d %7d %7d %7d\n", p0[0], p0[4], p0[8], p0[12], p0[16], p0[20], p0[24], p0[28]); + // printf("p1: %7d %7d %7d %7d %7d %7d %7d %7d\n", p0[1], p0[5], p0[9], p0[13], p0[17], p0[21], p0[25], p0[29]); + // printf("p2: %7d %7d %7d %7d %7d %7d %7d %7d\n", p0[2], p0[6], p0[10], p0[14], p0[18], p0[22], p0[26], p0[30]); + // printf("p3: %7d %7d %7d %7d %7d %7d %7d %7d\n", p0[3], p0[7], p0[11], p0[15], p0[19], p0[23], p0[27], p0[31]); + //} + + // compute 32 x 4-bit values (low and high) + __m256i v00l = _mm256_and_si256(v00, m4b); + __m256i v01l = _mm256_and_si256(v01, m4b); + __m256i v02l = _mm256_and_si256(v02, m4b); + __m256i v03l = _mm256_and_si256(v03, m4b); + + __m256i v00h = _mm256_srli_epi32(v00, 4); + __m256i v01h = _mm256_srli_epi32(v01, 4); + __m256i v02h = _mm256_srli_epi32(v02, 4); + __m256i v03h = _mm256_srli_epi32(v03, 4); + + //{ + // uint32_t vi_0 = _mm256_extract_epi32(v00l, 0); + // uint32_t vi_1 = _mm256_extract_epi32(v00l, 1); + // uint32_t vi_2 = _mm256_extract_epi32(v00l, 2); + // uint32_t vi_3 = _mm256_extract_epi32(v00l, 3); + // uint32_t vi_4 = _mm256_extract_epi32(v00l, 4); + // uint32_t vi_5 = _mm256_extract_epi32(v00l, 5); + // uint32_t vi_6 = _mm256_extract_epi32(v00l, 6); + // uint32_t vi_7 = _mm256_extract_epi32(v00l, 7); + + // printf("v0l: %7d %7d %7d %7d %7d %7d %7d %7d\n", vi_0, vi_1, vi_2, vi_3, vi_4, vi_5, vi_6, vi_7); + + // vi_0 = _mm256_extract_epi32(v00h, 0); + // vi_1 = _mm256_extract_epi32(v00h, 1); + // vi_2 = _mm256_extract_epi32(v00h, 2); + // vi_3 = _mm256_extract_epi32(v00h, 3); + // vi_4 = _mm256_extract_epi32(v00h, 4); + // vi_5 = _mm256_extract_epi32(v00h, 5); + // vi_6 = _mm256_extract_epi32(v00h, 6); + // vi_7 = _mm256_extract_epi32(v00h, 7); + + // printf("v0h: %7d %7d %7d %7d %7d %7d %7d %7d\n", vi_0, vi_1, vi_2, vi_3, vi_4, vi_5, vi_6, vi_7); + //} + + // convert to float + __m256 vf00l = _mm256_cvtepi32_ps(v00l); + __m256 vf01l = _mm256_cvtepi32_ps(v01l); + __m256 vf02l = _mm256_cvtepi32_ps(v02l); + __m256 vf03l = _mm256_cvtepi32_ps(v03l); + + __m256 vf00h = _mm256_cvtepi32_ps(v00h); + __m256 vf01h = _mm256_cvtepi32_ps(v01h); + __m256 vf02h = _mm256_cvtepi32_ps(v02h); + __m256 vf03h = _mm256_cvtepi32_ps(v03h); + + //{ + // printf("vf00l: %7.3f %7.3f %7.3f %7.3f %7.3f %7.3f %7.3f %7.3f\n", vf00l[0], vf00l[1], vf00l[2], vf00l[3], vf00l[4], vf00l[5], vf00l[6], vf00l[7]); + // printf("vf01l: %7.3f %7.3f %7.3f %7.3f %7.3f %7.3f %7.3f %7.3f\n", vf01l[0], vf01l[1], vf01l[2], vf01l[3], vf01l[4], vf01l[5], vf01l[6], vf01l[7]); + // printf("vf02l: %7.3f %7.3f %7.3f %7.3f %7.3f %7.3f %7.3f %7.3f\n", vf02l[0], vf02l[1], vf02l[2], vf02l[3], vf02l[4], vf02l[5], vf02l[6], vf02l[7]); + // printf("vf03l: %7.3f %7.3f %7.3f %7.3f %7.3f %7.3f %7.3f %7.3f\n", vf03l[0], vf03l[1], vf03l[2], vf03l[3], vf03l[4], vf03l[5], vf03l[6], vf03l[7]); + //} + + // multiply by scale and add offset + vf00l = _mm256_fmadd_ps(vf00l, d0v, m0v); + vf01l = _mm256_fmadd_ps(vf01l, d0v, m0v); + vf02l = _mm256_fmadd_ps(vf02l, d0v, m0v); + vf03l = _mm256_fmadd_ps(vf03l, d0v, m0v); + + vf00h = _mm256_fmadd_ps(vf00h, d0v, m0v); + vf01h = _mm256_fmadd_ps(vf01h, d0v, m0v); + vf02h = _mm256_fmadd_ps(vf02h, d0v, m0v); + vf03h = _mm256_fmadd_ps(vf03h, d0v, m0v); + + __m256i v1 = _mm256_loadu_si256((__m256i *) p1); + + __m256i v10 = _mm256_and_si256(v1, _mm256_set1_epi32(0x000000FF)); + __m256i v11 = _mm256_srli_epi32(_mm256_and_si256(v1, _mm256_set1_epi32(0x0000FFFF)), 8); + __m256i v12 = _mm256_srli_epi32(_mm256_and_si256(v1, _mm256_set1_epi32(0x00FFFFFF)), 16); + __m256i v13 = _mm256_srli_epi32(v1, 24); + + __m256i v10l = _mm256_and_si256(v10, m4b); + __m256i v11l = _mm256_and_si256(v11, m4b); + __m256i v12l = _mm256_and_si256(v12, m4b); + __m256i v13l = _mm256_and_si256(v13, m4b); + + __m256i v10h = _mm256_srli_epi32(v10, 4); + __m256i v11h = _mm256_srli_epi32(v11, 4); + __m256i v12h = _mm256_srli_epi32(v12, 4); + __m256i v13h = _mm256_srli_epi32(v13, 4); + + __m256 vf10l = _mm256_cvtepi32_ps(v10l); + __m256 vf11l = _mm256_cvtepi32_ps(v11l); + __m256 vf12l = _mm256_cvtepi32_ps(v12l); + __m256 vf13l = _mm256_cvtepi32_ps(v13l); + + __m256 vf10h = _mm256_cvtepi32_ps(v10h); + __m256 vf11h = _mm256_cvtepi32_ps(v11h); + __m256 vf12h = _mm256_cvtepi32_ps(v12h); + __m256 vf13h = _mm256_cvtepi32_ps(v13h); + + vf10l = _mm256_fmadd_ps(vf10l, d1v, m1v); + vf11l = _mm256_fmadd_ps(vf11l, d1v, m1v); + vf12l = _mm256_fmadd_ps(vf12l, d1v, m1v); + vf13l = _mm256_fmadd_ps(vf13l, d1v, m1v); + + vf10h = _mm256_fmadd_ps(vf10h, d1v, m1v); + vf11h = _mm256_fmadd_ps(vf11h, d1v, m1v); + vf12h = _mm256_fmadd_ps(vf12h, d1v, m1v); + vf13h = _mm256_fmadd_ps(vf13h, d1v, m1v); + + // compute dot product + sumv0 = _mm256_fmadd_ps(vf00l, vf10l, sumv0); + sumv0 = _mm256_fmadd_ps(vf01l, vf11l, sumv0); + sumv0 = _mm256_fmadd_ps(vf02l, vf12l, sumv0); + sumv0 = _mm256_fmadd_ps(vf03l, vf13l, sumv0); + + sumv1 = _mm256_fmadd_ps(vf00h, vf10h, sumv1); + sumv1 = _mm256_fmadd_ps(vf01h, vf11h, sumv1); + sumv1 = _mm256_fmadd_ps(vf02h, vf12h, sumv1); + sumv1 = _mm256_fmadd_ps(vf03h, vf13h, sumv1); + } + + // accumulate (horizontal sum) + const __m256 vdot = _mm256_add_ps(sumv0, sumv1); + const __m128 t0 = _mm_add_ps(_mm256_castps256_ps128(vdot), _mm256_extractf128_ps(vdot, 1)); + const __m128 t1 = _mm_hadd_ps(t0, t0); + + sumf += _mm_cvtss_f32(_mm_hadd_ps(t1, t1)); +#elif QK == 64 && 0 + float sum00 = 0.0f; + float sum01 = 0.0f; + float sum10 = 0.0f; + float sum11 = 0.0f; + + const __m256i m4b = _mm256_set1_epi8(0xf); + + for (int i = 0; i < nb; i++) { + const float m0 = GGML_GQ_TO_FP32(pm0[i]); + const float d0 = GGML_GQ_TO_FP32(pd0[i]); + + const float m1 = GGML_GQ_TO_FP32(pm1[i]); + const float d1 = GGML_GQ_TO_FP32(pd1[i]); + + const uint8_t * restrict p0 = pb0 + i*QK/2; + const uint8_t * restrict p1 = pb1 + i*QK/2; + + // 64 x 4 + const __m256i v0 = _mm256_loadu_si256((__m256i *) p0); + const __m256i v1 = _mm256_loadu_si256((__m256i *) p1); + + // 32 x 8 + const __m256i v0l = _mm256_and_si256(v0, m4b); + const __m256i v1l = _mm256_and_si256(v1, m4b); + + const __m256i v0h = _mm256_and_si256(_mm256_srli_epi16(v0, 4), m4b); + const __m256i v1h = _mm256_and_si256(_mm256_srli_epi16(v1, 4), m4b); + + const __m256i pl = _mm256_maddubs_epi16(v0l, v1l); + const __m256i ph = _mm256_maddubs_epi16(v0h, v1h); + + const __m256i p16 = _mm256_add_epi16(ph, pl); + const __m256i p = _mm256_madd_epi16(_mm256_set1_epi16(1), p16); + + sum00 += m0*m1; + sum01 += m1*d0*(_mm256_hadd_epi8_gg(_mm256_add_epi8(v0l, v0h))); + sum10 += m0*d1*(_mm256_hadd_epi8_gg(_mm256_add_epi8(v1l, v1h))); + sum11 += d0*d1*(_mm256_hadd_epi32_gg(p)); + } + + sumf = 64.0*sum00 + sum01 + sum10 + sum11; +#elif QK == 64 && 1 // this is the best when using min + d + float sum00 = 0.0f; + + __m256 sum01 = _mm256_setzero_ps(); + __m256 sum10 = _mm256_setzero_ps(); + __m256 sum11 = _mm256_setzero_ps(); + + for (int i = 0; i < nb; i++) { + const float m0 = GGML_GQ_TO_FP32(pm0[i]); + const float d0 = GGML_GQ_TO_FP32(pd0[i]); + + const float m1 = GGML_GQ_TO_FP32(pm1[i]); + const float d1 = GGML_GQ_TO_FP32(pd1[i]); + + const uint8_t * restrict p0 = pb0 + i*QK/2; + const uint8_t * restrict p1 = pb1 + i*QK/2; + + const __m256 m0v = _mm256_set1_ps(m0); + const __m256 d0v = _mm256_set1_ps(d0); + + const __m256 m1v = _mm256_set1_ps(m1); + const __m256 d1v = _mm256_set1_ps(d1); + + const __m256 m1d0v = _mm256_mul_ps(m1v, d0v); + const __m256 m0d1v = _mm256_mul_ps(m0v, d1v); + const __m256 d0d1v = _mm256_mul_ps(d0v, d1v); + + const __m256i m4b = _mm256_set1_epi8(0xf); + + // 64 x 4 + const __m256i v0 = _mm256_loadu_si256((__m256i *) p0); + const __m256i v1 = _mm256_loadu_si256((__m256i *) p1); + + // 32 x 8 + const __m256i v0l = _mm256_and_si256(v0, m4b); + const __m256i v1l = _mm256_and_si256(v1, m4b); + + const __m256i v0h = _mm256_and_si256(_mm256_srli_epi16(v0, 4), m4b); + const __m256i v1h = _mm256_and_si256(_mm256_srli_epi16(v1, 4), m4b); + + const __m256i v0a = _mm256_add_epi8(v0l, v0h); + const __m256i v1a = _mm256_add_epi8(v1l, v1h); + + const __m128i v0al = _mm256_extracti128_si256(v0a, 0); + const __m128i v0ah = _mm256_extracti128_si256(v0a, 1); + + const __m128i v1al = _mm256_extracti128_si256(v1a, 0); + const __m128i v1ah = _mm256_extracti128_si256(v1a, 1); + + const __m128i v0as = _mm_add_epi8(v0al, v0ah); + const __m128i v1as = _mm_add_epi8(v1al, v1ah); + + const __m256i v0as_0 = _mm256_cvtepu8_epi32(v0as); + const __m256i v0as_1 = _mm256_cvtepu8_epi32(_mm_srli_si128(v0as, 8)); + + const __m256i v1as_0 = _mm256_cvtepu8_epi32(v1as); + const __m256i v1as_1 = _mm256_cvtepu8_epi32(_mm_srli_si128(v1as, 8)); + + const __m256i v0ass = _mm256_add_epi32(v0as_0, v0as_1); + const __m256i v1ass = _mm256_add_epi32(v1as_0, v1as_1); + + const __m256 v0f = _mm256_cvtepi32_ps(v0ass); + const __m256 v1f = _mm256_cvtepi32_ps(v1ass); + + const __m256i pl = _mm256_maddubs_epi16(v0l, v1l); + const __m256i ph = _mm256_maddubs_epi16(v0h, v1h); + + const __m256i p16 = _mm256_add_epi16(ph, pl); + const __m256i p = _mm256_madd_epi16(_mm256_set1_epi16(1), p16); + + sum00 += m0*m1; + sum01 = _mm256_fmadd_ps(m1d0v, v0f, sum01); + sum10 = _mm256_fmadd_ps(m0d1v, v1f, sum10); + sum11 = _mm256_fmadd_ps(d0d1v, _mm256_cvtepi32_ps(p), sum11); + } + + sumf = 64.0*sum00 + _mm256_hadd_ps_gg(sum01) + _mm256_hadd_ps_gg(sum10) + _mm256_hadd_ps_gg(sum11); +#endif +#elif defined (__ARM_NEON) + float sum00 = 0.0f; + float sum01 = 0.0f; + float sum10 = 0.0f; + float sum11 = 0.0f; + + for (int i = 0; i < nb; i++) { + const float m0 = GGML_GQ_TO_FP32(pm0[i]); + const float d0 = GGML_GQ_TO_FP32(pd0[i]); + + const float m1 = GGML_GQ_TO_FP32(pm1[i]); + const float d1 = GGML_GQ_TO_FP32(pd1[i]); + + const uint8_t * restrict p0 = pb0 + i*QK/2; + const uint8_t * restrict p1 = pb1 + i*QK/2; + + const uint8x16_t m4b = vdupq_n_u8(0xf); + + const uint8x16_t v0_0 = vld1q_u8(p0); + const uint8x16_t v0_1 = vld1q_u8(p0 + 16); + const uint8x16_t v1_0 = vld1q_u8(p1); + const uint8x16_t v1_1 = vld1q_u8(p1 + 16); + + // and with 0xf + const uint8x16_t v0_0l = vandq_u8(v0_0, m4b); + const uint8x16_t v0_1l = vandq_u8(v0_1, m4b); + const uint8x16_t v1_0l = vandq_u8(v1_0, m4b); + const uint8x16_t v1_1l = vandq_u8(v1_1, m4b); + + const uint8x16_t v0_0h = vshrq_n_u8(v0_0, 4); + const uint8x16_t v0_1h = vshrq_n_u8(v0_1, 4); + const uint8x16_t v1_0h = vshrq_n_u8(v1_0, 4); + const uint8x16_t v1_1h = vshrq_n_u8(v1_1, 4); + + // dot product into uint16x8_t + const uint16x8_t pl0l = vmull_u8(vget_low_u8 (v0_0l), vget_low_u8 (v1_0l)); + const uint16x8_t pl0h = vmull_u8(vget_high_u8(v0_0l), vget_high_u8(v1_0l)); + const uint16x8_t pl1l = vmull_u8(vget_low_u8 (v0_1l), vget_low_u8 (v1_1l)); + const uint16x8_t pl1h = vmull_u8(vget_high_u8(v0_1l), vget_high_u8(v1_1l)); + + const uint16x8_t ph0l = vmull_u8(vget_low_u8 (v0_0h), vget_low_u8 (v1_0h)); + const uint16x8_t ph0h = vmull_u8(vget_high_u8(v0_0h), vget_high_u8(v1_0h)); + const uint16x8_t ph1l = vmull_u8(vget_low_u8 (v0_1h), vget_low_u8 (v1_1h)); + const uint16x8_t ph1h = vmull_u8(vget_high_u8(v0_1h), vget_high_u8(v1_1h)); + + const uint16x8_t pl0 = vaddq_u16(pl0l, pl0h); + const uint16x8_t pl1 = vaddq_u16(pl1l, pl1h); + const uint16x8_t ph0 = vaddq_u16(ph0l, ph0h); + const uint16x8_t ph1 = vaddq_u16(ph1l, ph1h); + + const uint16x8_t pl = vaddq_u16(pl0, pl1); + const uint16x8_t ph = vaddq_u16(ph0, ph1); + + sum00 += m0*m1; + sum01 += m1*d0*(vaddvq_u8(v0_0l) + vaddvq_u8(v0_0h) + vaddvq_u8(v0_1l) + vaddvq_u8(v0_1h)); + sum10 += m0*d1*(vaddvq_u8(v1_0l) + vaddvq_u8(v1_0h) + vaddvq_u8(v1_1l) + vaddvq_u8(v1_1h)); + //sum11 += d0*d1*( + // vaddvq_u16(vaddq_u16(vaddq_u16(pl0l, pl0h), vaddq_u16(pl1l, pl1h))) + + // vaddvq_u16(vaddq_u16(vaddq_u16(ph0l, ph0h), vaddq_u16(ph1l, ph1h)))); + sum11 += d0*d1*vaddvq_u16(vaddq_u16(pl, ph)); + } + + sumf = 64.0*sum00 + sum01 + sum10 + sum11; +#endif +#endif + + *s = sumf; +} + +// use vec_dot_gq_4 to compute the dot product of two rows +void mul_mat_gq_4( + const void * src0, + const void * src1, // transposed + float * dst, + int m, int n, int k) { + assert(k % QK == 0); + + const int nb = quantize_4_blocks_per_row(k); + + for (int ir0 = 0; ir0 < m; ir0++) { + for (int ir1 = 0; ir1 < n; ir1++) { + vec_dot_gq_4(k, dst + ir1, src0, src1); + src1 = (const char *) src1 + quantize_4_row_size(k); + } + src0 = (const char *) src0 + quantize_4_row_size(k); + src1 = (const char *) src1 - n*quantize_4_row_size(k); + + dst = (float *) dst + n; + } +} + +// +// method 5 +// 4-bit quantization (without min, only delta) +// + +static inline int quantize_5_blocks_per_row(int k) { + return k/QK; +} + +static inline int quantize_5_row_size(int k) { + const int nb = quantize_5_blocks_per_row(k); + + return nb*(sizeof(gq_scale_t) + QK/2); +} + +void quantize_5_row(const float * restrict src, void * restrict dst, int k) { + assert(k % QK == 0); + assert(QB == 4); + + const int nb = quantize_5_blocks_per_row(k); + + gq_scale_t * restrict pd = (gq_scale_t *) (dst); + uint8_t * restrict pb = (uint8_t *) (pd + nb); + + uint8_t pp[QK/2]; + + for (int i = 0; i < nb; i++) { + memset(pp, 0, sizeof(pp)); + + float amax = 0.0f; // absolute max + +#if defined(__AVX2__) + { + assert(QK == 64); + const int QK8 = QK/8; + + __m256 srcv [QK8]; + __m256 asrcv[QK8]; + __m256 amaxv[QK8]; + + for (int l = 0; l < QK8; l++) { + srcv[l] = _mm256_loadu_ps(src + i*QK + 8*l); + } + + for (int l = 0; l < QK8; l++) { + asrcv[l] = _mm256_and_ps(srcv[l], (__m256) _mm256_set1_epi32(0x7fffffff)); + } + + + for (int l = 0; l < QK8/2; l++) { + amaxv[2*l] = _mm256_max_ps(asrcv[2*l], asrcv[2*l+1]); + } + + for (int l = 0; l < QK8/4; l++) { + amaxv[4*l] = _mm256_max_ps(amaxv[4*l], amaxv[4*l+2]); + } + + for (int l = 0; l < QK8/8; l++) { + amaxv[8*l] = _mm256_max_ps(amaxv[8*l], amaxv[8*l+4]); + } + + //amax = MAX(amaxv[0][0], MAX(amaxv[0][1], MAX(amaxv[0][2], MAX(amaxv[0][3], MAX(amaxv[0][4], MAX(amaxv[0][5], MAX(amaxv[0][6], amaxv[0][7]))))))); + + const __m256 amaxv0_0 = _mm256_permute2f128_ps(amaxv[0], amaxv[0], 3); + const __m256 amaxv0_1 = _mm256_max_ps(amaxv[0], amaxv0_0); + const __m256 amaxv0_2 = _mm256_permute_ps(amaxv0_1, 0x4e); + const __m256 amaxv0_3 = _mm256_max_ps(amaxv0_1, amaxv0_2); + const __m256 amaxv0_4 = _mm256_permute_ps(amaxv0_3, 0xb1); + const __m256 amaxv0_5 = _mm256_max_ps(amaxv0_3, amaxv0_4); + + amax = _mm256_cvtss_f32(amaxv0_5); + + //printf("amax = %f\n", amax); + + const float d = amax / ((1 << (QB - 1)) - 1); + const float id = d ? 1.0/d : 0.0; + + pd[i] = GGML_FP32_TO_GQ(d); + + const __m256 idv = _mm256_set1_ps(id); + + for (int l = 0; l < QK/8; l++) { + __m256 v = _mm256_mul_ps(srcv[l], idv); +#if 0 + v[0] += frand(); v[1] += frand(); v[2] += frand(); v[3] += frand(); + v[4] += frand(); v[5] += frand(); v[6] += frand(); v[7] += frand(); +#endif + + // convert to int8 + __m256i vi = _mm256_cvtps_epi32(v); + vi = _mm256_add_epi32(vi, _mm256_set1_epi32(8)); + + int32_t vi_0 = _mm256_extract_epi32(vi, 0); + int32_t vi_1 = _mm256_extract_epi32(vi, 1); + int32_t vi_2 = _mm256_extract_epi32(vi, 2); + int32_t vi_3 = _mm256_extract_epi32(vi, 3); + + int32_t vi_4 = _mm256_extract_epi32(vi, 4); + int32_t vi_5 = _mm256_extract_epi32(vi, 5); + int32_t vi_6 = _mm256_extract_epi32(vi, 6); + int32_t vi_7 = _mm256_extract_epi32(vi, 7); + + // convert to 4-bit, 2 consecutive packed into 1 byte + pp[4*l + 0] = vi_0 | (vi_1 << 4); + pp[4*l + 1] = vi_2 | (vi_3 << 4); + pp[4*l + 2] = vi_4 | (vi_5 << 4); + pp[4*l + 3] = vi_6 | (vi_7 << 4); + + //printf("vi: %7d %7d %7d %7d %7d %7d %7d %7d\n", vi_0, vi_1, vi_2, vi_3, vi_4, vi_5, vi_6, vi_7); + ////printf("v : %7.3f %7.3f %7.3f %7.3f %7.3f %7.3f %7.3f %7.3f\n", v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7]); + + assert(vi_0 >= 0 && vi_0 < 16); + assert(vi_1 >= 0 && vi_1 < 16); + assert(vi_2 >= 0 && vi_2 < 16); + assert(vi_3 >= 0 && vi_3 < 16); + + assert(vi_4 >= 0 && vi_4 < 16); + assert(vi_5 >= 0 && vi_5 < 16); + assert(vi_6 >= 0 && vi_6 < 16); + assert(vi_7 >= 0 && vi_7 < 16); + } + + memcpy(pb + i*QK/2, pp, sizeof(pp)); + } +#elif defined(__ARM_NEON) && 0 + { + // TODO + } +#else + { + for (int l = 0; l < QK; l++) { + const float v = src[i*QK + l]; + amax = MAX(amax, fabsf(v)); + } + + const float d = amax / ((1 << (QB - 1)) - 1); + const float id = d ? 1.0/d : 0.0; + + pd[i] = GGML_FP32_TO_GQ(d); + + for (int l = 0; l < QK; l++) { + const float v = src[i*QK + l]*id; + const int8_t vi = ((int8_t) (round(v))) + 8; + assert(vi >= 0 && vi < 16); + pp[l/2] |= (vi & 0xf) << (4*(l & 1)); + } + + memcpy(pb + i*QK/2, pp, sizeof(pp)); + } +#endif + //printf("min %f max %f\n", min, max); + } +} + +// reimplementation of quantize_5 using quantize_5_row +void quantize_5(const float * restrict src, char * restrict dst, int n, int k) { + assert(k % QK == 0); + + for (int j = 0; j < n; j++) { + quantize_5_row(src + j*k, dst, k); + dst = (char *) dst + quantize_5_row_size(k); + } +} + +void vec_dot_gq_5(const int n, float * restrict s, const void * restrict x, const void * restrict y) { + const int nb = quantize_5_blocks_per_row(n); + + const gq_scale_t * restrict pd0 = (const gq_scale_t *) x; + const gq_scale_t * restrict pd1 = (const gq_scale_t *) y; + + const uint8_t * restrict pb0 = (const uint8_t *) (pd0 + nb); + const uint8_t * restrict pb1 = (const uint8_t *) (pd1 + nb); + + float sumf = 0.0; + +#if 0 + // scalar + for (int i = 0; i < nb; i++) { + const float d0 = GGML_GQ_TO_FP32(pd0[i]); + const float d1 = GGML_GQ_TO_FP32(pd1[i]); + + const uint8_t * restrict p0 = pb0 + i*QK/2; + const uint8_t * restrict p1 = pb1 + i*QK/2; + + for (int j = 0; j < QK/2; j++) { + const uint8_t v0 = p0[j]; + const uint8_t v1 = p1[j]; + + const float f0 = d0*((int8_t) (v0 & 0xf) - 8); + const float f1 = d0*((int8_t) (v0 >> 4) - 8); + + const float f2 = d1*((int8_t) (v1 & 0xf) - 8); + const float f3 = d1*((int8_t) (v1 >> 4) - 8); + + sumf += f0*f2 + f1*f3; + } + } +#else +#if defined(__AVX2__) +#if QK == 64 && 1 + __m256 sum11 = _mm256_setzero_ps(); + + for (int i = 0; i < nb; i++) { + const float d0 = GGML_GQ_TO_FP32(pd0[i]); + const float d1 = GGML_GQ_TO_FP32(pd1[i]); + + const uint8_t * restrict p0 = pb0 + i*QK/2; + const uint8_t * restrict p1 = pb1 + i*QK/2; + + const __m256 d0v = _mm256_set1_ps(d0); + const __m256 d1v = _mm256_set1_ps(d1); + + const __m256 d0d1v = _mm256_mul_ps(d0v, d1v); + + const __m256i m4b = _mm256_set1_epi8(0xf); + + // 64 x 4 + const __m256i v0 = _mm256_loadu_si256((__m256i *) p0); + const __m256i v1 = _mm256_loadu_si256((__m256i *) p1); + + // 32 x 8 + __m256i v0l = _mm256_and_si256(v0, m4b); + __m256i v1l = _mm256_and_si256(v1, m4b); + + __m256i v0h = _mm256_and_si256(_mm256_srli_epi16(v0, 4), m4b); + __m256i v1h = _mm256_and_si256(_mm256_srli_epi16(v1, 4), m4b); + + // sub 8 + v0l = _mm256_sub_epi8(v0l, _mm256_set1_epi8(8)); + v0h = _mm256_sub_epi8(v0h, _mm256_set1_epi8(8)); + + v1l = _mm256_sub_epi8(v1l, _mm256_set1_epi8(8)); + v1h = _mm256_sub_epi8(v1h, _mm256_set1_epi8(8)); + + // abs + const __m256i v0la = _mm256_sign_epi8(v0l, v0l); + const __m256i v0ha = _mm256_sign_epi8(v0h, v0h); + + // sign + const __m256i v1ls = _mm256_sign_epi8(v1l, v0l); + const __m256i v1hs = _mm256_sign_epi8(v1h, v0h); + + const __m256i pl = _mm256_maddubs_epi16(v0la, v1ls); + const __m256i ph = _mm256_maddubs_epi16(v0ha, v1hs); + + const __m256i p16 = _mm256_add_epi16(ph, pl); + const __m256i p = _mm256_madd_epi16(_mm256_set1_epi16(1), p16); + + sum11 = _mm256_fmadd_ps(d0d1v, _mm256_cvtepi32_ps(p), sum11); + } + + sumf = _mm256_hadd_ps_gg(sum11); +#endif +#elif defined (__ARM_NEON) + float sum11 = 0.0f; + + //float32x4_t sum_0 = vdupq_n_f32(0.0f); + //float32x4_t sum_1 = vdupq_n_f32(0.0f); + + //float16x8_t sum_0 = vdupq_n_f16(0.0f); + //float16x8_t sum_1 = vdupq_n_f16(0.0f); + + for (int i = 0; i < nb; i++) { + const float d0 = GGML_GQ_TO_FP32(pd0[i]); + const float d1 = GGML_GQ_TO_FP32(pd1[i]); + + //float32x4_t d0d1v = vdupq_n_f32(d0*d1); + //float16x8_t d0d1v = vdupq_n_f16(d0*d1); + + const uint8_t * restrict p0 = pb0 + i*QK/2; + const uint8_t * restrict p1 = pb1 + i*QK/2; + + const uint8x16_t m4b = vdupq_n_u8(0xf); + const int8x16_t s8b = vdupq_n_s8(0x8); + + const uint8x16_t v0_0 = vld1q_u8(p0); + const uint8x16_t v0_1 = vld1q_u8(p0 + 16); + const uint8x16_t v1_0 = vld1q_u8(p1); + const uint8x16_t v1_1 = vld1q_u8(p1 + 16); + + // 4-bit -> 8-bit + const int8x16_t v0_0l = vreinterpretq_s8_u8(vandq_u8(v0_0, m4b)); + const int8x16_t v0_1l = vreinterpretq_s8_u8(vandq_u8(v0_1, m4b)); + const int8x16_t v1_0l = vreinterpretq_s8_u8(vandq_u8(v1_0, m4b)); + const int8x16_t v1_1l = vreinterpretq_s8_u8(vandq_u8(v1_1, m4b)); + + const int8x16_t v0_0h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4)); + const int8x16_t v0_1h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4)); + const int8x16_t v1_0h = vreinterpretq_s8_u8(vshrq_n_u8(v1_0, 4)); + const int8x16_t v1_1h = vreinterpretq_s8_u8(vshrq_n_u8(v1_1, 4)); + + // sub 8 + const int8x16_t v0_0ls = vsubq_s8(v0_0l, s8b); + const int8x16_t v0_1ls = vsubq_s8(v0_1l, s8b); + const int8x16_t v1_0ls = vsubq_s8(v1_0l, s8b); + const int8x16_t v1_1ls = vsubq_s8(v1_1l, s8b); + + const int8x16_t v0_0hs = vsubq_s8(v0_0h, s8b); + const int8x16_t v0_1hs = vsubq_s8(v0_1h, s8b); + const int8x16_t v1_0hs = vsubq_s8(v1_0h, s8b); + const int8x16_t v1_1hs = vsubq_s8(v1_1h, s8b); + + // dot product into int16x8_t + const int16x8_t pl0l = vmull_s8(vget_low_s8 (v0_0ls), vget_low_s8 (v1_0ls)); + const int16x8_t pl0h = vmull_s8(vget_high_s8(v0_0ls), vget_high_s8(v1_0ls)); + const int16x8_t pl1l = vmull_s8(vget_low_s8 (v0_1ls), vget_low_s8 (v1_1ls)); + const int16x8_t pl1h = vmull_s8(vget_high_s8(v0_1ls), vget_high_s8(v1_1ls)); + + const int16x8_t ph0l = vmull_s8(vget_low_s8 (v0_0hs), vget_low_s8 (v1_0hs)); + const int16x8_t ph0h = vmull_s8(vget_high_s8(v0_0hs), vget_high_s8(v1_0hs)); + const int16x8_t ph1l = vmull_s8(vget_low_s8 (v0_1hs), vget_low_s8 (v1_1hs)); + const int16x8_t ph1h = vmull_s8(vget_high_s8(v0_1hs), vget_high_s8(v1_1hs)); + + const int16x8_t pl0 = vaddq_s16(pl0l, pl0h); + const int16x8_t pl1 = vaddq_s16(pl1l, pl1h); + const int16x8_t ph0 = vaddq_s16(ph0l, ph0h); + const int16x8_t ph1 = vaddq_s16(ph1l, ph1h); + + const int16x8_t pl = vaddq_s16(pl0, pl1); + const int16x8_t ph = vaddq_s16(ph0, ph1); + + //const int8x16_t pl0 = vmulq_s8(v0_0ls, v1_0ls); + //const int8x16_t pl1 = vmulq_s8(v0_1ls, v1_1ls); + //const int8x16_t ph0 = vmulq_s8(v0_0hs, v1_0hs); + //const int8x16_t ph1 = vmulq_s8(v0_1hs, v1_1hs); + + //const int16x8_t pll = vaddl_s8(vget_low_s8(pl0), vget_low_s8(pl1)); + //const int16x8_t plh = vaddl_s8(vget_high_s8(pl0), vget_high_s8(pl1)); + //const int16x8_t phl = vaddl_s8(vget_low_s8(ph0), vget_low_s8(ph1)); + //const int16x8_t phh = vaddl_s8(vget_high_s8(ph0), vget_high_s8(ph1)); + + //const int16x8_t pl = vaddq_s16(pll, plh); + //const int16x8_t ph = vaddq_s16(phl, phh); + + const int16x8_t p = vaddq_s16(pl, ph); + + // convert to float + //const float32x4_t pf0 = vcvtq_f32_s32(vmovl_s16(vget_low_s16 (p))); + //const float32x4_t pf1 = vcvtq_f32_s32(vmovl_s16(vget_high_s16(p))); + + // scalar + sum11 += d0*d1*vaddvq_s16(p); + //sum11 += d0*d1*(vaddvq_s16(pl) + vaddvq_s16(ph)); + //sum11 += d0*d1*vaddvq_s16(vaddq_s16(pl, ph)); + //sum11 += d0*d1*(vaddvq_s8(pl0) + vaddvq_s8(pl1) + vaddvq_s8(ph0) + vaddvq_s8(ph1)); + //sum11 += d0*d1*(vaddvq_s16(pll) + vaddvq_s16(plh) + vaddvq_s16(phl) + vaddvq_s16(phh)); + + //sum_0 = vfmaq_f16(sum_0, d0d1v, vcvtq_f16_s16(p)); + //sum_0 = vfmaq_f16(sum_0, d0d1v, vcvtq_f16_s16(pl)); + //sum_1 = vfmaq_f16(sum_1, d0d1v, vcvtq_f16_s16(ph)); + + // vectorize + //sum_0 = vmlaq_f32(sum_0, d0d1v, pf0); + //sum_1 = vmlaq_f32(sum_1, d0d1v, pf1); + } + + sumf = sum11; + //sumf = vaddvq_f32(sum_0) + vaddvq_f32(sum_1); + //sumf = sum_0[0] + sum_0[1] + sum_0[2] + sum_0[3] + sum_0[4] + sum_0[5] + sum_0[6] + sum_0[7]; + //sum_0 = vaddq_f16(sum_0, sum_1); + //sumf = sum_0[0] + sum_0[1] + sum_0[2] + sum_0[3] + sum_0[4] + sum_0[5] + sum_0[6] + sum_0[7]; +#endif +#endif + + *s = sumf; +} + +// use vec_dot_gq_5 to compute the dot product of two rows +void mul_mat_gq_5( + const void * src0, + const void * src1, // transposed + float * dst, + int m, int n, int k) { + assert(k % QK == 0); + + const int nb = quantize_5_blocks_per_row(k); + + for (int ir0 = 0; ir0 < m; ir0++) { + for (int ir1 = 0; ir1 < n; ir1++) { + vec_dot_gq_5(k, dst + ir1, src0, src1); + src1 = (const char *) src1 + quantize_5_row_size(k); + } + src0 = (const char *) src0 + quantize_5_row_size(k); + src1 = (const char *) src1 - n*quantize_5_row_size(k); + + dst = (float *) dst + n; + } +} + +// +// method 6 +// same as 5 but with 32 element blocks +// + +static inline int quantize_6_blocks_per_row(int k) { + return k/32; +} + +static inline int quantize_6_row_size(int k) { + const int nb = quantize_6_blocks_per_row(k); + + return nb*(sizeof(gq_scale_t) + 16); +} + +void quantize_6_row(const float * restrict src, void * restrict dst, int k) { + assert(k % 32 == 0); + assert(QB == 4); + + const int nb = quantize_6_blocks_per_row(k); + + gq_scale_t * restrict pd = (gq_scale_t *) (dst); + uint8_t * restrict pb = (uint8_t *) (pd + nb); + + uint8_t pp[16]; + + for (int i = 0; i < nb; i++) { + memset(pp, 0, sizeof(pp)); + + float amax = 0.0f; // absolute max + +#if defined(__AVX2__) + { + const int QK8 = 4; + + __m256 srcv [QK8]; + __m256 asrcv[QK8]; + __m256 amaxv[QK8]; + + for (int l = 0; l < QK8; l++) { + srcv[l] = _mm256_loadu_ps(src + i*32 + 8*l); + } + + for (int l = 0; l < QK8; l++) { + asrcv[l] = _mm256_and_ps(srcv[l], (__m256) _mm256_set1_epi32(0x7fffffff)); + } + + for (int l = 0; l < QK8/2; l++) { + amaxv[2*l] = _mm256_max_ps(asrcv[2*l], asrcv[2*l+1]); + } + + for (int l = 0; l < QK8/4; l++) { + amaxv[4*l] = _mm256_max_ps(amaxv[4*l], amaxv[4*l+2]); + } + + const __m256 amaxv0_0 = _mm256_permute2f128_ps(amaxv[0], amaxv[0], 3); + const __m256 amaxv0_1 = _mm256_max_ps(amaxv[0], amaxv0_0); + const __m256 amaxv0_2 = _mm256_permute_ps(amaxv0_1, 0x4e); + const __m256 amaxv0_3 = _mm256_max_ps(amaxv0_1, amaxv0_2); + const __m256 amaxv0_4 = _mm256_permute_ps(amaxv0_3, 0xb1); + const __m256 amaxv0_5 = _mm256_max_ps(amaxv0_3, amaxv0_4); + + amax = _mm256_cvtss_f32(amaxv0_5); + + const float d = amax / ((1 << (QB - 1)) - 1); + const float id = d ? 1.0/d : 0.0; + + pd[i] = GGML_FP32_TO_GQ(d); + + const __m256 idv = _mm256_set1_ps(id); + + for (int l = 0; l < 4; l++) { + __m256 v = _mm256_mul_ps(srcv[l], idv); + + // convert to int8 + __m256i vi = _mm256_cvtps_epi32(v); + vi = _mm256_add_epi32(vi, _mm256_set1_epi32(8)); + + int32_t vi_0 = _mm256_extract_epi32(vi, 0); + int32_t vi_1 = _mm256_extract_epi32(vi, 1); + int32_t vi_2 = _mm256_extract_epi32(vi, 2); + int32_t vi_3 = _mm256_extract_epi32(vi, 3); + + int32_t vi_4 = _mm256_extract_epi32(vi, 4); + int32_t vi_5 = _mm256_extract_epi32(vi, 5); + int32_t vi_6 = _mm256_extract_epi32(vi, 6); + int32_t vi_7 = _mm256_extract_epi32(vi, 7); + + // convert to 4-bit, 2 consecutive packed into 1 byte + pp[4*l + 0] = vi_0 | (vi_1 << 4); + pp[4*l + 1] = vi_2 | (vi_3 << 4); + pp[4*l + 2] = vi_4 | (vi_5 << 4); + pp[4*l + 3] = vi_6 | (vi_7 << 4); + + assert(vi_0 >= 0 && vi_0 < 16); + assert(vi_1 >= 0 && vi_1 < 16); + assert(vi_2 >= 0 && vi_2 < 16); + assert(vi_3 >= 0 && vi_3 < 16); + + assert(vi_4 >= 0 && vi_4 < 16); + assert(vi_5 >= 0 && vi_5 < 16); + assert(vi_6 >= 0 && vi_6 < 16); + assert(vi_7 >= 0 && vi_7 < 16); + } + + memcpy(pb + i*16, pp, sizeof(pp)); + } +#elif defined(__ARM_NEON) + { + float32x4_t srcv [8]; + float32x4_t asrcv[8]; + float32x4_t amaxv[8]; + + for (int l = 0; l < 8; l++) srcv[l] = vld1q_f32(src + i*32 + 4*l); + for (int l = 0; l < 8; l++) asrcv[l] = vabsq_f32(srcv[l]); + + for (int l = 0; l < 4; l++) amaxv[2*l] = vmaxq_f32(asrcv[2*l], asrcv[2*l+1]); + for (int l = 0; l < 2; l++) amaxv[4*l] = vmaxq_f32(amaxv[4*l], amaxv[4*l+2]); + for (int l = 0; l < 1; l++) amaxv[8*l] = vmaxq_f32(amaxv[8*l], amaxv[8*l+4]); + + amax = MAX( + MAX(vgetq_lane_f32(amaxv[0], 0), vgetq_lane_f32(amaxv[0], 1)), + MAX(vgetq_lane_f32(amaxv[0], 2), vgetq_lane_f32(amaxv[0], 3))); + + const float d = amax / ((1 << 3) - 1); + const float id = d ? 1.0/d : 0.0; + + pd[i] = GGML_FP32_TO_GQ(d); + + for (int l = 0; l < 8; l++) { + const float32x4_t v = vmulq_n_f32(srcv[l], id); + const float32x4_t vf = vaddq_f32(v, vdupq_n_f32(8.5f)); + const int32x4_t vi = vcvtq_s32_f32(vf); + + pp[2*l + 0] = vgetq_lane_s32(vi, 0) | (vgetq_lane_s32(vi, 1) << 4); + pp[2*l + 1] = vgetq_lane_s32(vi, 2) | (vgetq_lane_s32(vi, 3) << 4); + } + + memcpy(pb + i*16, pp, sizeof(pp)); + } +#else + { + for (int l = 0; l < 32; l++) { + const float v = src[i*32 + l]; + amax = MAX(amax, fabsf(v)); + } + + const float d = amax / ((1 << (QB - 1)) - 1); + const float id = d ? 1.0/d : 0.0; + + pd[i] = GGML_FP32_TO_GQ(d); + + for (int l = 0; l < 32; l++) { + const float v = src[i*32 + l]*id; + const int8_t vi = ((int8_t) (round(v))) + 8; + assert(vi >= 0 && vi < 16); + pp[l/2] |= (vi & 0xf) << (4*(l & 1)); + } + + memcpy(pb + i*16, pp, sizeof(pp)); + } +#endif + //printf("amax = %f\n", amax); + } +} + +// reimplementation of quantize__6using quantize_6_row +void quantize_6(const float * restrict src, char * restrict dst, int n, int k) { + assert(k % 32 == 0); + + for (int j = 0; j < n; j++) { + quantize_6_row(src + j*k, dst, k); + dst = (char *) dst + quantize_6_row_size(k); + } +} + +void vec_dot_gq_6(const int n, float * restrict s, const void * restrict x, const void * restrict y) { + const int nb = quantize_6_blocks_per_row(n); + + const gq_scale_t * restrict pd0 = (const gq_scale_t *) x; + const gq_scale_t * restrict pd1 = (const gq_scale_t *) y; + + const uint8_t * restrict pb0 = (const uint8_t *) (pd0 + nb); + const uint8_t * restrict pb1 = (const uint8_t *) (pd1 + nb); + + float sumf = 0.0; + +#if 0 + // scalar + for (int i = 0; i < nb; i++) { + const float d0 = GGML_GQ_TO_FP32(pd0[i]); + const float d1 = GGML_GQ_TO_FP32(pd1[i]); + + const uint8_t * restrict p0 = pb0 + i*16; + const uint8_t * restrict p1 = pb1 + i*16; + + for (int j = 0; j < 16; j++) { + const uint8_t v0 = p0[j]; + const uint8_t v1 = p1[j]; + + const float f0 = d0*((int8_t) (v0 & 0xf) - 8); + const float f1 = d0*((int8_t) (v0 >> 4) - 8); + + const float f2 = d1*((int8_t) (v1 & 0xf) - 8); + const float f3 = d1*((int8_t) (v1 >> 4) - 8); + + sumf += f0*f2 + f1*f3; + } + } +#else +#if defined(__AVX2__) + // TODO +#elif defined (__ARM_NEON) +#if 0 + float sum0 = 0.0f; + + for (int i = 0; i < nb; i++) { + const float d0 = GGML_GQ_TO_FP32(pd0[i]); + const float d1 = GGML_GQ_TO_FP32(pd1[i]); + + //float32x4_t d0d1v = vdupq_n_f32(d0*d1); + //float16x8_t d0d1v = vdupq_n_f16(d0*d1); + + const uint8_t * restrict p0 = pb0 + i*16; + const uint8_t * restrict p1 = pb1 + i*16; + + const uint8x16_t m4b = vdupq_n_u8(0xf); + const int8x16_t s8b = vdupq_n_s8(0x8); + + const uint8x16_t v0_0 = vld1q_u8(p0); + const uint8x16_t v1_0 = vld1q_u8(p1); + + // 4-bit -> 8-bit + const uint8x16_t v0_0l = vandq_u8(v0_0, m4b); + const uint8x16_t v1_0l = vandq_u8(v1_0, m4b); + + const uint8x16_t v0_0h = vshrq_n_u8(v0_0, 4); + const uint8x16_t v1_0h = vshrq_n_u8(v1_0, 4); + + // sub 8 + const int8x16_t v0_0ls = vsubq_s8(v0_0l, s8b); + const int8x16_t v1_0ls = vsubq_s8(v1_0l, s8b); + + const int8x16_t v0_0hs = vsubq_s8(v0_0h, s8b); + const int8x16_t v1_0hs = vsubq_s8(v1_0h, s8b); + + // dot product into int16x8_t + const int16x8_t pl0l = vmull_s8(vget_low_s8 (v0_0ls), vget_low_s8 (v1_0ls)); + const int16x8_t pl0h = vmull_s8(vget_high_s8(v0_0ls), vget_high_s8(v1_0ls)); + + const int16x8_t ph0l = vmull_s8(vget_low_s8 (v0_0hs), vget_low_s8 (v1_0hs)); + const int16x8_t ph0h = vmull_s8(vget_high_s8(v0_0hs), vget_high_s8(v1_0hs)); + + const int16x8_t pl = vaddq_s16(pl0l, pl0h); + const int16x8_t ph = vaddq_s16(ph0l, ph0h); + + const int16x8_t p = vaddq_s16(pl, ph); + + // scalar + sum0 += d0*d1*vaddvq_s16(p); + } + + sumf = sum0; +#elif 1 // this is a bit faster than the above + float sum0 = 0.0f; + float sum1 = 0.0f; + + for (int i = 0; i < nb; i += 2) { + const float d0_0 = GGML_GQ_TO_FP32(pd0[i + 0]); + const float d1_0 = GGML_GQ_TO_FP32(pd1[i + 0]); + const float d0_1 = GGML_GQ_TO_FP32(pd0[i + 1]); + const float d1_1 = GGML_GQ_TO_FP32(pd1[i + 1]); + + const uint8_t * restrict p0 = pb0 + i*16; + const uint8_t * restrict p1 = pb1 + i*16; + + const uint8x16_t m4b = vdupq_n_u8(0xf); + const int8x16_t s8b = vdupq_n_s8(0x8); + + const uint8x16_t v0_0 = vld1q_u8(p0); + const uint8x16_t v0_1 = vld1q_u8(p0 + 16); + const uint8x16_t v1_0 = vld1q_u8(p1); + const uint8x16_t v1_1 = vld1q_u8(p1 + 16); + + // 4-bit -> 8-bit + const int8x16_t v0_0l = vreinterpretq_s8_u8(vandq_u8(v0_0, m4b)); + const int8x16_t v1_0l = vreinterpretq_s8_u8(vandq_u8(v1_0, m4b)); + + const int8x16_t v0_0h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4)); + const int8x16_t v1_0h = vreinterpretq_s8_u8(vshrq_n_u8(v1_0, 4)); + + const int8x16_t v0_1l = vreinterpretq_s8_u8(vandq_u8(v0_1, m4b)); + const int8x16_t v1_1l = vreinterpretq_s8_u8(vandq_u8(v1_1, m4b)); + + const int8x16_t v0_1h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4)); + const int8x16_t v1_1h = vreinterpretq_s8_u8(vshrq_n_u8(v1_1, 4)); + + // sub 8 + const int8x16_t v0_0ls = vsubq_s8(v0_0l, s8b); + const int8x16_t v1_0ls = vsubq_s8(v1_0l, s8b); + + const int8x16_t v0_0hs = vsubq_s8(v0_0h, s8b); + const int8x16_t v1_0hs = vsubq_s8(v1_0h, s8b); + + const int8x16_t v0_1ls = vsubq_s8(v0_1l, s8b); + const int8x16_t v1_1ls = vsubq_s8(v1_1l, s8b); + + const int8x16_t v0_1hs = vsubq_s8(v0_1h, s8b); + const int8x16_t v1_1hs = vsubq_s8(v1_1h, s8b); + + // dot product into int16x8_t + const int16x8_t pl0l = vmull_s8(vget_low_s8 (v0_0ls), vget_low_s8 (v1_0ls)); + const int16x8_t pl0h = vmull_s8(vget_high_s8(v0_0ls), vget_high_s8(v1_0ls)); + + const int16x8_t ph0l = vmull_s8(vget_low_s8 (v0_0hs), vget_low_s8 (v1_0hs)); + const int16x8_t ph0h = vmull_s8(vget_high_s8(v0_0hs), vget_high_s8(v1_0hs)); + + const int16x8_t pl1l = vmull_s8(vget_low_s8 (v0_1ls), vget_low_s8 (v1_1ls)); + const int16x8_t pl1h = vmull_s8(vget_high_s8(v0_1ls), vget_high_s8(v1_1ls)); + + const int16x8_t ph1l = vmull_s8(vget_low_s8 (v0_1hs), vget_low_s8 (v1_1hs)); + const int16x8_t ph1h = vmull_s8(vget_high_s8(v0_1hs), vget_high_s8(v1_1hs)); + + const int16x8_t pl_0 = vaddq_s16(pl0l, pl0h); + const int16x8_t ph_0 = vaddq_s16(ph0l, ph0h); + + const int16x8_t pl_1 = vaddq_s16(pl1l, pl1h); + const int16x8_t ph_1 = vaddq_s16(ph1l, ph1h); + + const int16x8_t p_0 = vaddq_s16(pl_0, ph_0); + const int16x8_t p_1 = vaddq_s16(pl_1, ph_1); + + // scalar + sum0 += d0_0*d1_0*vaddvq_s16(p_0); + sum1 += d0_1*d1_1*vaddvq_s16(p_1); + } + + sumf = sum0 + sum1; +#endif +#endif +#endif + + *s = sumf; +} + +// use vec_dot_gq_6 to compute the dot product of two rows +void mul_mat_gq_6( + const void * src0, + const void * src1, // transposed + float * dst, + int m, int n, int k) { + assert(k % 32 == 0); + + const int nb = quantize_6_blocks_per_row(k); + + for (int ir0 = 0; ir0 < m; ir0++) { + for (int ir1 = 0; ir1 < n; ir1++) { + vec_dot_gq_6(k, dst + ir1, src0, src1); + src1 = (const char *) src1 + quantize_6_row_size(k); + } + src0 = (const char *) src0 + quantize_6_row_size(k); + src1 = (const char *) src1 - n*quantize_6_row_size(k); + + dst = (float *) dst + n; + } +} + +int main(int argc, const char ** argv) { + assert(sizeof(gq_quant_t)*8 == gq_t_bits); + + // needed to initialize f16 tables + { + struct ggml_init_params params = { 0, NULL, false }; + struct ggml_context * ctx = ggml_init(params); + ggml_free(ctx); + } + + int method = 0; + if (argc > 1) { + method = atoi(argv[1]); + } + + float * src0 = malloc(sizeof(float)*M*K); + float * src1 = malloc(sizeof(float)*N*K); + float * dst = malloc(sizeof(float)*M*N); + + // allocate aligned memory + //float * src0 = (float *)aligned_alloc(32, sizeof(float)*M*K); + //float * src1 = (float *)aligned_alloc(32, sizeof(float)*N*K); + //float * dst = (float *)aligned_alloc(32, sizeof(float)*M*N); + + for (int i = 0; i < M*K; i++) { + src0[i] = 0.8 - rand() / (float)RAND_MAX; + /*src0[i] = rand() / (float)RAND_MAX;*/ + /*src0[i] = i % 2;*/ + } + + for (int i = 0; i < N*K; i++) { + src1[i] = 0.8 - rand() / (float)RAND_MAX; + /*src1[i] = rand() / (float)RAND_MAX;*/ + /*src1[i] = i % 3;*/ + } + + void * src0_gq = NULL; + void * src1_gq = NULL; + + size_t sizegq = 0; + + { + if (method == 1) { + src0_gq = calloc(1, quantize_1_row_size(K)*M); + src1_gq = calloc(1, quantize_1_row_size(K)*N); + + sizegq = quantize_1_row_size(K)*M + quantize_1_row_size(K)*N; + } + + if (method == 2) { + src0_gq = calloc(1, quantize_2_row_size(K)*M); + src1_gq = calloc(1, quantize_2_row_size(K)*N); + + sizegq = quantize_2_row_size(K)*M + quantize_2_row_size(K)*N; + } + + if (method == 3) { + src0_gq = calloc(1, quantize_3_row_size(K)*M); + src1_gq = calloc(1, quantize_3_row_size(K)*N); + + sizegq = quantize_3_row_size(K)*M + quantize_3_row_size(K)*N; + } + + if (method == 4) { + src0_gq = calloc(1, quantize_4_row_size(K)*M); + src1_gq = calloc(1, quantize_4_row_size(K)*N); + + sizegq = quantize_4_row_size(K)*M + quantize_4_row_size(K)*N; + } + + if (method == 5) { + src0_gq = calloc(1, quantize_5_row_size(K)*M); + src1_gq = calloc(1, quantize_5_row_size(K)*N); + + sizegq = quantize_5_row_size(K)*M + quantize_5_row_size(K)*N; + } + + if (method == 6) { + src0_gq = calloc(1, quantize_6_row_size(K)*M); + src1_gq = calloc(1, quantize_6_row_size(K)*N); + + sizegq = quantize_6_row_size(K)*M + quantize_6_row_size(K)*N; + } + } + + const size_t sizef16 = sizeof(ggml_fp16_t)*M*K + sizeof(ggml_fp16_t)*N*K; + + printf("compression: %f\n", (float)sizegq/sizef16); + + // convert fp32 -> gq + { + const uint64_t t_start = get_time_us(); + + if (method == 1) { + quantize_1(src0, src0_gq, M, K); + quantize_1(src1, src1_gq, N, K); + } + + if (method == 2) { + quantize_2(src0, src0_gq, M, K); + quantize_2(src1, src1_gq, N, K); + } + + if (method == 3) { + quantize_3(src0, src0_gq, M, K); + quantize_3(src1, src1_gq, N, K); + } + + if (method == 4) { + quantize_4(src0, src0_gq, M, K); + quantize_4(src1, src1_gq, N, K); + } + + if (method == 5) { + quantize_5(src0, src0_gq, M, K); + quantize_5(src1, src1_gq, N, K); + } + + if (method == 6) { + quantize_6(src0, src0_gq, M, K); + quantize_6(src1, src1_gq, N, K); + } + + const uint64_t t_end = get_time_us(); + printf("convert time: %f ms / method = %d\n", (t_end - t_start) / 1000.0, method); + } + + for (int i = 0; i < 16; ++i) { + printf("%f %f\n", src0[i], src1[i]); + } + + const int nIter = 1; + + const clock_t start = clock(); + const uint64_t start_us = get_time_us(); + + double iM = 1.0/M; + double sum = 0.0f; + for (int i = 0; i < nIter; i++) { + if (method == 0) { + mul_mat_f32_naive(src0, src1, dst, M, N, K); + } + + if (method == 1) { + mul_mat_gq_1(src0_gq, src1_gq, dst, M, N, K); + } + + if (method == 2) { + mul_mat_gq_2(src0_gq, src1_gq, dst, M, N, K); + } + + if (method == 3) { + mul_mat_gq_3(src0_gq, src1_gq, dst, M, N, K); + } + + if (method == 4) { + mul_mat_gq_4(src0_gq, src1_gq, dst, M, N, K); + } + + if (method == 5) { + mul_mat_gq_5(src0_gq, src1_gq, dst, M, N, K); + } + + if (method == 6) { + mul_mat_gq_6(src0_gq, src1_gq, dst, M, N, K); + } + } + + for (int i = 0; i < N; i++) { + sum += dst[i]*iM; + } + + { + const clock_t end = clock(); + const uint64_t end_us = get_time_us(); + printf("%s: elapsed ticks: %ld\n", __func__, end - start); + printf("%s: elapsed us: %d / %f ms\n", __func__, (int)(end_us - start_us), (end_us - start_us) / 1000.0 / nIter); + } + +#if 0 + // print src0 + printf("src0:\n"); + for (int i = 0; i < M; i++) { + for (int j = 0; j < K; j++) { + printf("%4.1f ", src0[i*K+j]); + } + printf("\n"); + } + + // print src1 + printf("src1:\n"); + for (int i = 0; i < N; i++) { + for (int j = 0; j < K; j++) { + printf("%4.1f ", src1[i*K+j]); + } + printf("\n"); + } + + printf("dst:\n"); + for (int i = 0; i < M; i++) { + for (int j = 0; j < N; j++) { + printf("%4.1f ", dst[i*N+j]); + } + printf("\n"); + } +#endif + + printf("%f\n", sum); + + free(src0); + free(src1); + free(dst); + + if (src0_gq) free(src0_gq); + if (src1_gq) free(src1_gq); + + return 0; +} diff --git a/ggml_old/tests/test-opt.c b/ggml_old/tests/test-opt.c new file mode 100644 index 0000000..d001615 --- /dev/null +++ b/ggml_old/tests/test-opt.c @@ -0,0 +1,205 @@ +#include "ggml.h" + +#include +#include +#include +#include + +#define MAX_NARGS 2 + + +// +// logging +// +#define GGML_DEBUG 0 +#if (GGML_DEBUG >= 1) +#define GGML_PRINT_DEBUG(...) printf(__VA_ARGS__) +#else +#define GGML_PRINT_DEBUG(...) +#endif + +#if (GGML_DEBUG >= 5) +#define GGML_PRINT_DEBUG_5(...) printf(__VA_ARGS__) +#else +#define GGML_PRINT_DEBUG_5(...) +#endif + +#if (GGML_DEBUG >= 10) +#define GGML_PRINT_DEBUG_10(...) printf(__VA_ARGS__) +#else +#define GGML_PRINT_DEBUG_10(...) +#endif + +#define GGML_PRINT(...) printf(__VA_ARGS__) + + +float frand() { + return (float)rand()/(float)RAND_MAX; +} + +int irand(int n) { + return rand()%n; +} + +void get_random_dims(int64_t * dims, int ndims) { + dims[0] = dims[1] = dims[2] = dims[3] = 1; + + for (int i = 0; i < ndims; i++) { + dims[i] = 1 + irand(4); + } +} + +void get_random_dims_minmax(int64_t * dims, int ndims, int min, int max) { + dims[0] = dims[1] = dims[2] = dims[3] = 1; + + for (int i = 0; i < ndims; i++) { + dims[i] = min + irand(max-min); + } +} + + +struct ggml_tensor * get_random_tensor( + struct ggml_context * ctx0, + int ndims, + int64_t ne[], + float fmin, + float fmax) { + struct ggml_tensor * result = ggml_new_tensor(ctx0, GGML_TYPE_F32, ndims, ne); + + switch (ndims) { + case 1: + for (int i0 = 0; i0 < ne[0]; i0++) { + ((float *)result->data)[i0] = frand()*(fmax - fmin) + fmin; + } + break; + case 2: + for (int i1 = 0; i1 < ne[1]; i1++) { + for (int i0 = 0; i0 < ne[0]; i0++) { + ((float *)result->data)[i1*ne[0] + i0] = frand()*(fmax - fmin) + fmin; + } + } + break; + case 3: + for (int i2 = 0; i2 < ne[2]; i2++) { + for (int i1 = 0; i1 < ne[1]; i1++) { + for (int i0 = 0; i0 < ne[0]; i0++) { + ((float *)result->data)[i2*ne[1]*ne[0] + i1*ne[0] + i0] = frand()*(fmax - fmin) + fmin; + } + } + } + break; + case 4: + for (int i3 = 0; i3 < ne[3]; i3++) { + for (int i2 = 0; i2 < ne[2]; i2++) { + for (int i1 = 0; i1 < ne[1]; i1++) { + for (int i0 = 0; i0 < ne[0]; i0++) { + ((float *)result->data)[i3*ne[2]*ne[1]*ne[0] + i2*ne[1]*ne[0] + i1*ne[0] + i0] = frand()*(fmax - fmin) + fmin; + } + } + } + } + break; + default: + assert(false); + }; + + return result; +} + +float get_element(const struct ggml_tensor * t, int idx) { + return ((float *)t->data)[idx]; +} + +void set_element(struct ggml_tensor * t, int idx, float value) { + ((float *)t->data)[idx] = value; +} + +int main(int argc, const char ** argv) { + struct ggml_init_params params = { + .mem_size = 1024*1024*1024, + .mem_buffer = NULL, + .no_alloc = false, + }; + struct ggml_context * ctx = ggml_init(params); + + int64_t ne1[4] = {4, 1024, 1, 1}; + int64_t ne2[4] = {4, 2048, 1, 1};; + int64_t ne3[4] = {1024, 2048, 1, 1}; + + struct ggml_tensor * a = get_random_tensor(ctx, 2, ne1, -1, +1); + struct ggml_tensor * b = get_random_tensor(ctx, 2, ne2, -1, +1); + ggml_set_param(ctx, a); + ggml_set_param(ctx, b); + + struct ggml_tensor * c = get_random_tensor(ctx, 2, ne3, -1, +1); + + struct ggml_tensor * ab = ggml_mul_mat(ctx, a, b); + struct ggml_tensor * d = ggml_sub(ctx, c, ab); + struct ggml_tensor * e = ggml_sum(ctx, ggml_sqr(ctx, d)); + + + struct ggml_cgraph ge = ggml_build_forward(e); + ggml_graph_reset (&ge); + ggml_graph_compute(ctx, &ge); + const float fe = ggml_get_f32_1d(e, 0); + printf("%s: e = %.4f\n", __func__, fe); + + struct ggml_opt_params opt_params = ggml_opt_default_params(GGML_OPT_ADAM); + + ggml_opt(ctx, opt_params, e); + + ggml_graph_reset (&ge); + ggml_graph_compute(ctx, &ge); + const float fe_opt = ggml_get_f32_1d(e, 0); + printf("%s: original e = %.4f\n", __func__, fe); + printf("%s: optimized e = %.4f\n", __func__, fe_opt); + + const bool success = (fe_opt <= fe); + assert(success); + + ggml_free(ctx); + return success ? 0 : -1; +} +// int64_t ne1[4] = {4, 128, 1, 1}; +// int64_t ne2[4] = {4, 256, 1, 1};; +// int64_t ne3[4] = {128, 256, 1, 1}; +// main: original e = 25890.9375 +// main: optimized e = 10094.7031 + +// int64_t ne1[4] = {8, 128, 1, 1}; +// int64_t ne2[4] = {8, 256, 1, 1};; +// int64_t ne3[4] = {128, 256, 1, 1}; +// main: original e = 39429.5078 +// main: optimized e = 9275.8936 + +// int64_t ne1[4] = {16, 128, 1, 1}; +// int64_t ne2[4] = {16, 256, 1, 1};; +// int64_t ne3[4] = {128, 256, 1, 1}; +// main: original e = 68371.1328 +// main: optimized e = 7854.4502 + + +// int64_t ne1[4] = {32, 128, 1, 1}; +// int64_t ne2[4] = {32, 256, 1, 1};; +// int64_t ne3[4] = {128, 256, 1, 1}; +// main: original e = 126061.1953 +// main: optimized e = 5451.0166 + +// int64_t ne1[4] = {4, 1024, 1, 1}; +// int64_t ne2[4] = {4, 2048, 1, 1};; +// int64_t ne3[4] = {1024, 2048, 1, 1}; +// main: original e = 1620817.8750 +// main: optimized e = 698387.6875 + +// another run on M1 +// int64_t ne1[4] = {4, 1024, 1, 1}; +// int64_t ne2[4] = {4, 2048, 1, 1};; +// int64_t ne3[4] = {1024, 2048, 1, 1}; +// main: original e = 1629595.6250 +// main: optimized e = 698169.1250 + +// int64_t ne1[4] = {32, 1024, 1, 1}; +// int64_t ne2[4] = {32, 2048, 1, 1};; +// int64_t ne3[4] = {1024, 2048, 1, 1}; +// main: original e = 8146770.5000 +// main: optimized e = 651119.1250 diff --git a/ggml_old/tests/test-svd0.c b/ggml_old/tests/test-svd0.c new file mode 100644 index 0000000..2295c9d --- /dev/null +++ b/ggml_old/tests/test-svd0.c @@ -0,0 +1,218 @@ +// SVD dimensionality reduction + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#ifdef GGML_USE_ACCELERATE +#include +#endif + +float frand() { + return (float) rand() / (float) RAND_MAX; +} + +//int sgesvd_(char *__jobu, char *__jobvt, __CLPK_integer *__m, +// __CLPK_integer *__n, __CLPK_real *__a, __CLPK_integer *__lda, +// __CLPK_real *__s, __CLPK_real *__u, __CLPK_integer *__ldu, +// __CLPK_real *__vt, __CLPK_integer *__ldvt, __CLPK_real *__work, +// __CLPK_integer *__lwork, +// __CLPK_integer *__info) + +int main(int argc, const char ** argv) { + int m = 10; + int n = 5; + + float * A = malloc(n * m * sizeof(float)); + float * A0 = malloc(n * m * sizeof(float)); + + for (int i = 0; i < n; ++i) { + for (int j = 0; j < m; ++j) { + A[i * m + j] = (float) (10.0f*(i + 1) + 1.0f * frand()); + //A[i * m + j] = (float) (10.0f*(i%2 + 1) + 0.1f * frand()); + //if (i == 2) { + // A[i * m + j] += 20*frand(); + //} + if ((i == 1 || i == 3) && j > m/2) { + A[i * m + j] = -A[i * m + j]; + } + } + } + + // average vector + //float * M = malloc(m * sizeof(float)); + + //{ + // for (int j = 0; j < m; ++j) { + // M[j] = 0.0f; + // } + // for (int i = 0; i < n; ++i) { + // for (int j = 0; j < m; ++j) { + // M[j] += A[i * m + j]; + // } + // } + // for (int j = 0; j < m; ++j) { + // M[j] /= (float) n; + // } + //} + + //// subtract average vector + //for (int i = 0; i < n; ++i) { + // for (int j = 0; j < m; ++j) { + // A[i * m + j] -= M[j]; + // } + //} + + memcpy(A0, A, n * m * sizeof(float)); + + // print A + printf("A:\n"); + for (int i = 0; i < n; ++i) { + printf("col %d : ", i); + for (int j = 0; j < m; ++j) { + printf("%9.5f ", A[i * m + j]); + } + printf("\n"); + } + printf("\n"); + + // SVD + // A = U * S * V^T + + float * U = malloc(n * m * sizeof(float)); + float * S = malloc(n * sizeof(float)); + float * V = malloc(n * n * sizeof(float)); + + int lda = m; + int ldu = m; + int ldvt = n; + + float work_size; + int lwork = -1; + int info = 0; + + sgesvd_("S", "S", &m, &n, A, &lda, S, U, &ldu, V, &ldvt, &work_size, &lwork, &info); + + lwork = (int) work_size; + + printf("work_size = %f, info = %d, lwork = %d\n", work_size, info, lwork); + + float * work = malloc(lwork * sizeof(float)); + + sgesvd_("S", "S", &m, &n, A, &lda, S, U, &ldu, V, &ldvt, work, &lwork, &info); + + // print U + printf("U:\n"); + for (int i = 0; i < n; ++i) { + printf("col %d : ", i); + for (int j = 0; j < m; ++j) { + printf("%9.5f ", U[i * m + j]); + } + printf("\n"); + } + printf("\n"); + + // normalize S + { + double sum = 0.0; + for (int i = 0; i < n; ++i) { + sum += S[i]; + } + sum *= sqrt((double) m); + for (int i = 0; i < n; ++i) { + S[i] /= sum; + } + } + + // print S + printf("S:\n"); + for (int i = 0; i < n; ++i) { + printf("- %d = %9.5f\n", i, S[i]); + } + printf("\n"); + + // print V + printf("V:\n"); + for (int i = 0; i < n; ++i) { + printf("col %d : ", i); + for (int j = 0; j < n; ++j) { + printf("%9.5f ", V[i * n + j]); + } + printf("\n"); + } + printf("\n"); + + // print A + printf("A:\n"); + for (int i = 0; i < n; ++i) { + printf("col %d : ", i); + for (int j = 0; j < m; ++j) { + printf("%9.5f ", A[i * m + j]); + } + printf("\n"); + } + printf("\n"); + + // compute singular vectors in U + for (int i = 0; i < n; ++i) { + for (int j = 0; j < m; ++j) { + U[i * m + j] *= S[i]; + } + } + + // normalize U + for (int i = 0; i < n; ++i) { + double sum = 0.0; + for (int j = 0; j < m; ++j) { + sum += U[i * m + j] * U[i * m + j]; + } + sum = sqrt(sum); + for (int j = 0; j < m; ++j) { + U[i * m + j] /= sum*sqrt((double) m); + } + } + + // print U + printf("U:\n"); + for (int i = 0; i < n; ++i) { + printf("col %d : ", i); + for (int j = 0; j < m; ++j) { + printf("%9.5f ", U[i * m + j]); + } + printf("\n"); + } + printf("\n"); + + + // project A0 onto U + float * A1 = malloc(n * n * sizeof(float)); + + for (int i = 0; i < n; ++i) { + for (int j = 0; j < n; ++j) { + A1[i * n + j] = 0.0f; + for (int k = 0; k < m; ++k) { + A1[i * n + j] += A0[i * m + k] * U[j * m + k]; + } + } + } + + // print A1 + printf("A1:\n"); + for (int i = 0; i < n; ++i) { + printf("col %d : ", i); + for (int j = 0; j < n; ++j) { + printf("%9.5f ", A1[i * n + j]); + } + printf("\n"); + } + printf("\n"); + + return 0; +} diff --git a/ggml_old/tests/test-vec0.c b/ggml_old/tests/test-vec0.c new file mode 100644 index 0000000..f798eaa --- /dev/null +++ b/ggml_old/tests/test-vec0.c @@ -0,0 +1,124 @@ +#include +#include +#include +#include + +const int N = 1 << 14; +const int M = 1 << 14; + +void mul_mat_vec_f32_0( + const float * src0, + const float * src1, + float * dst, + unsigned nrows, + unsigned ncols) { + for (unsigned i = 0; i < nrows; i++) { + float sum = 0.0f; + for (unsigned j = 0; j < ncols; j++) { + sum += src0[i*ncols + j]*src1[j]; + } + dst[i] = sum; + } +} + +typedef float afloat __attribute__ ((__aligned__(32))); +void mul_mat_vec_f32_1( + const afloat *restrict src0, + const afloat *restrict src1, + afloat *restrict dst, + unsigned nrows, + unsigned ncols) { + for (unsigned i = 0; i < nrows; i++) { + const afloat * restrict row = src0 + i*ncols; + const afloat * restrict col = src1; + + float sum = 0.0f; + + for (unsigned j = 0; j < ncols; j++) { + sum += *row++ * *col++; + } + + dst[i] = sum; + + //float sum[8] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f}; + + //for (unsigned j = 0; j < ncols; j += 8) { + // sum[0] += row[0]*col[0]; + // sum[1] += row[1]*col[1]; + // sum[2] += row[2]*col[2]; + // sum[3] += row[3]*col[3]; + // sum[4] += row[4]*col[4]; + // sum[5] += row[5]*col[5]; + // sum[6] += row[6]*col[6]; + // sum[7] += row[7]*col[7]; + + // row += 8; + // col += 8; + //} + + //dst[i] = sum[0] + sum[1] + sum[2] + sum[3] + sum[4] + sum[5] + sum[6] + sum[7]; + } +} + +void mul_mat_vec_f32_2( + const void * src0, + const void * src1, + void * dst, + unsigned nrows, + unsigned ncols) { + void * d = dst; + for (unsigned i = 0; i < nrows; i++) { + float sum = 0.0f; + + const void * row = src0 + i*ncols*sizeof(float); + const void * col = src1; + for (unsigned j = 0; j < ncols; j++) { + sum += (*(float *)row) * (*(float *)col); + row += sizeof(float); + col += sizeof(float); + } + *(float *)d = sum; + d += sizeof(float); + } +} + +int main(int argc, const char ** argv) { + //float * src0 = malloc(sizeof(float)*N*M); + //float * src1 = malloc(sizeof(float)*M); + //float * dst = malloc(sizeof(float)*N); + + afloat * src0 = (float *)(aligned_alloc(32, sizeof(float)*N*M)); + afloat * src1 = (float *)(aligned_alloc(32, sizeof(float)*M)); + afloat * dst = (float *)(aligned_alloc(32, sizeof(float)*N)); + + for (unsigned i = 0; i < N*M; i++) { + src0[i] = i; + } + + for (unsigned i = 0; i < M; i++) { + src1[i] = i; + } + + const int nIter = 10; + + const clock_t start = clock(); + + double sum = 0.0f; + for (int i = 0; i < nIter; i++) { + //mul_mat_vec_f32_0(src0, src1, dst, N, M); + mul_mat_vec_f32_1(src0, src1, dst, N, M); + //mul_mat_vec_f32_2(src0, src1, dst, N, M); + for (unsigned i = 0; i < N; i++) { + sum += dst[i]; + } + } + + { + const clock_t end = clock(); + printf("%s: elapsed ticks: %ld\n", __func__, end - start); + } + + printf("%f\n", sum); + + return 0; +} diff --git a/ggml_old/tests/test-vec1.c b/ggml_old/tests/test-vec1.c new file mode 100644 index 0000000..fefcd68 --- /dev/null +++ b/ggml_old/tests/test-vec1.c @@ -0,0 +1,576 @@ +#include +#include +#include +#include +#include +#include + +#include + +#include + +const int N = 1 << 14; +const int M = 768; + +// +// naive implementation +// + +void mul_mat_vec_f32_0( + const float * restrict src0, + const float * restrict src1, + float * dst, + int nrows, + int ncols) { + for (int i = 0; i < nrows; i++) { + float sum = 0.0f; + for (int j = 0; j < ncols; j++) { + sum += src0[i*ncols + j]*src1[j]; + } + dst[i] = sum; + } +} + +// +// SIMD with 8 32-bit floats +// + +float reduce_vector8_0(__m256 v) { + __m128 v1 = _mm256_extractf128_ps(v, 0); + __m128 v2 = _mm256_extractf128_ps(v, 1); + __m128 v3 = _mm_add_ps(v1, v2); + __m128 v4 = _mm_shuffle_ps(v3, v3, 0x4e); + __m128 v5 = _mm_add_ps(v3, v4); + __m128 v6 = _mm_shuffle_ps(v5, v5, 0x11); + __m128 v7 = _mm_add_ps(v5, v6); + return _mm_cvtss_f32(v7); +} + +// vectorized implementation using AVX +void mul_mat_vec_f32_1( + const float * restrict src0, + const float * restrict src1, + float * dst, + int nrows, + int ncols) { + + const int ncols8 = ncols & ~7; + + for (int i = 0; i < nrows; i++) { + __m256 sum = _mm256_setzero_ps(); + for (int j = 0; j < ncols8; j += 8) { + __m256 a = _mm256_loadu_ps(src0 + i*ncols + j); + __m256 b = _mm256_loadu_ps(src1 + j); + __m256 c = _mm256_mul_ps(a, b); + sum = _mm256_add_ps(sum, c); + } + dst[i] = reduce_vector8_0(sum); + + for (int j = ncols8; j < ncols; j++) { + dst[i] += src0[i*ncols + j]*src1[j]; + } + } +} + +void mul_mat_vec_f32_2( + const float * restrict src0, + const float * restrict src1, + float * dst, + int nrows, + int ncols) { + + const int ncols32 = ncols & ~31; + + for (int i = 0; i < nrows; i++) { + __m256 sum0 = _mm256_setzero_ps(); + __m256 sum1 = _mm256_setzero_ps(); + __m256 sum2 = _mm256_setzero_ps(); + __m256 sum3 = _mm256_setzero_ps(); + + const float * restrict src0_row = src0 + i*ncols; + for (int j = 0; j < ncols32; j += 32) { + __m256 a0 = _mm256_loadu_ps(src0_row + j + 0); + __m256 a1 = _mm256_loadu_ps(src0_row + j + 8); + __m256 a2 = _mm256_loadu_ps(src0_row + j + 16); + __m256 a3 = _mm256_loadu_ps(src0_row + j + 24); + __m256 b0 = _mm256_loadu_ps(src1 + j + 0); + __m256 b1 = _mm256_loadu_ps(src1 + j + 8); + __m256 b2 = _mm256_loadu_ps(src1 + j + 16); + __m256 b3 = _mm256_loadu_ps(src1 + j + 24); +#if defined(__FMA__) + sum0 = _mm256_fmadd_ps(a0, b0, sum0); + sum1 = _mm256_fmadd_ps(a1, b1, sum1); + sum2 = _mm256_fmadd_ps(a2, b2, sum2); + sum3 = _mm256_fmadd_ps(a3, b3, sum3); +#else + sum0 = _mm256_add_ps(_mm256_mul_ps(a0, b0), sum0); + sum1 = _mm256_add_ps(_mm256_mul_ps(a1, b1), sum1); + sum2 = _mm256_add_ps(_mm256_mul_ps(a2, b2), sum2); + sum3 = _mm256_add_ps(_mm256_mul_ps(a3, b3), sum3); +#endif + } + dst[i] = reduce_vector8_0(_mm256_add_ps(_mm256_add_ps(sum0, sum1), _mm256_add_ps(sum2, sum3))); + + for (int j = ncols32; j < ncols; j++) { + dst[i] += src0[i*ncols + j]*src1[j]; + } + } +} + +// +// SIMD with 8 16-bit floats +// + +static inline float fp32_from_bits(uint32_t w) { +#if defined(__OPENCL_VERSION__) + return as_float(w); +#elif defined(__CUDA_ARCH__) + return __uint_as_float((unsigned int) w); +#elif defined(__INTEL_COMPILER) + return _castu32_f32(w); +#elif defined(_MSC_VER) && (defined(_M_ARM) || defined(_M_ARM64)) + return _CopyFloatFromInt32((__int32) w); +#else + union { + uint32_t as_bits; + float as_value; + } fp32 = { w }; + return fp32.as_value; +#endif +} + +static inline uint32_t fp32_to_bits(float f) { +#if defined(__OPENCL_VERSION__) + return as_uint(f); +#elif defined(__CUDA_ARCH__) + return (uint32_t) __float_as_uint(f); +#elif defined(__INTEL_COMPILER) + return _castf32_u32(f); +#elif defined(_MSC_VER) && (defined(_M_ARM) || defined(_M_ARM64)) + return (uint32_t) _CopyInt32FromFloat(f); +#else + union { + float as_value; + uint32_t as_bits; + } fp32 = { f }; + return fp32.as_bits; +#endif +} + +/* + * Convert a 16-bit floating-point number in IEEE half-precision format, in bit representation, to + * a 32-bit floating-point number in IEEE single-precision format. + * + * @note The implementation relies on IEEE-like (no assumption about rounding mode and no operations on denormals) + * floating-point operations and bitcasts between integer and floating-point variables. + */ +static inline float fp16_ieee_to_fp32_value(uint16_t h) { + /* + * Extend the half-precision floating-point number to 32 bits and shift to the upper part of the 32-bit word: + * +---+-----+------------+-------------------+ + * | S |EEEEE|MM MMMM MMMM|0000 0000 0000 0000| + * +---+-----+------------+-------------------+ + * Bits 31 26-30 16-25 0-15 + * + * S - sign bit, E - bits of the biased exponent, M - bits of the mantissa, 0 - zero bits. + */ + const uint32_t w = (uint32_t) h << 16; + /* + * Extract the sign of the input number into the high bit of the 32-bit word: + * + * +---+----------------------------------+ + * | S |0000000 00000000 00000000 00000000| + * +---+----------------------------------+ + * Bits 31 0-31 + */ + const uint32_t sign = w & UINT32_C(0x80000000); + /* + * Extract mantissa and biased exponent of the input number into the high bits of the 32-bit word: + * + * +-----+------------+---------------------+ + * |EEEEE|MM MMMM MMMM|0 0000 0000 0000 0000| + * +-----+------------+---------------------+ + * Bits 27-31 17-26 0-16 + */ + const uint32_t two_w = w + w; + + /* + * Shift mantissa and exponent into bits 23-28 and bits 13-22 so they become mantissa and exponent + * of a single-precision floating-point number: + * + * S|Exponent | Mantissa + * +-+---+-----+------------+----------------+ + * |0|000|EEEEE|MM MMMM MMMM|0 0000 0000 0000| + * +-+---+-----+------------+----------------+ + * Bits | 23-31 | 0-22 + * + * Next, there are some adjustments to the exponent: + * - The exponent needs to be corrected by the difference in exponent bias between single-precision and half-precision + * formats (0x7F - 0xF = 0x70) + * - Inf and NaN values in the inputs should become Inf and NaN values after conversion to the single-precision number. + * Therefore, if the biased exponent of the half-precision input was 0x1F (max possible value), the biased exponent + * of the single-precision output must be 0xFF (max possible value). We do this correction in two steps: + * - First, we adjust the exponent by (0xFF - 0x1F) = 0xE0 (see exp_offset below) rather than by 0x70 suggested + * by the difference in the exponent bias (see above). + * - Then we multiply the single-precision result of exponent adjustment by 2**(-112) to reverse the effect of + * exponent adjustment by 0xE0 less the necessary exponent adjustment by 0x70 due to difference in exponent bias. + * The floating-point multiplication hardware would ensure than Inf and NaN would retain their value on at least + * partially IEEE754-compliant implementations. + * + * Note that the above operations do not handle denormal inputs (where biased exponent == 0). However, they also do not + * operate on denormal inputs, and do not produce denormal results. + */ + const uint32_t exp_offset = UINT32_C(0xE0) << 23; +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) || defined(__GNUC__) && !defined(__STRICT_ANSI__) + const float exp_scale = 0x1.0p-112f; +#else + const float exp_scale = fp32_from_bits(UINT32_C(0x7800000)); +#endif + const float normalized_value = fp32_from_bits((two_w >> 4) + exp_offset) * exp_scale; + + /* + * Convert denormalized half-precision inputs into single-precision results (always normalized). + * Zero inputs are also handled here. + * + * In a denormalized number the biased exponent is zero, and mantissa has on-zero bits. + * First, we shift mantissa into bits 0-9 of the 32-bit word. + * + * zeros | mantissa + * +---------------------------+------------+ + * |0000 0000 0000 0000 0000 00|MM MMMM MMMM| + * +---------------------------+------------+ + * Bits 10-31 0-9 + * + * Now, remember that denormalized half-precision numbers are represented as: + * FP16 = mantissa * 2**(-24). + * The trick is to construct a normalized single-precision number with the same mantissa and thehalf-precision input + * and with an exponent which would scale the corresponding mantissa bits to 2**(-24). + * A normalized single-precision floating-point number is represented as: + * FP32 = (1 + mantissa * 2**(-23)) * 2**(exponent - 127) + * Therefore, when the biased exponent is 126, a unit change in the mantissa of the input denormalized half-precision + * number causes a change of the constructud single-precision number by 2**(-24), i.e. the same ammount. + * + * The last step is to adjust the bias of the constructed single-precision number. When the input half-precision number + * is zero, the constructed single-precision number has the value of + * FP32 = 1 * 2**(126 - 127) = 2**(-1) = 0.5 + * Therefore, we need to subtract 0.5 from the constructed single-precision number to get the numerical equivalent of + * the input half-precision number. + */ + const uint32_t magic_mask = UINT32_C(126) << 23; + const float magic_bias = 0.5f; + const float denormalized_value = fp32_from_bits((two_w >> 17) | magic_mask) - magic_bias; + + /* + * - Choose either results of conversion of input as a normalized number, or as a denormalized number, depending on the + * input exponent. The variable two_w contains input exponent in bits 27-31, therefore if its smaller than 2**27, the + * input is either a denormal number, or zero. + * - Combine the result of conversion of exponent and mantissa with the sign of the input number. + */ + const uint32_t denormalized_cutoff = UINT32_C(1) << 27; + const uint32_t result = sign | + (two_w < denormalized_cutoff ? fp32_to_bits(denormalized_value) : fp32_to_bits(normalized_value)); + return fp32_from_bits(result); +} + +/* + * Convert a 32-bit floating-point number in IEEE single-precision format to a 16-bit floating-point number in + * IEEE half-precision format, in bit representation. + * + * @note The implementation relies on IEEE-like (no assumption about rounding mode and no operations on denormals) + * floating-point operations and bitcasts between integer and floating-point variables. + */ +static inline uint16_t fp16_ieee_from_fp32_value(float f) { +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) || defined(__GNUC__) && !defined(__STRICT_ANSI__) + const float scale_to_inf = 0x1.0p+112f; + const float scale_to_zero = 0x1.0p-110f; +#else + const float scale_to_inf = fp32_from_bits(UINT32_C(0x77800000)); + const float scale_to_zero = fp32_from_bits(UINT32_C(0x08800000)); +#endif + float base = (fabsf(f) * scale_to_inf) * scale_to_zero; + + const uint32_t w = fp32_to_bits(f); + const uint32_t shl1_w = w + w; + const uint32_t sign = w & UINT32_C(0x80000000); + uint32_t bias = shl1_w & UINT32_C(0xFF000000); + if (bias < UINT32_C(0x71000000)) { + bias = UINT32_C(0x71000000); + } + + base = fp32_from_bits((bias >> 1) + UINT32_C(0x07800000)) + base; + const uint32_t bits = fp32_to_bits(base); + const uint32_t exp_bits = (bits >> 13) & UINT32_C(0x00007C00); + const uint32_t mantissa_bits = bits & UINT32_C(0x00000FFF); + const uint32_t nonsign = exp_bits + mantissa_bits; + return (sign >> 16) | (shl1_w > UINT32_C(0xFF000000) ? UINT16_C(0x7E00) : nonsign); +} + +void mul_mat_vec_f16_0( + const uint16_t * src0, + const uint16_t * src1, + float * dst, + int nrows, + int ncols) { + + const int ncols8 = ncols & ~7; + + for (int i = 0; i < nrows; i++) { + __m256 sum = _mm256_setzero_ps(); + + const uint16_t * src0_row = src0 + i * ncols; + for (int j = 0; j < ncols8; j += 8) { + __m256 a = _mm256_cvtph_ps(_mm_loadu_si128((__m128i*)(src0_row + j))); + __m256 b = _mm256_cvtph_ps(_mm_loadu_si128((__m128i*)(src1 + j))); +#if defined(__FMA__) + sum = _mm256_fmadd_ps(a, b, sum); +#else + sum = _mm256_add_ps(_mm256_mul_ps(a, b), sum); +#endif + } + dst[i] = reduce_vector8_0(sum); + + for (int j = ncols8; j < ncols; j++) { + dst[i] += fp16_ieee_to_fp32_value(src0_row[j]) * fp16_ieee_to_fp32_value(src1[j]); + } + } +} + +void mul_mat_vec_f16_1( + const uint16_t * src0, + const uint16_t * src1, + float * dst, + int nrows, + int ncols) { + + const int ncols16 = ncols & ~15; + + for (int i = 0; i < nrows; i++) { + __m256 sum0 = _mm256_setzero_ps(); + __m256 sum1 = _mm256_setzero_ps(); + + const uint16_t * src0_row = src0 + i * ncols; + for (int j = 0; j < ncols16; j += 16) { + __m256 a0 = _mm256_cvtph_ps(_mm_loadu_si128((__m128i*)(src0_row + j + 0))); + __m256 a1 = _mm256_cvtph_ps(_mm_loadu_si128((__m128i*)(src0_row + j + 8))); + __m256 b0 = _mm256_cvtph_ps(_mm_loadu_si128((__m128i*)(src1 + j))); + __m256 b1 = _mm256_cvtph_ps(_mm_loadu_si128((__m128i*)(src1 + j + 8))); +#if defined(__FMA__) + sum0 = _mm256_fmadd_ps(a0, b0, sum0); + sum1 = _mm256_fmadd_ps(a1, b1, sum1); +#else + sum0 = _mm256_add_ps(_mm256_mul_ps(a0, b0), sum0); + sum1 = _mm256_add_ps(_mm256_mul_ps(a1, b1), sum1); +#endif + } + dst[i] = reduce_vector8_0(sum0) + reduce_vector8_0(sum1); + + for (int j = ncols16; j < ncols; j++) { + dst[i] += fp16_ieee_to_fp32_value(src0_row[j]) * fp16_ieee_to_fp32_value(src1[j]); + } + } +} + +void mul_mat_vec_f16_2( + const uint16_t * src0, + const uint16_t * src1, + float * dst, + int nrows, + int ncols) { + + const int ncols32 = ncols & ~31; + + for (int i = 0; i < nrows; i++) { + __m256 sum0 = _mm256_setzero_ps(); + __m256 sum1 = _mm256_setzero_ps(); + __m256 sum2 = _mm256_setzero_ps(); + __m256 sum3 = _mm256_setzero_ps(); + + const uint16_t * src0_row = src0 + i * ncols; + for (int j = 0; j < ncols32; j += 32) { + __m256 a0 = _mm256_cvtph_ps(_mm_loadu_si128((__m128i*)(src0_row + j + 0))); + __m256 a1 = _mm256_cvtph_ps(_mm_loadu_si128((__m128i*)(src0_row + j + 8))); + __m256 a2 = _mm256_cvtph_ps(_mm_loadu_si128((__m128i*)(src0_row + j + 16))); + __m256 a3 = _mm256_cvtph_ps(_mm_loadu_si128((__m128i*)(src0_row + j + 24))); + __m256 b0 = _mm256_cvtph_ps(_mm_loadu_si128((__m128i*)(src1 + j))); + __m256 b1 = _mm256_cvtph_ps(_mm_loadu_si128((__m128i*)(src1 + j + 8))); + __m256 b2 = _mm256_cvtph_ps(_mm_loadu_si128((__m128i*)(src1 + j + 16))); + __m256 b3 = _mm256_cvtph_ps(_mm_loadu_si128((__m128i*)(src1 + j + 24))); +#if defined(__FMA__) + sum0 = _mm256_fmadd_ps(a0, b0, sum0); + sum1 = _mm256_fmadd_ps(a1, b1, sum1); + sum2 = _mm256_fmadd_ps(a2, b2, sum2); + sum3 = _mm256_fmadd_ps(a3, b3, sum3); +#else + sum0 = _mm256_add_ps(_mm256_mul_ps(a0, b0), sum0); + sum1 = _mm256_add_ps(_mm256_mul_ps(a1, b1), sum1); + sum2 = _mm256_add_ps(_mm256_mul_ps(a2, b2), sum2); + sum3 = _mm256_add_ps(_mm256_mul_ps(a3, b3), sum3); +#endif + } + dst[i] = reduce_vector8_0(sum0) + reduce_vector8_0(sum1) + reduce_vector8_0(sum2) + reduce_vector8_0(sum3); + + for (int j = ncols32; j < ncols; j++) { + dst[i] += fp16_ieee_to_fp32_value(src0_row[j]) * fp16_ieee_to_fp32_value(src1[j]); + } + } +} + +void mul_mat_vec_f16_3( + const uint16_t * src0, + const float * src1, + float * dst, + int nrows, + int ncols) { + + const int ncols32 = ncols & ~31; + + for (int i = 0; i < nrows; i++) { + __m256 sum0 = _mm256_setzero_ps(); + __m256 sum1 = _mm256_setzero_ps(); + __m256 sum2 = _mm256_setzero_ps(); + __m256 sum3 = _mm256_setzero_ps(); + + const uint16_t * src0_row = src0 + i * ncols; + for (int j = 0; j < ncols32; j += 32) { + __m256 a0 = _mm256_cvtph_ps(_mm_loadu_si128((__m128i*)(src0_row + j + 0))); + __m256 a1 = _mm256_cvtph_ps(_mm_loadu_si128((__m128i*)(src0_row + j + 8))); + __m256 a2 = _mm256_cvtph_ps(_mm_loadu_si128((__m128i*)(src0_row + j + 16))); + __m256 a3 = _mm256_cvtph_ps(_mm_loadu_si128((__m128i*)(src0_row + j + 24))); + __m256 b0 = _mm256_loadu_ps(src1 + j); + __m256 b1 = _mm256_loadu_ps(src1 + j + 8); + __m256 b2 = _mm256_loadu_ps(src1 + j + 16); + __m256 b3 = _mm256_loadu_ps(src1 + j + 24); +#if defined(__FMA__) + sum0 = _mm256_fmadd_ps(a0, b0, sum0); + sum1 = _mm256_fmadd_ps(a1, b1, sum1); + sum2 = _mm256_fmadd_ps(a2, b2, sum2); + sum3 = _mm256_fmadd_ps(a3, b3, sum3); +#else + sum0 = _mm256_add_ps(_mm256_mul_ps(a0, b0), sum0); + sum1 = _mm256_add_ps(_mm256_mul_ps(a1, b1), sum1); + sum2 = _mm256_add_ps(_mm256_mul_ps(a2, b2), sum2); + sum3 = _mm256_add_ps(_mm256_mul_ps(a3, b3), sum3); +#endif + } + dst[i] = reduce_vector8_0(sum0) + reduce_vector8_0(sum1) + reduce_vector8_0(sum2) + reduce_vector8_0(sum3); + + for (int j = ncols32; j < ncols; j++) { + dst[i] += fp16_ieee_to_fp32_value(src0_row[j]) * fp16_ieee_to_fp32_value(src1[j]); + } + } +} + +uint64_t get_time_us() { + struct timeval tv; + gettimeofday(&tv, NULL); + return tv.tv_sec * 1000000 + tv.tv_usec; +} + +int main(int argc, const char ** argv) { + float * src0 = malloc(sizeof(float)*N*M); + float * src1 = malloc(sizeof(float)*M); + float * dst = malloc(sizeof(float)*N); + + //float * src0 = (float *)(aligned_alloc(64, sizeof(float)*N*M)); + //float * src1 = (float *)(aligned_alloc(64, sizeof(float)*M)); + //float * dst = (float *)(aligned_alloc(64, sizeof(float)*N)); + + for (int i = 0; i < N*M; i++) { + src0[i] = rand() / (float)RAND_MAX; + } + + for (int i = 0; i < M; i++) { + src1[i] = rand() / (float)RAND_MAX; + } + + // convert src0 and src1 to __fp16 + uint16_t * src0_fp16 = (uint16_t *)(malloc(sizeof(uint16_t)*N*M)); + uint16_t * src1_fp16 = (uint16_t *)(malloc(sizeof(uint16_t)*M)); + //uint16_t * src0_fp16 = (uint16_t *)(aligned_alloc(64, sizeof(uint16_t)*N*M)); + //uint16_t * src1_fp16 = (uint16_t *)(aligned_alloc(64, sizeof(uint16_t)*M)); + + { + const uint64_t t_start = get_time_us(); + + for (int i = 0; i < N*M; i++) { + src0_fp16[i] = fp16_ieee_from_fp32_value(src0[i]); + //printf("%f %f\n", src0[i], fp16_ieee_to_fp32_value(src0_fp16[i])); + //assert(!isnan(fp16_ieee_to_fp32_value(src0_fp16[i]))); + } + + for (int i = 0; i < M; i++) { + src1_fp16[i] = fp16_ieee_from_fp32_value(src1[i]); + } + + const uint64_t t_end = get_time_us(); + printf("convert time: %f ms\n", (t_end - t_start) / 1000.0); + } + + for (int i = 0; i < 16; ++i) { + printf("%f %f\n", src0[i], fp16_ieee_to_fp32_value(src0_fp16[i])); + } + + int method = 0; + if (argc > 1) { + method = atoi(argv[1]); + } + + const int nIter = 1000; + + const clock_t start = clock(); + const uint64_t start_us = get_time_us(); + + double iM = 1.0/M; + double sum = 0.0f; + for (int i = 0; i < nIter; i++) { + if (method == 0) { + mul_mat_vec_f32_0(src0, src1, dst, N, M); + } + + if (method == 1) { + mul_mat_vec_f32_1(src0, src1, dst, N, M); + } + + if (method == 2) { + mul_mat_vec_f32_2(src0, src1, dst, N, M); + } + + if (method == 3) { + mul_mat_vec_f16_0(src0_fp16, src1_fp16, dst, N, M); + } + + if (method == 4) { + mul_mat_vec_f16_1(src0_fp16, src1_fp16, dst, N, M); + } + + if (method == 5) { + mul_mat_vec_f16_2(src0_fp16, src1_fp16, dst, N, M); + } + + if (method == 6) { + mul_mat_vec_f16_3(src0_fp16, src1, dst, N, M); + } + } + + for (int i = 0; i < N; i++) { + sum += dst[i]*iM; + } + + { + const clock_t end = clock(); + const uint64_t end_us = get_time_us(); + printf("%s: elapsed ticks: %ld\n", __func__, end - start); + printf("%s: elapsed us: %ld\n", __func__, end_us - start_us); + } + + printf("%f\n", sum); + + free(src0); + free(src1); + free(dst); + + free(src0_fp16); + free(src1_fp16); + + return 0; +} diff --git a/ggml_old/tests/test-vec2.c b/ggml_old/tests/test-vec2.c new file mode 100644 index 0000000..465cf53 --- /dev/null +++ b/ggml_old/tests/test-vec2.c @@ -0,0 +1,268 @@ +#include +#include +#include +#include +#include +#include + +#include + +#include + +const int N = 1 << 12; +const int M = 1 << 12; + +// +// naive implementation +// + +void mul_mat_vec_f32_0( + const float * restrict src0, + const float * restrict src1, + float * dst, + int nrows, + int ncols) { + for (int i = 0; i < nrows; i++) { + float sum = 0.0f; + for (int j = 0; j < ncols; j++) { + sum += src0[i*ncols + j]*src1[j]; + } + dst[i] = sum; + } +} + +void mul_mat_vec_f16_0( + const __fp16 * src0, + const __fp16 * src1, + float * dst, + int nrows, + int ncols) { + + const int n64 = ncols & ~63; + + for (int r = 0; r < nrows; r++) { + float sumf = 0.0; + + float16x8_t sum0 = vdupq_n_f16(0.0f); + float16x8_t sum1 = vdupq_n_f16(0.0f); + float16x8_t sum2 = vdupq_n_f16(0.0f); + float16x8_t sum3 = vdupq_n_f16(0.0f); + float16x8_t sum4 = vdupq_n_f16(0.0f); + float16x8_t sum5 = vdupq_n_f16(0.0f); + float16x8_t sum6 = vdupq_n_f16(0.0f); + float16x8_t sum7 = vdupq_n_f16(0.0f); + + float16x8_t x0, x1, x2, x3, x4, x5, x6, x7; + float16x8_t y0, y1, y2, y3, y4, y5, y6, y7; + + const __fp16 * restrict p0 = src0 + r*ncols; + + for (int i = 0; i < n64; i += 64) { + x0 = vld1q_f16(p0 + i + 0 ); + x1 = vld1q_f16(p0 + i + 8 ); + x2 = vld1q_f16(p0 + i + 16); + x3 = vld1q_f16(p0 + i + 24); + x4 = vld1q_f16(p0 + i + 32); + x5 = vld1q_f16(p0 + i + 40); + x6 = vld1q_f16(p0 + i + 48); + x7 = vld1q_f16(p0 + i + 56); + + y0 = vld1q_f16(src1 + i + 0 ); + y1 = vld1q_f16(src1 + i + 8 ); + y2 = vld1q_f16(src1 + i + 16); + y3 = vld1q_f16(src1 + i + 24); + y4 = vld1q_f16(src1 + i + 32); + y5 = vld1q_f16(src1 + i + 40); + y6 = vld1q_f16(src1 + i + 48); + y7 = vld1q_f16(src1 + i + 56); + + sum0 = vfmaq_f16(sum0, x0, y0); + sum1 = vfmaq_f16(sum1, x1, y1); + sum2 = vfmaq_f16(sum2, x2, y2); + sum3 = vfmaq_f16(sum3, x3, y3); + sum4 = vfmaq_f16(sum4, x4, y4); + sum5 = vfmaq_f16(sum5, x5, y5); + sum6 = vfmaq_f16(sum6, x6, y6); + sum7 = vfmaq_f16(sum7, x7, y7); + } + + // TODO: F16 - better way to reduce this ? + float16x8_t sum = vaddq_f16(sum0, sum1); + + sum = vaddq_f16(sum, sum2); + sum = vaddq_f16(sum, sum3); + sum = vaddq_f16(sum, sum4); + sum = vaddq_f16(sum, sum5); + sum = vaddq_f16(sum, sum6); + sum = vaddq_f16(sum, sum7); + + sumf += sum[0] + sum[1] + sum[2] + sum[3] + sum[4] + sum[5] + sum[6] + sum[7]; + + for (int j = n64; j < n64; j++) { + sumf += src0[r*ncols + j]*src1[j]; + } + + dst[r] = sumf; + } +} + +void mul_mat_vec_f16_1( + const __fp16 * src0, + const __fp16 * src1, + float * dst, + int nrows, + int ncols) { + + const int n32 = ncols & ~31; + + for (int r = 0; r < nrows; r++) { + float sumf = 0.0; + + float16x8_t sum0 = vdupq_n_f16(0.0f); + float16x8_t sum1 = vdupq_n_f16(0.0f); + float16x8_t sum2 = vdupq_n_f16(0.0f); + float16x8_t sum3 = vdupq_n_f16(0.0f); + + float16x8_t x0, x1, x2, x3; + float16x8_t y0, y1, y2, y3; + + const __fp16 * restrict p0 = src0 + r*ncols; + + for (int i = 0; i < n32; i += 32) { + x0 = vld1q_f16(p0 + i + 0 ); + x1 = vld1q_f16(p0 + i + 8 ); + x2 = vld1q_f16(p0 + i + 16); + x3 = vld1q_f16(p0 + i + 24); + + y0 = vld1q_f16(src1 + i + 0 ); + y1 = vld1q_f16(src1 + i + 8 ); + y2 = vld1q_f16(src1 + i + 16); + y3 = vld1q_f16(src1 + i + 24); + + sum0 = vfmaq_f16(sum0, x0, y0); + sum1 = vfmaq_f16(sum1, x1, y1); + sum2 = vfmaq_f16(sum2, x2, y2); + sum3 = vfmaq_f16(sum3, x3, y3); + } + + // reduce sum0..sum3 to sum0 + sum0 = vaddq_f16(sum0, sum1); + sum2 = vaddq_f16(sum2, sum3); + sum0 = vaddq_f16(sum0, sum2); + + // load sum0 into 2 float32x4_t + float32x4_t sum0f32 = vcvt_f32_f16(vget_low_f16(sum0)); + float32x4_t sum1f32 = vcvt_f32_f16(vget_high_f16(sum0)); + + // reduce sum0f32 and sum1f32 to sumf + sum0f32 = vaddq_f32(sum0f32, sum1f32); + + float32x2_t sumf32 = vadd_f32(vget_low_f32(sum0f32), vget_high_f32(sum0f32)); + sumf = vget_lane_f32(sumf32, 0) + vget_lane_f32(sumf32, 1); + + //sumf = sum0[0] + sum0[1] + sum0[2] + sum0[3] + sum0[4] + sum0[5] + sum0[6] + sum0[7]; + + for (int j = n32; j < n32; j++) { + sumf += src0[r*ncols + j]*src1[j]; + } + + dst[r] = sumf; + } +} + +uint64_t get_time_us() { + struct timeval tv; + gettimeofday(&tv, NULL); + return tv.tv_sec * 1000000 + tv.tv_usec; +} + +int main(int argc, const char ** argv) { + float * src0 = malloc(sizeof(float)*N*M); + float * src1 = malloc(sizeof(float)*M); + float * dst = malloc(sizeof(float)*N); + + //float * src0 = (float *)(aligned_alloc(64, sizeof(float)*N*M)); + //float * src1 = (float *)(aligned_alloc(64, sizeof(float)*M)); + //float * dst = (float *)(aligned_alloc(64, sizeof(float)*N)); + + for (int i = 0; i < N*M; i++) { + src0[i] = rand() / (float)RAND_MAX; + } + + for (int i = 0; i < M; i++) { + src1[i] = rand() / (float)RAND_MAX; + } + + // convert src0 and src1 to __fp16 + __fp16 * src0_fp16 = (__fp16 *)(malloc(sizeof(__fp16)*N*M)); + __fp16 * src1_fp16 = (__fp16 *)(malloc(sizeof(__fp16)*M)); + + { + const uint64_t t_start = get_time_us(); + + for (int i = 0; i < N*M; i++) { + src0_fp16[i] = src0[i]; + //printf("%f %f\n", src0[i], src0_fp16[i]); + //assert(!isnan(src0_fp16[i])); + } + + for (int i = 0; i < M; i++) { + src1_fp16[i] = src1[i]; + } + + const uint64_t t_end = get_time_us(); + printf("convert time: %f ms\n", (t_end - t_start) / 1000.0); + } + + for (int i = 0; i < 16; ++i) { + printf("%f %f\n", src0[i], src0_fp16[i]); + } + + int method = 0; + if (argc > 1) { + method = atoi(argv[1]); + } + + const int nIter = 1000; + + const clock_t start = clock(); + const uint64_t start_us = get_time_us(); + + double iM = 1.0/M; + double sum = 0.0f; + for (int i = 0; i < nIter; i++) { + if (method == 0) { + mul_mat_vec_f32_0(src0, src1, dst, N, M); + } + + if (method == 1) { + mul_mat_vec_f16_0(src0_fp16, src1_fp16, dst, N, M); + } + + if (method == 2) { + mul_mat_vec_f16_1(src0_fp16, src1_fp16, dst, N, M); + } + } + + for (int i = 0; i < N; i++) { + sum += dst[i]*iM; + } + + { + const clock_t end = clock(); + const uint64_t end_us = get_time_us(); + printf("%s: elapsed ticks: %ld\n", __func__, end - start); + printf("%s: elapsed us: %llu / %f ms\n", __func__, end_us - start_us, (end_us - start_us) / 1000.0 / nIter); + } + + printf("%f\n", sum); + + free(src0); + free(src1); + free(dst); + + free(src0_fp16); + free(src1_fp16); + + return 0; +} diff --git a/ggml_old/tests/test0.c b/ggml_old/tests/test0.c new file mode 100644 index 0000000..2844da4 --- /dev/null +++ b/ggml_old/tests/test0.c @@ -0,0 +1,43 @@ +#include "ggml/ggml.h" + +#include +#include +#include + +int main(int argc, const char ** argv) { + struct ggml_init_params params = { + .mem_size = 128*1024*1024, + .mem_buffer = NULL, + .no_alloc = false, + }; + + struct ggml_context * ctx0 = ggml_init(params); + + struct ggml_tensor * t1 = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 10); + struct ggml_tensor * t2 = ggml_new_tensor_2d(ctx0, GGML_TYPE_I16, 10, 20); + struct ggml_tensor * t3 = ggml_new_tensor_3d(ctx0, GGML_TYPE_I32, 10, 20, 30); + + assert(t1->n_dims == 1); + assert(t1->ne[0] == 10); + assert(t1->nb[1] == 10*sizeof(float)); + + assert(t2->n_dims == 2); + assert(t2->ne[0] == 10); + assert(t2->ne[1] == 20); + assert(t2->nb[1] == 10*sizeof(int16_t)); + assert(t2->nb[2] == 10*20*sizeof(int16_t)); + + assert(t3->n_dims == 3); + assert(t3->ne[0] == 10); + assert(t3->ne[1] == 20); + assert(t3->ne[2] == 30); + assert(t3->nb[1] == 10*sizeof(int32_t)); + assert(t3->nb[2] == 10*20*sizeof(int32_t)); + assert(t3->nb[3] == 10*20*30*sizeof(int32_t)); + + ggml_print_objects(ctx0); + + ggml_free(ctx0); + + return 0; +} diff --git a/ggml_old/tests/test1.c b/ggml_old/tests/test1.c new file mode 100644 index 0000000..a69e65a --- /dev/null +++ b/ggml_old/tests/test1.c @@ -0,0 +1,437 @@ +#include "ggml/ggml.h" + +#include +#include +#include + +int main(int argc, const char ** argv) { + struct ggml_init_params params = { + .mem_size = 128*1024*1024, + .mem_buffer = NULL, + .no_alloc = false, + }; + + struct ggml_context * ctx0 = ggml_init(params); + + { + struct ggml_tensor * x = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); + + ggml_set_param(ctx0, x); + + struct ggml_tensor * a = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); + struct ggml_tensor * b = ggml_mul(ctx0, x, x); + struct ggml_tensor * f = ggml_mul(ctx0, b, a); + + // a*x^2 + // 2*a*x + + ggml_print_objects(ctx0); + + struct ggml_cgraph gf = ggml_build_forward(f); + struct ggml_cgraph gb = ggml_build_backward(ctx0, &gf, false); + + ggml_set_f32(x, 2.0f); + ggml_set_f32(a, 3.0f); + + ggml_graph_reset(&gf); + ggml_set_f32(f->grad, 1.0f); + + ggml_graph_compute(ctx0, &gb); + + printf("f = %f\n", ggml_get_f32_1d(f, 0)); + printf("df/dx = %f\n", ggml_get_f32_1d(x->grad, 0)); + + assert(ggml_get_f32_1d(f, 0) == 12.0f); + assert(ggml_get_f32_1d(x->grad, 0) == 12.0f); + + ggml_set_f32(x, 3.0f); + + ggml_graph_reset(&gf); + ggml_set_f32(f->grad, 1.0f); + + ggml_graph_compute(ctx0, &gb); + + printf("f = %f\n", ggml_get_f32_1d(f, 0)); + printf("df/dx = %f\n", ggml_get_f32_1d(x->grad, 0)); + + assert(ggml_get_f32_1d(f, 0) == 27.0f); + assert(ggml_get_f32_1d(x->grad, 0) == 18.0f); + + ggml_graph_dump_dot(&gf, NULL, "test1-1-forward.dot"); + ggml_graph_dump_dot(&gb, &gf, "test1-1-backward.dot"); + } + + /////////////////////////////////////////////////////////////// + + { + struct ggml_tensor * x1 = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); + struct ggml_tensor * x2 = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); + struct ggml_tensor * x3 = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); + + ggml_set_f32(x1, 3.0f); + ggml_set_f32(x2, 1.0f); + ggml_set_f32(x3, 0.0f); + + ggml_set_param(ctx0, x1); + ggml_set_param(ctx0, x2); + + struct ggml_tensor * y = ggml_add(ctx0, ggml_mul(ctx0, x1, x1), ggml_mul(ctx0, x1, x2)); + + struct ggml_cgraph gf = ggml_build_forward(y); + struct ggml_cgraph gb = ggml_build_backward(ctx0, &gf, false); + + ggml_graph_reset(&gf); + ggml_set_f32(y->grad, 1.0f); + + ggml_graph_compute(ctx0, &gb); + + printf("y = %f\n", ggml_get_f32_1d(y, 0)); + printf("df/dx1 = %f\n", ggml_get_f32_1d(x1->grad, 0)); + printf("df/dx2 = %f\n", ggml_get_f32_1d(x2->grad, 0)); + + assert(ggml_get_f32_1d(y, 0) == 12.0f); + assert(ggml_get_f32_1d(x1->grad, 0) == 7.0f); + assert(ggml_get_f32_1d(x2->grad, 0) == 3.0f); + + struct ggml_tensor * g1 = x1->grad; + struct ggml_tensor * g2 = x2->grad; + + struct ggml_cgraph gbb = ggml_build_backward(ctx0, &gb, true); + + ggml_graph_reset(&gb); + ggml_set_f32(g1->grad, 1.0f); + ggml_set_f32(g2->grad, 1.0f); + + ggml_graph_compute(ctx0, &gbb); + + printf("H * [1, 1] = [ %f %f ]\n", ggml_get_f32_1d(x1->grad, 0), ggml_get_f32_1d(x2->grad, 0)); + + assert(ggml_get_f32_1d(x1->grad, 0) == 3.0f); + assert(ggml_get_f32_1d(x2->grad, 0) == 1.0f); + + ggml_graph_dump_dot(&gf, NULL, "test1-2-forward.dot"); + ggml_graph_dump_dot(&gb, &gf, "test1-2-backward.dot"); + } + + /////////////////////////////////////////////////////////////// + + { + struct ggml_tensor * x1 = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); + struct ggml_tensor * x2 = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); + + ggml_set_param(ctx0, x1); + ggml_set_param(ctx0, x2); + + struct ggml_tensor * y = ggml_mul(ctx0, ggml_add(ctx0, ggml_mul(ctx0, x1, x1), ggml_mul(ctx0, x1, x2)), x1); + + struct ggml_cgraph gf = ggml_build_forward(y); + struct ggml_cgraph gb = ggml_build_backward(ctx0, &gf, false); + + ggml_set_f32(x1, 3.0f); + ggml_set_f32(x2, 4.0f); + + ggml_graph_reset(&gf); + ggml_set_f32(y->grad, 1.0f); + + ggml_graph_compute(ctx0, &gb); + + printf("y = %f\n", ggml_get_f32_1d(y, 0)); + printf("df/dx1 = %f\n", ggml_get_f32_1d(x1->grad, 0)); + printf("df/dx2 = %f\n", ggml_get_f32_1d(x2->grad, 0)); + + assert(ggml_get_f32_1d(y, 0) == 63.0f); + assert(ggml_get_f32_1d(x1->grad, 0) == 51.0f); + assert(ggml_get_f32_1d(x2->grad, 0) == 9.0f); + + ggml_graph_dump_dot(&gf, NULL, "test1-3-forward.dot"); + ggml_graph_dump_dot(&gb, &gf, "test1-3-backward.dot"); + } + + /////////////////////////////////////////////////////////////// + + { + struct ggml_tensor * x1 = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); + struct ggml_tensor * x2 = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); + struct ggml_tensor * x3 = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 1); + + ggml_set_param(ctx0, x1); + ggml_set_param(ctx0, x2); + ggml_set_param(ctx0, x3); + + struct ggml_tensor * y = ggml_mul(ctx0, ggml_mul(ctx0, ggml_mul(ctx0, x1, x1), ggml_mul(ctx0, x2, x2)), x3); + + struct ggml_cgraph gf = ggml_build_forward(y); + struct ggml_cgraph gb = ggml_build_backward(ctx0, &gf, false); + + ggml_set_f32(x1, 1.0f); + ggml_set_f32(x2, 2.0f); + ggml_set_f32(x3, 3.0f); + + ggml_graph_reset(&gf); + ggml_set_f32(y->grad, 1.0f); + + ggml_graph_compute(ctx0, &gb); + + printf("y = %f\n", ggml_get_f32_1d(y, 0)); + printf("df/dx1 = %f\n", ggml_get_f32_1d(x1->grad, 0)); + printf("df/dx2 = %f\n", ggml_get_f32_1d(x2->grad, 0)); + printf("df/dx3 = %f\n", ggml_get_f32_1d(x3->grad, 0)); + + assert(ggml_get_f32_1d(y, 0) == 12.0f); + assert(ggml_get_f32_1d(x1->grad, 0) == 24.0f); + assert(ggml_get_f32_1d(x2->grad, 0) == 12.0f); + assert(ggml_get_f32_1d(x3->grad, 0) == 4.0f); + + struct ggml_tensor * g1 = x1->grad; + struct ggml_tensor * g2 = x2->grad; + struct ggml_tensor * g3 = x3->grad; + + struct ggml_cgraph gbb = ggml_build_backward(ctx0, &gb, true); + + ggml_graph_reset(&gb); + ggml_set_f32(g1->grad, 1.0f); + ggml_set_f32(g2->grad, 1.0f); + ggml_set_f32(g3->grad, 1.0f); + + ggml_graph_compute(ctx0, &gbb); + + printf("H * [1, 1, 1] = [ %f %f %f ]\n", + ggml_get_f32_1d(x1->grad, 0), + ggml_get_f32_1d(x2->grad, 0), + ggml_get_f32_1d(x3->grad, 0)); + + assert(ggml_get_f32_1d(x1->grad, 0) == 56.0f); + assert(ggml_get_f32_1d(x2->grad, 0) == 34.0f); + assert(ggml_get_f32_1d(x3->grad, 0) == 12.0f); + + ggml_graph_dump_dot(&gf, NULL, "test1-4-forward.dot"); + ggml_graph_dump_dot(&gb, &gf, "test1-4-backward.dot"); + } + + /////////////////////////////////////////////////////////////// + + { + struct ggml_tensor * x1 = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 3); + struct ggml_tensor * x2 = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 3); + + ggml_set_param(ctx0, x1); + ggml_set_param(ctx0, x2); + + struct ggml_tensor * y = ggml_sum(ctx0, ggml_mul(ctx0, x1, x2)); + + struct ggml_cgraph gf = ggml_build_forward(y); + struct ggml_cgraph gb = ggml_build_backward(ctx0, &gf, false); + + ggml_set_f32(x1, 3.0f); + ggml_set_f32(x2, 5.0f); + + ggml_graph_reset(&gf); + ggml_set_f32(y->grad, 1.0f); + + ggml_graph_compute(ctx0, &gb); + + printf("y = %f\n", ggml_get_f32_1d(y, 0)); + printf("df/dx1 = %f %f %f\n", + ggml_get_f32_1d(x1->grad, 0), + ggml_get_f32_1d(x1->grad, 1), + ggml_get_f32_1d(x1->grad, 2)); + printf("df/dx2 = %f %f %f\n", + ggml_get_f32_1d(x2->grad, 0), + ggml_get_f32_1d(x2->grad, 1), + ggml_get_f32_1d(x2->grad, 2)); + + assert(ggml_get_f32_1d(y, 0) == 45.0f); + assert(ggml_get_f32_1d(x1->grad, 0) == 5.0f); + assert(ggml_get_f32_1d(x2->grad, 0) == 3.0f); + assert(ggml_get_f32_1d(x1->grad, 1) == 5.0f); + assert(ggml_get_f32_1d(x2->grad, 1) == 3.0f); + assert(ggml_get_f32_1d(x1->grad, 2) == 5.0f); + assert(ggml_get_f32_1d(x2->grad, 2) == 3.0f); + + ggml_graph_dump_dot(&gf, NULL, "test1-5-forward.dot"); + ggml_graph_dump_dot(&gb, &gf, "test1-5-backward.dot"); + } + + /////////////////////////////////////////////////////////////// + + { + struct ggml_tensor * x1 = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 3); + struct ggml_tensor * x2 = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 3); + + ggml_set_param(ctx0, x1); + ggml_set_param(ctx0, x2); + + struct ggml_tensor * y = + ggml_sum(ctx0, + ggml_add(ctx0, + ggml_mul(ctx0, x1, x2), + ggml_mul(ctx0, + ggml_repeat(ctx0, ggml_new_f32(ctx0, -2.0f), x1), + ggml_mul(ctx0, x1, x1) + ) + ) + ); + + struct ggml_cgraph gf = ggml_build_forward(y); + struct ggml_cgraph gb = ggml_build_backward(ctx0, &gf, false); + + ggml_set_f32(x1, 3.0f); + ggml_set_f32(x2, 5.0f); + + ggml_graph_reset(&gf); + ggml_set_f32(y->grad, 1.0f); + + ggml_graph_compute(ctx0, &gb); + + printf("y = %f\n", ggml_get_f32_1d(y, 0)); + printf("df/dx1 = %f %f %f\n", + ggml_get_f32_1d(x1->grad, 0), + ggml_get_f32_1d(x1->grad, 1), + ggml_get_f32_1d(x1->grad, 2)); + printf("df/dx2 = %f %f %f\n", + ggml_get_f32_1d(x2->grad, 0), + ggml_get_f32_1d(x2->grad, 1), + ggml_get_f32_1d(x2->grad, 2)); + + assert(ggml_get_f32_1d(y, 0) == -9.0f); + assert(ggml_get_f32_1d(x1->grad, 0) == -7.0f); + assert(ggml_get_f32_1d(x1->grad, 1) == -7.0f); + assert(ggml_get_f32_1d(x1->grad, 2) == -7.0f); + assert(ggml_get_f32_1d(x2->grad, 0) == 3.0f); + assert(ggml_get_f32_1d(x2->grad, 1) == 3.0f); + assert(ggml_get_f32_1d(x2->grad, 2) == 3.0f); + + ggml_graph_dump_dot(&gf, NULL, "test1-6-forward.dot"); + ggml_graph_dump_dot(&gb, &gf, "test1-6-backward.dot"); + } + + /////////////////////////////////////////////////////////////// + + { + struct ggml_tensor * x1 = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 3); + struct ggml_tensor * x2 = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 3); + + ggml_set_param(ctx0, x1); + ggml_set_param(ctx0, x2); + + struct ggml_tensor * y = + ggml_sum(ctx0, + ggml_sub(ctx0, + ggml_mul(ctx0, x1, x2), + ggml_mul(ctx0, + ggml_mul(ctx0, x1, x1), + ggml_repeat(ctx0, ggml_new_f32(ctx0, -2.0f), x1) + ) + ) + ); + + struct ggml_cgraph gf = ggml_build_forward(y); + struct ggml_cgraph gb = ggml_build_backward(ctx0, &gf, false); + + ggml_set_f32(x1, 3.0f); + ggml_set_f32(x2, 5.0f); + + ggml_graph_reset(&gf); + ggml_set_f32(y->grad, 1.0f); + + ggml_graph_compute(ctx0, &gb); + + printf("y = %f\n", ggml_get_f32_1d(y, 0)); + printf("df/dx1 = %f %f %f\n", + ggml_get_f32_1d(x1->grad, 0), + ggml_get_f32_1d(x1->grad, 1), + ggml_get_f32_1d(x1->grad, 2)); + printf("df/dx2 = %f %f %f\n", + ggml_get_f32_1d(x2->grad, 0), + ggml_get_f32_1d(x2->grad, 1), + ggml_get_f32_1d(x2->grad, 2)); + + assert(ggml_get_f32_1d(y, 0) == 99.0f); + assert(ggml_get_f32_1d(x1->grad, 0) == 17.0f); + assert(ggml_get_f32_1d(x1->grad, 1) == 17.0f); + assert(ggml_get_f32_1d(x1->grad, 2) == 17.0f); + assert(ggml_get_f32_1d(x2->grad, 0) == 3.0f); + assert(ggml_get_f32_1d(x2->grad, 1) == 3.0f); + assert(ggml_get_f32_1d(x2->grad, 2) == 3.0f); + + ggml_graph_dump_dot(&gf, NULL, "test1-7-forward.dot"); + ggml_graph_dump_dot(&gb, &gf, "test1-7-backward.dot"); + } + + /////////////////////////////////////////////////////////////// + + { + struct ggml_tensor * x1 = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 3); + struct ggml_tensor * x2 = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, 3); + + ggml_set_param(ctx0, x1); + ggml_set_param(ctx0, x2); + + struct ggml_tensor * y = + ggml_abs(ctx0, + ggml_sub(ctx0, x1, x2) + ); + + struct ggml_cgraph gf = ggml_build_forward(y); + struct ggml_cgraph gb = ggml_build_backward(ctx0, &gf, false); + + ggml_set_f32(x1, 3.0f); + ggml_set_f32(x2, 5.0f); + + ggml_graph_reset(&gf); + ggml_set_f32(y->grad, 1.0f); + + ggml_graph_compute(ctx0, &gb); + + printf("y = %f\n", ggml_get_f32_1d(y, 0)); + printf("df/dx1 = %f %f %f\n", + ggml_get_f32_1d(x1->grad, 0), + ggml_get_f32_1d(x1->grad, 1), + ggml_get_f32_1d(x1->grad, 2)); + printf("df/dx2 = %f %f %f\n", + ggml_get_f32_1d(x2->grad, 0), + ggml_get_f32_1d(x2->grad, 1), + ggml_get_f32_1d(x2->grad, 2)); + + assert(ggml_get_f32_1d(y, 0) == 2.0f); + assert(ggml_get_f32_1d(x1->grad, 0) == -1.0f); + assert(ggml_get_f32_1d(x1->grad, 1) == -1.0f); + assert(ggml_get_f32_1d(x1->grad, 2) == -1.0f); + assert(ggml_get_f32_1d(x2->grad, 0) == 1.0f); + assert(ggml_get_f32_1d(x2->grad, 1) == 1.0f); + assert(ggml_get_f32_1d(x2->grad, 2) == 1.0f); + + ggml_set_f32(x1, 7.0f); + ggml_set_f32(x2, 5.0f); + + ggml_graph_reset(&gf); + ggml_set_f32(y->grad, 1.0f); + + ggml_graph_compute(ctx0, &gb); + + printf("y = %f\n", ggml_get_f32_1d(y, 0)); + printf("df/dx1 = %f %f %f\n", + ggml_get_f32_1d(x1->grad, 0), + ggml_get_f32_1d(x1->grad, 1), + ggml_get_f32_1d(x1->grad, 2)); + printf("df/dx2 = %f %f %f\n", + ggml_get_f32_1d(x2->grad, 0), + ggml_get_f32_1d(x2->grad, 1), + ggml_get_f32_1d(x2->grad, 2)); + + assert(ggml_get_f32_1d(y, 0) == 2.0f); + assert(ggml_get_f32_1d(x1->grad, 0) == 1.0f); + assert(ggml_get_f32_1d(x1->grad, 1) == 1.0f); + assert(ggml_get_f32_1d(x1->grad, 2) == 1.0f); + assert(ggml_get_f32_1d(x2->grad, 0) == -1.0f); + assert(ggml_get_f32_1d(x2->grad, 1) == -1.0f); + assert(ggml_get_f32_1d(x2->grad, 2) == -1.0f); + + ggml_graph_dump_dot(&gf, NULL, "test1-8-forward.dot"); + ggml_graph_dump_dot(&gb, &gf, "test1-8-backward.dot"); + } + + ggml_free(ctx0); + + return 0; +} diff --git a/ggml_old/tests/test2.c b/ggml_old/tests/test2.c new file mode 100644 index 0000000..4e03d98 --- /dev/null +++ b/ggml_old/tests/test2.c @@ -0,0 +1,177 @@ +#include "ggml/ggml.h" + +#include +#include +#include +#include + +bool is_close(float a, float b, float epsilon) { + return fabs(a - b) < epsilon; +} + +int main(int argc, const char ** argv) { + struct ggml_init_params params = { + .mem_size = 128*1024*1024, + .mem_buffer = NULL, + .no_alloc = false, + }; + + //struct ggml_opt_params opt_params = ggml_opt_default_params(GGML_OPT_LBFGS); + + struct ggml_opt_params opt_params = ggml_opt_default_params(GGML_OPT_ADAM); + opt_params.adam.alpha = 0.01f; + + // original threads: 8 + int nthreads = 8; + const char *env = getenv("GGML_NTHREADS"); + if (env != NULL) { + nthreads = atoi(env); + } + if (argc > 1) { + nthreads = atoi(argv[1]); + } + opt_params.n_threads = nthreads; + printf("test2: n_threads:%d\n", opt_params.n_threads); + + const float xi[] = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f , 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, }; + float yi[] = { 15.0f, 25.0f, 35.0f, 45.0f, 55.0f, 65.0f, 75.0f, 85.0f, 95.0f, 105.0f, }; + + const int n = sizeof(xi)/sizeof(xi[0]); + + struct ggml_context * ctx0 = ggml_init(params); + + struct ggml_tensor * x = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, n); + struct ggml_tensor * y = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, n); + + for (int i = 0; i < n; i++) { + ((float *) x->data)[i] = xi[i]; + ((float *) y->data)[i] = yi[i]; + } + + { + struct ggml_tensor * t0 = ggml_new_f32(ctx0, 0.0f); + struct ggml_tensor * t1 = ggml_new_f32(ctx0, 0.0f); + + // initialize auto-diff parameters: + ggml_set_param(ctx0, t0); + ggml_set_param(ctx0, t1); + + // f = sum_i[(t0 + t1*x_i - y_i)^2]/(2n) + struct ggml_tensor * f = + ggml_div(ctx0, + ggml_sum(ctx0, + ggml_sqr(ctx0, + ggml_sub(ctx0, + ggml_add(ctx0, + ggml_mul(ctx0, x, ggml_repeat(ctx0, t1, x)), + ggml_repeat(ctx0, t0, x)), + y) + ) + ), + ggml_new_f32(ctx0, 2.0f*n)); + + enum ggml_opt_result res = ggml_opt(NULL, opt_params, f); + + assert(res == GGML_OPT_OK); + + printf("t0 = %f\n", ggml_get_f32_1d(t0, 0)); + printf("t1 = %f\n", ggml_get_f32_1d(t1, 0)); + + assert(is_close(ggml_get_f32_1d(t0, 0), 5.0f, 1e-3f)); + assert(is_close(ggml_get_f32_1d(t1, 0), 10.0f, 1e-3f)); + } + + { + struct ggml_tensor * t0 = ggml_new_f32(ctx0, -1.0f); + struct ggml_tensor * t1 = ggml_new_f32(ctx0, 9.0f); + + ggml_set_param(ctx0, t0); + ggml_set_param(ctx0, t1); + + // f = 0.5*sum_i[abs(t0 + t1*x_i - y_i)]/n + struct ggml_tensor * f = + ggml_mul(ctx0, + ggml_new_f32(ctx0, 1.0/(2*n)), + ggml_sum(ctx0, + ggml_abs(ctx0, + ggml_sub(ctx0, + ggml_add(ctx0, + ggml_mul(ctx0, x, ggml_repeat(ctx0, t1, x)), + ggml_repeat(ctx0, t0, x)), + y) + ) + ) + ); + + + enum ggml_opt_result res = ggml_opt(NULL, opt_params, f); + + assert(res == GGML_OPT_OK); + assert(is_close(ggml_get_f32_1d(t0, 0), 5.0f, 1e-2f)); + assert(is_close(ggml_get_f32_1d(t1, 0), 10.0f, 1e-2f)); + } + + { + struct ggml_tensor * t0 = ggml_new_f32(ctx0, 5.0f); + struct ggml_tensor * t1 = ggml_new_f32(ctx0, -4.0f); + + ggml_set_param(ctx0, t0); + ggml_set_param(ctx0, t1); + + // f = t0^2 + t1^2 + struct ggml_tensor * f = + ggml_add(ctx0, + ggml_sqr(ctx0, t0), + ggml_sqr(ctx0, t1) + ); + + enum ggml_opt_result res = ggml_opt(NULL, opt_params, f); + + assert(res == GGML_OPT_OK); + assert(is_close(ggml_get_f32_1d(f, 0), 0.0f, 1e-3f)); + assert(is_close(ggml_get_f32_1d(t0, 0), 0.0f, 1e-3f)); + assert(is_close(ggml_get_f32_1d(t1, 0), 0.0f, 1e-3f)); + } + + ///////////////////////////////////////// + + { + struct ggml_tensor * t0 = ggml_new_f32(ctx0, -7.0f); + struct ggml_tensor * t1 = ggml_new_f32(ctx0, 8.0f); + + ggml_set_param(ctx0, t0); + ggml_set_param(ctx0, t1); + + // f = (t0 + 2*t1 - 7)^2 + (2*t0 + t1 - 5)^2 + struct ggml_tensor * f = + ggml_add(ctx0, + ggml_sqr(ctx0, + ggml_sub(ctx0, + ggml_add(ctx0, + t0, + ggml_mul(ctx0, t1, ggml_new_f32(ctx0, 2.0f))), + ggml_new_f32(ctx0, 7.0f) + ) + ), + ggml_sqr(ctx0, + ggml_sub(ctx0, + ggml_add(ctx0, + ggml_mul(ctx0, t0, ggml_new_f32(ctx0, 2.0f)), + t1), + ggml_new_f32(ctx0, 5.0f) + ) + ) + ); + + enum ggml_opt_result res = ggml_opt(NULL, opt_params, f); + + assert(res == GGML_OPT_OK); + assert(is_close(ggml_get_f32_1d(f, 0), 0.0f, 1e-3f)); + assert(is_close(ggml_get_f32_1d(t0, 0), 1.0f, 1e-3f)); + assert(is_close(ggml_get_f32_1d(t1, 0), 3.0f, 1e-3f)); + } + + ggml_free(ctx0); + + return 0; +} diff --git a/ggml_old/tests/test3.c b/ggml_old/tests/test3.c new file mode 100644 index 0000000..9209e94 --- /dev/null +++ b/ggml_old/tests/test3.c @@ -0,0 +1,96 @@ +#include "ggml/ggml.h" + +#include +#include +#include +#include + +bool is_close(float a, float b, float epsilon) { + return fabs(a - b) < epsilon; +} + +int main(int argc, const char ** argv) { + struct ggml_init_params params = { + .mem_size = 1024*1024*1024, + .mem_buffer = NULL, + .no_alloc = false, + }; + + struct ggml_opt_params opt_params = ggml_opt_default_params(GGML_OPT_LBFGS); + //struct ggml_opt_params opt_params = ggml_opt_default_params(GGML_OPT_ADAM); + + opt_params.n_threads = (argc > 1) ? atoi(argv[1]) : 8; + + const int NP = 1 << 12; + const int NF = 1 << 8; + + struct ggml_context * ctx0 = ggml_init(params); + + struct ggml_tensor * F = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, NF, NP); + struct ggml_tensor * l = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, NP); + + // regularization weight + struct ggml_tensor * lambda = ggml_new_f32(ctx0, 1e-5f); + + srand(0); + + for (int j = 0; j < NP; j++) { + const float ll = j < NP/2 ? 1.0f : -1.0f; + ((float *)l->data)[j] = ll; + + for (int i = 0; i < NF; i++) { + ((float *)F->data)[j*NF + i] = ((ll > 0 && i < NF/2 ? 1.0f : ll < 0 && i >= NF/2 ? 1.0f : 0.0f) + ((float)rand()/(float)RAND_MAX - 0.5f)*0.1f)/(0.5f*NF); + } + } + + { + // initial guess + struct ggml_tensor * x = ggml_set_f32(ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, NF), 0.0f); + + ggml_set_param(ctx0, x); + + // f = sum[(fj*x - l)^2]/n + lambda*|x^2| + struct ggml_tensor * f = + ggml_add(ctx0, + ggml_div(ctx0, + ggml_sum(ctx0, + ggml_sqr(ctx0, + ggml_sub(ctx0, + ggml_mul_mat(ctx0, F, x), + l) + ) + ), + ggml_new_f32(ctx0, NP) + ), + ggml_mul(ctx0, + ggml_sum(ctx0, ggml_sqr(ctx0, x)), + lambda) + ); + + enum ggml_opt_result res = ggml_opt(NULL, opt_params, f); + + assert(res == GGML_OPT_OK); + + // print results + for (int i = 0; i < 16; i++) { + printf("x[%3d] = %g\n", i, ((float *)x->data)[i]); + } + printf("...\n"); + for (int i = NF - 16; i < NF; i++) { + printf("x[%3d] = %g\n", i, ((float *)x->data)[i]); + } + printf("\n"); + + for (int i = 0; i < NF; ++i) { + if (i < NF/2) { + assert(is_close(((float *)x->data)[i], 1.0f, 1e-2f)); + } else { + assert(is_close(((float *)x->data)[i], -1.0f, 1e-2f)); + } + } + } + + ggml_free(ctx0); + + return 0; +}

m1*G>>vc(JU;_}tc*&F{~Y+0H&C~dBR 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�XF(DiFCa=rw!D(2$Uv0Y%>HVfwev!ZS}6Y0~O zEu^gXCD_<5r03V#(D~9H^j=;74LAKmwmd=h<(L8dTE3J7@5*7#SF#D)Cr?)Y-bPxI z-3iYA24;?qbn&w^@EmLp$F{q}ZWcy77h2)5*d~^cqelO952wQ$65hs)1OS0dYR7 zhPjdVM4wXqNa7^JirD!bBsWlBBq?OTT1*tg2X=gCpDSMzEn!DsnCmP)^7B3m&)ZFk zdT+6EdQn`c`B;>$cbp}@ol-gW#ye7{vyg48cu17(g?^CK9eOgiCL6PT1(4$QiLRWAAVQndGy zH+j=0NnXDmMs{RvCMN_=-P@N*;CV&h7g%`FI|`}f!-N7*$bSGsPAhY{-U7HtqA|1X z1+Ki-gTH+h`P+ko_`A;%eBaEQY~rIBA~V~W8RdpRKKme2T$sTuXLhmJfI+M!rhu6~ zbmTeBdr@bK6puXZ1-4%0PR^ZbpyC`SQW54Y&t92Bk6#10x=D*)@BRS6AS1m0&$C0W z9gKcFh|92X_W zlC-01VNOgFEX=6rDVBt0{e*+v@i zl#Qmi=zA*rVB)|Ht<`yRlN^7?yU}Z~I{!CTjlH>6iKKgkz}axcj6a7#$-;mg8lS=T ze-<(g($it{wRf<~$br@$nZPs}H)HtAWU_NeC`_1l1pK;8;MK532$)gKhM!u3No(H2 zf3@cH*P*-6+pq^e?k&dWcQkmBZadm_squTe%=w#%_i%goX>5I`iX_01{T{Uqy1Ef| zZv9O>FPd|Yo&WG^yENYPN)`JoZ-w5a67Y=NHk(csk4!mBQ`P0%!fzCvg0X#W1{P1y$XqLKAL` zMQM8lK0`AIU6;!6fLD6#XpR*TD- zg}D`dLUX5w*%V9guG|i^mhZ*Ug4p4+?@0_U8%$OT9tSi1CRP`-6`e&UsGTo3v26d} zw=7{x0}}AZx7TPNxJx*%W|8$ryK!ux@E+3&#~Bu<(DY&{DY}&jwR`7*c(gxU@;(Sf z{fg9N-Wc|HSEXi^ZqmnbtzE zO?d-8pJ%en-nm!b^L}gPS(AM$ecYq5}7O_APLbJw*pfYtm64gdFXk=~%5Ci_e~q z5HK3TnK6{UFjvVxB3 z%CuXx3IZ;$;#i^qM?w8(_AiBX>q)YxE=Tm6BpOPqgh&Xv!%Rvo{AC1-Z8@Mesl55 z^>m`{G8)FTS%T5JRE+%l5?W?mBR*PFQF~lAuIh>>(+!%?OPoPJDp_(Dm-*~cT{1Q; zvcrY}YA`!=0{)f_Afx(K@#>r;=#-p5{D1YO>g{`9GtWA(SZ$En( zbq&HZDoCSM6w&Za$DuL_Q1Yt`j_gZM)L>#gVqtq`dD zEQ995Kf!xLF`TyztDO4fC|RVt+POgE8|+e^!##Wy`Kioa*dA{L$=FK%b26Y#$su$N zSx!H?n$cZzwNc0H3f^hGz}f_lrjXpH8?6a-9;{9On5odGlg`2K$(7L6GK03R`2cH= z7m8bE{sPq*39vy{oBrOfLv$DcY2vN#`Fhp^Iz!AS?3(WV8!+`I&;J*l7}ddV3h@ zUFRz5kb1%nzH`98-XF-@HANVuKxj+$GniHB#6ON74R75yQqu}+lJIUIX>bzu-x9Ov zKcx#4@1$eELsgjM77Ejn3`u!jkLX2797L7q(M7LoVdsiMIP5R{ZBKNAcjZa2m#jyc zqs2SYEK%;d4f==?|2=)d8a_;?$37&(hFMzt!n*J1`}04TWSPu7ALKCSRgGlOv*C2q z!?pB;TM|y6J`W}AzBBm*X}(5k64g^Ig>{FvR4NC&!PQT`qr<}gklt>^#hK60rzMp4 z&-37gvaYl)u#l~pNcoXUNq$&m4K@hQ)7S~Sd7WDWE|(x!?LM9e1aN^9c$jIvT*Pg* z6kyvnRerZRi5ICpW(~<{Xn9Ekt(GNY@AmzCU)^FZy(^FJ3y9&mT`{~xV=nK=yvq-{ zpXN&wk*vsHhqaMA@xqGBeAww3JdoM*y(5&l&prd#Ss6s`Tn!})-g_`<1yy*v;j7rY zSCjjho(0(}j!@MkFa>!mPu2OwMbD+HYSV7=-Z8&W9NWoX*!6Q;ujf2Lauq+X9Lskr z&fvB-4H({_K;OyLgHdfb*I%=f?_O?=M^(mh3r)ej^DP=OZa*hu>l0bPpcG==zlKa3 zcUSbT|1_N&5fo-hAO5$apH@B4iJVi+7PZM_K z%W1OZWj=1JR^nrRC}F;SEKJ!p9NuIZfXqY}fge*=soA1O9}BLtZ9_e{R*^mLD@sBh zDZz)$+Ky)Y7VNGXibFJ1xNegL{xZCTZreVyJA%{5@bw0k+J1^TKTjf!au>x{mc@ww zMx17f|1OIBk6RNPzZ=X3&lBaDw@7Y_B_rn~ng1i(%J}qDCUGmrSusPMH3p}UGt1-2 z(m%II*AyLc_mCX9^Yj@hoSsd-Ry}1SR_3s;2WAt;mI4V&4^R}yGw z^pxB_7Kd*uBvC>kT-5oqh_o+J!BN)|$zX+>q;9bkdM#6c!bkcn@Ua84>Bu1mURo2@ z=1c-?=naTT?S>W8n=1Jvt6gJ6RnhBT(IFDvDq}r*>LJk(p^?7 zUQk$7*;m)amZ%m8cYt`9)1!z5_tQwywcTup-BuPePKLJhxzd_ipntx}uqmvD`RWIW z_x<|G6wBX1ozx^WwaXWsmU9&RE`!OpdNn>?{SfLoG~-t5<)AR;DNGeuD=Qbh1WC7* zRA;^(HE@b&aoZB1?dn08x9&c8u5_azK1Zpy$Umw9c8$8b~BuO>rTgBFr_0s)M!Ti1M<6P z9{lU9g;;Ij{--_=@Su?QEV>StoWrOEsi2GRq|#k-k<{42fsXoOM^nZnk-zm1NqZ(` zF8lYvtYudOMqLT3jM3rGt{)a>9^B8u<0cci>^yi{s!#3rPoomIHRmV!q zc9OO2|G;FTFFrqHz&{Q8Ee>q{$^5%*(a&`r?=v{YmlxXbkd+Cjf9k&IedI;rF{-_C zcWNd6#t6+qlzq60OV|hT2Qyc5$pk&VW!**gInEs~E$=1M zmXpfEF|XPEMK=80Vu5kO_#2xH7Hv9R$$Eek(An5SFnqF>`!zQ-krr~FFf zDUlZZuE9leP^wvU?(uGR*56L>R*mC!6L;eThdOqV{=@+rEP2PTLp&OMd6$rH-lJZ{ z`WGeRmZW<8=cyt0u-?lPU;M!D zXH?NC=L-Cg-wo=bW$@VIBh%QIiht#%<4vpcZ2TTscn~s;kG_6@w+-LIO)Tw%ce$c) zb{N2?pZtaoDiUFsWh>mh?gT%Khq0QW5Ao#Fe;CoZiVrlJgzUE`p1eJV%Z4rGo8C|5 z+X8#>kES9i8&Xds6KgO`$b_Hqxg_vekCKJswa_9U7-|jnz{}YyxV*VBn&qow=N)(Q z*XS_b^-RW3*Kb4a^uhG^u6VfE@DCSP8FNj=2rkjFnX}p$c0*t`%A5`2Cy%S}lk4B% zaQ#;7ua)5!#`p?7L}{*j%#GA7d=7t)K82>Br>sYIy2xKmcpf}5;(LBKku!JHVa0+d zC|WH>4cEbZbdxUaeHa1Scg=}{q!VQP9>g6dCh@hlKD;7S#IM}@k9$4;go+W9xWmj# z7)&ksNvy)OICDOFwG6kJ5GNk8CG&EF>|bGCa0PfhgZ%Lm-VMUy9U zqxGwJR$80TEw?r+@Q4Kt_lv zo>Pv)+Ye{3)uUrDtA8pF`!)oJeDDo^9bZ^D)PENEBgZ7|vO zg2a_%W2n6&CKTn0(!wY6h{p4{GbIyV?6ZVLSN<`hbAw<&ku_0u>&K$?PF$f*ny+eG z$NitI;@78-<{Hb_u{rHIkncMRO*q9et=lMl%9MAk*5ez8AH*KHT>7VRGd<#>N-tT- z!6y3+cr!(re^_VDceZZhub)Ws@7W^SS2K|w>f8$t&-Z|9j4NH@97Y`b)nVVpmw0y2 zaXgp*2iGs&D7X_EiMaO)@f%@=L0gV9sTCtx;Bzb9nYy3v*lCaAeJkkGFK+b9QfV4E z!bf~ML>pVg)u4UPgU4%6;tA7@`2_!FsP49;=EF8Zzl9I%-gyn`w@s#|Uefe&tp;tr zr^a?Vw6muR?msRiQ1HkV+$yk4&X4J-U$L zc1ov0;J!tT%qnbyT%%I>Bx_82-dWJ0Ht*qP>~>H% zqKbn)3;>%W0d%#dH~sfqpUx~*r`Lt~>uSqBvZL)h86Lk8jvbo{_syEck-Fc323E4_ z@Q>_^;x_TOx+8e~PleFaUW1li9(1P07=c@U2OK4)&^Kd-(gz#;>0Og6up;C)M3u!? zh7B4<JXl9{ywYTGybbdNTdAX&B97CGg`$1CW^|%u{tF zWVPAT))rH`!hJAZxyu|1Q=F;kBSU)NvL*bieF8NNKJ@FfIC_5nd3vS#3Jln&M2A$# zRhqeniZk2-$?B{)bla(qK3Toa_I)bU|HVO=C?A1q@5$2Ern<%vmPoRCa=vJcbVdFSbMJ%1|l@gSiMs?==8 zU~)I)Dy#0hO0Jz8$3+5{X`zy=l{pZrYA~Nm~z_G^xHk9-FZ9)N*vQkmT<@ z5mP({z~v8lq~pCIv`pPj&(;^wxMySN>7VBGjl~cuEw_c%N$jATtQJ$tv^nr+g(~T) zEG5b8E?c+k8PVQ;Q~YUF6`Qugn7@}z<~u$Z@u7NIC}H~yUnm}8`n$qWr*02U(|m{9 zhhOG;;Y0Xtg~#Yvq0M6|#?aQO>U2YGJJH#HfLD@_n7!$n;B*fqZ5FoV zr;iC)qIrWcD}S~G8p(oSke`f!S0biTy( z>h5uQmu7CfzLK9>QO#XG7INt)nVj`n@QY_&!^_c*w9_*k6Mwan8eUA;`9W;@dVy1- zw3vB#DYEu7CEWF_i;>yeS&MXXW#U0QR<>RpgPfm=6dLyAAU$T6`;l3zl{3w`2COjk6j{1Hld0kd*0@%i)Ly+x9_;M2*9c@WToD!7~jijG-&cf5%esTp>$re9DiPd8py$jp<-?za6i4+o8&=<#?Gp5p=?_pwM5?=KwXLqa1NuY3^J2(3v5mf_;GSTA8CjZA_ ze;8?L-YQ;F=Rp1}UrThJ=HY>ncD!bV89#3u!uthQ>8oGwg?@dN;0&>VHR5UD?>mN@ z$Xf7OGJ|p4fm1kc*JyB`BS{bL*h9}AT0%3+=hC1bYSi>*A#U#0L8Ffg!La@>w%?Ma z&bv>D8oj=XJYL;rvNldMY|ML@5lNW#r;&}^y$}N@^kTV79vZY= z!Do((SipZJ(0b+yv9gtC?7_%m zaB`0nmG*C9BZuT+QJf)7e?N}P$awQjO>6l-&-Fa?(09B^FM-0V1)#WnC+1a7#C6{u zlV|P^Va9kvx?;(BaQqhu8_8<0$q_!k;(=h5c^L-2(}W-Q3Sqfnnscml2^{{TLA6d0 zVbNno6HPB*w99&SrtJ)teLjfupNhD>hdzIn_y+?%#e)AiM{1HH=zLC1@GMoLM z#Qmb{AoW&oYCqM&eNo4--RcoO45r|sVJXtm%Rr?Ek?f1cBV1hX$j@~t(M{8I>51R2 zU~d%<9z*7cqV|@v_pYv}@ZJD|j0vBge2hOA&LHFWSYwd1p^zQ^O$sVUfMwVlr`l1` zXzV2?4m<9GMGMNYY2pIDqv9Z+TiS*eejB+-N)lIpFqYpNv6WBC*~3p>yoHi%83qv# z@skIUxX?@)(etH9yW%(de4>_l&d=s*f^&S^UL|z-Bgywh_b}Pr!QkL=fa%Lj5!}`H zabfpAT;2Z$ixWIJJ$ac=i9$YV@L)bbe1-?vm+_`;o_u#Q>=({i68z3GIiA7HdC#z&oP_%F*+mg#N!v6U zVx!1k#-6NjEdL_D<1(F%FR|cB-+cJDy$U?*x{i2Gxe|B?duvfl2z<_PM&0o`v@603 z{6;?@DL^0OQ>F zvO#jZ;g&8q=r15le>lo)Hy8F&H^`qgli_mFeaP|7VX_IrY^m)io{n!}q0TA`bzM<){;ErR~P>Mw-GN6Nr3$KuOYkf4AIMv#>B#{c;xbY(cNrI zuKa8q)*I;1+u2%lNsA%;I@^wsH7YRQGX*?^oY2K9;VgEfvCzM4#3bDT6GJ0+kEMM(RyO|tZ>nFqZsZilBf zxoE#Z3Lnisg1?1*tz?Ed^|H|h|W#7V&2cpNn%qL>NqUJmfT$+G3zwg^>)M8i@M~S!Wqa~6AGO#Ttr)K zw8+qRXW96pvO*5XjOQ5(8CKzpTeUjfS!b6Xzc4)=PwIRHuJ;aJyP4zF&QNsS+zz7~ z^ywRqZFH$>2P{uFW*Ron$*bFec$|*HOz%XtX}2U9bw>i$Xnn-@)eNQ;2^rZJ-vsZ% zGGP`tRqW>;f;;*jz@Uh7rmN@+C%S48}h{3Q}@M$uyS`HbqwtY;R1%E@w-o@Mb~f9FuY| z%^C$MVNtLrPDJ%QU17aiFdW{rnCzbLhB)?dmW5g{@>D16G7z%yv&1y}VIST6#Ti$& z*NhNkR!3Rki%sF&<+c(ZFBOuV*^<#g-?Eqg;e*Rz`Ft}=n; z#a47r_G&P$?;`E{(joiBc3LZN3tb$QF#Nxv7~8uGc5QqD4bu-eUEXj368|_*?YC!` z>PA^&FLR37`TrEh$y3gj9ig`6Ds;clS?rSDz-*k`Sy6~9YVL5vn?ePkHBJ(LZ&^z0 zKoV@)gGtk-VQ|6JgdQP|G^NfGe0RKMi-U2zNe9 zB_UTVJo^RqZ>Z4C=p2>GMreDB>NngXqXzkd;oI>z!`OhI$&uh&WwLPm@E54p6@|(% z6}U3bmMmIS00S>LQ**~Qk?eC|;|`yL!&}c##cOs{ZNVv`Vw4XXMK!Fa@j97Vqr(TA zr;;T*yhz5KdKUEkDh8cgz|(tlc<1n1*lO{R%-*#H9n~*j+xZTpI|zT*IhHF4j-%A% zk$j((Bu{_X0HHfV>D#mu4lwlR4`!x^xtdzM(~CT=>bRye&rOHRJf0uwR&aph|>U`lW{ZZ`GtBFCXOQAov zflN~^&euhui322xS1@u{8>EnOsn`utU9s%cA0I@-i9VMBJBIuC?0j%j?5~! zMi%^<3TKZjq`yN))0<_LgdDm>T0FhjPh|t=X_oHn0{`r(;E8Xk9U%H{aFN-q z{V8y~!o?bc1drW=Rbt7?r{Y{m1y*-0gIx2vQTbPWHMrRC7d4a)hei7&omVd30%i%p zLI!*c)%!h!hFqM4R?X4GxJVoR9n^xB{7kW1N9^T!r)Fd8`|oT`_+dz$x*yg~Qv`*y ze)hv#8UK^YV;_2cvta8Cw(PJ97G}&Qw-3)DH)9kbePuZqg`I~=(~r=q6%BQogQ(iU zAnJGMFs&#Cn)+}WRrkCLg^n%obCnXUsvHi!QWD%)$j%nEhvT{Ut2p_`Uh?u}8`;&Q z2+ERAn51@_Na8;kyy9v}u>Tghy{-nI?2AKR2M<^z%(!>2w4z@J?4inQRH?zOC%Aa7 zIUW#L-oO0isj2^2ah2Qv{x&*_NYAuE|Cdj(t5gEtyGen$ts{|)F~xl;LFl<4nJA9h z!aS=JSnNGD@#25>ZT(FQP?2LuzS5sg_@ky{aF_^xEx41$__`az( zVo%OuG~chn?v=DL$$lH&IKFf@s1mLGwE?OFI!Z#rM$W5`py*K^lP4{&>z z175F_#FD>*S>3YH;@>k?fnUa2m@lx2rB}&N*IH*#bI)_0Tm1@x-tUDO{(T@-Jce#^ zodO@KH$m@+C|GZ&f@KTlV)#8h;+)znT0FfN(d-b^$1KLe-r2a%Re^`qC-c53o4B{k zA)MmymyOH{Anh)<+4OI}A@%G!s;M@YPX1g2xq3#<7nF3UpEw-!(?60~#TL|fkQA-| zs6agrbwPt#9=ZJLxZutDfGyKU@ZELiFxkwQcgHuP%eWBy+jtb4e>?Fu{YTuk;2dvA zZo`g}43=oG1WJ3QS;hS+U@>2p7VLk>G=AQK9qWeCD))7$V|#%Oc_Kxp4^M{`W4-B+ zEN}X4_-1%_Bc42o%!7uU6) zNXx^tXrzB3{2o4QZ~e7y`{1Nf@T0#ml8j zF<`(4h^rC4H|mE-pDu;9A5{cru;A60a}d552rRHIqv_hhWN3Y&LSu(`!F@L^bhz{v zKaMmI=KFaVCb-|LQd-b@@O|+x=>X=GAh5}=x)ARb!K_8i0Dqsk$hKT570o+7O5jn8 z$wK)Tq5)I2Xw$7*qC5Snf=9{(4^>^pNkUij(N_<6_+lV=U0jUczf`d{RYg)-mCUd9 zmhwKIr`%n#g0Gvmho^0@;YUNGah7be^N%wsBp`Vq>cr==trMmB*az#y7j;B*-uKTC zH!=zCn7DJPwLQeE!c|;)zzoQ)Agph+;1`y*VzS$C{3YxiS{v8!ZHr`i{?65W$Aw(p zHSImG(-8Bmeqmf;(-~Z4t|+d{3WWTh1K`i)Y^J!ufTugz@hYu+3|c%4Kb?FI9xoa| z>5~zSyx=DI|NLN}C>t*e&xb$70Fn zZ<{0R8sU$(vxNJHRfXtD!bV8zbA@#ejQLK-$7pLD&kOJP@Q58^{A;xXCTw~`Mu~?( z-`ZxPraTo^IO)>+vSNW@szGk%b&G3yRcP1RGjRNVBR=oWK<=f^^)_6>wk30+*~pg- zf4?0fyK9K<&nQUQ)F~d*KS31#!+^>LreJ%5@U}mhi~CNmgcp+>oegm!)EzekH%Ten zw?F|yj%_6+{~Z$cFZpERjwEoXN^@Rn^9uGT`N4@3*TmEJTaswa`+)nsVe;r=V3r5r z>F*q(ZN88+AMAt$)|NzkekB->zYQBdg+h*808uI#Mz3idp=S>Zd6MRV`0JM$d2(zT z`%NyR^p*t})e{BdBZ|mfrTg%z`v@_S6TzpmSRn9fk;qRh|L8r2i;MAnWfOi2 z{DR51Wcm4zUE;)#55fDjIW=Fl5-!Reg!V3X^ev5s=(uX~;$kiiU1Wnf=pi@R6llun>)gA$5&&r+VK}TTeDW2 z-fYFLKXs>CtQNj_+2Yd@#a2_hch7&2aCA zcMx(y6(UP5aK#!%Tn}FX3%mDl==ew>=j(+RGiJiQvxN}+Z6{msTDY1%Nf3YRm*RW; zwQ*3?Ramq1ktq4|OR_v!676I)aqBcAD*x0N%B>e;Z~1K;T5=qU3y{@(|BKJgN%6-@ z7cg;K6N(0kadhuwcu8NA?5yYP@s?gzD&K-iUrbo#5;O9Cf-O0l8N>XYhjE2KZTu1Q z3TEHf1!?hv1pdkjqGo7AJcC=HI9h_HXgv`f^PPz8(Td#AUAU*{sPG?)G`Q}(XrXWR z7AJca5Y>G(% zlkmaZP~kuJDY!=*l<_zfCmJ2U*Fhq%&cFB zuhpK+t9O54Ers`qiRdU(bAAUu`rOGI#m#h1n=$=9wT$IGdx&*6$AeUT3@lWeh^;q& zljL=p+@)tJPhYOZ*H{0*u|`7frZ5xtZF-4^oHgNQo&sB@B}Hf4|HR^s6<|;IGPH6V z4-Ya`D_xggCFvjInSZV;yX*B2Rezi#>xH_--z5>KeE%$t$csShtpn+bC~Zm?Z6+B@ z|FLt^?tr<-kSh%JM;*y0B*o+uwEL#P>Xi+UdsGPw16-hT$xifpS%g;_M{y}(HyXM} z3)D|UlDqY4#QIq#Ney{SCR{UOes=5F_OCvC;3rF~}LYdwV8?~M?c35m4jmWXcHA4P-vmeY}Y2V-XLb#{B(54o@#t#y8Yqg>(2sG`1qU1Og~xN6}g5KRzKdC4!EJU{c%QgD`bH*gDrO$G{vuhLLKHU3!gt9s;^{7&O9}_EiH$GC0b9dJ z-RV)J<=QdlwMi;qlY5VRp;e^qSQ(27)?wctM6eBa#jNpE7j$=C6<|)enQ#sKdOzDPUw71jmZPMS)wVK$x5h zq&LQpp~D{&)djcNf{%72`B)KITHQ=!mUuu6^uUgbCiGwYAlSdLo6Ojp06T5!#1DI$ z;mACM=?Krcv>1 zf!u2dI$8z|+wU>ExHgj8F;wIx^@^SP+yq%~+~B-ZC;pytQ1BQIATJaK;b#pK-r;o! z$H{L2_oE|e_xTmH^X*s~F=s*fKG*l6Cn8hYe{?*JOg}~}&rIS*!hH3|ZaZTCQkqWQ zKZAM|M1ySiBz`ezIDfjSfKex*qdqo)MXmLNxkHwq>i1LdQ3KI8rmXUMOuab$rr>l6 zb>TA#Pv9H5kzhM|Jyme-gLOyqp`<&9EcVg|^_sIVv$2h2fWRpexNJ>dXA5~JGhDe? zaAaR}=O3L%@O8qhI6CSmS@GyH(-|g@(dRC}3gNkIS|_kQo`wtap%R>aM#vC0ALmnR z_wd;&CAfFp1~Pv3SKk*5Q77R>~H@<(T$o`^7>!|T>d*A9%>YTuh9)?(XBwY z+e^6aj4@n8K8BMMoB7u%r%==WllX(|6nqf6hEFK$0I}v?l=dy=Yr;)AY@5b2r_ACv z9OompW{KZ#a>H?5K3rvN$5~MfYi?d5H%oWJubL0=-&_ah&Y!_J@=_)0HjUtT zONUSNJH@vnc$%^kF32usoz_QDB7Op&zb1n`nkC8Qfqb>#3(rnGh2?MU5Mv7P)?-afEAqv8OpX*c+Ed+Y5g;}B2#}XCVE%9|oLp`| zj8_Ko|1Ph?HH~xltHT>`srzddoV^HcjIhIVUWwvf_vKunJ&9B2ANW*dF+b}%n{VG0 z&1HWFVSeTm7HFjcztj4No{SD;pIwBlo+lx+@)ArkNrBC)vOr0C3wU^ZXP2+PA{{-d z^u^t$m@qJsk4;I&wcPAT<*4pv7;7GWBibJjUNH`HcSz@l&5Z zX7s63m(CbAbdVX8B`8sOtI5!1GMK70IYYFU;IeMF<;O!anW?!xG1+;SG&U&1!qt$NmFV*gPsuKg|1eASIJ(9p;qsfR@b2Lg7+`h|Oq*LE zahe;RE;Qlm=L`3H;pbZTIG5>n2;L9pFCdpPl^=0WIzVx}p}ynqo>kF;J)W1RO%Cayd*O`#6TPu40(h_DiCxOk(HsU~*vhpq+IN1|}+DqJV#Z^<-km?Wd$Bv=r{cE`9 zpDekzXfqwz5dez*f0>T)26pSEDNhY3;9r(r#xG%y;fJaOp7;e8u*qpd__dbYf>E$mXfj-w|6VUoJ~$ z`^eMc3K{m^S(?9DK7m)fG30th;yD?XBrPUiW?m99%0v08u(AB$9Bm#KUylXFQ!!XFA3pgFr87Ep>7a;N zR3fMXGG~Vnhf|LH*V`uakrX&t+itVI06|EhZpW|a{KT~9#{6K?NW8Z57(5PiMuXNg z%sFB}rH2O5NyU@t%A3>ZcbhEHTl>v8UT}{uX?JcjPGR4-7P0cY7i|7CTWVtT z1wMuUL#dGt++N77-^vfil&dZnmhy$|)H;mlGnAvjeE6WKL}mvo(C@!4(NTFhbc}pL z<)!#eaEpwGw5%gw=5S4PW^@T_%6SOF2Sx5|J_;dCb)sPIf|m!y<4Or#tT<&ymi;V; zF^##{b#@#+P&p}j=uwONT2&z4G#LvEe=~DE2hi-7fU{4u=^mF!bW(Z)rA-xd#mp!g zH8q=tDLo)TU&o22#M^-68%dUM_d5)TZh)V|$IzG+e(3nEir6ntg131)n10wYFnReM z9{GG@qD)0Bn_&t{z|iL)`)wkP zdZS1!Uetm9!vc}dlBtjy;KDA<9nB`Rm%(j=bD(~s2F_aNz*b`ucwr$aUNr7M`g-d| z=;^5tSlOpoWTCD&Y4J&xIk!P{==MzV)Wn1w+*&}YTkfJ#>sOrV*NgLeyablXV{$uh z5~#|)gUr4>D7}7%2q-(@SzgVK?j25`x?Ic$MUiM*Gq`$h3LG&MVQfz-gx6}(T*+WE ze%J&2SLaPW{L>XT-D|-MOLvgNR>m-YP9zLFtHW(Gt@-`AyLjyqU%sZTlq~n32&cO2 zAboKM9G{{NmG3^Yf`>x4y|9o-oRfnUi%w(SQD?|q^9Bp5n{i>0B==T0MQ;74j_!|2 z;M2-0Y+}%0%xW3IO+7xK#*q~wZ~p=ut+9%z^(pa^(nVa#V;tWRH<71Dk4F8&kBCOl zYrNCF5_Zjg1%a8)f@4C4#R{IN*veA)@PYEWxDeht&zXm=L$TsHefIBC1B`#b;Mus7 zp!eoEIhCzXz6kkv(LyUI+Pwx}MTM{!A+!H|qu|;$av)`qvthJ(D)Nm>L=Cpraj>;J zuS=*0x46%cNav8%9}bJ`8iY)l{!LOiWDJcONO|N0}htdpd*!+hmr;PQfvEU@bYaX}@#`|L84T^q>!Zk)mL{I4ihm3th7BX?SBQa0{{-tI;V`9vP7&mp@T`3nlcG>1*R_DO%i_& zV>2tm$fg)gte+%<7U4gf_l!P54*2~O)sl1OabqZ#u#$j_p8G8Fn$KadVY^+*3zS*<@lY1*!SIr{h_?)cNlN%RpTxjpJIx}SMe5$Zo$*N8h15Uppoi(+%&ZeQ=ZE3 zN2wAhGsgn?on*nY`Hg%{R3Pg@ikXa5EIZqE1syzYV2t2tj2cjl*UtF}OsrI{z40iQ za7y5(JxA~(&(wKG!DWug!9q{r8@j&P0QaVxgT5!#u+T??h9*Qqii#|LoDhPC_DS$R zQ(xfmZU3BFw%CYNcLkGe7ao)HQC>tdYAIgZdkETh)Z;TDFIm;vhq@Y0STWatQr>VBl0$ z=BOFNX7sC21)T!O@4k;Mniitk{HLTU@G(Z|NufdLG`=R*nfrAf7a9zv^ISq7Vh4# zYV|RpEanExom7+x{l?Z8<25G2%@BjC& zd+&SBd7tz7e!d+S;avVfvMlrxEKvRe&e7^rbFg?$0Kvk)#PrDydy~JrSbX1_TRXlN` zb))E}>3djY`4qe_^uU*$Uc@0Jly^@w<3q0g^7Yyx#+6G0~+Li?Beg^bUi4MlE8O+bj z7{WE`oy4Z5sZf>hTi^tTu)2SW{OsnVylVUtuxyg1&mQfh%hl^iM{y7Yzlw!dsT6Xw zM=-;`t6|6|XR%g911#R@Lg#6u!6`#?nkthCd-J@}JHeY6*F9s>Uk1=cZ#J-}_w~8C zAI0S4e9^BO!GEzPm95>IBk-5`xH9q>rnFelAkVe5C3yukaS^&Ec6q^2;W@qPFAc&B z1_Bj+Kzn^C=KnOM@*(@R*!-m75Y|n)C=%#&Fte!7LoorLYrL}#yW||s|Te1Px$$o{^BivwP zt?+)7Vs<(5j{|vl<{CIn>;&Vli6X<6r|k8yLwJQ!YIwo&H0w!-`w2Gj{Wy9~ zrUe{tUt&&060l5n45W9JftJ)#I55(YCEMCU@!th3=?dnh;k2OJf*m*;mW^QfR*qiLm`yWs%b_u27(H894S6A>`S>Ueez9DE&r1IwR<1cn6!UwbE`2bU z^;wHj&&R^S#3oqx@;xM4AfRL@cy@n+{HInlsjLDtO1D92rJ1PhEU8(LlCz&+=d z3%&;_)J=Pc1?9IzDQ~XgiR%-1V6rkd)rdhi6)9e|`3IuqFt)lT8GE9{OgHn1jR9Z6 zdj>qf7jglh8kdTq;T3GHR4*=T2;)Y6YW(w^4Rq})51#!hlZ@W76Si+%O?K?q!3X?& zgmL%w^F60Mc;WYb+VSuAhHIE7~Tx(V!q$U;2*ostc2OK^xq2v2kLRcA}*4SDe^qK z*PeH~O7XGzgr8rTgDs;}v3E=wSh|d+g-1+9IV%Qm$*(RALK+_WSn8J6V<04`m#vGOcn^oh`F6siV@ZZY+ zBqj6X1(DeQ=8-sUY9XpyUPkx5TH*yoON1FoIv6f|j^z_Zh~2TCG^`W+nG53ZfT{wS ztzXE_8GQnUO#cwHPM0gd>b4d%`6eMSD!QyZxxr?UyEG3d+6x0G zJ^|gOmx%3OMfTar9Hwpn@w^{VqKmpm*w?#S5N0gH-D1w--fKH>@2izCYjL>X%GH5q zACAHM$Lravz+n*Ku0)Uc%F*_=cE}x;gWH7OJ>BIyaB0y8B61%JcYi6c)739T)8ryq zu*C*$-)6uw6MS%1-Cq(=^Ou}?@P+I=y%LRXzr`z0OJRV%9_<@7nL67If*);7M6!0L z;77GZqmSpn>R>3X__36_@A?SdA_dg*kw)L3A<(o-5)-Q%t$U(}z{SF17X9ih`5ie3 zUQ}LzK?3L1spLzR2|e`R1|DUWnN!HSq-WrAJ0Jd9YQm60D51QVvzSqIF%Dk zkDr`H!+#uw0kMSYHVTaS)%~z*)^hMwe?+o>93;sLP7#?26Ik+k3GmGvgo;uAOm25F zBe$f9M!`2W(IHc`RPhCyt|Vj`Qaeapud+D%MHfrnrBSI()M@99EY?hIVNO!qBN!%xk%2RsTXt$T-Kt~eOah1kxL!OGpn|~&o)dGn` zbC`8ja~E-OmLvnc3o47o$$+QyEw*>cS<%m>Qmk{81K7Wg!-(cwOln^Q3i-pRwdo@E zZTuEAwy0)u9h0DW)-;qnzY^~^2eN-9&7!%tBw*tpPxkKfWLD|*iH+}&$BE>UST=10 zEA7~=DsJ0Why|_-v&K@Eh#ymPk#xl&8K`T`t+O=l-%1bc`Yid zUF$~Dl=Y9W*84ZD51~}>PS+hChPPWzA4C_$HH%k$SD}ydRoL0vE6H@JgE+0XluX$zPb%ulMX8%3 z>DW=}@G`reyjr-P?&_XNua%~eQ0>d`KxPQ+*0rFq@!RO-L}wb1c~IC>2jizbHJBL{ zk5#*6`Chj!40)|b>McSbZ-FFlyw!n8zD9hM+I&7BNXYR0J%u!41oue)!c^cl6Zad_ zgxhhbKBAs{pHNPNuk57jig(a2p)={x&0+BV`vWw=cercZ7iM~`PE_~T46a)j*+g8p zPY!nI^BocDylwbaxTa7DEy?oKb9xcD39gK@;$Ehql1HjrjqzuZEPS%6mm&o>>WO*av&y-b zYfy7a177X3#}!@?IBHnBc#)McY^9Uv!Jws(liY^vO&tz$8coNFmtxQCRJPB>OmKm& zheWkB=$y0`{bmh^)$Q_7F)5U;fG~V#KbC1e7=RPK1#Y40Gi;AJ0e=TaL)*&3P-)PP z`$x|gcfCF-8X5DF*sWO)dLRF*bbF#lV>g;nttm&5T^bAtXDq3Dk1e<#Zf8r&E6CLO zrnHD|rm;zdl`5OAGpY7Y@Y!lhPu#4AnAtjTELe(I&p!^^w~c}nc|X{3<2bxnWd%FU zj-cGlg`oU$C-fLupU(cN>6S07K(iQL=Inz_16EL0kqH_-p|q(aoEqFcA$l~$0K6YH zvxknB{P{s6E;|wUi7~SLZm&1`4$noa6YtT~Aqh1qS8$VUfqd-qVwAe>Laj7gN$^ZV zUU#91M7WFrow8`$89EppkCllId1aB~U$sc^n@1oTd5mhDKLYpLPYJ%sx9ro`5Y&{? zn_b3@&mG|(?9TJz1M0jo?K*+`uW7k83OEdu;FW2EQ7<@?8WUHSaf0cfCVM`#Ng0sUH@#np-V% zJWiVRZ(~!3Cf8T_hTU(D;W?CsIN^TkpyecP=2i-`qN31JzIufQ7@ zJ6Ye07Ey>!HrI}f(2`CdkN_=R*n-eEsqJ!w2l9(xZnWL z3qhZAsd%$QmFJH-hr2=~aINDfmi?&@jk2F$z*$$a!Fmn+^NpngmP&y^O03P4pSEQC z)G!EoJ_KeT)8>=o>(NKvS?vB?9?d^#^9gS`#?2T&XT)r#-Ktw@?ka8ie8e!YToH?I zYm4zxIbn?h{m7^h6s=6-a7a!A_PjRbOP5_j^%r^M*v(cpA#(tI)KmcROB8TS$Tx9^ zeJ$~wIiH%x8Z-WLKe_dB06lSo1Ak%!_2rs$v=ODT0dwiES<9&Hrh!x~cRXD5TOdAr z#0eIsN>jSA1!{!Z?Gei_?9@PGa%t&s4mUheN6!q*3KY1bz0jMq`x?wzP*QQBGlRVI zp9W8k{(yZriKs}%gSEN`eH9}^MNWk$TkooE-_<`2I*Eg@BwJ-@u0%T~8}jATAF)R&6pHGW z!p6@ZV0?ZwhD1oxVK-mFsy-$lQ z9$W-oi+4fVV?DTRc^*`&2hgyD-551UjTdLi;Ba{%yJoVA{rKt7594Nlj1V`hN$jOZ}V1RoLs!v{pDIKaLb=n~I zGs=Q|+h#_CWJB1)uC**r0H>q(A8PU@Wyyv zZ=Vk%9FxV0(yvL-HzVA%CmsqH9G zt!@U{7pezt0rtQ~DzJCAWW^Jt?MT=3<5+JjI7L2=!fky5h4$ee?7Qy(nQ|{}43E1B zZp)+eXuw8cA3X`Jx_VsF+Yzs(|A2$npRo8mX;eHMic99`qtmdvV6%G+%$^o0nlD|) zV#4jj=LL4g;<_xl)L((X6P-5S%^om8qD87F`atQ-kNB&41G$XXaT&M6QP;kcJi}8$ zm&$aya`!uSquHKn4bwucp(D7=$zRM`I)j}^_(W!Z1n3hyRZTmnYAtKkksXKd*-u^5Qqgq>TJ68Cbnde z5?1>v&|{PT3f$QkIFg{kH6yR1(3pe98%ioY=as{-T?Bk~{vpPDv(aVwUcA|zjX#G- z@bOKi;A?Rlj(AZX^|lO$-#vk|EnD$&(N^@^=)(2qTJcLMU&)$7cfr3zjo6iBkP~+r zNLI>yv{wC(O73>RqVAPE*!wNsu-t}QJZ?f+MjSafO-b<6e-t&HNyp!@);z@V2(A{K z^Agq0*qUF=ro2AP=P8%qpwK+@3|+-%(&@Z3A`iDnwc~+(me{-034(tQ0M}g&e8boYtvx0lP!NE+-INRK3vex z^K|_jfiX4UMl)4V`dAj4uRF+-N>}md;L-fo{I%F|O#u#V_*f~`APcJ&4*>0a1iFhOXB|(61f`7bI>lGqX?+lRXk6o3i~=!}URldr&CigBHOg2J=Sv2; z%HhV$?>44Im)Z1?``}R54av%b(87KbZd*hFC;8udKOzz^QWsilfk7zP0Ad)23 z29TE9UMxHK64|?U1bw;V6r{9lL%aA+9I-)%o1gfJySjIx+_-ieeZ`jh`&scKUp21f zHJ?|!Q{c`yw{ea9B-~Unm@ln0;clZm$Ts0_Pv`3gw%y+hTMs5+#K_7BIvfuZF4^nIA8*n_v~{-X4#ad>TO7A}~SMXXkjz;^o|BH!YRY>L-y zT&(YiDVbAX@Sd~mX7Cz(Ft?c1*cpM$*wavPzYb*kTVd?(C6KYe66Dr~!n*(s$aP8ljP=!_le7`(=c7gd4An_4-Q-1g6nHyVB;=Be6-UO^@9E} z&mYHFV0jbEOp~HbZ+3v)2yMU9G0yI(Ysm4I;iy1M5W|aJp+fgebj*L6hRZ z{*p3mX*~<#b=~kdGXknMI)ML$S9s#sJ+}70T#?0!9P(4*FZlY7rZ>VnL3MQ#IM)l@ zO*RFKVOL>BVXx?V#&S$=bzqe*uCWt~*TA&%qsbcElcZ=y99cZ^67fsaf$quyba;pu z2A$W2~MbYD#1h4 z1UpQJQs=9S;d}ogy!v}M-~B6}^_aSl1P|%TaVt}yen==(j_83!_q0HC(}^k%%ZJAw zwzC!ep&)(euSlzS4oyEhiz(il5BsiOWX~!&8|B!{3?#~#ZTMoevmb(E=G|tKi^j7R ztpU)OpiZT>3ID68Dg4RW;%bm?yev5|8%D&x!267?eLg9%VKZ zh%ZTSQs(`hoSopr5PDkl%o50`S%UZI;5eS`;E!P+ zUXa@K<>bpI;Y_XZgsst=1iRKG;{e0`>?m&|9)=^thZmo!e0@zGX04Ni%SZZ{-NGvT za%TnJ4}XjiF8i6XoR;9H2Qp5}7k`+|Bqe_zkmfDd$Ur+A82(d&d1P1NFaODWp3)X9 zbuI>^vbOqgVV^z;nX`gTzZZx92B)$j zw?y2sC|@8p=^C^7#A_S4-LFdQ zEk`yXq@Ag&=D_*5d1w`K9sX?o4)UI|^fb4HvU!(b6a4`G@tLB*6^fwr<~!QT{$cM0 z1~={VPpoZ;#j-QM*vI<&XxYlKe2TL;xKs`24rwOogPy{IP~i?k`Xrt&lOu;5_po(Z zR|PN00n%bK12)^N6dV(UMDDE@v`#odtk$5&rg027mLGyce`A<|uHc-hJ%V$$Sg>yA zmGF4NcJy~`V)Mh#qXYcG$2F4t)SDRb{BmOq&%ZB{jvJ46+CpJTRSj;QnGU134&bp> zlgT2huW&Wf4jQHmghyAeVxj9?jJ~}S&;D{oJ2x>&{d1b_F7L&saWBwSZ3Q$Oy&?Mg zQ}FiOp2~jWbZozN1C3@@;!t)LyIeRrkKTbDDMPu0YXjceHa zH@fe#dE%$RcYgWA=E&CNfLi|suJCjF9qq+{SYph$UJCf z<;r;zG4ASZyrXD{<=BB&5*-ZYxv`4mXN=*;Ep@o&q#pdS>o`i!kmhIhG+^*~ZbBFY z$F`O<->2mMob$6AoMq{FJA0%Z7>-f^qEY5{g%n(SrHXc67zn0Ml?O=BAI?#o-FuqfY=7U zBD1>FDh<+<;p1LONO(E`4RT^^-fbGn3^pi(!qIl7J0pi_e>+4POk3IQ*9tJ>%OmCw zPuL(*Ca!bS5Pi#YVOysNy(G)Wke>ZgAgO!VdbrmjrYEpln)feZ;7>x zEKG#GU3cMy{4$(oUPdYlJ`fXUPc+KigIAvz;bRkBe9yPoTn_)oHkLjXr-l9&Zl#!+`nZFMk&n3WAWzPV*MmuP&$Q+4w>*`O&zY|EI3@ca}(=>JHxv>(oV_^bv`N7;W+?;=lsU`lqQ{h#IHdbfAMTySOTz59ih&w8ls*bi^W5>wtwbDqd^t&d^NzgGUqnxi zoItY-uM+3k(g5q^abdUM&e4w%dZk)WCt(IZ=uN(@VYR7Qjh(h9dxsa`>G6kuaN2s5%7Pt9P;yC9N z-2R}6Mg4uO^+1-uT;iZKoIHq3(<&n|wF0TPp zw>=R$oFmcJ=sp;A|AojgCt$#VA@q~9KE#EGp=)`dSY_H~@I-f7x)|t1<-0KTp9Qe+ zahC&@NYM3W_Dm`~1LY#Lo$zd_jE#|t2~4@+0OwQ2U|aVb4DRd@%RLmB^`G5D@@g7HZ=b=w z+jx-;Mn~bgWi1;aX7J5>8a#IE72Oy9b2t5pFyNmZhV<*vJ5#bCEOIct*!~^b6lT*q zqYBA(#RsC*E*{P{B< za{GKg$cE?GM7U)$8LJrFKQx3X9FBl~yIU-?I*|SHJwy8ZZiAk{W{ey;nwyrY@KuwK zLRs@4TpYC;qXy0-2ZM!f=;vzm)bqbkuH(+u`kcl1Y5!P>++G}D&t1bJPpNSKnnW%|->1)BC-OHZ&aHbc05wcB%>5EYorj}3RPxqGN^-Y<~ zT_pumo&3ntJ1gPZ$QY>6U}V|hxzM5h1V?}D5cc(4{OvUo%?$70wbU3)X81zONX?XK%>^<~&;H0-udDj)r5@ll_=$ID?sFb>o z$R`VYNq(IwR{Ra(CsWn9<*?yQTP2S@zOqAfWw|5j|H*?@!xNzMpeCK&5{{xjYCI(; z1ZV4B6s2isgTCG&bT2mKA&a(xZsSD$<7y8Mt{Q|H3&P0{lK_(aP!|gya~$+ihF^Q9 z&r2RA;^c(QBA;Wgkc?ACw|ni2?CCA$sVU+iSQ(+;sGCoEv<0|~xHnB$h! z3I0>TA*#ILh0V_EkJoA@{lgEbwn^ZOt&{%GPKL2S3yN^)hfF&j|y7FVtjy0-P+qU&x4cCYuec=qn2 z=yUxnE8A#}p`R}>Teg@_D!Gi0R;c1#)h|V_Q zHcL~H&$-oxC;t>+F`OO)=Juw&N1Z=kaSRCUA)jHW*B2g8cYyXi=4? zmWE2ANzZuZpXd&CaUz)k38RNLgO1#cWjYnyfkfrv! zNdIO_T>YSzh|RWu!Qt^xbgO`!4jPE^2L_=3x0QlJ+>dvujOR`9BiX-53#$3B4-Q_A zL3@{9Ec((tHf>uX`&j8szO2oIF*@4x_EI_e>BA0qF@GJCaj(UD{{*+U)h6_cIEB+1 zLtsI%tdQrw2A77I(z6+bq;|MHkLfqXkVjj@QU6@Yrq`BS*>5b?L?6YX%9Z4T_b2QS z7>nI}Gx=1TK(cJ+6T|h9Y)jo$n0V12^-?&VKXDh;A0D;2`RE*eUz>p53Z~RWSBaj; z*W!DsX7jKkm)P-pepFuX2wlFgi?J(Q>kPP^RtC^%WUlD|DRj|*CI{_u|iCMRgnpt{BM}LreO%(=A(Fsg0FB4W3~NCUG64aDWFK zZIgrY>%-VAI4Vwp_iR?|8By4^Qn5|l6xh@WWSTFBX*L2kR+s{L8GE4gsT6&3YAOkH z>n64T^g&1e9`WAv4%E9OY1`=$5PGN(8l%=jVgS6TJ$WTL(D3d=LR!e-U|s2F5vLbCF|vaC=umOk?>GyB>{ia$OjdTa`t zc)$#&-x!RWs-`jte?n%xb7juo@3V;|i&=R_5>xDWPPWMV=W4= zE3>^C+3u$!NSx3mp%#(BY^u*O!`#8BcVQ`8_biEBF!DmrDFt}*T@CBe?G-zWt7iS@ z_G9vaBbaqPl6m>vAfDTrSMXOrNkfW-2WHRUj_Z{Vd+N z(nmaT%LcM|=^&UB)=9=smtr=qM_G8mX{=9Rf=e#fCb*=YW#%5hEhVYA=V>OXX{=^5 zr4HeJm0Y|vwH+@sUq+{!_wl08&!{^h1J!!(V1U9WYw>b*69($2@VdfYRQFKjO7GNhjJOOeCUjRiggZf6uDQ)z zQ(1cU;{q_)eL}o#uN$+jmPVP)Rj6-kfzFc|ei*t5O^mJCnM-fTnYYu}HAPP{zqOei zdN6@4_sOfQD*Mh9mFnf5H(Pc^9 zK7ZOjT9@9v7DpZ|ej=9KFh$%msT}vUUWXr6+FWh21vfb$_$%luIN7I7y&T_=N|jyDT?g!cXLb}{R8*97rL-@%T1G)BtEtuNug{{|TVz$O@AcNfLD2b7@ z-VPy7wV&Kta*7xoc7sDv2#YVihq*eXFni<{IQYIsRCRbPG+CS@`IV(Gs`(*2?0pQT zk_UzU>kuL8)`B$??Ac@eH%vW9O>AOQi3Z1NF;$#Kb_Uvzo8uN>ZjA#a#R!_Z_3-<3 zDO|4;exF-*aC_Q$wxBr$t_mDha_L)AuD6xFX}XT_CsQ%_rxwc(_`qzJR=_OTFe>}4 z9u9{*VI%GfKKggS-^|?yKWTALHG*};RJEn>**^VdK1}O!6*T$8Nrwd@Z7w#f8V?roUtqaz7C!eeg3``fa^=uLyz$uux69=s7niXi zvt>k4vO<7P^ppLx`vTW;15mO;Qf%BYmdRxX;g%+8{^)x=hIwCQIg7^=6|Z{eHW$1U z&MQEeg3&CEpPrWqS-T2uHi^Ub>FQYe@;sU4 z@(B#qEu=>LH4c;+f)PC-*m{2sZ$Y{o+B^VGf@MMlvoIrjq6ZteLMPH{EhScH;^kO?<-^i zN5Qda{opdc8n5TYiPc;k5nrWMwST&&hYr%51OZV+R^?T@72P=)&kIPnE3E_lPv zh%c?lBo7?yV8eUQ%3ZI8^>Ei2w0m*`QxdXKQOMprxtoqR)>fmoQ8ru>*}=%9?IiKn zN0NVDjq>-O#L;`6vb-*5d^TqaH~IMx^ZQ2OhE6qN+*m4-&>aYux-GbM&{p2c^!e(| z@6c6tv{>PDHfeL7DY`DXj2U?MVITd8>BC;(xt)(uTh$s5$sEVN-O^}dYmM(|ApRN} zC$@ZK1l2!hf&9%&V(*LUOw&q(Z}u<%*Ez-TZOBiE2(qTBr;G#^Q*gT8aOPC`H(G9p z$Lo8P&}XYVwvAE)jR_m!@3&?&wNl`FCe~q9&=J(y8HL}f-l2cyMw<@NWpc7}1`fY} zm5h0y19o30lQ7dyA|hm4l&|&Ue=35%{_Q!as5%6*PmQ9Ub8ZTq6S8Rdbq$UyIxF_? zO2>1|3_InsSgL#`%&1#HEY!P@2leC05r2`y>GIUhi}-KL2S%uuceM}04g`ML{F-;Y7XEq~E9s|EGb zWVvR`1F}pu2R9ynU)i}t3yw`PAO~I!vnlUu#hKzT*nRmuo8$AC4E>M8%?#GS;4jbrJ*goCmLS29h2gUaR0DvDCwU^ zoCk$4!T*{O4j-a@gn(5I#M?>25oiYJBUJt7;w zQ7B$Aid~)`j5))8iuw-3YF>Nd>97z{v8#WNVvnj z$I(z55CUH$;$WA9(DNHNhD8Z%joZJE7!#C(61kVy=AkaE#(osmXN8cNHs|2V-vuzs zXBJi3wjDy>w~&D`!&teTaKc&LBi>ff4H)T2?ajW5I<~w;+qon7%CtzFDSZNZFIwY^ zm$_hXupFYBBSacgvT*0mH8@Q0Tb--d#|J}>vW33WXy)giF!bjxu$(AKZD&lP(Z|+N zjqzqQdRw1ZLR*7h-*SYdZz*Ei|GXj>HXHI&=`SH=nJntRT#9XxWAXZT2a$K;ehl=J z#zjwO;Rxa0%gS#l2AIziIxwEWdN81GeRSyIj99q4G?Lce_oJ>KhSHqWL}uvw0h;zK zqUUxEA+3%3#lNld@nfqj`YC=O-U>Sf*Q>m+o;*jBuTC)I{#7WL5ev~S7V!Lr8$WT+ zi4SdDPydeENuN6p$B>6=SoZuksV&??uPnSkRojbbsPiT&%KeX?Xx>eAm?Yg}p+Rpw z{0q}vKV#ap+KN>f*V+0{oou__W>WkihxHccknR&1&Mb15hG}+kTWnB*n_9m?lxGuiaPhgnzlNs?`J9Su`5aG=6TbQFAz3PXgh zgf_*B_NPh$n<59k$*$-u7l>XT?%^|CH>eZdiA}C+^Bt0Q?D?K1wzmHaUX4k@5UE_; zf43Gl{geU8o7-6bjyo(Z<*dl&Tq=_od8Weu&0BVPL$z9?phl^R_m8--mp@Y~J zjV66nNi1&AK{m)IOJsK8DZ6`EmCcg4OCom+MgJ&oHr?wlQ*5kZ`)i_EX;wT-ex^xg z6c~yk<6jbGPr%IDzv!=RfrV2qlJwvD{O-J!;1ZAz=e!w=lviTY=GcN#@IjHB>o81d zAC3Qhjb(K^q(ycI6o`jaGGnt9an_>`6-#HXC5^hK*xURJ(#7K`$unl%I%C9ft%K0% zLl;JV6p`tcUSx$;5vvaLL7r`c?gwmedf5S}d|*!PmKEBp9I3=(s#f8-RhvZB<;v*U z`U{Jx19$~wvx6BkA<=O%^OUS0Tk#>QD^Vb|FGta>(i5ocXE#blRl?N;=U|-2NSdi; z1v;+VG410!{OS-39@^%#%;gB&8*WY_jppI`eaD#Xj}mCyb{qz1L;$UyPrF@ZsCnZ@ z5X)*~*)0_)4b`OO(x0K%my^kcIizpFG0{=il~m>8BD(tIaj{L!5Xj%a$oG6Fe4iM{ zSFpW&eduwnP}##i9Q%hjc$8ROhqDU%SRrFjildsX(O{A)T-d7w(?SCAZI~_BAG(R} z4cddg8zXRMXCqr(>IiQ}I)Z=q9PjKfK^+-!5vuDXlbY*xU`JJGRGMRhufwGWmQ5k?cUrCUIAEju- zyyxK6Hy6*|5FBlPYfyEw4{NnfCY8E&K@tkbXlz&Samsmi4 zNC2K5mW8q^7tz`B69&Hx;{SF(K^2V&B>$EZNbh+^UjFh%=g3d&y66+xwbe{;OI(M~ zi5FnEvN4_TTn92IXEFDdaHc<}1w+QSph6NDf1lF!z}i^7F}>|CEe0)M!%VR!ID>+7;!q8Y}nt+o_3yR zKMSHsp0XEp^s>Q%2SWFu<#TM@SB3SlZJ0Y;j(7JL)6G%K;Es0>!1`BYzXW~QE_>W+qe!O-_dT7k+&B&|w;#ar zjoYDf{S4YXpbGA-cf`jphVXq}LKgh_K{{>kdj2_f1FiGA4OUAZiFWTP#TyM-s5)c} zyqtw-aeO0LujmBNrtGSGb1w_5-sga(oC@{ZDob7M2GM~&NKE64p;K}U#Ogj_i`FV) z+5Sl6ZpZNLo3T*rV#UkNp+LGNof@r~RUQQ+!jY~K!jo;Xj9?>~?(iqmw$ zO=}gf_--WYvew7?L;WySPMQYfETubLJmJXr)i#dd&saj0CFyWb7CcB1Xg6srf7NS) zN*)D*$I6zMu)h#@R-P6$1z@h*ZD5~d$&)ve_=|v-kQh{gOhL1V=m z)^w~JV)IHta=<5u@TmY5qZ0DtNk1-L{{)A24?~+xT|i^@!7FzY7+Nz5vnvTr4Zwkg2P>BK(2W|On>J^J?6EOsF=-SYk{Rn z8r_Yih8xgOK8!hQECD~Q`U;I@*V#!$S(p>Hp(+ zQ%O4wN@yq~o9etjM`VV~29lW(-!jYA5-JTXl0;=x8j|Xs_xq#}qD083%*+%*A^gto z54b%ZoqO-O=ktEQUeD*_wA13Sn$dJ7=L`+7cq-g38O-0=vPnFkBhSyHmqP1AMSg*l zgB~q$1M2;p+3x%H{I;PIQ#05N-294#=g%In16LOFHiIMh;v>iSz277GKGK=SBXkI# zAGeL3ywnh<8~+iKuA7TPg7U?h{kKG`i?+C2cMV%}er;)E&K$aCuz}5geuq`1>A|bi zA$@Ny(O%chcyEx3f4H6sYvqQE;%(D3jJ1IHsLtcbnG9yC3S62J(8YcBY|P6bzV7)3tZX{R zj;@#vGcpZ$zHFi7w@eaOMk|Q@CnnNtYkj(y`-E!J^-(oSjaAeP6kRmc#2?1a;#lh? zqNDB>F=LpCXkt>1{iN<@LPsratIwob+iYg??V7OlkPU7eG@s5jDM{RsNxZjVAeVdQ z4R}{6!O^bGe8`J@G>CT>muq~WGOZrsL?0({_j_+z(p!y=H#t(J+8lB3mSN&WwF*(D zXD>!+sEXS6l5x!B7+QS44@LU7(7?9WxX0a_wJyELtOrhKr58(?TUG-sed)zdI=db8 zT~pA53jn(pL3~ErNPgddXHa;zNc@su<|>pDEVEX=kYQcJNSke4*6oy(e9#KM53sdp;>k=L!s>C*E-S2 z>ZK^>St{z*JBStZ0!J=wqvX(aux;x**k?6>9JXiRp>(pv^_zf_*>QoV<_)y9+Mz4s*lumaxN-(aidV_Dpiv+TpDbY}WTg`f95 z6xT|u^JnM3;TD@(X0M?^{hMBkenxJhPtzFkx0oePY@H- zr=T7FVt{`bj_}G%q75CNcO$Qd$D!3>qwvUP2^ccu&)S;wuInuR0#Erof_Bz$nZ z05)S^!T6MSf^EnV?xgZ`D1IIV1G4nl-I)8r=9L*Ndh&V};8(&LpKoMwhxRh<;!Yfz zV+uPij0A)F7OJYLCTE8?g4>7v`2JlPbMlU09VR*OXNc6VoPUtb@%{$BzvDQ5egQ@u zR%MeGJVBS>ji`3`j39E>Z2T7kx;1eHn57S9c8yn$Wxvw>{d?a*hhUsI?bEvVl(BFJKPL5SH|~1FjYBEG^_3Q#~)>kIDW_VHjikDZDBOiM3Ck_NwqoxckF`~Y2k$Q&EKAWWHG$Scv&Zy(ryxe~YL#Uto{YdNew z-Hmp1zl?rTrlKNLPkf|X%sdC*WNJMUXp38S@sWEBrI*~p{&R{b)>x6myvelbOrZT{ z{Rmn;c|Uq4H-VCOB6r|0W3~r!xR%I=7!QH0<-%P4rUnBt<*&kl6|6uBwn(&vMFH{f^ucgK+x0b4;Okcb;^m zS%-Zry1e=*yuA1YhRlp&Dn^>@pjQmb&~RaU{RN1qzQuZPddi~Jrn6UL-Pnax1Gdn! zKYP2V1YSxx?XPPFGW9FlfzLIkvFC5H%*w-H{YBbgZWv0HkNe{j^IW!Fe8xgEhf#9t zUfg{l6dL=7u#+3*`5m=o%(19HrMAB#W#2SdI;;SD-MWrm($1mVqCWI=*FY*9bBLlT z4j=z&rKhb&xP(oY@MpFLeBA#Q{=1qFS`%J!PmUg@z#gyZ`1|(KGix;XFRQG6^~B#;Wsr#!9SdoUZWaKPPtK&RuMteGEF@_NC|L#z^u{h3(V62oJyR#M5{m z->NUeFD;Q!){#UJV|SAOq?7Rc?r$^-o61h7nz4nh70hV$V+eSo4PzdxVzc_p=C6+S zX6wH;NxAV9_!*$djDnA%r`b?8*Q}0RE=~aBD@kxV#gP)0uSg{RuGg$AA7`Fda2p6>RCtH+I z2)$ zyfNoDp7mrolZ;qnk4QN2)OWTyq5s9qWlNa|7U5#ZORIp3MH9wr6smMKqT7crE*v(}eAIl<7H_E!Mn1n%&|k z^R*`XII)t&^gc%4^K!V{3u?UbryTZof*gOPw;~H}`AN4vo&(t9Bz&0>f+6fUx6W@1 zu8P;C*_D4e|E!5z(4kT`dDJOcH}gYS=uk+Rj!CpXtbsnhN~Pu7D zx~#x9j`|F|NPoi2sU+$!TXdw1v6=od6NwEpyIDpDq8`vSm8rC}`)YbnQ$&}_MsPpJ zk6@ktD{&Bw#e?TKdU5CoYVNV3Gmf>mFgOC+k0)Y#axKnI@4#rQh2(oWl`6D$iN7ON z>F1ii)K%a|D>_HgX^A1yow|u~%1!iN-9qMUoknYiw&2q#wq!l{1mp%pQ^Rddl%<~L z&Rhzm(4m{i>)Cyj^(^E(18XtX{VG>tS|Ceqm8S{u6}acbTG&yqfq4O{6ks}DRJtHB zU3WdFE{($^uky-40_#YbzpHd>=ya*8bsn30?4s4eQ%!6Gcl~%5D3;|h;!|Z8 z*BX%QnHeSg&Zhj~9@OgKLe+WRtZO=Y`~F z%2ZyRNM$99OXFAd1v#rRtoY7lX1L{q#8{QG;=&YadLZpoj!Dm=vBO0-VU4Id)KuIl zf0~u;c}NeY8o{8i$5?r?B5TQU77M!ii&LkUQPxib@}Dn#j=x#Zj3KEMsudzAT3yDs z-(Pd3;U7n8*#ZwjJ^)NVdo)N8&(uP^C| zb9*+@u$CK??o^HXCpWV9_7-C2nx&%AISn!X^;SA_<|xh42&DdVBo}?QikP=qfvg7H zp{2!-sM~~v^jMjrma%21y|##!4B164l7Hxi#%8jabd9Fj^b`-J{y)<$FHY@VK#!HY zY0YsX@%MzksIVsyD?i7B-CAAosW@C5=5&{Q26W+k1`spt3MPuNH0$RCdQz85F}`-> z%c8ko535VxE04srcyUJ)?Z#qS zyKji-U2KhGYxmLU6N%`YbDer>#!9K`&XOWT^!13?JFbM&1zwp**0u!{sg!4MaD03W9PIM zLZbf#sdxDwgjGyq37V?>=AFBRGrD?MHuE?OeXfkF-YL?iC9a&k=3?@%`Hwrav4@lo z2%(O4B^rAs7c8p{1d}WO;6<+GKwIAQzrj_27Lzne+ErjxitgK(;Y2 zg!71e0~-fkggWamq1dSy;(ETeTm9`ZR1I}wm+i~ooS`9`vS>T2>O8_uJh}yPn)7(A zy#=h4&xM0uPBGIdro3HxH@=}um7i@tmsyPO%ln-zV&{H@G5zrx{E=mOY~!;cc1@!m z)Gjs%0pB8oj--4nKmS>9t!+l%*n^n5?H! zh@poys8}x^&JKPFAB;ez#k1((GIcHK6 z40?n7glpDK_}3y9mn~Qce-9jlCr=5kbRNVrdWa^HzjNO4P6#o%55Jb&gldD~kQFEK z!aht!=k?7JD_w(BR0XKn{RWQ>QDVMdG6i{qe-7c5ov5~YFW64a#JES7>}~rcK)}ly zVcvQNaEa>+%5G9_tM?a(Yj}swMd93rAIAaun}YAxIS_MmBHB0mJ7`F|pzmH$F!zu$ zvoO30YjVHgqQN%sjQx(5r=<7#>s5U9SGq z3Fgb2;ADC+G`OeAO#c1jTDy7+meWkejNO_hRP*IHAz?hOe|8E7hSh?9doSdQHVXys z&tvcAPr^!@N~l(w54L-sqS}ZmShhnV#lFdbm2u_5sg7^lbk&1gx5i~$&loN0m}-M2 z7oE^k>i8(vz6CwQ1nIk@%B3yRprH6{Y}i%ekk)zvx~kpL`@du%>B)PrkJ84!4ORF@ ztcCBN#?mUwqrwu$4T!UJY1ZCGRJ>tDlND|0t8p7Hnb!jUmj4nK=GUR=&lj9yLl0)D z+>0yj)r&K6dI9$@E3>di3gpw)9ixt}K$|NPZ+W>DaI#_ClRo`$_vmw2Z#fxk1S@VZ zHyBo_EaJMiO1tAXX5=LGIZvp)#$OvJ;dyxj*xuNehBv(v&P&OoB}I97?AZp4o72Y4 zGf{xz!MU8}ttN-AVWF6mqrsHN-@?olV?i%<2aeo%4dO;$M~{A4T-K!|?#;joJT0@u z_^s!0{G)VKslLsP@SV(M_Z>(9B?kCuy z8r~lUDFv#SI^ieYI;G>_mKqGx8}p#D@|KXY@dUmwN#nYWYT@vGe_Y<3a9vjknvQ#g z4=$K6Y1Agj>uko5^c;XpJ=F74g?Z(haq8Pw5NEXq?$|Yf&IoOIRWlS)2mIq2gQf@% zha_Ra+$AvUge~k2G^7o#iZpb?m6D_Pv*C`*EwtSe;?O%?OQ@USjl(emrhZI^kdpl{ zBJLZ!kVoh^lP*j#mBGg78c3M0NtPs`Ne{Uz7aHmDK?}8;2)J+pA?pl!C;WOCmJ&?@%DA3neGVH6? zg0p(>1*P{|FiH*6u4tAu5iPM`x_+#IR%zu;;x zv|qHO&J9iQCEWny~Z0=;Th=Z%A;H$C~ zF!hqLG|!C?Y|g($hryxH{D#ApQ-5*S4-NcsxE2GQ&wyp|8;KKA0jd7InQhExNb)<1 z3ENjdM&l0{)u>Mk>X!=#Jd1=AL(Z3s%InG5H<*#n*sXYX=oNH~J0;9=m8a0-F;Flm z1Wi3If{WZcQ0^u|oaaRQxTs_y#cv2&-aahMda8&GI(3e@TPq7YfY#d`1@SB*6n zLxom{GO5R+Oyh5OU`OgzY|rxr=W!}R;D>OW$vdH|*#NRXCnd*H^=R0ZPE+giATAN;V5z@W`c; z*gPN$pDq07U?FD-zBk|CHlFhG3~HQ%IGw%f64UiO@^!Ca_EZ(( z>y%l8ToJSsD3Qs(Wrzu(=<;tnSeh>Z&(AS}`_l?2jxG~^RdnI9${(md=N5FF7=)IE zWq9BG3anHeVCVZmhv_-ofv=a2IGk-e1Oew|(6=r_@Jf7*RhnZ2+4M)i87s5a#(M7B zY;~43U1AUE-xPek=VH*W?+~}x8y&2_L;tHQuxs>ltXJ#{gQ`_Q-RviZtAFHzE{*1V zH}^+-PepcbpCT*#sVkgzeGNU1c6V@gmgB1W&x7$J=U@Z&;KpoMWtXK+P2r_E*!tpz z(9k^`n!=m0X6!Vue$)c)BVtfbP7bu^9KjjxTFmawGfqv)EZsQOgaNisV9?-HOmKPw zE81#6?qfIxj2sBfj%ASIvH_g+%N)W>n+3IZbwb>oc-etNzv1lSF8rHQg>kM*6xY3+ z^BM6I#`?P8iXs(q-4+Rh2EKhB0uzR5<-5XU3?>F{>zrUTxVES>&8?l*c48EhD z^E-I)Ya<3`_Y~Sgr()gHKls=18pwB)IOJ*;qD;ypTbP?u_dO%2SRZKG7JpiOs)L0s zu;;CkT-i={9r0$u16tF^oW!p>to8S2{34yTqY5XA@!?q%6`YTi(grXhiAz{*1Ud~R7k3H9uHvVvCJ{A#_{B@{!pxPWQT#iXB zgdO6b#;syrRU~eI)JL4B(p$`nI7yCgdczN&Hdf@Q#HUbSzA4U)H;a4)<;$<4$JO`L z@L>#Z^;ie;-i~C7i%UV?aV#zmz9QWBTFuK{+{b4n^xzd={K6lfmI`6N#4I*qTNKHa*yS ztx>#}f*~`OSOmE-Ls{0L!z?+e4OMlnz|)K)^y1)AsyKs892)5mcs@mPYsjciG@^da z3YPxnr)+z8GCT9{DjT-qGSja)$d-lo68y3j(VZtB;dA7D_V(Wh{!pPm+fh6bbRI}& z!1nu)OxMRCKuqTeBR>ee2k0fWVB4>Q{N#5V_@%rmyZt_e8V^MZPa-d{ z*7_*Qbh}K}8=3g`aD?b`CtZx%bx3SHJ59_FE1*FMy_ostKNuLlPFUwu%B9Di6OP8m zp_ae47~QBQesnrQIsq$Kq`7oPDksS?C-6vXx7FmgVlN6!TMOiUoQXNI9~Mxg5X4_NThj*;r-zI)I>IOd7OF z`#~M^P2#ql+Ty7XkLd37e02324W^SKShMXYJnq$#rp=PLK%Oh8a*74z-xwt7-N_Wy zGK$3OH{OYlZkUywYoHvLw$51yr2oL7cS*6bzWh zT1PJt*B*>?N!>7 zf6d{eTn4?HP{eHa4Q2DS3Yhk}sVp~Y1a+k!WWV@gFtDh_cR}~jC*n8!)1AZpE;OZ? z%F5zPmn4xjP7rSodByFzXUYG#JDqpG=FI1o$YA>=Bbpz7jIup!u#dxGvI~*UVrHJK zV#E~o`oRmfamH+ZXLAT^x)8#q1l_^!N7A_X{lQrIN%D`DTd|{FTO2;;Fg~Rwi#3nG z3xjg3`MIAeVe^UYFr~$s*E~6juSt`!%0to2aKRlYeJiqObL=R$Z*Lg-q7K&T0NKUO zXB8`B8#JbUpf>DK1alW-HU*JR0w zcS?_cvBQiUduIp=-CnWfe*^iLp`$^k&X=v^rtl-u>flX>I)$wWWcQ{9vi&!|v%%|! z@Y9F)bEv@t*k%ma|@sk57rPzje$VE{O`fg%8J^Txua&;xljj{U6)i>?nv| z4w8evGkH&_pa%nkC}o?XIMTn0o=xv1=6lD|)nUu&*NH1^>f&24@nbKru6zf1AC63zo4N&{%B2Kfjeu1;35h^65qFXxe7h5@*N{ z7DF-Z`U48sW6v5;o&JuyNwW_}(+>DV&O5cl!>+@rhv+VFEaDXBa^(R5w}Bcku|U zuF2=@n-8+$7!~HeMGg*Lna1)|;#g19yX^306QQ5=eAaxbgA1E{lOA+$pbH&Ae9niN z)Rs4Z6>7g=yUbp)ZOcbuzva7u^B+KbkrDNEwPO<&6vKewsm!~w6>dlvi}cl#S)%7K zerCH47bdaf21P}%^HY^#1sXnJ#I<S_Ts@1h&2J@tRFjv7|F-ocuf1n zLUt!!k?$C8#zOAhVN3TPAfLnIMW4jmB>VE0$vSeG#k5RF*;3DyIQ|tHKL2#E%l!dA z4l1%(JyllFZItLJaT^X5U8dW{<3#Q2(^Rxb85sS(WBBzZaB6HA-D^4y)EF zk&R;>W*(dZS$l85>xx9~u7@*W#Y7>m^R`f0Za|An7Kl^I0>v8LWiyM83A+f-s-TzMVC$7$oZa1G{jAR9CPmV;{2NATV5%w7Mi zL3i)pg*LSw)a-s7yS@W;NELDnp-^qqyzP zORoG!0LsrE!?otW5?s7z;N~wcp#8onj(sd}^6Bs3S{y=2<}>@j9f~Ah>?MS3S7Wx> z2C%C<0<$+Mla2QsNUoF4L1*TJ-jWtji%CZ7wVjakcRX}OE`(+Ca=|dx5!(lc;=D(x zs42bX6|w7-y4E&Z(xZ=p!mfc$pp`8~f67|wTwYwvZaWy(hhTqXgXs z-p7F1!>C`9JQ;6v!L8H6;d}adnXk!z+>9UBV4v$XoVV5;k{2Gsq_l;w!uJZeuOEZH z2F0AB$v()mumwf^YAGM1Ljkst!h&nPxFKHB>?H05n1`ot zdIs}Sj&Tlls-US*%iVB}#gN|z;K4MB+48VI8!HVpd>+f7_kJrWA8`lWL;GSwYCF#H zI0DMjwc2l73Tq!mNqx~oc#GwjG0qeNgocWdf@iJ0 z(Cm{4zge;nTKx;m<>DQxz4_7$E9^11Uhaj2_L)u|AI}CREgrr*t>bEPv zxNo$>!^0A%@>v?HFW05BZe}#^_5&C@@f-$KxM9utT8YWg7gKz1V#ClnsQQ`%0h4Zm z<&Z4FpDOU?f@p}y(_|m^4g_NZAB?}LOBs@HrT6h{yuC0R$NY}Qeplql=U;d7csU8Q zD%&t`=XuoEwuGRoTC#-A3RshDjpfdQAlIVnQ02H8(>=p5=}a_OY7n-@7~p2*LRdej z5F@{y!OT~^x$pBj@spMsy_x#O{>*b7(9}~U%dBp~`8_inmaiHl$vG==>yoL^&((-r zOCf6xF)5bkFmSw)X$(6W&mKld@kmXln&Uamb z%y1Eca&Qe^?o5HgksEQUdjk$0;121lRi&KAEjX+51@i|y=kB~YhZfcK=+;Y(s-4PV z%BCXDJo&4z%3Tfbu1OM3e4p(wys{8plSyU_Q>2MjM;06`gf zf(aZHTJzZ|sA}Vaf!nV0IJAThA4`GFQX93Eik#Voc6$wV=$KwRmToGCkb-6*-eq&{{E!EF5`hK6MCm z58lC)$?CK>xB=j5AwZNI$ zbSjSVT_c=ZO49E{D_)lFY5U*YfT$DgVAu2>I=;?=v0ceR@#jRLY12t`@1{-rJWR0F z=!B4UZXN7d9R|CutFjIC{b-r*G!R?*(o`Ec!7}bJcfd`XZU)r~$KJ#V*4Cf7=T#4I znbmE0fA6c1bU+#V{?RAz=rh7Rzb@Qt@*ST`$CSujl^I6YIE$ zlr)(rn4-GJR~S;JfoC>nLZ|vY!S>y8(0cmRUiqg26o4)j*ZY`uKm+PWsGz0&Az{WoRmt&KDrkO6fSUI{c(C$5zRLI`ta_@66&BC&j!C>Q zJR({)bakiXTRIQJlsg4q*U0T%JIX#wN5sD!`MCdDH8jZmlX>Pe3uA1$lV_wFOwljG zBaYvpaLQ=Rx>S!JPWfQT(M?!%qXyMhJQYrQRR|Ayt5VMcN$}+GX=zuggQo_a$A>Y! zXtiP#-i6V4Wk(WdpWnfi{|dp{QEgn@>3)K_G{gVC;SroM&&F#itFd8!6=w_bbftGC zwn@)|-n9eKH$>pFVv3+-+e!?)V?erVo#2V-J=x03x|Hxm396z;QPEsmD%5m^9JO@R z&2|xbOxq9B?A`H0i5!LeP_&N;%|kIR6J~3kM7oU{5lJQvoRJOX;5 z-OK(I^7R_3ygGr;_x42VFU7ERv?h}ee z=p6jBw7yXuP0sGe2jM?)Wb9^C>T6DKgT8V*Pn|<^tIxRM?Glh=M8c4$TKqA^giMb~ ze3*)T&@MD$ez-M$4=BRA{wtw(UkfOopC>4ckaFF#cY~M2-}yd5on@XI#`%tIa7Z@4 z4&lxj!v0~8;Ca;<;1w!x#@c)=82TP=-2I0QnNzvZ>VX)TF@z?W9fsoWqdB!-;X=h# z3!G^>9ljSNgGpQw^jrQLqYga-hj&e2JE=j4f`yQ~doa`&FT`?{E^Lpw4OQ{G!BTz& zdJo8gkRSz`n)wSZd{U+#+f>Moo^kSXuH%#HVpL4|jm7M#toY~xxV!TXR^>QwhAOTQ z)YFzr*;gsVMb0XnRF(xeUQS}s9zplKS*W=DIi6gTjen=U0P9pWGBnl){g^~lQkN&+ zkVwJubU)7X`ct8IdL{Y{^TV1zX`f~ES#TcYY44oANx0G00LA^n;OYsfqpVQ@O*cBx z#3coD9yg)h+DV*USR-z>k~#&8b_-RP%>`%mb}ae67Lw9W;GQ>^u~^vz_1yM?<Nd`{?Ol zc~7Z7p{b0XUnEAtM_2THvWYXQm3qp@7hz80Psnn81-@2Yg3I8oIDAVLIL-9A!*&gN$w zQf}WBs=S|a0SQL{HhqA4X+Nv?_a7JAE<#j>J+8kL4wiNI9IAu@F0!@@;_h#S23LLf z{5ukMeV&MgyYd_oFWiLwR+rHA$}`*`jH94SQNT?*IRX#M;_3k-SdMr3r@dw5LgqT^?L&DR$cOg9 z?RcbR1Zc$_phZUd^l_I1JqwE@*)U~VXlg}$$5pYBUO{Yiix(YPl}n0YQ?btk8&)@Y z7YM6AQhA?I-1fKkC|9ZggHSwQvXCaeJ3)JXWsRo(TS8O~}h-pW^gN|g= z`UfAj2hh`Nc@z--7)x)ZV|Ig)_`dKFC9T`WEuVjnO_bMTp(BQ{-~Cq5#rG5OisxNH z)$s#ne~MxjuX@qx7p`RY$O9}!cHpzeiB#@!M9>T025(*SXj=M0%6t?@6nBI?-s*{# zOA4vakf}7|hnsLuS)NL2Z_vTvf#S>2R$_;P1Kaexl6mbg<-afM&pdCLuz2dufDzB+Ju}k{m{Jxj;>A z+VXxNEp2QDx>vv*{I-)iJHFFhc@>Iu8BWs$HNNBDEMD+Gz!x?|@xR;q^35X;vfD0G zn0k~0+jw(6j+rezlfU$Ycao!V|CTQ>%*ufFod~A|B}1uDVkzhc4B{j5klkCS$DU7k zVgEOM8p#*Eg~6V~pylx*R`Gp=kZK-BUG`^bWMDSCsq4xbyhiZLUvRwT0ad=K&XA3J zvlc5Kujgox7Qb-(9(GytxYVQM_$|D|Ux;XATeoZShCX{>Vws)rXpI3ss(dtGvR8{= z^(~x6m2IStIS**m_H>x>i^Kn}yF#z7RvKU|^$(UPvDlOOtV&6p8A%O;&B6M7()bc? zk8=uB>c5gDO<&A^itEk~AF0W2)U(E}M#-Zw`3&1L;h5xrUPAkVpUJw#~CV;o0Ay_tjVy^e&0}Cif9`wOH|= z%^lda$iwj9@@zH&t@(vluCfnWy(nw7vKaEuk^AZ~ke&C^;(N?EEj)Hx%#2sYu&2vr zus%sOEFrZ84leScZ}05c3GWXuzQUS(%kMMaobzm}$#`bi62%OBYgmt&ZEWZ6y>w;e zVK&=&A2%y)51uG`3G;n5`3Xa%e)QuZEID356#m8%H)jDCd?6V!MjQv_uL;ntWHZ~? z>c}tuqR(I5U5MQst7+2oeJr_fC^n7V!M;kI+MY|6z)K5P*rPrdvU7KWY-k#L{zyX% z8@Y)!j8X*W_F4FDVj^cV;t9j`A8Vl9J`bC*;z*e+snzmKw^O z=kVEA*7FVu;vzJS_h;~5opGQ9;Mn3uJjzWqyNx9eZhB&%NHqa(A$$nnEOSKmmQmz0C2 zSFGl}J9_f{ul5&iJibesr<-XMt5U{#1mhDSam z1?ifH9chLnbB=n9)e?=;L^A%(i=+0ai`k}06dTlCoY7E7T~5=<&|31~B&+jz=1aKi zJ3g`%CP(4KNat| z>wXqae2C+sHmGCrn;?2=^Go6^y_9%AJ!x?2H8|F;NrPWV{p!h#!emS6nZhuddt?Gj zR-S}oo?L;2Y8n)NV;^-I>rm^6cv3a>qN_P;+0oAvS!SO}+~)PCY5n5+D3t%=`ZRZ< zbZCK+RsC6+t}Xi@H=D8zi)cdMU34dT8fCszVxPnRu~|+%*piABq_?4jRWn=Z@tTy(^@+Lbh|*9Zx0bDn*(N@M;0^K>aqhhZ^g!z#>ojs9FPutg7tg{c%{V+?pTI7) zE~OB?cxnqM!RhC{NN1XX_>KQZXAaGvjSrTvE5AFTWk|tAt$s2#W>YUJoT4OJYwOUH z&e6>ilyVMmqlG?zo?27yM0m|0*@!XmT{$q{Bk|;-``H+o+a` z-v-kg$zKukN=IxB+D`91uTy<<9&L;0iB3Nc(xFltdaQ1X22*`mrc)W*R_RY=ZT;D+ zz`GE4VX_d|8N<1z7NhU|HxAcw6`0D1b1Zmuf#esz4sB_#Q0ZtPo|vdD++1-TZO`1H z>OtiM70zr}iw}J)ii0zI52D4|HkjOboYeoEV%D3BS?K-;?33gP;NSFPO>$qrSIT@e z)W>m#LT{{Ea}-+7}vUi$9m!sZxPv`kwCDHYeaExlAE4`CVD275#K^}F0+ zJ!2R<)mHEu-4kaU+yL)J4{X_R8Lkb~CiS`HxF_l(YN}mDeUm!8zT+4czpt~;d=@F# z{*ihe0U(fpCaE2J!gcu8aeFe#V9N{*c4uh_-2HSLTUNyov+hst(t>D@Q4YRQ%i!ip z=iII`FUlWyk{*Rv(iG7I7j&Bh5BE-@F`>igEu@6|?_XxMs3FRa1kL9V3c|47_bH~tfKI^h0_n)E8&oryhF)p!me*1N( zyPQd^v#oJ?TstPNnS{l@vRJIDh@tnoB)|VOko&V`p-k#I+xobkXl^_p7&PRdpVl(m zmgB}n5HZ&nmCIk8Dd1{p&$vT`>_xrm5}r_|!Mo&7VR+LBbkADKPhWn*+3mzd(oKO{~d=egKjgkwI?LU_H9PBCnLzIe-mKv!v6F^v@y zGaA%-s-XvSVY}-r?04XnL~(pBbx*MX_szRuW8-w3Z?1;=r?=A0QQi>JWsZ#-MaHu8 zR4S$IO|^m-5HE5P&WH>v^^QXHxP686E=))1*~yr5+Z5OTS}YLL0=WIe6Re{KfZW4+ z*!1Ha6wMw$+eZwi+b&#!w`>}%c{z<%-Hzgu%gP*T6X)UumAg>9L4$Vno`uQPP0$QV zbXL+YP=ApGHAB>4-vm3H9r6tim1yGS3rl#fr4e7f&mFT5+3~jaFRUnCx@yqzAz1L} zA$Vwry9z}II%Jy}eRbj*82mX-&rNv^V|I%3jqzy`KVu%wnrFo=hrY#EkL2jX8*d>X z`~;jlCwi@CRKj(Oe)Nv@Hp$Kfy;V7(kvR3K5qG+AjBL11#qSKmV)vQkePO7`Vee#% zR~AT&URr~#i52~FaEzEe>PI)X%hPwW)96TiiC5=U5v7~<_&!;VJZW;`Zxf~I^pm^k z$3DvRu%S3}Y}KJH*WN>ax`=+784cTaEhjOXwz995hESZoPJ92z{nSPhCDs zB9r>i8`WnaXLf&@@0>)(>x z#{DcN8|K4;lugt^DwTT0|3^Rc?4^db>2$eeER`=9Lpz>d28{(T;pL+V;MT_(?AFJj zscAg=pJx)?wNfIU6ceU#9XSGH= z|JEXIcC`<`_Qe#w8J~oUAsN(D{|p`J$EXb)rd8gXX@S26H55*QFw2BK`cMLwVt+HW znxhyJ^#D>rH0h$O|6t_qZ4el2Eit>OPQ410_+e*lOtw~{eP5M29JcZ0a+8`b@xE3Npt{hn#;RoviaM}Ccbe% zHP>%0;xbe3aIO8{_{`}F7hS%_@shV!kw2OSX%pV#(=RpX)ucwoF1x|%v_!V6TL)&3 zQw9BiEC{&6+0*KOr0Re*{nTJgzizjnP&WW~B$)DuPi8P}cqCNr7|O33_Tz(#hx1ud z@%+AACEqfql}m5`&2RR7&CkBP%5_I{@rHjV_z|B2d|?*wch&-KvY(F6_iaP6bP#6s zH5Q6A!@$^T9(zJuVVP6`IXU$&1gYfGi#f(<%l;6{br(<}>pFZ_%!VaHSAhAQ8ph7_ z<0DV*^N zqf4??WG-HnyvLeJHEj05tGK}bHMV`sMJZ~_lw&f9pMNe%J!npY6Xa=ikpq?1tA$L( z^{`5RJRW_pA5!(U({J{}sdtSz%={vQk5_aGr)K>Ux|`Lw)!qM4HrWJrO}oT??|kN% z&un1VvRF9iX9)qL-;inI@1j#?@`qOzVn|XFn%VthC#PH@R(>|fL zGLTPlhBYHKsr$o+P&no#>lr9IR7)xPBu*!Pm&iia{jXw2YcKU0xtV&METhHyr_g=b zd*Oreap=x^2%oNL}Zevk?U!%2c5wke>E0LyeqX{Mp=q24oLeJzN1^rI?XPG#7*e8~NdlrLZ7mH%+XK zCE2IPIQ|}tICOzaRqQVfuIFRPL%Nl?vsD4P?0g&T$v7Uq!Ap=_)u!Io_hC=AD%}+2 zPgi#DpwcydG$Sp6O23!_&+#McIrxl~$v$C$)|`D2R=V<1Aay!A zn=Z;e2q>TH_+&>IY*O5Yv*m_xo%|J5E-??qj_f7!?^ruNKUhpEYi82Fh2l>4ZX0&R zJ;sD{7qBa09?yv|!iXEvbggMG^Vhn~O4OyHag;05S@)5h-I+`_(F|7qLY24dJc)It zqtLD`8E!dlhk@Oz@crpBEFR%VVq>jw<9&VJK5a7#;Y!qqhq4B@McnWAG&W_V5|k#c z$DDF$p4p?$jZOz(k?vs@80|)E%uU$YcZKYBXgvGfT|{CpDq?@LzeHP6il|?iz_RiV zN@~rXvnHMY$mO8}$uiq2GVNqEQ7NZHIsYn&kF6(cAD_p4HV3MT(sfZJF71*Pe8z~jJl)asDtrX|(rc>E|zMXJ$+g{x?CxhMT>WQGfVR>LDr z@wr==2P%6#;l<{&_%-Z`M98O~Cx`|+7uCc~CN4)|2ll-_Kuh1=0jVVt!uHFtS{fztlC?d}IQc+(B&9#u|{ zUsyu7XGh_{54kw>uN3<1eonqeQNCr2$On~aCb1?7>~w`Zu51|q8zvsYRicBrpv|Z% z{YpAsn7528Ob~F7`)gtPzz?`GJ{eQ?PT&O!^{g}7hHLqs!}mT@c`)@R?JE zHD^cjh7?zRzp@nz-sCW|B0GL$=M>(rWiNL=oIy&yXA7EJKQh1To;0s#3Uv=yf@4+M z@zt7TDD^QF>&0{G)OYiQ5#I9Dv*su2MBc&WKTi@aLd2Q4>Uc6MKlK*Bs(oUmJ(VzFbULUd4`53@TS)OK34HpkMpxZ@ z4zCYkmG09q@ZB;L9S<(%*%fCn-BFcRx%IGKll!bJ@DkAtIs_iYspz`Rh2Cs`%v5$P zqo3E#6Q57LAhY?W@G$!Ye*7zgm9BeW^UW2IaQi%LJETt^or#BG9_L}k=LVtk<0r|7 zP)}IYPnPsc3Wq_8OUS;G6U@qcH{J=)LFwre*zxs!VXTxUO6onKI)USDqi~7p&``;b z-4xJyIC#tnXS$13xW)TNRi1sLB+FvWvB>p2be{VHD@V_!HK|A8i^C9{9()RCMoM$N zwlDZ~*Cbr2kP5+0DWDcO2%ol`5@HJVF!H(rA5+=~M>uO@%lkaGXK)yX?2O_!Vr5{z zX#uVaPQi$SRphvn5eC_7LV}Vj+}?Nqw}-moyNC`rK71gZZoMD&{=R^_&adG&*c&u- zQQ{73a!}`Ol8~`}6{AzbK(Tc)o$n=bUT;=or*j!57!}|`ty9DyVmMXS+ki{UNAh#g z{(RScd9LEnDa8LhjSsu5Q5cj$?!CRsE^5|+w5$!aQ0q^J2j;-h$3M|buMaPhPDO3` zW*oakjlU`rFnE|Wb*~smpNPGM#~;!T7y4CMb1b zv}ZXlY1HMXe=Xsjv8CvDR|(47-osaM&%SVv6P>7%3h7m$l3{<% z=-&XY{4>;BoP#pw|t5YKVDii*R`6as!UK+=Z=Y%880n77o=*!lhY3{OgZB+*I^E=d4gg z_0&fEXfl)kJ-vwkH$Mt@{%rx9r+RRHgV}~1-Z0WC5G?&xNfM(}NyN}z7^*mn z&J4DK%f}L#uu~4Q$ECxu75U(_7s%Dpa^n3)6%^O?;(-?@@Wk9Ud}!#xZ7el-Plm{^ z=@k7D{ype9c?`d|FpXTjWJI%U)Tphl3|em{Rm(nQkltg1KyS_@cBJaQBvw3c?b%oj zdv;zWGE?Qa$%lz}d2tgd2-X0Tfs4V<^#ypvo#6fMQbItFyY{lpC7 z`_77cdwKIYFYe-$m}s;s7a6wY-$d@aBCq=~17ka{;q;Z7{F{p=f44pipAV9SzAqCc z`-WQ;X04p~id17hs0C`~1_gk$o)sij$vP^5*MTv7Ct4O?wy?{FwpTsx1;5@3TaH z{2obM_Zj?K+n4@JI7K7@Axz~-E$n|?4JE5I`9+}?`r8Dv=)keCE-4+(_Yb8*bd=EN zRu&q!bfQyJUp}MzApY7YGL_yW3PCQnAb8qH2zqmjoV&jkR*WQIaU~Ld#0)0-@~eqw zSvP*M+Kd;Rq9G={ip=aS2Kj*7;M4vNvM0WUki`AqX7j~StIZqQR7Hk#`5wAZW&->O z^~3D3X1tL(pXJ)hnNPnFeh;@uU}{6USRCf$b8 zf1!BidIRdJ{35~W(J(b}1dY^_rwe^#>9)(KVPfK0(j#WXPFa4Fq(--bYHPECF0(YjgBAj&ljkF5%#Pm4dp z?_rK~Q)xdsKp`E9KXk$Ph-+YEu@0PO8PScp2kD3=*p_vlDzy)kAQ%1&y2PO4F9vQp26s ziP^#kR8g2u!k6s^%M^ErRjr2#Lu*+3Yyi|G&!!`;sKMSx$0W(iKCza(B#bH832i+# z^xzx?n!95u1s5-R@lPe_w0wfW4_sJ+Gh7O-MXSUe$+OxQ(C5s0YJXgs z4jz?<*IIvJ$TB%z5wjY6Y|dfWz`pFtmZPw`;1smS%YuDuFDuL`Vdt*qf{fND!Qs0F ztsJ3^|LR8L0qObpK{^-B!=&KtdUvi@w1ux4^cg+I>;SunzVIi)kcaj8%-7dgau2ab z`FZC+>VL8pbV~x!txJt58O^}XvN^=;wfy@967e_(t38U_nz>AU1b?}#4h?66Lw?iZ?gMX zKD*p+1u2QOB|X)@*`WT(#Jf*2i5{1Qc?rm=>V7}kBHb}wELP)&WTD3#7MP#H=36(hX_Z~<#+X*gUL6(G zdl$hJpNl-OD=SF*Lru81T#keu{lq54?`6sNbJ@iLFZMIuk5xR*BkqNj)3|No|3}FdSuw^$Hd%j7W0@NNb2Xj zVjixHy($i4yQWx^89oom!U!q&bUB^T&^U71Y*|%Rjui|3D~)3snjD9J_jb%Y%7xqR zXV{f%A%b&*8{4imP$CxPg@8?(SbX{oTX|EBu`3}&)BHKPoYcWaSzZ>rhu}1oL_GAh@pG><7M;x^lJo+h%}P9bcBvFb z_d6?G9G6Naoog1dg5899u!FRoTr0_ZrHyA4jZx$D9dhZUGD_{$wGR!RD;d?8&borf z3rEgnu{)(d$$Y&p>~BH}3;cJ07=J2Zb}kZOP}WQ`!2XtFQAiAXS*#$uV|hgS$Xs$| zb31cBT2AB}`rzhW>iAFe*Nm>#A)X^5tE`p6nbsU#OuBuks?k1~wLMn?Mg22`5ldFG zqLajrab`N(pRhCXO6WCD4t^;$GPfDEk_~dqF{qCj@{z|_!IuYYXa4{;_;xMZxn2V+ zPe^0caB0VXMqim!m=YdYqrnV|#P@OAhm56NB?)3CcD>RUwz2FeOX$`@?ZN$s(^wD2 zeC(OeDrM4Unj~ z%u{_S?EWQ%UKa;puBXL?uF$b$bECkX|0s}*J#kQ&d;2i^(yK#KI?oW#^O+>~b_*HS z*dj^({?W0e-~dZ)?qSKxpE>6GK4mq}e~^iNo{>R6PLYBsL$U4hSjm>XCCo%-2&+4+ zi-wcNk|9PW`1jUewD&nimZV;1%6ZxB`_iFgNJAc(vHKcHyAa91RSBDJ&ta2&)0x8d zZjxm*j+B4=z+xv}Vs=_LB_sdKVmH>0C0dJH*vDlSBq{l?aPQC;_H5l2c6^@5ZYkcw zLZ`lAYrl^oQ_HIy-)$d^y+ev5jYiRusv(hrNBeQMKVBU_*uG&qtS_@v^$POyg*7^z zdnr*qI)M#({D10~V8ja~86C(9cg|(++CB@0 za~?>pDE*Z@AG(;y8GABK-5jQFw3gT>>JpoiR;d3VU6^8;BkBEljl5axBKR~`IWC{~ zh}hndkkR7(u`uiyxqMKO$cJdLWi`q;H~AwAH+{&4uGb+7O=sEU;8s?b7Q|BOWZB>^ z1~^M+AkLn0RQP1k#tOvq@in?vgop%Xe0qBgQ6-|zD1Hdmgk*zWA`rG70_ zf2;3!?0XTb_@zu1ZhKGiolZ%91!WMozywlLE@o4uBqVCoC}#FDL71=fK$7pfosIc+ zfLz^WE(sTT9s|#hXTRGuaBBQHHb->yrmy|Qy43rSSBuJ-+6hH0+p8%Ye3`^DA2bMW z)t-|6Iai6nHgVn-T8LAhm82_uuw>!GMQqsMr;^a=Ma*sdJJO|lh#Zgp!Bpy=k>LGu z%(Zj?i5xeGTrRF*>pYf8&X|i?d#i~=-`o(xcXYGDA@!01xh$gW@SW8t%c8{tYi8=Z zpWRFhl!Tp8MW?9>SU<*}#NATCwwz_;j<^?->f4u9Hm$5GD}F@s_T3=CZdq)3t2W;K zu!ntU)5HQNKf&?YRI)_X691c?ELo{!LB6;C$1bm1EPmh8*m22zvflTyMD>vmAtjlT zrOEM|{-mZT7c*;3F&wTN~>CEMdtBZ+o*CyT9i zvOjJqL~6kZ=FuaK|GnBvOotUYejlmM90%IrlsoP0cs~XFntE7xVcx}liybWYetCkc z3m0Y|RYaR(sU#!Z64&nTW&6BsSXccJX0Tft6_1}M&illkN9_Z)OhBS_d>nh8ri(v= zipYR(g~W7i0vX=vK(tLYh)5>Zr-2|Mh|^Tv}aF|Ed23-ElSU2k#dK~ z!u?0t-j=?2#iEnl+Fea%9#g`SxPNTKrb>44_!hzMOBnGJopbjbA6G^1AB-dVT_Z!! z>ytHye+bi~uCfUOt?*~WHgYyrhh&*Vu^s2mk#8<}WSF)R`RiTJY<|WuXM=CVcyJDR zWt2k(4Yb7aaoQ~RWlq)Z{^=~cT9cJFDC4Gew&eP(0c1{X8wpa`E|Ix55?8KKK-r&C zXriW1jMr7O0aaa9i~7n*RM(tkiYpXh#poPi#Jl(G$OMsY{#?w-x_FVC`Un>KAdqR- z$ie=aUo6J&7^&5EU(DugA1jS>?1dHO~=v*FTgjTi(Jp z1m&}W-a$CYw?eXP^8ym|r$2LYEfpeD6d_1ZgHfS&tZDiOQfc#@G%e3#XTSP0*)7Fv zZM;2sWe`L3&RittUP$AGJK8KcLW3MXTSruumNQdJbKzoT7~A&w7i+&KM&F~8SjmGm zOqiHLrnd#K3fnV8Ph~%Ad$m|{(o^I(m)kJ6LyrZ6-y4bBxnY8v*!Qkg>5FGeib;9c zb)sxIjTJRFv;E|O;5j~o#Z)OVwZ(CQ^Fnz%8E{jgVP8v(X4jI*|D@62!x55Vp2AE9 z4Z|Jn5p2rY*KB{zXfpaxC(*0YVcMc|B2X%h=^fD_%0~thw?h(1vdm?+_UZ<9W6&>l zZ{>9%-{TJR{{5RBk$p#AeO*PO!oCva4+i*kYabl)wwf5!g|cYa4vu$L@6|t8#PYEXEM3DT43b?DinAQJxoz*|R%DjFaCojsCL=T=i zRs_U2dbm2Wu-CF6HBMi$=<`ov8F#;Gadsye>5GIcsT1{Lm)O>zY@$5=1R3>h5lKGb zEHwR4L+M==7b@Pj2p(sj5P7>5Ec3f6xFzot`p?|OYIKW)_hvaHIY^G&DY!w5cD0bU zDQ}4J!$|T&E1xVJDnlAQC$YA~0ggqV+lfJThft^-O|DkSpj~Jli6tAE@{~$a?Rk>@ zotQ~}C&^-LbgOVr-kj{3O<9)OEM_CJnPS&*p~9fQIK#~$BmeAW`;@ELiXeG34tY$1 z&M9O1UT0P{^A`yU7iS}NEs5JNSHVrKzp(RzG_3wAKF5E`N{XiBk*iGy8548*6^<7q z_4#tR@tZu1ak#|BPnO5MF9tB_O>3)q+<&nZhYH!Kl`+i5p_!bN3up2HShd0dCd6n879V2h`hMh*bq*L@#}QP5^BWm%wsbAt2($2KE)=4CpxYPi;%2c(=MJ< zh>UZic(QYn96Z%F$79~g=oz|(xu5Z3qgJdHxu0p|MqoO5b?-K*ko9n^-e<_1V@01v zvJ`(UGF(b{H(OdLr4=wg&Dd){$|0PY8APKk(3>Sk&5_1g51^F-d+J{+Luu za<)m6d~5*s>QuTW>jc$!;YT%34xt{wlO);i58;SnGcGk|4bRLvEHS+_kZ$g@rEW~O zYO#?FPJ0(EDOsNajfsXh#XyetO_HXSbHeE7ewuW48i(ZxrC_Vipyh-;?Q3T#Y}6fw zPVKUkCb-k@Tf*rCnJ@hq z@A(%CObx{7Sg0R;_5mLaBUU+3oZ!9L%;GCGp z9ySU#It&Jtlo52*TSxfO>cZN`9)iG?vUGmODYCudu*9fP3isFE!LA)U+0sw8*zq9+ zZLT{JZ@KxBOQ*-6T%`>^Gkyl2v%`)To==2~%0f2w>u@Z({|e6Rp8)5-go5iu25Duz zWK?IQL~-GR3z_+EU`gNqplr@uKnn%(Sz!$Qz?^7jQ6kBVK7eCqz8bbVJCNBg4wEBSqsT&0e?7*i z4uVsFde`lTSc54v=vEHgw7SjOyI+B-`Ca(=eLOrqDUEsd`Pi?G@RLgMgvop&Z~v3Q z#^aY*zwa@`)KHFJQgeozD*I@MwjQ0-F)wp5{~d0F_wGDJ zt;hs8JkJH+bf- zIlmkCmTmJDh=ySWgC~)&_+>81eesLD)^3KZ2d3=ns~lLrTAoifR)dzGA0@jLMDDKn z3&{k{d+deF40=!ej31tQVTEQaoL{mReD$WH=l3?r{z7r@u|tXfIj77mz=01tx0&lq zUe2$qROJ7unDTq4>u^qo8N6*JDASur9OwRqaeKds%%sWSLayVNr$}zb!zG2nQ+fP zWBI%LEBHwNLwxlCk&S+7K7JZJ5O(A*plK1}IoFUObV%l5IC9#aXKy-4#G9$`Z^>BU zYAwZ4dhz&v;(VCs@rk93`X?wgJjP##?&0wQZ(akAe7$SBcs~4E^qV}ym|u?g=5{)6 z$+?M}<_zR*Gn{$zkYW5o`7myI)RNkS#ZooHhY;V~L+&oP3hUQ~U}jY|YHAHc@5zN^ zcRzJdoi`P0hkjzi`^yj)7kltu)WTfi=kQ@m*YVy(>$&Y)OWt>s==NIj1RIAB;dVDw z_)vv#kk}l;M+S5FZwp_3#s3Yu>`ur2P=I|CwaJ*yUQ`7LI0y!@=wO zUT_xA;HT$bWTVTfv8Pb%9!Rfe+Y{2zaa{_^ZtBa!=XImh(bxFBLX%s{7Kyz0EWFdE zF036E2nV2-`561~3;oh~p_MUzG1VPD2Y!axqfbIi+kCL0dkH?MCgC@R@}=(#=%>Q9 zaA`+Bj4c1f*4(MY=!iI??6rXx=t%RcR}^4h)^oJItBObMMqt-?N6FOh=h6Jx4wOjl zk_G<5P~mDg8hk zi|couX$3a3*75I9_WWzK(|v`;eGD=7{t3ZJN}OjKUHO*fohUO}m7nsA!O~HOCC2^F z!R+Kx9HVZ>Ez5#aH7}zuREz|yf2Cnc7 z_Ib){*6-j_bUU{SA1*V6;J*>Vo4=#5_vLxm9pB|BTyW<}NoqXlP=B&ZzW`6j2BZ6= zGb}JQk()K{{4fT6MNKi!^)b%tH{hK3j#%L+7I&m~F@tK7?z8{43`%gfv zn6vveC`^Ez(g;T@VX4(Y{O`3Mms=2lMOW{__=^7^pvMLR(mi3vLI#^xTG4;L-$6tF zVO5&vUVgr1Est&qlU%Ue!*n+)k}_41LY%J$87ewlNp=#SHn|+NJNu!%ixEz}a~paZ z6G-X)P_XByq!3aX0-OBOJ4&92#;aj_-1&ybPkn09z|Du-$Ub` zS3+V?60|++fLxOyblj`8#APCv=pM6STX!$Sf#rj^vuZzX^zRkiyQD);`#r#gV%w_E56mJe3=Fn66v#M#wSu zXD9NSiIbr%(~&tvQgy;0BWwb-em)Y?_vAzUCQa)6ct1@0cbnvW>I5~5c*%g}3e@7< zeA+GVNPo9!(TNEL)YJSL4BGw=(lb}nyKxKX{*EnFIBQR}$p+fX576~DmeBR@EW!Gj z=;P|Hmn>dVPIf)>BP}*6JiR0rCvClreY@nbPh<=UkDW)44w^u7veQ9z!9tAAxJUvO zpF5=PjuF25+<--$H4v#_N0-kKM8_!7%a06c=7z;I4l+)1M*Me?W(4a&ujGn*Jmu{WkANy&HgNCpOD9Sr5yuEpY zwS-49_0x?kS!Sd}?}rx&?Gl{;AuVLX|IbMcCvd;i>0II6V&3ULfjeIZn6^iOhCi3Z z18WSRB0YuaY@WcY24?c1vm^Pp*1^0~A()r_9>V`RzGMqrDsiBeJO-&Pz{1|6q^UuR z{ZMEk4@R$LZ8m)wZ)##CuP+J)qhATjbUO)u*B528KCzsgBe8m9GmiM}#7D1N%Jl~Y z^48YHe1Yp6?(xi)uSxGk&*M>e=tBzIqfRj{pq+IoO~3%vgLvt4x8u`}4q=5-C5vB^ zOky9;A>B_Du}SiZtr8imJt5!OD69MIx5g)yt}ve1j#j~%nkFG|{BmZnVIq@0YbA8c z*^*!Oo#d>16m##i6#|01Sa*3UbIdIxZW9g)KlVloXI85~v$Yy}FB`y0W+sz5A0=q3 z$aUOx{R&G~9md+OL`vc%aYX;~QF25zid>(O&j!bEc3Js~aL?3$w9dW{vwT+*Ax{RT z)a1do;Xh#J-#iGeh-b1-Z83X<85+#JBXk9-(Np7&!`JFB@aFI#(2Mbh4SM@oMfEur zaO4%+<@kgdm^-r@o=*O+V^1)r9gS?EWF*sWRuHzx-((NzU!0+2%-5OLz+UNc_%>zab!c;n^n(Blh6ZX0!-t6dlBRboFp!nyNdI+TF2*ldbK{ zx4$%=)l(4Pdlj*5M+VE?^AE2pj)5N zJ0ltT1k57EQ$z;$bUz`vGLq=G6*`Wp--`Rb4WKL8DeQU}fg7bq(87S}AaBtJG$OA- z*2kr=Gvy+bwxp7=|N8Roq-g$nl`^ltrOUfRitvWWF@J3>_Ab5<(&Af-*{>4F^p_v- z$c0ewUFCsF`}^Ru3)k2qDH$@sHwqr9#o~!i3t?B#Sibx69=57u9cZU5hM$g$sPnf_ z7%}iYoc9c5HwV|TN9L1pxJj=>b4M$ z_(g{d9F`FQmg)zDV2KJ$uTv(G$4(HwG6dIm8?c(mO1$v!ZwZ$)V4aA_bZUshyKE|M zwmuFe8|RB0#``40>>atk{SM5z`ybr3R|AcM`_S|3cO35e0)OwS5xJknyfoQ^Ck6MQ z&Ix&;F7X7!I{#%+kH_H6I*~Q`^9sri^268dgTeOYT8t6RM6kS;lmddHp% z5xZ+iRYojPS{;q?i^3$~Mb=>QG!B>B1Y$?GZIxD1G#>nG&778gg`2&OkXH8=>SAAz zneyjR?Sw0z^zI!~y*`^oe=Ne5%HimIS(=9BT*t3b-QqPr2sHfE*#o?bRk5jPvHdr0 z)@jGgA!dATz#AMz%kXPc9Je$X&lB8N;=k*1&=R(5Jf%JDM?hVorY7xE)f|6%=}El`^;535t<>7Ri`5c^q|e*PRxeaEk&X2nBk zSCSdMxi6Chj~&kyL&Ux7A|R;Y_0jp7z%!oA;&jUw?AjHE5v?aty~GcDEg#_4U>|y3^a$@0&nk^vYT?t?yJSX& zBi4Mqjrv{sq+n${)r#0a3+BX8(}lL+Qga_TRHkM$&qKkt)?P0F;az6nBq zoP%Vc4!WhIX~&o|bhhCVs=vgahBr>4HoIri>|GDwlhrP0HqJn^(S?pN>1Nb&A9qX#FghIcYu=`r1LRcR0+cBye12 zE4W@zrM)%Y^h(ft3d2{ztmnqCeCBa@K1!MXw>Xr!8vP_Q^dd>nZYxRfn3K>~P7c05 zG~{30N1)HJg>ZPI=zr;3M?x}nq38HwTx@B_lDeDmRM!H~Zb=7+;Kd|ArWN|sUn8z> zM+<#k)}%yQSiMGyW1uUSpO(7x`%hmOyZ#IjsgyP^bl%a`FxnggLtcVWeX zE#T%DgI01USWKYEpor}!W(jsf$Cf0R?v(+C75#a_?eQ!&YapDom<^L3J%zeCyKt8M zdDOmO#I>uJ^7U8FVA(TQPNmhk?D)sTa7BX8J3(_5YDM;b4tfV1mP65q8Q+x_}sxN?nS*T+6+ zdha+Zwv7dkiW8WVy9Cu|Bm5lg%p#5)L){*4o*C!JE1JaKRcZ{}8+048J4QfR{TnpQ2X#vAwEqmAoJcH%)esE8T-!LhQ`efVppUwMO#)_RI2 zxyNCEqXBu-vw*Ma$Rk1D4B4oz4ifq3b5-B*cbMzKrR348zi89@2Je=y!$WNp7u>pz z8`kcEWa%!rwe}Lk2aP0)-zK5c@vGP?&YWs8v#}|86|@+x1@FPns{Bt=%-DR0HGf}) zTW+^Nk)8M%+ZOQ_r=6_rzJs86@hH)|5K8TrcEH`Rc!;bHgvmyk?Csv@U5IHZf&sdQqsq7nC7H;k7rxr<&icaYCw7xDA`OqhDE3}!Bnhk$Q`kZv3c z{kM;$N`31DYt{Zdcl;u@P-Cg&%~2IJvtNx*nn%!KdnQxWmWSdq_6=;cKLMisgY3G< z;rivVG-z%SaTj?>E6tL7z(Q1W=E~zI5p-7Cghdn z!?=lgX!FSw6?_Mvxn~ODihVJ{T^Tb^Er8lJ7qRcF!F2P70(v{mm^x%00FU9XAb<~` zev@MWaV{ zJbAGr&wk#Ie9f1|Q8%*5T74H*cIg{AseX;DJ|Hr?95>QJnMAtqQW!nbX;1f#e+G$L zu7lzDSV*ypg0~(oh_BKY=t*;fA9fu$_4F&aZKO|k8|%>$Cn8DvFc^M>`NP!Ro0*;@ z3I4lM2l^MKN!OOAh4QhVtq&68F6y(RQQ--w}USFw^}F&wZ5f+|F>OeQpb= z&CU?KGbyPITwQhb$|2@|q@CC%7qhmytwOB+4|e0WcwXM;9DCb$2dO>tl%)QX1LsdY zWZ0itA=ElhBCqj>Dc@AXpvyCf&CCvob@LbI-1wZdrR6$s>EA4QZ`p+ndEvq~t*??B z4Q~W*?T4&;>kC%jcAUuir?J=f(@D-;9b$9l6sb@?QI#Bdw5sq%14)_kmf1cxL^qvi z+}u6@7mNE5(=CHlQT?86Fg8yUi!B;0UQW^jfrp zElHEbq?LQH#Oao>p+pH>r*)HP?Kh-KIg_l=b!XQu&R_?i1XG_Y@pI=Cutv3rZJm>c z@g}Rl<61wu+?+t6pC6W5N>iur3D7}{;o}2mUi!#~uXT6k$J%3fv}`8-l^@18Ny+f{ zdt`W8;%)roI|4%A)w6vkhLP7lYnk1*p)7Wu0>tL3;kM>)xHQ9$?}@XA>c_`HXfcQ1 z3aLbD;Vd5TN(YuUZ$ww235~*~QRhuLTnZ+%VZ{tucesey!R3lXW{q=)bCs zbp4uhFvpBgt+Q7^wSFmO&WW^Phd76oyH`E)9>9hz6nXa>YS<>@ubNgS5F z5!|B1?!Jo!EiAqUu~%eiPiP!8p6*ZLG&5L#d3k8nn`T%^_y@U$YY%#4b^LF6=n+5+=@3r7F&&V1axs z%*=cV->WQe>HaEw`8o`Ce?9{~zWR__(f}Tq;PI1b8!_H7?XjCT;3te^nx0faTIA3#4tQS|3W@KEq0JcC zzl<=rxP1XyEZ)w_&lE#{htJS(NQTe7V91*d{CGlZ3qG1PliiZ*AQM;J1ijal%uxBI zqhGrM77raXLVxwDj)vgpTbPqU& zbpc@{AykG>9IeY;;xurkoiY2o{5FxUm9Sjt{XAQ78Bgk|f$@fe=%p)5sEn#S-I13G zRsXFdr?vAh%-#1IPn9>~xF^N1cIFk9nKO@Uc<4`NKO7Fy^G~sG5`#LozObst>oDzc zJ}XQf2wv~+q4OOHzoU2vU#MJ#Fsp5_>FF(Tk7$D`=TxyvwosfaYr%jB;5YOt%X)PL zQ%Y{2!k3lkl%Ol|2{EDHT%zf@|Hks`pO%qz)3$(>rXwgRwBlgLX?)f*749PDNVlZ@ zkD~Jq#PWN?xFQ)@N!bmwj8d}RbDyXrl(q(;jMAW`osm(9j3gtJRLE)&@3~K9MAFhW z(xN5p^i}eEe*gRD^*--&p69-=>+=c0z2W(I$#(?znEC?;Jd8x6oX5n<$BxE+NdT>z z&ta>SI$io_H2v*R1}z#3aqv(L{_yWuoK-d&PjyQ3r_z;BpwSN&*%#s1yG`6`c^1y= z83lRfDsX<)X_Wd9$y?ql^TDd!Sn52PzgPW)4-%*2j5>zi6BjdY_Z~}u z2pvI8=$E}xw0eIK(=i#y!mmmTGlz2VDa|I<-xr6{iQnW>k9hVBw20TEqqTs(|d{Ipvm~{_ewZ(o55|kiTiLUn z1#nEmpLtII0^WVc$bY8K@RVy9{%!SvsN3ztTy{3-1-yjaJ1#=Ley&(l`bPXZID{pS zxQ^_J0(Oj<4K?D!FiCkd)t@ycL_mVxi)wEYztjhRH*#(J1j2-vPYj zk2dd{*2}I{&xLw_O6)q)Ap24s6B+%2_@}?&Wz_|cZBKw(W~G>RU;^!(Ysb$B9n6dc z&&kr%k8rAIDOD_AM0cbG)8~pJdgG@)o$cBU_k4cB#6Dpkw09`z%a)OSTgot8*zr!h zZOnBx|G;&3#^9o7R#?0CFibl)0wji|!_~@bu&YLe+S=H{fjcj8x{kE4f8B zZK>$=>LXaNQku3TC(@doe)OHxQJ8geKZM@xB1wln30yEUmVfCwnyO9b_CJhyg7h1d zv(ClJ#kX-)-*7xHWCR;!x5FF{f9zk^LENieLWaH+wde{HHEvMn1_SSlJd_KW_V843 z%0Dq1I>r=7 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

^t=bPd8y-Ns@hhS_cp#s{ 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 z z;Rku8{1xtNpT(1!0{CZ>7+l%fi-n)%`GJ+aXtMt>DZQKzp}QUs>-r{QHu2+Sxf5(KNYi2{qm%JjXXB_%7pkUTx^k@9uYo?NeM~!7nAgbxRI!jXlK;#{2Sx0b(}u zk^$C!S0KHiSK&TJ!r2S5@Ynt-@$pN+wE@*6cb~w{(Hlej-btf}ZH)-W$U|jiF0mf_ zm`##VMwwYR1rNn5v5(;aG8X-bztm5*`r<-2{p8UO1PN(E(jU zYqq((Q+zINudPeB60Xq|j`3V#z zYx;qF`w_;TtWpI3zAjOnd>DJE`jc(b^v4^Y=-vfiHyA_fbV<0MW)CmwoQR{TB9$8$OWyK+EHqe6Km8a^ zqx`L@&QVorB`He{mf6sY_QCM)eJl)f_JeX5E;j2*6a^T{FdygDtS*v~(l5xFC!C0RM*XB`GIwfOfeA^;Voo-L}Sq zugVShIrkKFh9!@6G> zaW|#6_-S+{4Hy|k7c7gUZk9fDQ>Pt_x$~CXle`VmAN63~`6FVjXmdL9c{oj8aT_92 z_KLl~B_sKzBue|40rfMb>4wHcSZXB4Rh}sEMbGC5&S6RPjiP|Ax1cC}GxJ~eUR?d; zDcOFk0N+(SgqELzzw+{2I>5Du%>1)QWOGplc7930RsWo!;>1wuCUhVbq8-IAn9p=L$PO+J$3?R8{F3qtQLkA(sw?JJ_HXOQb45a} zroIwiAKb@hCkOD0KO}iw`V5|JmBKYw-Q{OKWb;tH2RNdj6;AG3g5xy5!M?CxY|)+3 zbYOZrI82Pf#naW`w|*{ebhO9F75>l?Wy*frB;gA4X}oJfJilwPgzs}dz`KS1*+yT+ z?Z*dmDa};A@Aew5{2-lQpYoVDWTx`%MbEhV{PWzh+aEug|ACl}PG%cl3zHt-N8fET z*qOBs?ChsFvENi{dVl{l$U4_URF|B9Xpaco{#1_pKp=lN){3|GMeq|&#r*6~&TrIQ zMnscS<1MhZ(gf9HJMf1$7uC7D(gnhV#pFevK=zFUjqX;s z4GTaGwvewkchJAb%&Cq{C1}l@j?+G#5g%|EL35PNXpqY=`sK0)jahSm4(?k>=UvT! zDRuE6I+Fqo{@S$QZ8XRf9|46M8L;k17u#5`jaA;$U~~6OdUVh%S{s-_8#2P#uB1#* z_Zvwahy6!?Yvs`o+UfM}SuH%G@c>Nxo`44XkIoYI?2jK0r-yH-)6c(RXwwG6ZuFkTE6^REgxMEQLSNH+=q1>Dq)kz1j*+Yr$j;W^K2JEKA#cCwNFae~# z0L|O$53h#n(5JKkt}6Iq>U=q#^ZW*m8KHpJze#|bSt#Z-8S;kM1c4xam07w6uz~%z zL1vjcU#XGErWr}nnQfoJ`=b&)e*Obk`e183Q(42VaxyL}4Z31| zDA{O0UpZW2cBTpFSs=|dR?Oqq4PP_Hni+>0dp-I%v$4ZLDI+u zqco1eE>Q|E$(hD&s;}bGx-k5C(aLRtFq5uu^AvQ$0Mf|@7qgN0SsFyr}tzO*KgD_uCoe&~Kj{~1Xlmh+w{Y9E7k zA-kG=!i6+^Ukv8gX2SMgCiwi*IOquX!X0;tNyof;*q5AymOpf0g=34zQ*$(YxmQcR zkC(>S=`|42p$3&UYe1{skDZ#R!>|9ofV!W@^3c68!n&{tKX?(PBc_H*FXB#8?G-;i^jNupJSPqAQ*95gGAjTGd`A-op$a)wqRKDNUve z2e?9f^j*;;kt=tpKFlMcuHl&1*{DB!27TGuE7G`bj*z*K*=@~d2c37}eGI@ma!0Ur zSuHu;{hU4A8_9#DejxF1;&)cR!`D0A_<*8gJj-7Trw$qR_SP$s4+x#5=c!8|5tGoKkE$xl^9ikI&0!eT9T7P{O>=%_d16RAyDHns;RW^Cu8 z$ba~6*Kj`VNG=~+q{c%`2XXPe2dp&Bi??*l;6WV`ILTZWty^^i}Q(>LMiSaAkF^^m*pcZUAXbVL9kc(JRHh10&|lKc)L@ByZlz*4*79{ z-|PrD4ZVr~;`7mJK?ZIt6?g)H%lHX0lTW_XAYN0Pf^L!CtnGR)n`&-Eu4_CeCIL6a zx9o30z1CFQTcLX)-slDBrUgO$U=1$Y(ZX$pzr>Pc9rVvF0?8%mH7t(q?QTPZ~^Y2@R*t?gK2pusYfp9##sUCiZTkJxR7Jaqp} z5zBe+BfAHFfU2?=uvV%VN2^Upk!OQg>gNwo80|^|HC#x*Wn((xq&szY7|(BA z9|gm1WYf^Ax52W~A1X!C^u~l`^Z-?(ssWWS2o{U0-F}ckUlLf9OAmR~a-Q+OYGA2> zq{v|pd49-T1{w8N{xN%*yF6t}+7i;Y4@sW5gcQkfXMUz-S_H=DrU z>Kud*G{Le%L42-g5RV#f&mUy>qoLn+?Eevohio3R#A)Ts>(5wrL41b%aO@%z0~3kN zfWc^+c$PfRdSe^Xu7y{klyT4cNZeuoyw2N@pWYJ7HzkGf&5slLr-8Sy_k2EnRQZAj z@9XmU634mTi<^A?gABeo3X_Rx2C1 z<+!1?|7N(s3F*UF-Z70&JobsVkGaC)j@H99&r&eWGvWFlp7WbpVf4W)kA+NrD;tR_#_~#Uk z-NTO(xy@3rB(WJjuX;$bf6OKBk)MV9XA;jFcARH@n$G#P3chswz$?kizVi=b^sel* zxW<2n9^pFfzj*8*L%z0qCLi{^6yv_lLuFM>o*iipJ}2v#=;dg>NY|9llUoRdmj?37 z9?4i)_e-1{{0){joS?bAN5OKUidb1M5+}tPfmmw~^v7jkhR$AIYxsuid-U_Z&%>{L zjL zHrYBcR^_n=bR5zw1j^*2OJ^1q(AJOk>2$zpP$<>Vlu;*Sb7gC-Y47F$5x@c4KmR=YkILkAFRI2 zpq_pksNT@4@LM3gCaCSF?+0A4ZHk&ry$pv_r?#~;eYO&{I;tp2S}}`89$iXHTrbfF zQsFdQKbA_g8B+C)7r?RjC`=s%P_TJ0o%#F(%$ng(pSq~gFBfbeVSqZVedJF&b)xC+ z11hv7Vgv1Qp90r=hR~#gesujfUs||oE0q}FNv&p?(fjw*=#$j1Fj~Ty-tzXN-qxq- z^8L%G$BVo4dSe|u^*@Tv{1L0Ki{c0wD@rm&qCzw%#dG#46(N*TG^z}RW;CiughD8( zOofaoNy>BfX^_g$L<7?FRmqShiBi4y{Rf_3o_p`vXRozBE3<(9c%1<|_I)S%*+H;~ zjG&T&uJ(JV3x1kkPa+1+qqfztFtjX)E-!wDWsd1IX|xLH#ahwZ_76be_zS+Kxv5Vd(GPa88z$jBEzpm67I>UY10YK*=@Pfrb{vSt0kyLQ)-I0zi- z8NOh0WDZ`C=)xCjH(~4-6|(N%KkN-oqEWXQ9X%?Q2AtbX2F$q+zZVJG*3Fr;XQ@BE z^`M?u{&|UKWCiVf&^SK-RUy8*EsHaHhEwIO4}f{yg6DTWLCKOqWS_@*lD&L5YT9O5 z#lN(`motp$>M|udKi!Gqi#ITAp&_-5Iz(gsme8Zlb>J}kjFrK%qvh_;X3@R*=fQFR zf6OD!kQ>?D#(7txcvbf)9^e?m7teZx2Jb$T@GFsUqU|!%stdy{dpC(EKb^-yyBhIf z=^T7LdL2Y>b)g>SCm?V4Rao9Z=TGC~|$D?_{Ui`D<4n1%77fL6;Bv0rWKFNfb-=Ia*=W7!9gBTsO*1`Q>DBWp;P+}c)td1c zgO^N!j_OY!9x#|Y_>SPJ3xzJ1tRzfS+l=QD<1yjC#U%K@chDj1?VUYemfx{DkF)SF z?i{p0M7RdH-jboarYTb;EeSf|ySwPL(g_H;rwY&a-VvqGQ{$a6gYlnF4kT7f!_tmU zl&l{{vwSzgyw9Wf=X(b*Y-}3FY}eryLnd&;t#bT>=Op43Ye?KwJeie~6!-1l#PxUN z;kCHaOhV-^TlpygB^!;oz2;_q;Y}6a$j0&Q%Z737ZAK7rdmcvnA~A5x!$5TnTp@TD z7D!L$nFR~DUi(rWD!&zHKkmZT{gM2WprzRTG{nSl7udZu*)Ya%5I#9LiXXL0<1dEC z3;e;~Y(?n>9PI3g*Ggva8@7o&_xVF^lyQJ(>-zI$I0{Y+To*sfS>=WDMWWc?+pOfe zEBo@yp6;Kp8jogQ!~g!y#_|zcareBV*zh(N&u$rueH#_H{<>dmvCAgxPx*eX2_p0a-tG+(A zR#(Uhjo-<$Y90Bm=Y&fe&EQXGY4a36f7H}8z?)A3aoqhgxW`15XYJ`A>%6ofNZ|H2fx?o%%w;_kKJdJGQmoQl&$s$e^1AK4c5 z3LcCfh^hb7@t@*XG_(%m%DwBkzboM%*LQ?--)Jyt}#cs*GqEQEIMN!y9+cEe?2|iTcg*V#jMA@DjW_XjH{XG4*6r??)+u~i)}n0mA^QIY&YB-c(a|D_bm z?#Nlwk?*(B@ky=FRJni~;0yN8%pWf*3H>Hkhv^}6EjmPEpeRvd18;shg}XIn<5|^# zkhVgLckh`Dbm1ka$O~sjqw-++u!B&(?GS4BD=@<&|B1~S))1R`XV(1sXL;gwFDBXZ zr93@jDD6^~rVXbi;L(J4_-&*Le=b{zGHbWu$4&|UacmUUBnanW)-bwSPL~fJ5=*8> z=Ftb+TEYM5aF}~dg@zw6q)%!l(sT1ZLd(*pWY7{#BH^Gx3}>W>Hq|TB)R3M( za~f2ePl5BwI@odaH858x>J+jE`X}y%w^8RnXOT2I$Xb&J_q$l|``@hI_6i&K?mPKA z)CXj|*1-Yoc~G}f4}v@*VZwmpQ1WR3i@(&0@kcm54}J~*DTm;jrcm~;H;8HWW&zqM z(A|f0X?(H*t(-TF%IzfdwW%~6c3z9tJ*j}7QT^o(4Gs{yxP!HL$FhJcvdnG#0;a_D z_=9$7I1wmI7r4D6iA#m1tyyzuw#b4WTs#u&1BOsTi7v6z6-%D-S(VG2&=7d+sj%Ye z6SjJe(2F|CjTWyvNT;-oqt{YaK+dRkCZVVVleW1**Hw8QW}iTgyW|l+!8;n-qXQ8u zC3u;Hn$TDIyZls14~BJ3;U5xA@b0)!XzVBhKVNBqBfE?(_) z#cY{*9}erQ6;&Nqpe6Z=v`xuDl-P0{=RH@U_NjfOukR9>@n|A=*k(XVh6x$na+(d< zwHZG5D+oK{i2h>Qk(W~;SpG_e)f3Nub zr(HzlnH3&ftb<~aAuY39L4AG{!Tk6V(g8x&TRs|lED3M4_puDNy9Or;6<9~+Pmyw+ z3;Il+LPqX*En2Hvf}_saa}+KoO&8)jroYVMxppzZ!*+4tHZ_ptKjs6 z1^7hHgs%&h=Rd2*gPOGpWF#2z+u*?$cE;iQg^IlHr7Tze;wFlFvjn15`k2SKBC=)l z15A34FjF;t-|jv9 zv-=$WV7oR>H2;IS(znpQFB<*I-1*6nMD8n*%0E|IavNVQ;f|dJPEG2tvG@RH*;-(U zoHxJs(T!jHE5R=w3gE66X2R8qE;8BW2rdtL%Uq`i^E7+J)`E4|;aZ9Nx}9O$;8%Dj zYdiUqbO>5P3h}^#3Vblzl((Ed!1sPHm1tv(h;pN3X93Lx!Jn;kjwjmhvK_8X{2>z_qRj{#PHJ$a)RlKUf z55JII5MZ|e$DUZp?`n*gJ{j~iK`p!u=~<5 zetUC0{^)bY2W4j5c>YT6=(z;BDJs{R`1N|E&O*Ib4V?fLev>PQwcGl@q$2bjmyx0x) z)c+)w*eTNcmjPqvm4dhaAX5KYmbE~#s&&ZlC6;Q zMic2_e}2292!qpPsKTFDxZ;H_t*xI%-^g~uXB`(TFJ8npJZXc<@nS`Gt0 zDU)=)d<<|d0p~R}Q=LyC=$z8F9sZ%N~+x?ZWHZltjyLPk7)|O!VR~ZT>oClkW#`x@W6V?@G z;U%YQV7*s|TCIqJy<0SB{ug7++EvYbJkpq>^EBN1U5RTd{$uZQ=HZVq9?+yM3n`IP zpnTRToZc-95jJvMUo#9z+Y^*%`-Fj=23)eI95cEmVD!R`V6@Nzwy4&LMva)nqx8PA zz|XpL-JYd%`Tm=1*bNK#^Sd1`SZ&5xa2jTR9FOWDBY57suNZdx8Cm#U4ctFQiCRbI zfLh06(6gx{V-(c*EbTUttIlHbCZ-ApPtxVHa@5)W#zQ1!g9o`UTMQlHW%#dt9CzJv z5M}Hp!S(e8@L1|3Y;WEPuY~ukF=Z@f%m~ETbr<+ZwNWs>$BVBhoyq@e&Vfswn$Tvs znZ}nFz~IGNbZ+|+u$NlQJpAaj{sp&C>hD8b7(EdWSsww%QT;G{_cG84Jc|0|fAE~K zyudfphd_xS(FRj3F#PzNO`dpw*C@*It6W|bzl?}2J}FXiXSW;-AMcv9tEfA zL+Hp@FYtTjfiEvMV?*+CZkf88uZek0l#5s5xgiaxGDRLW!=Dm&m7QdVVF3Evkmsv~ ze)>SoO|ZpoDLR}(Fb*~r^=L@(hmOa{r(MqY$o3%G>rKRpFk@=dDh7>fljySDPPDPq znA(kP0`bkA;&m`XJ&BR@D5A!f^ zgJ`uTtk^%CFF2$I>2|k?`fCa9^Itk{d43by5)WE!%oz)}U8U)CBXjyw*M%CE1ykLP zoiL*A7zAE(!ip;|1+J_#|4`%2b+gCvt)pu(a^Z0tzH~5ur1??2t7ZU9+WA2I^}=Z^ zs7=Gjdl#@u*@&;x(Baod<`UKPAv|Y^6^2V^GMTq(5Myl)t6!%>@#ZYhS*1A=TVE=aJt7x4T`{#d*%50}f-pqXNeaCRia<1cfli|kc)M#!PhSR;p~YwF3+ zC-;cKzN=*Q$zW6pxJI`6T>uvd1mmOCaBTK8oOa9}@?68qBd@>3S3Xks;j}gP+i%Xt z$RzP4KDJzQvKh~?-ojljn$v?*BuwfX7+T?Al$U%G0V*#gx*;X zh=baha=V~^%QmV7}H&2E&3Y)ocHzV)-- zKi@=I`;}pZ^h^?PcsrTve}w$aEF)!}W6E1jyk#5S%HnR_lPq=c0Qg>TmK^CA314*T zNtXl_%``P6%|gFiv*B%VNq{T~t@C9+XPB`aZbw-5p;Myq<%j$ME6v$WfZEy)VyO3eD{q_{_GU(t+NN^s&1(6b;g(X&x3d?VkbtWvxl{QhmgC3XfxSxHUZ5{ZKq?c#?R<;R!_H zLJx6PU(Gb4AD|aEp}*=HaA5OW9HsIc&-p8|4VrN{_nm_Hr_E-J-B*X1Gjj0Z-Tv|y zYkxsp`bH|TCV`IKejd148idKbg^#D+LE<+#>iV*mHJ*Eo6YfuB>wDv&wdg#)_n3@7 z19O?o&LmdjHJ!^Z8A;oX3vrU+Oxis(jW}K$4*pYq!25l+;6W8o&d;dNLF%QT6=oEt-U+$<~V zWh@J-6WIj*X7FDr!svBx|e8=J9(kR!6->c%_mzp`v`L0LxF4aNq zyS3s;S2gMMutNBD=NOD1bq{NXRzv+uH}D-fhkTmq#C~r-Cbs=D8d|TPVa^#7&}-m% zd`x8d@X`n9J@h@BI&v$-kIzE0&}AfM%3eH>+XM~wkHc}<52P%~8G{EJ(m_>E!RE;} zP<>*-hn!Jn{|yL$VWLZzRW=n1GTrFVZ7SG4aTeB2Dnp4!o$Og@G^Pt(ruHlSVXcuW zwt*&;E!Kk-HE+egj;ph!78B4!@H_q3w4Qv`uz*YEPvQNhL-6>yE>!+LNc}G)f&L74 zHshEqyuPxWs_nDEGCo{9?!+S~*eFlEKA6IJ?b`BW4L!U+SqbHS^;q5d76E(57|>&< zj>EL;GT?h74-PK92dDMM(XNj(X^?s;1l?+a*cLPJy)=h@8=^>uUhaU$OPipoXei%s z>^4~8SEe4Z<<#f-@E*Kh6f)lFtL&_N!!SgtQhI}=n>LF2Z z?D1jpZbCQ{`RKu~3iopJ83r_F$b7mrWhs1k6vYND+J)lbp(rztVXWC3T-h=oYm$9w zWB3T@n)OWl{(USYUK&ov^hwfk85i)k*hSBd5%?d$ZD11OMdgodr}VfKjV*aAzV=`Q z9?!AiI_tjR{E#v1^b%E=RNqUEoQ#L6{SDY`7LEVydWXOEEaZ!eXLCi3D*mxvmY2*6 zhUEE9L$Hn*ItDFBlh!`EoZP_q{bPYYq{c*lA$g<8Z#9DUN$SddqX>vLI3{dC&TOI&vVPnE9 z-tU#m>jW8VhMWaje|{&LW^ad6*T2V7t)-B1K3Nb_p5V_>p4eL^%`TZF@V7dvaNt>| za-*M1QBn&aSgRV=WjBCQlNg{AtX96RmzBXM-}K?t ztHXG1(rTXX_FiPYNrn4Xh2iqHgBbUwhHcrS4ZYQqp!e8A*!$`uuCzYRKO9=d&*%G5 zFFu=WXD*PYb_g;$i(p_LmgkViO!itIwn$ya-!=a*W#@a02|UGlL>^bjPURoY7T^iP zGgxKjimAz-WY79;{MY;h-=8|c?k=Cnd@73A9F5@&`cI&I)hthv=tc+1$I35yhMRt4i zTiJ^c4D!E-?z|{~%`xL({sSS~tzHkyM!V2I!Ku_YteBc=JcbeDW`h09eXL@)9e1`V z$LX6ZFid|YWUDR(aiq|jZqx^tn%)aNET%ZFNRtPdf5Q9A=kr%poYdZ{LetLG*kBq& zGA|9lTf4cCnYoI0*S3P=#y#}&I2C$*FVOJf82b0WNNRi3f_@eS0{H(X_U0Z_nFsXZ{#aiA=;5{jb@y zNy^OjgghRti^B<*{NUV=-)!Z>>v&G^yzJ|>=EIC8;*0lnWL)e|cv)l1P4?;HF6XzT zdF^`fUZbtJrDhQS+nd5oa?6;pjt0N{Y!x5XavBz2?1egAOPFJga5csfD$9S7@J%}* zV2&dEdYFojhIx`}5}x1^a}rZBhx5$p;aqO>JanpA2sc#)KKximd@=PVI?9jcZz4~S z(!cVkn|7ORGu(i&sX1IVLWdtv$wWiL>0G3yiVD|0m#6F>1S?ZV;62|z%t`DCHx{g7 zm5Y``uvZ5Bs2&U9hHcP(xEb$c?-zMZMSQ;coU(H; zzj-Jq3%Q;w$JAP14#e$Fd+~VsI(p=VG7Nie${)B5<<=i>;F#7W?uK9H%lW{|E9D}F!z8#7zdBFYXvz{)Sm zKz__lvO(!98(W>g2FRXZ(kmmlR-*^Eis;4E!ox7HM}q6DeTF@5Lr8~J6m-e|B%K;t zsrdH{+C4*-I=q}rH3jQ<{D&O2BzqmLl+mCYLn%}TRYLm6W95?<9L0>wOX2;~dm`6$ zO7Onv2Ma#8n7MS_Vv>Pnmb*taz_*S}_!)c<-U)22t9|O==PU)4sDV1H{{%H8*5!sDLhAg^x?e!ub||7HZ_MSg&ND=p}N zSDPu8Tx1ddu9AK2Tj@5n1GL~pEqG_2BDW62llraZ5cxS3G+I-MgyuP`u9Pq0O^PMu znu;N;d0-eBdHx5hsaAruPWRwLZU_7rlnx8$CqVL^T3B|+pQdfeq-u2U*t$%0HPhd({?lGX_bxuHszmj;(6FXx5>o3z9s>LE)L-0@3TVk=Kh9m}_ zX0vsxiTS5vLX_Yp8GLOW=W8OEj=+0}saZ=OEODo^osZIUqqfqC1M4ApX9i3cG(x2( z`>?G&5VGfJQ!B+**nU%u)((^aSQ^Fp;Tt~vX39N2^ud9-C(viQJkDD>8(n0dvQ>Z1 zGoiOk#6fO;@;c7dk>VTQZRWdEHgSGHmZOn7Mx+Ol z)UOU${V-3w4i2*GT4!Lo(`Kr(B#gGMjl?O*=dpbV;;*Oa(7O_-<((PnJo|7yuQof(?~Oh$ zk$TPa5|tpm*BGi^Jc0d-o1l5QEmcbnhXATg-!1RG+OvW|dbi=)x(*?PA1 zry4Fab>3s`5i$1u(F$H_Zwb6q41Sk`VZ%04_d)h+Z|lx z;d9pTe4uFKi&nTP+$)VHPDGRL9rQ?;J-r%o8uX&aLu$eoh&+1(`nS!c1G|746iLuK zcP@a&EibV2>=j9$x`PkDj^UFAjps7!hjYD#1w2G5lus0P=5IZNc=wzU{KLF_uALz4 z=L+^8NPiAAN?H5>Id4P7vgwrcCK8xcO53+F~8t9y)N{=}fLfp<$xUkfk zzMOl2>OZ9vZq9}i+wGu2IS#Tvbl}o|YJ5cG9d;z;3SRlo0n6*<`FPhTEWMt}eRqW5 zHl3N&pU1)EH*d+o6OG{b&XO)3ZcG1dbf(^q*MQoVQd}&W4<@PhlzO%?sm3}MY`OuY zSI(gJE%(VM^Q3b9D@S2VvOHN`wt-DuF_o7JGr-c_YS1$}1P}V=!X=|rsDIOna?+d7 zS>YG-8d(v$uoiN3suVSH4W)exMpARTS@iNlV?6b78WQg_(C@1O{cnF@>yqu@pj!sn zb(gIE>F*FHt=|t1TD+*$Y(sjjWfIjHZwMV9#=w$Or*MkEfp!?~Lf+HE%J)ZjYf(=h?;jx~#@#t}DXk2WFHmNx{GGj8z2zTQO@nN7@p|GdB z99ESp2>kjoe7XLHz+<$)iVyNcp=lSrBDH|N>^7m_4U(Xu_8*kb^q{~0odW%9zj2L< z8|^V!PDVzY7TKA4;OC3m;7#)`9O)Oly~Bh0V%WY%@p$UXxHdh1~b4VoEBM_u)!8bfm7abgy1>UIGdB0;4_ zPoVW~t67=iTk$3vHEL0~lA24)F`%4L6oJ1h6m8NZy+ z+w?5k@nkrC6_es;_x^m12bn4HO36v6x6>bwoe{bNp1y#laRR$z zfg;>k^#PuAE~SQ1y0F4Cn_$H(GT)(EtSvA-)Rs-c(N2HS?~}0G`LdexxxFxAw?78Z z0PMdc2j|PLkfj&n;b+20=$W?#KG!eeiLaLOlN%Z4r-WkAsF5i5WCrY~hafmhmMO&@ zg)1%!utWJh%$I%)%Y^v~=H6!S3)i#2>{H^gqcr*M>8tti5BWUc#(F;a%MS3+_y=F! z)`*I19*Oe%8A-|C&n(<6;k=_Xon_U7KGv>$V)Hs~w@`~WNbD2$m;Woa<=rgE z-e!(tnl1Q>c~Yo1Fd1hp`-9^bTJyB#Z z#RI4D`l-=;$wys&`|U!0diG|X>^PJUU6aYJJhpT4We`^gx`z^b*Yi8^(%ibJUv$rR zCR?_qiFhA6O+x#ZvH2P1=Ut`U#6Zt10U=dD0odfaA-p` zP7alVolAd;5|`gEca0bg`@YVEK!P* zc@C>i-ly4K>GVXqH0{$Qbnk~Yh!xJW(DNH;fLtt{W+zYAS)LYheIhzl`U))G;6pM- zpCsOo9<$~lBdw0h-5}0?HZZ^XLh`F&A8dOX4VK5&!TKeQGby;-+y(P1 zqM2mnX0(^`W4CM%gGu~z+;j9C4jVKR2iN7`ptDgpAvy%l7Y@KY)qhNTrz>WvcattJ zp@V4lvT{RvNAcE@`z+RJ7_s?ei+INYeECUS_T{csmX|*6dp`|z=C33X(|@ypQyqEZ zG<*IcDhuxasD!3~J)mHjkC_9D@W9eP@Zz`}&0l|+=~anwuw4tDAN&<#&X%Eim(W>S zI!tUl)|fnSb7RqJS41n!pRnY^a%gnKNSyQJJlnecB7C^>Mig8v2N&0_fZk98UgrK0 zJDgQ{`w|uY=h__j(rQCjjC=uWuM8J$`uPoK)-K_q8Zlq|Z!<3|aKX@%8AMSp9Q4j6 zi_^b&V`0`UEMnTkq03raHc>=!kNM(*Goz{Z#Ykr5x(nmFqH*hyS!BmE=kjBNEiiGF zE=(UP7CS3zFuAk`tW`#p`aYL|&Mo_3t6T%=etZi9YT~hUPXVTl`v9{GbfCYppX4;y z(2boV=-R44;vzp7SCBaI?y@7KQEL!B-TRykSRshfFLv+~H5s_X-W-A@TG=C4AX8S3 z7q!MG!JB`p!RMl(U^wyRJ^)LG{rQZ zjh|ADzrL5Dx5`BPF{78IJysI=glS=vjyt+nA?9x%&2PWc#Q6)-*qhH`_^Q#7M@yP> zj|4exabh@?+1$=MH!`@c1A;Sg#y|_qf^1SeF;V4x5DfrE;HTkCzv7~p-d>EEAAI;ZH_wh`g^ec^#!!rw1hpfk>q8o+u2R4qj=%r1{fzk3s0te zB=?I`k(>--uI3}SeeV)Hpn4V4m)r37!vyws{@ZfndP%A<)W;o=dTWS{hWx!t7Pzb$Vt|$EQig8y^wsq4f4fa;Igz1B0k8{o03v= zQ)m~ME>@-1Yu)fhsSLmU{tnL3yn(B)Kg0D_xvW_5&CXk=O9HGkvB$##Uc2kF1rKh) z%mh`Tqv#km8YT0&n@(bT!EmBa8zv{j*>bn6sC`NG#^dHz0_A+JfR)>T8^lmvnCWex@bugQX*RMwF286O>=!&j!b z@PFz0Xc;iwO0zK$3LdAB4|1|t{aY3ym&-!yG(Q+X27v7uJ>d*bf~oxn$uS*GI`yeK z%^Pz8o#k^e@!mYzurnX^)9#UT4gO$p#F$oUO@YWAF>w2PIzwKBNZA^SzL$>s=%yQ=7Wj7Lsa> z-LRbL;P~bTv3Uuw}9Rim>zkO=43r9d0K&fZ8LW z3!yCsBjao^XYY8dw|ve($_PCsaR`{EkJ7h&P^tJbq#pYQE}gS!-$Ot8O6D!eQV)g5 zjCJJO(`jVHmv^Fktr!-ja+ah=RKczrb704eJ`Dcy3%$pl!MV1oyy2)44-L4s+gKC*HDU1GbRU1G|km3Y6i6Bb#_ffidW zm>hbQ#VJ{X$HeQzfAUFI(*~gRH5nCZ^e}JcbbNSnD;c`vF+B0|qe|1)Ql&rNfz9q9 zXGh4<3g`FahmRx#=eDsGL0jSBp`+Bd>pfV%kHSGK9z<=nwdgPeXZ}Q;U`eVzHWKZ$j-qNuE4e?{2NyU>g4t_l`lZR1MsJ+~UU8~; zYiSG)osuKce0Gj)3hopIOm87wLZQm)$Xm#U7onQrSb8I`9u^%ngV!iWr|tCikoQ2QArwKVMEuL8qxMinzYc@A6iS+5z{VT_-U;}#|(C%qjbEf)OvYp@cRtj zO|8O`VHb$A?OMX-?I)e1pR@6^UZc|;A5MNGV!+*K94D90W~nIR-k;g{!aEz?+$UnY zzdUvPvQ#WU4fyj(hnCw1!a&-wQJuj_0<->kqLXKLB? zQYEY(m_aVCOCg(*-NdCyS6PNI-+3?3W(!?M<0n!e*2w8+pAs&xgei?EdEg!<=~S}} zFI%`f<`mw%FoFO4&lUTg124*G38S2ALSPx@rt0wJ?)ZX-HVw4P*4(P9oqr3tgOCfeNxL@6u1N%XA|EM@#_ z7W#NJratQ=9$tAYU+w}4h!8Y^SDbl&naP5jBZ<|3M7GUrh~Vp#28UP|arOACEW2v} z;T46<=FbN5z^Ij3E&4+`|2s*_x^q2A0~KXKjm8Y4!C4nyzR_dunu;*3<7I+>pT>=S*bA zGsc4L<6cp_%6OJ7byM7asF+C%$rm>~9?KUv+!5#5ykf7c--=&Zq>#snC-|}pmi)~k zBYJgjFC54-pf|V91fJK8{iobvsIC_cP|~AQ+-h-_zhKoKEdy>(hck_7TGSz689jd? zpDt4Gg{<+mc*MmVN%AQcI?j#+w=NSLV1s$bRb8GR)+HX`9SgzF_QHcwa|qhL8SEx* zr0&(@XszcJnE!q&D6e!z!?h1!+`UOqTcAqaehAqZnXRy^{tj$QJ_FErO~_c7(LeRG z=!N!hdaI!uYAiY+zDFINPEm!j5AMX{Z#>TP9Vwa*o0OrG?R8wc@iYF8P~p4HH{#o}9Vp%QNOU{y4w0Xv!AlPP!!+T{ zIen)MO0!~Vi|bH2-&2Kp8fB6p>$YR%hER0dC}f_0Zy<_~kHXjGi&3gRoi$|HiI!aY zL+&hYhm^_d*s>5Ac4OBF9wH~reZ6J)XiGglU-}oOg+Ic1F#?0m<{|UH5rEs?2IAV< zXO?33wJ<$dmd>a*p+?&VP*=@Y#O-b`mhT!RFdB!lCd+M9*?1bY^!*M?KAi<8|0q21 zb1hl2CRDUTCK8%%wy+v2XA;yq2$#&v$3YjB`Mf3VSbHK2moyx}t&Qn0X~i2hw{0l; zR&`i4TrR?yc{X6xaELZ5rNT6&2GKGbEACf6oqagp3YXIfy}!Va+Or0jD^tU&H;*Jk z^E_c)r@E+O=Mt-|R>7A}0SX^a%}wJc(K&z9legeWrlseHAvd zL5(Ka$`TdzVpLE5%GBp?c7E z@{dNM9e+NP;Us{M-XzDL`3&aXMow(Y%yvkvcjP+PH}dMYD*TixXTN%1fuG+HdLr-> z{5?OL+83W>2bW()zh#R+`_?ZO^3)w|{esw=moM;)p*nx0$Z?0JBy5 z$!}pEF-|B1iGuemuyz_vKI*`)Usghk!AFU;(K>!3{(~cVLUlK{~H$ zFjWp*LO02%lcOIdVX1#4Tv4lnVWa#=oq3g|gy(s@OznBTb3Go=l%@8Ox-^tILZ7xH z>}$+MyM8~nUUD0M^2wjCj&Fw6^FHDSu7`Mqb~PVi=*W#f>5-Mj;qc;R1;noU zV3ksG9G*>VVDp2^SgHn)v$_i*Hd_Zyh)zP6Un&k9ti<&n2a4AX)20Uw^}_M&TKqgk zpN7rICR^_fAbly3=qJvHa}%$_p4dgi?Ug?MP&$a8-XF%Nmd==T$((jfbfc3@|B7bk znxdiZY@XO|%bmktqT-spY<_7dWIpu-?d99CwdbhNbNGo>xeNxyvjMQ}YnH%BtY`Z! z4x?|N6w=$y;-%+FV0;;AulYWhwD8f@g{Sj``S&GkTvJLr?oRj(GTXD3eMhRa3Wl74Y?t1Rj390e5VXg0WYtgxq^QxnE{Xyb6o)G^*lW z$6B%pDSc;pfaFe;;<*Cv`^zGrE?SAWyHw~rntTy&-d;iH`paO;Qfb_sp~n>kop54} z6R$Eg<8hXG5O^Y*{;Rk^cRDPChh_5o@aI^N-^m?7(@iE{k2L61#N&tTX z2e@sR5l=FH2U;=7bf=Itj~ss;+z(sv1f3x~cAOWs3;a_V!x*^r?G;%z=?KXmV}*Uj z5u&W2l}cr% zLPI3!-g8bRi6W6LDmprOcM5Q7IJFea`oU29l&y{A5c=DO4oW{odZ8t^j@94jV3UdjY>spV*p=NxiJ>N+}_v`7Lh0+41gGJ{?x}r=R+~TC^>aj}D zW*3e60w>U}bZI7GT?HwZcQEap8O-;uN@d20M~uAbgyMDDa9Vu`Z|A*tv2u!JT)rV5 z>39fE+IOO<@7h5A`v)31at9Z@ZY7>`eHt5@myX>VVqvdFF1VzIL-o5PYOh&}Y_!s7 z^W5J;ZO27$^uT5sGAPDbmoqrrxQSh~En?l99h7sbynQ>WnnCa!=xdLLoQrVY%_HUtWuZig9rmcng?Olnm=2Ya8_5#*O0 zL?QOmxtbBLsWR`yYkzhV1@b$8+2@;Zh?hJYkeb07w&$@&rlIUr-$$DCwhxK^WkBGl zlgz8@G&`Uj%C-cBFw?(lS!AUm`~Js~l?R;%%YhScZ`ox0`5oWM)VD?Gowq>{(|C|B z+Vh7RPi>?f>s5g9ozR`lCOEn1DL%u=V3)Qb?nZnX-DvQFjydy`?wr&ER`48BPj+I} z7y~?OOgY4yT?cnlE!py?d)Oa0MV^T`i*LTDK%=V%5qYqZ{!PxKebWaK|6WHTk5n|U ze-yU)70eC&d{12${y;azm(c#dX-MxxJk6+SMCBb@gpLzFi5!oN6xKQBa81k@pA7J# zrv=XV@!mHyKV26Ewu!@b*@vj?<~(89lCvUDk4_X7{(^=DQl!`a3iSkPBlrE{@UF9h z-V!7W9cSbS_5R55_d%34_phec_}{<#hjF;w{~TV@nTL;R-$kqJDzI*WKFPGXgB1)$ zK+!`fX7xmbytY>3IDbzZlYSQe`Pqm!8J)zq#~Pn}FN1IV=Z1CtuORP**}|H!eKb$z zzR)#V33*4V0D5JJM9OcWF)$WBrE24yz7e?W;$7VRd?QIXS3%yooF^MsW)Qj4h9pQ5 zaEq)4IUjd`$S$5v`nQ;nrlTCz@lnAKjI(i)^BnRA;&8^y(OA}TJvw0;%-y;+l9t)I zaEAMusrNuP?S~nxqqPTQhVri~ zmy*ZWspS>6zR`lm4s_z7x3BPoaToCH{qC@Q`ZN++w4Hpdb0lL-=7ZZRM!)>{i;fnL zgpi2MLZ8Rm=sTjzhMM-Wzh-0b$hG^4(T`0;j5yTazS+n@B)rT`(l+c`7tr;W~Dgi~zZ<59c&4 zctuY=sKMLbX5*=Q0UtFkfnC0LK{l+MOOAL$6O~8dy2h*AvP)+`Li-R{dFE8e?tM(F zJa^$$^UfiwC_TJN@(#Rk9l|Hp{lt%}YOqD@ZlW)$5WZN{3F&AwbNj8z-bVO>@jqGC z!#gWgZYblj2h$0I7s6%R7qFHe^VxejPp03H$4+amW;O~KE#1)wdAbK-`^CK|!Y>on z-p#>9ucGO)OQ(@a<1wgnSAreu#-pjG1`xH+lsaeBqRbcH;dg#Cd$Hv`L=Ngfp7v>= z*UYG0;um~3VGJ=W@jzR8PeaVTOy(UYV)d)%G9RlIOk%YyvpJT`&h%`;?Yt*+RNOkS zOpL~!0n3re`gJ&Q(o^vKZOR_kR$y_{RX9!N61QSn5Hjpr%8taO!j%1DOf#q-2A)i1 zC;#T6RgbjE-bD{_!_{Rd_xEkMdfkUjyr0fugqzvXPX}2#Gi00c)P$W6JmI(UUF+{eL?fYoE<2Ah7bA)JDXE4j_ zVLAsZcqEi-B-`~SIB)H)dRGj>`pQ7uE>&es)?qn?g zzt3q@BA&ND0X#$_&;VISKlv2E;SKxX^{of^*uQLC<5Gwx6*!UN9apGhzdzq^@d3yF zuwgr-T-e8|ANal_uMVJmPM|&v7XaUd;kioCzqS;qynh6V>%)cRZJo&HupGXYHio<~ zwI?^^Z{w7j4%9323{wd`Na@Ldy(d26oh{nL+v^VZi<8FFJC@+byDez(>HRp><}7vl z9FIpAF2@r2MM&Tk26`6i;4b$YcPYD;PPub{ySXC|9WF1TH?-SfdYme%dAA8aPrpnn^|Ha%Vm6t1 z@I0|K=tg$OuA+`BcGTbTJzAzwi+$E-Fb7Eq8WNU_x5e{wrQU3^Xq6^WNxVvjiq+}e zoLr<3Hj&i5Uqz1oSU|+4x)S}nYV^?XU+CPSjg)zA%UCQ3#5SL!%S)!SIVFhgPZOpat-^1!vUrE$QaCxNOMmgdXNwn8N&T*G*wJ?(DWXBxapNIy z%Q#9mwrL25zpIhAeye%+5hh0`iV2b8V-Wc7!4=w$5Q}n=2k*7r>YoRf_+6^%{XOJV zw;5Spw1Sj*Vj|PT^F|FQq23g#YOLXS&U^fD z-EN52a=^C>zd)EYpgH`Wzi7llrrQ`K4AqyytND5Ow5t}D-u{kv4R%6WmI*tk?asdL z7QwN*JVX66n$GGOz^PMz;7tiXu}9=Iay+sS2fs2Rlis!9cWWAOVy-R8{{9Z9eMlhl zClrCz^m!yB=071)n+*=Jrp#h;CUYjboI{%>wl2@-yEY`T%jhD2qbK1Uc?q}pK2n|O z<5=y^gYdNcH`Q5fLu}?LlCO7Mh@Yo9X~^DyPlkNOqNUzAKTt@_PDPVWmpkH&}Bd9_? zBDd}z!nq^YphttwX!@^cfkp5S@N7McxBI2zfwfccJOw*wXhd{Q!)NYYz#bGOxdWEf z$wHH;TVz@+B9-kjS?Xu5zmE%fe9hpOPiB zR$V}4x;N31R)kIk4N?X3R@Ch>mUK@0isfFq&}>l#s@2NElX^o$InEaF-svG!FOGz5 zEiE+a`CisO8Z)y5f7Toq%#2c$*xT7WtG>Jz&$51p2j-~qeky;^TxQJL?&q>A3Lfn9 znmTY?eqT`bDU7>wN(P@jf>8al9O&hl*9Q&?EWF>*D!u*^7~J4pa$TkH<*Ym|dnt(> zlib--AF;}l%e>iLzSqs+#a(D^Y=D-VxA++`0G`}<1Xri6f$+wwuWn-zE_X#@tpDamr6MFzp?bDMg>F_tY>dNWWjXpKX7!xEY?231Ke6FfPM%A zEdzU&wCx>}8sWo?e-LK4p@aQ9jaax=6f=1DidET0vv`U1tWscrulIN1`Hq_bzaD|5 z`Xq_hQcRDyR-@$VcHyce$58FIceLH*2qYHjGuQhoSR{&O@0EMOspb~!JwJhoy&nd} zf^v8*b_iZC3ZS2khJtu-HjLAV1x_{u>=s2cVQB-K;CF;6eKlY)*TvYHal?>&`3~or z!`}zU#ZYB2Z6tEPN^=69QtyObp=i;0>NxQnZ5Y}QT(~>zzHey7&+3^q^R5ikm0ZD=wyho7P4rOPceK~Gp7s<4(2^tPkUm!8zBdJ-z{=^!{GTB`E_RH1Ye{1-RU!4i z8jIY@JxILH&dZf$HU*3vdmehDWY z|F~RpIGv05{F7GM)Y8F>GeYxO=g`F90Q&Q05QY+g5HIH<08E- z3s}go z^)VV%V+fP2R|tK!7^BIjmEbGkJF<_}q3!E#Qo;6nG=HQa9S)g5?|qQrck0Uc<@Hi( zCx4EPkSRchice^q#5X!9IgK`uJ2YaKA~yeGLYtf1Y1?EmP~4)6j)ckpDL=z?`wr7r z*2(l%kvtsuo`UwRn}@U#C51!gTA*c~Ak4RoKoNHYJR7Wl&#zMk-T&gazvkcQ_xm>x zT7D6AKbM4}gz>0-tt58+ECFeUmeU4lCwinhj9OZs6UO|CbkFSq&S=#T zO&FDilvV2K>cLu?9@`-_DlDgKWsRY-`v={>D3(eOC-Cgc9%T9Ppm2Uf0d?eeKMik9 zk$2&0`grYUy5iJdTA-rLe~;?a%r+NwXayqsGokd{u#{-C?Fc-@UYE)h+(G57r|87u zo2bV$mzLb$gJz{q6?|wC18uSn^^S}}*#Vjm65dKvvSso1ZbMvD{|0633#B#V9#Pk6 zNmPHbkm@|UM|&1D)1?|uXv*+s)b3?~B<$p1%R4FD;uwyuIM?z_%RRKS&=id-H4~g; zS4E)_p6KZI(Xg{t8%p!Ha)pal(>#qfWTxFg^@rP$*Ud?&=)^nv#(Wf5&;MLuP@To? zJ|roynt2&@ys6@P-Bl75JLuqKR3ZV6yPtt3XTB%HnJnE^tLo2H{h|Vbvi)Nhc zroX;PgXB`6@3$q>ks6CDq9P9q4;sX9$4lfOGJGy_RxhO2$5+zUkjJ#l>KJ`6-Gjy! z=h2Bf`MJit)8WZ zDp$`(f0o41O9O|vU4>$hTB?a&>^+6Zlm=S2I0pUmkwTYV%ENzG{!wu#{qPipW6U*D72JzR7udf@QJi=`4D|yC984}2mQO52LD#!zl}ikDzjU2O4~xUHy=pLSofTBQu0qnAf6*hg zZv~2JI#k%&fOKb`;ug*Og#yWRl)6_2w{_$pwf)LC&N!b=+rEVU8^e1Pvt?;`;w<{S zFAY^D@1aH;Od&mTG4*S%K?1FMdZo0OYP4f&q56!j*f;~(Ro)dX`x!|eghW$^S7K1$ zkVebTe4{;+inwWqe37n1w$OBg5ArT^6WVwC&>WR;lz(rC_KrJ)7B}4x*jL;|Q#~YM z)sc_1uqz(D(sn}|_0OWSdXu5Gw?gRI+Qz;3E@g~Rnch|WvCu9Lbabb?rHET zWIt3(-Cx$C5~l+CsdgcTIOWeLLwgcYWBu zy$D(RX`?sqXT$Hf?WpOBi9pHk5?V1%5<*Qs)A~1uY0`*7lbM=D@8fsS1rId9uf+q+U%s5C ze~A^Go6vw3N&Tjt?{5nOq%}aW=$7bDuMFJsm4|u+Le0oblxsJRYNgatd)Wc{cs)l4 z7mXBc`DhMK*PT&($N}V_8c)Sj`b7ty4N>p-?PzV{DOzV9i0b2S((5i&G|N$+>Kyjq zmgOspT7HeUn*Mi_(70C<{p_zpvuDNAWz%j`A44OdX|F0wGb%xsC$FXF%kt>wTs)On}ufUhKWEt8J)>eg>yyX!V8D;QJ7#cU07oPcB|Cku~Ro!FgpQB zQ5C3uw1Yb$rhvppYQXTnh>HA^U6gobP|c$!kay~JLFG&(sL3{=g)tdO)kz*tn?8f4 zhA6`!*E6UkHimmHJ{Ib62vXA5L0SAcBRIW_#&4FQ<~pZPn~pAoN*||5(ranx=Qeb( zaw4Fkzql14!8E;vXHUfEqS}ZpG-tgeZok(fs!Du~^rdE^KO0A3=J%A!uP>s(g%?oY zi!P*fMFHM#45wp?c%C~<1^OMHBH0b4)Z=&xdNcVLz5FhVHg=o9-L_FMVx&JB5}cz(A2c&6hqlFSqmA+{^zI`Ubh+7` ztMS(1JqfDNy*@&CXcR^J?Wgb_uQGH{uwNJ>c9OH$`~`KaszLg0?*t^U!k{{ zmGHO)K}*^)P}PhBX!(9W`o2#Rmdp90xQ{cSr8JzHN~h3y5>Kd$>tm#sIR=W(H_>W+ zO;EIbD>(A)EnVA%Szde;d`|i$bY4g`SZm*OaB?lC+m&zBU z>cHp4I+JM1JX;!+VuBz3)hj2(@H}Vwl`2f9ZwEjc~-SH#~?K*3M79LBb zF56nrnqvjjX8u@w?*3BrBPYSC+~}>)t5_LwT&n5Pw`~*|8B@in9jHjsjd})rq-Ce{ zD}+;1=#+p8p-+`N_3CP;cfTj2R>K7P?!t2cURX_s#_FJAkq*75F-ZNit!aI$tJUpc zUv6I0Cv?d~0&iKRzTeyMH8&k-xR3+=L4x#I--{<{Np*+{@J&xRwFENUT?z}9ob zu>XcKI_L2v^!Jb^?b#ZSLK@Gay2clx*4r;o%5J_7&G8wv_cBNSy6m|j*Bom0Z4*+` zxlW_PQV<{Yp{6_AQQAWTv~_WskUFc(r4pcjQCyHFtBJ&i zS8^etAE@oKH`H``JsMv3m3r4+5EVVUFZ{CQ4C=9*jl^`Pab~-D|G>OKq&BvRZkGLm z;`Ay|UAF>PfATJ}jjE@kMb)(GWIZjoCIx;awMgwS;;t5?&@%t2$ooM6I=+60{=5)G z2dB4k^+Gx9oOqPRw4C9*zYmKhJddH&+llU-twPzoQnbHU3JdZ-AWJtVq4J}{=r%W( zddDVl$-h*<@k+j^JzyM?ekYF~FX={a5)aU|-rYQx?m;bYh=F~aJhIeNg$*wr(`)55 zNMV5t7>{d0OFsjRvD%3e4P}M@ERPAAG?mzJ*fJRQECjiA^TF%66ZhkfF?;aUl9k0M zu_!?VJh<3~{J$`f=1wvG?$QMPkR6HhuI@wLu`f7Brx20;a&uvM#em>-??vSOq*CbZ zS1TMmDFF^VcO0B91<F?;~Oe5A>p zmiYn2G=oi>c#Boe-ox~M#WLAlMR0ubEI9RDnS9%9z>*CbP)NiMl=pW5Rkpi8uin$a zyVw3gi%K5|bq`FV3W}$3bDk@4J!nQ|KKsOlSUT}}ndM}o$|&-Wh2tF~%Z1ry5Ac5u zwlMChI{q%5h5X20D*1OGw8|Dhb9fF^Nq>X2(@Jo*$qX>=@^23Sj3{WRt^*(rv*mwxIxlJf^ z_Cx(6`%$W}28*ej#$VRD5MvY$b3RD0An_96UOub;xUWc3$Z``4A1v*nz#1F5-?60y1^nKXgi6o@Z`eqI1u-Qrj<&;AKG-*1JA_Hhx(h#~KjACpuW+~61+=O&9dSnY zIKI1{sczcCtet+-&2L(y^K;liV-;4oZYvwSAi=&U%d*pNN5aJ8o_OqojgaSk z0)*!h*yV?9OyY4SDAXW6GoFk4?0fOrz-F8_TLquItuGj1oC6pB6Jvd|o8aTciD0(H z4h?KMio}=XgASh?b(q~L419>0Nw^04V>pWWor_@`N>kYWy~a#%*BPSB+ECT2g|Mu1 z08&blnafr+_FX#w7WQ7jr!@CtPK)m&YyA%|6~)nKZv0tNB*PSi|MBd+A^s$zN)|6r z#(DgA7aHr?no1M|EosUPTo)Miw6Up|`-+CSas z96=z=(br*n=Zt1kb$r-hRxvayo`J`sFJpD(P2_cx2D$f*cXs=`lM$P<$-Q%NL{4HV zsg56muZ_G&5AW%qn>6OYIeRa7WugGc=m}hU{gRTjseHHANRnvt6kNn(u(R1Qd}Ch{ zXxgpe3Rf>$_Cxp@x5wno$mZa10HkwmV=C6Vg_M6wGqNUSJ^j3^on z<1Y@-?#M_SIx!AB3U;zLy>Vk{g`>qZDJE`f3itmzA?>hflQib zC1>h8u?@$i;IJSMziPaMQ@_5(9tHY%`>pjv_w-Goe8Ynjn0zJUek73lD`%14Q=LiA zp?G?~J{6x|`vQ-b3&w+g7ct#KGnwq^Fs5)Igmo;c_%=HKB5*~^)c2m0uUGy_<_S?a}ATM@*ryQ%M52>RCKjSKX#L+Wki2l-pB&Roy z%-d*6hK5RUS-cqx(PApo-wG?;H^Z@_-*kV1FV>q#h~KaTdB!v6d(T>N%N|~4#cN+6 z)rc!xRqqva@>?n9`f_gtjagvBa}S$|-8wVaWv9W!qm7wjT0S+CovpMaiw_Hk0(+AJ`N(Qc1oeB;e#7+eVJ(f4QC66pf@xe{R=vMt9_B1u6vZ_79&e$A7xOC(fHD2^iC&5`ys4DJ zmNnwS5xJ_gOgmaw|AX(GHqvDR%`m!HavoXoU^(II|A^g4zUM}N2d>t*26p~Z=+6Tu zJmecgNBS-jE_EJFpBoGad~0vg$biXw&lAV)o1JB~ntUf!S_FIiOcpOXp+;7;FTolc z9@D&Kv$+l5MRaVj6g+rnieKA&r{=#MN!XoIQXd{oCWbnY>Do0^kJ|=4Q~1x=;{pb^ zkD`0ZmU!;nFQ9Wsk9msX;9&J~=rfXJYk6l~&Fa-`d|eu|QBGlsZto#+`6#0QC4$zh zkf3=_^0>OzX;+ zhAj{UF!vr?7HWAA&%d#f$jv^1haU#B?7voUrcnp|taM`#vklazwp06m7Rb@B8hJV0 z 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