From 548cb5029c96e6d2bbc1dd2c5c1d1227ad9c660c Mon Sep 17 00:00:00 2001 From: yongzhang6782 Date: Tue, 17 Jun 2025 19:16:24 +0800 Subject: [PATCH 01/25] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e6fb349..dedc9bf 100644 --- a/README.md +++ b/README.md @@ -103,6 +103,7 @@ We propose **MultiTalk** , a novel framework for audio-driven multi-person conve - [ ] TTS integration - [ ] Gradio demo - [ ] ComfyUI +- [ ] 1.3B model ## Quick Start From d86f029924a7107f32fdeff921929a3d4a2a028d Mon Sep 17 00:00:00 2001 From: yongzhang6782 Date: Wed, 18 Jun 2025 20:57:38 +0800 Subject: [PATCH 02/25] Add files via upload --- LICENSE.txt | 201 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 LICENSE.txt diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. From 3e6a1aa597d56b5b71bcfe2dd3cea15bd403f0d4 Mon Sep 17 00:00:00 2001 From: Feng <2482648525@qq.com> Date: Sat, 21 Jun 2025 11:11:34 +0800 Subject: [PATCH 03/25] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index dedc9bf..9ea8354 100644 --- a/README.md +++ b/README.md @@ -153,6 +153,7 @@ Download models using huggingface-cli: ``` sh huggingface-cli download Wan-AI/Wan2.1-I2V-14B-480P --local-dir ./weights/Wan2.1-I2V-14B-480P huggingface-cli download TencentGameMate/chinese-wav2vec2-base --local-dir ./weights/chinese-wav2vec2-base +huggingface-cli download TencentGameMate/chinese-wav2vec2-base model.safetensors --revision refs/pr/1 --local-dir ./weights/chinese-wav2vec2-base huggingface-cli download MeiGen-AI/MeiGen-MultiTalk --local-dir ./weights/MeiGen-MultiTalk ``` From b6ff7d11547f3dba769e78a05f48c57340b8b9ca Mon Sep 17 00:00:00 2001 From: yongzhang6782 Date: Sun, 22 Jun 2025 00:30:44 +0800 Subject: [PATCH 04/25] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 9ea8354..2f91317 100644 --- a/README.md +++ b/README.md @@ -86,6 +86,7 @@ We propose **MultiTalk** , a novel framework for audio-driven multi-person conve * May 29, 2025: We release the [project page](https://meigen-ai.github.io/multi-talk/) of **MultiTalk** ## 🌐 Community Works +- [ComfyUI](https://github.com/kijai/ComfyUI-WanVideoWrapper/tree/multitalk): thanks for [kijai](https://github.com/kijai) to integrate MultiTalk into ComfyUI-WanVideoWrapper. [Rudra](https://github.com/Rudra-ai-coder) found something interesting that MultiTalk can be combined with Wanx T2V and VACE in the [issue](https://github.com/kijai/ComfyUI-WanVideoWrapper/issues/635). - [Google Colab example](https://colab.research.google.com/drive/185OyRIpJDlpnRjhBRb7FnaRlq11BLZTa?usp=sharing), an exmaple for inference on A100 provided by [Braffolk](https://github.com/Braffolk). ## 📑 Todo List From 9c444d12972f89206293acbf4cda4cb0995d4dd3 Mon Sep 17 00:00:00 2001 From: yongzhang6782 Date: Sun, 22 Jun 2025 10:05:22 +0800 Subject: [PATCH 05/25] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2f91317..0392773 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ We propose **MultiTalk** , a novel framework for audio-driven multi-person conve * May 29, 2025: We release the [project page](https://meigen-ai.github.io/multi-talk/) of **MultiTalk** ## 🌐 Community Works -- [ComfyUI](https://github.com/kijai/ComfyUI-WanVideoWrapper/tree/multitalk): thanks for [kijai](https://github.com/kijai) to integrate MultiTalk into ComfyUI-WanVideoWrapper. [Rudra](https://github.com/Rudra-ai-coder) found something interesting that MultiTalk can be combined with Wanx T2V and VACE in the [issue](https://github.com/kijai/ComfyUI-WanVideoWrapper/issues/635). +- [ComfyUI](https://github.com/kijai/ComfyUI-WanVideoWrapper/tree/multitalk): thanks [kijai](https://github.com/kijai) for integrating MultiTalk into ComfyUI-WanVideoWrapper. [Rudra](https://github.com/Rudra-ai-coder) found something interesting that MultiTalk can be combined with Wanx T2V and VACE in the [issue](https://github.com/kijai/ComfyUI-WanVideoWrapper/issues/635). - [Google Colab example](https://colab.research.google.com/drive/185OyRIpJDlpnRjhBRb7FnaRlq11BLZTa?usp=sharing), an exmaple for inference on A100 provided by [Braffolk](https://github.com/Braffolk). ## 📑 Todo List From 17418bef69ea4844b18d2f7e05524a801e619f12 Mon Sep 17 00:00:00 2001 From: yongzhang6782 Date: Wed, 25 Jun 2025 23:18:53 +0800 Subject: [PATCH 06/25] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0392773..277b317 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,8 @@ We propose **MultiTalk** , a novel framework for audio-driven multi-person conve * May 29, 2025: We release the [project page](https://meigen-ai.github.io/multi-talk/) of **MultiTalk** ## 🌐 Community Works -- [ComfyUI](https://github.com/kijai/ComfyUI-WanVideoWrapper/tree/multitalk): thanks [kijai](https://github.com/kijai) for integrating MultiTalk into ComfyUI-WanVideoWrapper. [Rudra](https://github.com/Rudra-ai-coder) found something interesting that MultiTalk can be combined with Wanx T2V and VACE in the [issue](https://github.com/kijai/ComfyUI-WanVideoWrapper/issues/635). +- [Gradio Demo](https://github.com/MeiGen-AI/MultiTalk): thank [fffiloni](https://github.com/fffiloni) for developing this gradio demo on Hugging Face. Please refer to the [issue](https://github.com/MeiGen-AI/MultiTalk/issues/39) for details. +- [ComfyUI](https://github.com/kijai/ComfyUI-WanVideoWrapper/tree/multitalk): thank [kijai](https://github.com/kijai) for integrating MultiTalk into ComfyUI-WanVideoWrapper. [Rudra](https://github.com/Rudra-ai-coder) found something interesting that MultiTalk can be combined with Wanx T2V and VACE in the [issue](https://github.com/kijai/ComfyUI-WanVideoWrapper/issues/635). - [Google Colab example](https://colab.research.google.com/drive/185OyRIpJDlpnRjhBRb7FnaRlq11BLZTa?usp=sharing), an exmaple for inference on A100 provided by [Braffolk](https://github.com/Braffolk). ## 📑 Todo List From 72de572f8f31db47b9dc197a601f857ec4a4915c Mon Sep 17 00:00:00 2001 From: Zhe Kong <43921423+kongzhecn@users.noreply.github.com> Date: Tue, 1 Jul 2025 01:11:40 +0800 Subject: [PATCH 07/25] upload tts, gradio, lora accele --- README.md | 98 +++- app.py | 769 ++++++++++++++++++++++++++ assets/efficiency.png | Bin 193154 -> 47298 bytes examples/multitalk_example_tts_1.json | 11 + examples/single_example_tts_1.json | 9 + generate_multitalk.py | 168 +++++- kokoro/__init__.py | 23 + kokoro/__main__.py | 148 +++++ kokoro/custom_stft.py | 197 +++++++ kokoro/istftnet.py | 421 ++++++++++++++ kokoro/model.py | 155 ++++++ kokoro/modules.py | 183 ++++++ kokoro/pipeline.py | 445 +++++++++++++++ requirements.txt | 1 + wan/multitalk.py | 17 +- wan/utils/multitalk_utils.py | 120 +++- wan/utils/utils.py | 353 ++++++++++++ wan/wan_lora.py | 108 ++++ 18 files changed, 3167 insertions(+), 59 deletions(-) create mode 100644 app.py create mode 100644 examples/multitalk_example_tts_1.json create mode 100644 examples/single_example_tts_1.json create mode 100644 kokoro/__init__.py create mode 100644 kokoro/__main__.py create mode 100644 kokoro/custom_stft.py create mode 100644 kokoro/istftnet.py create mode 100644 kokoro/model.py create mode 100644 kokoro/modules.py create mode 100644 kokoro/pipeline.py create mode 100644 wan/wan_lora.py diff --git a/README.md b/README.md index 277b317..a10767c 100644 --- a/README.md +++ b/README.md @@ -80,6 +80,7 @@ We propose **MultiTalk** , a novel framework for audio-driven multi-person conve ## 🔥 Latest News +* July 01, 2025: 🔥🔥 `MultiTalk` supports input audios with TTS, LoRA acceleration (requires only 4~8 steps) and gradio. * June 14, 2025: 🔥🔥 We release `MultiTalk` with support for `multi-GPU inference`, `teacache acceleration`, `APG` and `low-VRAM inference` (enabling 480P video generation on a single RTX 4090). [APG](https://arxiv.org/abs/2410.02416) is used to alleviate the color error accumulation in long video generation. TeaCache is capable of increasing speed by approximately 2~3x. * June 9, 2025: 🔥🔥 We release the [weights](https://huggingface.co/MeiGen-AI/MeiGen-MultiTalk) and inference code of **MultiTalk** * May 29, 2025: We release the [Technique-Report](https://arxiv.org/abs/2505.22647) of **MultiTalk** @@ -102,8 +103,8 @@ We propose **MultiTalk** , a novel framework for audio-driven multi-person conve - [ ] LCM distillation - [ ] Sparse Attention - [x] Run with very low VRAM -- [ ] TTS integration -- [ ] Gradio demo +- [x] TTS integration +- [x] Gradio demo - [ ] ComfyUI - [ ] 1.3B model @@ -120,10 +121,11 @@ pip install -U xformers==0.0.28 --index-url https://download.pytorch.org/whl/cu1 ``` #### 2. Flash-attn installation: ``` +pip install misaki[en] pip install ninja pip install psutil pip install packaging -pip install flash_attn +pip install flash_attn==2.7.4.post1 ``` #### 3. Other dependencies @@ -149,6 +151,7 @@ sudo yum install ffmpeg ffmpeg-devel | --------------|-------------------------------------------------------------------------------|-------------------------------| | Wan2.1-I2V-14B-480P | 🤗 [Huggingface](https://huggingface.co/Wan-AI/Wan2.1-I2V-14B-480P) | Base model | chinese-wav2vec2-base | 🤗 [Huggingface](https://huggingface.co/TencentGameMate/chinese-wav2vec2-base) | Audio encoder +| Kokoro-82M | 🤗 [Huggingface](https://huggingface.co/hexgrad/Kokoro-82M) | TTS weights | MeiGen-MultiTalk | 🤗 [Huggingface](https://huggingface.co/MeiGen-AI/MeiGen-MultiTalk) | Our audio condition weights Download models using huggingface-cli: @@ -156,6 +159,7 @@ Download models using huggingface-cli: huggingface-cli download Wan-AI/Wan2.1-I2V-14B-480P --local-dir ./weights/Wan2.1-I2V-14B-480P huggingface-cli download TencentGameMate/chinese-wav2vec2-base --local-dir ./weights/chinese-wav2vec2-base huggingface-cli download TencentGameMate/chinese-wav2vec2-base model.safetensors --revision refs/pr/1 --local-dir ./weights/chinese-wav2vec2-base +huggingface-cli download hexgrad/Kokoro-82M --local-dir ./weights/Kokoro-82M huggingface-cli download MeiGen-AI/MeiGen-MultiTalk --local-dir ./weights/MeiGen-MultiTalk ``` @@ -209,7 +213,6 @@ python generate_multitalk.py \ --mode streaming \ --use_teacache \ --save_file single_long_exp - ``` ##### 2) Run with very low VRAM @@ -227,7 +230,6 @@ python generate_multitalk.py \ --num_persistent_param_in_dit 0 \ --use_teacache \ --save_file single_long_lowvram_exp - ``` ##### 3) Multi-GPU inference @@ -244,9 +246,21 @@ torchrun --nproc_per_node=$GPU_NUM --standalone generate_multitalk.py \ --mode streaming \ --use_teacache \ --save_file single_long_multigpu_exp - ``` +##### 4) Run with TTS +``` +python generate_multitalk.py \ + --ckpt_dir weights/Wan2.1-I2V-14B-480P \ + --wav2vec_dir 'weights/chinese-wav2vec2-base' \ + --input_json examples/single_example_tts_1.json \ + --sample_steps 40 \ + --mode streaming \ + --num_persistent_param_in_dit 0 \ + --use_teacache \ + --save_file single_long_lowvram_tts_exp \ + --audio_mode tts +``` #### 2. Multi-Person @@ -276,7 +290,6 @@ python generate_multitalk.py \ --num_persistent_param_in_dit 0 \ --use_teacache \ --save_file multi_long_lowvram_exp - ``` ##### 3) Multi-GPU inference @@ -291,8 +304,79 @@ torchrun --nproc_per_node=$GPU_NUM --standalone generate_multitalk.py \ --sample_steps 40 \ --mode streaming --use_teacache \ --save_file multi_long_multigpu_exp +``` + +##### 4) Run with TTS ``` +python generate_multitalk.py \ + --ckpt_dir weights/Wan2.1-I2V-14B-480P \ + --wav2vec_dir 'weights/chinese-wav2vec2-base' \ + --input_json examples/multitalk_example_tts_1.json \ + --sample_steps 40 \ + --mode streaming \ + --num_persistent_param_in_dit 0 \ + --use_teacache \ + --save_file multi_long_lowvram_tts_exp \ + --audio_mode tts +``` + + +#### 3. Run with FusioniX and CausVid(Require only 4~8 steps) + +[FusioniX](https://huggingface.co/vrgamedevgirl84/Wan14BT2VFusioniX/blob/main/Wan14Bi2vFusioniX_fp16.safetensors)require 8 steps and [lightx2v](https://huggingface.co/Kijai/WanVideo_comfy/blob/main/Wan21_T2V_14B_lightx2v_cfg_step_distill_lora_rank32.safetensors) requires only 4 steps. + +``` +python generate_multitalk.py \ + --ckpt_dir weights/Wan2.1-I2V-14B-480P \ + --wav2vec_dir 'weights/chinese-wav2vec2-base' \ + --input_json examples/single_example_1.json \ + --lora_dir weights/Wan2.1_I2V_14B_FusionX_LoRA.safetensors \ + --lora_scale 1.0 \ + --sample_text_guide_scale 1.0 \ + --sample_audio_guide_scale 1.0 \ + --sample_steps 8 \ + --mode streaming \ + --num_persistent_param_in_dit 0 \ + --save_file single_long_lowvram_fusionx_exp \ + --sample_shift 2 +``` + +or + +``` +python generate_multitalk.py \ + --ckpt_dir weights/Wan2.1-I2V-14B-480P \ + --wav2vec_dir 'weights/chinese-wav2vec2-base' \ + --input_json examples/multitalk_example_2.json \ + --lora_dir weights/Wan2.1_I2V_14B_FusionX_LoRA.safetensors \ + --lora_scale 1.0 \ + --sample_text_guide_scale 1.0 \ + --sample_audio_guide_scale 1.0 \ + --sample_steps 8 \ + --mode streaming \ + --num_persistent_param_in_dit 0 \ + --save_file multi_long_lowvram_fusionx_exp \ + --sample_shift 2 +``` + +#### 4. Run with Gradio + + + +``` +python app.py \ + --lora_dir weights/Wan2.1_I2V_14B_FusionX_LoRA.safetensors \ + --lora_scale 1.0 \ + --sample_shift 2 +``` + +or + +``` +python app.py +``` + ## 🚀Computational Efficiency The results are evaluated on A100 GPUs for multi-person generation. Single-person generation uses less memory and provides faster inference. diff --git a/app.py b/app.py new file mode 100644 index 0000000..507c22f --- /dev/null +++ b/app.py @@ -0,0 +1,769 @@ +# Copyright 2024-2025 The Alibaba Wan Team Authors. All rights reserved. +import argparse +import logging +import os +os.environ["no_proxy"] = "localhost,127.0.0.1,::1" +import sys +import json +import warnings +from datetime import datetime + +import gradio as gr +warnings.filterwarnings('ignore') + +import random + +import torch +import torch.distributed as dist +from PIL import Image +import subprocess + +import wan +from wan.configs import SIZE_CONFIGS, SUPPORTED_SIZES, WAN_CONFIGS +from wan.utils.utils import cache_image, cache_video, str2bool +from wan.utils.multitalk_utils import save_video_ffmpeg +from kokoro import KPipeline +from transformers import Wav2Vec2FeatureExtractor +from src.audio_analysis.wav2vec2 import Wav2Vec2Model + +import librosa +import pyloudnorm as pyln +import numpy as np +from einops import rearrange +import soundfile as sf +import re + +def _validate_args(args): + # Basic check + assert args.ckpt_dir is not None, "Please specify the checkpoint directory." + assert args.task in WAN_CONFIGS, f"Unsupport task: {args.task}" + + # The default sampling steps are 40 for image-to-video tasks and 50 for text-to-video tasks. + if args.sample_steps is None: + args.sample_steps = 40 + + if args.sample_shift is None: + if args.size == 'multitalk-480': + args.sample_shift = 7 + elif args.size == 'multitalk-720': + args.sample_shift = 11 + else: + raise NotImplementedError(f'Not supported size') + + args.base_seed = args.base_seed if args.base_seed >= 0 else random.randint( + 0, 99999999) + # Size check + assert args.size in SUPPORTED_SIZES[ + args. + task], f"Unsupport size {args.size} for task {args.task}, supported sizes are: {', '.join(SUPPORTED_SIZES[args.task])}" + + +def _parse_args(): + parser = argparse.ArgumentParser( + description="Generate a image or video from a text prompt or image using Wan" + ) + parser.add_argument( + "--task", + type=str, + default="multitalk-14B", + choices=list(WAN_CONFIGS.keys()), + help="The task to run.") + parser.add_argument( + "--size", + type=str, + default="multitalk-480", + choices=list(SIZE_CONFIGS.keys()), + help="The buckget size of the generated video. The aspect ratio of the output video will follow that of the input image." + ) + parser.add_argument( + "--frame_num", + type=int, + default=81, + help="How many frames to be generated in one clip. The number should be 4n+1" + ) + parser.add_argument( + "--ckpt_dir", + type=str, + default='./weights/Wan2.1-I2V-14B-480P', + help="The path to the Wan checkpoint directory.") + parser.add_argument( + "--wav2vec_dir", + type=str, + default='./weights/chinese-wav2vec2-base', + help="The path to the wav2vec checkpoint directory.") + parser.add_argument( + "--lora_dir", + type=str, + nargs='+', + default=None, + help="The path to the LoRA checkpoint directory.") + parser.add_argument( + "--lora_scale", + type=float, + nargs='+', + default=[1.2], + help="Controls how much to influence the outputs with the LoRA parameters. Accepts multiple float values." + ) + + + # parser.add_argument( + # "--lora_dir", + # type=str, + # default=None, + # help="The path to the LoRA checkpoint directory.") + # parser.add_argument( + # "--lora_scale", + # type=float, + # default=1.2, + # help="Controls how much to influence the outputs with the LoRA parameters.") + parser.add_argument( + "--offload_model", + type=str2bool, + default=None, + help="Whether to offload the model to CPU after each model forward, reducing GPU memory usage." + ) + parser.add_argument( + "--ulysses_size", + type=int, + default=1, + help="The size of the ulysses parallelism in DiT.") + parser.add_argument( + "--ring_size", + type=int, + default=1, + help="The size of the ring attention parallelism in DiT.") + parser.add_argument( + "--t5_fsdp", + action="store_true", + default=False, + help="Whether to use FSDP for T5.") + parser.add_argument( + "--t5_cpu", + action="store_true", + default=False, + help="Whether to place T5 model on CPU.") + parser.add_argument( + "--dit_fsdp", + action="store_true", + default=False, + help="Whether to use FSDP for DiT.") + parser.add_argument( + "--save_file", + type=str, + default=None, + help="The file to save the generated image or video to.") + parser.add_argument( + "--audio_save_dir", + type=str, + default='save_audio/gradio', + help="The path to save the audio embedding.") + parser.add_argument( + "--base_seed", + type=int, + default=42, + help="The seed to use for generating the image or video.") + parser.add_argument( + "--input_json", + type=str, + default='examples.json', + help="[meta file] The condition path to generate the video.") + parser.add_argument( + "--motion_frame", + type=int, + default=25, + help="Driven frame length used in the mode of long video genration.") + parser.add_argument( + "--mode", + type=str, + default="streaming", + choices=['clip', 'streaming'], + help="clip: generate one video chunk, streaming: long video generation") + parser.add_argument( + "--sample_steps", type=int, default=None, help="The sampling steps.") + parser.add_argument( + "--sample_shift", + type=float, + default=None, + help="Sampling shift factor for flow matching schedulers.") + parser.add_argument( + "--sample_text_guide_scale", + type=float, + default=5.0, + help="Classifier free guidance scale for text control.") + parser.add_argument( + "--sample_audio_guide_scale", + type=float, + default=4.0, + help="Classifier free guidance scale for audio control.") + parser.add_argument( + "--num_persistent_param_in_dit", + type=int, + default=None, + required=False, + help="Maximum parameter quantity retained in video memory, small number to reduce VRAM required", + ) + parser.add_argument( + "--use_teacache", + action="store_true", + default=False, + help="Enable teacache for video generation." + ) + parser.add_argument( + "--teacache_thresh", + type=float, + default=0.2, + help="Threshold for teacache." + ) + parser.add_argument( + "--use_apg", + action="store_true", + default=False, + help="Enable adaptive projected guidance for video generation (APG)." + ) + parser.add_argument( + "--apg_momentum", + type=float, + default=-0.75, + help="Momentum used in adaptive projected guidance (APG)." + ) + parser.add_argument( + "--apg_norm_threshold", + type=float, + default=55, + help="Norm threshold used in adaptive projected guidance (APG)." + ) + args = parser.parse_args() + _validate_args(args) + return args + + +def custom_init(device, wav2vec): + audio_encoder = Wav2Vec2Model.from_pretrained(wav2vec, local_files_only=True).to(device) + audio_encoder.feature_extractor._freeze_parameters() + wav2vec_feature_extractor = Wav2Vec2FeatureExtractor.from_pretrained(wav2vec, local_files_only=True) + return wav2vec_feature_extractor, audio_encoder + +def loudness_norm(audio_array, sr=16000, lufs=-23): + meter = pyln.Meter(sr) + loudness = meter.integrated_loudness(audio_array) + if abs(loudness) > 100: + return audio_array + normalized_audio = pyln.normalize.loudness(audio_array, loudness, lufs) + return normalized_audio + +def audio_prepare_multi(left_path, right_path, audio_type, sample_rate=16000): + if not (left_path=='None' or right_path=='None'): + human_speech_array1 = audio_prepare_single(left_path) + human_speech_array2 = audio_prepare_single(right_path) + elif left_path=='None': + human_speech_array2 = audio_prepare_single(right_path) + human_speech_array1 = np.zeros(human_speech_array2.shape[0]) + elif right_path=='None': + human_speech_array1 = audio_prepare_single(left_path) + human_speech_array2 = np.zeros(human_speech_array1.shape[0]) + + if audio_type=='para': + new_human_speech1 = human_speech_array1 + new_human_speech2 = human_speech_array2 + elif audio_type=='add': + new_human_speech1 = np.concatenate([human_speech_array1[: human_speech_array1.shape[0]], np.zeros(human_speech_array2.shape[0])]) + new_human_speech2 = np.concatenate([np.zeros(human_speech_array1.shape[0]), human_speech_array2[:human_speech_array2.shape[0]]]) + sum_human_speechs = new_human_speech1 + new_human_speech2 + return new_human_speech1, new_human_speech2, sum_human_speechs + +def _init_logging(rank): + # logging + if rank == 0: + # set format + logging.basicConfig( + level=logging.INFO, + format="[%(asctime)s] %(levelname)s: %(message)s", + handlers=[logging.StreamHandler(stream=sys.stdout)]) + else: + logging.basicConfig(level=logging.ERROR) + +def get_embedding(speech_array, wav2vec_feature_extractor, audio_encoder, sr=16000, device='cpu'): + audio_duration = len(speech_array) / sr + video_length = audio_duration * 25 # Assume the video fps is 25 + + # wav2vec_feature_extractor + audio_feature = np.squeeze( + wav2vec_feature_extractor(speech_array, sampling_rate=sr).input_values + ) + audio_feature = torch.from_numpy(audio_feature).float().to(device=device) + audio_feature = audio_feature.unsqueeze(0) + + # audio encoder + with torch.no_grad(): + embeddings = audio_encoder(audio_feature, seq_len=int(video_length), output_hidden_states=True) + + if len(embeddings) == 0: + print("Fail to extract audio embedding") + return None + + audio_emb = torch.stack(embeddings.hidden_states[1:], dim=1).squeeze(0) + audio_emb = rearrange(audio_emb, "b s d -> s b d") + + audio_emb = audio_emb.cpu().detach() + return audio_emb + +def extract_audio_from_video(filename, sample_rate): + raw_audio_path = filename.split('/')[-1].split('.')[0]+'.wav' + ffmpeg_command = [ + "ffmpeg", + "-y", + "-i", + str(filename), + "-vn", + "-acodec", + "pcm_s16le", + "-ar", + "16000", + "-ac", + "2", + str(raw_audio_path), + ] + subprocess.run(ffmpeg_command, check=True) + human_speech_array, sr = librosa.load(raw_audio_path, sr=sample_rate) + human_speech_array = loudness_norm(human_speech_array, sr) + os.remove(raw_audio_path) + + return human_speech_array + +def audio_prepare_single(audio_path, sample_rate=16000): + ext = os.path.splitext(audio_path)[1].lower() + if ext in ['.mp4', '.mov', '.avi', '.mkv']: + human_speech_array = extract_audio_from_video(audio_path, sample_rate) + return human_speech_array + else: + human_speech_array, sr = librosa.load(audio_path, sr=sample_rate) + human_speech_array = loudness_norm(human_speech_array, sr) + return human_speech_array + +def process_tts_single(text, save_dir, voice1): + s1_sentences = [] + + pipeline = KPipeline(lang_code='a', repo_id='weights/Kokoro-82M') + + voice_tensor = torch.load(voice1, weights_only=True) + generator = pipeline( + text, voice=voice_tensor, # <= change voice here + speed=1, split_pattern=r'\n+' + ) + audios = [] + for i, (gs, ps, audio) in enumerate(generator): + audios.append(audio) + audios = torch.concat(audios, dim=0) + s1_sentences.append(audios) + s1_sentences = torch.concat(s1_sentences, dim=0) + save_path1 =f'{save_dir}/s1.wav' + sf.write(save_path1, s1_sentences, 24000) # save each audio file + s1, _ = librosa.load(save_path1, sr=16000) + return s1, save_path1 + + + +def process_tts_multi(text, save_dir, voice1, voice2): + pattern = r'\(s(\d+)\)\s*(.*?)(?=\s*\(s\d+\)|$)' + matches = re.findall(pattern, text, re.DOTALL) + + s1_sentences = [] + s2_sentences = [] + + pipeline = KPipeline(lang_code='a', repo_id='weights/Kokoro-82M') + for idx, (speaker, content) in enumerate(matches): + if speaker == '1': + voice_tensor = torch.load(voice1, weights_only=True) + generator = pipeline( + content, voice=voice_tensor, # <= change voice here + speed=1, split_pattern=r'\n+' + ) + audios = [] + for i, (gs, ps, audio) in enumerate(generator): + audios.append(audio) + audios = torch.concat(audios, dim=0) + s1_sentences.append(audios) + s2_sentences.append(torch.zeros_like(audios)) + elif speaker == '2': + voice_tensor = torch.load(voice2, weights_only=True) + generator = pipeline( + content, voice=voice_tensor, # <= change voice here + speed=1, split_pattern=r'\n+' + ) + audios = [] + for i, (gs, ps, audio) in enumerate(generator): + audios.append(audio) + audios = torch.concat(audios, dim=0) + s2_sentences.append(audios) + s1_sentences.append(torch.zeros_like(audios)) + + s1_sentences = torch.concat(s1_sentences, dim=0) + s2_sentences = torch.concat(s2_sentences, dim=0) + sum_sentences = s1_sentences + s2_sentences + save_path1 =f'{save_dir}/s1.wav' + save_path2 =f'{save_dir}/s2.wav' + save_path_sum = f'{save_dir}/sum.wav' + sf.write(save_path1, s1_sentences, 24000) # save each audio file + sf.write(save_path2, s2_sentences, 24000) + sf.write(save_path_sum, sum_sentences, 24000) + + s1, _ = librosa.load(save_path1, sr=16000) + s2, _ = librosa.load(save_path2, sr=16000) + # sum, _ = librosa.load(save_path_sum, sr=16000) + return s1, s2, save_path_sum + +def run_graio_demo(args): + rank = int(os.getenv("RANK", 0)) + world_size = int(os.getenv("WORLD_SIZE", 1)) + local_rank = int(os.getenv("LOCAL_RANK", 0)) + device = local_rank + _init_logging(rank) + + if args.offload_model is None: + args.offload_model = False if world_size > 1 else True + logging.info( + f"offload_model is not specified, set to {args.offload_model}.") + if world_size > 1: + torch.cuda.set_device(local_rank) + dist.init_process_group( + backend="nccl", + init_method="env://", + rank=rank, + world_size=world_size) + else: + assert not ( + args.t5_fsdp or args.dit_fsdp + ), f"t5_fsdp and dit_fsdp are not supported in non-distributed environments." + assert not ( + args.ulysses_size > 1 or args.ring_size > 1 + ), f"context parallel are not supported in non-distributed environments." + + if args.ulysses_size > 1 or args.ring_size > 1: + assert args.ulysses_size * args.ring_size == world_size, f"The number of ulysses_size and ring_size should be equal to the world size." + from xfuser.core.distributed import ( + init_distributed_environment, + initialize_model_parallel, + ) + init_distributed_environment( + rank=dist.get_rank(), world_size=dist.get_world_size()) + + initialize_model_parallel( + sequence_parallel_degree=dist.get_world_size(), + ring_degree=args.ring_size, + ulysses_degree=args.ulysses_size, + ) + + + cfg = WAN_CONFIGS[args.task] + if args.ulysses_size > 1: + assert cfg.num_heads % args.ulysses_size == 0, f"`{cfg.num_heads=}` cannot be divided evenly by `{args.ulysses_size=}`." + + logging.info(f"Generation job args: {args}") + logging.info(f"Generation model config: {cfg}") + + if dist.is_initialized(): + base_seed = [args.base_seed] if rank == 0 else [None] + dist.broadcast_object_list(base_seed, src=0) + args.base_seed = base_seed[0] + + assert args.task == "multitalk-14B", 'You should choose multitalk in args.task.' + + + + wav2vec_feature_extractor, audio_encoder= custom_init('cpu', args.wav2vec_dir) + os.makedirs(args.audio_save_dir,exist_ok=True) + + + logging.info("Creating MultiTalk pipeline.") + # wan_i2v = None + wan_i2v = wan.MultiTalkPipeline( + config=cfg, + checkpoint_dir=args.ckpt_dir, + device_id=device, + rank=rank, + t5_fsdp=args.t5_fsdp, + dit_fsdp=args.dit_fsdp, + use_usp=(args.ulysses_size > 1 or args.ring_size > 1), + t5_cpu=args.t5_cpu, + lora_dir=args.lora_dir, + lora_scales=args.lora_scale + ) + + if args.num_persistent_param_in_dit is not None: + wan_i2v.vram_management = True + wan_i2v.enable_vram_management( + num_persistent_param_in_dit=args.num_persistent_param_in_dit + ) + + + + def generate_video(img2vid_image, img2vid_prompt, n_prompt, img2vid_audio_1, img2vid_audio_2, + sd_steps, seed, text_guide_scale, audio_guide_scale, mode_selector, tts_text, resolution_select): + input_data = {} + input_data["prompt"] = img2vid_prompt + input_data["cond_image"] = img2vid_image + person = {} + if mode_selector == "Single Person(Local File)": + person['person1'] = img2vid_audio_1 + elif mode_selector == "Single Person(TTS)": + tts_audio = {} + tts_audio['text'] = tts_text + tts_audio['human1_voice'] = "weights/Kokoro-82M/voices/af_heart.pt" + input_data["tts_audio"] = tts_audio + elif mode_selector == "Multi Person(Local File, audio add)": + person['person1'] = img2vid_audio_1 + person['person2'] = img2vid_audio_2 + input_data["audio_type"] = 'add' + elif mode_selector == "Multi Person(Local File, audio parallel)": + person['person1'] = img2vid_audio_1 + person['person2'] = img2vid_audio_2 + input_data["audio_type"] = 'para' + else: + tts_audio = {} + tts_audio['text'] = tts_text + tts_audio['human1_voice'] = "weights/Kokoro-82M/voices/am_adam.pt" + tts_audio['human2_voice'] = "weights/Kokoro-82M/voices/af_heart.pt" + input_data["tts_audio"] = tts_audio + + input_data["cond_audio"] = person + + if 'Local File' in mode_selector: + if len(input_data['cond_audio'])==2: + new_human_speech1, new_human_speech2, sum_human_speechs = audio_prepare_multi(input_data['cond_audio']['person1'], input_data['cond_audio']['person2'], input_data['audio_type']) + audio_embedding_1 = get_embedding(new_human_speech1, wav2vec_feature_extractor, audio_encoder) + audio_embedding_2 = get_embedding(new_human_speech2, wav2vec_feature_extractor, audio_encoder) + emb1_path = os.path.join(args.audio_save_dir, '1.pt') + emb2_path = os.path.join(args.audio_save_dir, '2.pt') + sum_audio = os.path.join(args.audio_save_dir, 'sum.wav') + sf.write(sum_audio, sum_human_speechs, 16000) + torch.save(audio_embedding_1, emb1_path) + torch.save(audio_embedding_2, emb2_path) + input_data['cond_audio']['person1'] = emb1_path + input_data['cond_audio']['person2'] = emb2_path + input_data['video_audio'] = sum_audio + elif len(input_data['cond_audio'])==1: + human_speech = audio_prepare_single(input_data['cond_audio']['person1']) + audio_embedding = get_embedding(human_speech, wav2vec_feature_extractor, audio_encoder) + emb_path = os.path.join(args.audio_save_dir, '1.pt') + sum_audio = os.path.join(args.audio_save_dir, 'sum.wav') + sf.write(sum_audio, human_speech, 16000) + torch.save(audio_embedding, emb_path) + input_data['cond_audio']['person1'] = emb_path + input_data['video_audio'] = sum_audio + elif 'TTS' in mode_selector: + if 'human2_voice' not in input_data['tts_audio'].keys(): + new_human_speech1, sum_audio = process_tts_single(input_data['tts_audio']['text'], args.audio_save_dir, input_data['tts_audio']['human1_voice']) + audio_embedding_1 = get_embedding(new_human_speech1, wav2vec_feature_extractor, audio_encoder) + emb1_path = os.path.join(args.audio_save_dir, '1.pt') + torch.save(audio_embedding_1, emb1_path) + input_data['cond_audio']['person1'] = emb1_path + input_data['video_audio'] = sum_audio + else: + new_human_speech1, new_human_speech2, sum_audio = process_tts_multi(input_data['tts_audio']['text'], args.audio_save_dir, input_data['tts_audio']['human1_voice'], input_data['tts_audio']['human2_voice']) + audio_embedding_1 = get_embedding(new_human_speech1, wav2vec_feature_extractor, audio_encoder) + audio_embedding_2 = get_embedding(new_human_speech2, wav2vec_feature_extractor, audio_encoder) + emb1_path = os.path.join(args.audio_save_dir, '1.pt') + emb2_path = os.path.join(args.audio_save_dir, '2.pt') + torch.save(audio_embedding_1, emb1_path) + torch.save(audio_embedding_2, emb2_path) + input_data['cond_audio']['person1'] = emb1_path + input_data['cond_audio']['person2'] = emb2_path + input_data['video_audio'] = sum_audio + + + # if len(input_data['cond_audio'])==2: + # new_human_speech1, new_human_speech2, sum_human_speechs = audio_prepare_multi(input_data['cond_audio']['person1'], input_data['cond_audio']['person2'], input_data['audio_type']) + # audio_embedding_1 = get_embedding(new_human_speech1, wav2vec_feature_extractor, audio_encoder) + # audio_embedding_2 = get_embedding(new_human_speech2, wav2vec_feature_extractor, audio_encoder) + # emb1_path = os.path.join(args.audio_save_dir, '1.pt') + # emb2_path = os.path.join(args.audio_save_dir, '2.pt') + # sum_audio = os.path.join(args.audio_save_dir, 'sum.wav') + # sf.write(sum_audio, sum_human_speechs, 16000) + # torch.save(audio_embedding_1, emb1_path) + # torch.save(audio_embedding_2, emb2_path) + # input_data['cond_audio']['person1'] = emb1_path + # input_data['cond_audio']['person2'] = emb2_path + # input_data['video_audio'] = sum_audio + # elif len(input_data['cond_audio'])==1: + # human_speech = audio_prepare_single(input_data['cond_audio']['person1']) + # audio_embedding = get_embedding(human_speech, wav2vec_feature_extractor, audio_encoder) + # emb_path = os.path.join(args.audio_save_dir, '1.pt') + # sum_audio = os.path.join(args.audio_save_dir, 'sum.wav') + # sf.write(sum_audio, human_speech, 16000) + # torch.save(audio_embedding, emb_path) + # input_data['cond_audio']['person1'] = emb_path + # input_data['video_audio'] = sum_audio + + logging.info("Generating video ...") + video = wan_i2v.generate( + input_data, + size_buckget=resolution_select, + motion_frame=args.motion_frame, + frame_num=args.frame_num, + shift=args.sample_shift, + sampling_steps=sd_steps, + text_guide_scale=text_guide_scale, + audio_guide_scale=audio_guide_scale, + seed=seed, + n_prompt=n_prompt, + offload_model=args.offload_model, + max_frames_num=args.frame_num if args.mode == 'clip' else 1000, + extra_args=args, + ) + + + if args.save_file is None: + formatted_time = datetime.now().strftime("%Y%m%d_%H%M%S") + formatted_prompt = input_data['prompt'].replace(" ", "_").replace("/", + "_")[:50] + args.save_file = f"{args.task}_{args.size.replace('*','x') if sys.platform=='win32' else args.size}_{args.ulysses_size}_{args.ring_size}_{formatted_prompt}_{formatted_time}" + + logging.info(f"Saving generated video to {args.save_file}.mp4") + save_video_ffmpeg(video, args.save_file, [input_data['video_audio']], high_quality_save=True) + logging.info("Finished.") + + return args.save_file + '.mp4' + + def toggle_audio_mode(mode): + if 'TTS' in mode: + return [ + gr.Audio(visible=False, interactive=False), + gr.Audio(visible=False, interactive=False), + gr.Textbox(visible=True, interactive=True) + ] + elif 'Single' in mode: + return [ + gr.Audio(visible=True, interactive=True), + gr.Audio(visible=False, interactive=False), + gr.Textbox(visible=False, interactive=False) + ] + else: + return [ + gr.Audio(visible=True, interactive=True), + gr.Audio(visible=True, interactive=True), + gr.Textbox(visible=False, interactive=False) + ] + + + with gr.Blocks() as demo: + + gr.Markdown(""" +
+ MeiGen-MultiTalk +
+
+ Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation. +
+
+ + + +
+ + + """) + + with gr.Row(): + with gr.Column(scale=1): + img2vid_image = gr.Image( + type="filepath", + label="Upload Input Image", + elem_id="image_upload", + ) + img2vid_prompt = gr.Textbox( + label="Prompt", + placeholder="Describe the video you want to generate", + ) + + + with gr.Accordion("Audio Options", open=True): + mode_selector = gr.Radio( + choices=["Single Person(Local File)", "Single Person(TTS)", "Multi Person(Local File, audio add)", "Multi Person(Local File, audio parallel)", "Multi Person(TTS)"], + label="Select person and audio mode.", + value="Single Person(Local File)" + ) + resolution_select = gr.Radio( + choices=["multitalk-480", "multitalk-720"], + label="Select resolution.", + value="multitalk-480" + ) + img2vid_audio_1 = gr.Audio(label="Conditioning Audio for speaker 1", type="filepath", visible=True) + img2vid_audio_2 = gr.Audio(label="Conditioning Audio for speaker 2", type="filepath", visible=False) + tts_text = gr.Textbox( + label="Text for TTS", + placeholder="Refer to the format in the examples", + visible=False, + interactive=False + ) + mode_selector.change( + fn=toggle_audio_mode, + inputs=mode_selector, + outputs=[img2vid_audio_1, img2vid_audio_2, tts_text] + ) + + with gr.Accordion("Advanced Options", open=False): + with gr.Row(): + sd_steps = gr.Slider( + label="Diffusion steps", + minimum=1, + maximum=1000, + value=8, + step=1) + seed = gr.Slider( + label="Seed", + minimum=-1, + maximum=2147483647, + step=1, + value=42) + with gr.Row(): + text_guide_scale = gr.Slider( + label="Text Guide scale", + minimum=0, + maximum=20, + value=1.0, + step=1) + audio_guide_scale = gr.Slider( + label="Audio Guide scale", + minimum=0, + maximum=20, + value=2.0, + step=1) + # with gr.Row(): + n_prompt = gr.Textbox( + label="Negative Prompt", + placeholder="Describe the negative prompt you want to add", + value="bright tones, overexposed, static, blurred details, subtitles, style, works, paintings, images, static, overall gray, worst quality, low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured, misshapen limbs, fused fingers, still picture, messy background, three legs, many people in the background, walking backwards" + ) + + run_i2v_button = gr.Button("Generate Video") + + with gr.Column(scale=2): + result_gallery = gr.Video( + label='Generated Video', interactive=False, height=600, ) + + gr.Examples( + examples = [ + ["examples/single/single1.png", "A woman is passionately singing into a professional microphone in a recording studio. She wears large black headphones and a dark cardigan over a gray top. Her long, wavy brown hair frames her face as she looks slightly upwards, her mouth open mid-song. The studio is equipped with various audio equipment, including a mixing console and a keyboard, with soundproofing panels on the walls. The lighting is warm and focused on her, creating a professional and intimate atmosphere. A close-up shot captures her expressive performance.", "Single Person(Local File)", "examples/single/1.wav", None, None], + ["examples/single/single1.png", "A woman is passionately singing into a professional microphone in a recording studio. She wears large black headphones and a dark cardigan over a gray top. Her long, wavy brown hair frames her face as she looks slightly upwards, her mouth open mid-song. The studio is equipped with various audio equipment, including a mixing console and a keyboard, with soundproofing panels on the walls. The lighting is warm and focused on her, creating a professional and intimate atmosphere. A close-up shot captures her expressive performance.", "Single Person(TTS)", None, None, "Welcome to multi-talk, this is an audio-driven video generation model for multiple person."], + ["examples/multi/1/multi1.png", "In a casual, intimate setting, a man and a woman are engaged in a heartfelt conversation inside a car. The man, sporting a denim jacket over a blue shirt, sits attentively with a seatbelt fastened, his gaze fixed on the woman beside him. The woman, wearing a black tank top and a denim jacket draped over her shoulders, smiles warmly, her eyes reflecting genuine interest and connection. The car's interior, with its beige seats and simple design, provides a backdrop that emphasizes their interaction. The scene captures a moment of shared understanding and connection, set against the soft, diffused light of an overcast day. A medium shot from a slightly angled perspective, focusing on their expressions and body language.", "Multi Person(Local File, audio add)", "examples/multi/1/1.WAV", "examples/multi/1/2.WAV", None], + ["examples/multi/3/multi3.png", "In a cozy recording studio, a man and a woman are singing together. The man, with tousled brown hair, stands to the left, wearing a light green button-down shirt. His gaze is directed towards the woman, who is smiling warmly. She, with wavy dark hair, is dressed in a black floral dress and stands to the right, her eyes closed in enjoyment. Between them is a professional microphone, capturing their harmonious voices. The background features wooden panels and various audio equipment, creating an intimate and focused atmosphere. The lighting is soft and warm, highlighting their expressions and the intimate setting. A medium shot captures their interaction closely.", "Multi Person(Local File, audio parallel)", "examples/multi/3/1-man.WAV", "examples/multi/3/1-woman.WAV", None], + ["examples/multi/1/multi1.png", "In a casual, intimate setting, a man and a woman are engaged in a heartfelt conversation inside a car. The man, sporting a denim jacket over a blue shirt, sits attentively with a seatbelt fastened, his gaze fixed on the woman beside him. The woman, wearing a black tank top and a denim jacket draped over her shoulders, smiles warmly, her eyes reflecting genuine interest and connection. The car's interior, with its beige seats and simple design, provides a backdrop that emphasizes their interaction. The scene captures a moment of shared understanding and connection, set against the soft, diffused light of an overcast day. A medium shot from a slightly angled perspective, focusing on their expressions and body language.", "Multi Person(TTS)", None, None, "(s1) do you know multi-talk? (s2) yes, I know it, that's amazing! (s1) Me too."], + ], + inputs = [img2vid_image, img2vid_prompt, mode_selector, img2vid_audio_1, img2vid_audio_2, tts_text], + ) + + + run_i2v_button.click( + fn=generate_video, + inputs=[img2vid_image, img2vid_prompt, n_prompt, img2vid_audio_1, img2vid_audio_2,sd_steps, seed, text_guide_scale, audio_guide_scale, mode_selector, tts_text, resolution_select], + outputs=[result_gallery], + ) + demo.launch(server_name="0.0.0.0", debug=True, server_port=8418) + + + + +if __name__ == "__main__": + args = _parse_args() + run_graio_demo(args) + diff --git a/assets/efficiency.png b/assets/efficiency.png index f974a3cedc1f7777ca4c535e3d80bef82d275352..b8447959e9688e16cb50aefca8466cf55f88b7ca 100644 GIT binary patch literal 47298 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 Nq3#i#B5lgm{{vvI&%gix literal 193154 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 diff --git a/examples/multitalk_example_tts_1.json b/examples/multitalk_example_tts_1.json new file mode 100644 index 0000000..ab4ed7f --- /dev/null +++ b/examples/multitalk_example_tts_1.json @@ -0,0 +1,11 @@ +{ + "prompt": "In a cozy recording studio, a man and a woman are singing together with passion and emotion. The man, with short brown hair, wears a light gray button-up shirt, his expression filled with concentration and warmth. The woman, with long wavy brown hair, dons a sleeveless dress adorned with small polka dots, her eyes closed as she belts out a heartfelt melody. The studio is equipped with professional microphones, and the background features soundproofing panels, creating an intimate and focused atmosphere. A close-up shot captures their expressions and the intensity of their performance.", + "cond_image": "examples/multi/1/multi1.png", + "audio_type": "para", + "tts_audio": { + "text": "(s1) do you know multi-talk? (s2) yes, I know it, that's amazing! (s1) Me too.", + "human1_voice": "weights/Kokoro-82M/voices/af_heart.pt", + "human2_voice": "weights/Kokoro-82M/voices/am_adam.pt" + }, + "cond_audio":{} +} diff --git a/examples/single_example_tts_1.json b/examples/single_example_tts_1.json new file mode 100644 index 0000000..f42287c --- /dev/null +++ b/examples/single_example_tts_1.json @@ -0,0 +1,9 @@ +{ + "prompt": "A woman is passionately singing into a professional microphone in a recording studio. She wears large black headphones and a dark cardigan over a gray top. Her long, wavy brown hair frames her face as she looks slightly upwards, her mouth open mid-song. The studio is equipped with various audio equipment, including a mixing console and a keyboard, with soundproofing panels on the walls. The lighting is warm and focused on her, creating a professional and intimate atmosphere. A close-up shot captures her expressive performance.", + "cond_image": "examples/single/single1.png", + "tts_audio": { + "text": "Welcome to multi-talk, this is an audio-driven video generation model for multiple person.", + "human1_voice": "weights/Kokoro-82M/voices/af_heart.pt" + }, + "cond_audio":{} +} diff --git a/generate_multitalk.py b/generate_multitalk.py index aebcc30..b3e0e0f 100644 --- a/generate_multitalk.py +++ b/generate_multitalk.py @@ -20,7 +20,7 @@ from wan.configs import SIZE_CONFIGS, SUPPORTED_SIZES, WAN_CONFIGS from wan.utils.utils import cache_image, cache_video, str2bool from wan.utils.multitalk_utils import save_video_ffmpeg - +from kokoro import KPipeline from transformers import Wav2Vec2FeatureExtractor from src.audio_analysis.wav2vec2 import Wav2Vec2Model @@ -29,6 +29,8 @@ import numpy as np from einops import rearrange import soundfile as sf +import re + def _validate_args(args): # Basic check @@ -88,6 +90,20 @@ def _parse_args(): type=str, default=None, help="The path to the wav2vec checkpoint directory.") + parser.add_argument( + "--lora_dir", + type=str, + nargs='+', + default=None, + help="The paths to the LoRA checkpoint files." + ) + parser.add_argument( + "--lora_scale", + type=float, + nargs='+', + default=[1.2], + help="Controls how much to influence the outputs with the LoRA parameters. Accepts multiple float values." + ) parser.add_argument( "--offload_model", type=str2bool, @@ -174,6 +190,12 @@ def _parse_args(): required=False, help="Maximum parameter quantity retained in video memory, small number to reduce VRAM required", ) + parser.add_argument( + "--audio_mode", + type=str, + default="localfile", + choices=['localfile', 'tts'], + help="localfile: audio from local wav file, tts: audio from TTS") parser.add_argument( "--use_teacache", action="store_true", @@ -316,6 +338,78 @@ def audio_prepare_single(audio_path, sample_rate=16000): human_speech_array = loudness_norm(human_speech_array, sr) return human_speech_array +def process_tts_single(text, save_dir, voice1): + s1_sentences = [] + + pipeline = KPipeline(lang_code='a', repo_id='weights/Kokoro-82M') + + voice_tensor = torch.load(voice1, weights_only=True) + generator = pipeline( + text, voice=voice_tensor, # <= change voice here + speed=1, split_pattern=r'\n+' + ) + audios = [] + for i, (gs, ps, audio) in enumerate(generator): + audios.append(audio) + audios = torch.concat(audios, dim=0) + s1_sentences.append(audios) + s1_sentences = torch.concat(s1_sentences, dim=0) + save_path1 =f'{save_dir}/s1.wav' + sf.write(save_path1, s1_sentences, 24000) # save each audio file + s1, _ = librosa.load(save_path1, sr=16000) + return s1, save_path1 + + + +def process_tts_multi(text, save_dir, voice1, voice2): + pattern = r'\(s(\d+)\)\s*(.*?)(?=\s*\(s\d+\)|$)' + matches = re.findall(pattern, text, re.DOTALL) + + s1_sentences = [] + s2_sentences = [] + + pipeline = KPipeline(lang_code='a', repo_id='weights/Kokoro-82M') + for idx, (speaker, content) in enumerate(matches): + if speaker == '1': + voice_tensor = torch.load(voice1, weights_only=True) + generator = pipeline( + content, voice=voice_tensor, # <= change voice here + speed=1, split_pattern=r'\n+' + ) + audios = [] + for i, (gs, ps, audio) in enumerate(generator): + audios.append(audio) + audios = torch.concat(audios, dim=0) + s1_sentences.append(audios) + s2_sentences.append(torch.zeros_like(audios)) + elif speaker == '2': + voice_tensor = torch.load(voice2, weights_only=True) + generator = pipeline( + content, voice=voice_tensor, # <= change voice here + speed=1, split_pattern=r'\n+' + ) + audios = [] + for i, (gs, ps, audio) in enumerate(generator): + audios.append(audio) + audios = torch.concat(audios, dim=0) + s2_sentences.append(audios) + s1_sentences.append(torch.zeros_like(audios)) + + s1_sentences = torch.concat(s1_sentences, dim=0) + s2_sentences = torch.concat(s2_sentences, dim=0) + sum_sentences = s1_sentences + s2_sentences + save_path1 =f'{save_dir}/s1.wav' + save_path2 =f'{save_dir}/s2.wav' + save_path_sum = f'{save_dir}/sum.wav' + sf.write(save_path1, s1_sentences, 24000) # save each audio file + sf.write(save_path2, s2_sentences, 24000) + sf.write(save_path_sum, sum_sentences, 24000) + + s1, _ = librosa.load(save_path1, sr=16000) + s2, _ = librosa.load(save_path2, sr=16000) + # sum, _ = librosa.load(save_path_sum, sr=16000) + return s1, s2, save_path_sum + def generate(args): rank = int(os.getenv("RANK", 0)) world_size = int(os.getenv("WORLD_SIZE", 1)) @@ -423,28 +517,49 @@ def generate(args): args.audio_save_dir = os.path.join(args.audio_save_dir, input_data['cond_image'].split('/')[-1].split('.')[0]) os.makedirs(args.audio_save_dir,exist_ok=True) - if len(input_data['cond_audio'])==2: - new_human_speech1, new_human_speech2, sum_human_speechs = audio_prepare_multi(input_data['cond_audio']['person1'], input_data['cond_audio']['person2'], input_data['audio_type']) - audio_embedding_1 = get_embedding(new_human_speech1, wav2vec_feature_extractor, audio_encoder) - audio_embedding_2 = get_embedding(new_human_speech2, wav2vec_feature_extractor, audio_encoder) - emb1_path = os.path.join(args.audio_save_dir, '1.pt') - emb2_path = os.path.join(args.audio_save_dir, '2.pt') - sum_audio = os.path.join(args.audio_save_dir, 'sum.wav') - sf.write(sum_audio, sum_human_speechs, 16000) - torch.save(audio_embedding_1, emb1_path) - torch.save(audio_embedding_2, emb2_path) - input_data['cond_audio']['person1'] = emb1_path - input_data['cond_audio']['person2'] = emb2_path - input_data['video_audio'] = sum_audio - elif len(input_data['cond_audio'])==1: - human_speech = audio_prepare_single(input_data['cond_audio']['person1']) - audio_embedding = get_embedding(human_speech, wav2vec_feature_extractor, audio_encoder) - emb_path = os.path.join(args.audio_save_dir, '1.pt') - sum_audio = os.path.join(args.audio_save_dir, 'sum.wav') - sf.write(sum_audio, human_speech, 16000) - torch.save(audio_embedding, emb_path) - input_data['cond_audio']['person1'] = emb_path - input_data['video_audio'] = sum_audio + if args.audio_mode=='localfile': + if len(input_data['cond_audio'])==2: + new_human_speech1, new_human_speech2, sum_human_speechs = audio_prepare_multi(input_data['cond_audio']['person1'], input_data['cond_audio']['person2'], input_data['audio_type']) + audio_embedding_1 = get_embedding(new_human_speech1, wav2vec_feature_extractor, audio_encoder) + audio_embedding_2 = get_embedding(new_human_speech2, wav2vec_feature_extractor, audio_encoder) + emb1_path = os.path.join(args.audio_save_dir, '1.pt') + emb2_path = os.path.join(args.audio_save_dir, '2.pt') + sum_audio = os.path.join(args.audio_save_dir, 'sum.wav') + sf.write(sum_audio, sum_human_speechs, 16000) + torch.save(audio_embedding_1, emb1_path) + torch.save(audio_embedding_2, emb2_path) + input_data['cond_audio']['person1'] = emb1_path + input_data['cond_audio']['person2'] = emb2_path + input_data['video_audio'] = sum_audio + elif len(input_data['cond_audio'])==1: + human_speech = audio_prepare_single(input_data['cond_audio']['person1']) + audio_embedding = get_embedding(human_speech, wav2vec_feature_extractor, audio_encoder) + emb_path = os.path.join(args.audio_save_dir, '1.pt') + sum_audio = os.path.join(args.audio_save_dir, 'sum.wav') + sf.write(sum_audio, human_speech, 16000) + torch.save(audio_embedding, emb_path) + input_data['cond_audio']['person1'] = emb_path + input_data['video_audio'] = sum_audio + elif args.audio_mode=='tts': + if 'human2_voice' not in input_data['tts_audio'].keys(): + new_human_speech1, sum_audio = process_tts_single(input_data['tts_audio']['text'], args.audio_save_dir, input_data['tts_audio']['human1_voice']) + audio_embedding_1 = get_embedding(new_human_speech1, wav2vec_feature_extractor, audio_encoder) + emb1_path = os.path.join(args.audio_save_dir, '1.pt') + torch.save(audio_embedding_1, emb1_path) + input_data['cond_audio']['person1'] = emb1_path + input_data['video_audio'] = sum_audio + else: + new_human_speech1, new_human_speech2, sum_audio = process_tts_multi(input_data['tts_audio']['text'], args.audio_save_dir, input_data['tts_audio']['human1_voice'], input_data['tts_audio']['human2_voice']) + audio_embedding_1 = get_embedding(new_human_speech1, wav2vec_feature_extractor, audio_encoder) + audio_embedding_2 = get_embedding(new_human_speech2, wav2vec_feature_extractor, audio_encoder) + emb1_path = os.path.join(args.audio_save_dir, '1.pt') + emb2_path = os.path.join(args.audio_save_dir, '2.pt') + torch.save(audio_embedding_1, emb1_path) + torch.save(audio_embedding_2, emb2_path) + input_data['cond_audio']['person1'] = emb1_path + input_data['cond_audio']['person2'] = emb2_path + input_data['video_audio'] = sum_audio + logging.info("Creating MultiTalk pipeline.") wan_i2v = wan.MultiTalkPipeline( @@ -455,9 +570,12 @@ def generate(args): t5_fsdp=args.t5_fsdp, dit_fsdp=args.dit_fsdp, use_usp=(args.ulysses_size > 1 or args.ring_size > 1), - t5_cpu=args.t5_cpu + t5_cpu=args.t5_cpu, + lora_dir=args.lora_dir, + lora_scales=args.lora_scale ) + if args.num_persistent_param_in_dit is not None: wan_i2v.vram_management = True wan_i2v.enable_vram_management( @@ -490,7 +608,7 @@ def generate(args): args.save_file = f"{args.task}_{args.size.replace('*','x') if sys.platform=='win32' else args.size}_{args.ulysses_size}_{args.ring_size}_{formatted_prompt}_{formatted_time}" logging.info(f"Saving generated video to {args.save_file}.mp4") - save_video_ffmpeg(video, args.save_file, [input_data['video_audio']]) + save_video_ffmpeg(video, args.save_file, [input_data['video_audio']], high_quality_save=True) logging.info("Finished.") diff --git a/kokoro/__init__.py b/kokoro/__init__.py new file mode 100644 index 0000000..9156e5c --- /dev/null +++ b/kokoro/__init__.py @@ -0,0 +1,23 @@ +__version__ = '0.9.4' + +from loguru import logger +import sys + +# Remove default handler +logger.remove() + +# Add custom handler with clean format including module and line number +logger.add( + sys.stderr, + format="{time:HH:mm:ss} | {module:>16}:{line} | {level: >8} | {message}", + colorize=True, + level="INFO" # "DEBUG" to enable logger.debug("message") and up prints + # "ERROR" to enable only logger.error("message") prints + # etc +) + +# Disable before release or as needed +logger.disable("kokoro") + +from .model import KModel +from .pipeline import KPipeline diff --git a/kokoro/__main__.py b/kokoro/__main__.py new file mode 100644 index 0000000..34ee21a --- /dev/null +++ b/kokoro/__main__.py @@ -0,0 +1,148 @@ +"""Kokoro TTS CLI +Example usage: +python3 -m kokoro --text "The sky above the port was the color of television, tuned to a dead channel." -o file.wav --debug + +echo "Bom dia mundo, como vão vocês" > text.txt +python3 -m kokoro -i text.txt -l p --voice pm_alex > audio.wav + +Common issues: +pip not installed: `uv pip install pip` +(Temporary workaround while https://github.com/explosion/spaCy/issues/13747 is not fixed) + +espeak not installed: `apt-get install espeak-ng` +""" + +import argparse +import wave +from pathlib import Path +from typing import Generator, TYPE_CHECKING + +import numpy as np +from loguru import logger + +languages = [ + "a", # American English + "b", # British English + "h", # Hindi + "e", # Spanish + "f", # French + "i", # Italian + "p", # Brazilian Portuguese + "j", # Japanese + "z", # Mandarin Chinese +] + +if TYPE_CHECKING: + from kokoro import KPipeline + + +def generate_audio( + text: str, kokoro_language: str, voice: str, speed=1 +) -> Generator["KPipeline.Result", None, None]: + from kokoro import KPipeline + + if not voice.startswith(kokoro_language): + logger.warning(f"Voice {voice} is not made for language {kokoro_language}") + pipeline = KPipeline(lang_code=kokoro_language) + yield from pipeline(text, voice=voice, speed=speed, split_pattern=r"\n+") + + +def generate_and_save_audio( + output_file: Path, text: str, kokoro_language: str, voice: str, speed=1 +) -> None: + with wave.open(str(output_file.resolve()), "wb") as wav_file: + wav_file.setnchannels(1) # Mono audio + wav_file.setsampwidth(2) # 2 bytes per sample (16-bit audio) + wav_file.setframerate(24000) # Sample rate + + for result in generate_audio( + text, kokoro_language=kokoro_language, voice=voice, speed=speed + ): + logger.debug(result.phonemes) + if result.audio is None: + continue + audio_bytes = (result.audio.numpy() * 32767).astype(np.int16).tobytes() + wav_file.writeframes(audio_bytes) + + +def main() -> None: + parser = argparse.ArgumentParser() + parser.add_argument( + "-m", + "--voice", + default="af_heart", + help="Voice to use", + ) + parser.add_argument( + "-l", + "--language", + help="Language to use (defaults to the one corresponding to the voice)", + choices=languages, + ) + parser.add_argument( + "-o", + "--output-file", + "--output_file", + type=Path, + help="Path to output WAV file", + required=True, + ) + parser.add_argument( + "-i", + "--input-file", + "--input_file", + type=Path, + help="Path to input text file (default: stdin)", + ) + parser.add_argument( + "-t", + "--text", + help="Text to use instead of reading from stdin", + ) + parser.add_argument( + "-s", + "--speed", + type=float, + default=1.0, + help="Speech speed", + ) + parser.add_argument( + "--debug", + action="store_true", + help="Print DEBUG messages to console", + ) + args = parser.parse_args() + if args.debug: + logger.level("DEBUG") + logger.debug(args) + + lang = args.language or args.voice[0] + + if args.text is not None and args.input_file is not None: + raise Exception("You cannot specify both 'text' and 'input_file'") + elif args.text: + text = args.text + elif args.input_file: + file: Path = args.input_file + text = file.read_text() + else: + import sys + print("Press Ctrl+D to stop reading input and start generating", flush=True) + text = '\n'.join(sys.stdin) + + logger.debug(f"Input text: {text!r}") + + out_file: Path = args.output_file + if not out_file.suffix == ".wav": + logger.warning("The output file name should end with .wav") + generate_and_save_audio( + output_file=out_file, + text=text, + kokoro_language=lang, + voice=args.voice, + speed=args.speed, + ) + + +if __name__ == "__main__": + main() diff --git a/kokoro/custom_stft.py b/kokoro/custom_stft.py new file mode 100644 index 0000000..c9cf0d2 --- /dev/null +++ b/kokoro/custom_stft.py @@ -0,0 +1,197 @@ +from attr import attr +import numpy as np +import torch +import torch.nn as nn +import torch.nn.functional as F + +class CustomSTFT(nn.Module): + """ + STFT/iSTFT without unfold/complex ops, using conv1d and conv_transpose1d. + + - forward STFT => Real-part conv1d + Imag-part conv1d + - inverse STFT => Real-part conv_transpose1d + Imag-part conv_transpose1d + sum + - avoids F.unfold, so easier to export to ONNX + - uses replicate or constant padding for 'center=True' to approximate 'reflect' + (reflect is not supported for dynamic shapes in ONNX) + """ + + def __init__( + self, + filter_length=800, + hop_length=200, + win_length=800, + window="hann", + center=True, + pad_mode="replicate", # or 'constant' + ): + super().__init__() + self.filter_length = filter_length + self.hop_length = hop_length + self.win_length = win_length + self.n_fft = filter_length + self.center = center + self.pad_mode = pad_mode + + # Number of frequency bins for real-valued STFT with onesided=True + self.freq_bins = self.n_fft // 2 + 1 + + # Build window + assert window == 'hann', window + window_tensor = torch.hann_window(win_length, periodic=True, dtype=torch.float32) + if self.win_length < self.n_fft: + # Zero-pad up to n_fft + extra = self.n_fft - self.win_length + window_tensor = F.pad(window_tensor, (0, extra)) + elif self.win_length > self.n_fft: + window_tensor = window_tensor[: self.n_fft] + self.register_buffer("window", window_tensor) + + # Precompute forward DFT (real, imag) + # PyTorch stft uses e^{-j 2 pi k n / N} => real=cos(...), imag=-sin(...) + n = np.arange(self.n_fft) + k = np.arange(self.freq_bins) + angle = 2 * np.pi * np.outer(k, n) / self.n_fft # shape (freq_bins, n_fft) + dft_real = np.cos(angle) + dft_imag = -np.sin(angle) # note negative sign + + # Combine window and dft => shape (freq_bins, filter_length) + # We'll make 2 conv weight tensors of shape (freq_bins, 1, filter_length). + forward_window = window_tensor.numpy() # shape (n_fft,) + forward_real = dft_real * forward_window # (freq_bins, n_fft) + forward_imag = dft_imag * forward_window + + # Convert to PyTorch + forward_real_torch = torch.from_numpy(forward_real).float() + forward_imag_torch = torch.from_numpy(forward_imag).float() + + # Register as Conv1d weight => (out_channels, in_channels, kernel_size) + # out_channels = freq_bins, in_channels=1, kernel_size=n_fft + self.register_buffer( + "weight_forward_real", forward_real_torch.unsqueeze(1) + ) + self.register_buffer( + "weight_forward_imag", forward_imag_torch.unsqueeze(1) + ) + + # Precompute inverse DFT + # Real iFFT formula => scale = 1/n_fft, doubling for bins 1..freq_bins-2 if n_fft even, etc. + # For simplicity, we won't do the "DC/nyquist not doubled" approach here. + # If you want perfect real iSTFT, you can add that logic. + # This version just yields good approximate reconstruction with Hann + typical overlap. + inv_scale = 1.0 / self.n_fft + n = np.arange(self.n_fft) + angle_t = 2 * np.pi * np.outer(n, k) / self.n_fft # shape (n_fft, freq_bins) + idft_cos = np.cos(angle_t).T # => (freq_bins, n_fft) + idft_sin = np.sin(angle_t).T # => (freq_bins, n_fft) + + # Multiply by window again for typical overlap-add + # We also incorporate the scale factor 1/n_fft + inv_window = window_tensor.numpy() * inv_scale + backward_real = idft_cos * inv_window # (freq_bins, n_fft) + backward_imag = idft_sin * inv_window + + # We'll implement iSTFT as real+imag conv_transpose with stride=hop. + self.register_buffer( + "weight_backward_real", torch.from_numpy(backward_real).float().unsqueeze(1) + ) + self.register_buffer( + "weight_backward_imag", torch.from_numpy(backward_imag).float().unsqueeze(1) + ) + + + + def transform(self, waveform: torch.Tensor): + """ + Forward STFT => returns magnitude, phase + Output shape => (batch, freq_bins, frames) + """ + # waveform shape => (B, T). conv1d expects (B, 1, T). + # Optional center pad + if self.center: + pad_len = self.n_fft // 2 + waveform = F.pad(waveform, (pad_len, pad_len), mode=self.pad_mode) + + x = waveform.unsqueeze(1) # => (B, 1, T) + # Convolution to get real part => shape (B, freq_bins, frames) + real_out = F.conv1d( + x, + self.weight_forward_real, + bias=None, + stride=self.hop_length, + padding=0, + ) + # Imag part + imag_out = F.conv1d( + x, + self.weight_forward_imag, + bias=None, + stride=self.hop_length, + padding=0, + ) + + # magnitude, phase + magnitude = torch.sqrt(real_out**2 + imag_out**2 + 1e-14) + phase = torch.atan2(imag_out, real_out) + # Handle the case where imag_out is 0 and real_out is negative to correct ONNX atan2 to match PyTorch + # In this case, PyTorch returns pi, ONNX returns -pi + correction_mask = (imag_out == 0) & (real_out < 0) + phase[correction_mask] = torch.pi + return magnitude, phase + + + def inverse(self, magnitude: torch.Tensor, phase: torch.Tensor, length=None): + """ + Inverse STFT => returns waveform shape (B, T). + """ + # magnitude, phase => (B, freq_bins, frames) + # Re-create real/imag => shape (B, freq_bins, frames) + real_part = magnitude * torch.cos(phase) + imag_part = magnitude * torch.sin(phase) + + # conv_transpose wants shape (B, freq_bins, frames). We'll treat "frames" as time dimension + # so we do (B, freq_bins, frames) => (B, freq_bins, frames) + # But PyTorch conv_transpose1d expects (B, in_channels, input_length) + real_part = real_part # (B, freq_bins, frames) + imag_part = imag_part + + # real iSTFT => convolve with "backward_real", "backward_imag", and sum + # We'll do 2 conv_transpose calls, each giving (B, 1, time), + # then add them => (B, 1, time). + real_rec = F.conv_transpose1d( + real_part, + self.weight_backward_real, # shape (freq_bins, 1, filter_length) + bias=None, + stride=self.hop_length, + padding=0, + ) + imag_rec = F.conv_transpose1d( + imag_part, + self.weight_backward_imag, + bias=None, + stride=self.hop_length, + padding=0, + ) + # sum => (B, 1, time) + waveform = real_rec - imag_rec # typical real iFFT has minus for imaginary part + + # If we used "center=True" in forward, we should remove pad + if self.center: + pad_len = self.n_fft // 2 + # Because of transposed convolution, total length might have extra samples + # We remove `pad_len` from start & end if possible + waveform = waveform[..., pad_len:-pad_len] + + # If a specific length is desired, clamp + if length is not None: + waveform = waveform[..., :length] + + # shape => (B, T) + return waveform + + def forward(self, x: torch.Tensor): + """ + Full STFT -> iSTFT pass: returns time-domain reconstruction. + Same interface as your original code. + """ + mag, phase = self.transform(x) + return self.inverse(mag, phase, length=x.shape[-1]) diff --git a/kokoro/istftnet.py b/kokoro/istftnet.py new file mode 100644 index 0000000..cb22279 --- /dev/null +++ b/kokoro/istftnet.py @@ -0,0 +1,421 @@ +# ADAPTED from https://github.com/yl4579/StyleTTS2/blob/main/Modules/istftnet.py +from kokoro.custom_stft import CustomSTFT +from torch.nn.utils import weight_norm +import math +import torch +import torch.nn as nn +import torch.nn.functional as F + + +# https://github.com/yl4579/StyleTTS2/blob/main/Modules/utils.py +def init_weights(m, mean=0.0, std=0.01): + classname = m.__class__.__name__ + if classname.find("Conv") != -1: + m.weight.data.normal_(mean, std) + +def get_padding(kernel_size, dilation=1): + return int((kernel_size*dilation - dilation)/2) + + +class AdaIN1d(nn.Module): + def __init__(self, style_dim, num_features): + super().__init__() + # affine should be False, however there's a bug in the old torch.onnx.export (not newer dynamo) that causes the channel dimension to be lost if affine=False. When affine is true, there's additional learnably parameters. This shouldn't really matter setting it to True, since we're in inference mode + self.norm = nn.InstanceNorm1d(num_features, affine=True) + self.fc = nn.Linear(style_dim, num_features*2) + + def forward(self, x, s): + h = self.fc(s) + h = h.view(h.size(0), h.size(1), 1) + gamma, beta = torch.chunk(h, chunks=2, dim=1) + return (1 + gamma) * self.norm(x) + beta + + +class AdaINResBlock1(nn.Module): + def __init__(self, channels, kernel_size=3, dilation=(1, 3, 5), style_dim=64): + super(AdaINResBlock1, self).__init__() + self.convs1 = nn.ModuleList([ + weight_norm(nn.Conv1d(channels, channels, kernel_size, 1, dilation=dilation[0], + padding=get_padding(kernel_size, dilation[0]))), + weight_norm(nn.Conv1d(channels, channels, kernel_size, 1, dilation=dilation[1], + padding=get_padding(kernel_size, dilation[1]))), + weight_norm(nn.Conv1d(channels, channels, kernel_size, 1, dilation=dilation[2], + padding=get_padding(kernel_size, dilation[2]))) + ]) + self.convs1.apply(init_weights) + self.convs2 = nn.ModuleList([ + weight_norm(nn.Conv1d(channels, channels, kernel_size, 1, dilation=1, + padding=get_padding(kernel_size, 1))), + weight_norm(nn.Conv1d(channels, channels, kernel_size, 1, dilation=1, + padding=get_padding(kernel_size, 1))), + weight_norm(nn.Conv1d(channels, channels, kernel_size, 1, dilation=1, + padding=get_padding(kernel_size, 1))) + ]) + self.convs2.apply(init_weights) + self.adain1 = nn.ModuleList([ + AdaIN1d(style_dim, channels), + AdaIN1d(style_dim, channels), + AdaIN1d(style_dim, channels), + ]) + self.adain2 = nn.ModuleList([ + AdaIN1d(style_dim, channels), + AdaIN1d(style_dim, channels), + AdaIN1d(style_dim, channels), + ]) + self.alpha1 = nn.ParameterList([nn.Parameter(torch.ones(1, channels, 1)) for i in range(len(self.convs1))]) + self.alpha2 = nn.ParameterList([nn.Parameter(torch.ones(1, channels, 1)) for i in range(len(self.convs2))]) + + def forward(self, x, s): + for c1, c2, n1, n2, a1, a2 in zip(self.convs1, self.convs2, self.adain1, self.adain2, self.alpha1, self.alpha2): + xt = n1(x, s) + xt = xt + (1 / a1) * (torch.sin(a1 * xt) ** 2) # Snake1D + xt = c1(xt) + xt = n2(xt, s) + xt = xt + (1 / a2) * (torch.sin(a2 * xt) ** 2) # Snake1D + xt = c2(xt) + x = xt + x + return x + + +class TorchSTFT(nn.Module): + def __init__(self, filter_length=800, hop_length=200, win_length=800, window='hann'): + super().__init__() + self.filter_length = filter_length + self.hop_length = hop_length + self.win_length = win_length + assert window == 'hann', window + self.window = torch.hann_window(win_length, periodic=True, dtype=torch.float32) + + def transform(self, input_data): + forward_transform = torch.stft( + input_data, + self.filter_length, self.hop_length, self.win_length, window=self.window.to(input_data.device), + return_complex=True) + return torch.abs(forward_transform), torch.angle(forward_transform) + + def inverse(self, magnitude, phase): + inverse_transform = torch.istft( + magnitude * torch.exp(phase * 1j), + self.filter_length, self.hop_length, self.win_length, window=self.window.to(magnitude.device)) + return inverse_transform.unsqueeze(-2) # unsqueeze to stay consistent with conv_transpose1d implementation + + def forward(self, input_data): + self.magnitude, self.phase = self.transform(input_data) + reconstruction = self.inverse(self.magnitude, self.phase) + return reconstruction + + +class SineGen(nn.Module): + """ Definition of sine generator + SineGen(samp_rate, harmonic_num = 0, + sine_amp = 0.1, noise_std = 0.003, + voiced_threshold = 0, + flag_for_pulse=False) + samp_rate: sampling rate in Hz + harmonic_num: number of harmonic overtones (default 0) + sine_amp: amplitude of sine-wavefrom (default 0.1) + noise_std: std of Gaussian noise (default 0.003) + voiced_thoreshold: F0 threshold for U/V classification (default 0) + flag_for_pulse: this SinGen is used inside PulseGen (default False) + Note: when flag_for_pulse is True, the first time step of a voiced + segment is always sin(torch.pi) or cos(0) + """ + def __init__(self, samp_rate, upsample_scale, harmonic_num=0, + sine_amp=0.1, noise_std=0.003, + voiced_threshold=0, + flag_for_pulse=False): + super(SineGen, self).__init__() + self.sine_amp = sine_amp + self.noise_std = noise_std + self.harmonic_num = harmonic_num + self.dim = self.harmonic_num + 1 + self.sampling_rate = samp_rate + self.voiced_threshold = voiced_threshold + self.flag_for_pulse = flag_for_pulse + self.upsample_scale = upsample_scale + + def _f02uv(self, f0): + # generate uv signal + uv = (f0 > self.voiced_threshold).type(torch.float32) + return uv + + def _f02sine(self, f0_values): + """ f0_values: (batchsize, length, dim) + where dim indicates fundamental tone and overtones + """ + # convert to F0 in rad. The interger part n can be ignored + # because 2 * torch.pi * n doesn't affect phase + rad_values = (f0_values / self.sampling_rate) % 1 + # initial phase noise (no noise for fundamental component) + rand_ini = torch.rand(f0_values.shape[0], f0_values.shape[2], device=f0_values.device) + rand_ini[:, 0] = 0 + rad_values[:, 0, :] = rad_values[:, 0, :] + rand_ini + # instantanouse phase sine[t] = sin(2*pi \sum_i=1 ^{t} rad) + if not self.flag_for_pulse: + rad_values = F.interpolate(rad_values.transpose(1, 2), scale_factor=1/self.upsample_scale, mode="linear").transpose(1, 2) + phase = torch.cumsum(rad_values, dim=1) * 2 * torch.pi + phase = F.interpolate(phase.transpose(1, 2) * self.upsample_scale, scale_factor=self.upsample_scale, mode="linear").transpose(1, 2) + sines = torch.sin(phase) + else: + # If necessary, make sure that the first time step of every + # voiced segments is sin(pi) or cos(0) + # This is used for pulse-train generation + # identify the last time step in unvoiced segments + uv = self._f02uv(f0_values) + uv_1 = torch.roll(uv, shifts=-1, dims=1) + uv_1[:, -1, :] = 1 + u_loc = (uv < 1) * (uv_1 > 0) + # get the instantanouse phase + tmp_cumsum = torch.cumsum(rad_values, dim=1) + # different batch needs to be processed differently + for idx in range(f0_values.shape[0]): + temp_sum = tmp_cumsum[idx, u_loc[idx, :, 0], :] + temp_sum[1:, :] = temp_sum[1:, :] - temp_sum[0:-1, :] + # stores the accumulation of i.phase within + # each voiced segments + tmp_cumsum[idx, :, :] = 0 + tmp_cumsum[idx, u_loc[idx, :, 0], :] = temp_sum + # rad_values - tmp_cumsum: remove the accumulation of i.phase + # within the previous voiced segment. + i_phase = torch.cumsum(rad_values - tmp_cumsum, dim=1) + # get the sines + sines = torch.cos(i_phase * 2 * torch.pi) + return sines + + def forward(self, f0): + """ sine_tensor, uv = forward(f0) + input F0: tensor(batchsize=1, length, dim=1) + f0 for unvoiced steps should be 0 + output sine_tensor: tensor(batchsize=1, length, dim) + output uv: tensor(batchsize=1, length, 1) + """ + f0_buf = torch.zeros(f0.shape[0], f0.shape[1], self.dim, device=f0.device) + # fundamental component + fn = torch.multiply(f0, torch.FloatTensor([[range(1, self.harmonic_num + 2)]]).to(f0.device)) + # generate sine waveforms + sine_waves = self._f02sine(fn) * self.sine_amp + # generate uv signal + # uv = torch.ones(f0.shape) + # uv = uv * (f0 > self.voiced_threshold) + uv = self._f02uv(f0) + # noise: for unvoiced should be similar to sine_amp + # std = self.sine_amp/3 -> max value ~ self.sine_amp + # for voiced regions is self.noise_std + noise_amp = uv * self.noise_std + (1 - uv) * self.sine_amp / 3 + noise = noise_amp * torch.randn_like(sine_waves) + # first: set the unvoiced part to 0 by uv + # then: additive noise + sine_waves = sine_waves * uv + noise + return sine_waves, uv, noise + + +class SourceModuleHnNSF(nn.Module): + """ SourceModule for hn-nsf + SourceModule(sampling_rate, harmonic_num=0, sine_amp=0.1, + add_noise_std=0.003, voiced_threshod=0) + sampling_rate: sampling_rate in Hz + harmonic_num: number of harmonic above F0 (default: 0) + sine_amp: amplitude of sine source signal (default: 0.1) + add_noise_std: std of additive Gaussian noise (default: 0.003) + note that amplitude of noise in unvoiced is decided + by sine_amp + voiced_threshold: threhold to set U/V given F0 (default: 0) + Sine_source, noise_source = SourceModuleHnNSF(F0_sampled) + F0_sampled (batchsize, length, 1) + Sine_source (batchsize, length, 1) + noise_source (batchsize, length 1) + uv (batchsize, length, 1) + """ + def __init__(self, sampling_rate, upsample_scale, harmonic_num=0, sine_amp=0.1, + add_noise_std=0.003, voiced_threshod=0): + super(SourceModuleHnNSF, self).__init__() + self.sine_amp = sine_amp + self.noise_std = add_noise_std + # to produce sine waveforms + self.l_sin_gen = SineGen(sampling_rate, upsample_scale, harmonic_num, + sine_amp, add_noise_std, voiced_threshod) + # to merge source harmonics into a single excitation + self.l_linear = nn.Linear(harmonic_num + 1, 1) + self.l_tanh = nn.Tanh() + + def forward(self, x): + """ + Sine_source, noise_source = SourceModuleHnNSF(F0_sampled) + F0_sampled (batchsize, length, 1) + Sine_source (batchsize, length, 1) + noise_source (batchsize, length 1) + """ + # source for harmonic branch + with torch.no_grad(): + sine_wavs, uv, _ = self.l_sin_gen(x) + sine_merge = self.l_tanh(self.l_linear(sine_wavs)) + # source for noise branch, in the same shape as uv + noise = torch.randn_like(uv) * self.sine_amp / 3 + return sine_merge, noise, uv + + +class Generator(nn.Module): + def __init__(self, style_dim, resblock_kernel_sizes, upsample_rates, upsample_initial_channel, resblock_dilation_sizes, upsample_kernel_sizes, gen_istft_n_fft, gen_istft_hop_size, disable_complex=False): + super(Generator, self).__init__() + self.num_kernels = len(resblock_kernel_sizes) + self.num_upsamples = len(upsample_rates) + self.m_source = SourceModuleHnNSF( + sampling_rate=24000, + upsample_scale=math.prod(upsample_rates) * gen_istft_hop_size, + harmonic_num=8, voiced_threshod=10) + self.f0_upsamp = nn.Upsample(scale_factor=math.prod(upsample_rates) * gen_istft_hop_size) + self.noise_convs = nn.ModuleList() + self.noise_res = nn.ModuleList() + self.ups = nn.ModuleList() + for i, (u, k) in enumerate(zip(upsample_rates, upsample_kernel_sizes)): + self.ups.append(weight_norm( + nn.ConvTranspose1d(upsample_initial_channel//(2**i), upsample_initial_channel//(2**(i+1)), + k, u, padding=(k-u)//2))) + self.resblocks = nn.ModuleList() + for i in range(len(self.ups)): + ch = upsample_initial_channel//(2**(i+1)) + for j, (k, d) in enumerate(zip(resblock_kernel_sizes,resblock_dilation_sizes)): + self.resblocks.append(AdaINResBlock1(ch, k, d, style_dim)) + c_cur = upsample_initial_channel // (2 ** (i + 1)) + if i + 1 < len(upsample_rates): + stride_f0 = math.prod(upsample_rates[i + 1:]) + self.noise_convs.append(nn.Conv1d( + gen_istft_n_fft + 2, c_cur, kernel_size=stride_f0 * 2, stride=stride_f0, padding=(stride_f0+1) // 2)) + self.noise_res.append(AdaINResBlock1(c_cur, 7, [1,3,5], style_dim)) + else: + self.noise_convs.append(nn.Conv1d(gen_istft_n_fft + 2, c_cur, kernel_size=1)) + self.noise_res.append(AdaINResBlock1(c_cur, 11, [1,3,5], style_dim)) + self.post_n_fft = gen_istft_n_fft + self.conv_post = weight_norm(nn.Conv1d(ch, self.post_n_fft + 2, 7, 1, padding=3)) + self.ups.apply(init_weights) + self.conv_post.apply(init_weights) + self.reflection_pad = nn.ReflectionPad1d((1, 0)) + self.stft = ( + CustomSTFT(filter_length=gen_istft_n_fft, hop_length=gen_istft_hop_size, win_length=gen_istft_n_fft) + if disable_complex + else TorchSTFT(filter_length=gen_istft_n_fft, hop_length=gen_istft_hop_size, win_length=gen_istft_n_fft) + ) + + def forward(self, x, s, f0): + with torch.no_grad(): + f0 = self.f0_upsamp(f0[:, None]).transpose(1, 2) # bs,n,t + har_source, noi_source, uv = self.m_source(f0) + har_source = har_source.transpose(1, 2).squeeze(1) + har_spec, har_phase = self.stft.transform(har_source) + har = torch.cat([har_spec, har_phase], dim=1) + for i in range(self.num_upsamples): + x = F.leaky_relu(x, negative_slope=0.1) + x_source = self.noise_convs[i](har) + x_source = self.noise_res[i](x_source, s) + x = self.ups[i](x) + if i == self.num_upsamples - 1: + x = self.reflection_pad(x) + x = x + x_source + xs = None + for j in range(self.num_kernels): + if xs is None: + xs = self.resblocks[i*self.num_kernels+j](x, s) + else: + xs += self.resblocks[i*self.num_kernels+j](x, s) + x = xs / self.num_kernels + x = F.leaky_relu(x) + x = self.conv_post(x) + spec = torch.exp(x[:,:self.post_n_fft // 2 + 1, :]) + phase = torch.sin(x[:, self.post_n_fft // 2 + 1:, :]) + return self.stft.inverse(spec, phase) + + +class UpSample1d(nn.Module): + def __init__(self, layer_type): + super().__init__() + self.layer_type = layer_type + + def forward(self, x): + if self.layer_type == 'none': + return x + else: + return F.interpolate(x, scale_factor=2, mode='nearest') + + +class AdainResBlk1d(nn.Module): + def __init__(self, dim_in, dim_out, style_dim=64, actv=nn.LeakyReLU(0.2), upsample='none', dropout_p=0.0): + super().__init__() + self.actv = actv + self.upsample_type = upsample + self.upsample = UpSample1d(upsample) + self.learned_sc = dim_in != dim_out + self._build_weights(dim_in, dim_out, style_dim) + self.dropout = nn.Dropout(dropout_p) + if upsample == 'none': + self.pool = nn.Identity() + else: + self.pool = weight_norm(nn.ConvTranspose1d(dim_in, dim_in, kernel_size=3, stride=2, groups=dim_in, padding=1, output_padding=1)) + + def _build_weights(self, dim_in, dim_out, style_dim): + self.conv1 = weight_norm(nn.Conv1d(dim_in, dim_out, 3, 1, 1)) + self.conv2 = weight_norm(nn.Conv1d(dim_out, dim_out, 3, 1, 1)) + self.norm1 = AdaIN1d(style_dim, dim_in) + self.norm2 = AdaIN1d(style_dim, dim_out) + if self.learned_sc: + self.conv1x1 = weight_norm(nn.Conv1d(dim_in, dim_out, 1, 1, 0, bias=False)) + + def _shortcut(self, x): + x = self.upsample(x) + if self.learned_sc: + x = self.conv1x1(x) + return x + + def _residual(self, x, s): + x = self.norm1(x, s) + x = self.actv(x) + x = self.pool(x) + x = self.conv1(self.dropout(x)) + x = self.norm2(x, s) + x = self.actv(x) + x = self.conv2(self.dropout(x)) + return x + + def forward(self, x, s): + out = self._residual(x, s) + out = (out + self._shortcut(x)) * torch.rsqrt(torch.tensor(2)) + return out + + +class Decoder(nn.Module): + def __init__(self, dim_in, style_dim, dim_out, + resblock_kernel_sizes, + upsample_rates, + upsample_initial_channel, + resblock_dilation_sizes, + upsample_kernel_sizes, + gen_istft_n_fft, gen_istft_hop_size, + disable_complex=False): + super().__init__() + self.encode = AdainResBlk1d(dim_in + 2, 1024, style_dim) + self.decode = nn.ModuleList() + self.decode.append(AdainResBlk1d(1024 + 2 + 64, 1024, style_dim)) + self.decode.append(AdainResBlk1d(1024 + 2 + 64, 1024, style_dim)) + self.decode.append(AdainResBlk1d(1024 + 2 + 64, 1024, style_dim)) + self.decode.append(AdainResBlk1d(1024 + 2 + 64, 512, style_dim, upsample=True)) + self.F0_conv = weight_norm(nn.Conv1d(1, 1, kernel_size=3, stride=2, groups=1, padding=1)) + self.N_conv = weight_norm(nn.Conv1d(1, 1, kernel_size=3, stride=2, groups=1, padding=1)) + self.asr_res = nn.Sequential(weight_norm(nn.Conv1d(512, 64, kernel_size=1))) + self.generator = Generator(style_dim, resblock_kernel_sizes, upsample_rates, + upsample_initial_channel, resblock_dilation_sizes, + upsample_kernel_sizes, gen_istft_n_fft, gen_istft_hop_size, disable_complex=disable_complex) + + def forward(self, asr, F0_curve, N, s): + F0 = self.F0_conv(F0_curve.unsqueeze(1)) + N = self.N_conv(N.unsqueeze(1)) + x = torch.cat([asr, F0, N], axis=1) + x = self.encode(x, s) + asr_res = self.asr_res(asr) + res = True + for block in self.decode: + if res: + x = torch.cat([x, asr_res, F0, N], axis=1) + x = block(x, s) + if block.upsample_type != "none": + res = False + x = self.generator(x, s, F0_curve) + return x diff --git a/kokoro/model.py b/kokoro/model.py new file mode 100644 index 0000000..9d6554c --- /dev/null +++ b/kokoro/model.py @@ -0,0 +1,155 @@ +from .istftnet import Decoder +from .modules import CustomAlbert, ProsodyPredictor, TextEncoder +from dataclasses import dataclass +from huggingface_hub import hf_hub_download +from loguru import logger +from transformers import AlbertConfig +from typing import Dict, Optional, Union +import json +import torch +import os + +class KModel(torch.nn.Module): + ''' + KModel is a torch.nn.Module with 2 main responsibilities: + 1. Init weights, downloading config.json + model.pth from HF if needed + 2. forward(phonemes: str, ref_s: FloatTensor) -> (audio: FloatTensor) + + You likely only need one KModel instance, and it can be reused across + multiple KPipelines to avoid redundant memory allocation. + + Unlike KPipeline, KModel is language-blind. + + KModel stores self.vocab and thus knows how to map phonemes -> input_ids, + so there is no need to repeatedly download config.json outside of KModel. + ''' + + MODEL_NAMES = { + 'hexgrad/Kokoro-82M': 'kokoro-v1_0.pth', + 'hexgrad/Kokoro-82M-v1.1-zh': 'kokoro-v1_1-zh.pth', + } + + def __init__( + self, + repo_id: Optional[str] = None, + config: Union[Dict, str, None] = None, + model: Optional[str] = None, + disable_complex: bool = False + ): + super().__init__() + if repo_id is None: + repo_id = 'hexgrad/Kokoro-82M' + print(f"WARNING: Defaulting repo_id to {repo_id}. Pass repo_id='{repo_id}' to suppress this warning.") + self.repo_id = repo_id + if not isinstance(config, dict): + if not config: + logger.debug("No config provided, downloading from HF") + config = hf_hub_download(repo_id=repo_id, filename='config.json') + with open(config, 'r', encoding='utf-8') as r: + config = json.load(r) + logger.debug(f"Loaded config: {config}") + self.vocab = config['vocab'] + self.bert = CustomAlbert(AlbertConfig(vocab_size=config['n_token'], **config['plbert'])) + self.bert_encoder = torch.nn.Linear(self.bert.config.hidden_size, config['hidden_dim']) + self.context_length = self.bert.config.max_position_embeddings + self.predictor = ProsodyPredictor( + style_dim=config['style_dim'], d_hid=config['hidden_dim'], + nlayers=config['n_layer'], max_dur=config['max_dur'], dropout=config['dropout'] + ) + self.text_encoder = TextEncoder( + channels=config['hidden_dim'], kernel_size=config['text_encoder_kernel_size'], + depth=config['n_layer'], n_symbols=config['n_token'] + ) + self.decoder = Decoder( + dim_in=config['hidden_dim'], style_dim=config['style_dim'], + dim_out=config['n_mels'], disable_complex=disable_complex, **config['istftnet'] + ) + if not model: + try: + model = hf_hub_download(repo_id=repo_id, filename=KModel.MODEL_NAMES[repo_id]) + except: + model = os.path.join(repo_id, 'kokoro-v1_0.pth') + for key, state_dict in torch.load(model, map_location='cpu', weights_only=True).items(): + assert hasattr(self, key), key + try: + getattr(self, key).load_state_dict(state_dict) + except: + logger.debug(f"Did not load {key} from state_dict") + state_dict = {k[7:]: v for k, v in state_dict.items()} + getattr(self, key).load_state_dict(state_dict, strict=False) + + @property + def device(self): + return self.bert.device + + @dataclass + class Output: + audio: torch.FloatTensor + pred_dur: Optional[torch.LongTensor] = None + + @torch.no_grad() + def forward_with_tokens( + self, + input_ids: torch.LongTensor, + ref_s: torch.FloatTensor, + speed: float = 1 + ) -> tuple[torch.FloatTensor, torch.LongTensor]: + input_lengths = torch.full( + (input_ids.shape[0],), + input_ids.shape[-1], + device=input_ids.device, + dtype=torch.long + ) + + text_mask = torch.arange(input_lengths.max()).unsqueeze(0).expand(input_lengths.shape[0], -1).type_as(input_lengths) + text_mask = torch.gt(text_mask+1, input_lengths.unsqueeze(1)).to(self.device) + bert_dur = self.bert(input_ids, attention_mask=(~text_mask).int()) + d_en = self.bert_encoder(bert_dur).transpose(-1, -2) + s = ref_s[:, 128:] + d = self.predictor.text_encoder(d_en, s, input_lengths, text_mask) + x, _ = self.predictor.lstm(d) + duration = self.predictor.duration_proj(x) + duration = torch.sigmoid(duration).sum(axis=-1) / speed + pred_dur = torch.round(duration).clamp(min=1).long().squeeze() + indices = torch.repeat_interleave(torch.arange(input_ids.shape[1], device=self.device), pred_dur) + pred_aln_trg = torch.zeros((input_ids.shape[1], indices.shape[0]), device=self.device) + pred_aln_trg[indices, torch.arange(indices.shape[0])] = 1 + pred_aln_trg = pred_aln_trg.unsqueeze(0).to(self.device) + en = d.transpose(-1, -2) @ pred_aln_trg + F0_pred, N_pred = self.predictor.F0Ntrain(en, s) + t_en = self.text_encoder(input_ids, input_lengths, text_mask) + asr = t_en @ pred_aln_trg + audio = self.decoder(asr, F0_pred, N_pred, ref_s[:, :128]).squeeze() + return audio, pred_dur + + def forward( + self, + phonemes: str, + ref_s: torch.FloatTensor, + speed: float = 1, + return_output: bool = False + ) -> Union['KModel.Output', torch.FloatTensor]: + input_ids = list(filter(lambda i: i is not None, map(lambda p: self.vocab.get(p), phonemes))) + logger.debug(f"phonemes: {phonemes} -> input_ids: {input_ids}") + assert len(input_ids)+2 <= self.context_length, (len(input_ids)+2, self.context_length) + input_ids = torch.LongTensor([[0, *input_ids, 0]]).to(self.device) + ref_s = ref_s.to(self.device) + audio, pred_dur = self.forward_with_tokens(input_ids, ref_s, speed) + audio = audio.squeeze().cpu() + pred_dur = pred_dur.cpu() if pred_dur is not None else None + logger.debug(f"pred_dur: {pred_dur}") + return self.Output(audio=audio, pred_dur=pred_dur) if return_output else audio + +class KModelForONNX(torch.nn.Module): + def __init__(self, kmodel: KModel): + super().__init__() + self.kmodel = kmodel + + def forward( + self, + input_ids: torch.LongTensor, + ref_s: torch.FloatTensor, + speed: float = 1 + ) -> tuple[torch.FloatTensor, torch.LongTensor]: + waveform, duration = self.kmodel.forward_with_tokens(input_ids, ref_s, speed) + return waveform, duration diff --git a/kokoro/modules.py b/kokoro/modules.py new file mode 100644 index 0000000..05d1575 --- /dev/null +++ b/kokoro/modules.py @@ -0,0 +1,183 @@ +# https://github.com/yl4579/StyleTTS2/blob/main/models.py +from .istftnet import AdainResBlk1d +from torch.nn.utils import weight_norm +from transformers import AlbertModel +import numpy as np +import torch +import torch.nn as nn +import torch.nn.functional as F + + +class LinearNorm(nn.Module): + def __init__(self, in_dim, out_dim, bias=True, w_init_gain='linear'): + super(LinearNorm, self).__init__() + self.linear_layer = nn.Linear(in_dim, out_dim, bias=bias) + nn.init.xavier_uniform_(self.linear_layer.weight, gain=nn.init.calculate_gain(w_init_gain)) + + def forward(self, x): + return self.linear_layer(x) + + +class LayerNorm(nn.Module): + def __init__(self, channels, eps=1e-5): + super().__init__() + self.channels = channels + self.eps = eps + self.gamma = nn.Parameter(torch.ones(channels)) + self.beta = nn.Parameter(torch.zeros(channels)) + + def forward(self, x): + x = x.transpose(1, -1) + x = F.layer_norm(x, (self.channels,), self.gamma, self.beta, self.eps) + return x.transpose(1, -1) + + +class TextEncoder(nn.Module): + def __init__(self, channels, kernel_size, depth, n_symbols, actv=nn.LeakyReLU(0.2)): + super().__init__() + self.embedding = nn.Embedding(n_symbols, channels) + padding = (kernel_size - 1) // 2 + self.cnn = nn.ModuleList() + for _ in range(depth): + self.cnn.append(nn.Sequential( + weight_norm(nn.Conv1d(channels, channels, kernel_size=kernel_size, padding=padding)), + LayerNorm(channels), + actv, + nn.Dropout(0.2), + )) + self.lstm = nn.LSTM(channels, channels//2, 1, batch_first=True, bidirectional=True) + + def forward(self, x, input_lengths, m): + x = self.embedding(x) # [B, T, emb] + x = x.transpose(1, 2) # [B, emb, T] + m = m.unsqueeze(1) + x.masked_fill_(m, 0.0) + for c in self.cnn: + x = c(x) + x.masked_fill_(m, 0.0) + x = x.transpose(1, 2) # [B, T, chn] + lengths = input_lengths if input_lengths.device == torch.device('cpu') else input_lengths.to('cpu') + x = nn.utils.rnn.pack_padded_sequence(x, lengths, batch_first=True, enforce_sorted=False) + self.lstm.flatten_parameters() + x, _ = self.lstm(x) + x, _ = nn.utils.rnn.pad_packed_sequence(x, batch_first=True) + x = x.transpose(-1, -2) + x_pad = torch.zeros([x.shape[0], x.shape[1], m.shape[-1]], device=x.device) + x_pad[:, :, :x.shape[-1]] = x + x = x_pad + x.masked_fill_(m, 0.0) + return x + + +class AdaLayerNorm(nn.Module): + def __init__(self, style_dim, channels, eps=1e-5): + super().__init__() + self.channels = channels + self.eps = eps + self.fc = nn.Linear(style_dim, channels*2) + + def forward(self, x, s): + x = x.transpose(-1, -2) + x = x.transpose(1, -1) + h = self.fc(s) + h = h.view(h.size(0), h.size(1), 1) + gamma, beta = torch.chunk(h, chunks=2, dim=1) + gamma, beta = gamma.transpose(1, -1), beta.transpose(1, -1) + x = F.layer_norm(x, (self.channels,), eps=self.eps) + x = (1 + gamma) * x + beta + return x.transpose(1, -1).transpose(-1, -2) + + +class ProsodyPredictor(nn.Module): + def __init__(self, style_dim, d_hid, nlayers, max_dur=50, dropout=0.1): + super().__init__() + self.text_encoder = DurationEncoder(sty_dim=style_dim, d_model=d_hid,nlayers=nlayers, dropout=dropout) + self.lstm = nn.LSTM(d_hid + style_dim, d_hid // 2, 1, batch_first=True, bidirectional=True) + self.duration_proj = LinearNorm(d_hid, max_dur) + self.shared = nn.LSTM(d_hid + style_dim, d_hid // 2, 1, batch_first=True, bidirectional=True) + self.F0 = nn.ModuleList() + self.F0.append(AdainResBlk1d(d_hid, d_hid, style_dim, dropout_p=dropout)) + self.F0.append(AdainResBlk1d(d_hid, d_hid // 2, style_dim, upsample=True, dropout_p=dropout)) + self.F0.append(AdainResBlk1d(d_hid // 2, d_hid // 2, style_dim, dropout_p=dropout)) + self.N = nn.ModuleList() + self.N.append(AdainResBlk1d(d_hid, d_hid, style_dim, dropout_p=dropout)) + self.N.append(AdainResBlk1d(d_hid, d_hid // 2, style_dim, upsample=True, dropout_p=dropout)) + self.N.append(AdainResBlk1d(d_hid // 2, d_hid // 2, style_dim, dropout_p=dropout)) + self.F0_proj = nn.Conv1d(d_hid // 2, 1, 1, 1, 0) + self.N_proj = nn.Conv1d(d_hid // 2, 1, 1, 1, 0) + + def forward(self, texts, style, text_lengths, alignment, m): + d = self.text_encoder(texts, style, text_lengths, m) + m = m.unsqueeze(1) + lengths = text_lengths if text_lengths.device == torch.device('cpu') else text_lengths.to('cpu') + x = nn.utils.rnn.pack_padded_sequence(d, lengths, batch_first=True, enforce_sorted=False) + self.lstm.flatten_parameters() + x, _ = self.lstm(x) + x, _ = nn.utils.rnn.pad_packed_sequence(x, batch_first=True) + x_pad = torch.zeros([x.shape[0], m.shape[-1], x.shape[-1]], device=x.device) + x_pad[:, :x.shape[1], :] = x + x = x_pad + duration = self.duration_proj(nn.functional.dropout(x, 0.5, training=False)) + en = (d.transpose(-1, -2) @ alignment) + return duration.squeeze(-1), en + + def F0Ntrain(self, x, s): + x, _ = self.shared(x.transpose(-1, -2)) + F0 = x.transpose(-1, -2) + for block in self.F0: + F0 = block(F0, s) + F0 = self.F0_proj(F0) + N = x.transpose(-1, -2) + for block in self.N: + N = block(N, s) + N = self.N_proj(N) + return F0.squeeze(1), N.squeeze(1) + + +class DurationEncoder(nn.Module): + def __init__(self, sty_dim, d_model, nlayers, dropout=0.1): + super().__init__() + self.lstms = nn.ModuleList() + for _ in range(nlayers): + self.lstms.append(nn.LSTM(d_model + sty_dim, d_model // 2, num_layers=1, batch_first=True, bidirectional=True, dropout=dropout)) + self.lstms.append(AdaLayerNorm(sty_dim, d_model)) + self.dropout = dropout + self.d_model = d_model + self.sty_dim = sty_dim + + def forward(self, x, style, text_lengths, m): + masks = m + x = x.permute(2, 0, 1) + s = style.expand(x.shape[0], x.shape[1], -1) + x = torch.cat([x, s], axis=-1) + x.masked_fill_(masks.unsqueeze(-1).transpose(0, 1), 0.0) + x = x.transpose(0, 1) + x = x.transpose(-1, -2) + for block in self.lstms: + if isinstance(block, AdaLayerNorm): + x = block(x.transpose(-1, -2), style).transpose(-1, -2) + x = torch.cat([x, s.permute(1, 2, 0)], axis=1) + x.masked_fill_(masks.unsqueeze(-1).transpose(-1, -2), 0.0) + else: + lengths = text_lengths if text_lengths.device == torch.device('cpu') else text_lengths.to('cpu') + x = x.transpose(-1, -2) + x = nn.utils.rnn.pack_padded_sequence( + x, lengths, batch_first=True, enforce_sorted=False) + block.flatten_parameters() + x, _ = block(x) + x, _ = nn.utils.rnn.pad_packed_sequence( + x, batch_first=True) + x = F.dropout(x, p=self.dropout, training=False) + x = x.transpose(-1, -2) + x_pad = torch.zeros([x.shape[0], x.shape[1], m.shape[-1]], device=x.device) + x_pad[:, :, :x.shape[-1]] = x + x = x_pad + + return x.transpose(-1, -2) + + +# https://github.com/yl4579/StyleTTS2/blob/main/Utils/PLBERT/util.py +class CustomAlbert(AlbertModel): + def forward(self, *args, **kwargs): + outputs = super().forward(*args, **kwargs) + return outputs.last_hidden_state diff --git a/kokoro/pipeline.py b/kokoro/pipeline.py new file mode 100644 index 0000000..098df8e --- /dev/null +++ b/kokoro/pipeline.py @@ -0,0 +1,445 @@ +from .model import KModel +from dataclasses import dataclass +from huggingface_hub import hf_hub_download +from loguru import logger +from misaki import en, espeak +from typing import Callable, Generator, List, Optional, Tuple, Union +import re +import torch +import os + +ALIASES = { + 'en-us': 'a', + 'en-gb': 'b', + 'es': 'e', + 'fr-fr': 'f', + 'hi': 'h', + 'it': 'i', + 'pt-br': 'p', + 'ja': 'j', + 'zh': 'z', +} + +LANG_CODES = dict( + # pip install misaki[en] + a='American English', + b='British English', + + # espeak-ng + e='es', + f='fr-fr', + h='hi', + i='it', + p='pt-br', + + # pip install misaki[ja] + j='Japanese', + + # pip install misaki[zh] + z='Mandarin Chinese', +) + +class KPipeline: + ''' + KPipeline is a language-aware support class with 2 main responsibilities: + 1. Perform language-specific G2P, mapping (and chunking) text -> phonemes + 2. Manage and store voices, lazily downloaded from HF if needed + + You are expected to have one KPipeline per language. If you have multiple + KPipelines, you should reuse one KModel instance across all of them. + + KPipeline is designed to work with a KModel, but this is not required. + There are 2 ways to pass an existing model into a pipeline: + 1. On init: us_pipeline = KPipeline(lang_code='a', model=model) + 2. On call: us_pipeline(text, voice, model=model) + + By default, KPipeline will automatically initialize its own KModel. To + suppress this, construct a "quiet" KPipeline with model=False. + + A "quiet" KPipeline yields (graphemes, phonemes, None) without generating + any audio. You can use this to phonemize and chunk your text in advance. + + A "loud" KPipeline _with_ a model yields (graphemes, phonemes, audio). + ''' + def __init__( + self, + lang_code: str, + repo_id: Optional[str] = None, + model: Union[KModel, bool] = True, + trf: bool = False, + en_callable: Optional[Callable[[str], str]] = None, + device: Optional[str] = None + ): + """Initialize a KPipeline. + + Args: + lang_code: Language code for G2P processing + model: KModel instance, True to create new model, False for no model + trf: Whether to use transformer-based G2P + device: Override default device selection ('cuda' or 'cpu', or None for auto) + If None, will auto-select cuda if available + If 'cuda' and not available, will explicitly raise an error + """ + if repo_id is None: + repo_id = 'hexgrad/Kokoro-82M' + print(f"WARNING: Defaulting repo_id to {repo_id}. Pass repo_id='{repo_id}' to suppress this warning.") + config=None + else: + config = os.path.join(repo_id, 'config.json') + self.repo_id = repo_id + lang_code = lang_code.lower() + lang_code = ALIASES.get(lang_code, lang_code) + assert lang_code in LANG_CODES, (lang_code, LANG_CODES) + self.lang_code = lang_code + self.model = None + if isinstance(model, KModel): + self.model = model + elif model: + if device == 'cuda' and not torch.cuda.is_available(): + raise RuntimeError("CUDA requested but not available") + if device == 'mps' and not torch.backends.mps.is_available(): + raise RuntimeError("MPS requested but not available") + if device == 'mps' and os.environ.get('PYTORCH_ENABLE_MPS_FALLBACK') != '1': + raise RuntimeError("MPS requested but fallback not enabled") + if device is None: + if torch.cuda.is_available(): + device = 'cuda' + elif os.environ.get('PYTORCH_ENABLE_MPS_FALLBACK') == '1' and torch.backends.mps.is_available(): + device = 'mps' + else: + device = 'cpu' + try: + self.model = KModel(repo_id=repo_id, config=config).to(device).eval() + except RuntimeError as e: + if device == 'cuda': + raise RuntimeError(f"""Failed to initialize model on CUDA: {e}. + Try setting device='cpu' or check CUDA installation.""") + raise + self.voices = {} + if lang_code in 'ab': + try: + fallback = espeak.EspeakFallback(british=lang_code=='b') + except Exception as e: + logger.warning("EspeakFallback not Enabled: OOD words will be skipped") + logger.warning({str(e)}) + fallback = None + self.g2p = en.G2P(trf=trf, british=lang_code=='b', fallback=fallback, unk='') + elif lang_code == 'j': + try: + from misaki import ja + self.g2p = ja.JAG2P() + except ImportError: + logger.error("You need to `pip install misaki[ja]` to use lang_code='j'") + raise + elif lang_code == 'z': + try: + from misaki import zh + self.g2p = zh.ZHG2P( + version=None if repo_id.endswith('/Kokoro-82M') else '1.1', + en_callable=en_callable + ) + except ImportError: + logger.error("You need to `pip install misaki[zh]` to use lang_code='z'") + raise + else: + language = LANG_CODES[lang_code] + logger.warning(f"Using EspeakG2P(language='{language}'). Chunking logic not yet implemented, so long texts may be truncated unless you split them with '\\n'.") + self.g2p = espeak.EspeakG2P(language=language) + + def load_single_voice(self, voice: str): + if voice in self.voices: + return self.voices[voice] + if voice.endswith('.pt'): + f = voice + else: + f = hf_hub_download(repo_id=self.repo_id, filename=f'voices/{voice}.pt') + if not voice.startswith(self.lang_code): + v = LANG_CODES.get(voice, voice) + p = LANG_CODES.get(self.lang_code, self.lang_code) + logger.warning(f'Language mismatch, loading {v} voice into {p} pipeline.') + pack = torch.load(f, weights_only=True) + self.voices[voice] = pack + return pack + + """ + load_voice is a helper function that lazily downloads and loads a voice: + Single voice can be requested (e.g. 'af_bella') or multiple voices (e.g. 'af_bella,af_jessica'). + If multiple voices are requested, they are averaged. + Delimiter is optional and defaults to ','. + """ + def load_voice(self, voice: Union[str, torch.FloatTensor], delimiter: str = ",") -> torch.FloatTensor: + if isinstance(voice, torch.FloatTensor): + return voice + if voice in self.voices: + return self.voices[voice] + logger.debug(f"Loading voice: {voice}") + packs = [self.load_single_voice(v) for v in voice.split(delimiter)] + if len(packs) == 1: + return packs[0] + self.voices[voice] = torch.mean(torch.stack(packs), dim=0) + return self.voices[voice] + + @staticmethod + def tokens_to_ps(tokens: List[en.MToken]) -> str: + return ''.join(t.phonemes + (' ' if t.whitespace else '') for t in tokens).strip() + + @staticmethod + def waterfall_last( + tokens: List[en.MToken], + next_count: int, + waterfall: List[str] = ['!.?…', ':;', ',—'], + bumps: List[str] = [')', '”'] + ) -> int: + for w in waterfall: + z = next((i for i, t in reversed(list(enumerate(tokens))) if t.phonemes in set(w)), None) + if z is None: + continue + z += 1 + if z < len(tokens) and tokens[z].phonemes in bumps: + z += 1 + if next_count - len(KPipeline.tokens_to_ps(tokens[:z])) <= 510: + return z + return len(tokens) + + @staticmethod + def tokens_to_text(tokens: List[en.MToken]) -> str: + return ''.join(t.text + t.whitespace for t in tokens).strip() + + def en_tokenize( + self, + tokens: List[en.MToken] + ) -> Generator[Tuple[str, str, List[en.MToken]], None, None]: + tks = [] + pcount = 0 + for t in tokens: + # American English: ɾ => T + t.phonemes = '' if t.phonemes is None else t.phonemes#.replace('ɾ', 'T') + next_ps = t.phonemes + (' ' if t.whitespace else '') + next_pcount = pcount + len(next_ps.rstrip()) + if next_pcount > 510: + z = KPipeline.waterfall_last(tks, next_pcount) + text = KPipeline.tokens_to_text(tks[:z]) + logger.debug(f"Chunking text at {z}: '{text[:30]}{'...' if len(text) > 30 else ''}'") + ps = KPipeline.tokens_to_ps(tks[:z]) + yield text, ps, tks[:z] + tks = tks[z:] + pcount = len(KPipeline.tokens_to_ps(tks)) + if not tks: + next_ps = next_ps.lstrip() + tks.append(t) + pcount += len(next_ps) + if tks: + text = KPipeline.tokens_to_text(tks) + ps = KPipeline.tokens_to_ps(tks) + yield ''.join(text).strip(), ''.join(ps).strip(), tks + + @staticmethod + def infer( + model: KModel, + ps: str, + pack: torch.FloatTensor, + speed: Union[float, Callable[[int], float]] = 1 + ) -> KModel.Output: + if callable(speed): + speed = speed(len(ps)) + return model(ps, pack[len(ps)-1], speed, return_output=True) + + def generate_from_tokens( + self, + tokens: Union[str, List[en.MToken]], + voice: str, + speed: float = 1, + model: Optional[KModel] = None + ) -> Generator['KPipeline.Result', None, None]: + """Generate audio from either raw phonemes or pre-processed tokens. + + Args: + tokens: Either a phoneme string or list of pre-processed MTokens + voice: The voice to use for synthesis + speed: Speech speed modifier (default: 1) + model: Optional KModel instance (uses pipeline's model if not provided) + + Yields: + KPipeline.Result containing the input tokens and generated audio + + Raises: + ValueError: If no voice is provided or token sequence exceeds model limits + """ + model = model or self.model + if model and voice is None: + raise ValueError('Specify a voice: pipeline.generate_from_tokens(..., voice="af_heart")') + + pack = self.load_voice(voice).to(model.device) if model else None + + # Handle raw phoneme string + if isinstance(tokens, str): + logger.debug("Processing phonemes from raw string") + if len(tokens) > 510: + raise ValueError(f'Phoneme string too long: {len(tokens)} > 510') + output = KPipeline.infer(model, tokens, pack, speed) if model else None + yield self.Result(graphemes='', phonemes=tokens, output=output) + return + + logger.debug("Processing MTokens") + # Handle pre-processed tokens + for gs, ps, tks in self.en_tokenize(tokens): + if not ps: + continue + elif len(ps) > 510: + logger.warning(f"Unexpected len(ps) == {len(ps)} > 510 and ps == '{ps}'") + logger.warning("Truncating to 510 characters") + ps = ps[:510] + output = KPipeline.infer(model, ps, pack, speed) if model else None + if output is not None and output.pred_dur is not None: + KPipeline.join_timestamps(tks, output.pred_dur) + yield self.Result(graphemes=gs, phonemes=ps, tokens=tks, output=output) + + @staticmethod + def join_timestamps(tokens: List[en.MToken], pred_dur: torch.LongTensor): + # Multiply by 600 to go from pred_dur frames to sample_rate 24000 + # Equivalent to dividing pred_dur frames by 40 to get timestamp in seconds + # We will count nice round half-frames, so the divisor is 80 + MAGIC_DIVISOR = 80 + if not tokens or len(pred_dur) < 3: + # We expect at least 3: , token, + return + # We track 2 counts, measured in half-frames: (left, right) + # This way we can cut space characters in half + # TODO: Is -3 an appropriate offset? + left = right = 2 * max(0, pred_dur[0].item() - 3) + # Updates: + # left = right + (2 * token_dur) + space_dur + # right = left + space_dur + i = 1 + for t in tokens: + if i >= len(pred_dur)-1: + break + if not t.phonemes: + if t.whitespace: + i += 1 + left = right + pred_dur[i].item() + right = left + pred_dur[i].item() + i += 1 + continue + j = i + len(t.phonemes) + if j >= len(pred_dur): + break + t.start_ts = left / MAGIC_DIVISOR + token_dur = pred_dur[i: j].sum().item() + space_dur = pred_dur[j].item() if t.whitespace else 0 + left = right + (2 * token_dur) + space_dur + t.end_ts = left / MAGIC_DIVISOR + right = left + space_dur + i = j + (1 if t.whitespace else 0) + + @dataclass + class Result: + graphemes: str + phonemes: str + tokens: Optional[List[en.MToken]] = None + output: Optional[KModel.Output] = None + text_index: Optional[int] = None + + @property + def audio(self) -> Optional[torch.FloatTensor]: + return None if self.output is None else self.output.audio + + @property + def pred_dur(self) -> Optional[torch.LongTensor]: + return None if self.output is None else self.output.pred_dur + + ### MARK: BEGIN BACKWARD COMPAT ### + def __iter__(self): + yield self.graphemes + yield self.phonemes + yield self.audio + + def __getitem__(self, index): + return [self.graphemes, self.phonemes, self.audio][index] + + def __len__(self): + return 3 + #### MARK: END BACKWARD COMPAT #### + + def __call__( + self, + text: Union[str, List[str]], + voice: Optional[str] = None, + speed: Union[float, Callable[[int], float]] = 1, + split_pattern: Optional[str] = r'\n+', + model: Optional[KModel] = None + ) -> Generator['KPipeline.Result', None, None]: + model = model or self.model + if model and voice is None: + raise ValueError('Specify a voice: en_us_pipeline(text="Hello world!", voice="af_heart")') + pack = self.load_voice(voice).to(model.device) if model else None + + # Convert input to list of segments + if isinstance(text, str): + text = re.split(split_pattern, text.strip()) if split_pattern else [text] + + # Process each segment + for graphemes_index, graphemes in enumerate(text): + if not graphemes.strip(): # Skip empty segments + continue + + # English processing (unchanged) + if self.lang_code in 'ab': + logger.debug(f"Processing English text: {graphemes[:50]}{'...' if len(graphemes) > 50 else ''}") + _, tokens = self.g2p(graphemes) + for gs, ps, tks in self.en_tokenize(tokens): + if not ps: + continue + elif len(ps) > 510: + logger.warning(f"Unexpected len(ps) == {len(ps)} > 510 and ps == '{ps}'") + ps = ps[:510] + output = KPipeline.infer(model, ps, pack, speed) if model else None + if output is not None and output.pred_dur is not None: + KPipeline.join_timestamps(tks, output.pred_dur) + yield self.Result(graphemes=gs, phonemes=ps, tokens=tks, output=output, text_index=graphemes_index) + + # Non-English processing with chunking + else: + # Split long text into smaller chunks (roughly 400 characters each) + # Using sentence boundaries when possible + chunk_size = 400 + chunks = [] + + # Try to split on sentence boundaries first + sentences = re.split(r'([.!?]+)', graphemes) + current_chunk = "" + + for i in range(0, len(sentences), 2): + sentence = sentences[i] + # Add the punctuation back if it exists + if i + 1 < len(sentences): + sentence += sentences[i + 1] + + if len(current_chunk) + len(sentence) <= chunk_size: + current_chunk += sentence + else: + if current_chunk: + chunks.append(current_chunk.strip()) + current_chunk = sentence + + if current_chunk: + chunks.append(current_chunk.strip()) + + # If no chunks were created (no sentence boundaries), fall back to character-based chunking + if not chunks: + chunks = [graphemes[i:i+chunk_size] for i in range(0, len(graphemes), chunk_size)] + + # Process each chunk + for chunk in chunks: + if not chunk.strip(): + continue + + ps, _ = self.g2p(chunk) + if not ps: + continue + elif len(ps) > 510: + logger.warning(f'Truncating len(ps) == {len(ps)} > 510') + ps = ps[:510] + + output = KPipeline.infer(model, ps, pack, speed) if model else None + yield self.Result(graphemes=chunk, phonemes=ps, output=output, text_index=graphemes_index) diff --git a/requirements.txt b/requirements.txt index 74ec9d1..ebb2ef9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,6 +9,7 @@ easydict ftfy dashscope imageio-ffmpeg +loguru gradio>=5.0.0 numpy>=1.23.5,<2 xfuser>=0.4.1 diff --git a/wan/multitalk.py b/wan/multitalk.py index bd3f81c..a1ca5ec 100644 --- a/wan/multitalk.py +++ b/wan/multitalk.py @@ -1,5 +1,6 @@ # Copyright 2024-2025 The Alibaba Wan Team Authors. All rights reserved. import gc +from inspect import ArgSpec import logging import math import importlib @@ -27,7 +28,8 @@ from .modules.vae import WanVAE, CausalConv3d, RMS_norm, Upsample from .utils.multitalk_utils import MomentumBuffer, adaptive_projected_guidance from src.vram_management import AutoWrappedLinear, AutoWrappedModule, enable_vram_management - +from wan.utils.utils import load_torch_file, standardize_lora_key_format, load_lora_for_models, apply_lora +from wan.wan_lora import WanLoraWrapper def torch_gc(): torch.cuda.empty_cache() @@ -102,7 +104,9 @@ def __init__( t5_cpu=False, init_on_cpu=True, num_timesteps=1000, - use_timestep_transform=True + use_timestep_transform=True, + lora_dir=None, + lora_scales=None ): r""" Initializes the image-to-video generation model components. @@ -162,8 +166,17 @@ def __init__( logging.info(f"Creating WanModel from {checkpoint_dir}") self.model = WanModel.from_pretrained(checkpoint_dir) self.model.eval().requires_grad_(False) + + + if lora_dir is not None: + lora_wrapper = WanLoraWrapper(self.model) + for lora_path, lora_scale in zip(lora_dir, lora_scales): + lora_name = lora_wrapper.load_lora(lora_path) + lora_wrapper.apply_lora(lora_name, lora_scale) + + if t5_fsdp or dit_fsdp or use_usp: init_on_cpu = False if use_usp: diff --git a/wan/utils/multitalk_utils.py b/wan/utils/multitalk_utils.py index 1215961..c1fb398 100644 --- a/wan/utils/multitalk_utils.py +++ b/wan/utils/multitalk_utils.py @@ -17,6 +17,9 @@ import numpy as np import subprocess import soundfile as sf +import torchvision +import binascii +import os.path as osp VID_EXTENSIONS = (".mp4", ".avi", ".mov", ".mkv") @@ -188,7 +191,50 @@ def forward(self, x, pos_indices): return x_.type_as(x) -def save_video_ffmpeg(gen_video_samples, save_path, vocal_audio_list, fps=25, quality=5): + +def rand_name(length=8, suffix=''): + name = binascii.b2a_hex(os.urandom(length)).decode('utf-8') + if suffix: + if not suffix.startswith('.'): + suffix = '.' + suffix + name += suffix + return name + +def cache_video(tensor, + save_file=None, + fps=30, + suffix='.mp4', + nrow=8, + normalize=True, + value_range=(-1, 1), + retry=5): + + # cache file + cache_file = osp.join('/tmp', rand_name( + suffix=suffix)) if save_file is None else save_file + + # save to cache + error = None + for _ in range(retry): + + # preprocess + tensor = tensor.clamp(min(value_range), max(value_range)) + tensor = torch.stack([ + torchvision.utils.make_grid( + u, nrow=nrow, normalize=normalize, value_range=value_range) + for u in tensor.unbind(2) + ], + dim=1).permute(1, 2, 3, 0) + tensor = (tensor * 255).type(torch.uint8).cpu() + + # write video + writer = imageio.get_writer(cache_file, fps=fps, codec='libx264', quality=10, ffmpeg_params=["-crf", "10"]) + for frame in tensor.numpy(): + writer.append_data(frame) + writer.close() + return cache_file + +def save_video_ffmpeg(gen_video_samples, save_path, vocal_audio_list, fps=25, quality=5, high_quality_save=False): def save_video(frames, save_path, fps, quality=9, ffmpeg_params=None): writer = imageio.get_writer( @@ -200,10 +246,20 @@ def save_video(frames, save_path, fps, quality=9, ffmpeg_params=None): writer.close() save_path_tmp = save_path + "-temp.mp4" - video_audio = (gen_video_samples+1)/2 # C T H W - video_audio = video_audio.permute(1, 2, 3, 0).cpu().numpy() - video_audio = np.clip(video_audio * 255, 0, 255).astype(np.uint8) - save_video(video_audio, save_path_tmp, fps=fps, quality=quality) + if high_quality_save: + cache_video( + tensor=gen_video_samples.unsqueeze(0), + save_file=save_path_tmp, + fps=fps, + nrow=1, + normalize=True, + value_range=(-1, 1) + ) + else: + video_audio = (gen_video_samples+1)/2 # C T H W + video_audio = video_audio.permute(1, 2, 3, 0).cpu().numpy() + video_audio = np.clip(video_audio * 255, 0, 255).astype(np.uint8) # to [0, 255] + save_video(video_audio, save_path_tmp, fps=fps, quality=quality) # crop audio according to video length @@ -220,27 +276,41 @@ def save_video(frames, save_path, fps, quality=9, ffmpeg_params=None): ] subprocess.run(final_command, check=True) - - # generate video with audio save_path = save_path + ".mp4" - final_command = [ - "ffmpeg", - "-y", - "-i", - save_path_tmp, - "-i", - save_path_crop_audio, - "-c:v", - "libx264", - "-c:a", - "aac", - "-shortest", - save_path, - ] - subprocess.run(final_command, check=True) - os.remove(save_path_tmp) - os.remove(save_path_crop_audio) - + if high_quality_save: + final_command = [ + "ffmpeg", + "-y", + "-i", save_path_tmp, + "-i", save_path_crop_audio, + "-c:v", "libx264", + "-crf", "0", + "-preset", "veryslow", + "-c:a", "aac", + "-shortest", + save_path, + ] + subprocess.run(final_command, check=True) + os.remove(save_path_tmp) + os.remove(save_path_crop_audio) + else: + final_command = [ + "ffmpeg", + "-y", + "-i", + save_path_tmp, + "-i", + save_path_crop_audio, + "-c:v", + "libx264", + "-c:a", + "aac", + "-shortest", + save_path, + ] + subprocess.run(final_command, check=True) + os.remove(save_path_tmp) + os.remove(save_path_crop_audio) class MomentumBuffer: diff --git a/wan/utils/utils.py b/wan/utils/utils.py index d725999..29baa2c 100644 --- a/wan/utils/utils.py +++ b/wan/utils/utils.py @@ -116,3 +116,356 @@ def str2bool(v): return False else: raise argparse.ArgumentTypeError('Boolean value expected (True/False)') + +import safetensors.torch +import logging +from accelerate.utils import set_module_tensor_to_device +from tqdm import tqdm + +# ALWAYS_SAFE_LOAD = False +# if hasattr(torch.serialization, "add_safe_globals"): # TODO: this was added in pytorch 2.4, the unsafe path should be removed once earlier versions are deprecated +# class ModelCheckpoint: +# pass +# ModelCheckpoint.__module__ = "pytorch_lightning.callbacks.model_checkpoint" + +# from numpy.core.multiarray import scalar +# from numpy import dtype +# from numpy.dtypes import Float64DType +# from _codecs import encode + +# torch.serialization.add_safe_globals([ModelCheckpoint, scalar, dtype, Float64DType, encode]) +# ALWAYS_SAFE_LOAD = True +# logging.info("Checkpoint files will always be loaded safely.") +# else: +# logging.info("Warning, you are using an old pytorch version and some ckpt/pt files might be loaded unsafely. Upgrading to 2.4 or above is recommended.") + + +def load_torch_file(ckpt, safe_load=False, device=None, return_metadata=False): + if device is None: + device = torch.device("cpu") + metadata = None + if ckpt.lower().endswith(".safetensors") or ckpt.lower().endswith(".sft"): + try: + with safetensors.safe_open(ckpt, framework="pt", device=device.type) as f: + sd = {} + for k in f.keys(): + sd[k] = f.get_tensor(k) + if return_metadata: + metadata = f.metadata() + except Exception as e: + if len(e.args) > 0: + message = e.args[0] + if "HeaderTooLarge" in message: + raise ValueError("{}\n\nFile path: {}\n\nThe safetensors file is corrupt or invalid. Make sure this is actually a safetensors file and not a ckpt or pt or other filetype.".format(message, ckpt)) + if "MetadataIncompleteBuffer" in message: + raise ValueError("{}\n\nFile path: {}\n\nThe safetensors file is corrupt/incomplete. Check the file size and make sure you have copied/downloaded it correctly.".format(message, ckpt)) + raise e + else: + if safe_load or ALWAYS_SAFE_LOAD: + pl_sd = torch.load(ckpt, map_location=device, weights_only=True) + else: + pl_sd = torch.load(ckpt, map_location=device, pickle_module=comfy.checkpoint_pickle) + if "global_step" in pl_sd: + logging.debug(f"Global Step: {pl_sd['global_step']}") + if "state_dict" in pl_sd: + sd = pl_sd["state_dict"] + else: + if len(pl_sd) == 1: + key = list(pl_sd.keys())[0] + sd = pl_sd[key] + if not isinstance(sd, dict): + sd = pl_sd + else: + sd = pl_sd + return (sd, metadata) if return_metadata else sd + +def standardize_lora_key_format(lora_sd): + new_sd = {} + for k, v in lora_sd.items(): + # Diffusers format + if k.startswith('transformer.'): + k = k.replace('transformer.', 'diffusion_model.') + if k.startswith('pipe.dit.'): #unianimate-dit/diffsynth + k = k.replace('pipe.dit.', 'diffusion_model.') + + # Fun LoRA format + if k.startswith('lora_unet__'): + # Split into main path and weight type parts + parts = k.split('.') + main_part = parts[0] # e.g. lora_unet__blocks_0_cross_attn_k + weight_type = '.'.join(parts[1:]) if len(parts) > 1 else None # e.g. lora_down.weight + + # Process the main part - convert from underscore to dot format + if 'blocks_' in main_part: + # Extract components + components = main_part[len('lora_unet__'):].split('_') + + # Start with diffusion_model + new_key = "diffusion_model" + + # Add blocks.N + if components[0] == 'blocks': + new_key += f".blocks.{components[1]}" + + # Handle different module types + idx = 2 + if idx < len(components): + if components[idx] == 'self' and idx+1 < len(components) and components[idx+1] == 'attn': + new_key += ".self_attn" + idx += 2 + elif components[idx] == 'cross' and idx+1 < len(components) and components[idx+1] == 'attn': + new_key += ".cross_attn" + idx += 2 + elif components[idx] == 'ffn': + new_key += ".ffn" + idx += 1 + + # Add the component (k, q, v, o) and handle img suffix + if idx < len(components): + component = components[idx] + idx += 1 + + # Check for img suffix + if idx < len(components) and components[idx] == 'img': + component += '_img' + idx += 1 + + new_key += f".{component}" + + # Handle weight type - this is the critical fix + if weight_type: + if weight_type == 'alpha': + new_key += '.alpha' + elif weight_type == 'lora_down.weight' or weight_type == 'lora_down': + new_key += '.lora_A.weight' + elif weight_type == 'lora_up.weight' or weight_type == 'lora_up': + new_key += '.lora_B.weight' + else: + # Keep original weight type if not matching our patterns + new_key += f'.{weight_type}' + # Add .weight suffix if missing + if not new_key.endswith('.weight'): + new_key += '.weight' + + k = new_key + else: + # For other lora_unet__ formats (head, embeddings, etc.) + new_key = main_part.replace('lora_unet__', 'diffusion_model.') + + # Fix specific component naming patterns + new_key = new_key.replace('_self_attn', '.self_attn') + new_key = new_key.replace('_cross_attn', '.cross_attn') + new_key = new_key.replace('_ffn', '.ffn') + new_key = new_key.replace('blocks_', 'blocks.') + new_key = new_key.replace('head_head', 'head.head') + new_key = new_key.replace('img_emb', 'img_emb') + new_key = new_key.replace('text_embedding', 'text.embedding') + new_key = new_key.replace('time_embedding', 'time.embedding') + new_key = new_key.replace('time_projection', 'time.projection') + + # Replace remaining underscores with dots, carefully + parts = new_key.split('.') + final_parts = [] + for part in parts: + if part in ['img_emb', 'self_attn', 'cross_attn']: + final_parts.append(part) # Keep these intact + else: + final_parts.append(part.replace('_', '.')) + new_key = '.'.join(final_parts) + + # Handle weight type + if weight_type: + if weight_type == 'alpha': + new_key += '.alpha' + elif weight_type == 'lora_down.weight' or weight_type == 'lora_down': + new_key += '.lora_A.weight' + elif weight_type == 'lora_up.weight' or weight_type == 'lora_up': + new_key += '.lora_B.weight' + else: + new_key += f'.{weight_type}' + if not new_key.endswith('.weight'): + new_key += '.weight' + + k = new_key + + # Handle special embedded components + special_components = { + 'time.projection': 'time_projection', + 'img.emb': 'img_emb', + 'text.emb': 'text_emb', + 'time.emb': 'time_emb', + } + for old, new in special_components.items(): + if old in k: + k = k.replace(old, new) + + # Fix diffusion.model -> diffusion_model + if k.startswith('diffusion.model.'): + k = k.replace('diffusion.model.', 'diffusion_model.') + + # Finetrainer format + if '.attn1.' in k: + k = k.replace('.attn1.', '.cross_attn.') + k = k.replace('.to_k.', '.k.') + k = k.replace('.to_q.', '.q.') + k = k.replace('.to_v.', '.v.') + k = k.replace('.to_out.0.', '.o.') + elif '.attn2.' in k: + k = k.replace('.attn2.', '.cross_attn.') + k = k.replace('.to_k.', '.k.') + k = k.replace('.to_q.', '.q.') + k = k.replace('.to_v.', '.v.') + k = k.replace('.to_out.0.', '.o.') + + if "img_attn.proj" in k: + k = k.replace("img_attn.proj", "img_attn_proj") + if "img_attn.qkv" in k: + k = k.replace("img_attn.qkv", "img_attn_qkv") + if "txt_attn.proj" in k: + k = k.replace("txt_attn.proj", "txt_attn_proj") + if "txt_attn.qkv" in k: + k = k.replace("txt_attn.qkv", "txt_attn_qkv") + new_sd[k] = v + return new_sd + +def load_lora_for_models(model, clip, lora, strength_model, strength_clip): + key_map = {} + if model is not None: + key_map = comfy.lora.model_lora_keys_unet(model.model, key_map) + if clip is not None: + key_map = comfy.lora.model_lora_keys_clip(clip.cond_stage_model, key_map) + + lora = comfy.lora_convert.convert_lora(lora) + loaded = comfy.lora.load_lora(lora, key_map) + if model is not None: + new_modelpatcher = model.clone() + k = new_modelpatcher.add_patches(loaded, strength_model) + else: + k = () + new_modelpatcher = None + + if clip is not None: + new_clip = clip.clone() + k1 = new_clip.add_patches(loaded, strength_clip) + else: + k1 = () + new_clip = None + k = set(k) + k1 = set(k1) + for x in loaded: + if (x not in k) and (x not in k1): + logging.warning("NOT LOADED {}".format(x)) + + return (new_modelpatcher, new_clip) + +def apply_lora(model, device_to, transformer_load_device, params_to_keep=None, dtype=None, base_dtype=None, state_dict=None, low_mem_load=False): + to_load = [] + for n, m in model.model.named_modules(): + params = [] + skip = False + for name, param in m.named_parameters(recurse=False): + params.append(name) + for name, param in m.named_parameters(recurse=True): + if name not in params: + skip = True # skip random weights in non leaf modules + break + if not skip and (hasattr(m, "comfy_cast_weights") or len(params) > 0): + to_load.append((n, m, params)) + + to_load.sort(reverse=True) + for x in tqdm(to_load, desc="Loading model and applying LoRA weights:", leave=True): + name = x[0] + m = x[1] + params = x[2] + if hasattr(m, "comfy_patched_weights"): + if m.comfy_patched_weights == True: + continue + for param in params: + name = name.replace("._orig_mod.", ".") # torch compiled modules have this prefix + if low_mem_load: + dtype_to_use = base_dtype if any(keyword in name for keyword in params_to_keep) else dtype + if "patch_embedding" in name: + dtype_to_use = torch.float32 + if name.startswith("diffusion_model."): + name_no_prefix = name[len("diffusion_model."):] + key = "{}.{}".format(name_no_prefix, param) + try: + set_module_tensor_to_device(model.model.diffusion_model, key, device=transformer_load_device, dtype=dtype_to_use, value=state_dict[key]) + except: + continue + model.patch_weight_to_device("{}.{}".format(name, param), device_to=device_to) + if low_mem_load: + try: + set_module_tensor_to_device(model.model.diffusion_model, key, device=transformer_load_device, dtype=dtype_to_use, value=model.model.diffusion_model.state_dict()[key]) + except: + continue + m.comfy_patched_weights = True + + model.current_weight_patches_uuid = model.patches_uuid + if low_mem_load: + for name, param in model.model.diffusion_model.named_parameters(): + if param.device != transformer_load_device: + dtype_to_use = base_dtype if any(keyword in name for keyword in params_to_keep) else dtype + if "patch_embedding" in name: + dtype_to_use = torch.float32 + try: + set_module_tensor_to_device(model.model.diffusion_model, name, device=transformer_load_device, dtype=dtype_to_use, value=state_dict[name]) + except: + continue + return model + +def apply_lora(model, device_to, transformer_load_device, params_to_keep=None, dtype=None, base_dtype=None, state_dict=None, low_mem_load=False): + to_load = [] + for n, m in model.model.named_modules(): + params = [] + skip = False + for name, param in m.named_parameters(recurse=False): + params.append(name) + for name, param in m.named_parameters(recurse=True): + if name not in params: + skip = True # skip random weights in non leaf modules + break + if not skip and (hasattr(m, "comfy_cast_weights") or len(params) > 0): + to_load.append((n, m, params)) + + to_load.sort(reverse=True) + for x in tqdm(to_load, desc="Loading model and applying LoRA weights:", leave=True): + name = x[0] + m = x[1] + params = x[2] + if hasattr(m, "comfy_patched_weights"): + if m.comfy_patched_weights == True: + continue + for param in params: + name = name.replace("._orig_mod.", ".") # torch compiled modules have this prefix + if low_mem_load: + dtype_to_use = base_dtype if any(keyword in name for keyword in params_to_keep) else dtype + if "patch_embedding" in name: + dtype_to_use = torch.float32 + if name.startswith("diffusion_model."): + name_no_prefix = name[len("diffusion_model."):] + key = "{}.{}".format(name_no_prefix, param) + try: + set_module_tensor_to_device(model.model.diffusion_model, key, device=transformer_load_device, dtype=dtype_to_use, value=state_dict[key]) + except: + continue + model.patch_weight_to_device("{}.{}".format(name, param), device_to=device_to) + if low_mem_load: + try: + set_module_tensor_to_device(model.model.diffusion_model, key, device=transformer_load_device, dtype=dtype_to_use, value=model.model.diffusion_model.state_dict()[key]) + except: + continue + m.comfy_patched_weights = True + + model.current_weight_patches_uuid = model.patches_uuid + if low_mem_load: + for name, param in model.model.diffusion_model.named_parameters(): + if param.device != transformer_load_device: + dtype_to_use = base_dtype if any(keyword in name for keyword in params_to_keep) else dtype + if "patch_embedding" in name: + dtype_to_use = torch.float32 + try: + set_module_tensor_to_device(model.model.diffusion_model, name, device=transformer_load_device, dtype=dtype_to_use, value=state_dict[name]) + except: + continue + return model \ No newline at end of file diff --git a/wan/wan_lora.py b/wan/wan_lora.py new file mode 100644 index 0000000..7ffdc00 --- /dev/null +++ b/wan/wan_lora.py @@ -0,0 +1,108 @@ +import os +import torch +from safetensors import safe_open +from loguru import logger +import gc +from functools import lru_cache + +@lru_cache(maxsize=None) +def GET_DTYPE(): + RUNNING_FLAG = os.getenv("DTYPE") + return RUNNING_FLAG + +class WanLoraWrapper: + def __init__(self, wan_model): + self.model = wan_model + self.lora_metadata = {} + self.override_dict = {} # On CPU + + def load_lora(self, lora_path, lora_name=None): + if lora_name is None: + lora_name = os.path.basename(lora_path).split(".")[0] + + if lora_name in self.lora_metadata: + logger.info(f"LoRA {lora_name} already loaded, skipping...") + return lora_name + + self.lora_metadata[lora_name] = {"path": lora_path} + logger.info(f"Registered LoRA metadata for: {lora_name} from {lora_path}") + + return lora_name + + def _load_lora_file(self, file_path): + with safe_open(file_path, framework="pt") as f: + tensor_dict = {key: f.get_tensor(key).to(torch.bfloat16) for key in f.keys()} + return tensor_dict + + def apply_lora(self, lora_name, alpha=1.0): + if lora_name not in self.lora_metadata: + logger.info(f"LoRA {lora_name} not found. Please load it first.") + + # if hasattr(self.model, "current_lora") and self.model.current_lora: + # self.remove_lora() + # import ipdb + # ipdb.set_trace() + # if not hasattr(self.model, "original_weight_dict"): + self.model.original_weight_dict = {} + for k, v in self.model.named_parameters(): + self.model.original_weight_dict[k] = v + + + lora_weights = self._load_lora_file(self.lora_metadata[lora_name]["path"]) + weight_dict = self.model.original_weight_dict + self._apply_lora_weights(weight_dict, lora_weights, alpha) + # self.model._init_weights(weight_dict) + + logger.info(f"Applied LoRA: {lora_name} with alpha={alpha}") + return True + + + @torch.no_grad() + def _apply_lora_weights(self, weight_dict, lora_weights, alpha): + lora_pairs = {} + prefix = "diffusion_model." + + for key in lora_weights.keys(): + if key.endswith("lora_down.weight") and key.startswith(prefix): + base_name = key[len(prefix) :].replace("lora_down.weight", "weight") + b_key = key.replace("lora_down.weight", "lora_up.weight") + if b_key in lora_weights: + lora_pairs[base_name] = (key, b_key) + elif key.endswith("diff_b") and key.startswith(prefix): + base_name = key[len(prefix) :].replace("diff_b", "bias") + lora_pairs[base_name] = (key) + elif key.endswith("diff") and key.startswith(prefix): + base_name = key[len(prefix) :].replace("diff", "weight") + lora_pairs[base_name] = (key) + + applied_count = 0 + for name, param in weight_dict.items(): + if name in lora_pairs: + if name not in self.override_dict: + self.override_dict[name] = param.detach().clone().cpu() + + if len(lora_pairs[name])==2: + name_lora_A, name_lora_B = lora_pairs[name] + lora_A = lora_weights[name_lora_A].to(param.device, param.dtype) + lora_B = lora_weights[name_lora_B].to(param.device, param.dtype) + delta = torch.matmul(lora_B, lora_A) * alpha + param.add_(delta) + else: + name_lora = lora_pairs[name] + delta = lora_weights[name_lora]* alpha + param.add_(delta) + applied_count += 1 + + + logger.info(f"Applied {applied_count} LoRA weight adjustments") + if applied_count == 0: + logger.info( + "Warning: No LoRA weights were applied. Expected naming conventions: 'diffusion_model..lora_A.weight' and 'diffusion_model..lora_B.weight'. Please verify the LoRA weight file." + ) + + + def list_loaded_loras(self): + return list(self.lora_metadata.keys()) + + def get_current_lora(self): + return self.model.current_lora \ No newline at end of file From c95adddc77b38ef216e35ab347c7da85a3f8dd07 Mon Sep 17 00:00:00 2001 From: yongzhang6782 Date: Tue, 1 Jul 2025 08:41:29 +0800 Subject: [PATCH 08/25] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a10767c..a57a025 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,7 @@ We propose **MultiTalk** , a novel framework for audio-driven multi-person conve ## 🔥 Latest News -* July 01, 2025: 🔥🔥 `MultiTalk` supports input audios with TTS, LoRA acceleration (requires only 4~8 steps) and gradio. +* July 01, 2025: 🔥🔥 `MultiTalk` supports input audios with TTS, [FusioniX](https://huggingface.co/vrgamedevgirl84/Wan14BT2VFusioniX/blob/main/Wan14Bi2vFusioniX_fp16.safetensors) and [lightx2v](https://huggingface.co/Kijai/WanVideo_comfy/blob/main/Wan21_T2V_14B_lightx2v_cfg_step_distill_lora_rank32.safetensors) LoRA acceleration (requires only 4~8 steps), and Gradio. * June 14, 2025: 🔥🔥 We release `MultiTalk` with support for `multi-GPU inference`, `teacache acceleration`, `APG` and `low-VRAM inference` (enabling 480P video generation on a single RTX 4090). [APG](https://arxiv.org/abs/2410.02416) is used to alleviate the color error accumulation in long video generation. TeaCache is capable of increasing speed by approximately 2~3x. * June 9, 2025: 🔥🔥 We release the [weights](https://huggingface.co/MeiGen-AI/MeiGen-MultiTalk) and inference code of **MultiTalk** * May 29, 2025: We release the [Technique-Report](https://arxiv.org/abs/2505.22647) of **MultiTalk** From 61460f3fe42c1d39f497beec811a6fa985bb4f80 Mon Sep 17 00:00:00 2001 From: Zhe Kong <43921423+kongzhecn@users.noreply.github.com> Date: Tue, 1 Jul 2025 10:05:15 +0800 Subject: [PATCH 09/25] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a57a025..36a34ee 100644 --- a/README.md +++ b/README.md @@ -368,13 +368,14 @@ python generate_multitalk.py \ python app.py \ --lora_dir weights/Wan2.1_I2V_14B_FusionX_LoRA.safetensors \ --lora_scale 1.0 \ + --num_persistent_param_in_dit 0 \ --sample_shift 2 ``` or ``` -python app.py +python app.py --num_persistent_param_in_dit 0 ``` From 17b3ab23b8bd745ba15824520677445577a620ed Mon Sep 17 00:00:00 2001 From: Zhe Kong <43921423+kongzhecn@users.noreply.github.com> Date: Tue, 1 Jul 2025 17:08:44 +0800 Subject: [PATCH 10/25] fix resolution err --- wan/multitalk.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/wan/multitalk.py b/wan/multitalk.py index a1ca5ec..c189f64 100644 --- a/wan/multitalk.py +++ b/wan/multitalk.py @@ -515,9 +515,8 @@ def generate(self, background_mask = torch.zeros([src_h, src_w]) human_mask1 = torch.zeros([src_h, src_w]) human_mask2 = torch.zeros([src_h, src_w]) - src_w = src_w//2 - lefty_min, lefty_max = int(src_w * face_scale), int(src_w * (1 - face_scale)) - righty_min, righty_max = int(src_w * face_scale + src_w), int(src_w * (1 - face_scale) + src_w) + lefty_min, lefty_max = int((src_w//2) * face_scale), int((src_w//2) * (1 - face_scale)) + righty_min, righty_max = int((src_w//2) * face_scale + (src_w//2)), int((src_w//2) * (1 - face_scale) + (src_w//2)) human_mask1[x_min:x_max, lefty_min:lefty_max] = 1 human_mask2[x_min:x_max, righty_min:righty_max] = 1 background_mask += human_mask1 @@ -719,4 +718,4 @@ def noop_no_sync(): del noise, latent torch_gc() - return gen_video_samples[0] if self.rank == 0 else None \ No newline at end of file + return gen_video_samples[0] if self.rank == 0 else None From 451eba34b894ffcd543ae98d0d6f48dff65b5ee9 Mon Sep 17 00:00:00 2001 From: Zhe Kong <43921423+kongzhecn@users.noreply.github.com> Date: Wed, 2 Jul 2025 00:42:26 +0800 Subject: [PATCH 11/25] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 36a34ee..3c5a265 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,7 @@ We propose **MultiTalk** , a novel framework for audio-driven multi-person conve ## 🔥 Latest News -* July 01, 2025: 🔥🔥 `MultiTalk` supports input audios with TTS, [FusioniX](https://huggingface.co/vrgamedevgirl84/Wan14BT2VFusioniX/blob/main/Wan14Bi2vFusioniX_fp16.safetensors) and [lightx2v](https://huggingface.co/Kijai/WanVideo_comfy/blob/main/Wan21_T2V_14B_lightx2v_cfg_step_distill_lora_rank32.safetensors) LoRA acceleration (requires only 4~8 steps), and Gradio. +* July 01, 2025: 🔥🔥 `MultiTalk` supports input audios with TTS, [FusioniX](https://huggingface.co/vrgamedevgirl84/Wan14BT2VFusioniX/blob/main/FusionX_LoRa/Wan2.1_I2V_14B_FusionX_LoRA.safetensors) and [lightx2v](https://huggingface.co/Kijai/WanVideo_comfy/blob/main/Wan21_T2V_14B_lightx2v_cfg_step_distill_lora_rank32.safetensors) LoRA acceleration (requires only 4~8 steps), and Gradio. * June 14, 2025: 🔥🔥 We release `MultiTalk` with support for `multi-GPU inference`, `teacache acceleration`, `APG` and `low-VRAM inference` (enabling 480P video generation on a single RTX 4090). [APG](https://arxiv.org/abs/2410.02416) is used to alleviate the color error accumulation in long video generation. TeaCache is capable of increasing speed by approximately 2~3x. * June 9, 2025: 🔥🔥 We release the [weights](https://huggingface.co/MeiGen-AI/MeiGen-MultiTalk) and inference code of **MultiTalk** * May 29, 2025: We release the [Technique-Report](https://arxiv.org/abs/2505.22647) of **MultiTalk** @@ -324,7 +324,7 @@ python generate_multitalk.py \ #### 3. Run with FusioniX and CausVid(Require only 4~8 steps) -[FusioniX](https://huggingface.co/vrgamedevgirl84/Wan14BT2VFusioniX/blob/main/Wan14Bi2vFusioniX_fp16.safetensors)require 8 steps and [lightx2v](https://huggingface.co/Kijai/WanVideo_comfy/blob/main/Wan21_T2V_14B_lightx2v_cfg_step_distill_lora_rank32.safetensors) requires only 4 steps. +[FusioniX](https://huggingface.co/vrgamedevgirl84/Wan14BT2VFusioniX/blob/main/FusionX_LoRa/Wan2.1_I2V_14B_FusionX_LoRA.safetensors) require 8 steps and [lightx2v](https://huggingface.co/Kijai/WanVideo_comfy/blob/main/Wan21_T2V_14B_lightx2v_cfg_step_distill_lora_rank32.safetensors) requires only 4 steps. ``` python generate_multitalk.py \ From b65f0ced7a0af19017bc95188943c6dd80f522c9 Mon Sep 17 00:00:00 2001 From: Zhe Kong <43921423+kongzhecn@users.noreply.github.com> Date: Thu, 3 Jul 2025 10:31:44 +0800 Subject: [PATCH 12/25] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 3c5a265..696c19a 100644 --- a/README.md +++ b/README.md @@ -197,6 +197,8 @@ Our model is compatible with both 480P and 720P resolutions. The current code on --size multitalk-720: generate 720P video. --use_apg: run with APG. --teacache_thresh: A coefficient used for TeaCache acceleration +—-sample_text_guide_scale: When not using LoRA, the optimal value is `5`. After applying LoRA, the recommended value is `1`. +—-sample_audio_guide_scale: When not using LoRA, the optimal value is `4`. After applying LoRA, the recommended value is `2`. ``` #### 1. Single-Person From 2c49e734e318cd47f78484f37ed14e86efba61aa Mon Sep 17 00:00:00 2001 From: Zhe Kong <43921423+kongzhecn@users.noreply.github.com> Date: Thu, 3 Jul 2025 10:43:37 +0800 Subject: [PATCH 13/25] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 696c19a..88015c4 100644 --- a/README.md +++ b/README.md @@ -197,8 +197,8 @@ Our model is compatible with both 480P and 720P resolutions. The current code on --size multitalk-720: generate 720P video. --use_apg: run with APG. --teacache_thresh: A coefficient used for TeaCache acceleration -—-sample_text_guide_scale: When not using LoRA, the optimal value is `5`. After applying LoRA, the recommended value is `1`. -—-sample_audio_guide_scale: When not using LoRA, the optimal value is `4`. After applying LoRA, the recommended value is `2`. +—-sample_text_guide_scale: When not using LoRA, the optimal value is 5. After applying LoRA, the recommended value is 1. +—-sample_audio_guide_scale: When not using LoRA, the optimal value is 4. After applying LoRA, the recommended value is 2. ``` #### 1. Single-Person From c6051538189ba39b833c6885384eb7325f2623f5 Mon Sep 17 00:00:00 2001 From: MiaoDX Date: Wed, 2 Jul 2025 11:10:16 +0800 Subject: [PATCH 14/25] Add replicate impl link for broder community access Signed-off-by: MiaoDX --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 88015c4..ecf3df1 100644 --- a/README.md +++ b/README.md @@ -87,6 +87,7 @@ We propose **MultiTalk** , a novel framework for audio-driven multi-person conve * May 29, 2025: We release the [project page](https://meigen-ai.github.io/multi-talk/) of **MultiTalk** ## 🌐 Community Works +- [Replicate](https://replicate.com/zsxkib/multitalk): thank [zsxkib](https://github.com/zsxkib) for pushing MultiTalk to Replicate platform, try it! Please refer to [cog-MultiTalk](https://github.com/zsxkib/cog-MultiTalk) for details. - [Gradio Demo](https://github.com/MeiGen-AI/MultiTalk): thank [fffiloni](https://github.com/fffiloni) for developing this gradio demo on Hugging Face. Please refer to the [issue](https://github.com/MeiGen-AI/MultiTalk/issues/39) for details. - [ComfyUI](https://github.com/kijai/ComfyUI-WanVideoWrapper/tree/multitalk): thank [kijai](https://github.com/kijai) for integrating MultiTalk into ComfyUI-WanVideoWrapper. [Rudra](https://github.com/Rudra-ai-coder) found something interesting that MultiTalk can be combined with Wanx T2V and VACE in the [issue](https://github.com/kijai/ComfyUI-WanVideoWrapper/issues/635). - [Google Colab example](https://colab.research.google.com/drive/185OyRIpJDlpnRjhBRb7FnaRlq11BLZTa?usp=sharing), an exmaple for inference on A100 provided by [Braffolk](https://github.com/Braffolk). From 139d334a33cc5ac6e75fefbced418129aacfee1c Mon Sep 17 00:00:00 2001 From: yongzhang6782 Date: Fri, 11 Jul 2025 08:10:31 +0800 Subject: [PATCH 15/25] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index ecf3df1..6409a47 100644 --- a/README.md +++ b/README.md @@ -87,6 +87,7 @@ We propose **MultiTalk** , a novel framework for audio-driven multi-person conve * May 29, 2025: We release the [project page](https://meigen-ai.github.io/multi-talk/) of **MultiTalk** ## 🌐 Community Works +- [Replicate](https://github.com/deepbeepmeep/Wan2GP): thank [deepbeepmeep](https://github.com/deepbeepmeep) for providing the project [Wan2GP](https://github.com/deepbeepmeep/Wan2GP) that enables Multitalk on very low VRAM hardware (8 GB of VRAM) and combines it with the capabilities of Vace. - [Replicate](https://replicate.com/zsxkib/multitalk): thank [zsxkib](https://github.com/zsxkib) for pushing MultiTalk to Replicate platform, try it! Please refer to [cog-MultiTalk](https://github.com/zsxkib/cog-MultiTalk) for details. - [Gradio Demo](https://github.com/MeiGen-AI/MultiTalk): thank [fffiloni](https://github.com/fffiloni) for developing this gradio demo on Hugging Face. Please refer to the [issue](https://github.com/MeiGen-AI/MultiTalk/issues/39) for details. - [ComfyUI](https://github.com/kijai/ComfyUI-WanVideoWrapper/tree/multitalk): thank [kijai](https://github.com/kijai) for integrating MultiTalk into ComfyUI-WanVideoWrapper. [Rudra](https://github.com/Rudra-ai-coder) found something interesting that MultiTalk can be combined with Wanx T2V and VACE in the [issue](https://github.com/kijai/ComfyUI-WanVideoWrapper/issues/635). From 6de9ef7d2909ad702e11b20081c52d6af444c4e1 Mon Sep 17 00:00:00 2001 From: yongzhang6782 Date: Fri, 11 Jul 2025 08:13:31 +0800 Subject: [PATCH 16/25] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6409a47..e470a88 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,7 @@ We propose **MultiTalk** , a novel framework for audio-driven multi-person conve * May 29, 2025: We release the [project page](https://meigen-ai.github.io/multi-talk/) of **MultiTalk** ## 🌐 Community Works -- [Replicate](https://github.com/deepbeepmeep/Wan2GP): thank [deepbeepmeep](https://github.com/deepbeepmeep) for providing the project [Wan2GP](https://github.com/deepbeepmeep/Wan2GP) that enables Multitalk on very low VRAM hardware (8 GB of VRAM) and combines it with the capabilities of Vace. +- [Wan2GP](https://github.com/deepbeepmeep/Wan2GP): thank [deepbeepmeep](https://github.com/deepbeepmeep) for providing the project [Wan2GP](https://github.com/deepbeepmeep/Wan2GP) that enables Multitalk on very low VRAM hardware (8 GB of VRAM) and combines it with the capabilities of Vace. - [Replicate](https://replicate.com/zsxkib/multitalk): thank [zsxkib](https://github.com/zsxkib) for pushing MultiTalk to Replicate platform, try it! Please refer to [cog-MultiTalk](https://github.com/zsxkib/cog-MultiTalk) for details. - [Gradio Demo](https://github.com/MeiGen-AI/MultiTalk): thank [fffiloni](https://github.com/fffiloni) for developing this gradio demo on Hugging Face. Please refer to the [issue](https://github.com/MeiGen-AI/MultiTalk/issues/39) for details. - [ComfyUI](https://github.com/kijai/ComfyUI-WanVideoWrapper/tree/multitalk): thank [kijai](https://github.com/kijai) for integrating MultiTalk into ComfyUI-WanVideoWrapper. [Rudra](https://github.com/Rudra-ai-coder) found something interesting that MultiTalk can be combined with Wanx T2V and VACE in the [issue](https://github.com/kijai/ComfyUI-WanVideoWrapper/issues/635). From 457efe5ce01e2492e2d1a3163224d1c8b35d567f Mon Sep 17 00:00:00 2001 From: Zhe Kong <43921423+kongzhecn@users.noreply.github.com> Date: Sat, 12 Jul 2025 01:14:23 +0800 Subject: [PATCH 17/25] add quant model, cfg strategy, color fix, sageattn --- README.md | 54 +++++++++++++- app.py | 56 +++++++++----- generate_multitalk.py | 24 +++++- requirements.txt | 4 +- src/vram_management/layers.py | 66 ++++++++++++++++- wan/modules/multitalk_model.py | 50 +++++++++---- wan/modules/t5.py | 34 +++++++-- wan/multitalk.py | 132 ++++++++++++++++++++++++++------- wan/utils/multitalk_utils.py | 110 ++++++++++++++++++++++++++- wan/wan_lora.py | 69 +++++++++-------- 10 files changed, 491 insertions(+), 108 deletions(-) diff --git a/README.md b/README.md index e470a88..5520afe 100644 --- a/README.md +++ b/README.md @@ -80,6 +80,7 @@ We propose **MultiTalk** , a novel framework for audio-driven multi-person conve ## 🔥 Latest News +* July 11, 2025: 🔥🔥 `MultiTalk` supports INT8 quantization and CFG strategy updation(with lora). * July 01, 2025: 🔥🔥 `MultiTalk` supports input audios with TTS, [FusioniX](https://huggingface.co/vrgamedevgirl84/Wan14BT2VFusioniX/blob/main/FusionX_LoRa/Wan2.1_I2V_14B_FusionX_LoRA.safetensors) and [lightx2v](https://huggingface.co/Kijai/WanVideo_comfy/blob/main/Wan21_T2V_14B_lightx2v_cfg_step_distill_lora_rank32.safetensors) LoRA acceleration (requires only 4~8 steps), and Gradio. * June 14, 2025: 🔥🔥 We release `MultiTalk` with support for `multi-GPU inference`, `teacache acceleration`, `APG` and `low-VRAM inference` (enabling 480P video generation on a single RTX 4090). [APG](https://arxiv.org/abs/2410.02416) is used to alleviate the color error accumulation in long video generation. TeaCache is capable of increasing speed by approximately 2~3x. * June 9, 2025: 🔥🔥 We release the [weights](https://huggingface.co/MeiGen-AI/MeiGen-MultiTalk) and inference code of **MultiTalk** @@ -101,7 +102,7 @@ We propose **MultiTalk** , a novel framework for audio-driven multi-person conve - [x] Multi-GPU Inference - [ ] Inference acceleration - [x] TeaCache - - [ ] int8 quantization + - [x] int8 quantization - [ ] LCM distillation - [ ] Sparse Attention - [x] Run with very low VRAM @@ -338,7 +339,7 @@ python generate_multitalk.py \ --lora_dir weights/Wan2.1_I2V_14B_FusionX_LoRA.safetensors \ --lora_scale 1.0 \ --sample_text_guide_scale 1.0 \ - --sample_audio_guide_scale 1.0 \ + --sample_audio_guide_scale 2.0 \ --sample_steps 8 \ --mode streaming \ --num_persistent_param_in_dit 0 \ @@ -356,15 +357,50 @@ python generate_multitalk.py \ --lora_dir weights/Wan2.1_I2V_14B_FusionX_LoRA.safetensors \ --lora_scale 1.0 \ --sample_text_guide_scale 1.0 \ - --sample_audio_guide_scale 1.0 \ + --sample_audio_guide_scale 2.0 \ --sample_steps 8 \ --mode streaming \ --num_persistent_param_in_dit 0 \ --save_file multi_long_lowvram_fusionx_exp \ + +``` + +#### 4. Run with the quantization model (Only support run with single gpu) + +``` +python generate_multitalk.py \ + --ckpt_dir weights/Wan2.1-I2V-14B-480P \ + --wav2vec_dir 'weights/chinese-wav2vec2-base' \ + --input_json examples/multitalk_example_2.json \ + --sample_steps 40 \ + --mode streaming \ + --use_teacache \ + --quant int8 \ + --quant_dir weights/MeiGen-MultiTalk \ + --num_persistent_param_in_dit 0 \ + --save_file multi_long_lowvram_exp_quant +``` + +Run with lora: + +``` +python generate_multitalk.py \ + --ckpt_dir weights/Wan2.1-I2V-14B-480P \ + --wav2vec_dir 'weights/chinese-wav2vec2-base' \ + --input_json examples/multitalk_example_1.json \ + --quant int8 \ + --quant_dir weights/MeiGen-MultiTalk \ + --lora_dir weights/MeiGen-MultiTalk/quant_models/quant_model_int8_FusionX.safetensors \ + --sample_text_guide_scale 1.0 \ + --sample_audio_guide_scale 2.0 \ + --sample_steps 8 \ + --mode streaming \ + --num_persistent_param_in_dit 0 \ + --save_file multi_long_lowvram_fusionx_exp_quant \ --sample_shift 2 ``` -#### 4. Run with Gradio +#### 5. Run with Gradio @@ -382,6 +418,16 @@ or python app.py --num_persistent_param_in_dit 0 ``` +or + +``` +python app.py \ + --quant int8 \ + --quant_dir weights/MeiGen-MultiTalk \ + --lora_dir weights/MeiGen-MultiTalk/quant_models/quant_model_int8_FusionX.safetensors \ + --sample_shift 2 \ + --num_persistent_param_in_dit 0 +``` ## 🚀Computational Efficiency The results are evaluated on A100 GPUs for multi-person generation. Single-person generation uses less memory and provides faster inference. diff --git a/app.py b/app.py index 507c22f..4a05a22 100644 --- a/app.py +++ b/app.py @@ -86,6 +86,11 @@ def _parse_args(): type=str, default='./weights/Wan2.1-I2V-14B-480P', help="The path to the Wan checkpoint directory.") + parser.add_argument( + "--quant_dir", + type=str, + default=None, + help="The path to the Wan quant checkpoint directory.") parser.add_argument( "--wav2vec_dir", type=str, @@ -104,18 +109,6 @@ def _parse_args(): default=[1.2], help="Controls how much to influence the outputs with the LoRA parameters. Accepts multiple float values." ) - - - # parser.add_argument( - # "--lora_dir", - # type=str, - # default=None, - # help="The path to the LoRA checkpoint directory.") - # parser.add_argument( - # "--lora_scale", - # type=float, - # default=1.2, - # help="Controls how much to influence the outputs with the LoRA parameters.") parser.add_argument( "--offload_model", type=str2bool, @@ -232,6 +225,19 @@ def _parse_args(): default=55, help="Norm threshold used in adaptive projected guidance (APG)." ) + parser.add_argument( + "--color_correction_strength", + type=float, + default=1.0, + help="strength for color correction [0.0 -- 1.0]." + ) + + parser.add_argument( + "--quant", + type=str, + default=None, + help="Quantization type, must be 'int8' or 'fp8'." + ) args = parser.parse_args() _validate_args(args) return args @@ -479,6 +485,7 @@ def run_graio_demo(args): wan_i2v = wan.MultiTalkPipeline( config=cfg, checkpoint_dir=args.ckpt_dir, + quant_dir=args.quant_dir, device_id=device, rank=rank, t5_fsdp=args.t5_fsdp, @@ -486,7 +493,8 @@ def run_graio_demo(args): use_usp=(args.ulysses_size > 1 or args.ring_size > 1), t5_cpu=args.t5_cpu, lora_dir=args.lora_dir, - lora_scales=args.lora_scale + lora_scales=args.lora_scale, + quant=args.quant ) if args.num_persistent_param_in_dit is not None: @@ -498,7 +506,7 @@ def run_graio_demo(args): def generate_video(img2vid_image, img2vid_prompt, n_prompt, img2vid_audio_1, img2vid_audio_2, - sd_steps, seed, text_guide_scale, audio_guide_scale, mode_selector, tts_text, resolution_select): + sd_steps, seed, text_guide_scale, audio_guide_scale, mode_selector, tts_text, resolution_select, human1_voice, human2_voice): input_data = {} input_data["prompt"] = img2vid_prompt input_data["cond_image"] = img2vid_image @@ -508,7 +516,7 @@ def generate_video(img2vid_image, img2vid_prompt, n_prompt, img2vid_audio_1, img elif mode_selector == "Single Person(TTS)": tts_audio = {} tts_audio['text'] = tts_text - tts_audio['human1_voice'] = "weights/Kokoro-82M/voices/af_heart.pt" + tts_audio['human1_voice'] = human1_voice input_data["tts_audio"] = tts_audio elif mode_selector == "Multi Person(Local File, audio add)": person['person1'] = img2vid_audio_1 @@ -521,8 +529,8 @@ def generate_video(img2vid_image, img2vid_prompt, n_prompt, img2vid_audio_1, img else: tts_audio = {} tts_audio['text'] = tts_text - tts_audio['human1_voice'] = "weights/Kokoro-82M/voices/am_adam.pt" - tts_audio['human2_voice'] = "weights/Kokoro-82M/voices/af_heart.pt" + tts_audio['human1_voice'] = human1_voice + tts_audio['human2_voice'] = human2_voice input_data["tts_audio"] = tts_audio input_data["cond_audio"] = person @@ -608,6 +616,7 @@ def generate_video(img2vid_image, img2vid_prompt, n_prompt, img2vid_audio_1, img n_prompt=n_prompt, offload_model=args.offload_model, max_frames_num=args.frame_num if args.mode == 'clip' else 1000, + color_correction_strength = args.color_correction_strength, extra_args=args, ) @@ -619,7 +628,7 @@ def generate_video(img2vid_image, img2vid_prompt, n_prompt, img2vid_audio_1, img args.save_file = f"{args.task}_{args.size.replace('*','x') if sys.platform=='win32' else args.size}_{args.ulysses_size}_{args.ring_size}_{formatted_prompt}_{formatted_time}" logging.info(f"Saving generated video to {args.save_file}.mp4") - save_video_ffmpeg(video, args.save_file, [input_data['video_audio']], high_quality_save=True) + save_video_ffmpeg(video, args.save_file, [input_data['video_audio']], high_quality_save=False) logging.info("Finished.") return args.save_file + '.mp4' @@ -728,6 +737,15 @@ def toggle_audio_mode(mode): maximum=20, value=2.0, step=1) + with gr.Row(): + human1_voice = gr.Textbox( + label="Voice for the left person", + value="weights/Kokoro-82M/voices/am_adam.pt", + ) + human2_voice = gr.Textbox( + label="Voice for right person", + value="weights/Kokoro-82M/voices/af_heart.pt" + ) # with gr.Row(): n_prompt = gr.Textbox( label="Negative Prompt", @@ -755,7 +773,7 @@ def toggle_audio_mode(mode): run_i2v_button.click( fn=generate_video, - inputs=[img2vid_image, img2vid_prompt, n_prompt, img2vid_audio_1, img2vid_audio_2,sd_steps, seed, text_guide_scale, audio_guide_scale, mode_selector, tts_text, resolution_select], + inputs=[img2vid_image, img2vid_prompt, n_prompt, img2vid_audio_1, img2vid_audio_2,sd_steps, seed, text_guide_scale, audio_guide_scale, mode_selector, tts_text, resolution_select, human1_voice, human2_voice], outputs=[result_gallery], ) demo.launch(server_name="0.0.0.0", debug=True, server_port=8418) diff --git a/generate_multitalk.py b/generate_multitalk.py index b3e0e0f..9a3b525 100644 --- a/generate_multitalk.py +++ b/generate_multitalk.py @@ -85,6 +85,11 @@ def _parse_args(): type=str, default=None, help="The path to the Wan checkpoint directory.") + parser.add_argument( + "--quant_dir", + type=str, + default=None, + help="The path to the Wan quant checkpoint directory.") parser.add_argument( "--wav2vec_dir", type=str, @@ -226,7 +231,19 @@ def _parse_args(): default=55, help="Norm threshold used in adaptive projected guidance (APG)." ) + parser.add_argument( + "--color_correction_strength", + type=float, + default=1.0, + help="strength for color correction [0.0 -- 1.0]." + ) + parser.add_argument( + "--quant", + type=str, + default=None, + help="Quantization type, must be 'int8' or 'fp8'." + ) args = parser.parse_args() @@ -565,6 +582,7 @@ def generate(args): wan_i2v = wan.MultiTalkPipeline( config=cfg, checkpoint_dir=args.ckpt_dir, + quant_dir=args.quant_dir, device_id=device, rank=rank, t5_fsdp=args.t5_fsdp, @@ -572,7 +590,8 @@ def generate(args): use_usp=(args.ulysses_size > 1 or args.ring_size > 1), t5_cpu=args.t5_cpu, lora_dir=args.lora_dir, - lora_scales=args.lora_scale + lora_scales=args.lora_scale, + quant=args.quant ) @@ -595,6 +614,7 @@ def generate(args): seed=args.base_seed, offload_model=args.offload_model, max_frames_num=args.frame_num if args.mode == 'clip' else 1000, + color_correction_strength = args.color_correction_strength, extra_args=args, ) @@ -608,7 +628,7 @@ def generate(args): args.save_file = f"{args.task}_{args.size.replace('*','x') if sys.platform=='win32' else args.size}_{args.ulysses_size}_{args.ring_size}_{formatted_prompt}_{formatted_time}" logging.info(f"Saving generated video to {args.save_file}.mp4") - save_video_ffmpeg(video, args.save_file, [input_data['video_audio']], high_quality_save=True) + save_video_ffmpeg(video, args.save_file, [input_data['video_audio']], high_quality_save=False) logging.info("Finished.") diff --git a/requirements.txt b/requirements.txt index ebb2ef9..6710040 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,8 +9,10 @@ easydict ftfy dashscope imageio-ffmpeg +scikit-image loguru gradio>=5.0.0 numpy>=1.23.5,<2 xfuser>=0.4.1 -pyloudnorm \ No newline at end of file +pyloudnorm +optimum-quanto==0.2.6 \ No newline at end of file diff --git a/src/vram_management/layers.py b/src/vram_management/layers.py index ba19056..cc85a6c 100644 --- a/src/vram_management/layers.py +++ b/src/vram_management/layers.py @@ -3,13 +3,20 @@ import torch from src.utils import init_weights_on_device - +import optimum.quanto.nn.qlinear as qlinear def cast_to(weight, dtype, device): r = torch.empty_like(weight, dtype=dtype, device=device) r.copy_(weight) return r +def cast_to_device(weight, device): + if hasattr(weight, '__class__') and 'optimum.quanto' in str(weight.__class__): + return weight.to(device) + else: + r = torch.empty_like(weight, device=device) + r.copy_(weight) + return r class AutoWrappedModule(torch.nn.Module): def __init__( @@ -61,6 +68,63 @@ def forward(self, *args, **kwargs): return module(*args, **kwargs) + +class AutoWrappedQLinear(qlinear.QLinear): + def __init__( + self, + module: qlinear.QLinear, + offload_dtype, + offload_device, + onload_dtype, + onload_device, + computation_dtype, + computation_device, + ): + with init_weights_on_device(device=torch.device("meta")): + super().__init__( + in_features=module.in_features, + out_features=module.out_features, + bias=module.bias is not None, + device=offload_device, + ) + self.weight = module.weight + self.bias = module.bias + self.offload_device = offload_device + + self.onload_device = onload_device + self.computation_device = computation_device + self.state = 0 + + def offload(self): + if self.state == 1 and ( + self.offload_device != self.onload_device + ): + self.to(device=self.offload_device) + self.state = 0 + + def onload(self): + if self.state == 0 and ( + self.offload_device != self.onload_device + ): + self.to(device=self.onload_device) + self.state = 1 + + def forward(self, x, *args, **kwargs): + if ( + self.onload_device == self.computation_device + ): + + return torch.nn.functional.linear(x, self.weight, bias=self.bias) + else: + + qweight = cast_to_device(self.weight, self.computation_device) + bias = ( + None + if self.bias is None + else cast_to_device(self.bias, self.computation_device) + ) + return torch.nn.functional.linear(x, qweight, bias) + class AutoWrappedLinear(torch.nn.Linear): def __init__( self, diff --git a/wan/modules/multitalk_model.py b/wan/modules/multitalk_model.py index 25af83c..91b28ed 100644 --- a/wan/modules/multitalk_model.py +++ b/wan/modules/multitalk_model.py @@ -13,6 +13,13 @@ from .attention import flash_attention, SingleStreamMutiAttention from ..utils.multitalk_utils import get_attn_map_with_target +import logging +try: + from sageattention import sageattn + USE_SAGEATTN = True + logging.info("Using sageattn") +except: + USE_SAGEATTN = False __all__ = ['WanModel'] @@ -144,14 +151,16 @@ def qkv_fn(x): q = rope_apply(q, grid_sizes, freqs) k = rope_apply(k, grid_sizes, freqs) - - x = flash_attention( - q=q, - k=k, - v=v, - k_lens=seq_lens, - window_size=self.window_size - ).type_as(x) + if USE_SAGEATTN: + x = sageattn(q.to(torch.bfloat16), k.to(torch.bfloat16), v, tensor_layout='NHD') + else: + x = flash_attention( + q=q, + k=k, + v=v, + k_lens=seq_lens, + window_size=self.window_size + ).type_as(x) # output x = x.flatten(2) @@ -188,9 +197,13 @@ def forward(self, x, context, context_lens): v = self.v(context).view(b, -1, n, d) k_img = self.norm_k_img(self.k_img(context_img)).view(b, -1, n, d) v_img = self.v_img(context_img).view(b, -1, n, d) - img_x = flash_attention(q, k_img, v_img, k_lens=None) - # compute attention - x = flash_attention(q, k, v, k_lens=context_lens) + if USE_SAGEATTN: + img_x = sageattn(q, k_img, v_img, tensor_layout='NHD') + x = sageattn(q, k, v, tensor_layout='NHD') + else: + img_x = flash_attention(q, k_img, v_img, k_lens=None) + # compute attention + x = flash_attention(q, k, v, k_lens=context_lens) # output x = x.flatten(2) @@ -450,7 +463,8 @@ def __init__(self, vae_scale=4, # vae timedownsample scale norm_input_visual=True, - norm_output_audio=True): + norm_output_audio=True, + weight_init=True): super().__init__() assert model_type == 'i2v', 'MultiTalk model requires your model_type is i2v.' @@ -527,7 +541,17 @@ def __init__(self, # initialize weights - self.init_weights() + if weight_init: + self.init_weights() + + def init_freqs(self): + d = self.dim // self.num_heads + self.freqs = torch.cat([ + rope_params(1024, d - 4 * (d // 6)), + rope_params(1024, 2 * (d // 6)), + rope_params(1024, 2 * (d // 6)) + ], + dim=1) def teacache_init( self, diff --git a/wan/modules/t5.py b/wan/modules/t5.py index c841b04..eb08105 100644 --- a/wan/modules/t5.py +++ b/wan/modules/t5.py @@ -2,11 +2,16 @@ # Copyright 2024-2025 The Alibaba Wan Team Authors. All rights reserved. import logging import math +import json +import os import torch import torch.nn as nn import torch.nn.functional as F +from safetensors.torch import load_file +from optimum.quanto import quantize, freeze, qint8,requantize + from .tokenizers import HuggingfaceTokenizer __all__ = [ @@ -479,7 +484,10 @@ def __init__( checkpoint_path=None, tokenizer_path=None, shard_fn=None, + quant=None, + quant_dir=None ): + assert quant is None or quant in ("int8", "fp8") self.text_len = text_len self.dtype = dtype self.device = device @@ -487,14 +495,28 @@ def __init__( self.tokenizer_path = tokenizer_path # init model - model = umt5_xxl( - encoder_only=True, - return_tokenizer=False, - dtype=dtype, - device=device).eval().requires_grad_(False) logging.info(f'loading {checkpoint_path}') - model.load_state_dict(torch.load(checkpoint_path, map_location='cpu')) + if quant is not None: + with torch.device('meta'): + model = umt5_xxl( + encoder_only=True, + return_tokenizer=False, + dtype=dtype, + device=torch.device('meta')) + logging.info(f'Loading quantized T5 from {os.path.join(quant_dir, "quant_models", f"t5_{quant}.safetensors")}') + model_state_dict = load_file(os.path.join(quant_dir, "quant_models", f"t5_{quant}.safetensors")) + with open(os.path.join(quant_dir, "quant_models", f"t5_map_{quant}.json"), "r") as f: + quantization_map = json.load(f) + requantize(model, model_state_dict, quantization_map, device='cpu') + else: + model = umt5_xxl( + encoder_only=True, + return_tokenizer=False, + dtype=dtype, + device=device).eval().requires_grad_(False) + model.load_state_dict(torch.load(checkpoint_path, map_location='cpu')) self.model = model + self.model.eval().requires_grad_(False) if shard_fn is not None: self.model = shard_fn(self.model, sync_module_states=False) else: diff --git a/wan/multitalk.py b/wan/multitalk.py index c189f64..2685c42 100644 --- a/wan/multitalk.py +++ b/wan/multitalk.py @@ -2,6 +2,7 @@ import gc from inspect import ArgSpec import logging +import json import math import importlib import os @@ -26,16 +27,27 @@ from .modules.multitalk_model import WanModel, WanLayerNorm, WanRMSNorm from .modules.t5 import T5EncoderModel, T5LayerNorm, T5RelativeEmbedding from .modules.vae import WanVAE, CausalConv3d, RMS_norm, Upsample -from .utils.multitalk_utils import MomentumBuffer, adaptive_projected_guidance -from src.vram_management import AutoWrappedLinear, AutoWrappedModule, enable_vram_management +from .utils.multitalk_utils import MomentumBuffer, adaptive_projected_guidance, match_and_blend_colors +from src.vram_management import AutoWrappedQLinear, AutoWrappedLinear, AutoWrappedModule, enable_vram_management from wan.utils.utils import load_torch_file, standardize_lora_key_format, load_lora_for_models, apply_lora from wan.wan_lora import WanLoraWrapper +from safetensors.torch import load_file +from optimum.quanto import quantize, freeze, qint8,requantize +import optimum.quanto.nn.qlinear as qlinear + def torch_gc(): torch.cuda.empty_cache() torch.cuda.ipc_collect() - +def to_param_dtype_fp32only(model, param_dtype): + for module in model.modules(): + for name, param in module.named_parameters(recurse=False): + if param.dtype == torch.float32: + param.data = param.data.to(param_dtype) + for name, buf in module.named_buffers(recurse=False): + if buf.dtype == torch.float32: + module._buffers[name] = buf.to(param_dtype) def resize_and_centercrop(cond_image, target_size): """ Resize image or tensor to the target size without padding. @@ -96,6 +108,7 @@ def __init__( self, config, checkpoint_dir, + quant_dir=None, device_id=0, rank=0, t5_fsdp=False, @@ -106,7 +119,8 @@ def __init__( num_timesteps=1000, use_timestep_transform=True, lora_dir=None, - lora_scales=None + lora_scales=None, + quant = None ): r""" Initializes the image-to-video generation model components. @@ -130,7 +144,11 @@ def __init__( Whether to place T5 model on CPU. Only works without t5_fsdp. init_on_cpu (`bool`, *optional*, defaults to True): Enable initializing Transformer Model on CPU. Only works without FSDP or USP. + quant (`str`, *optional*, defaults to None): + Quantization type, must be 'int8' or 'fp8'. """ + if quant is not None and quant not in ("int8", "fp8"): + raise ValueError("quant must be 'int8', 'fp8', or None(default fp32 model)") self.device = torch.device(f"cuda:{device_id}") self.config = config self.rank = rank @@ -148,6 +166,8 @@ def __init__( checkpoint_path=os.path.join(checkpoint_dir, config.t5_checkpoint), tokenizer_path=os.path.join(checkpoint_dir, config.t5_tokenizer), shard_fn=shard_fn if t5_fsdp else None, + quant=quant, + quant_dir=quant_dir, ) self.vae_stride = config.vae_stride @@ -164,15 +184,34 @@ def __init__( tokenizer_path=os.path.join(checkpoint_dir, config.clip_tokenizer)) logging.info(f"Creating WanModel from {checkpoint_dir}") - self.model = WanModel.from_pretrained(checkpoint_dir) + if quant is not None: + logging.info(f"Loading Quantized MultiTalk from {os.path.join(quant_dir,'quant_models')}") + with torch.device('meta'): + wan_config = json.load(open(os.path.join(checkpoint_dir, "config.json"))) + self.model = WanModel(weight_init=False,**wan_config) + torch_gc() + # load quantized model + if lora_dir is not None: + logging.info(f"Loading Quantized LoRA from {lora_dir[0]}") + model_state_dict = load_file(lora_dir[0]) + map_json_path = os.path.join(os.path.dirname(lora_dir[0]),f"quantization_map_{quant}_FusionX.json") + else: + model_state_dict = load_file(os.path.join(quant_dir,"quant_models", f"dit_model_{quant}.safetensors")) + map_json_path = os.path.join(quant_dir,"quant_models", f"dit_model_map_{quant}.json") + self.model.init_freqs() + with open(map_json_path, "r") as f: + quantization_map = json.load(f) + requantize(self.model, model_state_dict, quantization_map, device='cpu') + else: + self.model = WanModel.from_pretrained(checkpoint_dir) self.model.eval().requires_grad_(False) - - if lora_dir is not None: + to_param_dtype_fp32only(self.model, self.param_dtype) + if lora_dir is not None and quant is None : lora_wrapper = WanLoraWrapper(self.model) for lora_path, lora_scale in zip(lora_dir, lora_scales): lora_name = lora_wrapper.load_lora(lora_path) - lora_wrapper.apply_lora(lora_name, lora_scale) + lora_wrapper.apply_lora(lora_name, lora_scale, param_dtype=self.param_dtype, device=self.device) @@ -197,7 +236,7 @@ def __init__( else: self.sp_size = 1 - self.model.to(self.param_dtype) + if dist.is_initialized(): dist.barrier() @@ -234,6 +273,7 @@ def enable_vram_management(self, num_persistent_param_in_dit=None): enable_vram_management( self.model, module_map={ + qlinear.QLinear: AutoWrappedQLinear, torch.nn.Linear: AutoWrappedLinear, torch.nn.Conv3d: AutoWrappedModule, torch.nn.LayerNorm: AutoWrappedModule, @@ -318,6 +358,7 @@ def generate(self, max_frames_num=1000, face_scale=0.05, progress=True, + color_correction_strength=0.0, extra_args=None): r""" Generates video frames from input image and text prompt using diffusion process. @@ -370,6 +411,11 @@ def generate(self, cond_image = (cond_image - 0.5) * 2 # normalization cond_image = cond_image.to(self.device) # 1 C 1 H W + # Store the original image for color reference if strength > 0 + original_color_reference = None + if color_correction_strength > 0.0: + original_color_reference = cond_image.clone() + # read audio embeddings audio_embedding_path_1 = input_data['cond_audio']['person1'] @@ -575,6 +621,15 @@ def noop_no_sync(): 'ref_target_masks': ref_target_masks } + arg_null_audio = { + 'context': [context], + 'clip_fea': clip_context, + 'seq_len': max_seq_len, + 'y': y, + 'audio': torch.zeros_like(audio_embs)[-1:], + 'ref_target_masks': ref_target_masks + } + arg_null = { 'context': [context_null], @@ -615,30 +670,46 @@ def noop_no_sync(): noise_pred_cond = self.model( latent_model_input, t=timestep, **arg_c)[0] torch_gc() - noise_pred_drop_text = self.model( - latent_model_input, t=timestep, **arg_null_text)[0] - torch_gc() - noise_pred_uncond = self.model( - latent_model_input, t=timestep, **arg_null)[0] - torch_gc() + + if math.isclose(text_guide_scale, 1.0): + noise_pred_drop_audio = self.model( + latent_model_input, t=timestep, **arg_null_audio)[0] + torch_gc() + else: + noise_pred_drop_text = self.model( + latent_model_input, t=timestep, **arg_null_text)[0] + torch_gc() + noise_pred_uncond = self.model( + latent_model_input, t=timestep, **arg_null)[0] + torch_gc() if extra_args.use_apg: # correct update direction - diff_uncond_text = noise_pred_cond - noise_pred_drop_text - diff_uncond_audio = noise_pred_drop_text - noise_pred_uncond - noise_pred = noise_pred_cond + (text_guide_scale - 1) * adaptive_projected_guidance(diff_uncond_text, - noise_pred_cond, - momentum_buffer=text_momentumbuffer, - norm_threshold=extra_args.apg_norm_threshold) \ - + (audio_guide_scale - 1) * adaptive_projected_guidance(diff_uncond_audio, - noise_pred_cond, - momentum_buffer=audio_momentumbuffer, - norm_threshold=extra_args.apg_norm_threshold) + if math.isclose(text_guide_scale, 1.0): + diff_uncond_audio = noise_pred_cond - noise_pred_drop_audio + noise_pred = noise_pred_cond + (audio_guide_scale - 1)* adaptive_projected_guidance(diff_uncond_audio, + noise_pred_cond, + momentum_buffer=audio_momentumbuffer, + norm_threshold=extra_args.apg_norm_threshold) + else: + diff_uncond_text = noise_pred_cond - noise_pred_drop_text + diff_uncond_audio = noise_pred_drop_text - noise_pred_uncond + noise_pred = noise_pred_cond + (text_guide_scale - 1) * adaptive_projected_guidance(diff_uncond_text, + noise_pred_cond, + momentum_buffer=text_momentumbuffer, + norm_threshold=extra_args.apg_norm_threshold) \ + + (audio_guide_scale - 1) * adaptive_projected_guidance(diff_uncond_audio, + noise_pred_cond, + momentum_buffer=audio_momentumbuffer, + norm_threshold=extra_args.apg_norm_threshold) else: # vanilla CFG strategy - noise_pred = noise_pred_uncond + text_guide_scale * ( - noise_pred_cond - noise_pred_drop_text) + \ - audio_guide_scale * (noise_pred_drop_text - noise_pred_uncond) + if math.isclose(text_guide_scale, 1.0): + noise_pred = noise_pred_drop_audio + audio_guide_scale* (noise_pred_cond - noise_pred_drop_audio) + else: + noise_pred = noise_pred_uncond + text_guide_scale * ( + noise_pred_cond - noise_pred_drop_text) + \ + audio_guide_scale * (noise_pred_drop_text - noise_pred_uncond) noise_pred = -noise_pred # update latent @@ -666,6 +737,11 @@ def noop_no_sync(): # cache generated samples videos = torch.stack(videos).cpu() # B C T H W + # >>> START OF COLOR CORRECTION STEP <<< + if color_correction_strength > 0.0 and original_color_reference is not None: + videos = match_and_blend_colors(videos, original_color_reference, color_correction_strength) + # >>> END OF COLOR CORRECTION STEP <<< + if is_first_clip: gen_video_list.append(videos) else: diff --git a/wan/utils/multitalk_utils.py b/wan/utils/multitalk_utils.py index c1fb398..d33be09 100644 --- a/wan/utils/multitalk_utils.py +++ b/wan/utils/multitalk_utils.py @@ -20,7 +20,7 @@ import torchvision import binascii import os.path as osp - +from skimage import color VID_EXTENSIONS = (".mp4", ".avi", ".mov", ".mkv") ASPECT_RATIO_627 = { @@ -354,4 +354,110 @@ def adaptive_projected_guidance( diff = diff * scale_factor diff_parallel, diff_orthogonal = project(diff, pred_cond) normalized_update = diff_orthogonal + eta * diff_parallel - return normalized_update \ No newline at end of file + return normalized_update + + + +def match_and_blend_colors(source_chunk: torch.Tensor, reference_image: torch.Tensor, strength: float) -> torch.Tensor: + """ + Matches the color of a source video chunk to a reference image and blends with the original. + + Args: + source_chunk (torch.Tensor): The video chunk to be color-corrected (B, C, T, H, W) in range [-1, 1]. + Assumes B=1 (batch size of 1). + reference_image (torch.Tensor): The reference image (B, C, 1, H, W) in range [-1, 1]. + Assumes B=1 and T=1 (single reference frame). + strength (float): The strength of the color correction (0.0 to 1.0). + 0.0 means no correction, 1.0 means full correction. + + Returns: + torch.Tensor: The color-corrected and blended video chunk. + """ + # print(f"[match_and_blend_colors] Input source_chunk shape: {source_chunk.shape}, reference_image shape: {reference_image.shape}, strength: {strength}") + + if strength == 0.0: + # print(f"[match_and_blend_colors] Strength is 0, returning original source_chunk.") + return source_chunk + + if not 0.0 <= strength <= 1.0: + raise ValueError(f"Strength must be between 0.0 and 1.0, got {strength}") + + device = source_chunk.device + dtype = source_chunk.dtype + + # Squeeze batch dimension, permute to T, H, W, C for skimage + # Source: (1, C, T, H, W) -> (T, H, W, C) + source_np = source_chunk.squeeze(0).permute(1, 2, 3, 0).cpu().numpy() + # Reference: (1, C, 1, H, W) -> (H, W, C) + ref_np = reference_image.squeeze(0).squeeze(1).permute(1, 2, 0).cpu().numpy() # Squeeze T dimension as well + + # Normalize from [-1, 1] to [0, 1] for skimage + source_np_01 = (source_np + 1.0) / 2.0 + ref_np_01 = (ref_np + 1.0) / 2.0 + + # Clip to ensure values are strictly in [0, 1] after potential float precision issues + source_np_01 = np.clip(source_np_01, 0.0, 1.0) + ref_np_01 = np.clip(ref_np_01, 0.0, 1.0) + + # Convert reference to Lab + try: + ref_lab = color.rgb2lab(ref_np_01) + except ValueError as e: + # Handle potential errors if image data is not valid for conversion + print(f"Warning: Could not convert reference image to Lab: {e}. Skipping color correction for this chunk.") + return source_chunk + + + corrected_frames_np_01 = [] + for i in range(source_np_01.shape[0]): # Iterate over time (T) + source_frame_rgb_01 = source_np_01[i] + + try: + source_lab = color.rgb2lab(source_frame_rgb_01) + except ValueError as e: + print(f"Warning: Could not convert source frame {i} to Lab: {e}. Using original frame.") + corrected_frames_np_01.append(source_frame_rgb_01) + continue + + corrected_lab_frame = source_lab.copy() + + # Perform color transfer for L, a, b channels + for j in range(3): # L, a, b + mean_src, std_src = source_lab[:, :, j].mean(), source_lab[:, :, j].std() + mean_ref, std_ref = ref_lab[:, :, j].mean(), ref_lab[:, :, j].std() + + # Avoid division by zero if std_src is 0 + if std_src == 0: + # If source channel has no variation, keep it as is, but shift by reference mean + # This case is debatable, could also just copy source or target mean. + # Shifting by target mean helps if source is flat but target isn't. + corrected_lab_frame[:, :, j] = mean_ref + else: + corrected_lab_frame[:, :, j] = (corrected_lab_frame[:, :, j] - mean_src) * (std_ref / std_src) + mean_ref + + try: + fully_corrected_frame_rgb_01 = color.lab2rgb(corrected_lab_frame) + except ValueError as e: + print(f"Warning: Could not convert corrected frame {i} back to RGB: {e}. Using original frame.") + corrected_frames_np_01.append(source_frame_rgb_01) + continue + + # Clip again after lab2rgb as it can go slightly out of [0,1] + fully_corrected_frame_rgb_01 = np.clip(fully_corrected_frame_rgb_01, 0.0, 1.0) + + # Blend with original source frame (in [0,1] RGB) + blended_frame_rgb_01 = (1 - strength) * source_frame_rgb_01 + strength * fully_corrected_frame_rgb_01 + corrected_frames_np_01.append(blended_frame_rgb_01) + + corrected_chunk_np_01 = np.stack(corrected_frames_np_01, axis=0) + + # Convert back to [-1, 1] + corrected_chunk_np_minus1_1 = (corrected_chunk_np_01 * 2.0) - 1.0 + + # Permute back to (C, T, H, W), add batch dim, and convert to original torch.Tensor type and device + # (T, H, W, C) -> (C, T, H, W) + corrected_chunk_tensor = torch.from_numpy(corrected_chunk_np_minus1_1).permute(3, 0, 1, 2).unsqueeze(0) + corrected_chunk_tensor = corrected_chunk_tensor.contiguous() # Ensure contiguous memory layout + output_tensor = corrected_chunk_tensor.to(device=device, dtype=dtype) + # print(f"[match_and_blend_colors] Output tensor shape: {output_tensor.shape}") + return output_tensor diff --git a/wan/wan_lora.py b/wan/wan_lora.py index 7ffdc00..e453f2c 100644 --- a/wan/wan_lora.py +++ b/wan/wan_lora.py @@ -4,6 +4,7 @@ from loguru import logger import gc from functools import lru_cache +from tqdm import tqdm @lru_cache(maxsize=None) def GET_DTYPE(): @@ -14,7 +15,7 @@ class WanLoraWrapper: def __init__(self, wan_model): self.model = wan_model self.lora_metadata = {} - self.override_dict = {} # On CPU + # self.override_dict = {} # On CPU def load_lora(self, lora_path, lora_name=None): if lora_name is None: @@ -29,36 +30,37 @@ def load_lora(self, lora_path, lora_name=None): return lora_name - def _load_lora_file(self, file_path): + def _load_lora_file(self, file_path, param_dtype): with safe_open(file_path, framework="pt") as f: - tensor_dict = {key: f.get_tensor(key).to(torch.bfloat16) for key in f.keys()} + tensor_dict = {key: f.get_tensor(key).to(param_dtype) for key in f.keys()} return tensor_dict - def apply_lora(self, lora_name, alpha=1.0): + def apply_lora(self, lora_name, alpha=1.0, param_dtype=torch.bfloat16, device='cpu'): if lora_name not in self.lora_metadata: logger.info(f"LoRA {lora_name} not found. Please load it first.") - # if hasattr(self.model, "current_lora") and self.model.current_lora: - # self.remove_lora() - # import ipdb - # ipdb.set_trace() - # if not hasattr(self.model, "original_weight_dict"): - self.model.original_weight_dict = {} - for k, v in self.model.named_parameters(): - self.model.original_weight_dict[k] = v - lora_weights = self._load_lora_file(self.lora_metadata[lora_name]["path"]) - weight_dict = self.model.original_weight_dict - self._apply_lora_weights(weight_dict, lora_weights, alpha) + lora_weights = self._load_lora_file(self.lora_metadata[lora_name]["path"], param_dtype) + # weight_dict = self.model.original_weight_dict + self._apply_lora_weights(lora_weights, alpha, device) # self.model._init_weights(weight_dict) logger.info(f"Applied LoRA: {lora_name} with alpha={alpha}") return True + def get_parameter_by_name(self, model, param_name): + parts = param_name.split('.') + current = model + for part in parts: + if part.isdigit(): + current = current[int(part)] + else: + current = getattr(current, part) + return current @torch.no_grad() - def _apply_lora_weights(self, weight_dict, lora_weights, alpha): + def _apply_lora_weights(self, lora_weights, alpha, device): lora_pairs = {} prefix = "diffusion_model." @@ -76,22 +78,25 @@ def _apply_lora_weights(self, weight_dict, lora_weights, alpha): lora_pairs[base_name] = (key) applied_count = 0 - for name, param in weight_dict.items(): - if name in lora_pairs: - if name not in self.override_dict: - self.override_dict[name] = param.detach().clone().cpu() - - if len(lora_pairs[name])==2: - name_lora_A, name_lora_B = lora_pairs[name] - lora_A = lora_weights[name_lora_A].to(param.device, param.dtype) - lora_B = lora_weights[name_lora_B].to(param.device, param.dtype) - delta = torch.matmul(lora_B, lora_A) * alpha - param.add_(delta) - else: - name_lora = lora_pairs[name] - delta = lora_weights[name_lora]* alpha - param.add_(delta) - applied_count += 1 + for name in tqdm(lora_pairs.keys(), desc="Loading LoRA weights"): + param = self.get_parameter_by_name(self.model, name) + if device == 'cpu': + dtype = torch.float32 + else: + dtype = param.dtype + if isinstance(lora_pairs[name], tuple): + name_lora_A, name_lora_B = lora_pairs[name] + lora_A = lora_weights[name_lora_A].to(device, dtype) + lora_B = lora_weights[name_lora_B].to(device, dtype) + delta = torch.matmul(lora_B, lora_A) * alpha + delta = delta.to(param.device, param.dtype) + param.add_(delta) + else: + name_lora = lora_pairs[name] + delta = lora_weights[name_lora].to(param.device, dtype)* alpha + delta = delta.to(param.device, param.dtype) + param.add_(delta) + applied_count += 1 logger.info(f"Applied {applied_count} LoRA weight adjustments") From 5f767f39013175b2f698da9b5ea3769f4d06f2cd Mon Sep 17 00:00:00 2001 From: yongzhang6782 Date: Sat, 12 Jul 2025 09:45:39 +0800 Subject: [PATCH 18/25] Update README.md update info --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5520afe..7bf8240 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,7 @@ We propose **MultiTalk** , a novel framework for audio-driven multi-person conve ## 🔥 Latest News -* July 11, 2025: 🔥🔥 `MultiTalk` supports INT8 quantization and CFG strategy updation(with lora). +* July 11, 2025: 🔥🔥 `MultiTalk` supports INT8 [quantization](https://github.com/huggingface/optimum-quanto) and [SageAttention2.2](https://github.com/thu-ml/SageAttention), and updates the CFG strategy (2 NFE per step) for FusionX LoRA, * July 01, 2025: 🔥🔥 `MultiTalk` supports input audios with TTS, [FusioniX](https://huggingface.co/vrgamedevgirl84/Wan14BT2VFusioniX/blob/main/FusionX_LoRa/Wan2.1_I2V_14B_FusionX_LoRA.safetensors) and [lightx2v](https://huggingface.co/Kijai/WanVideo_comfy/blob/main/Wan21_T2V_14B_lightx2v_cfg_step_distill_lora_rank32.safetensors) LoRA acceleration (requires only 4~8 steps), and Gradio. * June 14, 2025: 🔥🔥 We release `MultiTalk` with support for `multi-GPU inference`, `teacache acceleration`, `APG` and `low-VRAM inference` (enabling 480P video generation on a single RTX 4090). [APG](https://arxiv.org/abs/2410.02416) is used to alleviate the color error accumulation in long video generation. TeaCache is capable of increasing speed by approximately 2~3x. * June 9, 2025: 🔥🔥 We release the [weights](https://huggingface.co/MeiGen-AI/MeiGen-MultiTalk) and inference code of **MultiTalk** From 88950872d36a5bfad6c497512e29d6161ef8bcfc Mon Sep 17 00:00:00 2001 From: Zhe Kong <43921423+kongzhecn@users.noreply.github.com> Date: Sat, 12 Jul 2025 21:34:45 +0800 Subject: [PATCH 19/25] Add files via upload --- assets/none_quant_efficiency.png | Bin 0 -> 108633 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/none_quant_efficiency.png diff --git a/assets/none_quant_efficiency.png b/assets/none_quant_efficiency.png new file mode 100644 index 0000000000000000000000000000000000000000..b83a166a2db9c20eb836d2356ec12e48677c3b6c GIT binary patch literal 108633 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%0A^cx7roA**zA6uWdhozBW6Kd#77ix8 zVqYBYQ(jp0L~djFR(kL+@vRs47=dFHyx}-{`J@sW8zJqaez6s9+SQzPMmE=dtJF^Z zH))idD*VN+Chr;$?ACTU)j|s+Jk9s4cfWe~oC@@(+Ds~9F+clCeA8;xY8&OagM5Ry zqR%+>Msvd}Y*dDWgrepZ^CQm`P41-FJ587k0s;ACedJI%{Cx5ZoX+ z^bs^(tu0GC>uY&4GhynR^g3@OG`*&&kQ!I_Rh?AoAp6{gAY<;1ke(OV9yh@-Zb?63 zKedME{SUW8NN|zD>D(l-36dvgu0qt2;@#pl#XPSQ`bQ(ua_fs0g>XWb^(VcQ14N?6 zy$v_`&zzZWXY2L-Bc1BNU-t;)EV-J<3zFTXo?{#0l=+nTpi`KFc>J;Yj53|u;-l~< zNbXLabUJ5e2`q4=hg?ZFPs-$h=2R#D1KWw+kA<$*)X>B6@Vo2`vvcY!6{ok8mDz^7 z#gy4PR}86!M$zIhAF}!CS?>sw1X<|ropdi2xdE)!V6j22! zM~jJI*RF+L@{Of`8d0O99OU*V?Hz1BPL=S1&-sz7+4Zr7JrOlvk~E+LeC!I1q8?f# zrrO-*yvX__tN30@12pF5(WfS~PGz<&tg6d(3)v7R`9C0%NK1@)fw9EdkwHn>hlJ>MX;WOH=XmN?GbeFs7!$kWkmtr(UtL<(dfvjnVTYq zR&U$7#I5a5UZf~7_SEklVzp1 zU(jXEgslm)=&jU91bC?8V&gd8K`=rZWF8D8HY*jS+rQP%W@DmhpPp#)2G?_x_6aCfE@lHDv; z*8U9_8He(Z!DXc74j9QW@QbPJChJRM3O8}l%m@l1GWWQOj3YZj26tqHYXHNZu+7pQ zR;}5Ql}dKTjJWopVCq;Xs+u{O6&C3sxS!=bZ881=;!>RUn<^%4LI3^re)|w9m0wIk z328n>=yOP2h0vcEbXQiI5p6Ta7{PZtYs`RbrCSEZlV-b-JQOxBzAS}?QzvtKOfm85x<{RIwQt>qABw`$I z_ct>bc+5yE8_4c8e+RLO9TdHKQP<_>WhMXXIsprk{{|YD?aZRAn~l*XV6x#hx>_tj_Z$Qy zW|)(Wgb^Ke6vU+kCXqk3DgDPNZ3d18hhK`MSEc6Ue5-@>;#Zl#n*&VtcCf z-@dVZKcjzU_){}ty>xl0xXV{XSGJi4HGL0(x#Jk5sWoo#{$7t{VVa+!#(pQnb$51?q8z5Y_ju?`4$C-cqmge zR4nDDL7WDJ(Uh3H=lcb09<6%hFTrjDEzZ~iZU6O1A7v_$eX9UY0=2D`?2#^oR98Mc ziY0(W1_G3~o3bpkWb+0?ig?WOJUK}K;^y&Oo4k~2!H6$X%*KCd=q@X$oH*H@6t$mO zQx&uDkd$%SaInwBT*yM7RbIhjRB*J$He_kYbELc@<*%f*`GCxx-_r-dgm`DcoZVCi z&V@Zf7^N3Pr)D*=@t?8S4PR~_n{##pOspHcccaU(sCt24I8XObL670h2>*ATdfC-q zy&g{S`v2cf!bviSnq#s(jS6iRuh;Dpckt&!PVOj~%g<@wx1-1;6W7(cwOk;nph8+Z z0_uO}6O8%d7N!)Y zRIeGX&4*q)CLtyG@LCzVP~w)_66L(pNT zGLxKuXY->UM?;M=0Wl(&f}RLZY2a+Fc|sdIThGe)Mz^@NLj-S=WSiM(jP0Og?TE$t zJbc!iJJ!v48FrCTcx5xH!co#RX3WOWc*Z{ENMvLEM|oP?vfBCI0*SIoy0WQ=qdfnr z;`XLCh*eIw1J0rx#5g&*H8c|`ID15Tfb}e>Ol+5X$AGfRjpj}VdyV3X!?B($(%+g6 zy~jiQn5#k*P9v<1yGWlHdgqw&MbbJKbgli;HeQTeOD-~+=CAqRqyc&gRp6@1F6iLo zLucKqXIarA&adq_dxzK5$Rl!}CznU6=lhJ@Lq^3WP*SULnTPLs`HK(s_WK6W$`-D& zFqi!s+!CIOGp@~|9r|tBX_E`h9Mz3J=5p9lz9<=<+jo@`Gj4m`;O{}6lAqtu~qIKN_fHI3C)_W=+AtRzc>+3FE@=M(ouY5C5$c@hs6Zc-IQ>yBx9`u!Y7iN) zmF*+DYT>I||FzEuYu;8RLS$TsMm1)G z;y!!cwn*>cw!yy0P_rxWv@R&WVxT#9kFPsEGP_bOo}<)ei4Vb3MoHq*uIueQy66p4 z(g2qIqI{L6mkQXOD|`&L@LnFP#Go?F0^5G5mlqQz1RPCvW&F`UU`kG|cJ^uOWrHNf zY(J3R!%`mf7=GD@W0>B!{2UFmrn(Vhh>jOtP_<+vc`k3B-L}U(Z9Ha>lYoc^Jlw(D zsmjHX?YG``Be3|*;@i=QV~2Vcld2m6W`_QC`%B$_mAuqYC9LOhs=nV9I2R7|_%V2B zWF``lqxmb}jvM4}&RC>V^1A?EH`?uJ*f37FRrUL9RmIV5z;j8^al*(nMsEW}9b+*{ z!MXTgLO1GAOyqBW0U*XG04LD;)#wNo1yRnKiLzg(vx(i8HSKUr-W>wQ#0NE3}Tbk`s19# zJ-D7hL<7Hud`7|EJF1`uPIf=Rkj9huGBnvp{AK#GD zw%NIXeAoI6`*Cl4@0m=*i$S6vOdZf}~@91M9aFQAm$!2U}*M?_=h6NER=8W&jZJYBhx(}2^OHo7X3 zw%^))=hS%a0*m=>2TQ+U+THkeF?Z*2v#`5M(M2=oZ%Xm3sc|jDQF8-fWCrhyI5upu zs_XtTiIb61VkD-%o!{h`SkV*?=_fs!XFA|n#_%elVhrGG%VE5E2fJ#7N+*sxhSaq{ zovCAOFnZ=%tydrN{)NZjk5%_kyNhSzz}OunqNgDd@d7C%AqAp|KMl%Lel8bmrv5Z| zlZZAKlj=A(c5jYPRy@3F^=+_iKQS#tYQOhO6xMx&*gJ*qtShvmUDC$-!}SyQw^i12 zpInhlByO8^uNlcX&Js60ce9UndtN={xm)-2IM=yB`#Pr7f%>F9cX;{1nTX?reYa7mEM7z%VbbMTO;xDAN0+e-+{y zEOyLdwqGJ-yC8)$QASD{7RRxghdWOgHZ{(HULP3wz@{B#l2czUmK~@6^#Z7ia1IEW zIiK?cEgp;D&H64J@pUQuB?!Y>kqce^s)1%h{_shxMD6;wtcz+ z>9@0Z-o?K&L01?pfFh^UNzeyibN&=2H`D$3-6& zH*;MH>~r-{5y&-SgvV$ri!W!5vr=-0%8sVaR{Y{?8$3+%hwi{!P(cY+-Lu)-v3p8w zxQ{o>z5TIwpN@L=J@y7NWI%%TeDc?a;X-&Kv%}m*jLQ@4$daCv+?4&H>8B4Ijz3{7 zb$vCa3gyy1wEVj{{z_5rYfV8Jux@tK(bENeTQ_7hKeXIHe%$!~q>~2`*;_c*?l6I9 z$;B6j4yJ3qIfG5H6_4R)6gBSg%U2o+e(Q#*yE|4!QcYylOowW|&+kp*sdflXalRCP6>mc-p@WPR!3F~HTN&oW0(g+Ant$TpM zJ?{8M?OlG(R~k&kTeMi(xN6NQo*g>>^2V41Tqx=3{7Zi!wk+QN`RH|50;h&&s-csY zUN3Mc^`gZ+05+!_(D*^&>?0&(q2Qed^G1Kf$VRzaM|`QHrlOTu5&u!xX`c0I?WpY5 z{}ga)Vt?Y_W)Kr7y~7hzJ}7)f+zO7p5|Q~qWdF0Y?Ev{p?Ap+SRRgIxa9q}RDlfFv zr_$2<3uJ%;k8LXkbW0Z?g0lPONdc~Ht~t3ngOPji~nn@|$L zOAx|*_KdK0vr_3ba1P3=y1V~EJrY5UfBLuUURbjaw+=3R$fx^AEOyL~((R1hFy2)r zKF>hPfK#rj+Lqs^Ga+~(?#W5E({x7pGa(h8GJQ%f0?S)7IqrvP9L{`QEVrp?cEwtv zsBQiq#=bhP$?pwY5CIbql@g}#m5`E_Mv;4 zNO!|FVx!(?p#DDZ=l$pXbFgR6iTm8=y6k_Qma1Kw3n~!@yPDMeVw)a>-c!XS? zw=qD*ZE|q_((2^$VZPQ%gaZAHzhFtYI1BrxXykX!er9WxSc8W7&sB zgzp5}6|{(V=cFz+d{$v3yO3d@?`f83u4GKSl3`E8Le+mp7YC|T%|k76YTuW;e9A?O zVlzSyw1(qe|4CONL8Jr{o?fv_#aCazY7R1HP>YbsM5Rt@1A=AIx1$H`8Y|wHR$mOi zYq(`8*Iub7u$XQn^1eGvZNr|dHv55(O$;a!L#9(JX)+mC0wXP{LRNJQt6oF&%sy?N z^{CxZN7L!vY46G9amIDCrGkMA%Qb9i;f)#_;R)@Aom)rm!ojs2Qyh=tdz@SI=E9Td z?DATh?d{lssI{yI&Bl!PtOcU6SiR3SI%5Q<=pBBxTun`Y>4ccIWuks>$9eQ|!hUh% zwLN4^obT{DjO?%@s{VCqW;-OPM>ZGap@yb|ENc(=VPBxQtq3m_@sO-;?&f0q`Sz0B zU@u!qE#p67YsVv#uOJ_d)R(o7A62jRfz5(F6NzT<{GRYTjR5~A_GyNUZnLFQ0LIj& zeB~*q-!Us;Fh>2xu6fO_RMZ0;!+E?X4#_HSb&EOB7mYp0{VJa=G;KAi({o82 zSrFmE0DG!&8W9fVQw|jxRvg(c6>iZ0DRL3;_bUFmCGe{3B6>3Q?$@*U#igG9Xwce6 zc2tOS2!2z4f)f&Lwc5{aw$|bww_d`9aqa$Bvb8RkhGQ$WX7+qvZ~1;B{*LSFYrF5w zmRU=S=zWXxElAr!sZcFp=C77dtejN%!Oek!hTV z?=jECSgkW4q&VpXr>Kte0!TB$0Bc1`lKyshcY9YY?;>t|LIi=z;KEODMJ>Trgfn>2 zs2!=>9E5#^x#l-Q{H z(BsF2d{PyEigXr^X`aasDsFmXQmc(jAODk2+y)By*>3Lo^$b4pnrNx$hYsZ8*5+*{ zP{8462+aZ6pvtjjo-kvABkSb0pvculQ`Y2_p7YL5ud$`poLA12`L#OjPKY_A+#jd9 zle&A(_nyElmnZXQ(q~7nw2ag++o~{KC82r0%QVQ@Qr;B}{xXKD{j{zBqgi0x6pEYT z3N1!{*TTSTdF-0^sW}DI42kFQb<}$O(jh6%s~cvnKa|1L*!wfMaIVtY+6%v8v!e7@ zRt7Oq**C*m-q)-eKS%0CA;a>s$}~NjqjG!iW4uctiN9#AfU>lZP&s282%AJ*t&~MC zq?T6rRdOHvvUBj@ll0r_`k)P$M#aSPa`Rr2;*TP4voW6?7rTlhGuvK=4f3j)?mu6! zx?ms;)*6z^s2gf`{`I3Sa@R>>tcPN(yh8@Bu_yHEtvQS2Ck2YygZnom%@9L#RQL>L z>>~D{&un`D<)SsN=cd?pb@Y96rBxB{MqmPYC$|7DC6W(;wke5e?Y#nhBn^!hE;U<` zmlPli)(6h2K8te6Bg}eZXta*sKgiFU&2J5aYo%xP3~TRlEf*z2HGCY*B-a?gS#L!B z@;^%gCzwFf>N*aMHpxL=DHISC`pvUxU`T6!5PIV(a>`s{cfzt|QDIBPPI?rx{hK0S z&!HzH-vkCN86H=c7><=LKCX9`Ncn6(Eh>6NYbYo5q_ZP+SAYOS&9P&Eq_d})Yg64; z>`Mq}Fu?nA!)v&$c+#Bsl%8538uLqwd(>9_P#M47GgZ~CQ+Yp3G_?LZX!7wLqj_uP zywxY;eDOfJFpuwm@jM6{4w8CV#nvbS+K8?9kdqLIK(kkn}mH@ zH>2q-hKo%`I;#;6%uOzkS%L?P8<_TIjE)-Np6?NvxZExkw&pvb_!WBJew_i16z)xI z?T4_+#IU&@gB!5N5-7?DWUx61di1wW%86|AY&U+F``}*%Mw;^kX5g%uWZyYY+Ub|@0`}{&?`PFVdo#w<1U=D zgBn@y{E)KCHRU<#irNl?|H|D`lKz`Br}uBH-f{iXxtNmg z;`C9v=hbDbZ}UprYgnyM-2fZE6{h>!#&e(&1|epx!mr6oWNjRK>%AMfdvlioHt#DB z(`*(*iN|E}e1QjCuq9ZuUl*D0Zww|Ke>N2n;cUZqU|*g`}kA;#jO%+s!{$2#c?`7=60dcA>T?_dI9 z3&>{8D#8AzU)cChX=I5|gpxED!@n3r3&AmEf=67kYC{s z7@^%$t1q516HAQMe1N$aOdI?%XrVs%fP%TN2Yz2-6*Xoqrn?M7g(JQ{Il{rz;*kmnBv>8zsHtTq;qk?EHf6F z7!hJWfU#FBYgJ%Cajr#$VY=B5MBdVW<79Z#H~ zWIj9kMggkjLMOh`GAA-cH~yw{<8QB~u!vUri3))kBoFuuu6B*rOFUyYQg0rDiFkB} zGiM~1%X}N!N&kDKji=FzJ+j9+5)wX@8~M9_4byibsM&5Xj>fojeAMTz06ig0F|Iv_ zVN*b>@0}@f`9d;F#OK)mRD@n3!?l!;Ob2ITQuh=+g{$ed-gN8k;9o2f?I^9Ed{4eH zQt=+)?$vFm1TiWs0FU3Ba!)Gf?TmBR(mAmnlcylTi?Z;bqjN7jJ9z53(C9FwG8F^h zHb7b6>1_Z(Dvmv%>1?*}H!#X|MVK&Cfb2K!m-xvIU|E{l$dUjR=#e z?~K*YoJe$?HmKL`%g$solUg~50%Q*gTRZ=D`;m!0ne~ys6gD;*JkzqE(4aJ76Ok5* zVihfn5?g*J`}jHI^`9gN{SJYK7f_LeA*ZOsrAH>#WJ56lpxcGtvb#0#fsHa`m4lxP zzv4f@)>}ALLmnH&^_Q^a3oY@WpCO=>i4aa-%;Blb{fsO%p4jh#!--Fl?&&Rc=ljI=<+A{OU- z%x`$cCKY2WO!M-)HHa=Bgzkun{9FA--L*kqXs{MQK>cLlYLk=aU~Zj$cVTXe!YDKV zez&B6gJfSQPmI*q3wF6+7pAr{NJru+-yU!&TN@`L!0QlYGk(`>C4(>A?oFE*yX?r_ zx;cTA>bjunVk=|MatT%;REEq=p;ptQT6b3VzZ=P-VxtR;dsP4M%v!zd=y4CG2jtQn z4L5L9GrBar>IgRM3DTs~)MpV`o{nd2D3c^OZkyT!219=s2aMut6+MLhRR4dVY=d7NXp zL|ac`C_!<{yHl_yCX$_JCUsXO?l8Q=QhxT9?8vpXFsF1~Q=4p|{~h|~%gHrlho`6B z%K+VU{w_;8(0~4Yvd~giUYf+;8#_R09O~QW7$wl>FCk%(wLMu+_(ESJ?}lyPJ)EUx zVmsF9`}CvM+*i1{$HYTlspGoSoqVYuBK3MHe+d}2AEns>0=n-J52||_Vm(P0A1Az5 zi(~Qmq3@*p^YJRoFx*BY7*WvoAmc z;GQA8lLe%ZFSos5fVr4kOZ_XDl%)BJryzfSCH;%0fYHpb#-f6(inPneSqthk?p;emsza2-}Oslx6jSN0{-CNAv~&s+E_gtVe+V)YB!y`4A)tm!YzjA=TR& zd%1=RjB}3QOAacU#$2=v^U*j@OzG)iG*E!e>Mh$P)@RK?v3F-o2Y+?#-oO>e%GCdp zrm1o+nA4B>o0jZ&AP1HUttPJ`yi>Lr5yZDv@MNm~UfvmGOSlxj(T!1!{rlc^#WTlGE_Mg#8KX;WbLjVR;oUlij8JH!Zp@J&CI&}D58wnY zh_j+(p9PC>5`~!;OKcg-|0+&tx(c28jb*Q*x5Wggs`Wj+6Y@AAAx?Rk?HW!WCbTmz z%Uh-=3x>G_72jvfmF-Co(=;3qHxmy}N>?X>S>oEn! z`ccL-<2K_{iH#wK;3e40*lHkOa&qMjAiTVX=2(Q7<=eoD;j3k|hfnRTTwy$RybYbl z-z^TUYf(npdA!|xJw`|%jl_DKW2+(kXGb>(mjjFz90%1;U&F+P@Zy)=gtRASKteG0 z>+^^82f&G{OrL_wAVZ>sm$ri;t)Na7{Q+0oF_d1)`%kdHSPeM7x$M)^FaQ`t@^<^| zE`CbgfUx-Ly3SouFP%%NGD1vUC$03;%!KtM%MsIfqpvyelKk0F&Smdga z%QAmAnCWa&OQ(z?u3T%>5EYKxnPOOZf%?kKCWhj(vaXC0K4sQ9A@-*u!`TovVQW1t z%S=mWo$wF$DHaz$KRrg!9^Gg&iz?tB(6eg(kewIuXVV`zOTwHsaK-tZ(b-?mQtA~J zvNpOMb6nf>n18M2c2YB?2MVGk6i4$N+6;%hKWT2BUbJ){QN7~wZ&^UwNgY4lwJ<5it_iU*bK+HWaRyc)gPJM zCEJ7&gnIW%V2ANIRE|19a^ite`bO?x^Sg$Jw^RB_mS~k3g1$&$Vxj{>PH$TQWg5QT zR|?DS&r@w*-dr^J>=k&B?)+B%ris;H*NmmCdvjMt5@$`B5)cUVw+u~*-!m@1oPA2X z`^dzThVziJ#q$$RqtmV-g8GGgs_;&L%XZL^H|ANR;}ijZ$s2mbR@_B zyjL)mE%Ql0HN!U{XqMP(8G-8p1!CE4x^+G5gaqgq23D!i$Osf zVi~v*Wf%Dm7rBY6*vX%c{qXm%zwmQG2jHr_n)+Hl25fkS&7MvRKhkU!3RlN4Hsxx} zaPn&)AEhWqp1NKa3DV)C&^P|yisx-Uun2?+r*o~$Ft=3CrCXLF`8e##f6LzsTWBeR zzhJ_)1IL(p*GLMp6!4L!-4&qW^fZ>rteaM1X}JABVzl~xH`TFJ$(1L1A?iwy=b3Ny z6h~ge(3R<(GXUjNC%)2L%VXSJt3y-3uU%^xxcH1^Lkfvo4<%UC3fa_G>1g#k=XjWv zZeu}KblYLhV(L}G%`yFDDv;s3>^n89-)^7|ta`gD^U&1wpQMaLcbDFm*c@=A!e5sc zbj2`JgC=oHkrvk%iaNuR4Rs{LC9CR+Rwge~$^ys&MAvBzjRfr5-&M8UO6}Ox+6gbGaAXlsGVap;Q zi+;cVu$4dmfF-t=&^Dnr<)Fwra3B5I@oAbBI`r@PFyQXl()iOdjS!7+t3Z6Tufk$F zP1VQd1Lu(VGeaoCkMorOf04Ko{=Y?JaA)JVW$A)4Q_bp+!PxCc*P7;HK7r6W8j2O; z0eO}!0Qsf2|Ihr4Xc{Y`>oq3m520!X0$CP4Vy4$$8ni!R9QRwV`-&a$=>Ig@P*+3(-(w!j6p=xzp| zHR+int3;6NL-kV+){M>TDo_qNpd=|eK(Xm}UkA4^8QN?_5X-90^F``3?pX z5-27Rn`BSqj~88(1XMkKkGSUB80F#*CyoypM^V_#a|fSg?}mQJY?}z0k&!H>_>FfS zR+ITwDZRKCT&>8xGs#Ig}XZ(Dz~U06Y%y!<>XVVK<;9qx57GY=4o z(_iWq2UIdn?g*>7+Xk+Y*bV4+ypEZdS`gPPO&;-$zpnE3#3vyINC}djUowG>S;Lx zYS^1pIJz%>I~gtzBQp;KD8wz$S$+}%+ShwC8=)i$Fk{4uhQ@xSpgoEjTh^(_(OChQ zao%8y0;Ka^48+2!dy@DcIxzBNf#Y=O-J$}z55QSlcmj2t@43PbO6R|hN zvQ9V3azLEY7v&WD+W!fi-~hd|WSgG|TGKsQuX#e9o(GrV?oiE@OJM@uO+<2D;EI-~ zMb8B~@`N8mu>VnMxJsh4O?>ls+^XzqQB#8K(TuEphhx~AGIRL6P^#4lH%=;WH&Vw+ zXF2BM6UsFshUJU}s^|vD=p(u*yP(EazY~bJt=+*^^pDmsOG#p++#NMUmhe_@HA>_l(@YK2nQ9yCeMO~654L~ zbOJMz2qXzGYXgk6G~0k&39<^%0O*GU6o7U|I}XQyz}^DOZe>g6-SJ6sG0Tb@zoQtg znC+{G9uUQvBrC9{D-Xxn_W(hL;m4-ARJMCq*<);IAmTz%V1GSP0w;k;7uBu~=*bK; zGmR}O@=jDAD8O;zT0>zeUxN{k!Cg0CA?@L{F%fjVJ&js3rSN!qPm$zb!d^UMDES>d z!HDuPQUfPx+$SnKfd1LFJTv(Sm*qeYIhYq~V6a`@Z8$!RiE%u?yPh{mn)xwo=giR% z%Wr^LY8>GI;Y~~KVu{-BJay8@3nT|gi17Oa=`h|Vnf+_f`W9d>iXA_H3?<`mI5}i8 z2y7%0rJ4hbgm!HENefb0RRFbZUF%Jq`R?2E(e4sUPHrGv8in2GR^K_AMpFePF;%nF z$fTc==CIVUjL^m8tT4z(m9;)}Y=3!77inFiby}f9n@X@2kcP15*cUfX{P1G(+uKMF zxV-n8{AVM~!8g#s11vyBR$K*)%ivANA2jX!fFQ`c!_mA0Ba2*!K+*HgIL9BPRa^A3 zLeYf}H2XxZf$V}V(ihc~X;nW9$8W09l&KCc2fOHP^q9l^o1e~?l=v_Iz92Ck2Lm|8 zYPXESRsbE0cB1r;i`N0@a8YSLd7qCdc{A&>zIjb|iS#7NgoYJWbrJfsRvdYebWidy zwZ0Q#7vg!rl9fsrqtakmJ0a-zRnMZ~>*nmqwL=qb>Pc;P4y1^PdHniN9eDJA@ z6#;5{Snpd+7|KT!B84D*e^(fKS7lSX`t_5WbK$00Lyz>Iw%qL*0oY7{N*6`!FSU_B z(F%zS0`21S&fxd-jbx9>RHCj8z^sQZcY;?&u8G_@Usg=y{C%OrP7)u--$c|N5N^5o zMlG>jo^0GCPkmjXo+x6|J_9=56Acz)CAzTYX}ib)&`j=u)y;ZN0vopFy{eHTTf<*+|z&M#I;lc1)NHL(9a09mGY9l<^6D{`H~phMfI* z46v7ZQKC^+KxV8~fT9VSu?g$m=x_dcM{}*ROd6HfUC64*^mz2MJ!<~^FCI{vTV9fa zK$I8rG`Hc@h0CL!?ToHY{c}V~kqN2Hq;Ld3qnStJu9V9&k0MU?){|?Rjdy9@Bd&q6 zH-7qS?>7Ol-6QIIf{f-8jG!f6j>2H}9*fg`IGcKp$aHo);ku*e?U*Ll{#@hoa49r7 zE4AnQBh#-AoWQVL7S504(HQyiCdL?@4?2+FON*s|MD2z7t7%=e^HL1Q;fp4Y_OrL+@^YAj;jDY9n|7#?1}OQcXa} zNLZ`^-){3?zZA>EM)X^X?=H6JZOP{TAlsR?wOQ`%;YJbm6qHC<)>&!Da!^TyRzf~< z?@F^Et+@Syd|eE&P7cu6^E2l_Qj9JoW$~VboVeT6hYe2XJxXXBlk1L*b4NEU5qSxE zdh_T{u_vG`B9w|(%l-ImHBSRu1@K#5#?FrZ`t<`rIW*2BFINM$*>|+o_^b;4GOF2n zMCs(kPCI>Pc^rXrj7jP$0UN9VEIU*9N_J=DjA zqxY;m=X9E0dd?TivzR#w=!CWOd~`@DE|V0g2iSsYo%)GtcIAS5S11j(Hot*KyotDQ zO-$-nO_v{E-|rn{h20g|gUy_JTdJI*m*yv~nj2tlr#qY$JbVug*+|+{;#9;0)83|M zz8sFq2#5Wti|eP{^x+{b%;~f?BuYV@P-N~;N#J$tHY65TZ1#C`@n<#%0~RIIm>B0j zG2bms@0G#WICCzcA$Dbm=}%Hiyt{4#Qe0utqgQSyi~t`Vc2g6{**ELcvdVXjaX zT}|D@rXJUduUF16%9NlVF;9K{5@vm(pSJ`%8p0j}+o}utHL#`D9iDj=n(AenUSk0V=*E6%{~zb*@zA(Z!!09m&Urm> zuL7-Os37F%n$_Av(d{7TM5R=C#@bx5plV1Pi0uXhY9*hKkU!XuLRv#k@Ac)ek>)iv z0L+%Pt+=yPQboymk^t*p0+A&w5#`TP3&3xC!>!TsYLI@<2lI2U{I`Jo1fg1!pat4L z`(uEg^~V0AS*3(u1~Cc@@y3@(DsaQ47Mi1odofd{pj?8c41U(1_dB3a#b36tN#wwO zlcSYv-LUqvL|X6C{_NvFhqC^AV_dkqv<-C=7rX@5$R2TMjzE}Y-nOwZW5rL|gc@^b z(wNPlH>W~?4f)n~UZyEPfw=`83OVD}jI2vK_(>5Ze2M-`ryMKX@s|Dwb{`JS=|@aB$T9djW~SNLBIr!Z<25vR2>te3DH8tc5Wh( zsxFbN#B&f(!VY%v>4{Kc8NP?8`gYmA=z)-?M`I$X=j~Bn8K*y&c1$TJIkw|}CF-{N2V@e{CD*JpN0pG=XxzEy^*0aBzn8h)lYmr1 zV0eSApbSlPuyzpl0Qv0p(sF4;31guPQ>>`c7<5>$Mdr~{#lAufyBPN72$}i89#n2L z^t8AKD6b>puC*I7eX)T@0GDWDJI66m=T%Jl>Gm28HCZ~BLN*m=nsOxOF>Ns&_0yo_ z&zv_tWTstv&`AE?kM-8$UfpzG@6Vr|qWCy_g5L^1Nav)4Z?wpUTS)IpsfgAj4y(Hq z;t$t7KE?|PSroj?N>XFjHHx-dVw?HRm6i07VPuedZ_=KHgJBh$E(OsAc1 zkjDWNR8GqR`W5Fk42}KyO{+s6cki6i!ViMt%C5Tz!Jt~hKai^S>3I0)w7YVl)YyL( zCB-=xI#p@Wj^mOfLVGJDQ$SF1Z9ds`oI$V~X~dEA>Y*Ee^OJd>NdPxpvgi-2sLbUQ z&yd|Z;}dap^DvXp`T0o1@8eyYpl=gV#bNNF3mISkgFQS$8mT1b`;y^6WNUq1SfE7Z z_4s790YN2jV?bQLb{jPPaWFtx!%Osb`;3Jk%+c8|`%X}hD*C?@C_7ZWM9cjH&eMYbx$Xo|M3kqA))^unlZsrrzK@8uFdicz}? zqsqy*7w^_Nf8`YqlUV+mCxKELg+*0m#JtF%%?~G|tAfVpv%7XW)CF$VOdRs5iYhle zdA?rxj)`eyKZo&9-S{R?c$C_~(A`3*i&*!cggCXE1#f;vXSA!z>xq!QcdIcFPh}BUNr?MMql0?_i*U)RT7_I8KP*wKF*T<_2nTwah!z7;1k(0WqGOj z2EGhPT=DmOArSJRv+joj;GeB*X}X5c)doO(`a7V2O=}(x_0KFgtB||D=Iik|V4t64 zh2ol-XOkBsI2@j(Bg}==wx|y=Msp3My$EqCYIRIWF&67@6?&5NGjU@k*Xl`X)ZlGR zD!+I&{*1foNgb)9&Z~DcU*0}LLKz|nuyW}Cx7u)gWD00a|B|WA4&Orn(eBcVH6r8Y zF!CK^#cD0K!)UJjiD^B49*x|qTq&rzFsG{zjZSN*^y)I6G~bNvs5B#O?jSVQI?5-F zyu5C|1c|Tiu#2x)eF58g;^)m?{+jSBTBklryn$7N8~bXT z`s+xza>sGMmixA05Dw>=8Zu(6QMK}$siqFT-Ln#bgSNO6uA-)ElbE?DYGs3Ww=3?! zDdoiyxiw{Wj^{-*x}lW#kcr8JayChE)~%!U^?#Ov5v9xZ(0qPwe#-`ju!`dnx!B zW|q>1oTS0I69{?*6u3rwx$fWh0s7HJNje}#Rg>B-vKRcT=(^PpZMpN5awa^Kc~$cX z$?ine@8p@aT|PG13hG7sY{*9;2XWeHhUXm;;JKM?Vb2=%o*DNmIi2@< z5<7Ijxi*GKipBHRz@@+9=6;fKM?h6VoTkwTdY*rs!gI@0kPswx)))Wxb++~2At%o3)U>67o@%`@OOu?Rcx*Aq_ z(j{cpRJcsShA4Fu{|VL&H9y9?mc?-C;`$c{jrMh>9+~A_;l3 zCov4$DeG0Ja7968&fz=ZdnM}tSchvA{iEebiVxC-EpgO+I*#CZl9|{)feGyVna^AB z*yBmFS(p2=`YnbrkbY6 zs>(9+YAgrG-&AQlP_cl&dkpKmOmFVy+WGEImul8H+RtM;RrBtC{n*&<@7N3@mnAFD zh3?FE)$Dd}>V8vcufzn&Uog_nLM|C>OI*6^+RN)|u73%$zrFT6LdJazQQ9twCa?O~ z{m7`Wbw$1om`VF@=jbkFr6Sz*;9EaS-;7=4S`QGNxTvjn(U?XuG494si%FX!-OM*) z(rVybEwO&JdV~5g48wop>xGq_J2z1{?#R+wif(@Xe4NVENT$OD@@x!lS0x!5HJ0cb z)l_$nvaUOw8JEy6Q2+JW8-|gxo`DtaFV&&EJmG5<6EdqMXugb@3!z$k^?TE{rf-oX zJqAHCV03PfSKm`5zr&qT2Xg7Mw5fQDOg>~!i}db<*Ku0-MXF^&e}zF67a{PojDhp7 zT&3up)~tNiiTrVy@ddjn9g1XKF8+=t78ker;*e-4BKq}zx$tNA3vK!j0{U65EtMW% z&;bBr_I*IN)L{|+p+;F}N)ThC%EGYQKHO3U^29y8cmbswoY1EeB@Sf9*J~W+cI2qe zu2@o`oN~AeQujX@469eW)-2`h0b`w^p&qd`z_OET(eF|=cu+;>en+(OAnj0 zTQxl&*eZvu#8{u9jn$g_y$gY19Km#GJ)<0)PyLsCR#2?=VAayi1q+GmKND+Phs9+8 z$4x?cjdsX1fVt!lIS9C%uWaaHH2||r0m#?cCd6ZGc}%s|h$?a8#S6d0+rPihx-tnVD_R|< zet#w*%N~hvG=dL1)@rWIsd<4iAs1uARaNCCXnSj+k?Nx7$GaSw5z>_&Et2Cj8WKzC zkL~ zMK8u~)F4Lc?}yi7jhz7g@@p~6P>=Wyu&Q>py8WvXic90~V8`WnA~HT({oV%P>9QWgd$}M=!U=N{cBB zgR*!M+hW@#6xSh=2#J`K-F`nBNvNY8V&V|oc<|#ZbHS3>Z(Uy?y9YZG|Zp7*qsDG^s$%w4|?rCVua_A2; z;-&J-;ORwu3pfdEtjWrF)9fzm@hZ4;F}Ol!2UDw_dq&Sq+yLLq^J<5fIl{J!E7@^P z)y<-c5yr1|K)t=olc9$<{3i@atHZW7T&eA_BfbwXY`iB1ekoS2@UR*<`>=g-OZ#x^ zm3Ef!2`;4^j*y_6%N{bF54@fag?a-(=VhMm=@2#l`Z$oRu@!@IV|! z1RS?Mgn5UG=e_$Z;PW$4_UEL7&k0HcV3RTBUSLKK{*8M2;mhh+cunihC_Y|e>p$^< z-r4EbJhh34!{$Wem~j-=oqk5oLRG7O7j`8g6b`ni@1?O$fm=3xq=Y!UHP|66wPFx zYDnK^DZ>gC6|bWPzpI%K)jRS)zTS__{hYdmaSra?mGJ)hj8E`n_|EvS1F^1UFF}5# zG}NH~NdGnBfj4IBuzoIp>ZJJq2H&G?oRmEpjAJB@x$@&i_Q-h-UY-Z@Tj^d=+nb63 z65B=a_FZ~yjbtdkR^0z|^n|0m3H6oWJZnQuZH}cG=Z`W+wFXt=iw;YRGc`}ySWf%d zB}F>mW#Cm1K&T7RGPgF42I7j7c0JLMOHOt6{)poqL21pm5Na`Z{AsO|Vf-0fp+`R& z!)AbM<3A1bw3b;`+K4C_XzQ&zK9$ES(5uN03oEHMbU~?n9YTKNv*-VGLynPD)S}|I zN3loI_ld7l06?Yomdm9adSn!-UuB%?R*_Q@QKDmkq z8&R@3h-c75mTH!9%ZbkIr|v=*^yfVryIL*s(fZ zc(wJ>SI};nlV47FBzKr4zFpqrZn-F92Lup*zakvzP4Jx9jb%6#*b~Dte!hM(V>sos*p5z%HI9aQ zEKblFlt?05=o_{Yq3aT#0(FGJXvj~eF3yRxegil2w$E@{M%Ka5L_(RrFi~taQ7yuu zWS*{-=HK{~o`23PX|n0C0?*= z0&7nU2gvBCnM8T!qITx?9p4&7J_tFCp=d_1`TUuGOEI6j5Q;fOYl&0TznCQTTIml$$xgwD@JG1@ z|KpMl2fb$3vo9=Q&`7tR`nAj9f4rSsnl#yTaq#w1&I4^ogEZ$RBz%V&@W;eP0S4-R zn>w7i?|6mE*NgvJgdcH@`=pbZv6agXrVp|gYe#b~AMkkIbeM7`Aif(Z!4Q~@?dO%@ z*wxybE&r?_R&HGH6CI?XKg7{HqVbRQg^2mo7B}(C7(uNmPUhQ=Ev*A}X>h<120=0# z7*-HeG&(TC_?#v6dQgJ~qybkh!3oZd#g)9em}^bHn5B_UOh^ztK$-*zQ^jlsCu6Xl zm;GT4;n3dGBN+m)M4tcG$ts|eXUUJ}jk$%1f4dh!*7tOnOt)U$pZ9mmaB=H360KT8 zZTx4r`}qxvY2HIztZr)M6&<=lEn^8#r@-lZ&X6{-O}3E2GF(=6`wI=cz~;E!xqCN$ zv8fZYVnho$I3L$8CzAX#Rk(av^w$RyLs1_a%1)QKQXrH~1&M=h-ss^CrV3k$bEY7@nXFj#}&C z!`Wn3^$X-&xH75H=0RM+sHWqXiR9tk3=;z&6?Jg(zQ-Ha;9AQzc`G=rdtbF0?iV7r zqK`6#xDRG>iCK&;M$&-~{rRs(B|cTJOuRdAvRjk*6<%20q24^3UJ<4)qw!_0_MTtX ztAr1uL6W`2U*Wx@xc3~`8+>5cwYizO`~GqlNVC_a_e0aW;-!cH^-`qV@2rLG(SaCu zeH#ki4yS>*TQQ}M4;z{hb9Qt3;-_BhUb5WpD}z7%Tq^iJ&T9Fc0j=dfJkM}q)bxO{ zSYE#zaxg2Vqv4o9Mwbyfr97&e&1NZhn6 zFOvvO+F)$>QYiOTO4Jj0lY90c=r0-*D>K_Ts2j8TI6M+7c*FmX^YWI%p6~0<+TVKI z?eEf98->d8M$?K zlPgbj!tYacoaADNZMfl6O>kn8*8>h4+6IRL@DTo{e`_OB-TV4cq~~F_G|@>Y(r(h~ ztHbTC@?->u95&@VktNJ7CDDoINj$mocQv&G&c!20I5H`g_aob%4H3v6|L6V9OR!L~ zoQNm@1A@_xJY{O#7uaFi)N?(iZhCo|8X`7_!e?mD-T}Lv>p5PTHBqa4>PP_S^71M$ za`A)7FHT3!$8DO4sV%@L0&ww}xrOpcsjZVIK!Es$E2Pd$hoetz%KnZ{S~l6eJ+W<6 z8r?}lohaSD9CPaaXlaHyRBmt@Y&B+uV)Nt9nf>!`@6IS5`x{dB5jXS`L}IeJz<%<< zrp=zKE!!O98x#m$jUulUvdXYDc3qFCe*AI-M`(AEfC8tu)t3?(wS+{wz?J z`lRt~5cP4s-Zt4ozODnCq)EHNgx(Jz9eX)bmffjUq@G>cV9$lNdOdDeV{R5dU0oh3 z4=nPH-fQsD=3Cb%0ROa<1Fy0d3UmGW<4v}peUZ&<3t3%yDNft75Zo_3He2ahL&L}; zb8h0=?l+V2o9fHJBLnYNL?JbaA6<=LS(Wy`Yn+Xe58$Xhz8YNF!6T!GTE8h^3MJoV z!!MYgj9S-y()vdAFt@~ka~zR^egCsFQ(N+pZ0`f{fZ~B*z6XP3)SUdE z9S~S>>LxKr-G&K{yId=46t2$EGZbFVbHmN>XGQ9*J}WWDvxk`m>up71Tf5vppBaj+ zkF9>BI?xq6otX_nT=Ywrythe(^GYVj>dCve+}^$2-Q7!o=?bo1ZOa zHFTqi)D&s}L%g=9H4k2KEg5%^;HCrp#S!z=oJ^8&F$k%M*YGdJLHuZxm@ITyhy0)0 zTRLBcP))_X=Oj6KB;k=sU*uD6aHP4odeU|Cg$udXWx9-L&82^MF$6@ivSOE)R_q&k zy_UrIHM@b>xoEpN?u{sDf4(IC!71Rl)x|_|>8Nh&A>(OFy5d7de+P(f=R*E7@rN@B4c%`nQ@8W3c&(k%%zX6Q=`YBTGm)Y!%II`6RI(;H0U7e_ zAH)O-tt)pU;X-FF>3atKMF=Lp$S}=Uo_*r1<=d`xY*^OIC@5*A_&XX?v?hMXoAFw# zC+`*h;LYBIc(@uK%sy?NC#KJUsZmddKpN({<^KChcJdwowYLMITt%^bH~p6mGf#a5 zd_oAGUF_0f9?w4*xP06DTLVkjEa}N3yzG;qo3Q?_SzRw!-sAlJ6~(M*)KX>NG^wjYZi`+N z7UJ7T0FcO`<@meSr~K|z&jyWA@y~}5_`60)1M9qa$E4)MkS*k!;7%bzMgNe4b4m5I zSgKr(jrlGNdtPnu-t_=vpKN)`rn(Y6a%m_N1^Zy56XQa^R)E@-*c0@uWZvJ4%WC~G z_2s^pQ5(qbigT>EhI4jedm8?m%agZFnyJeP(dCX!h0xurT8@jxn3u}4Tjlq#iI2@b z>+WR{Zi^j$-cJ;`em1(B{Yr{TatjxJAlm{}JK_dPue7(D{V-jx{7uJwr%BfeF0piD z#bUvDphqvsvE)tguA-O2>R^m4yN%TfCV#aWV*`=N9zq5xFm3o=8_W;A`Rum^*U;lm z(Jl3#X?DOTFiPmo#B+(kWQSfas%piar(P~~Z58*D4dNCcOFTT9&C~w{tL`RR(oU4@ zzwGizSHDS~Z}XH81rJ8qzHs~Bud1H@YAAzR**Dpr>WV3+ehp5#T(O?m#Vj}MOJqEG(0?M@GoO>E<4>`QB`o034f!8Lfhw-Y_f5&{UyYvrf%cX%yp%7YhZ@ABD z<>=mz76V2!)&G_>04FADZQd%LH1)%KIVqYQ@`D@&op{{iX7tYmZS=!GX$Zj7p5Hcs z+{DfZBMh%Ht$7+Ib#&zZisSj$fiHI&V`RR}X)c}o*1i8ox5z3%kcQ{w=L^+i<_zKr zgQ&1A#{PfuJ4C0$>Ejj>DYpJ34pejL1^d!JNWn*AfWSs4eD&{MOxiuo_6DI@ z-TE5uojQAWB`!qJwGOyx+fVVU6R7bDP-=dH;QlUc`mIKU>Qg zA3@-!(2LZkIFVNVR>~!hruqk)rXMxugjIH-Kj+eUB>95h{GGT2g|yMQa}cl60=khu z0kOZjxAZ}PdJ^W;R*K2mJ`@C&B!#RagC>|JX98W4uVW&e<`PTtB(~Z4|NfA_QkrGk zbPG+$ZGTs3&hvi;=Rcz5I*D|hJNc}ram#^pE&8!E3>k3wZZC`I9_DXS4R|-}6H#*& zY2&F2f7)@Y%aGJ|srR>yuleZ`WF=LIoc+96-S=Y%Os9hRGtp|~K$NXwJoK_FE#~BV zz|wwyhWnt3>W@WJ^b!z-PyhybtynKTVmL z^C{yQ*V1I4#Kg}1si5B`iL3f)Bh}9Yy1{ghx0N*_htUvQ~n4L(==Dk_CbOH zC3C7|&&8b8`Lqb?9Zgrz(^gS}3|Y0A5DTi-TULRhkx$y0-47;DxLZbA%u^2$pTc1} zHfmY38n!!fksMOFK}(yRs&FEN}A_IgRb<~^>@1C#Z zu-540I7`bOr_?Pk{-}{o;-~j5+SvT46J2$kK&f--`?IMq%U9=PXoU*O9!PD@XWS(g zEtWc$O$4rfIShNzz-lbqY6pTO#*H=!ZBav;Pb7I$&xMSM*#snGeDAHMBdi8Ity@rU zdxJ+`kDxlDsAj0*2Y$sX3}9ywD^@Nul6=@u-?IIkPM>7u`t7FUqCgE_x3|&BO%t2! zR1`c*ek_V!Q2)Gxa(I40+!@A&S}xKEYG5KExh5Qw%0+Lf}hvRb%JLs zd)t(8lg_JEc+*;}il*`(4y68$t3YoK3w)b@J69|SR1l@d<`SQDyq#b1-l}{TIeTX1 znVJkJx_=Hjq(k*s3le*1NFf6IMps7z$j+ZE>EjsU`T3-l%fhXPxw_jUA+G!P?;0sYF%D<&y^ zs)ubBTXxCaJ{q}lpB%rVR&dd?{h6taT0vZ%*-1}{2U|V|(#yE5u?e7$>9hvo&Xhns zxM7Bq9GwB`5vW_+SZ!C`D5mky{Vl%|;{sFF?$+SFo15*@<5gD6KrEe-f@$;tQj2Ir zd#c~iuwBX-&`lmjCGRHs#E2tTkz?2HolVR~P^Gpze9V}_6-+=I=1?^*k96UL0+*g0 zLa#QA6H$EcH3bWepVW!2(JMeH3>(e%v~nF7Rf6yw3BIq%s9(eEIL~|52?#8mqkF8O z?YmWMDGn2xUh=J=W}h@{Y~Y!<1o3OOr|(xHqgH_$wa_pnwY1ne`?B5IQ|Bo6tDPHp z-=;H`&TAkuaiHaUJ3M?-+y$S(@LK_QCHjlD_j=UBd`xL+pH`la2h_FPV>`$D2`Fs0 zgc8LoSY$;gdumTfYzn1-iX`SUrNPbWGf#(jqZY79$z#ra4*-}rL4Rf{ndBc^HGSR^ zs);^nyR4QONC0xNC!eMEz-o5!e%R_|-c;0=2>MBvhB)0P*8R^w)5fT`7^xfB!#D?r z#(lG+02%;=?4Tb{N5eK#*&cm^_6l}B%Fm(qOdT;TE=_0H2%ZQQcOYr8%dCbSPimda9e>JgArI68ZLYleYTgubsbc;@*L{Alnfbjx(PeA|3DV%1 zjby01BUUmiln4Yg53xVqHLe5FO|8qgYNT4_CV9x=eP@;eG3O!uJ)9m2NH1-T=iXVG zjb`FY2F-@QD^0D<#28!@!x{VL%o4V;eEkG=#`_~F9s@fahYiBNYG%yYs zakP?u+ZZNF!ReG8xc|({=~`9%yRYUUt6K8JKCQ2+iBK0?ck5tA0t(s?xgV}2_sn0t ztCuu#IIPtRm5Sweh81fH;Fa}qzd_NKJvTUd9~soxMZ#Ug8|}}BCBm1MScZq1ArXNa zR{R$#D|$!mw9Ad5M|HvX_0Es`A^-%LIckn0zRTyQ@p_pZm2S|}a;#0}9V&e02=rna0 zp2!4pr4e4!d`S)0A(824>2QqK-WuOsYhSLKc*fG3n@_{NV}T67F>BTPnbYyqks};? zAaVSul;l2+-V)BgQ|*FUP2(oN+~i4XQiQ^pDAm-V5i!Hlqyo%lckj{DvY79kOD}u? zpX|OKdtAP=*V~@;jm!;7g)?Qrv0^{TU{85A4J6HD0Qc!B#=-9|xTFC4PC}s@3N)Z--!Syz^ zhHQQr3^u{B2xP%L9Z|l>yLnsL%VsW@E;4bT));+5${Km5KJ2{2+0o0wu+hCz_@`845%IX6xF6Y*-{%H>bP zItQQdV#RNo632VK)&f!cxOI@H&BtXv3wq&?N^_crF{@jFJgs?b=G@Fub};E>5N&D- zq>{Ucn_-F6UyRO6XZO~d3dIxQ;n;zmQ5jM%l@a&X-s%KZttdB~91?c$t8%4!wWJU& zg2I@gmUA(8tIUc@SjJR6auD5|%AWLU_@EKCh4&HJTmbad!3JJzNi#0PUV7a-VCj)} zw4d>gIoV;fP&`X7z)^eIzs2k+5U#dO7QeZzg=BUZzlS+H2-h&Wd~qrm3u5V4L9Tt0 zAwNLO72RMs9RJ9nlA6QGY=1pA2--O(zVSsQK9;xs(p`5KUtR-+l8{mv#gvehQV=!b zioR>=19kUQJHp{me?u;=_l|JDf@t#mMNx9IQX%Rtwfhh0ip>f(>0#@r<*)f;v_e4S z3_~>Wd1L^6vK657n(DyAu+McRO7ceU0;Iif_)WIcUkS0|x4vWSeQK?e`<+XzUL_AL z!^c8P0%TYVrFs)f(w=hdI;NDsY7#?t7Ts~ZQfED_l(fj1=-$@W=`&83-j|-7?o*ot ztLPZr(9r|1cz@igm%T`6j2K}j58$`n@xj@rM-St#E1~Yb4E}wnw$k<$K~tC2duHgP z#+w(2m1j$V9+Zmg_5_lwtJQDLtWaHZPbHIQinSk?Mqd>VcR=37T*Ixm2z@5Eey&IF z_1>ua4(J$*plv4mBNUkH1B)^^Wj?+f?B-5`sP}Owdafo6-jU(3Lju|O#RZ~;=6J_z zW%EW)L~qHjiY2Yc?q(3w#xB42_pTc`s@mv@wCG2|Vdn{1EbgaPn*u3k(wcD!(^-ha zRZ(2x=j=bFiiBQSU2*5UwD1A>_S+1CobiYw9M5}4IxQe{`c3~>ZBgY!Ag8#0(MYKx zkW~(=XdXn0V^Vv@&&Qg)!F!lwXcBGa)5-*|Mr4TYf+GYY_x@_o)kfx-_e*KgS$)(8 zKWP+cJ!wCPbhLdr%VDZd&iT==!jC%iklK^uC%~7+)m>W-^IE-8-J46{VjouF)7-Nz z(^r_)Wkc&XaE6}D(*KH}m+e=Ey;)BTRVC3T`mFNE%6q-pH}c30lF-A}tZxOtaU>cx z4;yBvK%d%9RUE88Y6^E*ES!cza{30jF+g5xufOH62f})uAgP3jJlKB!Lo0p^g%Y5HG!~nB|Iukem<6G;rHBz`Q@Z_ zuI1>j$A5d29bNTU{IQ#atKPkD3{IzfofD!QB0ReRKKmKr%nT=-T%*rn zViPJF|E*Q5P!CT+4=?SJ;_^Z}J(b=^JRt+dy*0Fnw5hgCm{1sfppFmNoI_|wJ}dLf!(vw=x(`%;7yl%6+*jqB z8Zq8R=L=~tp4n5!h#nP=FdNgWn(PRe7cOA6z#S*V9NTS5%}!njgW+jJ{KL6Uep`6o zvt)ii($Gg3pHJHbQF$zSN)>ste)pzO*e@T6O{c3zamPPMU$lPRvoz(I`kqD*YZ}pW zQdXX6ApJhft}n=PRrIW?3^?T8rV3Xe%`fwQ9C4N(ib&$t&KnmxC1fBs+M_dfN+9m5 zIXXywum9P(mG{`0$hjqon`ew8r)NM#oZruvV-FEf)7W8@pSBa&_=5DYl+|xuq}RDd z8y$yYQbUQ+%J=*Z5*0xrWVb4Fq@or+9gF!@7>~og?#jI*i#Z*pcqs>F7r)WyMIV9| zo$76Ttk;3(vv@@B$^_PL zU8cA*9rYRZ#EFHdbrt`X!(sz|$I1AR=7`NR;;6?(ZVr^qx9H<~jR!+N3$e98t0@E4 zI>lcaX8|lWXv00(d-ygE!NXTVD2_n8oh*2i8a+K*70wz{%f>AKr7MAMjOWAB`KcQ0 z-Pgy-T`I74hBdcE3z%AoUbtopq5H{buo_Zk!P0-zcEGI{E;nnP9_wd5s4jFMInfJO znhoYEdzrW2<}2!fXib;CKN%gwPa9MT z*RVcT=VP@5pK5mU)$;)TwUYb8n?GOek zpjm3vK^G5(eiLsTrP;`x&l!In+Vz;!zVf+Kp}e_RpaS!FAlC;`bbs3VMW;l1-kFaq zek5|Ev4cY^yDT1`(?4gMxH$s>KS@ZB)8M2&{PdnqPk%_6Cu_P3-pUGMa|WS+rmEJgZOS z=AK5|HBE#3G(fG|eip99gp%X^mozonB?#16B9oQioK*)*7OIyqU032?T--P^;;;L* znGH&Wp+MSUWy+{I?t|Wj_$P*n3Uic8i%fQOvG{{+0? z0`D4d^ki-;EF+o}x9B4YEjfw+sB4!qc8^b-r5y>si#$(iP_3@%I(zPk#|BLZ$cAi) z^QE(%KS|yx3e2bjC4*qP`BG>4CBoJH?{f;VxZ8V4D_#P-@HgI-o=@~fy;>GT)I}JJ z0@xa4x7d2sQFr?o4P@}jK7+oxP?9zN1_)0)t4@g%T7QaW^~;X5q?!vHevLH;{iPgB zkln0&SUDvd7EP`yF7Jj2?Ij!6e9W1LLcAfpg7-PA4B|q`q;GtTln4PHm7LHmPYj$J z+jHldW^tt~rtR`v*c$6B8ttmiO+PSjiS!zo+)K0FqR=w4)z^>gNgO*RHdVw=78g7z zi&A>O?M?m5_Dd2N*3T6HzBGt8rogJ@E@mR4>dP<9mCnD~c}FH^m3X0w&6tRxZ_PDx$*4~(wiVn&OUrWos!5i2=9}6u{oJY? zF>wEEhv(zxC$1Z&=)k#LpnEWKQwgSx2kj!hfEfAeXpbh+s<|wys1XR`Ss@gOBR3Q8 zZJpYiYk}Xw&|pU7bjFYLB$G$DZh0)eUjz+VhTicFslaXK$4SJ|)rJ6vBBf!@pf_7q zVKVY_K;aQewO7k7LfHooDeB!`b28sG+C0XOyO{4$Q|&QbY8={2Kxv`6L}h>1iP*Kl z27{_97->=Se}Zrm%cj_a%xvu5r0OYnaO+0=geS$}7Dr1Xq-^2d8XKIa|!SwGT0T3-NVqu)3Lp_c$u%^W0@+%b(pAFN{dR=@i( z)Q!Ddo^mxgIk$0j;sx{b{al&en&ABAA^3y3D?d9x8V~MOU|xS-zpUxYNe?!T70r^N zA>@Qdb&U$@>{Z|Kn6W-ADhm#-W*N#KDpJb?fvPqtv~JDl1Xn#?KW-ljCnVi5KWSv+00qELoaI zkH26bJ&q|5UNM_2zB5|+NpHbX6hz$xV)$}gz+Al3rIh@hq72J^^YbPF*BvX#H@e^x zD65(X(Ux!KyPuW{2#bdaQZIh#jfR*DskZBRSfvGru5XMsS}sf10#U@5bIe_(=EVU& zV~m|S2-rmU-kf~4-e}Fi{%#PI3?B}X@3&JV_US?OY4`~)d?S-gbkKV znvb8mKXSITMKF(wY$K6aqH+ z-5&PfY~pW0k~BEA%9|+S3k#LY;2ZP)ab!6J?+5+eX~Kjm=s7cLp`2$%yka)$q04b@ zJBaesPc~V!qLL8fBc`}3l%8&8$o_df6vnw%?T+NcrN`K?5QgoMu_n-HJ8JO7h=O1q z+H=WO0X&bs!*#kHT&yjrLRKz&mq&r=#_oh#;Y`GR1?MS*G5tS2bqn-V+^0h`zwC*n#7LN19(#iyjuZ7pz+utfd$qMG{N>dCac*oevlB^Ly z$a}#nNaMS}(5A1af7i-fA(c@-s$Wk(03__sqRK4L?gF3R_^XTJu7sF^Ajacr-V5e? zOzdxcxxO#B^ZWa>1Y9Ym@i)8J1Kk;RZpwonZ=ZQBzD?)%#K8kSWzi4q)*9GW@)E~^ z=p8G~#oGDI*as=6{(3r~t zjB}>A={dH?tGKG7WyuQoIzt6h!}wem@1^%pzE&@acz!O7+DJZb&U(5;s*Rz>JFXH67dHgO-+W#wsM2{Dk}m#R-4d^)B!riI z+BM+&BXR8GCuvGd(sB&Hs98uDp`BM2LyA!BsO-MUY2zY()^Y8+o~u!MWwdP#sR+CZUaGy0okMXOe8h3{}viCdW@3j>(c zn$oDq`x|eNHS=SP#h`bks#cAnu}cZJ_# z6Ee`F#JN)c<`eqcbNVkvX}qSa#aBl*#cf9E>{X)7v zD#yyAWrhlHJ_%nGPGmXhZFVV^;Q zR0+zLg^$R^!JAo%WC#8noXiIH-h510sKBBxkzh`J6+bhKpL*+(d@6L*k<1ryP28QB zL45)wmDHttV_n3NHC;019lT=AR0PW&knl!OQ%TWbX)%q4prZC!hl3Cyw|F5WesU?= zbM%us^<9aNTE|bVTK8&7w?FRUr1Pftl`+Q1+)sFqz(F}AnTnl06VLB1=_jUrxs&by@-FO^TfG12g3@k(+VXr8=Mer+K=>hVmn*Lw4ET4cp0 zwx^W}L4P4SC*saNuoC&09bULp48lZx?->vs`P8_IPeE1iFYL#k?T(I*8Rn-|kB!ZS zRcHZSQ%P#sQ5GAg0E>C+7V0h==vN48sa==A4lQINdTiciFUrpw)W|TeALPD- zH+rx7b1&yVf7`vvRuztj#Y2?|oVFVoa&*pqh=NL-Ulkg`P2UX^^7h`Z8b@bwb35tjh(n9i)kU9WO^Rlxo}3^W zqqRaga>+0hRxSl!{ zJnEF+vL0QrPdLLFfvj3G0wcp>-q*$n0g=g5`wa1S4yEPMg=N&%uW5eq|OMAD@Un{ z+3)@ezxs=Ij7EWJTxV#P6dhLAFJ-@+RqhwICH|i3U~=#-+) zLsgVO=4`BoSDjGgeR*8CkbiO_{2ECwPOr6}*{5c)AKv#i!`x#gx-MaikjZhwYI-`7An z3nf8zKEqAkl5vAY`wy}Z&c!2Ihku>aVs^!4=9LCQW&5@v9)FeOD3`4~bF!nE?w}Z+ zIUgDHE&Co87ZOSX>KB@}N_UO3f+CB0TlhKN;}JPB-X}WU#+wZ*F*MRpJiz)Cgk98R z+|MJTw4^|AMhb2JrOdI@Uvm;aEIjo(RJAC|MQv~%_-wReiOr)UYNMSF{YJyNVlzwJ zRKxx+%C2?rc7^$psVka~!~FP}y7tK<>snI}Id=M_!O-Lwy+Udsmlr0`?|MgT;;rVDKN4hsH{>V9jPBeAh>f`< zQWW&wq$5-c;Zth@N|nZ)l2ZOPtP~5DqiPE4k<0G+XDEs%$7P(_+@VU`{#!AOTCK7|d#j{z!9Iq5N)1e~W;^+N+Drcfh&2yPb%Q?7`}I^0lvTRVx(ap>(&xNm47th%V6m zArXgrqmPa4FGBN}ai1JuWht{|TCE9_I-T`lc4harJnN|LmQq6806Jm;W#+kBP?`xT zMTAijn|Y@F2Fld#^2-B5sV}3)e6P;D)p;Je^0)%-X*C#1cGT~WSZc2p)C!3rSeVlL z?6Eg+?q;Nn?aP7F*{2|q-nwe$RX^Ptz=%98yytU5b&Dhuge>WY8=^h}0^GL7%~V39 zElM=&@|#BZ3Tk|pr9!)puJ-Ti1W8+sq6@mQ1kb|6#xPGc=&C4|(!EPPbT{n6*3wC|+ zRI^gLem$G&t8wW|{G*$w_r~Ph z`m6`W8O!|5k3=<6_R=f(HK(uUt_84;{Z29)m`tsC583P0jAiy>osC|kdcjRx8miZO zBnMRv(>a<7sZRm zy>4>XC5M=9JC zuY1&{e`hP87lSwd`5eHAQ6Jcv&=f-uN0&V%uxgw8gu4|Xzd7^>l<2M)>AzLiRzjlZ zDZ0Q`$4;=c{oh>*5b>)2BjU9e_w$%bl1>C7wTb=R6&PgKmyj=5ah`v*O`_A9d!awb z6Do_>XGB8$%zs@DxH23Q(C*TU{MLMEi1|SQ#5_!Tm zEWu$uKw0G9zwTc@^!J}iqTq0`b)DYu|Mx{IAY?}VzmNLA?OqkX`*Hxxqe~3Yu0cvd zbZtF%F!%mOC;rDEVzNI?!LfsTZ{7qPm^VJvG+qq3&cv=li4oi0y;)n}7w`@_vE9!5 zdU7P&|JKC)nNfb~i)DhH*RZU%-ikI^7NZedQ}NW*_^MAA3r2Zrdc}it))CD9;tKxt zC9m*2#M7n47k~Y5vFfWQ0o{I%cir#**4?_BFqHYAtI06O+nekV}8evr}~{f{wx^Kr~EO8 z@W1NKJOu&!8~PIb{ql>BFep+LQ7ziLM+bGP-SpVqu)u}FAQ!3Z2qhu-_MpD$`G8<^QX2I{1lf_Vi3U}Nhzz13N`fqjb zKX3TwW6n~F4>bjPz1n6W2TOBoh>S7pvvS#VUIad8kw9E5^!)nY`tN`Jq`&`+yJM00 zE;E6xeXGc}O+RjOBXmb0iGz&hI{n{Y?0D`GaL(CGG9IO-@bHhX7E*liV)YE=G?gkC zTHh;sMRiAI&XwVewu0S83k-wDk-@uP)*p(GD>t&iYjOecI$(|UFu5;wR~9k#y2-Zd zqwYhR{=5rl=0Zb5)S>YYLc`0e01$b##NdC#v~7#I2T6pAWFzKxJ3b%5;X%s ztlNA{tXi&9j6VE~{kfj3{ja^ruFu)k)_ zW7?rRsQw|&-7uxovoo5RY}{5pqQ$QRlq3OGP}oR!@qat6!O|cJSlOmPw7G+Ezo;R3 zxIFe%MEl1T8;o#sOf=hE1CXWP)dE>;S?&k_hY5AaPl4`PU9}>1S!|P&&WpBB1-xAT zbn{U);EtDerb4M+_Xzj&U^hbxMx#|wKO{^UMLdKZp z1AHNI{zn&O(S-yaA)Kar;}y-av-4sPDJ70oDz*Hf+y45fo9aqY7U*l*-pj(580Y>0 zZr22U9-H1T%b)d_dL_Q|)}^O`P;@ygDN8uEinr^(8HK-p_$#{YS096WtjG4fx;4V( zkNqJ=qEwWop1-rrZL%JEvG&6Cg3-K~tbTO7)(Jnu#k~nV^t$wI-=$oqq`~H;x9jm4 z->$OIbf$Mq=`!4Rxs`!z>mx`jhI12lKFajn>pWR80Eycp7xy(h+V4*T$DCZ$ITnB2 z)Att=f|0piqxHN21vzD`GfOLT&%_H!4%dYR$}I;5m-Nz6hGiMjS3SW_t}@^m(=j z+4c3jQv(q6(E4%}JM<)SNIEy6`ZBHyWzYk%t5)?I;rkHu-G z)u_-9uS)qn%q|IVKL0ab>@QL*O|@_JXZLnF(bK;5N!sy5hlG<2ZZ%oQvMb967O89qyg`%>2#DZat(;7 zm;o|Wy5RU;=-*?Wbnd6X$F*~Vb_+9m>89erIwPM53Zj2T4HLTv1@T8UGGf;yDX*q5 z4Y@THSe9t1b9V=hot|-%R)g7w!BqIUO73a577dC4;#0 zh`}!t;^T^io-6z_?ZC9TrIBjCeoA|wU5v-vXSRj^8^8abIQxq|-M06SttmH$XuG@m zaRGyRS~WY*_)(Ph2?q^1Dmretl2F2#4DV|n{gYR;sT%H&w z2)*$B_a$dX`bv-NK9qddPgMr6!*_&JU;+ER!~!RoXNR}MNY2rhLmyM~I%~A)o2gDE zOZC|?v8JCvf)s4iF6sVX9xA^_gdZKRMU?&qq6gtE&7kqH^7z@m4SdAj0Yi;|dtF1y zE_LiGag4KD;?+f0W)t>R8@)rCf|QJ*)521;3i98xVlT*dJiIA&`!=Hgc2P#dA2biZ zO{r@y!Y-~iGUtTNR(n;RWrY)!{ipL8W7HgRnA2Xgq0bMYwj-X)+5Ewepsgj9AKH+T zLr2rgGAHGjXUh^R)&;o#eBa`ECeF&;c3gp1Zp=7>p;u(AvAP@o^< z`G+tApB5@l0XR}?IJ3bDr*8%Syo*PS;(uUA-n-U>@UZV7$)c}-i{Tz@ZIqT8DB8;n zckzGLM$Z8SWQFDsoN5nY>$Rx{a8+2N#{>d94OE9xj&JKT8PoSh^ljN*RhI z5J)mnD{v8xO`=^CVyCERTsyvUM(rO4j>!Dcd*pG)(j3|czx!Cd_XhaQ-J4gdo%NO` zdZ*WN<6)1P?BzfuQnTjz{2$Kg_k7|7mu;T#Xje@0E!o=RmgBvDmVt0zV)vyBTVlUH zqf?R-cm%q#UTw4<=f3cb^|S#$^ynkdQT=4{vq9dhwX4xNdf+Y(HPRg3;ucDm5r&@=4b z+W{`t`Jw&wo*fr06Wio#mQ411eug92SL9SIdg!us)|2|uH&XZinh$=r`R{I(DOoWz zazuHl-E;r_HTHsjLrRF7F2vDbp;OETRf{$rx(iEWDJ8w>pyu{POK%fwEzvGic zV7D6z;pkIORdYIrPJHZWk(1b2%#I&e2*)2ueem~}1Rh^yhI6uA(P$`G9NG?C)6m!b z>-T(l!TfT!ZRoXWU=zu3hIek`Q<)6<;j-wPkX|Cnc_$%UuqHb^vnD#DIL6G<%)OZ; z(=b}TbF@wwxcpeGa%bh;Hf?;P^gVLtj*-bdfq9#Ma6pSHTKhM-MZPBebWUUG?z*}U zPp7Tp4T#xBvG*1<%m2PEOE3U>TEY;AyfyCj4H|QEa@L(+G4*m@sM5%_;yfJ3=yB7h z!O$zxdD4pbHh;#+vuTbs9OmZ&sB|Bbf^$R=@m2Hb96@JUpGmCUkP{1-%4B{8z>P|jj_bih=W?!XO zrUXx9#G0J~?XYGafeKU*WB}Wyc(7*)%EK@u$nV!ar@u5L&wQ>iUda^EXrQu~_SmhM zMi5>zG3s0?0#YlI6FFJQEhEwT)$7p^Plq?mE0cd64vE3D`>(+uV?~}KVYd8 z@yVvEQh#SLvjx?(wA`n$iu%Tr1&vhO3_ZfrL z)wZp$6q4srn$m(h-b=EAXr1U$DMtS>yUiO$*DyM4ho^o{i3qdoX3iLwRD+DF*$}`2 z>p*%}Rt1#(ECW`f3%$?sT;a|%e1%~WLDRa1_1UScHlfS zsoP~3Hghiz--_@2|Z-3!w=c=E3_+|JAo=NB5EZrgHkzhF0@IHdzFjhs7X#kP^(T$lcrDW2~0G=QS$wz z>K`MAOIY+q{2~3ZB}kvqLMF?bsU3q5Z|D8nKH0r`BWV?MK^an;;flzW|E8CD#Lo?Q zpyoOv@)y{*qN_EUvi8sWD!*xN<>)Wkdsmlp7H45av9oCx zy{rdoRbQAawq4dA^H_stZcSbDGO1}gwK6@kAnggbdMRpq+zt*S4CLP*5kJbv^_Qt4Hpll6*T&9(4JW41Ydve;1dCaxXia2JK_$~mA z_tE&uc}&t->2SRAJyQXZYgqbv;vlktq|uDI+gc#t@UD)9V;`2DE-c*j)AiTJx@zEZep%ii2p( zN1(UdZ0@toVLLkjQBFYc<|9zk3{nJ@w&Ck9#sLdEeApktE!6Y+tHr0;WM|%&9wNL} zc8*kKZ634e^M9UKSS@D)0MvKkZ024rLk~hko^uKR#)8wrq>lC+2Kz5TjR!b|uKWTZ zZX33*M@3$q;q5Nao*NHwUGUy$mxk$^xCAhMmJRi;9O;<@Vp8aFaMwbb<_7YNs1IF& zbA`jE(q;OW``uhXN&8b5{ec*wmup4NCFbb$Trq51TyZOwBYmv0vbw9MAPTGH>4HO1 zi|0%iCuO*=o5f<+a;K{H^m{Y+en+VySqMpucHydrgr*+>%Vw=?bT4gi{O^Rh-#z9F zi%pn9Y4YR~`jrOmlA>|fl8T}F??Fw0J`J~>bpsC|?|2;~aAxj+PZpF67`>w~^@DgW z1BZ-g@ibiM_G73M)aGnyVl0m@E_po@VwPqQ!c*!`ot}Uz3m3;2ji{V#YLy*nAr8fJ!~Sj+%JSP zubweAoSUBMd%y5~f4Qokhoo!9J=-6AwHzXJhRx03M#F_Li{|E^g)~%uk5|zA!GPO& z#)*N)zmx-qLyD70Yd6XsR&^se^m=zbk%t<4IB7()WSSYDRHfk$m6)a`!iQLacQv_0 z-xyJ%@e5kJ8H8L)Y=RKd(CQu}IcOpg6?WhN^Wh-P6yqZ{e?%bAqcQ#vLqt{OZxhENPbiG%hs^%_XxLF zyCj+F7LRMk3-~$(XF!dXG1)Ixl(Y9jLBjE`bNwqtoBgrxy$;A*o!G{Ut!lfotq%Rw z*se7#M`RI_&q1QZ zlkcuRD)l}Q9}Yz_!$_Bc@>xOM`VkhoY4U&r>}Yq1U@b{vTz|{R&l&AlxN}SpNiObG zlN(8a4Z7S*;clI~ylz?KWzvy4*TYQXmwDpC{<@Bi0)GxV2Q6C?C1oS9cXRlWQ>Uqev;LPBK37S%XsxhP%pgB$2H(qyJA zo{2y|z=dg_=1LiCfAl_p^(gjks__`aaPyy4G21Kp0Zg(BqrPL87pSIBw*mKd!)%56 z9RT`Y9+mo5|IiqQJN6L-UB-{}&0)O7J~imN3$|mDAUh>CLAB@zd$A^h^iV$^Pht!z zAFP^{d^)t|0F%35gaV$2x%D!|?Jnbq(wiTPUV`#1{i>>yPn*uTyMBNI$ndWR&>pHl$h(E;Wv;p1bzAol zkAKEK(CjJ6QC7>(Z_c{BV})H?RoZkxHVfD6txtdjgm}^g>ULq|F*&#G5C1~anVH({ zQ{KQ!;#N|k2eu|WJPf%DTp!OGmt}O97h1J-Olnp;kH@kt!QBm~Y5csw!FMJ0G&u89 zQL3K#;O4BlmKonXypz5S0jzL6T<%y{HzmFBYjoK!5RM*=alS8ePy4Tf2{lDR*PR4Q zjnjIKVl5mm3NBwZ_h2C|z*9bKD--5p;M~>Gy4+^$-W_A z>$?2|rY&kdfPOZH%rWX9p@RIaL=f_9gAPwu>JBT6_+NX2r)!nq8I|us`e0oBXD`z# z3yrR4kEj`^IBUF(FlqbR0nXS(gr{buNY9JoeZNh;G+Dvv3BZy$2o+j`EbD4F_^i85 zRCq?>Yt2BYzW(^@+=GVud3%y^SlGPVUm_;xX#XC{F689wYyFj7z{S|f-LY$}BNRGb z5ZkfbCh@GCa>~D)kquNulJ-7(P?(kvI-clEE?fH_lcEK|pFWoR0Bj)4QX}?h9SUTA ztLjbSW(W4?y*T(@d@l_O>|$T$Y2TL6fDp;X67@Q34fNt2e$;bYK=YLmsH)cL*O2-@ zHuERE05a$&cM`SiL6@MOc;B;!KN0;0VzHUmJ1+_*Y5FYu(B|ffpmXKAO21)aXdrCd zgOh;|HcCr?~UA1*SBWsKiQYeejT*wQOojsa-C15)` zGmUtcR!R>&@gN`z75;XsY#}qjHqV#b;uB^=@UxI-GH~nHs{@;6bk5wcJxh@+e!_ej z@_@+C|L`opXNq&2wl~>WHWVyAi+mP%ztAmz=l2;bdr;8%IfA&zYq<-NSifAd zb$|TMzAjoVTA|Ew%;xdHN`giWx@^ITY^b+vUrUr>x6@BPV6 z2@=Ly*Hv>=J~3*{JvGr+({uOkDO%84zOvAtI#@Gelv&ygBxxo#59+bVKs5*AoHXSqlPscC!Q0 zpq=6T_rwFnZa~iI(fgVa(Q8c3d{t6Wgi6Daz4M^18S4-^|~9C+P2ugCW5;>63K#XFLov>v|O~R z;bMr}uws$t5zCT35}b&o+!<<8kWwigyRrRa#XB}&lo+r4@(`H1Cn%g?`69)eO300> zjii;f5r3%5?F4XC=>)(c??_A^Qj=6Mh`R(rZr0%h8A#XdUwv#9B5dZr`pS+R=Idru zOwOAt`RYapP>8UMEUFknD!ZMTo*-XX{As9H4mV4-qP-FT662XBbOd%M%7NjWH;W(h znE@(L-rQU&7PZh2aW%uNC)__DNSTWcs&{|2ZZ;*^#7t&tMY&*VBX#8d)@$&vP%O>0 zlD0t#F2_~0MW1AZJIAcOh$%43ydX-ie<~^#>0#j2Oa9Yk>Yd-O_d#4O@a>i^wyXV1 z0Mw%eEQ^~AzPPs*9OOBEdk_WdSDi(@UL7c{mYmuFTHLZI0_Ze*d(NQI2eUnR^e33Q zd7z_N{-+i}WuKy6cR+akg$|IZ2%|lvGQ|--hNv!#bqSmJs*`aFbi9}V$FF1HB%%@r zI*t5>0VwGamN1?S9CD zyC~YeJ747FB)3(=ssnZzKO~$OpfEIQHa3*IB&5AIwRk0`Uuhehv7nA$D{ooEU6Kw! z=Tz6{#V2U~P7K~s{z7tZ9o_nIw6~l%fq2K>NAKpql4dQggtfZxYGDj54fx1iVIUcP;^)y5+C( zxl6(+0PeOB13NR68rtp9K;*CYT$=;OvNo<0)yp=bOVetoF6Hjv!$hYaB&j8OngyD? zw^5XF{q3X!Y$$@-@_mI7nx@>=e_qLmmfi2&@*w~-+OttC-AXTU6IOVrdj`dP!I9hK z2_V(V&&-mrpEM&CObf*P{!W-F&>AQrZliq=mQt6o8`n5Ogx1mVGBqErkOQ42f3*sU zZ?er47H`H1Oc8-IV>6?Wh7ca;y$4spY%h0;{M;eu)RpobsKtBqs&6R??L!T8gpEdN z8o1|5BHSHe-e}R(+$b&S?~hdYtHH@dPZN?lt#VVkmC%5Fd;AlPx99vIV(h~QG$&K3 zNHGn*OupY7o|HG(%|^NwsCl6vOT^$bmWv!S*Cb_Q#X7^?v|CJ$(UzlSxDGssc?h@Y z{o?5eJseF*Svembao#W(O5Xvkv$WzsH>gjJP{Zwj{z1+|SmZCrA_{Kgka6Ac?BAJX zGSf=|UmK6@W=qipVeJf#z>wB8&)Dd~%fUS(b(DEli77J^O{%Km{8t&wjqT?7Do5_9 z2t8~~WIg%KK(w^}gu2G@{$QU`+qu;`Sjq{ul+%yD@qQh<+2>C2pmb+8A;_UO)8;F% zl5m}?yisK0<=v%BINoG6;A*6A65ls-EQk ze@%URJQMo=KXIZ{kyP$hsZ`2B?zZVDl29pkTXL)BK6052Mn7 zzu)g{*o@i5%y&BHe11QFV|%>culMWyd_P~$*Ym}*56Hw(vpc1_a+WvLiEZIGADO|X zppop<^}Suu%x`%fWyU7;uiW|5E(Fy=lx-=YK{EGzoYJFAlEU^jld|OezX}wGrh}c& zXPS*0tIfO|X9g0jrvBWHsdOowQ2Dq<#U^n77X`-;I0)Bp=1P#7=C;n?a?te(r}>!= zUqofY@1ss6J8?a=1pRL&l}?u6I+#O^m77yzCibyck{YUcsB)iS9MR!I!EXZ=ltb{C zo&vmHTIgXe-9bZ+3-W5p&BqJEZA7ZAy#$TKsMiuV@Yj7 zxH)-jS@-ec5_qu4M>Xa929CwWaYBpxKC;*fVh(R{Z?k~Os;cOZ!8mu(^yH5qjROv} zH{Q|?iVhyB*^j920sg+s?6nXUx>CXSzwuRHT1cD?1?;<_IsZ|u@!N!egBk6~BBXtF zZU6^(JWa2ymIx)7rBA$fe@dgmL$=55`e?Ckb;Wmb?FNu3t-RNO`Bgt$?RX#_rpziW z!u)Z}nccUo5$d;%Pz4LN-b%X^ih{+5OBA9g?8HK@yVwpOfL!a&=@D`Sw17CVuNac> zYl&md=Ip(DOT^~HR`BHh_^P(&bCIe7`=%C7&8BXr_S5zZXHu8I{=};8P!Kh<>iR!K z^uEc^>-{N32H7qzO`(1ZVwC$eifvbf_r1*AIjl_RZ$^&Og%Ot@kcNo}>Sb_fx^}Si zb1U9wZD(*R-%d6fdil}*5~kkG5ks;6KLe5c=yWO?3igPlyr~P2*4SP+()JFT_Td)}oRKXk@j1%$#hvOmI<1Ncu|CqF z{ksM>lF77j-joubz)kHFmzebs?3K6QPoQZanuF)QO67gPmHEJr9^+q@ID1}nrB^i} zsJhEpaWYr-7Rla{604Pi}EhTjRWK2JPofH;Y~+KoYs#duP13ID@Xgr zlt%2LLBBY5Oqa0NX=64)ksVlNm509i7Ombw=>~z2>@KHGyC^9~3)AddK&kG5kg}?P4GPip) zsQ+i(HImYby?>Uo=DJy^M)DieOIF!XPRE4mt1-7~&{%~Ya(j=%Xp`=KEf&cGyJJR& zfsR?$Ck3)vT_51xpY{%j8rzgLy&fZ7XUG#?0P9hX<1{%OHTAob1=_(wL8fKi7W33s~|)}?{1q)4{_yL~pRPDc>b zuW&rx^$u{iC~{`MdpKj)iL~d+h`NlQ+IjqtnQ>9%U|-gDU5fr%@R8jK&Ly =kd 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 literal 0 HcmV?d00001 From 93b9e28f46151122091c022f542c641914e8de42 Mon Sep 17 00:00:00 2001 From: Zhe Kong <43921423+kongzhecn@users.noreply.github.com> Date: Sat, 12 Jul 2025 21:35:11 +0800 Subject: [PATCH 20/25] Update README.md --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 7bf8240..851a027 100644 --- a/README.md +++ b/README.md @@ -430,12 +430,21 @@ python app.py \ ``` ## 🚀Computational Efficiency + +#### 1) Non quantitative results + The results are evaluated on A100 GPUs for multi-person generation. Single-person generation uses less memory and provides faster inference.

TeaCache is capable of increasing speed by approximately 2~3x. +#### 2) Quantitative results + +

+ +

+ ## 📚 Citation From 6d66d5c72098174a87ede9ec9b86197572894c51 Mon Sep 17 00:00:00 2001 From: Zhe Kong <43921423+kongzhecn@users.noreply.github.com> Date: Sat, 12 Jul 2025 21:35:52 +0800 Subject: [PATCH 21/25] Add files via upload --- assets/none_quant_efficiency.png | Bin 108633 -> 103841 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/none_quant_efficiency.png b/assets/none_quant_efficiency.png index b83a166a2db9c20eb836d2356ec12e48677c3b6c..2ae490df2be90919de82d221274d429c7050d3b7 100644 GIT binary patch literal 103841 zcmZs?1yCH@)&`2Z1t-Yhf#8tf8Xyn|7D0l$JHdv*27*fn8Z1_lP#!QJ2F z-g|QX_v%&cp4!#jwR`o_Z+*KbOkGt0ALl6!5)u;r8%4QyNJ!{QNJz-@SQv;ibThhI zNJx09*0QqdZ)9cZ)m-1?htJS z4BDVN&9KT3bsxh7K3tt-sl1}0SnWlMoxb+bAxC-&inS!esmLOreT|#O@~Rxo#4i+d zdYX^RV1QN5RTbbmk#GZ#EOo1R$V=h-*}r8OW%Q8~98ANOsC;@=`8eu!cNmwMPnpq) zp?PknW0l5lkzCtbKiQd}O}knf7g=BxT8%92T<$bx5S9W7ACpUvu;GYxH6B4CSq(dB z@?0VUJX^>7B5Q}{oX5=b+@vp0_&rTgRlv0@M>l#CTIe}L30XgQHN;MJAg>pH6v*_x zX9Mqe^r}Jz5Py?NRv$)_AeooWwTi!Eswxk`?k9TBK)^}*OkSo4**RWZNYbZ|wU{lH z`lTJy`!06V@*r*2xFEEGv-0q_I!@5o`x2jPC-_{y9UqSkmLYqeD%Qsh93ba1;SHf_ z`;8p2>S|fEq9nVCF!>KQUPUr7Rq{8)Yahi+c(|}a-$!-t=X&wUUU>Sm@yPY3%BIot zL;~n^wUH?Dl>j_n$-9^f?z#$Hu8jGf`yGMkQJiGxjgZlcsEkDWkXNIZ@(eulcd;>i z=uvf~(P%=FSDy5PC5SzvFy)s$Lgl0-`MHhCw9s%E9<50W*Sna~c6YJ(LvG@q*Dqst zUDMO7w*$Mg;>^0h%tw^`tA3tcAs>-U`@kO|kB8UB7r31PZ@Y-HDKoyx18SHto}h;P z=ra0A>kxXoy5x!0bkn&TSm`{vBHS`Zl0hVjO^7{Lc70VrS(+krRhVF)DNV7k1iC>wS&-&Yy4KoA94Ig!vX>VvJLCXNRZ%{{+U5c zhQhjn&`(oH!hUjDv1Gr6^}HC`cra;OKp0Mrl}I(bbQH@3O#xC^D8}?pnf*z5$-Fc1 zXY28X&|KRY)lml8o|h4P2;efJE9+2?=2JPNh~glY@?R8W1`6@ zV&NOpV}!Ds1Pjx1V^JT=2gYJC6TFd`_{u34$QE1QXOe@b1OC9E`&HCT$^}g%SWjB? z>p~xD4(2t9SBy!4=x^}T?3r!h_$Ze#rx(cSffhdm#u(kO8&HbnY{wR@n7nbCLk$!f z$F{7bFnC`^hNT!sQ&O*)jB7tn4C^nu)@IiXm^Q-K#`PJ|D(5bu0EUn_V~ljruHX=K zlQ<(wqGrbM^cEg{YI-6CHtYs0gRU%5qKxF6=sll!2E7U5?0EYM`$u3I*eThGyhV92 zXjYE#>zgVD?=}y<;AGh}Sv^b_8S4V+n$@#32zGin@ae+a3{>NgxkmK^+?#T=3x zjvR*x-HNA>c=#&<*8Dh@brTnKFN$m7Yn*HLYgGAfCi2HW<=zLyL*f(S_v6V2Sd@e| zP(Mc4$e#aTRd+3jC`g#X*wxw9-{pAu@}=ubwQB8`<@2wqm8wBDThnv}&F^P5Yqhq1 z=l|lE(keLoAoa^v_ns{3b!Fc5{R*q%FgJ(kaGib4EFxf?7`P+ftds@FnVdzMF>|#`|~o%{Q~> zFzPbAKs*%-78ZS+6?AnZ9#yf#&qa8}Hga7vvI>FutKyPU<$^D1WYFsSUDt zZSlhbr?S|B)&ekOKSVMdF?{(QR+;swjEkRZfNP%fhEs)$iEHcAjP8Spe7T9Pxo&Z- zsO5Rje2*x^``71h=K|Cq>I{{yD$T?Cy5Ea4_wg2^4wuwIDILB# zC@;=KCF_B8gHUQHP@Gd@LPF3RYPMHqIyVT}lEBVD&cGGdm4JEG1IavTk8U~_#>HlV zNtcyjf+X@JwQ4@=rU#vuklo3R!4s9s`=#2!(V>__t+mTBScl1VVa{ad)?{15>%n+U(gaU+|jHtSuj4LFA@q8j^LCK9^g9TrjWSs#}hrJYY;tS z9Zi0=JbirAA>OeWoQ|zU7(-Z!<40)>V2H2^lVj>+oPE6%RS_O1_fj5gWpFmX4dfH# z6EKPHAvQHNDKyROii%04_TbKVBE{vab+;GfAC!RYL2OS#7H0qEET<}`AxEe`px-vG zku@syh2umwX(y?(lIwH!m+YSvY#!IM`uA8p^6PUGau$mTLMoC6V z?Hh?QNQi*6ZWMf9w0?nQwhzuFk3U<+nZeD#y${~#p!*tQ6}4@hr?&Zh$WljA$F|bD z;=Y2T0@$tRoN#5XYBiFWCR9IOFXoDQ5_fvB`R#P_G)A$Cr9MtzQYCNn`x5)-*hIxf z3(sL~p=>pB?ga*g_4n(;=%Pmot@_4=SFew=#%jwNj`oLgQZOy8hvSB9GVP^+5O}_P zyS&s;`xe$_)$q&IMyms`SDKgZ7SpM~W-V8lcA1&XWk+mqbwojg3&p)2T(2qbsUJ)~hKInJj zaOaT#!!PR78!w*#ZESw*`WW|7Nb|P1L_fPa&uTck`l~JVpw33_hF@`N&B3c++wR2k zsq^r2{e&k8!_=HYMe|4H&l`8WKTDr4MZKm@viGTcQ@1l<@i>gH8(AA~@AcSxb*rl@ zTO&B5J^R6q$${JU#+Oxlk%4lQTq=2A%5<+*G?fog*BEK z<>4d=o?16mxVUfk;lQuL04=|!o<{d$@2T?<>M$XP#kY-+&&r;Ako~3w9zXWGjn4F7 z4{Q(RL+ho&I!CwGO|3@5OZR#YS|HI?*1hpvr&tVHOomjV)Wcl!I`;mX?)Q`VpGWmF zsxQzk^&ad`92ZA(N2SgZ?@G>Zdnjsn2<}%N6@ajumV=~hs<+ zm|yziO=s#vErz2ltQ?jO%)EQp2}uFG0dPn`KsMJj57!6M4{iSOJZppxI7ZT5RsCqo zqv=Rv?~shzT$w&s?D`066HTYM69qg5eYEUrUnP)6y~~f;5B3uhLY}LoMY1hWQ$wZy zf*~FFO#0bd%3qz9_3f_t6+|nLmWghW) zicdIxl5$*x+jGrPH<--cpNyUlgIrnrnFacX%r^Zpww9RlTegw}@|#4=OCCjf*4xb3 zH}zbH6Hrmk*%_A#eQRAuB|OF>J03Ir9(Haz8>U3u&dG1%lQq)hz3k+6Bw^+CQ8t6*+=w+nCYXHetdYjIzm@ZZ7jQ5jmKt^eNv#i5~fr>^ylsAtQ0l27P8a ztLiC)So^{zJU&h z`ww9ELBQ&~^i)S;IZ9%gIrLl(uSNk4_w!QjbMTUAILXRVFkx z-4X}D%8djZY8v~*i%MF}3>E?}g2L_GAAzmBQp5`ETE;|L8D%e+#ZL_1svbwwgZvoY)jW}HsXk$i>;KvfG=&Vq4uy1ng&m4ToRCSKuSm@pWG!G`U$j(DS3SNAsNFDf+oGwP~KpYvU!2# zZkkPvd7OzZ(I3)fKge+5TpG%wWYF&#pIK);4)~9rr6=uZXMUX<65FiMM&L~(4w9X% zT>x_Yz-7*zQ;!Sg1gEc&Hne;Ry}qTN#3Ae=&4Qg(JZmpC!JYf4Zqv+R&7?oI&~U*0 zQngE77G;{%AA9lf76vFOsn5;!$-Hzt{h-S%biYb%V@ba`+Ipvy3&hZ~Wl{PtQ!w;- z?TLb5{)ae< zdv{T$#xGOpUmTYvzaR-x9Sh)h>95PL;_75oxokg0WkkOpG~H5eJkI!^uPSDVqK!Ey zKgt?*&bum7P5H62HZKzP{q}qRmf&Ac{gB~b>{ymr8LN21@7~H1QAPO-`$H;{+vu2# z*1`w3LMlAoy5_glhF&*2*%LJ!PT~>i(B5LG`7-;8{A%4ww_jXgADi*2pf~YIBK|0& zR0-Q{98V5|LtSlWNA#D!qEw*es1PcDgm%u`TW{q?DJ%eHGP5QmBKh~<{3oy!vz)QA zGKr=Q6~6_YsS)L$=>)DOJw)%5&pejjAE%(%gdw?&O)s4`{}fnqj(x6j|70wo=EG*0 zER#v&4~_QBE8J{jt=$V(?K-9Tke7;#;1Mx+SL+CnYg2iBE8%})JPr1*8W(Myc#T=T z^~srz^ff&2&RXn^?A@sn3bXWo#+Wu*hvbA7_*HxfYeDG;e5w>yY-Sd9dwsWV%cf`O za*x;a{sGw^y1f0LqbfOngZ5R{MKrg}A6wN{9kOusp@T7={YECeUJ>FXG~sdXD5Z4% zW@+%hSM*2wElVHGNV8w#aLZt=ZHVk^oO3_>u$r@hu_;ANkNm$;K##nrAX71s+1`9+ zz5aV~SydLL`fVHcLPBD7NBAXcu0^gu|5?Q|denD0K?8Fop~sxQIThrst1tr8OM0<6 zOXI4@P(#A_&)%_GC-lZujUYg84DFZE|Gl9!3WQ{g_Sj^`BQtaj+ zE2rgvXG3|}@Lg-y26iD1X7GTD5%9hcM+zm+|9n1H`UcI7Ix|P5_I}s1D!xX_8Ml(c z<6r$KX3?N@pFOW>6c0JqFe>#xBYNEE>nmd(V?!(Obc`3$5AgZPPj0H!w$6B;El42>!7jYOv_bl&oNgwRd zo4URR3I}Ldc~$An3z&_$D6XMP)ua;i0{_upz&xvZ$%MX3{;h!VJ@!?CFIbO7y!5XH zm}6Oy8)Hm+i$Bx2!{i$wE9)ZBfa5_9M2aE_2tPPh-Hwu%e(qAwc_S$cuz!w^(FP{KNiRD*yaS^Ef{`loR(pH=>u5XT0^7*l42C#T>j!dPvUyI!f zK2QyH)8Gy&rkhKoc7z`F#f-eCq00FhcA~4))WJ{!Ki^hsjSyewaXgIlIaU9SV?MOn zTn-m>9-$8Dn9yiZA>SzU`PE@suqjrF`OVo3+3;GngostO&Itw5FjZj(*@Oasulo&3o!uL5X;e+Y|{_FCp?$$otAt}l?lu!!Wpc8{0vu-7kRzqW4120}L zpyhgM$h(hhrsRiF=Cxt2OTwgy(I@s5Y=#@kWOTAzO#&J%vPyj;8la*8Ko3irm2gSw0FKkON76@TJqep8#MgRzlK zccpYo9N(%m$1=Z0E3i1I(V)dB`!>4FKI+bXBqN3Y6lqe*JK}*a) z@?RVp;eUWScaNG*vak8e*FWdiE$1iJrN5V75CjN=$aloB$Y>F@uwR#l4|>sFtFYECy=SVRmap`F@P0`4htbEt>^&$cq$T zeZ%$SpYJQcJz0>63-AKwfK9f+=H_yy&(B|F&7;b`0Ynkv4e-O)sob5Z8H2uF5&a*4 zB8i>lNPlm*BhW`C620KTmJpp2b+irKe!#qC%6(@p{Lh1=P-H;l{pK_GWN$*Wi0K22 zP_W4krxyg7weRMur%@|k2#%&g}giEKItPn&SHq$V#DA^`T}E)qPSDO z%N?L4=T=%O+28M4s8W%$2!^ZX4GC|DTu<%J6mh_s7rdW$U= z5dX#JZ*QiU<&LeGiB7DP$@p7Jqfz9C8M8V7jd;kjGzL$A;`*6?4=UKuS`JP_=BkjL zO-)ya2+-&^ zGZLaORnn}7ORHxy;5Zk*RmfY`;u!h-nk8}${d&^9#t*v}QP2Nz;tz5D2buKxJK5X5 z>gs;~pM{CDPMRC;Qbe(_kR4t!F?$w!p?GJpgWu{}%`Jdcf+nM)gT5j^zw2x>j3DP~ z0$%o9QzRzV{TqOYg8U@51#eXrAb-Pg!nqT4u9joSq(y7caq<_~sz0J-VLp+-xkW#J zY)R>yXKtf9tiCp2OOTg-imM%h|AGYzI^MP&kVnAt5V#sBwO_0KNtFBFR1qspjKYsa zfNR<~=&JoFcOy-ld6o2kpzYHL|BRqeU*ubisPl)EgeL8K zRvL9F&Hf5&yWNUC+)3g{j@THiCgyM}A}9XoZ*Gf~HbHTJ?1`4XG=#TAxL0=eyV6Ll zCLv<>zeywD<{ABfNBxXnbc!r-0Y1W-vpv8pQe-r^jP)hk{p zH;jO~d+No*apQ^D0O!BveL;s@Ol{o+73gJFr$sEK6(aV&m={^XGb-Dsw9NBu^gpmH z3mMA_y}<`gI9Rh!H|>WV0lxTm@&B|S(@fIc!1FnQ4Mw!HS#3PQK`JMkZs1q5owxsD znqMS}Ki!hL>^H>VYiA)dI^hUzK1hy7(8o{!c$}EcN3ITHT&BV&vzr_bB~Ve}nwFsx(JG*rKfW z2^NS!H!RvyzMb278KSBN{gZkBHZq7w0cSvBf=cwSuhQ0Nyvy+cIe7g0$X3>T0;K_{!)-0r?6@b8^})Gd91CcGvA?0L(;g5r%t z^>PePNtN&&7;620Am21=)~%2Xh=L6UwrI7j?~bWillcFvvVrZ?1Kdav=;p_Y7d_P{ zG%)YcrZVAW`}a0dme?HF&xC_eZ8hOCl2?Wpehq%8Qt-98oU8w1354;cnGm5gZ8{pS z%$$Y!^Md{*o00@uahLxGvxyyyetEHf6oPO#qI?)52=m8}&QSfakEBN~_$RV|FaJ;L zyF`e<5rwAMq@bPoPtg_a7F6rbfZye?V5Yxm@SM4Aw1Ig3MdD+WXg_bbCM=1F=S$~~ z|Hk@%TiIACgbQpPrfaOWVr>WflCTPTD1|eN~s=bQvwT(u?DB#bg0c%mRHE@W;CY-U@7h6%J=(S(*kf40` zV8!Nr_usb#AkQ>P(uC0k-f$5kCmg&A{1bMmNPGIJSpP}3^tvcT9+evlishC+Jqe#@ znLL}#i9OA0<9wO^}8q zprg9Zh#dq2U;bHE;e#f=5QFBn;Ly_I`IGhU0m^GeU%hyPE7j%V7pc?NEBrTa z*~IuSN_~Bh+kc}J_E*>cohY%y_D5d63pN%eW(z^WDED5V0IKV%LS>B4=|z-w2>j+t zyX4KAW0(Ju7cu?^wP@!gPh+rL|KARHF7Gd}w6_Nm^l^}baL?MHhKahpe9K^HpOPZ^ zk3UPBV{Jbml7E8n$cO)zBw6qNw0?>1~CqV^j+juyd z5r--4xBOQV&<1mvNRu$;J(z z7Z>arRWJp-&)70`SpaUW!S{hmah9LxkFK{eQ?g?uC+sSYzgR4{ouX=4&piKS=zHCL z3tFpv=zo?u^}8TG0?kDR>AYP-;hc}!u_{31@$OU`u)bQXp@_g-pPun1O}0N8(lBh@ zUAfXY{_wQ`-KFf+*zM)Mx|b8_A{BTZt}axJg?}y=@`XOODlN=KKYkYl`&d!WX%cL6 zHGbe()7e?_>Gk@|PSWkIyq?!>I=b`NTczevl8_?G9DTZ$`wQJk-%6FC($?E%Q|TCO9kl7&Cymj%Uy7Id9ObuTmAW{hpj>Y!0QEwmjSvvhi57cx?$p zaJAI6|EP^JIdjAxxJY$qY9GA87g{o_nYXb$6zNyV9h}1i_$>Pf+a^{kjLHtN=cheY zHskI4>4V01b`E_t2~=fPMs;%?Tr&q?Ab`vmDFgxxrF(7NGkcj zl^y$8bg8C*4V+iv@z+FMKeXege-pj{SM7n{36rkH=ZeMeH%QhU=cOu_5LUzsupPMU zf^`5Ovxhrara_f5XL(KvqV;OtDx>xpd%RlHk=&XoPCB3ehEUl2FH2vi#m^#>$PW*f zes!RjcY`<`pyTVU%`HP;!N>bUzeN~AG#*oOT|2(?x7*E$Pck;sJq#v)f8-l#_KrzdvYWzmRi5_f4)#V(Hu1 zPuLe0{{g;jOipP#k6&+}u(GAiMXW9n@ErfaKp2704lb^XMz3V0?cP+dT{~*tFI?$^smI79013b&{ zZ1QrOVCJE{o5@!Jc5p&|CsT+}Z5hCu8p zFC-hi{jf}^;@??*sEYT~ILq-Iioh*S))j`IJW4`c zdmNv(+VgFtdz3h$_|GlOCUR}@*%mh^?o3%zxV9lgCC)-GX+E0{*0rJFe$UVF?cpqIL(ypWaj;DH`a&hJNtd}eRJ-&hp3u-pGFCeM z$+D)v=ZjY<>1Wt|crP^K_DIM0NSMH8^&JL{5mKOO1c7$ZiD0P$tWfM1N^IOA=329p z;-^EV-j@gZWdqEjUsg*Fn=dnTJkqP1TU|#*8a=a~9y_mM_X1s*2$LbNWKq6Lv-rx2 zHh-$?g>M=(-%?Id@iy+agy>l3Cg8|*l53tUz)UX}aiEhmV*oq|k7BBWr;pM7!|fyA zEFP^%!@**=&)Im$O2*z$uH|Tk#Y(HDx3o^>fL@!OzXwscSo`= z)Lx+Vl@QQDx~TheYrK=&!`2iEL(ld!j{}iBk5VQ)R@APS@9F%Y`ECkzmrI~o-Ej&b zy5q~W7}ueohgVeZD!Z808HV9_aLohax*>$JtzHls0>*r zzLPObEmCjjcY4B6>g`wBbkmS>3_Z0tS}q*oALLwPx!FiE{QgZ%bR1Z6Ne$m=91-0M zy7;^&@fg?oP4&Ri!26o)@Nh%RKwxylb3_lZFN(g=xzr%PT2{LDiWDwvxTzSMs3_0A_|<>k zVbq65ClmuGlnV7m&5{<33$G6$KuWBTr=rC?=)_wpy|BHVbZFpg16)X^@ozW_*d{*G z)6!yED85Y<9Bz8Jv0d_Qo|lLKa#f~#488K_MA>#7t1PsoO1YX{Du|J9e;O3QLl4@PxV86 zd(&Gw&&CdZ*vV5(DeyEMHKm;OF>NAzhFkjpKt}GsW{cQ0Pthfm!Hzh|jpBB^aO5bu z+dZnA-Jm*#v>Glf5|o;kZA46FXo9-0BSU+Sd{)>q)A^Mw5?= zo=pT(=-WLU$M|`UuE|>b_NHTWcpXVYw=%yT)STH1U4wblTV-Kfs*l{NW*1dThI0EC zlveyEghO^O1o>;sV#H1C1u6%*Ym$DBjxljoPrciOJxX?@c`RK^K3+myJ!C-pr_18v zXUpIvJJ+t4XWwllc!ZtE){5V$&;*NWJ~Z9za^$kMJ28*(qIuTYbT-*oyx>NbC@W9c zHFj6Sr;%;Xb8y;Cp>I{vSW<5q$fd+PNrDkx_i~~5 zU}+6DLMzrFu<~Wmxv_q~Mi>9$hP?7-w=h+P!oY04T6ePgRqxu6fU1W%g%mD#T`a^T zf=ka&hkF*!1j~F59TihFWKVpXBULzdZ*J}8JH8N9y$i3&#Op-eQfe~nQiZqme$$Y( z`C@)AnQo+|tnuJ!)0T6s1MqffXL3~B_8?PuT+i?Rb4eUYYvuXFIgfz1+o?a1wVq3V z_km;pKnx&wc4!*LlE}NCp2C)&?*2u`b0rveT_03klkrGETf;XCb21G83>kH;NR3L~ zMmlD?-d*r2=bjn>MQ%GUkN1Z?ePC;NiR$wfS4WL_4@SHK+tstU2?EPPT@W7ONJBMC zz%Z|`%pnN?8xaXvX>-1f_IBlqTNkPJyO2!JiGBx5Sf%0$>$Z^FMuJwVWrpv3+8$gV z+dMIuoa>Y5E%u>BwB)9CCA?xV{Bt`QIK*{StXKTH>l=D_F#Oi|W!dP}O*L0UuK7+i62jbvdwN4H08;in{;_*^I_kPHt!%|0aDf7| zE#=-E>m)c`O-L=f%O_ipZ~1f#d}tYsZI z9Lf7N3rkvCt+xka81~Kfd8#R^GaNU(l2`2zWL=N#W%&3)z7?d-V~8?8s&0NULTj~G z5Dk+S+DQZ1QuL^3w@9^TRJF(iUA){%17=+MOnn8V71PrlWx&#|Ybrm!S{WnwhEA{p z={)tAfovs%E*D3EExW%thL<_GFEh%!yXI|6_a%DmM-@Z_M5^C_$Js1vE~;ns)(%>E zoWV~Bgyn(yZ@%UDgzC+qyt?6^n=uQab$6>dPIfptFz$(>-n!`R@{8M}E^R${-lV=2 zOvQ%LdcC>FYdNn#qh8CBcPNl#SsJ)qOk|~-IZTou7os%ix#_KVh)M!PdVrR zygkV6#}jBC72SKA*@1U#%BqLxLh(tZlkFkqr6ZELVs}Q4Ml`~%bH*W_0>nm{)d6oC z4{Hj=*pggWtxYaEA8z+;d!n1Qif~Gjn`i4!Gc4fEra18jM|T4pJgF_cw0mq~m|fpN z7c;t!Dc@8@+wm#R8ryJC;3?kV?Bo!5&5-(c)2xO)Zra5dK6Dg{@-`zZ<6~}kr~FrP zi(La>NUj9}2C3xQ1;8?Z2T%GB>r7+#P%+M8x=Uw#N#vaxFbT((mh`-AIkQI0H+u%MFF6*5V5&z0-5^K zZc(%oc`Bc_rsFSrASI8h-j>e$+jKa8B#vP;wT1S6^QD0Ur2JB~r#Aw0xwH9RG4UID zryzL%qFS{ltvI$G&x#ZPvf_8g*RoJps8LK_3-3NUsKSuW-^I$%2xr{}k=)!M^cX>= zGAjybYV!H_kTiw_=a4Z%Afi>wlEGF#UdrOhfN(QsB?PDkCH=(f%_wpg?ut+i5%jE?oIHr~iRs+) zrt!&YcTw>%HvBw24VATeL1OpJ36h&+RXB8DDH>kB79%wR3K`_CO>+$6B@TXfAg6GR z!SVtFDx8d2xwQ{LPTmI&4hxyH=0{)UXZpHX@Bt2Jn}VqdYQ)v)GTc_f0&Xv5eog1A zIa((6((ugZCK>d=%eOKt!1#h^w306-QmDMA6TlLFGD4yGYKI0TuNeAhTZ20Z#in%f z9^Kw2{^}aXp;h$Crhjazza~gHq{@Rft5VoQ!=J6tVBY!QR<9u!{`m5Qi z(tNyatt|LN#xu1H`12MsW%T%@=~?Ygx7{k`_97onRJwO&gsM{vpj*1sLQ%O>tOmfr z-GMn7@-9Y^=GY;Mu|vZ#hNb$AjQUXpoOetX#Mo*{OEr*4$@U2Qew`=I+Q5Amvk4Pg zYNfny>^QVFu-xQQ0X?}|{}uzHvZ?;S0Xt3iAP~^{WKU<&<*`#yYrWw9ag;|AE8Tk+ z$wQZO^rVz}inBP(MQXZ+Z6-su7WQ~B zq8N;NgO@KhaIN%RP0Iee{B!I14OzIe{DRQ?X_=o+Fa!tz0Yzd|>K5@dITSOo1a|jh zIvG)KBq#G!J_E)H=S*WHy256Y(ZZV@<3A4(&E}2oqMj`t@o^5V7fY5|7E9ULKV!P) zOx|zVD_Q+8Q=Ns6cnvF`OA(H^+)^Ahv4goBCzuQf+L;*Heeru1dq`pyYVn9la8&fO zrm7>HV<*!TI+LeD%|qjeU<2J*H*>cG8TIo(2?z#o=^0b^)h-}WS`3UnmbuT68P!Fl=`y8_jfe9r{ zSk-)?B0>A;t~=&QVgn1C8_>B{l1c|cF}RcE<}L0>(QXJ$ilMVb(f%6Ap}gf@xDq8^ z2k%_x3@6j;Xcqzu;F9>|UBu>h+fvt>ZJl`%F}2N6Mj#1_W|L5GGQ#OP;4(3dSN+=NGFHJju07 z-*?cFYZn|^J88xXYj2lAVkoVnC2C5yq9HpME(W7~%bNz4ud6fmoyWVADDTdl5`Sm9 z-%xEn+ydNcpMT9FNsET3iKqZ*Z$vPUjcw!hN?Hxl7HxZ@)AfLLQ2@Wp(c#UIV&pv4 zR0r;st9Rh0WrI^{eltZp-+o_`P(a0sV+2?2S-;1YK9hKD$zsDbw8GPK6jDoh3kAUK zGW}uWlcPhtlbN0aizRZ8(Pb~=iX$63AsO-(x!DHI@DmOwY$ZVpv1=F-;V?(sS7{x0uL|Nl9^RHvL0C-UZ zXEaRHyhZI@d-rP_fd|S>RLZ&XF;hi&i>nnxJ(-gYZ zl=gn6i*7cHOHq8Zsh<{kh^{L{i0>-B6v1qsY?l;JxwWG&ouc4!S{=}ejl8Wp^mT2| z!X3UR6t_}uT}8#myYaq4${}OguGMo}q30oh8ZA_deOcVO;2GrVpAX()v&&`aJ2${9Z&lS4UO5!lT$B%>iG-K?60EYc&J3Nwv>4d26!Ksj4@M z){WU@U%N1J9vH)+YhRzRMY}M*!@nvL1g&zf(UN^6z)*TQWQEV4tq^m+JLV_fbz zam3$l`eQI2B=_$Z?Snyz<>6I5GlCWJc;Y4|U`dh=f=EI~lQF>8H?OGe$^ynoo}3L( z9|Jyj4|%0kN=^_e6W%*Xmm22&`DF>?RwoU%6)IFp;3g4< z%p9hgYR=;V?7^ZeX162a1&96fTu;nzWSUlMLmgBmGlqVs9$$nmo^>r%YZ-h_aO@Ga zklpE2b{0;Pv?3PhC@(D%R2IH1HuSj1&sZhGxhub1Dr_c&nvTk_k<>ukb!!De1N!2M zzgrNmW(Nx)H8YWC*C#7zd;XS`&vC*oD$yvW1hcURM=5modYY|wT`LH>1h+~fL zcV%TvXjgWa%bj^;6eMw%jo>9XzJFy>NL}=Rb+RjP)U^`Q*agD`B_mB>?oEKZD7OpF z#8UwC$mdzzQM+I9te#sZKVIK$bF9ikMs;a_o*KcxxA-H6Xm?%ylL)StJ?7wL1l8fF z_-z$Wlxeic$bG@&ZmEv(GPL#4f9#aRC*WEdg#h{PpnMTi^YzYt(UBO1JchKfMTG&j z`!P#W9f#wKt|-CzzBJ#SlngRb@*5{HnylYiwpkLi{OeCE`&m;PZY#54mFF|GP}GyG zzCwADX#^**yhwC^?lQ;@zovGC&&(qBWLg)JC|Bp+NR6MSwMWIr$a-Id zasouHBk|9!d9R$xwtq%=8@ONDT0G~>T27agfG8w7=r;nLtv8ai8SlqO9Xz0$QvF|Tr6Z>D{03)u2fW@4eYa94!ZVU&}! zYG|cqy6Nrn3bwxaMpx5(m0`Ohv_itU*(tJ>MzMVwD@%9|l558^$Fu5Mj$J1h@lCzz z1jXw3fm$UrhvZVY^&30^AUi)c%Q(7{lOJstA%veyj#ij=nT)h)QP5iit2INcAaEef z*xjffxx@Ra{=8IgU3&Trv%y(O1-EOxFklX9ju~I)j+9{z*N&w`TPpq#mk#Y5l1gv}e1Xs-GLwAVcf)Ph{ zh6Hea=H)TXbjBWJHkZG{-F}`12z73Oq^^Ex4xL=8rCIpmwq5q|H1oaYj6q>KFfS-0 z-v1=PS2H<<&-9Dq=5Dmu{`zUdu;7BXz>gJPce~S}kD0x(m_r$lTT-c{*H?3PmnnH- zl^@I}kS#iPJ6&Xd+9}%pB5d-=SO)EZqm;S!&eZ`l4~Kps7l)^x00@eLy9EYrE*@g~ zMt8h}1AoKN(l*m+96~pt*DCyZI8oQ`phiac@{M1-{C!QUfDFq}B(>1UmRYTs*nVB* zR`f?XLdhflOPZ}b+u4$g+Q!3{Mx$2~1sd7n7(ihq@3+F)49LV-&&K$nVcg7!FTr`G zlX5eDdWKZ!r7|md(2hhaG#)RhA*IhIq)|o4ytYt`pcW<8Nv#=K7V6{VeMFJ8<-Et| zk0_uzlsV9WRNK~CSWWHESZ%r9YI8AEVLA$5xva`PYCb2XtW@vnLsH8)C#zJLF#yuq zZ!|hC)D#ygCT%1jHqgF95G2mfciWPU5vSW(??;!?WOLnc$k4SBxcQQg`YA?8l`5rF zyB&Ne13WZj}}62Xp2_hnGfxlhd>P< zIK15Mai;qTuw~82kftVr<>K+P#gRCj%TYp5c`3ChKr@bVXg7e->Y}!C@kQ(7;idfL z=h@?}YJzdEvcp+DTdsuxkOQP5SFG?oMojBNoC9qXmF_z=dKq{#V5Y@H&6FlGe^4`P ztjdlJ1vZ>ve?(zk)&y9P*^yXSc?6xyT;(GeX##CJO0uY}yoFvN*cnH{{>2>bIyC5h zq$*PhMqxWTX%ytjS7p7$meuh#UROJr?Y3?MRhIyPp?eE!Q)Fn(M=|8@gQh)VBm^P& zUr_PNRg9p%Sep1I#ONav{!}krf*N-xKu!-)G$MKq_?C@8HXMfmFPOUy;Kg=e;1!rt z8-S*9ykPx$x`5D$0M)`-S(mS0qsr7)iSN^s7?{U1WevnfP$dYSRwuT4lwcvon1xi6 zBP8Y6CY7oPWoF?g1A^zU-&AFMWk_XFGfTwF!36%k5iWp=KFkAK3)6j zYHF05I0WgmA8bLp_G1|zJBT=IRe}_s_UTuo_`_smJW~#s^2Y`t#$J~b@zzRA^JK9&^WijfbIYrmeOB ztXVtSX9G7xhhMV2a;wCart;qZJWF9`97uTY5}FqDBsX6?M8EZJS9x>?Ki5-1?8^<$ z(9|jwipIW|P2^Oh$JwBkfmZ^r96HD5D~Y^yM2DBwdRsJ@B6C7A93~*2;N8T_69gRu%XHhHVQvN@fOaYQQT#vo0~rUAB!8DUOVcb*@;a(R@enXcdsd$O0+~IE&MAMk%6UgvuDAu?JSo4qSM;-4M5D z>9DkNovGFx`9&y@3e0vMiu$gdG5ZPSDlIj944gvo%w;4$)3*e~Xwa(H?r7CWY2TBow0 z5czi2iAAs<)}KNKX$%yXGP&;Fr|^%X64*uYG@m&KJ2l5ctx`%eDiH)F88MS8`e+UD zTr4obvxpDy?wXY!Hr@t(%r>pOBF8NIm2OV)tXoypbsL{w&JAp@2X=&n5uqc0@lV~4 z)f0{0*Vth}&*51;8?6^sx93gN52S!F&#`efKo-Yd~f_qHm^I zCg{}xzv#swFO`+3gPg|f`d8Pgq6JrE8n8-gC)l+hQ+;RgQE#98$Ro9UUK(gw2xiUt-PF(SQ!E7Vv$7(EoG92i-n6;=k!2w_Bm=iE9tq-N_01_Sv-H!> zy-Ap}LVtb&FI7LJYUzaN*rQUs(5YmAIE9*)%x?)AuArcgr?VPI&tA4?6_Sdvx7i zMN84XsXDlz{h0T@c&gETtB=TGYWV<+uJ5*dz1eR&*v|+Y!<#H8m>|I|C!NH6(fghu z`pdBJsX8(a=q>K6VUuaCXBw=seD|?H?Wt9Rl7MJ*RF-F4%k|}6apKt29dIDb*13!B zQF-%tL95R*U$tPeP=;t>`n@o+WRpC;`q$D|bpF7lX5qbv@Z6iLEnj9IZySOQpp)6| zW%#>8kX2=ta)KSSoCj*wtN|^N>DXPhC~o z4QLh_E=k8ej|d*zy6PDmV|~RWhHQp2u0fk|n6B7xn9u<<~EJdxdSGV{~8qV!8U=R)rtfD5R5m42P=N z+d}6;L$~PEyN(Ov1)*a3@Sfa%sSs6=Wt4N5pJ1d9;6sUN z!#9?IDe&5xZy^{XhFlX{}7UFdla9DlbW=tGt~Vve#OKe zM}g6GuO^RcbMCb7j53|Ilh8Faa9tzAE!#OMZ}3$IEO!rH+o5MObhyvD3FSi`GJ3ab zcH5Pyza}aw&M8bg*M$Ly8E+4eCGDn{edPxG+Y_?M$%2Q_sXS-C2`(rOnQOshB|7h<%^5;B zD-hNNi}?7@As@f-9#HQwn!bcLR5L5<{x-vNsEYxdc*?1E z3qZ)4kwAI=Cx5eLqi&~6y5N)##=cK#FBHOE<5?%xpsmkKx3+EDwWvmn1Pz-~$Ai?t z7H6lOAC&zGnpaiN(DF64iqTGv4tNfY^0P0ed_MMd$&=1C% zO#L|-T{TZ_2}!4#FV`VulW8$jo)YstQE!Y@D)$6X8l81bS-gDEHRCHw?~ST5T^YMx z24uR$nkM)OC2GzR51t@gE7)I1;`rlTl)3^+8dM15Fg(J=R>Squ7f0Gd>8nLn6~6ApOtgB zH%gI9Y4A>@|E9!~<3^qTcCUP3q2|47+6qS%a29pzVcV0R$yckZnmc-v0UuErE)3FTOl3j17I=7gXA&?IJak#1T!r_YRq;5 znJWGM zqvE6N8}XMXQ_jQ7K64uin{IAb%VHKpvFC#2cnEa1(YKj*ac-Dz4*!Mi#+??i+Yz*-LUuT=KC$`cVG~aTk=h`3LubST>cb;BP zNJgJE)7^ue$Pz*34iIHIdHrUU;=7xgOE>w(2@O1M+s%+LsCJe)uvK1+$UNKu`%-%Y zIJL5apjPuxyIT)xOmt!%;bP=6nw0`pqB*8L8Qn_Q}WUZKMidM{JMcQ?2QL9NIlLL zAK*#ymFSCmuUx`yY{x$FNYxyF1Y8(Js6bey-(}G}?#x5OXA~F}jquj#{hP!+nNycn~AYk93lpM0C-?yIa80fP(NWc zkJIbc0ZWo%*3PSF98UTK=XcJV>8pK&X-lVyJFOq2*ucr~{(C^$ zPwUKEKewaTs`A|uo*36m**b5!92Vt*p@uzr$*2K`7#HYW9v&6T(X!IZvFCYQvvJzJ zKR?P6Ejc8o=V9zy}HX0BW7}UxwJXti-6|XpJBUn zUUKvQ2;NaXDK{K+z@fKnSYOnjC;2&6U?xhLZsn#UnqpC#RM+l{=s%sd>{p^xzKO4WAEfBkQ|7!1M;V34g0^=G;IT;Wd8Bo= z>J<%3H`rc5Paq(9`#V+b`j&8?e%chi?xsxJIuEi>!~X=;iGkzOaxi=$!WV0XddU)Ul1~+q2~cp;EPO@9&gy{uU*h8nd5gYLN}> zFiUYS05RIiz{=?B%&(5o<%>1!ODtQzP~ImrT%2H^ZDu$YwWLn~+QCww`R3qzd6`ay zP_aMq0rI4XpyK&jdk#fS`#4H)?2j0*`AVlx5LvR1oPkd{Zac_I}ml!vZye z9o}&ZR9gFa8h)TBH<%o#taA+#8EeUQ&ZoipSG0I%^m41h^(C|QR*JeqwR26aER}Tw zwTpeU9mUKYEq$i6FMF5iQF-!`Kud$@UI21db;q)z!rzQa9J6n|6&d$-GZM~!M5 ziy6zt8iuP9ZO7_z6%Ny;n(LeV;=Yi9g%muDZ%N-6g!r+^tpLGo^723@X@QYXi{&v; zsds!V;b6WH|DtTw;y-ut(Ly~!c&GyAg|Bu6O9)rK;TH|t_gf32MHqJpFJYbv#oH5w zDJ_=7@a_#L2x!bz^9yIFb^7tj9jSn>XCt+I@Yh$Ka_5W#b+liAW!ka4iG>q`AOJ2{ zD9y+AO`9OJO*B?Ox_2NBAs;&bQ0D$a>vbXx7_StD$|S?F;M-d+Tyh+R8~X)YN5xWs z#ro5l{GiAPo#Q|=W3?7U1ch|hfoTi7DNT<>_gZotze3#R>l`fEBN3M;eW4Hn@sdUU z$*g6Q%VwFDtVOlHxld2$I~mRGiCK%w=!YI-(ld6aCk1!!!YPIg>^g4`8tMWry0gG9 z<#pUiEgUeq%6Pzt<#IuR(YVQvYWbmzcO+Zx<@_Zi?M|paLD3UQ-$9HDEn>V(SN&k8 z=7*$7gssul$Z^v&2|UR3FXbfP@t?-{dvPB9Ls{@K2wEjockc&&=JC5HS7o*Mft9aO z1ZK^f8d{X-dzPeQ`q@n_i5(TDe`%rcr=ocKCaoq9q+Qxj^r&rwp**)Zr0)mct#k-` zk_~kM_M(QUMgG(DK(BP1&~T;)Ba;v)`09&jjlPR7(Msr@TwT+L=)Es?r?rY*&2~$H zyn4;F2qhW|Tcz=Eb}l|p0D{epHZOU+UZN>JyFl~jiB(p5?ef?b1SnNv$Ep@wQY;;k zi8M(gJ67&r;yZW_!I8Cu=9G|zHtqeT2yxn)S;wc*8 z@_(&$b7l;W>_M2FS4FI1m}cJ}81+@{Ss>AQH|1qj;T(ENES+@$tAGT@UTwWjOa+xVf1gNIwX++~WB5diC;~i^QIDKL<1wXXe^-U;MbyZ!&RWm%*U8 z1|rYe@MdHd!W*>QK!sZ2H=$)e?_Xn@nc8k?2i&f-!|rg%*9sfEPOmFsUk$&w+6sYa z47Po_#T^Kc*?SiXu~Rp!E6|MyTTl?}OzPmn)4pX-JIo2a0OSj{h)defR z<=JsytA0zKcA5Y=D5>1^V>cWeP?KMUUPeP|BLNB#WkJ0ynp&h45ZY^>v0FSd3Md0HjVMn{(fozw)|=+3XNqeC#=S? zpoKW=Mo!{5Vm+*rcydzO<&4SEQ>~QYymoYeCne}|{_x;)Ff6;duQH1qNkj(YaE0aK zf_zZI~SnM}#l3&>WefScOD!W2xlZeImpwTr{`KvmR z?_aQ7D=5QbvZ<)^%%u--GMukF)IF#-^*e1bSoX16S30v(uvGK7)>0(CpKYOa>|3k9 zT9FDX7dGUQU^GjDE7=6f7l%yqwT>JP_!_qTm3<{V0Wa?~Mi~>Yody$K=WS}wMtYsj z-|(+h8sYPe(uSSki>)JSp(Ng?;o!`m)*ituilB_$0#cDf$g{-mqFaAVi`=->h%gyG z>&c_%17a!9+GZTzX|8?P^et~NCopI`tO9DDYu|@Az@7~JDVY1O_|=4w3U_I`{1-c) zyf-QXtB0^xaNSEnc*~^DT%kATyO#7dXUtXZ6FS*wx0g*3j8%(FeR+tJ9%a=aYA~(_ zYZnbT@kdcu;ogYF4RJuXu6`n3!AOwGHp#=8Jt(g@pbXX*37Lr7>}#5{CX9FHW&aHc zm-r9RkZ1T$5Pi)WGmBeW*AREP=OeU5TF^r+yD~8OrDV%Y!ru??L*`{vb8RBHVeM=1 zq*H5mdRh)vfqanV+4Wl`>)8e6F#Jv}gL;d63hn^T-3UMHl_8e7D*KD6PR>98$3w#J zU6V>)Tl#H(;QDy;sucbz6#!8b?UxlwXV5yId?|$kVvXMgVIc`%lwUsS zAlc%G?>OY3TBz9jh39#HK6$XD-%XytXg*W0g(kU@^YUC~)vvfBgI=9GB_Y+EQHyc( ze%mnlGOc}&k#OvEx3~$9DlSVf)U+A8JlnAUri)M9KC6jgt*q@;zmh5>3emL<)hNceY}YMrKcgcW$7HL|bX`G-jI^c3Q$`n@wG z2BYd_660uo;9yiX?PsgkN_@rdbo6=QG?mL%?E)x^X4Ij5O4R8=IhsU+N8+@yA{Gns zo6eL!q(z72dB`-Z=gA3zhUb6S@|KEx6fKhqDK${&IfPzED>wGE>cLSE%u!b~y0(hA z0PEweD<}+4dGxr``wOSCmOB|*kA$6k410K&>{c3a(+M7A*5stIQlXpfF$T}V6(t7i zczyl|9!y>@y7{HO`Jsr>w!!`OeM2U2qAupTO|@+>yoG1kDDAv;3;$rGZ}>R>UD#_> zkHp3=jzQbcExvavBZPj(;+7(mY+tnI3llx%qjIeOhxH$#?j&X3T3&rGSiMYa`}CDx z{I%u}4}VJxQnT{7HpH**QcDpPs5f%?G2kUmRQfDm*uO1hec8{4(g9q~+n7+m3D>}4 ztf^o+`;GcLHP5qbYGu7_vPgbtDov5=aIk|yoajw7heD`aJb4680)hBjQ8<@mv1({R=)rvWmDw{$=ptT+B=I z^2Rl<@A?0H#UDNZU~P_-0&JYU@Um}=N+q7RO(B*190o~x5 z^tnQ_Q(L2ab!9r)Lu}&TDT`B9wUlb*W5}nk40QvVbfk;KA$A&c<@$0z<$R<=<)cD& z)l|=8AoJ+#mSA%+s_EEpUT=8&jTnE*xuA2CwnzDe{;P;R09Db>Lz7_1c7v;Y)bB%w zj_$En+D)wE)@(9q@&2$THKm@BiZbFH@AqA);@sJGV58V*(2X0)X@M+2tXDCJ)xHF%+dLTWcvBxxgx00V4pgiB}&sVLmixzF0@@bxqfMHcQ*1 zgqLEof7%9_s~7bj42JFX>E64H9Ont4rd+QsU7!olu$vOicg)@EWlNUXuQebS*j1mX z`>^veYawniN{#$bS@UJ#LVvPh?#kfL)RG1L1{(e9=R4}%rn$vo3WqiwuDMcpqrjLG zj}uf#EBfTGrw0V6y^z=W`%zP}fLf}7J~*T`AE@1wZ<8YEHB?2|(QrGze-%f!mrpf) zjRl}3+DtPsp5pp{{gZQtaZWy0bytb~Gp>FiRiHX%qx{cU{(ClQz$!_2=w(MqJy$-o zOuzme2VK#?Kvf>mpZnkM4ctoZE1a2s-HVTN8|f)1>uk7xa2|qcFlIul(b@l@&izAe z_>KjWt(35*TkeJl)jW1S9Z6Z3s|ELP7dNg3DwD>ShTYVOjsfs{Xr) zND|;gj)`;CB5Zo~zrA7oyP-ZMLRBUIV6>w64+i3&2628xg6t$eA#73FD@9E82S@YC z7ihTg%mLPa?E3%SEfX1Tg?gw`VERzK&HrWW;iqPl=l?uhByg)YdT(F;0XzH$dGTEe zMn$Oh&v$rQvlJNZ|n|tD%GMrVLj!a zJ6jEiSQB(VwnH;*c4n+Pp`5eqt`5GPU*QDI@-m-rj-9S0SwMk@r1MG&Ws#GnvrfwA>mKHXf*#?81=SaXCmm4hv?%Dxaf`gi{aA|i#k{5c zKi%~4E&uZlHu28_N=`y5j`HGmg*@89a}~gg3&|!)zDVq!w6Pm6n6!BQ=jA7fzzutx z)2|dlb^&vDtY4EFWX|Lp*&gcuB2xS{AkW31B){0;pq-2PbG`okIlb55sEeE!&QXLb z8w1J2X0UyT;y!e@qa=KG?wWP&^%2JKO|on{Y)t&%*>t>MvfWs=Bv;Ei{L1%AG~j!> zX?nHKhx93h!@~G)BkxUpiU2j;aZEd#cs%Whb}CsU0*vzwpB}ksX)P`2uyjJd zZ)bkorExTx0ju40K?B+IyD<)B2bKtlWm7;V?^vz+i>BrJhN}ARly;u{a~sKPYO$w3 z^+ZW9JB!_aX-8A6VTc#I3URT-jM%4?AZXVU z-?8Y8W_8QGM`@MJ>pdgz6IPLJmg;EGLo|JnQ~!6Ie`g1}BmW*g@elTcjKmANoR~G_ zBn@^I4rBWdN@OR}>kMg!(XZW*Q*erz#3r=4Iv8u?E~ct08{pRB(6X4 zbO>EgrT+dMA1l(EGP*SGAet3EcP8V%7&}jxk&fQau`4$3(9hkuxF*1-tv5vLZD4GL z-f-7$%DWX}&ly>{f2ecbDo;lUx<;IyKeLnP^T-y%F|SeL9LztR7YQ)W0!O9?g3i#a z-hbqxmvqd*9X~8te{(r4gW_CvNLVeP!See{2jB zFy0mCRtYKp9pHk%gHjgkdFP#Ms74ne3>^7#Vz5)!hll)2x*8|XoVBS#OSn**xnv~^ zlVk|HT5a=olV}p#e18Jsu@-YXp*^r3$pruDan`4Muv&lnvj8(8buAGroNJAu(^~-G zSh9lZY3=Jjs~MRb51gGVQSK+m?9B&TITT69DD{&Zd?StlFIpu`BHc>(J_c8e|WI>6(2Hq{j=#;+BLIwp za3xr`tfSQA^ijgSl*dy&_Gi{UHv%&me(QfCXUvbn)t&c#8SIwg(wy1 zuTLO2k5v+PaG{0i``)!#nHoDSK27F_HS?df=!q>nVv;u+Olge1|A4aQ6}`CN$tMHu z9PqtQ{ltFrC%{aeCIo^pfb0C!EP}0=B{<8>cyak&K`c}_P1=e)g^ZpR|LmK-6MA!+ zyAcY+#Z)^XhR(Y+)gB5th0C%1pmrd?mWDyEI{vQj7D_bV$FZN|;(E>xv1BR{YCt2s1^ zD5MFLhSZuoazA`${Bx1F%IhV|ZBq&6p0|I`XZE6k@L_o3U(j+YQ?4R@W!^7oJdlNk z%l-wy{ChIyg_f_C>ZwJ;<(U^iw88b1S47HN4L$)ppeJP8uhJQFU6lwBX*?ldx+a;{ zi%!EoA^jQHg-`CJWU1K;3p(QMQhe+~1X`>gLy!pT(_r&}#)dk}TSHoLjEK+}y|bqg zKQsiVboj#a9+;45;gn3$ty?AB;y%gE0&{aMsV5?hr0ZO7#+q*j$GHtriSi$DGO5kjh(F|$NyYHxBc#+ZdT9HR)inLh8yZ999Qpb48y2E+k z^#JEKdvHd{rMk?+^+57glrUHBcPFLz`IS(~^I>uQ1eOIUI&#!MvmQBSS2mVnHWjMq z-~B@t`3hP-nG}hNU`;j}br%cn8s#*kdgKHm;&JO4q@Rf^Vv2u0X?Uy z<$!*k!+PCJBNYJY(rmHq4iS6T15uK)pN z7pXUphU=zVjO6RK{OIwr`e7CPh0yJjtziQIG{pjFwb=?)t1fB`?~j1CN&yTu3wJlW z#oxpth&Sp_2c*a)P?_a5w9ni>tsPl{WPI;@Cy^*qm$JGR8phg|svj}}kU*onnHtkV#3TtP7?GJEBydokQn(oS+Py0Fgk!cFFCX@|{st%)A zx2MYu>&z!TA5Ou*pB57VcFQ~wX@%+Jz^zbLQ%EX-xz8(0qng;*DY z=ZfOmxZ?g7s~h}d|8?cgs5K2h_8Zq?cjvhJ@)o{9gz5o#&Arg2Ge_S!)Z{oka8D1tb7;AVrk7fQ``TSF~sZpZBg%l^3N$Oq+s4Kfg)*U4%rRG3O=05Hc4$q1}1nw9sv z9Y5ovtzPme%H9ej4YxvgF63b(22&}nHB(`{k?D(W^Uk;I6c|KdDrBDr{*R=rG5)1D?GS;rG<@Aq}wdZ2&TE@Idg%>e23#vxBZL0BkiQcu&Mlf*sow z&4!Q!ti$-I(2xVXsb>=TF6Tz?!5{7F9i0)%&ZyH}o_xmMn7m zA*u6XV}(Y&3^i+*zSYJjLW1zKk?aNTehsnj)Q$-amcHQ(V#?e}Db)nKlNU!ry5QkU zVhra(G9-I&Vqfg|dfeamPas%@d;|j;Xa0$!<<@?Hl&~yivf#YQ7C`LsoohQMM#nu= z>H}EKWjnV3Qg&wvTJ5V`6vJ;1HeFYA8U0dx}StA z@SQJ^09`}IwDV@#{PY`nYn^XvHJjm_@Fxe9@yra9J-KH}k+1w(I?#)|OtsHcvm%$%`bR12jH8fzH9+1<}Hh5Ia>bO z7(qHr&eJ{?G!IqQ+~=G?B=tXG`2Y{7yQ5V8h|UiSs32L1(XmajR;d?6G>} zuT5AbQsyBVIf21XT}-r_r7cHYDSESgX6qG^OJSNdLT)>wwa!lk1-_nmX3Jk3U{v2e z*}CeFJ6;;BbwwRaV1EC~BzzBmBkk^I9!XFr<^{9RefP(P9E9mp>3o6&@FKL%aTMTI zgj;|?zgML8s|}p&h9P)sR22nTThWj;H;`*2&v1CyH(bV;Y$9r$V%dRp(<|SFy_-0? zZRLE4#h_K9!)IdC{v$7a=e~mpy>nVbw8$%FWp}RtP`$JR*wkzP8Kx z&bn%kzxxX&o_7Y(I!W7fRdXvhlaD2HPaY7P!V*^OawjI&kEjM8vS9&WOvAOp+CbaVGV$L21u#&||T@{{E$Y z%J2f12CQR519%7FZ!Z)_Go$VRYyq(p9BYwKu)|b{YC)im6TsiLM#!6@#FHN8k1hWx zGBQepOueLA&*=h4n7<=KQ?+WBOr8KlxFrkufJSCiim6Olw01m${9k_NjsZx}EAY?w zDK4}ib?kB#ujskNkXHjqVEu_H5L&b%oT-*T{8w6*@pXPJ&T?{Hx~bmQupN|66Z>9Q z>y-|O;we=7`muU55f%CJ5BbX!_js{9_qgN?C%LCD^7>2!xXqHCI|4ZH#t`JnbbBT1 z_?rV*e}Il=QJ6VB(Pn#_wc2|>E2^&-x_A>Q6wTRjKs?%!qq6 z6a3f~oF4R*iq*I?pT7urbNj#Qb@Uu^R7YlVLSE_m7 z+utq}P29a$wUxj|$-kd`h73a%OFgAbOwwNzH6XlM%X7hDf9BoIWH@v0i*jX=S4H#d z#9@_ovAN4Q9BNrmzCyyZQg`YoyNke1Xqh+}&a}^o;qxofVTZjbd5eBvC$=+x`UUPp z5DFo*ux2B<=zD^uM@=31#~K@5s4)CSCHP>vjFMuS2gb;DF)mlRf>B{UpG9o`iWWe} zllszodM&@8EVwTC*#W2Cdk}#gp-ludGCCSy9Cx2DCoYM_DW8VSJE%IgBg4b36VPV) zx9kw0ZkhYmBHt#gGMK%H@M|gHUVD$;h~uip!~(KNG=}wcr$9i((_+l8eV@X9fcln- zt3<64+ZTs7P+)7-JB>Ylf!KAg^k9P9sW=i^%J=-%>-DqzboMzbVMYGEmLPYR*0ojz zK5?+8TyUUw8Jq*3%NYiZEx`G#qZyf->N|b?(XVERblxj0y^^Zh`A4yP|H9YWkSQIML(*^P#fPpJd)r0) ztqze>wbCyOBx73ZhAp11nc+Gk) zWIzHm=Ql?zAde)TGXodJtJIgo=g<`OXaua^3vQrnx;Vk^%mv9vEK?ywy6$*LU+=%k zgS9I8f1i^V%Sme;UXZNgyvBB%LwIvx zt-}2zZ{2;fr5@ttIrSFawL+VM;vxWRUEFIjTS0Csu!aAel`N7HCNVB#J(+V3uiT|{ z9TmQ=%#6oagAof(^26ThPqZC`y>-NP?%0jQ8lQU=b69`60sCe#_C5vg5j7g_;}n0M zhohGr(GIT7;haoe{2Ph7bL3mxXkFg5aInyOC_w^Ta_?_LY(dH;l-$x&Bv8JjUC18` z(xd8iFVf950GOPjb;u2xp_bq)DE-Pr;KVSpWC<)4MLsWYwJ4aTdSBSUmyQ|hGN=*i zP)efacwgFnvz39mm~2yky2A55Wv$4F;J@ht6tAdF=oNi84VQ0_ViZ5^}>3AAHWR$A!dED;f<_}_i2DteQVt@^QSL|4kz8)Z2({nv@+oH%_DkB^n8l&s)ztmM9=JhICWl78_j7k zzGV6F3%&fcH5D~C%>B)|El9X@HIdI1Qq{>bSCUc7ZUo1)3+!%x0MgnPZ=ZH-9r@!R z7(|bif$X5*2n#YfW0?FxNHUKrfmF?+`=z=ggaA840u4KblS8M-%Xk^85PYtuAs_9d+ne?jo)Lq)$n7|QZh zc0V7Vk0_AyXaYFS8^EEN!+fUVn5c{{jNQOAc!Y?i5Hf4QUk{zzLO}x5Qw~ zJ^V8Wm|yXW*L?bCit)XV64{6e7wY9hlJ<0k6{jN{L)*<6ZMm&E&c*t%XTMe^0S90J z&ly|$7E}GywBoTZKjjXx`~;vymH@ta4oJQ1gh0&@S6JHTIR!8;pN+~oF1~<#Xnuh% zfflR7N&AciRX@XlN?}MmyQR(JK#4mzsp2REzubXR$)KIY+}P~v+K`9c6oAICaIwlX zYznx}<3k#I4c#aA<*oJ3*pGvFs>CQ%e|=0_AR*u^c?oQ(hL!|hGhJ0b%ca9kP7DfH zZg;=Eu)p-FjLQQ^)j#mmS_QBhbTB}%MM^H=HwcnWz<2fFcW2uLtl*x9phB_&{h4u9 z7nVRhI$c5c+A#!u&CkE;W7p9ZY5BNdNa>#k@Ygd?EgzS{pbY@IhJ6n?@sIG=;#_7^ zj1iRlfm*$|V~=v-tIgC@W5)|3$}sqHd9B2UC@jmRpV6^r+EJ@lWcdqz2|(PDKDy{~ zl~c`IKfo*K2DKogxJ9;zf!z?B19ZB+&(cvD=}D1L*&kUW1`{z|WqKzaUPb!SnFizc ziL{m(x#3*{O&Q`GVJAlU7Jg{thal8kNCRJFyy2{@-dnq;ul4fAM#^LW`Le&X7no7! zvLXO84f9XIBQrBi^`M>8%^24WhF=XWWNLbiyE=HjrGOzR${a6?hA*ysFIc4=iEW-w z6}|igLjNO*y>jeGVie_s!PzUNVp8bAjHjDHFCZx2Ex{=|hg>^aZU2(|vwUs1 z`^6Y5#<+k?Pt%ZsKap3vk}O7CI-F^Hpy!iMxkqJqt&;o?Y~RA35#AAzh1jC~)VR7C z+oXX;1#QT2%>p9rOBhy#dbQ6nHPXS4dxiqLW)y=kF)cZ}8ke>07hZgj%AJJIRA#sG zlBiv_STlD=-*9XS%4DmYbegO&UCSFc*ou>+F~#`If^wURS%$g$Llmb8q$FI&cij32 zAMMhzi76KS6>G<3b5br6UHyXW?*m_PnT26d4udaB0?bqFaOc5~$KYM7vckTc%ymKU zil9)iDXSAKN?~LKZ-I(o3TY88?B{u!>}4^6{l|fa6YCLm)`Z%z+#OGx94y|SvbI|i z#~u>KH|Z!K8zNixt2NAZ=}&79(dl0ulm2QpM7XP0cAEof=K=fRtK}HFl_~mtfH?mM z@g#cZzLTPP^$RyW6gp9m$7xrct{_mq6kRufh{s{f>`q)#P0^J~xztl`rsqS&KmwLG z-e!rMwe&H4!-jeThQQfq&(=>GF^>J5I=y$dZ)mQe)Fo5Wr8Y2}w_RTGKoDppmy{J; zoAELpbm`lV#R*$CjoyT?nn+POx4PxLf3fMCM!iTY1&Mm9&lCirmD+g*yQ|n= zs$0U{yl#ejCEzlAypB-$HJtnBLSs${A>?R?`h^Fp6s6%;)O76!1xcNy{w1yir51Hb zGotJ^knJ9+gihQXCI4~IP2%`|4bo1n&2C7yG9)z%ZOK2&dcE8z`Ghm7C!Xw7yuz}k zTWi~ZjhAK=e=b%*FbHBfAbC2{_6(LPR~W?iDPZ;lu+4m52o6m+95~4yHhIy}buboM{$J{fgKjn=yPC7oF`C_%<~Vp2Hr~ z?c_0JDC^XL)F!UbPhHxh5#-4fhsmI`8L$_)jO`ED8f$z%s@(bTNi?g zf5+r8BF5sFp;CU3-gAGkDOGzC0ueL?ZIYXwD`i7{ z?ES~t5yhsPaU>*HPY!a0g5wX05W;2u{F=5p!o)4Q+$p9AA{!5kP+ttlPipdeIYGXd zOZOOx56afKnsZ}{GT<9X!`eA4T;s5Z&#BxS3!<2wP~YW|HQtuU-JZ5vydZO@Sj5^I z)8g?xE#cROo-Qj;m!z)fF)JV*d!daGFjuW~Js2=Av2jfLO|{e^>x>BExXr+~l?uPY zSHBY3okPTfCS{a`yLui2o|35WK09|7Kz@{20T-RIB_1_iPdw~0wI>voHLn94!!+qy zG42;5_3Lz&KNg*TfdV`6@7QlB(SO}5B81__S#)0<7i7vw*7DU0$ z?q+bIUe6OLVM0MGpboQlosdwF``?cf!ijJ zB7^(3)UGF=`&BDA-RvH3v7xQa?ai=dH{I(M1hs`>AsbcIx0Y8nI%=V|xeoy=uPVwl zGG6J~y@T;wdHwwATcswR-8dh-`s6OoEbN|ws})e&nLI=RIw*9|r*4Y4t(03g2J(qu zvyRV5c;Ni6nQ&c*B#f>s)FyhxAvA+qBP7UCfyPAOa(4c}0f(U=g}qeeC??}huV03e zH_a}>X8OS=i2EVAX9wTsCj~6hz>ZU!*30Wv>(tZ;Pq7eI?r=}#&-g@89&Cm*p|2EU zB^zx?OT^*uj>;B!XyyS_XN8Mg-_MF~IXG>5uJh|jS~_WDjTF=FJ4%&=A4jRp2~0I+ zYHW9lS980EsA%|JL@2i8cA4M)|1dPHB+7}wZ824ko{v<&&fs~=kq zBuoDSUt{y&>Xh=%k|X47eZr;Y};)exEn}#Hihu(iCRB#c07-PdT=p)j+!fzZ2>Nkjhf^T zDS2>#k5Z^Bb;q zDIaCtkef6765*a5DDkO|H6l4bkyZGKmXuwe&~&#x-SiEVD+>!vp^#LOc99`aX1E1@ zMdmne^K2-3KG(&(92Tq!+RFVVk1nKkx2?s$z_W)t7hgL>B3v4Yi3&d?@M}K*HTuR*h!xsQ5iTp)v3HGC#6C32zRu13 z;{ANLafUVjDeU$|f(3{|?gm)Ep-D?(5!)m#@hJ6Z^`k_s#gE}?PlKG|Z1_4Sb;2FVY>`TrkN*BuCjANDgcQf6hlkQI>;&N#~6A=@EG2nlEJpRz|d zdz>vJAtRe|#wmO6aU5rF&U&w3{oeQe&mWxoj%R#6&*%F*S`AR!eX$xR8k1^BS-c5s0zB~TybFt_}r&f(W*aOv>A$MqL00y4$R#1(}d2gS5Z z3N4&jo^{;B8DOOn)wvEh!k$`_K+3WQ)9(e+tY z44K=?)7e8@csyOh)~V=7Wr*HC9vpq$D{?fb<(o1VYX^<}CFir7&n0bV;`3s^vRFF1 z^)o5-{?^l1xI$-nkEDM&t}d}NxZ~pUe zSf4bEHyg|BA-Kirdo(x?o%I%RjfzFu_kQmlS64wWZqP(GS+o96g46W5!@~G5EJp<3 ztXm0#HJQce`w*ho@_3`#LRi~wz15E%rhlz)!o1_z#fD#3|I3jxA#}%Q{yYNua(76d z<1|G5;=md`HYWJcf6d-lL6iC1`yhN8Hu96X#nPnnQG+QPx9xPoVb^!%ev0_Ln>Ceh zXJa8BH`G10%oTK#FIO^+SJEE7%t9_-}E&SPMV^`uD)dqe=t3?+wr{Q zeW;Yq8*BhKZRTYBlwb~&NT&boLsmcBkP&U&i*_nA+lw%$u8rgS2e?u8_08}QNIKH_ z(9**n6(ykd^Nf1>0(US|)5I`GMRV7FL@mFeA-%V)`b=3b><3>Zx~^g2d{Gj%vG;XW3R=H zP+VEcl8!#RxwOr;Lo6M@81Ct=-wqs?05IV@`UTNR7U&7?`Q8$jTfJo}hZX|;GWzh` zrh1E}&h}O0t-&tZ^qH&UI{4-nT<5?pJ+4fsPRU!Bz7lL*^Oob$*-Zh@cFg^{Z;1RD z0ttk1^A*ORwE_8AF<)-?J(pAtdB(y~N|)5@^xN>Cv_Y)!V6Sclf=sW8%wbk@7q`l& zd$0uds-c2X8W|m;2rOA z?A^&G4-{?dsX|$KY`rFhSGOEyG{NU(mdOKf#v6py%&nr1uI3v8*q&vsl^}f{jII$+ ztdPOtH&hqjO6h{f8%X(VN{z$)+v%RV)1eaZ(Ru2C1cCC6(6(2h%=%jsm3gn(#x~|1 zi|@_>@}wt=8;3KuVev1OnB86?&Mm$Lr0_*vr$l!gp2_S6QH&^b9F&5$-c&Zs5yg0F z-FUYynf_*(a7viPsrljsra;23THjd7nM^X=^Ni4Ykm( zG+h|(gf4mYHJh(@$y_-f&7eVb_vHZ6b|*h8Xg-lV=N#_2T2qoSzE;?3IcawC)2!gMC=@VzKCYX!50gj{uEcNFuhl)t z16+Q};(NvtPI~{^tvckpxnedIoeiLFw^2j5pep0tMuntITBHd0mNj5~1D{`g$+EWqmv*JS)or1Bz{_KZ$uJE{h8(YtP%t+E z0&9QET0Aey1C_hvV~MqQDt?5ygCxdfiEER@Ik=WBvZof(=-(^OcaZS(}szF9e z2Hrv8fuYb0>yus^W_h9*hKuN=xXdW*PlT&5B(%KE)>4Km5r&4q?yZ&m!)5b5BN6^k z0$^7Z+?uuTQDZWkl8`n_{&g$zvm@8ed*khj`iTj0|#7Wy7p?u@Fh{W{ggdB z`V!#hc6~nIYUyN1bm{97uA=XMBZYIXpKsxhop(C->NXYSaSP9A*m-=WbeyA z{Wx{dQQ$+|FhAEC#Ay=wgzD9PFmf1vb=ZKtnHe@+NB`P>$i9WD!EOPt)1lv*Vk9k+xR38T0^Y9qf<< zzi30`1DD@&BGab`uEOU=SeU#}ac-?y2$3efvre%V=SxlEEE|n)%L12(nKvh42$3y3 z*Sl{i*djop__(MQ6?~&o-npQZXzgBb-#L9F?@7pj;8}YIU8#0;KRcdD;P9FCQz@UO zWX{=}_X3oxmvF)V;e+sST+2wdNb?rJUYODdjYWZZyFF(BE=X70!PAF$q-MYF<;v34 zZ(0|~q3*EwM|yTrNVRn0r5LpDpg&3MHfFfF#twE?M@Caseb2ZC6n!U6-Fm3Wu9U6< zQsIo?HFGwheD#6ln$Q!)4gf}D6VZ#tuzyPMi!!Wwh2BZwX0dUVMt6`s77V7C{%tmtL;g*%aw$D=VA!O2+wDtfUAE*xAi*19k#)^RRr4Uf zg~{)%jt9BFsu$J$5As?pfi6q=lBFx_1|k{_YMj?kAc)6g?<@fvnhg-Zb%?}X2h9dx z9I@dmPAJmZtK!fAa5;o2WSM60?cD*hKpHmL6pJdEuhVs+Hj33xhpN^B5@zf+(#j2B z;mm{g_XKnLT8YmLUKL9(C{@%R-F=1c(d34V%^iCQbtEMm)0;SzYa%{>i?y;P4Q8B$;D< z);h|&BbxTaIeOwv6d?8+aX2rS#`%4Kn&7A9mO*#1xK=GpVnymup-&7hC=F=ucwTanF@VUUR`ak_|Ch&dn7)gBbzo_;m-|dzih)#(bWVN zY)1|Q;H$>ev@N*Ve&fryv6dH<-oNb4z9s?h@OLkpJ3DB%%Y%50&K`IS4~vW!-4U)K zi`W^+U;Xyw@nBuX9Y4pY{r7sXAgv+x`Sa7s0_iXpYq|88 zkxrOX*l}Pz{#9zXuzG9EhsO?hK*wv)IE(2S(!gx;_<>nn?Z#+L%g(`o-ZovW`)IQ| z6td75F%c8=!*JY-&)0x7n7S6cq!vS~&R!nj3^Yb4??$9(Z-<{SSuz^mclwm`AWUrL zg;1Pu$Y;4JF##jULi!K)sgO5`&UC%UOf7P25hwWPGF47erSnFMXqb|0dz|rZBwZm> zu45hzy!@+6qFU&FwHfp)Dn1iwQ6qUyr`z8ukn%t$SH1RKMnaCar}&sxxLMWsg>?_c-ZWr$iVN-01&5M^m? z_hH#)iY&j)jS}bq9%R@`iBs?NRB*=6^6|$@LCk|=qK&39lKA!ZVx=RX zemMXbGBKreT{RFBwDZVPl877vUas5)bKF*)s6`}G16CFoDsRSysTjjMX)*n@H$`|{ zGk@dZHj*+T{HBR$+Q)lCFZI7lK4t$%)X!A&kNtQGPb%TuskWD9*MzkbZk(e1y^ANV zTlVHYvE&4a!xLN%owf7((Z3x&?n7>e2U=o9D!=@Sp<^s4ini(YUXOCW%_^hGtxW6! zIivJ$K(>Y0DuoL)ckU6tr;hFY?+^2xVJULA2e~@4b@-KlmgpQ$UF97ja>P9brE~<$!jbD7kfwg;!WboumkBW!)~+)EfIKK z*B|~brGhhb!-x10kcol2z1hPH6032ozhXhvj#UjKTBTYo@nSv7T=$0#_(l6vY20cj zdBJwAp&RRe9YlJh?0EgVUyLHG_m*{3#k}g@+^*({>;Ly_r-$5dWIK2NDj)?v&Hbv^ zwnVDs`Mfz6XSmn6@pk5C$VVws4bk;MM#C09&|o6{Y;hJYqLI`EbIJ=!*A6PBmrb$; zc4^OSnLd@%_owWno_-xSYjJztd|94Y?{ureBN`2JerY z2=?hp<-MJpDfCG5*Gg9(|Fh6G3~RQaBmDH)j5braSCkSDb@x1(B{?kr<@1-@|6=qC z9+ClaA(ftm;C7PmPS~>F@nn&+^+=Tk6xVR-B@WC=mH@7HLq~Cy;by+qkAIRQMCoOt zHq!43#67(eVD5+8)p;Gz_6jj*H|U5=&k35xSTIUs{!uQMMh7GHDHwlN=vAQfzZHw$ zXBYDPL8qiuXG)Q0vDBEtB}`7YB(_?PMNL3R4a?KjH8KA|U~4DoG!Bg6eIe!^51z=j zSD-Jx<1`w{a;1P364g&~`s1gksa~9a(aGcmeUeJ{$f1IxwhR6d36+)iBP??9ef#@& z42cMB`%}aX8WoAtwWeCM``=5J`YUfHlHX~1WRlo(Qfj*L=pI}{%TyQaQL!N2ybXTx zkCIDa;-G>SfMN5a#!_U9cHOv{kDgfbx`tlnF9f?${j*O*wIqRNQbs|-cab5LsD6ty zqdyncLWA-_C->aPu9Q3%(*min9=}2E{y~vFwZ1a161Xe2%vU+>g}x@eNC))D1Lsv4 zP`iTkfL<3rd=#JBcd;XF9Vt~&jCZ*Iq#xheqRa1i8c0P)gohwNgc=pFX$hSS;e9W7 zK%K3QE`g8UIQaK`SHlB|9yrkFiN=z;aXvijXeVKIB4T=oNwLBWt8xv4bd~n?1nJ2Dn z#7EnVyvL~PKNyETg2c|SyDL21d2Z!kK zV2M`(8QI}HW4d!tW_Eb&-`(+}w2c6On|~q-4E4Wwa;xE7OpQRl;#c0p2kV0xP)?YG|!urjF#M5OiA7~ zpK?3@g8t&^pB2b`yt1pjEpow8@7KFR>^m`N6^XGHliJ-dS};{{d2cd85N#Fi-z_!8 z1(rkB@%`D~C-_u&mT61OUQ(f&f`a=U%gO>*hB6zKOSum6fJzf@y%?4yx2gFLNubY` z^;eZV^@kr)Qv{AYij@@0Tc4CVecfM{^Y*LIZBcZ9W-NybE$x*Zr_TS`$0S-jgtk#i zB+mchS1LFw?pwxeddHr`%Ocg>v_JmYmxJeliqSzgc%8ddL|$Jgh=PB~F^e#WZ{h$s zi^Yrb_HYcnX9vvwnyw-{Irc;&*7otdGsBH~C1q2CQ4N~;j#xgFIy=FfQ9My%w`_m` zqkQP>LljAJ!@|rLn5LT_G`z^Z+@1}a0WNX<*Cc+If=LL&>?6YM)D8F?hG@>x*9wb& zuwXycU-A2mjew49!r}E-gJJmX!Sl>J-E(-o7 zF99rdhh^gi8W?D(0fUKqMsK<6;|m6=aLsYBuP$k9MT>yUr0~~|Si{QIhAgN9(y|ib zTXzFvsk<7!=qZ+0DVJ6$i*@Wtn15m2t-Sr$PAG!tXu~TZ2ni|WW#$G|tm-8gTXSeL zI$sd`Bfk;bh?8gsKmrW>a^uZ5UxMEVxb?y+v}zR_mr&uzmAbyn|H6VYRTvI`$srM` zFp4zJh7~NSWX&Ax}&)vABqp#puHvW|Jc zpw~ki-By?(1j-F}V@k#-pnU~N)*6(3BnF0R3P2uyh;f)&XZ3|fRXXO-S2p<0dh=ul z|nl2zz({bG1)-TECkB{4k4O~iekeCLaK1Bx&2~sW&RrB0SkmgFd2h% z-y0csvvqgJTOx5m1#@wCV}8P=qxLEt*%3Fu5(7Cago^tX0aOfE%+6;X z8Y>^SSI$hb{=1gwKua}->6e=3f}eX44KU8oG^+@GFV)hkb-qimgH-|Ul+>3zRDkmx z<0JFdF7WqSkRyVJGKfn3nMK~vI;(=sf_+%u@3Z*LoEwp#ELAd;UR=B&mjGsQjx;Sb zlQNIvaMY7~__v?XnSM-Is}R=ivtV_ftJx0?(Kv!0_KPn^r6qfN!bT>Z0T|^nOU({Z z1$avN(V{)~H_^m5HgznQ%%l0-a6GNEu@wHEx1~mtOh|3axxz{NKvgPs?I0=J33z1NYVte}orCtdM3mCP83A3s0amtvV`@Wd;&{RMR1l>V!OkrI36#rkQsT#UKZ}G{MEEu`o^!3ASUUzPq zJIvl1?}jUF0#s201J4pf9oB&os@AmM+HQWD%ga)MYHW7(_@M^6OLC;Qs)sqdCjQA> zS3NZjYE2@-yHl-7kg$a*# zGP82fsT|lz8l_LBUZ*fFd>+`Z;*U0cZqV;9gyHpM>KUM3aK^}9R)JmuJ%5p!z zWHA`@--gS}Rz5u9$884UG`FgDhGxf+1gA-H5XXnM^-Dym>|PsC2(5*oB`!tu%Tfj( z$kS}LDKRq#SZQlP6zI|2s$4CpDg7EL!$y5iq1{Vzep5M`{guRw0~*X&T?Qmhh1S|r z;%BQe(L?M{Es>c-fCrXaanyfCyOS=8t!B9@Z_t@D>W2`^o-E`#q>d(+Uo_~0*ERkc zZhCN_B`b><0!=5Aqvw#5(ZX_Rs8KyUuNz>18@-70O_7HtdSX@qVi*Nbi+0k1;5Y^M zkp~CY*3KIjhWYiK4W>-Ff()%H>G3Xs^+bx1A|Y277i*45{=cjLCHtT=KBKGtR4H{y zKZeU-6$fG-@eAW_gQ9Hdct6nQ1Vih#Fv=Qxhx`sD0Tp$^D)b#hdd1i+FX%S2x7&OA z-4|a%ZZrE@S_;8o$WaSYquY1W;%$4DV+nXDM632$e5`1^kAgro?1_s9XKWQJduuB#Hz5qGD9W|;GAK1z5Z;CXKUDrMS897ORQ1=%{aSP>XE?1u=k?gyfFT1VV8 z4A@3kC6dXj64xT~$io@{^j-_iOJA;Tjl2_4ikhHsEN>f6umEs& z>Dd<|)^2Od))5P2=S!}X7sLU^T+)5X0K9U^@wj~ZW(WPcNyKH5jbaOI8$BX6ShR8= zk(^mYAmh?cbCesT)AI0A2l?@tgDUMm z+$<~D47n4Jy*qv#Do4-MF2QTrp|xrOwBGR!_uWxLPptwB#!1iWQ?$IsADXjYmI>wY z0sc$mAISQK3x?3;(2b)M_>*MeNL}Al_sy;F6W3>s4Rq-`<13w;kqS*`=li0Av9EZs zomF)`$*dbAvI9niy5&UATLi-v>R#U*6M1~MrV^4UTvsrlfW ze-!{QG9T^DV=({m+jpRN$$SZjSqdgccE?XyLx{#i1w+;ea!a?rh55sPvB9qU*u3LpLcrsS+!`) zhb_9=rDelo&B*zNy=dpzZ?7Syb%GAyx{b+E_{>w)-Y|-W7-XJrB9(o;sK&*JoD#Jo zOi$vt!-teUnK1~DYT$>YRnbS{EDC1(r}vRON(Lic3-47R@tj|Ch6%+oUGIow=a73j zR|H8BalrCuQ`4e~7IRoYM8s<^bm*mE>@@Uic~N)k{GO4o_oX*ZEGg zmJ@f)VSJXWce)#o^61Ea_+w?6t*zz-a+a~gB#|i~SF3n-Cb-}{ecv{&PG8T}sRFFNcvc-3%R%!F>hotv-VZ5)E z0V@MFM;?%A?)3F(p1F@-ECXm8_X70J8yoI7w4i5iHl8oQTtB;A;)H?c6S(O2>zS-$ z`v42O*f`6b&t3b4aPG_dYFWIINA(b`CiDyER4O_W zJQh=lR$tHT)ZOTW>EV)`y@C994om~>#LOtw0o%5J?xb}WX1w=jzvVNn6j(pecB2c)GQWI)jdQ54IuX-(sxx1Zwl6nIgy9!;DJbKs@ zABEco1?jlgpCFs-xpMBvw`W1j;M35mahJcgEn#cXzbsS0)FgI8^Bp%4~R z211R^q>jN?A%*MDlF6-}c*>SDFuHiMw{FVvAC?5`XL=?kZbqyOePH$#N6T@+--9%u zk+I%L`a@d_R^UJfq%V)J5AwW-NPmDdSeYi4z1blz%Z1vSiCt-&*hi$DUjhkr)bX)@ zcExZHuUwZ$!$*2y8M~jVuh>&qzS7W|tp%5xylbcGvUpE1msUm!R-AEQ*md@?xF;rq zWio!MXrC#z_wRl=lMI-N9eFG#@dJ6gFgupIxNun8aY`M#r-nxI=mM=PVTbNO7~50kqRA2AEKXe5r9-YWRi9nZ45G-~5s>DA1Cq zFKHBF;%76CK*HF4DpgSoTD~i$t<)I>Pt3^OP zXN|R7S|rzFbjAiHv3@S%{?kt|1vodCbEdLHsAhG%E{%hqb4+HOzFQwU^2SM2e0geL zJ!ri~ceV=MP*?Hw@aM8gzWqKay%giay)bk1NFr2Q%s#^VW5GeKeZKc#LaBp(`p>^q z$1LT8xpMD-WICmbj{=^W>N%!B37U#MCv=YuV){t#P4Sx_APsyiM zB)El)%XIIoOeC)(Vjs}vG^itQ!Q<4s!XXAozGFPx|yl1Gd-4UX0 z(n;H_N0`*_L_G$YM(d!Ww`C769sNtp4(%GBB>5%T{{b3}RN0qc#1;Qua7xbUv-ygV z`2v7I!^AuXs6-&Dtn$2Z&}>tw)l%d*2awi+i@}n{LveEl15v3T1!j5*w5%lr zCSNQG3^x8vY@=?FP@aSpsR|Nl7oO&sLgiMnJOQ^@rq!qG|S+hQs@% zs|QM4=_Q+CgY~boe+UNOv=S-cHfMJAs%HIupQq56)VQIar?;du`7FoUkO6`J$LwTRkbrI!Je z{(U(rmu*^@?t88yb^1(<4XwOQ1ChU|xJG$GLnvx_!j-PHHR)Rxc~`olj+Vey%FJbSr5wSY8F^u>uT3P1=qqp7WIj{J8OQwkFuBT0Nx=L zVG`zv`2}ll#Yul845WoV>7u~|)N9J|jE?2JwJjBy@3RWue;#a1U(Y`D^2;nK#^c*|Y5?X2hpS@R{ji&#m{f74l?=m(_s4?~uv+O-q3ovjWM0apz zF4H=*ZtduB0zO6J691h;pz9?Vx#siz3tc{FjShEJRjpk4!0Si3ns8gjE{#j@J2ukD zm)p60D|HSgFy^tp*Sa(^&{AcdPHEFr-uJNM95ZKM+r))01%sCKtiShAf%et>lOB54 zj2g&ng&fi5R0090DWFmYMX6Gnw|e14CIi$anL4sZ??J0l!{3i zu1BYYdtj7Df{9%g!b|6JrZs+8oq8oq?S5)6A^lG4o(a zqSt6eEZY6{OuI_$DAzn6z`+Rq!_~V$??&ddqjfPRNL6f#&;nJogg8z}7?G#YhR%AT5$!Dmyt* za%9Cf3{xO?RZO0Nsd_9~dpmXFIS?@Uz#ElKmN{a-pd{_)Yh}))940WuliDZ7h_`)b zHhKLZ+l6xIGBKBfVP#-Nr&vm9y6*Pu5QWnS;-Ky8bJcasch}bJUJfgTNnn}+EOAry zGP<_sdc-`| ze~^Hu!$c_0fH~Ec75Wq@sxVau*;MRHHA#8ZxNF_Z09s3i$NvBl-1_{S+Ml7iE#Zgy zMPIZmY0#n9K(k&$onE>7gB5{w`YNW(Dw=vAqbG}19u(4eD*jeAt~UHFm7C)gQpsW1 zIfl!UGM08R!HwZ}AX$wLoKjj}$%w@!N3d>;{f@7#r7d~Bh=2tO&Y`=z8tq-k|vUVUqUdF-{z)h!AH1sE8}qP z=Q`@u5P_mnL+?XzmsHOX5Jr|ffGnD3eu6+lUAu_rRwc+IO5IA3#G*p*mutwJh@kjl zu!BZgq@sI~uf==ji9U+^ICZfA7l@4)D`13NJ_f=Hsua*OB-N~K&3QgBsjMHu7+K$Wk z@r~dB(1!9~$=_}m@F<}Fp})@ZW3_UV`G@{H zx?ZzaQc%!+a=8gFq(KYteTt?~=eM_zSCOA>vb;L=uN_au*fZcez84$LJF|XIu#F~u z5|78SDO7VEt=Z_Y->4n(dWjYcm$IA+6~H)sttmBq_2Lc1r~Y-! zqW~)CUfSd5*Hvp7#~}Nv06vGVihD9R&W1G42-As^Tiouf(3^;UbzpcL^NLqI%KFO_ z{g_KfkcC1PT$J0lUY))W;9d9-}%$$#o-E!1uC`y=hbbQx=Z;Wm5 z5ngO@Q`a%yH)xgcv1ju;c@J7K0e4EY|FG$Y&QUD;jAa_^Gr9$MoD=SQ)ilOdygFI> zcx|xNX#L}?|MFR&vE>HPyU??T*vG}YM85xO3RseX)#Ry5LwAh! zW5IWrgYo-xjWOKII1<7dOyj;vy-)WbCz5@No(Yt>% zR_k=;oXEQsg=mf`+G{QSC*v2`OAQK{lnnWN`Xs5D!}s-LV&YdhQrNfyu6<=0DA0J6 zcl=-~(ahKHV5E~y7?O!pt3}(o)^-bE9@5MS>hz4omvaIv!EbgZ#y?p(jqkUJL*vpd z2R;;${i3T?-JuhWwceqt{pW|_@vY^YgUWX)2+hw9nFRrZ2G?}sj(iU34h3J-a4$X< z-`}hZy0?R(Z5a4){LP?oLM>n)_ty5yiv6e*c0et6r}*A##_*SX{^O@SPO4LLA3(Nm z$&@$cIsL#W%TUWq9R2nI?q7*n_~C&$ef9k67OzX<(@8N6@bFW$l~;1r1ZI6bt}bkk zt44^q2aB*SXrMH(p}I^%?5Mc8IBH~@f2+OvxUd23HW$*~v}stKC0IUfIDs>YQ``a! z$K7u;b$++FZSrB`|E)+dDsL-drG%>pH1r|_T0T3grdc*rB@EPihHXuE~}&1Ca@%<*^hV(qcXVbDh}Z7Azz8GK^7RGb9KwH zdcXGAv1~GXTuB?^V_!=8Yp4HY9yn62^2WAKlzv87wS<1=Y4~{wJ36l=(8YE!vI%x4 z)rvqU5_iX6M5x{PWLAIL>HZvx>t2E**IigRB^I6UY39HBo;oU!M!2(I5l(dW(5kET zP!-Tm>T*=E;T0GPAtD0DXNmR1U3EwD5#7C@3zT^ypN+_xp`cg_Ei8S!=~l| z#w1sLa$fJt+DfEVP=fEGVM7Blk?CKv4bpgSp?ltl33dG(PE*-hYM6U2>+G3zIV;lH zbAM8izwu>}Cl><}s9(Q^V=LsZrsPuc6KR0LkUbO-(=j zGfFRv!K1HaS%aZ3&B%*PjY`J<`mc9prY}v@8P)jmnG4jn)+G)-*2#FYy3M!od{GIJ zu`q?H${qS6aIWSg-)yC(HHwGXx*>@P9q-HE^K&ms?|x+xc7w6S`doj1xL(=;rSk zVJnqz{~zdI(DDwf>&2sy@RK`W4RUyEc`Y3|wfSg|!m()O-;auF^JW`(8Y5ejlJA=p zmi<+HFNRe}6%V!mcX!8;Z#cV-mEijQcJ-S~YW3^*^v8zX^)?{~=AONY>|J61( zBPZ56VPEvjQMBmdV3&22e(&XU(hwAw{3Xu)zL$2)A83{y5r|DJ9h=u!ekz!&79d8e z_U*V>3PF1WxZAq`;8h{sAJiSvdlc&)&WVfyb-J9QoM3|ekj+F5R26`6$+@Sn+dS9# zuf)uO2;Yv$?m(iG5|PVaS){Q&a5OO@bzWB>_%tI%{r0{%U8eeasOZ#wlq@OUY$WQo zyt2CSK{)R$yG*s;j?o(8$NQF;yqUuk8yru6jC)qP=#-wJ<%WAc$R~*}sDD_QXrtaQ z=DRN3Rd1U+1LGgN<0qvBmYdE(4!h+_b)Lh@H@uoe<+?XY#{bBH+~j5VKKklm8>@iL zEU?npnWvz(yl>wtbx>%-gdIpHdX3gQWPk&xUF-XjpCMD=Q5QLwU?s8&;r&-|bc8cy z60`$2C269w>};TP~bO+b=HzdtJ}Jozp-S@lzLy5 z8_w)J`8~h(*v7yJE+tCI1J5EOlKUQL8q9u&P^ZOOJh{2oBGT~*{__VQr$0@sk)a1(?TN^HhjhKc|tl7xEjgma|^TnC*Jy%t&y`-?1+C1 zJMR?*sApn^8v|YT@`YUeE=^OdRAc%=yVcyacufrRYso)z)o5X1x&oO_*gXl`1yB!y!8h{cMgC$+1LvFqWY}(rnSCWCLoZM-6GOW- zAcF0x0E=rtv}pQqfqxzsChY{=T>(Nt*O}^r^ z?kL|1H2|u}{cx~oBcZoI%%D!iT5geEP`H*V`c-VZs2`^b0~FkoGyarkuN1^(pCmNN zO0TVD%#~JadNrU4ZO_#(D}#@5_E5^y$LJ}=TvG*`f|2P7G-sXSENV7ACxX6)uTvol z_6}XmOQq0XxO8_d#u*-s`)*%c0%)6Xy+6RjDhSmSEUY2KUM{|5@$<4 z#(wxgH|}t6SKX0`z#P)ZY`yf&l4N36rK_tXRJfTlgG_h78nlnX)S4v7BwYA9`mCFY z2k!F|g>gRGLQcPp;E9qAApAyaq|)ctZ6$8f`i=$gGvlSLiuy#+G{Uw(g2D&erk2FH zJ*i~YPXIjh<`h??03MFy#k$5ENvRa#-Vkq-yzB2m7p&7$W1b9>9dYe0)SDrj9pG*biojIdR2f`KUibNinBbdtW zuWL2wFBENjckTdpRhk`^L`v~6yX7mJ-~?N%L4lmp^~69ycu2F3#=rxeqwQMd8eK(z?dE^fg+=$+WU=Vr4 zDkt8kl@u4~?xa)eCFTIeDJ{^Wx{ec(j@`qPCh%VM?Bmu2`WN+EmE~o*4(7X!#Kw)V zJYdY!7O3qw0AUx?>jeBZgGI4jl{!5(iIJlFk>h{e>YndeH*j--IWy!fgWO#R z%p*}!6#NEVjSYz(RtjiRTrmDF>fyLhV5)Ml{xnKLUX34XxccvVia@FfQ^GKw`V{R5 zjR*JE)7L^|?}4=eLV11Fn&^aZ54x9h^gR8zRfgVRByfu9vR1TUA$bSbe>Ez>JLHOc z_>Fhx$QKIuI+f{@dTw&!+4mY_c<0OLHjp8iK1f3@d*f>!`i`%744Uezbr{cJt!d-H zh^9R54IdpGC06hIGPO?)lz6Ik_@Cvc5;3pTZ*Va{Yu0H#|5wvwBE)uv6dDRYd}C+Yix8Y-u>+QK%|R#= z2Q6)dUWzR3p?qkJ%hSd1XOc1B&`@DJ&C7CdT#i zK8R)qN0sW%IU zOFWycYQnj=exJ%P)xZHK6Ljv7PrFO0dWpkniN=pc1NOAH66#jTGo)JNJL08Fel6wu zJ!E7o!we~3)YRkuC!L9EyP(Vlo7G(Li=vk_NNYsMj}{;IWE3{_Y>z0S1dx4pzUd#h zj+%RR3UNBzCtv=OX5{$mDI!@kHk}bqe}8w*SvLhMn#&sRC1%#U0rkr?P9CWDg^+IvYN`V z=$UfnnyO0(U;kvJ|EBWR&m+>1YDCrl7RB`oaAuuhsbLUnv$$1~7p*BsGpz=h9_bTJ zt@l167!uFOV=gV*IckqtlQc|x!qEG=7pG(Ut)lxSE4wF-eq3o=cB1W zlXq@K_HFhof^@L^lifdc4)5L)7AgduCkL3mlc{y275+?qfJ@h2C|XR>=_Gw?8k~tbQS|@JZv$B2H zi;gC`lQkcWgbL@_a1TO6ko!ydOc)x5T(87yBj;lOC>OY8dHNA5v$|&b8rMqX9m#GP z!Z0q9)i0}yTTQ>S%JhP2_M_J!+2vrUEyYTurf8U=R}9eYB(y`JxrZZ_I0bIPOZr6O~< z6jT`9^3dkfzG#%SeRTpPv2KsTx@hI!ieMB@TbTVV&v&$GzIIey1e7Trj(4v?$Kqy~ z-c5Gw&hn^y+sWJ;Gcgmf!&}t<^#W)Hk#LLV3ldT^O2Kz|=TI+F$MbzkO#F*YMUyPE zkWW3e&NxDw$oS)0b}Ah{I5AvUnZxoRqpaydiLNXg;vRqOE9e!aVaT!GR`%RjJX*8 zVjtY25K=tES2{pZ^yuWh9enn26`jnef%?Dh2dDE6GQDjV$y{O(m>`AJE2{EBX>*A> zvp7Z`0e#q-PhFvqLh75RJc`^{>pxHZaM_zucJUUjRSS{&Fjtr@ ztLx@nh-qJ_=w+35rM72VkwlDMzo1>xX_LwGb1{j$J8{ALwz}1lL(WnZCc2q_HH$bl zjD+y6*gf`jE_E7WE}ESJ3nobw7bt_mlG|T(_C~0zgl$5oUtZL04h*^3fh4(+GWtf2g5#os{y7jg#xx1?);4xh8l!J$1_vd3fw)a{r&e+(yDj zfFF?>ku$8`vh#tGv>TXMnx~!_@qaoFVXAHfG0_`_fzFiNWu|_i9NOiF{$;us1U}%< zyRM^)PKUrOr8(sU(?B=SB8>;)i)8D_Zipn10M+8N995N31 zzesS3=ABc+GePDzsRV8Obwig_4_LTGQBBbVTd=p51Ry9}y@m{$UG8ztd8AUALt?W)7yW`By`0+z|dF)0O?g90Azw4S` zFmuO=eRiz1HuF&1Hztl05_X8gL(uF`%`?i}_Ope|9-Iy#8|gn~D_r}A{&M`-wqYk1r^G{K)sW$LNXPQWh*;#TrT`JsqGqz zIb)7fc$Vy6EIK-@^6dZ}9xkjMRt#I!tWB?QqWDJtA7Nn9p^Eh3FC!TNIV^3I;`6FeF4q`TyuNPW~)H;BLRV^5x_4N|yd z9iXj83|3H!)1ta^9FG6rB)Ue-cDqw7zMd|10Q-VF^8PhBa;rxD0FVd;r4E=?! z9*T;1y-l!x^fui~lU}ZX3RAu>{SI}F=n`u!=jlN6{XVgnOh})@>9dX{=YX2R2+bpq zr~uR0lmBsH0K6~ogxYX|6xBhhqvAG_N^LGZP_Y8sqCntKVeeb1?OW$UH6aTAk7ex? zP-7+TG_Ak5dqjEcyP@AlKI+KBz>g_WIlmXGmiUiUcbS&Q`S4Tz4)eN~C$ij{4C6M@ zvzg}v;@S&u+=K7}o|MZ^ipEPk>t+AK)aF~LpdlU>*>g_JpC6XyHpQiycRR!Uwmgo~?CQ4K?;mg{qwRmybZPg6WRp=>(RvF!(Tjt`DOkX`LVLwk80_R4*#hxaTNl+AFa_G;$g5 zJOU~Cn2OO*hAlqL~C`3OG9xr+&!G?zChGKb2HyH!-_66ZmJnrX~H741OY(*&pYlH+CF>5VlJ zr3h}Rc9L~%_F)s!3SAi-Zhqi+k~z(_3;V_NOJ*Rzv)<~*nohR=SYiTA+A zzgUT+GSamwRvUTC6}j{U=61`)1G3qG+)UyV z6Ma`g-)=yVVFVnl8p;3d8bo%kdbr5!QE}GoSgVk{J%?ZCWHJ5H%DH3haa6fjkj0i^ z6S5HNaN3*i)Gu|KoWr1_cemW$aVf~kYbQRbO@T2T++$_OkFrykTF8FlFS{HU>fKdV zcezQF3Uu!QAE5&)Ht&zU6mBFo@>+;53-9v7y;b`w0NgE-=TqoqvEx= z>5C;&(>&`yGsPb8mTfjd5Y% zFS7?4utyqQv<+~Yt2-1|Jd)&myUm(^Yu;W;qBFwR`@-2Yf~%542t~t6t$-u;UD-*5 z+<>Y8ulq9pw3^_quUve*qhR^YS7uExAX>y2I)Hg2d=$jLRlWxBa9tvUxK6OHX0WpG zYgWXE#F<_C7`v*`ed$=4Bs~H+=@m#p?`S?l z+z(QR8c@k{1_W(NP(Aj!J&NQv8%Tr7ZvxDGWHfA1Jh`@k==KU@F&_Ar%K9 z)=>VNEc8>~JK4X<4w6u1s3#q_eydFacgSV3jp-OP0tPoRdkehns)CqNe3KvcR?o3f ztsV;DL~GXj9_|Z}wnru}bgsF^k?fAYRoP(tiBZX=Hdxm8HsNN+)E83JFA!Y%Vn`kMM<_;O-Hi>sn>ac^rHN1@L1-qNIDlYjkqX?FONNM@RBe zm5TQ13|g7v9@m#<_Qlg=C-tanZO37TZJ?qwry(DIf>uL?pke$nkot+KqtY|7l32TK%GK+u?d!8(?*4w# zi#7o4d$>R&>`XP`{bpIy1d$(8l}GtLktWZWUY#k+TG3V0)}b_k1}K>V|02LeQZ6TR zKbbu=odlG~lU&-QwB;w4xXNOF3S6DcuXnGkW+ZA)USA#OsdD~$$CfdMLq0?MllH_e zq&+D@SM+lomKFXfs5i$Cnz{Y(1k4&V@-&7{c$q#dh*--Ma_cE)f38O;(yRfhIhqzs z8Y49)&CD=_@Yslk&<<8ILS$vA5#Ua*J)1sxa|nPI3a924^{`w=xsEY`)UToB6rjiNlEQRGCnH(xdlXTl<+Blr;ss{KyZj1q%F30#LkdH!oD?au?#EIl#s=J7yuJ{x-b7 zkF=g_!dpUM4#%|^^@72OWZZkuZIMp}+>QSS+0TM( zD=`Bo5}A|$kj%;g*Rc+5Wk4>iY~1KB!_Z3fo{AM;hn)b>KB?7$Lnwv>30VSz$Kr9^ zXQgM`!G|&q8C)r45QykFua#Qnwv0RXP}hXzIzVm$#00+91I@DD`|J1nOP2a;ZRq3n zZ8W&&nrUUbj8si2k+`fRA2v-O?2XHu+v{TcdiQm=cfJH^2Xfa3a))XB%jP;EQqntS zp@D)+W5X2VR0#~4vk!;%fstM-EvvCOoIw>X=L3|{vX%vwdGUl%I3DdZ)qNMx_quYD zjVELnPNG>`^MjcCp+CsyFHx||B#mffe-o+|`V!oSc?un8On^Cu^JeG3`0!uBh2N51 zpTOm&CO)leOjq&&(*0|f1Awk#;+FNM6qo57l*=H}f@R>ylWcrAU6599`G)jeUq~)e zt#F~RF;HP10DfppfyDu2i(swp$IjELpnf= zbdbL*NCe{vQMG*pAG(zaiG|&nzX~5upquC@oq0;mPY@}*Fc|_fw!(b_Hi*5EQ^>u4nv0#l0#0DTsanLZmX%K||J zOPP$=56l&^KHM%r}=jZar7N=Y4o2B9t*k1+{8?(hA7Z#()&-7OFWMgjrH*s_4BP8mk18;Dg{1l03 zWw$*{VY5W#dXi@hbNef^o8HU$WB2W2dgaXJeuVN><;iFKYF+!Xs>zoUp)cp*cbwFm zMATbKHLWF_heN2CG=HdOMnBRNoujL0pI;Q|39d}pFyu2rr=1F8>G=vSGgW5sRh!5NdOpQN2I|aQm!U?*vrC zB#+u6e?#tP=FWv+c8iA%`?lPK@VdA-PJrx*#^v_)l@$qDmF!>!&n2MssnyKInbvRW zNWESQ%+fH2bmy^_S`XHPq8wN*Ufx*LoLT^+sL8asUA*yy$Jyv}Qk&TnO&fsV-LCXQ zvv@srdN;^1eyoJ-az&y9V+yz7DQk6f1lJ61;)&R05Nf;ovZH%OCE!^pkhtwMsDUl9 z3iA=_VL-APsP=fUGIjSuS_!xRQbGZa_YMW+V~=D@vjt3noqAJv5Xm8WOB1&WNJWg$ zi}F6ixO5GTWtANLf;02wRXBC~JIHzOk7}(RL$U*2vhju1H>WfLFXS$=Mw};V=qlB0 z?AmJ;F&F!O7(2e>|1ZClgN&RbO>?;yRhJ{nx0>b`mCUC1#$|jUL3wgj)-elm?p8n} z!0byixnabetuq)qzYOJi=khVI8!89T+<)l5xcnmH>%FH|@jhVrmk%Ea1AfiEJDRbF z;}llIk-Yi6LxhBHTrkkSuwbq^6QOOJC44y`JgE$qG{?f^T?iIj)4CDOU_ss&^(_B6 zDk)?Tzi}YiGgfapv1Rc~C`iS>BpE4ak zagWs^0`n#v;iV+ziMNU{T4gb{KntzGFe5A=#K<-Sq}(RfDiba?r>`v1@$%D$wpt%Q zg6Dj7onOW7Rc5bp*vy*1YGJ!rX`w#` zlw?NmG*keQWu2_NS%hYrX&vC#gC-ctPzUs^m=JZpdIB^%->QMN!>04%))+w7!|N5c zu5SH10Nu>wP$0{uruD0dpIOFsJm`*-X}-7&--B$=$0h{jA4pNncbbv3g6^Mw&{@c^ zTzRr7xhZ2WeytcaPD7ZYl+d5ymPJMZIZ59$kjoM-;oti}Q>)rt&ujB*D$sO(pz(i0!7Xh`*gmr(s=r9c9>(g3!jc-aZ(aLx4VZ0ow9-033<-CjPrKrA>Fly@xbu z$^tzU)+RoGS)2D{#MexkPxaEn6z*GC`$jM7W8O99OWH23(4XzH@RF?!)0}pehGLUo^TP)gz<;*QT#Fr}-|? zA-NQY*lnC-A-_vZq4F0Vj3sl)5SDJY$e_bpMZ>|cf4yFJm2DJ9#T0%3ld8!7u(8f} z%H;AXIDnPa7n~h06d_(E?vudZYOb`92-Q#T1?mNP*RV(trfzC5Xwq@Ua!L( zV|U$v<^CQD_|Ze!t`Tw6%2n&l#yh-F9}!~B!w1-`<>B`;)W71{CsjZa_8FmDXwNv_ zc8w8QG{TIZ*=MPcu4fb(yTAZNbIf+J0SR;gIvs%#`why0;+t8qmzXJxsxh}e=#x;v za+|rkj{jn>a7aS*fh)cd8Kt|wboPj@%$N?};~o28#Tk3QQon?=x)0Q?e=pg*DBcpyuK5~h_LxgE z71Hh`fx8W!@E)WuL#3m*tz>it-LY`p!0KeOHlz9c{EO?rL3Nq}Ei0heG>|sG}%J`gtK?-66GAM|!lWTZ7#{lQWt6R|zUA zAZw}D|I)ryIOTnTmK?q$=KKSZs>$srf~%y*_V`2cnaLtcxI&O??DX^9GLeG{b=;%&D-!mOikpz? zNy$|Zw8y1M@rP5h{`n5Gz(V@B9_Mabb**ur=`6ia8qn-@IrqSvvq5-gv~~&TSPR?) zNuxh_G_?jWkaN%BKbYNS(e3-5`w&0Q9^O-B#aiY`a6lFc47BdosBdO#)*N~S&8Tb{ z#6L#|tq~HX8b+bQa=1L!6cW_|1=ej-&SUn()6Oq%vL}^30hy8tAv;%cvG^Nt0U%L7 z?if8pAy?hwmvjo0SfUBN;(jks4*`8Wbvm3IpH00Fhx?r%WU%Z7nb|9cOJGWAlTCg+ zKmELOA3vq*%98GG5&4d_M|q~RSAj0$>-cjIcH|eNiHk`L-yfvDnCENhVLOQ*U%kyb z2w?L72eD4gjUF|i-lq)2w%3zCL&=VMfY>V*(Vf>cO%UiPxQ1Ww+76*@x>mH=aTm~} zHU)aIlw6De8K1D@;lX>4bb#!QKlSd`5_g^R-NiFy&gMGmJYR3tr!8&UPVxPmK%v~y zSZn6PyEW$bWMF{MSwh)%yP z+$0c`bDP7ZVYW7O6*`P5#et1U67A3N7GPG5xUYu$kgpRmuo8cvorT{sud$pAmfy*y`=dz31Y6FeE5GS+qjb3-7b>hyI%WN zmojUFTAHUrdEKk8l?N6+pJ!%V7Q(7dtVny+f*vgUi)>YPjeOo3S8h|TR;O~cExlUE zsJgZhT-tXn$=1qs0RmxlN51Pro$C^PB{YU{wF+0D$FoY#hVC5H3+4Rh9{%=^sCznUn@qMJ^PW+fpMK=ZT3a<=xat#FAP= zWZ{~H4V|3XMrLdi&oyfz20L`F_S8`(L|KDo;guYHq&v(+<0#{I7eez~T(K{S_bbH( zMTzr5b5E+?9l=6#MSn}JQ-DZd8c`=~ONW4@Y5n^vh?;TRhcqZun2jhb&xVC~Nu}XKr2EnE8?|y!-Dmf9j|;fRAUeuu z!Z(ji@ruwPD&ej2`7DHlwCiZYug|vKW3?;3Q7oiDgBCnyFDR#snN{2r>zo*!(Y$Ck zglSV@Ve|F$l4A~}P>G3*XFG*CBAJYYqLwbuj&3^zRed2KBqdjCu_s%QcFY!`{(1&@ za_Wc#SWrLbYAo)-p4)e!gb%_cvyUeZ1LFlyI2Sy@@2;{-}?X zV~j&_lH*u3Zp*OJal$;^eQ0BIZlJKYxWs2*e5{0IlVSS!wN8^!Mj~fzr%RXeGR@9d zK`9F0-$xPy+0ARfRT8zIe>PoS8eXG}C>P1`C0$&y$yPE~@T0RsWMA_o#}TnBOHd3A zEXE_5D6pi$eBaatm!;e7OuP|Rt}&Ng?C_BXa^M+%%gOKG%oISt<~3ydGFC1FZ3}>M zaSUzMSeK>p_T8RHCYeo!?D-fwnu75f3yNIxzO7gvfraOXSw}$kCcBAuqdcoYV4#<+ z!66`XZfr;&xFSvXqc*UrI=5$qd>Cp@#-D*GQOJix^ z%Cd!5Vs{hp?4V(f)XagMG|hZvNU}l{yBQqTSvi$uTc74?3(=efu=A;TJ2k_cf#wZjHO(w+MKR& zZfd2KPCZyA8ZJGLs3wkoy?@&+*PSzB{{2c^$Ew1^SqDRdzc+7&-Rzu;0rNy8?y4jY zoXZC^hhJAJQ>pBa$U-Po4jBTu{#vHeek?sJ*|r>>B?Eb7KgST#L>u?OA#L%=-Esp| zjy>=Bcr7}s4WGr85O%Y6J+5r&lZ*=dr+uUtvkYwYyFkgy^fumb|F(PtUOst!96c(LK|3ESpnx~pv- zE40Y`X4H$(So*r*CR`|I4x|~6=)t*)*pGE!Aj%2K+zkcj2?*w8k%mKN$Ey|M5jk(1 zz3`svhwLgq1i5ju0580X&q8e^5adQrtrlaxocd%wx}A#^6}5SUm^!ONFSXL}d!r`k z@I$`;3lD<~x9?$F^tQFtXrD+1mK~p(*={y4?sfiwG3<+zx7b^8vg>T*b|J#N{9-g? z?C)MgXhC}B7_VDDe(FnuRH`QKNjw8!J^qH7Ij#Kb1qX`@97BsM6YcVe<14p?14JoH z3FqzkojwRhZGT4VAw$wYn&Sf5S-A|LbkOFoNDtxocYp(~IUtd1qIv9hJXCI3+JBRR zp+!dVj-ERepvkDhWHJo9-&M$s*|IBPXOgereBj&)8l#Ho$KRwKyGa$toJ}izTfG?$ z#Kj&XI*SQ63qd;|qZzHudb_^vD+1$<){clH(>r?&o>ml{cB_=hB+d%Z_`=wQL1)-imwuNe)|0r~ z9j;yGx0SyqC>(0fP;)?7(o(N}=6PpswkoOVsEPKW!>KVcakcPkeleUy?lA;AhI}MK ztQy3#X9tJ`q;@>T!Yle}HFAQXb)iSf%ep0XTa~(fIeVNPK;=N2U*qQP(GQUxt%b`` z8F)#r&bWrSH#J-bJG_PMp>ex>8^rrVHbi7T3MoW3q~`TUB)1COekB;=9yRTA)mZOo zxdrW7`~(EzZeBH@eh<(@&2{RAtT&zRPi+;taZOO%KAS2o3fk+3V&zX%oMh(p!#N*a zzZZCz1zu=qM8&X+-^+0NkXLB9D_Ao22YdnuYKV~sdUWut3I$&GLFDUni7J+E(vdfJ zTJra7+30VNo@SW(`t47Zng9>!Q8b}q=mGl9&v#K`fz)S{(BZg=Ut%Nkpw0M0LAWV?EYq$0)PDTcE7R7 z(de*~6}>wv2wCz|R{W98vM3He5TsR8T`4B~!+Dw0Bb#h!qF^?y6BJcRSBfScp~_FB z#w$wvPeJ{St}{+=G#R?!Zf*5QTjWhea`>?q!Iw|@7UY%mWVfZycr@eRK%R23TBx-B zX4ej*(W14r)rM_b+*N5KVe46yzVy7Wb0X%lGN;QoE)M;}2?t)Y_mLL?Hz;SbMNo%+ z!=LNTgj8hH)$4_q|7o@W1wvVrHD}L7jxJzn-`J~4N)c?oyS=cmZEI|zQ+SgU?kevy z1z{TpjLYsWg69VH^>)qWM1?f*aW# z0CVV&Y1~SHn4xfd8m$_;umk&Jad z_Dinw^g-MG?Dq+R-+(irnHH-RJH2-VbN@ojfPrEWME2|O|6bJpavkKM_g&Jl?Jw96 zxB~#pOK{TJT>p3r%10L`$7JF)n#p{yEcA`@kuDVtrs*≶7 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%0A^cx7roA**zA6uWdhozBW6Kd#77ix8 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 =kd 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 From 636c774370d40214e6be1ea1ed98bc219dfbd8c4 Mon Sep 17 00:00:00 2001 From: yongzhang6782 Date: Tue, 19 Aug 2025 10:15:25 +0800 Subject: [PATCH 22/25] Update README.md release InfiniteTalk --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 851a027..f50b8da 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ We propose **MultiTalk** , a novel framework for audio-driven multi-person conve > - ⏱️ **Long Video Generation**: Support video generation up to 15 seconds ## 🔥 Latest News - +* Aug 19, 2025: 🔥🔥 We released [**InfiniteTalk**](https://github.com/MeiGen-AI/InfiniteTalk), a novel new paradigm for video dubbing. InfiniteTalk supports infinite-length video-to-video generation and image-to-video generation. Models, code, gradio, and comfyui have all been released. * July 11, 2025: 🔥🔥 `MultiTalk` supports INT8 [quantization](https://github.com/huggingface/optimum-quanto) and [SageAttention2.2](https://github.com/thu-ml/SageAttention), and updates the CFG strategy (2 NFE per step) for FusionX LoRA, * July 01, 2025: 🔥🔥 `MultiTalk` supports input audios with TTS, [FusioniX](https://huggingface.co/vrgamedevgirl84/Wan14BT2VFusioniX/blob/main/FusionX_LoRa/Wan2.1_I2V_14B_FusionX_LoRA.safetensors) and [lightx2v](https://huggingface.co/Kijai/WanVideo_comfy/blob/main/Wan21_T2V_14B_lightx2v_cfg_step_distill_lora_rank32.safetensors) LoRA acceleration (requires only 4~8 steps), and Gradio. * June 14, 2025: 🔥🔥 We release `MultiTalk` with support for `multi-GPU inference`, `teacache acceleration`, `APG` and `low-VRAM inference` (enabling 480P video generation on a single RTX 4090). [APG](https://arxiv.org/abs/2410.02416) is used to alleviate the color error accumulation in long video generation. TeaCache is capable of increasing speed by approximately 2~3x. From 975680763a307a1e25c87ae1c58ac09edf800305 Mon Sep 17 00:00:00 2001 From: Zhe Kong <43921423+kongzhecn@users.noreply.github.com> Date: Thu, 25 Sep 2025 22:37:02 +0800 Subject: [PATCH 23/25] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f50b8da..bf9f2ab 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ MultiTalk

-

Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation

+

Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation (NeurIPS 2025)

[Zhe Kong*](https://scholar.google.com/citations?user=4X3yLwsAAAAJ&hl=zh-CN) · [Feng Gao*](https://scholar.google.com/citations?user=lFkCeoYAAAAJ) ·[Yong Zhang](https://yzhang2016.github.io/) · [Zhuoliang Kang](https://scholar.google.com/citations?user=W1ZXjMkAAAAJ&hl=en) · [Xiaoming Wei](https://scholar.google.com/citations?user=JXV5yrZxj5MC&hl=zh-CN) · [Xunliang Cai](https://openreview.net/profile?id=~Xunliang_Cai1) From a5b8038add8175c40ba19b453ac850d92389f9f4 Mon Sep 17 00:00:00 2001 From: yongzhang6782 Date: Tue, 16 Dec 2025 21:24:43 +0800 Subject: [PATCH 24/25] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index bf9f2ab..6bdbc7f 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,7 @@ We propose **MultiTalk** , a novel framework for audio-driven multi-person conve > - ⏱️ **Long Video Generation**: Support video generation up to 15 seconds ## 🔥 Latest News +* Dec 16, 2025: 🚀 We are excited to announce the release of **[LongCat-Video-Avatar](https://github.com/MeiGen-AI/LongCat-Video-Avatar)**, a unified model that delivers expressive and highly dynamic audio-driven character animation, supporting native tasks including Audio-Text-to-Video, Audio-Text-Image-to-Video, and Video Continuation with seamless compatibility for both single-stream and multi-stream audio inputs. The release includes our Technical Report, [code](https://github.com/meituan-longcat/LongCat-Video), [model weights](https://huggingface.co/meituan-longcat/LongCat-Video-Avatar), and [project page](https://github.com/MeiGen-AI/LongCat-Video-Avatar). * Aug 19, 2025: 🔥🔥 We released [**InfiniteTalk**](https://github.com/MeiGen-AI/InfiniteTalk), a novel new paradigm for video dubbing. InfiniteTalk supports infinite-length video-to-video generation and image-to-video generation. Models, code, gradio, and comfyui have all been released. * July 11, 2025: 🔥🔥 `MultiTalk` supports INT8 [quantization](https://github.com/huggingface/optimum-quanto) and [SageAttention2.2](https://github.com/thu-ml/SageAttention), and updates the CFG strategy (2 NFE per step) for FusionX LoRA, * July 01, 2025: 🔥🔥 `MultiTalk` supports input audios with TTS, [FusioniX](https://huggingface.co/vrgamedevgirl84/Wan14BT2VFusioniX/blob/main/FusionX_LoRa/Wan2.1_I2V_14B_FusionX_LoRA.safetensors) and [lightx2v](https://huggingface.co/Kijai/WanVideo_comfy/blob/main/Wan21_T2V_14B_lightx2v_cfg_step_distill_lora_rank32.safetensors) LoRA acceleration (requires only 4~8 steps), and Gradio. From 86e985481fc1ce37b906862344be8979e1231bcb Mon Sep 17 00:00:00 2001 From: yongzhang6782 Date: Thu, 18 Dec 2025 11:48:24 +0800 Subject: [PATCH 25/25] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6bdbc7f..ad4ff1b 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ We propose **MultiTalk** , a novel framework for audio-driven multi-person conve > - ⏱️ **Long Video Generation**: Support video generation up to 15 seconds ## 🔥 Latest News -* Dec 16, 2025: 🚀 We are excited to announce the release of **[LongCat-Video-Avatar](https://github.com/MeiGen-AI/LongCat-Video-Avatar)**, a unified model that delivers expressive and highly dynamic audio-driven character animation, supporting native tasks including Audio-Text-to-Video, Audio-Text-Image-to-Video, and Video Continuation with seamless compatibility for both single-stream and multi-stream audio inputs. The release includes our Technical Report, [code](https://github.com/meituan-longcat/LongCat-Video), [model weights](https://huggingface.co/meituan-longcat/LongCat-Video-Avatar), and [project page](https://github.com/MeiGen-AI/LongCat-Video-Avatar). +* Dec 16, 2025: 🚀 We are excited to announce the release of **[LongCat-Video-Avatar](https://github.com/MeiGen-AI/LongCat-Video-Avatar)**, a unified model that delivers expressive and highly dynamic audio-driven character animation, supporting native tasks including Audio-Text-to-Video, Audio-Text-Image-to-Video, and Video Continuation with seamless compatibility for both single-stream and multi-stream audio inputs. The release includes our Technical Report, [code](https://github.com/meituan-longcat/LongCat-Video), [model weights](https://huggingface.co/meituan-longcat/LongCat-Video-Avatar), and [project page](https://meigen-ai.github.io/LongCat-Video-Avatar/). * Aug 19, 2025: 🔥🔥 We released [**InfiniteTalk**](https://github.com/MeiGen-AI/InfiniteTalk), a novel new paradigm for video dubbing. InfiniteTalk supports infinite-length video-to-video generation and image-to-video generation. Models, code, gradio, and comfyui have all been released. * July 11, 2025: 🔥🔥 `MultiTalk` supports INT8 [quantization](https://github.com/huggingface/optimum-quanto) and [SageAttention2.2](https://github.com/thu-ml/SageAttention), and updates the CFG strategy (2 NFE per step) for FusionX LoRA, * July 01, 2025: 🔥🔥 `MultiTalk` supports input audios with TTS, [FusioniX](https://huggingface.co/vrgamedevgirl84/Wan14BT2VFusioniX/blob/main/FusionX_LoRa/Wan2.1_I2V_14B_FusionX_LoRA.safetensors) and [lightx2v](https://huggingface.co/Kijai/WanVideo_comfy/blob/main/Wan21_T2V_14B_lightx2v_cfg_step_distill_lora_rank32.safetensors) LoRA acceleration (requires only 4~8 steps), and Gradio.