From e5a5a2477970f986fd4d73acb3b2f774ef6c7eee Mon Sep 17 00:00:00 2001 From: Kambili Nwankwo <67324523+Kambili@users.noreply.github.com> Date: Wed, 8 Jul 2026 20:44:15 -0700 Subject: [PATCH 01/15] [None][feat] Add FastWan 2.2 TI2V-5B (DMD) pipeline, tests, and LPIPS golden MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Introduces FastWanPipeline for the FastVideo/FastWan2.2-TI2V-5B-FullAttn-Diffusers checkpoint — a CFG-free DMD-distilled text+image-to-video model built on Wan 2.2. Changes: - pipeline_fastwan.py: FastWanPipeline with 3-step DMD denoising loop - wan/defaults.py, wan/__init__.py, models/__init__.py: registry wiring - test_fastwan_dmd_math.py: unit tests for DMD timestep math (no checkpoint) - test_fastwan_registry.py: unit tests for pipeline registration and defaults - test_fastwan_pipeline.py: component accuracy tests (text encoder, VAE) - test_visual_gen.py: LPIPS regression test against 121-frame golden video - visual_gen_lpips_golden_media.zip: updated with 121-frame FastWan golden - l0_b200.yml: register all FastWan tests in CI Signed-off-by: Nnamdi Wankwo Signed-off-by: Kambili Nwankwo <67324523+Kambili@users.noreply.github.com> --- .../_torch/visual_gen/models/__init__.py | 3 +- .../_torch/visual_gen/models/wan/__init__.py | 2 + .../_torch/visual_gen/models/wan/defaults.py | 12 ++ .../visual_gen/models/wan/pipeline_fastwan.py | 170 +++++++++++++++ .../fastwan_lpips_golden_video.json | 16 ++ .../visual_gen_lpips_golden_media.zip | 4 +- .../examples/visual_gen/test_visual_gen.py | 47 ++++ .../test_lists/test-db/l0_b200.yml | 4 + .../text_encoder_reference.pt | Bin 0 -> 4196114 bytes .../component_accuracy/vae_input_latent.pt | Bin 0 -> 3176 bytes .../component_accuracy/vae_reference.pt | Bin 0 -> 13907 bytes .../visual_gen/test_fastwan_dmd_math.py | 200 ++++++++++++++++++ .../visual_gen/test_fastwan_pipeline.py | 118 +++++++++++ .../visual_gen/test_fastwan_registry.py | 78 +++++++ 14 files changed, 651 insertions(+), 3 deletions(-) create mode 100644 tensorrt_llm/_torch/visual_gen/models/wan/pipeline_fastwan.py create mode 100644 tests/integration/defs/examples/visual_gen/golden/visual_gen_lpips/fastwan_lpips_golden_video.json create mode 100644 tests/unittest/_torch/visual_gen/golden/component_accuracy/text_encoder_reference.pt create mode 100644 tests/unittest/_torch/visual_gen/golden/component_accuracy/vae_input_latent.pt create mode 100644 tests/unittest/_torch/visual_gen/golden/component_accuracy/vae_reference.pt create mode 100644 tests/unittest/_torch/visual_gen/test_fastwan_dmd_math.py create mode 100644 tests/unittest/_torch/visual_gen/test_fastwan_pipeline.py create mode 100644 tests/unittest/_torch/visual_gen/test_fastwan_registry.py diff --git a/tensorrt_llm/_torch/visual_gen/models/__init__.py b/tensorrt_llm/_torch/visual_gen/models/__init__.py index c5d63ed88b23..ec52332ee7b9 100644 --- a/tensorrt_llm/_torch/visual_gen/models/__init__.py +++ b/tensorrt_llm/_torch/visual_gen/models/__init__.py @@ -37,7 +37,7 @@ from .flux import Flux2Pipeline, FluxPipeline from .ltx2 import LTX2Pipeline # noqa: F401 from .qwen_image import QwenImagePipeline -from .wan import WanImageToVideoPipeline, WanPipeline +from .wan import FastWanPipeline, WanImageToVideoPipeline, WanPipeline __all__ = [ "AutoPipeline", @@ -46,6 +46,7 @@ "Flux2Pipeline", "QwenImagePipeline", "WanPipeline", + "FastWanPipeline", "WanImageToVideoPipeline", "Cosmos3OmniMoTPipeline", "register_pipeline", diff --git a/tensorrt_llm/_torch/visual_gen/models/wan/__init__.py b/tensorrt_llm/_torch/visual_gen/models/wan/__init__.py index 1eff9ff3ef2c..aacfbdf9a808 100644 --- a/tensorrt_llm/_torch/visual_gen/models/wan/__init__.py +++ b/tensorrt_llm/_torch/visual_gen/models/wan/__init__.py @@ -1,4 +1,5 @@ from .parallel_vae import ParallelVAE_Wan +from .pipeline_fastwan import FastWanPipeline from .pipeline_wan import WanPipeline from .pipeline_wan_i2v import WanImageToVideoPipeline from .transformer_wan import WanTransformer3DModel @@ -6,6 +7,7 @@ __all__ = [ "WanPipeline", + "FastWanPipeline", "WanImageToVideoPipeline", "WanTransformer3DModel", "ParallelVAE_Wan", diff --git a/tensorrt_llm/_torch/visual_gen/models/wan/defaults.py b/tensorrt_llm/_torch/visual_gen/models/wan/defaults.py index 5ceacfe8af4c..f3beba76430e 100644 --- a/tensorrt_llm/_torch/visual_gen/models/wan/defaults.py +++ b/tensorrt_llm/_torch/visual_gen/models/wan/defaults.py @@ -131,6 +131,18 @@ def get_wan_default_params( return params +def get_fastwan_default_params() -> dict: + """Default generation params for FastWan 2.2 TI2V-5B. + + Same as the base Wan 2.2 TI2V-5B defaults, but distilled: a fixed 3-step + DMD schedule and CFG-free (guidance_scale 1.0). + """ + params = dict(_WAN22_5B_PARAMS) + params["num_inference_steps"] = 3 + params["guidance_scale"] = 1.0 + return params + + def get_wan_extra_param_specs(is_wan22_14b: bool) -> Dict[str, ExtraParamSchema]: """Return extra_param_specs for a Wan model. diff --git a/tensorrt_llm/_torch/visual_gen/models/wan/pipeline_fastwan.py b/tensorrt_llm/_torch/visual_gen/models/wan/pipeline_fastwan.py new file mode 100644 index 000000000000..8a4c2c324458 --- /dev/null +++ b/tensorrt_llm/_torch/visual_gen/models/wan/pipeline_fastwan.py @@ -0,0 +1,170 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# +# 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. +"""FastWan: distilled (DMD) Wan 2.2 TI2V-5B for 3-step text-to-video. + +FastWan shares Wan 2.2 TI2V-5B's architecture exactly — only the weights +(distilled) and the sampling recipe differ. So this pipeline subclasses +``WanPipeline`` and overrides only the denoising loop. +""" + +import time +from typing import List, Optional, Union + +import torch +from diffusers.utils.torch_utils import randn_tensor + +from tensorrt_llm._torch.visual_gen.output import CudaPhaseTimer, PipelineOutput +from tensorrt_llm._torch.visual_gen.pipeline_registry import register_pipeline +from tensorrt_llm._utils import nvtx_range +from tensorrt_llm.logger import logger + +from .defaults import get_fastwan_default_params +from .pipeline_wan import WanPipeline + + +@register_pipeline( + "WanDMDPipeline", + hf_ids=[ + "FastVideo/FastWan2.2-TI2V-5B-FullAttn-Diffusers", + ], + doc="FastWan 2.2 distilled (DMD) — 3-step Wan 2.2 TI2V-5B text-to-video.", +) +class FastWanPipeline(WanPipeline): + """Wan 2.2 TI2V-5B with the DMD 3-step sampling loop. + + DMD inference (Distribution Matching Distillation): at each step the model + predicts the clean video ``x0``, then we re-noise it with FRESH noise to the + next (lower) noise level. The last step keeps ``x0``. CFG-free — one + transformer forward per step. Faithful to FastVideo's ``DmdDenoisingStage``. + """ + + # Fixed DMD schedule for FastWan2.2-TI2V-5B (see model card / FastVideo config). + DMD_TIMESTEPS = (1000, 757, 522) + NUM_TRAIN_TIMESTEPS = 1000 + + @property + def default_generation_params(self): + return get_fastwan_default_params() + + @nvtx_range("FastWanPipeline.forward") + @torch.no_grad() + def forward( + self, + prompt: Union[str, List[str]], + seed: int, + negative_prompt: Optional[str] = None, + height: int = 704, + width: int = 1280, + num_frames: int = 121, + num_inference_steps: Optional[int] = None, + guidance_scale: Optional[float] = None, + max_sequence_length: int = 512, + image=None, + **kwargs, + ): + # FastWan is text-to-video only for now; CFG-free, so guidance_scale and + # the Wan-2.2 two-stage knobs (guidance_scale_2/boundary_ratio in kwargs) + # are accepted for infer() compatibility but unused. + if image is not None: + raise NotImplementedError( + "FastWan currently supports text-to-video only (no image conditioning)." + ) + + pipeline_start = time.time() + timer = CudaPhaseTimer() + timer.mark_pre_start() + + if isinstance(prompt, str): + prompt = [prompt] + batch_size = len(prompt) + generator = torch.Generator(device=self.device).manual_seed(seed) + self.validate_resolution(height, width, num_frames) + + # FastWan is CFG-free: a single forward per step, negative prompt unused. + logger.info("Encoding prompt (FastWan is CFG-free; negative prompt unused)...") + prompt_embeds, _ = self._encode_prompt(prompt, negative_prompt or "", max_sequence_length) + + if self._fixed_latent is not None: + latents = self._fixed_latent.to(device=self.device, dtype=self.dtype) + else: + latents = self._prepare_latents(batch_size, height, width, num_frames, generator) + + timer.mark_denoise_start() + latents = self._dmd_denoise(latents, prompt_embeds, generator) + timer.mark_post_start() + + logger.info("Decoding video...") + decode_start = time.time() + video = self.decode_latents(latents, self._decode_latents) + if self.rank == 0: + logger.info(f"Video decoded in {time.time() - decode_start:.2f}s") + logger.info(f"Total pipeline time: {time.time() - pipeline_start:.2f}s") + + timer.mark_end() + frame_rate = self.default_generation_params.get("frame_rate", 24.0) + return timer.fill(PipelineOutput(video=video, frame_rate=frame_rate)) + + @nvtx_range("FastWanPipeline._dmd_denoise", color="blue") + def _dmd_denoise(self, latents, prompt_embeds, generator): + """3-step DMD loop: predict x0, then re-noise with fresh noise. + + The per-step sigma reduces to ``sigma = t / NUM_TRAIN_TIMESTEPS`` because + FastVideo's scheduler keeps ``timesteps = sigmas * num_train_timesteps`` + (co-scaled), so the lookup returns ``matched_timestep / 1000`` and the + flow-shift cancels (verified numerically for shift in {1, 5, 8, 12}). + """ + timesteps = self.DMD_TIMESTEPS + num_steps = len(timesteps) + _, ph, pw = self.transformer.config.patch_size + + # DMD math runs in fp32 for stability; the transformer runs in its + # native (bf16) dtype. + latents = latents.to(torch.float32) + start = time.time() + for i, t in enumerate(timesteps): + # Per-patch 2-D timestep for Wan 2.2 TI2V-5B; for T2V every patch + # shares the same scalar t. + nf = latents.shape[2] + nh = latents.shape[3] // ph + nw = latents.shape[4] // pw + t_tensor = torch.full( + (latents.shape[0], nf * nh * nw), float(t), device=latents.device + ) + + pred_noise = self.transformer( + hidden_states=latents.to(self.dtype), + timestep=t_tensor / self.NUM_TRAIN_TIMESTEPS, + encoder_hidden_states=prompt_embeds, + ).to(torch.float32) + + sigma = t / self.NUM_TRAIN_TIMESTEPS + pred_video = latents - sigma * pred_noise # clean-video estimate (x0) + + if i < num_steps - 1: + sigma_next = timesteps[i + 1] / self.NUM_TRAIN_TIMESTEPS + noise = randn_tensor( + latents.shape, generator=generator, + device=latents.device, dtype=torch.float32, + ) + latents = (1.0 - sigma_next) * pred_video + sigma_next * noise + else: + latents = pred_video + + if self.rank == 0: + logger.info(f"DMD step {i + 1}/{num_steps} (t={t}, sigma={sigma:.3f})") + + if self.rank == 0: + logger.info(f"DMD denoising done in {time.time() - start:.2f}s") + return latents.to(self.dtype) diff --git a/tests/integration/defs/examples/visual_gen/golden/visual_gen_lpips/fastwan_lpips_golden_video.json b/tests/integration/defs/examples/visual_gen/golden/visual_gen_lpips/fastwan_lpips_golden_video.json new file mode 100644 index 000000000000..c0ccb26b9705 --- /dev/null +++ b/tests/integration/defs/examples/visual_gen/golden/visual_gen_lpips/fastwan_lpips_golden_video.json @@ -0,0 +1,16 @@ +{ + "video": "fastwan_lpips_golden_video.mp4", + "model": "FastVideo/FastWan2.2-TI2V-5B-FullAttn-Diffusers", + "source": "SGLang multimodal_gen (trusted reference)", + "prompt": "A red fox walking through snow", + "negative_prompt": "", + "height": 704, + "width": 1280, + "num_frames": 9, + "num_inference_steps": 3, + "guidance_scale": 1.0, + "seed": 42, + "frame_rate": 24.0, + "lpips_net": "alex", + "lpips_threshold": 0.05 +} diff --git a/tests/integration/defs/examples/visual_gen/golden/visual_gen_lpips/visual_gen_lpips_golden_media.zip b/tests/integration/defs/examples/visual_gen/golden/visual_gen_lpips/visual_gen_lpips_golden_media.zip index 988c509f07b7..83cb6cdb2735 100644 --- a/tests/integration/defs/examples/visual_gen/golden/visual_gen_lpips/visual_gen_lpips_golden_media.zip +++ b/tests/integration/defs/examples/visual_gen/golden/visual_gen_lpips/visual_gen_lpips_golden_media.zip @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:78c7fde678df7b434b8f6da08d800d25bcfccb2509f73ab0c3d342eafe447100 -size 14648434 +oid sha256:1e6e0a6be5b9e219df7b881b601ce88f2dd77c031c7fae75925119b907bc69c2 +size 16803320 diff --git a/tests/integration/defs/examples/visual_gen/test_visual_gen.py b/tests/integration/defs/examples/visual_gen/test_visual_gen.py index ed8a5978941d..fc2dc4b6eb5c 100644 --- a/tests/integration/defs/examples/visual_gen/test_visual_gen.py +++ b/tests/integration/defs/examples/visual_gen/test_visual_gen.py @@ -120,6 +120,17 @@ COSMOS3_LPIPS_FRAME_RATE = 24.0 COSMOS3_LPIPS_THRESHOLD = 0.05 +# FastWan 2.2 TI2V-5B (DMD distilled) LPIPS configuration +FASTWAN_LPIPS_PROMPT = "A red fox walking through snow" +FASTWAN_LPIPS_NEGATIVE_PROMPT = "" +FASTWAN_LPIPS_HEIGHT = 704 +FASTWAN_LPIPS_WIDTH = 1280 +FASTWAN_LPIPS_NUM_FRAMES = 121 +FASTWAN_LPIPS_NUM_INFERENCE_STEPS = 3 +FASTWAN_LPIPS_GUIDANCE_SCALE = 1.0 +FASTWAN_LPIPS_SEED = 42 +FASTWAN_LPIPS_FRAME_RATE = 24.0 +FASTWAN_LPIPS_THRESHOLD = 0.05 # LTX-2 configuration LTX2_MODEL_CHECKPOINT_PATH = "LTX-2/ltx-2-19b-dev.safetensors" LTX2_TEXT_ENCODER_SUBPATH = "gemma-3-12b-it" @@ -1134,6 +1145,42 @@ def test_qwenimage_cuda_graph_lpips_against_golden(tmp_path): _assert_lpips_below_threshold(score, QWENIMAGE_LPIPS_THRESHOLD) +@pytest.mark.skipif(not torch.cuda.is_available(), reason="CUDA not available") +def test_fastwan_lpips_against_golden(tmp_path): + generated_path = tmp_path / "fastwan_generated.mp4" + golden_path = _golden_media_path( + tmp_path, "fastwan_lpips_golden_video.mp4", "FastWan LPIPS golden video" + ) + _generate_wan_lpips_video( + _lpips_model_path("FastVideo/FastWan2.2-TI2V-5B-FullAttn-Diffusers"), + generated_path, + FASTWAN_LPIPS_PROMPT, + FASTWAN_LPIPS_NEGATIVE_PROMPT, + FASTWAN_LPIPS_HEIGHT, + FASTWAN_LPIPS_WIDTH, + FASTWAN_LPIPS_NUM_FRAMES, + FASTWAN_LPIPS_NUM_INFERENCE_STEPS, + FASTWAN_LPIPS_GUIDANCE_SCALE, + FASTWAN_LPIPS_SEED, + FASTWAN_LPIPS_FRAME_RATE, + ) + score = _run_lpips_eval( + tmp_path, + "fastwan", + "video", + FASTWAN_LPIPS_PROMPT, + golden_path, + generated_path, + ) + _assert_lpips_below_threshold(score, FASTWAN_LPIPS_THRESHOLD) + + +@pytest.fixture(scope="session") +def wan_trtllm_video_path(_visual_gen_deps, llm_venv, llm_root): + """Generate input video via models/wan_t2v.py and return path to trtllm_output.mp4.""" + return _generate_wan_video(llm_venv, llm_root, WAN_T2V_MODEL_SUBPATH, "wan") + + @pytest.mark.skipif(not torch.cuda.is_available(), reason="CUDA not available") def test_cosmos3_nano_t2v_lpips_against_golden(_visual_gen_deps, tmp_path): generated_path = tmp_path / "cosmos3_nano_t2v_generated.mp4" diff --git a/tests/integration/test_lists/test-db/l0_b200.yml b/tests/integration/test_lists/test-db/l0_b200.yml index 464c3e553f91..96b35f7d820d 100644 --- a/tests/integration/test_lists/test-db/l0_b200.yml +++ b/tests/integration/test_lists/test-db/l0_b200.yml @@ -251,6 +251,9 @@ l0_b200: - unittest/_torch/visual_gen/test_wan22_ti2v_5b_pipeline.py - unittest/_torch/visual_gen/test_wan_vsa_pipeline.py - unittest/_torch/visual_gen/test_wan_vae.py + - unittest/_torch/visual_gen/test_fastwan_registry.py + - unittest/_torch/visual_gen/test_fastwan_dmd_math.py + - unittest/_torch/visual_gen/test_fastwan_pipeline.py - unittest/_torch/visual_gen/test_wan21_i2v_teacache.py - unittest/_torch/visual_gen/test_wan21_t2v_teacache.py - unittest/_torch/visual_gen/test_wan21_t2v_teacache_user_coefficients.py @@ -370,6 +373,7 @@ l0_b200: - examples/visual_gen/test_visual_gen.py::test_qwenimage_cuda_graph_lpips_against_golden TIMEOUT (10) - examples/visual_gen/test_visual_gen.py::test_cosmos3_nano_t2i_lpips_against_golden TIMEOUT (10) - examples/visual_gen/test_visual_gen.py::test_cosmos3_nano_t2v_lpips_against_golden TIMEOUT (15) + - examples/visual_gen/test_visual_gen.py::test_fastwan_lpips_against_golden - visual_gen/test_visual_gen_benchmark.py::test_offline_benchmark - visual_gen/test_visual_gen_benchmark.py::test_online_benchmark[openai-videos] # ---- moved to post-merge (MoE CI optimization) ---- diff --git a/tests/unittest/_torch/visual_gen/golden/component_accuracy/text_encoder_reference.pt b/tests/unittest/_torch/visual_gen/golden/component_accuracy/text_encoder_reference.pt new file mode 100644 index 0000000000000000000000000000000000000000..c2bcd24dcbc3218c170098e458b095b5cf8b6038 GIT binary patch literal 4196114 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≀op z*xAwiVvKpm{%cxNQdHL2Ya5g_i8LLGzBhDrCiT5730>F4l(jk34sww`$Yne*_l%(! z9W{N-dx(v%2h+V>^;z&|WRR*um&`(&S`|ox$w&RRp=3I6IgAM0T(lR%xww+$>N7fR3K6 zU^3ZD-q>g!yAo#t%khNkqsi=i!kPzFDU)4>II5bx=xsJ*Ocs?&wXu~<0gI|zZz5eY ziz3&6TPIW_N-#IPlX&vq=_>rL8J==3WmlOaduchax0V_SUC@^%BLYtdV(lm@VF!RW z{(*`yw1iSp-bj6%Wj&M?GdH3tklBN1<2x1UGH}A6Kr>FkbtMG4x4BknH2Q!N`mQbcwa=Dni`AH%(1W)!)k<8E&SVIEqz@&eo0VIWs8wcBI|H)V|Gpzmm9 z&?xvXs6(}ByLlVU4gH#koqTWGdH7UP_I53vxsMvI9(s$Yq>57qyn%?irg=|mq<2m1 zACZyBi-_v4QklZQh8>8VuLp&p0^;lja~giJkh;R=`l>>dnp&G8CY5ay)TJa<*h_M$ zHIy5kbJ)90vp5j;r^{UTy-TVu#BHF|CB!YGJXMuJuS#+mB448J<`L?yV#BI@Pb1`f_Gi?DGG>3DmQ$#ps4VNuY;Nu5$}`j^j^W038Y(X;=szU4{sjFn zBXkKrtA82OO*}s7&gyCQd;Q9O0DJ0;QyhA?7qy#q=tI<&g}d`zo(D!&#d{2@E|`%C*LIA zh&snC@`y{I2B{jlQNBmlNM26iCslWR&7nn&1ga{t`3e42nvBZ2cTtmcMq2Sc)KzBT zuIMQo>F(eb&S9v^7^M$ze!mlbQp9dSkHgofkUfa1nv-@IDixROIjCkEDcfb8{K`Hi z-Zn+e=m(M+m6_=4;NflsBh%?S70*rO6G=c#%wd-i)$Bb`;WtmNpw`BspS-6lz|&L- zRQP$ih5y7(mlUW(?WecOc(3;xa&C|mLrW& zee_z?YP~Cu^k42BeyyhS8dTDalcWlvf8Ant5_4(hquZ<gYPuJ=nRYj7n~G!VZe@Re zbgJ1XmXq^4=tZi7>Q9!tuA$#7oGwXo5z5Iu>~?wgv6M$$SprW$zgu3$j4K(;)9oCE zyN)sC;6qHmdx*-q>i%A=$8!AMT1lEO7l(dq+)b>%<%`(mL??KwA^eVf!xOlu6ys!4 z0u`F~j9SX=n$bc54a`M3?I@T^&6y%$2#8^pi+9QR2`) zQAqnui8Ai6c3da zx=c6%mYOo$D(^`wR)0F`dFSIjcEBPF_?X6Pj@av*bTceEZ(JQzr&hq9XSn>Z{ipOk zFV#i#W<1RSSY&c^FBCy9$U=_tO^4tKGkvYP%oG09bJ#B=V^z7lU@(sFks&EHBC-pROTiGkkbTM>ltwLu) zyz@~-8e@N#5pr4K)*p26RYYeRz8&@ALtPK{8J%KW+uvfJ^HhsFnmHw}mtMvMS5P6Y zI5)a6$8kNkm@d1d}^TJE-%!fEs|wwF?#$Ss(G;Qlllf{;5n$*AHmoM`C2!Xa=?Uuub>*PCI9N4 zx{j#ee1tmV7N{Zp8LO}Z9Vnm35>{@eYNH?UkM0f^ali3duad2dYT8n&iJW#X)gxEm zZQ~6*R#y)1z#rbg+FP*>r-frQ0eeGydsj^NI?P$!X6cLC`j~LGyTb93JiLgyJCnaZyJo}!jCl}OO)Th<)PUzp&J#-mVLAQ;P8G0S+w(qHuu7hlMUH!#ihU}

(C^zK{v}h&av{wvn&G-0~0=i&eR*OXjzf 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%0Dq=`-H;7;;fZ>~~2D(rHwLljM}~U@afY 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

a4#*9&LEi(l>U)jV+6nw+l?9vRl;|yv% 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 z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZ;Q!mDW1c3W01n`XU?EPf4ua9dXd=+k9#D<3VPNUfn3x!srpiGY zp@rk3Xxxl`3_gHyaPw0*V2qQSE>3<0-xW|=J&lvg@0yq9-MjnWKfm_~5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkL{KMAy&lT+`W-8~ycjnJSGwVLA-Q8YF6Yn|z+7G=p^ z)=qj4`fEwrPLuT{4U=U4QIhU<`@Pkba&+$>uj-k+!NLBYt}WK8<%Pv^99L^`rM6J1hWS!0 zuGg!1%l(TVzFY|n^U-RKQ7UV>|7dJnj zD}}gxTo{VI9llmj_5PDA>8Ifgji#MEiRXvXJ{G49w!S`rd{ z>`>PG;;i2v$yT#ex^@&XJ^nLn^61|2|MK8;MbX|wW3Uq58!Wvk9nQm^g)?|MXOAYs JFMs~<+3ybU;WGdL literal 0 HcmV?d00001 diff --git a/tests/unittest/_torch/visual_gen/golden/component_accuracy/vae_input_latent.pt b/tests/unittest/_torch/visual_gen/golden/component_accuracy/vae_input_latent.pt new file mode 100644 index 0000000000000000000000000000000000000000..0fcda478d0fb5c38f1f38fe184acf3f4ab0ed228 GIT binary patch literal 3176 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 literal 0 HcmV?d00001 diff --git a/tests/unittest/_torch/visual_gen/test_fastwan_dmd_math.py b/tests/unittest/_torch/visual_gen/test_fastwan_dmd_math.py new file mode 100644 index 000000000000..9c68b929089d --- /dev/null +++ b/tests/unittest/_torch/visual_gen/test_fastwan_dmd_math.py @@ -0,0 +1,200 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# +# 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. +"""DMD denoising loop math tests for FastWanPipeline. + +Tests _dmd_denoise in isolation: no checkpoint, no text encoder, no VAE. +A stub pipeline (object.__new__) with a fake transformer supplies controlled +inputs so the DMD formulas can be verified numerically. + +GPU required (tensor ops + nvtx_range decorator). + +Run: + pytest tests/unittest/_torch/visual_gen/test_fastwan_dmd_math.py -v -s +""" + +import os +import unittest.mock as mock + +os.environ["TLLM_DISABLE_MPI"] = "1" + +import pytest +import torch + +from tensorrt_llm._torch.visual_gen.models.wan.pipeline_fastwan import FastWanPipeline + + +@pytest.fixture(autouse=True, scope="module") +def _cleanup_mpi_env(): + yield + os.environ.pop("TLLM_DISABLE_MPI", None) + + +# --------------------------------------------------------------------------- +# Constants +# --------------------------------------------------------------------------- + +_PATCH_SIZE = (1, 2, 2) + +# Small latent (B=1, C=16, T=3, H=4, W=4) +# nf=3, nh=4//2=2, nw=4//2=2 → 12 patches per sample +_LATENT_SHAPE = (1, 16, 3, 4, 4) +_NUM_PATCHES = 3 * 2 * 2 # 12 + +# With pred_noise=0 and noise=0, re-noising reduces to: +# latents_{i+1} = (1 - sigma_next) * latents_i +# So final output = (1-sigma_1)*(1-sigma_2)*initial = 0.243*0.478*initial ≈ 0.1162 +_SIGMA_1 = FastWanPipeline.DMD_TIMESTEPS[1] / FastWanPipeline.NUM_TRAIN_TIMESTEPS # 0.757 +_SIGMA_2 = FastWanPipeline.DMD_TIMESTEPS[2] / FastWanPipeline.NUM_TRAIN_TIMESTEPS # 0.522 +_ZERO_NOISE_EXPECTED_SCALE = (1.0 - _SIGMA_1) * (1.0 - _SIGMA_2) # ≈ 0.1162 + +_RANDN_PATH = "tensorrt_llm._torch.visual_gen.models.wan.pipeline_fastwan.randn_tensor" + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + + +class _RecordingTransformer: + """Fake transformer: records every timestep call, returns zeros. + + parameters() yields a single bfloat16 tensor so BasePipeline.dtype + returns torch.bfloat16 without needing a real nn.Module. + """ + + def __init__(self): + self.captured_timesteps = [] + self._dummy_param = torch.zeros(1, dtype=torch.bfloat16, device="cuda") + + class _Config: + patch_size = _PATCH_SIZE + + self.config = _Config() + + def parameters(self): + yield self._dummy_param + + def __call__(self, hidden_states, timestep, encoder_hidden_states): + self.captured_timesteps.append(timestep.detach().clone()) + return torch.zeros_like(hidden_states) + + @property + def call_count(self): + return len(self.captured_timesteps) + + +def _make_stub(transformer): + """FastWanPipeline shell — no weights, no __init__. + + We bypass nn.Module.__setattr__ by writing directly into __dict__. + - transformer: accessed via __dict__, so no nn.Module submodule registration + - pipeline_config: WanPipeline.dtype reads self.pipeline_config.torch_dtype + - rank: read-only property on BasePipeline — returns 0 when MPI is disabled + """ + pipe = object.__new__(FastWanPipeline) + pipe.__dict__["transformer"] = transformer + pipe.__dict__["pipeline_config"] = type( + "_Config", (), {"torch_dtype": torch.bfloat16} + )() + return pipe + + +def _run(pipe, latents, zero_noise=False): + gen = torch.Generator(device=latents.device).manual_seed(42) + embeds = torch.zeros(1, 8, 4096, device=latents.device, dtype=torch.bfloat16) + if zero_noise: + zeros = torch.zeros(_LATENT_SHAPE, device=latents.device, dtype=torch.float32) + with mock.patch(_RANDN_PATH, return_value=zeros): + return pipe._dmd_denoise(latents, embeds, gen) + return pipe._dmd_denoise(latents, embeds, gen) + + +# --------------------------------------------------------------------------- +# Tests +# --------------------------------------------------------------------------- + + +@pytest.mark.skipif(not torch.cuda.is_available(), reason="CUDA required") +class TestDMDTimesteps: + """sigma = t / 1000 for every step; tensor shape and call count correct.""" + + def test_sigma_values(self): + recorder = _RecordingTransformer() + _run(_make_stub(recorder), torch.ones(_LATENT_SHAPE, device="cuda", dtype=torch.bfloat16)) + + expected = [t / 1000.0 for t in FastWanPipeline.DMD_TIMESTEPS] + for i, (captured, exp) in enumerate(zip(recorder.captured_timesteps, expected)): + assert torch.allclose(captured, torch.full_like(captured, exp)), ( + f"Step {i}: expected sigma {exp}, got {captured[0, 0].item():.6f}" + ) + + def test_timestep_tensor_shape(self): + recorder = _RecordingTransformer() + _run(_make_stub(recorder), torch.ones(_LATENT_SHAPE, device="cuda", dtype=torch.bfloat16)) + + for i, captured in enumerate(recorder.captured_timesteps): + assert captured.shape == (1, _NUM_PATCHES), ( + f"Step {i}: expected (1, {_NUM_PATCHES}), got {captured.shape}" + ) + + def test_transformer_called_three_times(self): + """One forward per step — CFG-free means no double-pass.""" + recorder = _RecordingTransformer() + _run(_make_stub(recorder), torch.ones(_LATENT_SHAPE, device="cuda", dtype=torch.bfloat16)) + assert recorder.call_count == 3 + + +@pytest.mark.skipif(not torch.cuda.is_available(), reason="CUDA required") +class TestDMDMath: + + def test_output_dtype_is_bfloat16(self): + output = _run( + _make_stub(_RecordingTransformer()), + torch.ones(_LATENT_SHAPE, device="cuda", dtype=torch.bfloat16), + ) + assert output.dtype == torch.bfloat16 + + def test_exact_output_with_zero_noise(self): + """pred_noise=0 and randn=0 → output = (1-sigma_1)*(1-sigma_2)*initial ≈ 0.1162*initial.""" + initial = torch.ones(_LATENT_SHAPE, device="cuda", dtype=torch.bfloat16) + output = _run(_make_stub(_RecordingTransformer()), initial, zero_noise=True) + + expected = torch.full( + _LATENT_SHAPE, _ZERO_NOISE_EXPECTED_SCALE, dtype=torch.float32, device="cuda" + ).to(torch.bfloat16) + assert torch.allclose(output.float(), expected.float(), atol=5e-3), ( + f"Expected ≈{_ZERO_NOISE_EXPECTED_SCALE:.4f}, got {output.float().mean().item():.4f}" + ) + + def test_final_step_does_not_call_randn_tensor(self): + """randn_tensor must be called for steps 0 and 1 only — never on the final step.""" + from diffusers.utils.torch_utils import randn_tensor as _orig + call_count = [0] + + def _counting(*args, **kwargs): + call_count[0] += 1 + if call_count[0] >= 3: + raise AssertionError("randn_tensor called on the final step — must not happen") + return _orig(*args, **kwargs) + + pipe = _make_stub(_RecordingTransformer()) + gen = torch.Generator(device="cuda").manual_seed(42) + embeds = torch.zeros(1, 8, 4096, device="cuda", dtype=torch.bfloat16) + latents = torch.ones(_LATENT_SHAPE, device="cuda", dtype=torch.bfloat16) + + with mock.patch(_RANDN_PATH, side_effect=_counting): + pipe._dmd_denoise(latents, embeds, gen) + + assert call_count[0] == 2, f"Expected 2 randn_tensor calls, got {call_count[0]}" diff --git a/tests/unittest/_torch/visual_gen/test_fastwan_pipeline.py b/tests/unittest/_torch/visual_gen/test_fastwan_pipeline.py new file mode 100644 index 000000000000..c63765caaa52 --- /dev/null +++ b/tests/unittest/_torch/visual_gen/test_fastwan_pipeline.py @@ -0,0 +1,118 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# +# 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. +"""Pipeline-level tests for FastWanPipeline requiring a real checkpoint. + +TestFastWanComponentAccuracy + Verifies that the text encoder and VAE decoder load correctly and produce + numerically stable output. Reference tensors were generated once from this + pipeline and committed to golden/component_accuracy/. Future runs compare + against them to catch weight-loading bugs, quantization changes, or + refactors that silently shift component outputs. + +Run: + DIFFUSION_MODEL_PATH_FASTWAN=/path/to/checkpoint \\ + pytest tests/unittest/_torch/visual_gen/test_fastwan_pipeline.py -v -s + +Override checkpoint path via DIFFUSION_MODEL_PATH_FASTWAN env var or place +the checkpoint at $LLM_MODELS_ROOT/FastVideo/FastWan2.2-TI2V-5B-FullAttn-Diffusers +""" + +import gc +import os +from pathlib import Path + +os.environ["TLLM_DISABLE_MPI"] = "1" + +import pytest +import torch + +from tensorrt_llm._torch.visual_gen.pipeline_loader import PipelineLoader +from tensorrt_llm.visual_gen.args import TorchCompileConfig, VisualGenArgs + + +@pytest.fixture(autouse=True, scope="module") +def _cleanup_mpi_env(): + yield + os.environ.pop("TLLM_DISABLE_MPI", None) + + +def _checkpoint_path() -> str: + if "DIFFUSION_MODEL_PATH_FASTWAN" in os.environ: + return os.environ["DIFFUSION_MODEL_PATH_FASTWAN"] + root = os.environ.get( + "LLM_MODELS_ROOT", + "/home/scratch.trt_llm_data_ci/llm-models", + ) + return os.path.join(root, "FastVideo/FastWan2.2-TI2V-5B-FullAttn-Diffusers") + + +FASTWAN_PATH = _checkpoint_path() + +GOLDEN_DIR = Path(__file__).parent / "golden" / "component_accuracy" + +# Prompt used when generating the text encoder reference tensor. +_COMPONENT_PROMPT = "A cat sitting on a sunny windowsill watching birds outside." + + +@pytest.fixture(scope="module") +def fastwan_pipeline(): + if not os.path.exists(FASTWAN_PATH): + pytest.skip(f"Checkpoint not found: {FASTWAN_PATH}") + args = VisualGenArgs( + model=FASTWAN_PATH, + torch_compile_config=TorchCompileConfig(enable=False), + ) + pipeline = PipelineLoader(args).load(skip_warmup=True) + yield pipeline + del pipeline + gc.collect() + torch.cuda.empty_cache() + + +@pytest.mark.skipif(not torch.cuda.is_available(), reason="CUDA required") +class TestFastWanComponentAccuracy: + """Verify text encoder and VAE decoder produce numerically stable output. + + Each test loads a reference tensor from golden/component_accuracy/, runs the + component on a fixed input, and asserts torch.allclose against the reference. + This catches weight-loading bugs and silent numerical regressions without + running the full pipeline. + """ + + def test_text_encoder_reference(self, fastwan_pipeline): + ref = torch.load(GOLDEN_DIR / "text_encoder_reference.pt", weights_only=True) + with torch.no_grad(): + embeds, _ = fastwan_pipeline._encode_prompt([_COMPONENT_PROMPT], "", 512) + embeds_cpu = embeds.cpu().float() + ref_f = ref.float() + assert torch.allclose(embeds_cpu, ref_f, atol=1e-3), ( + f"Text encoder output diverged from reference. " + f"Max diff: {(embeds_cpu - ref_f).abs().max():.6f} " + f"(shape {embeds_cpu.shape}, dtype {embeds.dtype})" + ) + + def test_vae_decoder_reference(self, fastwan_pipeline): + latent = torch.load(GOLDEN_DIR / "vae_input_latent.pt", weights_only=True) + ref = torch.load(GOLDEN_DIR / "vae_reference.pt", weights_only=True) + with torch.no_grad(): + output = fastwan_pipeline._decode_latents(latent.to(fastwan_pipeline.device)) + output_cpu = output.cpu().float() + ref_f = ref.float() + assert torch.allclose(output_cpu, ref_f, atol=1.0), ( + f"VAE decoder output diverged from reference. " + f"Max diff: {(output_cpu - ref_f).abs().max():.1f} pixels " + f"(shape {output_cpu.shape})" + ) + diff --git a/tests/unittest/_torch/visual_gen/test_fastwan_registry.py b/tests/unittest/_torch/visual_gen/test_fastwan_registry.py new file mode 100644 index 000000000000..9b44c6c537f8 --- /dev/null +++ b/tests/unittest/_torch/visual_gen/test_fastwan_registry.py @@ -0,0 +1,78 @@ +#112 SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# +# 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. +"""Registry and defaults tests for FastWanPipeline. + +No GPU or checkpoint required. + +Run: + pytest tests/unittest/_torch/visual_gen/test_fastwan_registry.py -v +""" + +import os + +os.environ["TLLM_DISABLE_MPI"] = "1" + +import pytest +import torch + +from tensorrt_llm._torch.visual_gen.models.wan.defaults import get_fastwan_default_params +from tensorrt_llm._torch.visual_gen.models.wan.pipeline_fastwan import FastWanPipeline +from tensorrt_llm._torch.visual_gen.pipeline_registry import PIPELINE_REGISTRY + + +@pytest.fixture(autouse=True, scope="module") +def _cleanup_mpi_env(): + yield + os.environ.pop("TLLM_DISABLE_MPI", None) + + +FASTWAN_HF_ID = "FastVideo/FastWan2.2-TI2V-5B-FullAttn-Diffusers" +REGISTRY_KEY = "WanDMDPipeline" + + +class TestFastWanRegistration: + def test_registry_key_exists(self): + assert REGISTRY_KEY in PIPELINE_REGISTRY + + def test_registry_maps_to_fastwan_class(self): + assert PIPELINE_REGISTRY[REGISTRY_KEY].pipeline_cls is FastWanPipeline + + def test_hf_id_in_registry(self): + hf_ids = PIPELINE_REGISTRY[REGISTRY_KEY].hf_ids + assert FASTWAN_HF_ID in hf_ids + + +class TestFastWanDefaultParams: + def test_num_inference_steps_is_3(self): + assert get_fastwan_default_params()["num_inference_steps"] == 3 + + def test_guidance_scale_is_cfg_free(self): + assert get_fastwan_default_params()["guidance_scale"] == 1.0 + + def test_frame_rate_is_24(self): + assert get_fastwan_default_params()["frame_rate"] == 24.0 + + def test_canonical_resolution(self): + params = get_fastwan_default_params() + assert params["height"] == 704 + assert params["width"] == 1280 + + +class TestFastWanImageNotSupported: + @pytest.mark.skipif(not torch.cuda.is_available(), reason="nvtx_range decorator needs CUDA") + def test_image_raises_not_implemented(self): + pipe = object.__new__(FastWanPipeline) + with pytest.raises(NotImplementedError): + pipe.forward(prompt="test", seed=0, image=object()) From 80e919bf19e964901b5cd17f7ed38089005adf13 Mon Sep 17 00:00:00 2001 From: Kambili Nwankwo <67324523+Kambili@users.noreply.github.com> Date: Wed, 8 Jul 2026 20:44:15 -0700 Subject: [PATCH 02/15] [None][fix] Fix corrupted copyright header in test_fastwan_registry.py Remove stray '#112' prefix from the SPDX copyright line. Signed-off-by: Nnamdi Wankwo Signed-off-by: Kambili Nwankwo <67324523+Kambili@users.noreply.github.com> --- tests/unittest/_torch/visual_gen/test_fastwan_registry.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unittest/_torch/visual_gen/test_fastwan_registry.py b/tests/unittest/_torch/visual_gen/test_fastwan_registry.py index 9b44c6c537f8..12148a81347c 100644 --- a/tests/unittest/_torch/visual_gen/test_fastwan_registry.py +++ b/tests/unittest/_torch/visual_gen/test_fastwan_registry.py @@ -1,4 +1,4 @@ -#112 SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); From 29621e7b4b02a01ff8ded16475b7ec62864b21a4 Mon Sep 17 00:00:00 2001 From: Kambili Nwankwo Date: Mon, 13 Jul 2026 21:01:41 +0000 Subject: [PATCH 03/15] [None][fix] Address review comments for FastWan (WanDMD) pipeline MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Rename FastWanPipeline -> WanDMDPipeline to match the registry key, the checkpoint's _class_name, and the SGLang reference class name (all other pipelines follow class == registry key). - forward(): match the base WanPipeline signature — declare guidance_scale_2 and boundary_ratio explicitly (unused; CFG-free) and annotate image, drop **kwargs. - forward(): raise ValueError on a non-empty negative_prompt instead of silently ignoring it; always encode "" as the negative prompt. - _denoise(): run the DMD loop in the transformer's native bf16 dtype (matching the FastVideo reference) instead of fp32; hoist patch-grid dims out of the loop. - Tests: move default-params tests into test_visual_gen_params.py (both raw and public-API layers), move the image-not-supported test into test_fastwan_pipeline.py, add forward() shape tests, and drop the redundant registry test (registration is covered by pipeline loading + the global hf-id collision guard). - l0_b200.yml: add TIMEOUT (10) to the FastWan LPIPS test; drop the deleted registry test entry. - Fix stale num_frames (9 -> 121) in the golden metadata JSON. Signed-off-by: Kambili Nwankwo --- .../_torch/visual_gen/models/__init__.py | 4 +- .../_torch/visual_gen/models/wan/__init__.py | 4 +- .../visual_gen/models/wan/pipeline_fastwan.py | 51 +++++------ .../fastwan_lpips_golden_video.json | 2 +- .../test_lists/test-db/l0_b200.yml | 3 +- .../visual_gen/test_fastwan_dmd_math.py | 22 ++--- .../visual_gen/test_fastwan_pipeline.py | 86 ++++++++++++++++++- .../visual_gen/test_fastwan_registry.py | 78 ----------------- .../visual_gen/test_visual_gen_params.py | 28 ++++++ 9 files changed, 155 insertions(+), 123 deletions(-) delete mode 100644 tests/unittest/_torch/visual_gen/test_fastwan_registry.py diff --git a/tensorrt_llm/_torch/visual_gen/models/__init__.py b/tensorrt_llm/_torch/visual_gen/models/__init__.py index ec52332ee7b9..68f271f6bbf1 100644 --- a/tensorrt_llm/_torch/visual_gen/models/__init__.py +++ b/tensorrt_llm/_torch/visual_gen/models/__init__.py @@ -37,7 +37,7 @@ from .flux import Flux2Pipeline, FluxPipeline from .ltx2 import LTX2Pipeline # noqa: F401 from .qwen_image import QwenImagePipeline -from .wan import FastWanPipeline, WanImageToVideoPipeline, WanPipeline +from .wan import WanDMDPipeline, WanImageToVideoPipeline, WanPipeline __all__ = [ "AutoPipeline", @@ -46,7 +46,7 @@ "Flux2Pipeline", "QwenImagePipeline", "WanPipeline", - "FastWanPipeline", + "WanDMDPipeline", "WanImageToVideoPipeline", "Cosmos3OmniMoTPipeline", "register_pipeline", diff --git a/tensorrt_llm/_torch/visual_gen/models/wan/__init__.py b/tensorrt_llm/_torch/visual_gen/models/wan/__init__.py index aacfbdf9a808..fd876e38bcb2 100644 --- a/tensorrt_llm/_torch/visual_gen/models/wan/__init__.py +++ b/tensorrt_llm/_torch/visual_gen/models/wan/__init__.py @@ -1,5 +1,5 @@ from .parallel_vae import ParallelVAE_Wan -from .pipeline_fastwan import FastWanPipeline +from .pipeline_fastwan import WanDMDPipeline from .pipeline_wan import WanPipeline from .pipeline_wan_i2v import WanImageToVideoPipeline from .transformer_wan import WanTransformer3DModel @@ -7,7 +7,7 @@ __all__ = [ "WanPipeline", - "FastWanPipeline", + "WanDMDPipeline", "WanImageToVideoPipeline", "WanTransformer3DModel", "ParallelVAE_Wan", diff --git a/tensorrt_llm/_torch/visual_gen/models/wan/pipeline_fastwan.py b/tensorrt_llm/_torch/visual_gen/models/wan/pipeline_fastwan.py index 8a4c2c324458..705f69fc9eec 100644 --- a/tensorrt_llm/_torch/visual_gen/models/wan/pipeline_fastwan.py +++ b/tensorrt_llm/_torch/visual_gen/models/wan/pipeline_fastwan.py @@ -22,6 +22,7 @@ import time from typing import List, Optional, Union +import PIL.Image import torch from diffusers.utils.torch_utils import randn_tensor @@ -41,7 +42,7 @@ ], doc="FastWan 2.2 distilled (DMD) — 3-step Wan 2.2 TI2V-5B text-to-video.", ) -class FastWanPipeline(WanPipeline): +class WanDMDPipeline(WanPipeline): """Wan 2.2 TI2V-5B with the DMD 3-step sampling loop. DMD inference (Distribution Matching Distillation): at each step the model @@ -58,7 +59,7 @@ class FastWanPipeline(WanPipeline): def default_generation_params(self): return get_fastwan_default_params() - @nvtx_range("FastWanPipeline.forward") + @nvtx_range("WanDMDPipeline.forward") @torch.no_grad() def forward( self, @@ -70,13 +71,14 @@ def forward( num_frames: int = 121, num_inference_steps: Optional[int] = None, guidance_scale: Optional[float] = None, + guidance_scale_2: Optional[float] = None, + boundary_ratio: Optional[float] = None, max_sequence_length: int = 512, - image=None, - **kwargs, + image: Optional[Union[PIL.Image.Image, torch.Tensor, str]] = None, ): # FastWan is text-to-video only for now; CFG-free, so guidance_scale and - # the Wan-2.2 two-stage knobs (guidance_scale_2/boundary_ratio in kwargs) - # are accepted for infer() compatibility but unused. + # the Wan-2.2 two-stage knobs (guidance_scale_2/boundary_ratio) are + # accepted for infer()/base-class compatibility but unused. if image is not None: raise NotImplementedError( "FastWan currently supports text-to-video only (no image conditioning)." @@ -92,9 +94,11 @@ def forward( generator = torch.Generator(device=self.device).manual_seed(seed) self.validate_resolution(height, width, num_frames) - # FastWan is CFG-free: a single forward per step, negative prompt unused. - logger.info("Encoding prompt (FastWan is CFG-free; negative prompt unused)...") - prompt_embeds, _ = self._encode_prompt(prompt, negative_prompt or "", max_sequence_length) + if negative_prompt: + raise ValueError( + "FastWan is CFG-free and does not support negative prompts." + ) + prompt_embeds, _ = self._encode_prompt(prompt, "", max_sequence_length) if self._fixed_latent is not None: latents = self._fixed_latent.to(device=self.device, dtype=self.dtype) @@ -102,7 +106,7 @@ def forward( latents = self._prepare_latents(batch_size, height, width, num_frames, generator) timer.mark_denoise_start() - latents = self._dmd_denoise(latents, prompt_embeds, generator) + latents = self._denoise(latents, prompt_embeds, generator) timer.mark_post_start() logger.info("Decoding video...") @@ -116,8 +120,8 @@ def forward( frame_rate = self.default_generation_params.get("frame_rate", 24.0) return timer.fill(PipelineOutput(video=video, frame_rate=frame_rate)) - @nvtx_range("FastWanPipeline._dmd_denoise", color="blue") - def _dmd_denoise(self, latents, prompt_embeds, generator): + @nvtx_range("WanDMDPipeline._denoise", color="blue") + def _denoise(self, latents, prompt_embeds, generator): """3-step DMD loop: predict x0, then re-noise with fresh noise. The per-step sigma reduces to ``sigma = t / NUM_TRAIN_TIMESTEPS`` because @@ -129,25 +133,24 @@ def _dmd_denoise(self, latents, prompt_embeds, generator): num_steps = len(timesteps) _, ph, pw = self.transformer.config.patch_size - # DMD math runs in fp32 for stability; the transformer runs in its - # native (bf16) dtype. - latents = latents.to(torch.float32) + # The DMD ops are linear (mul/sub/add), so they run in the transformer's + # native (bf16) dtype to match the FastVideo reference; no fp32 needed. + latents = latents.to(self.dtype) + # Patch grid dimensions are fixed for the entire denoising loop. + nf = latents.shape[2] + nh = latents.shape[3] // ph + nw = latents.shape[4] // pw start = time.time() for i, t in enumerate(timesteps): - # Per-patch 2-D timestep for Wan 2.2 TI2V-5B; for T2V every patch - # shares the same scalar t. - nf = latents.shape[2] - nh = latents.shape[3] // ph - nw = latents.shape[4] // pw t_tensor = torch.full( (latents.shape[0], nf * nh * nw), float(t), device=latents.device ) pred_noise = self.transformer( - hidden_states=latents.to(self.dtype), + hidden_states=latents, timestep=t_tensor / self.NUM_TRAIN_TIMESTEPS, encoder_hidden_states=prompt_embeds, - ).to(torch.float32) + ) sigma = t / self.NUM_TRAIN_TIMESTEPS pred_video = latents - sigma * pred_noise # clean-video estimate (x0) @@ -156,7 +159,7 @@ def _dmd_denoise(self, latents, prompt_embeds, generator): sigma_next = timesteps[i + 1] / self.NUM_TRAIN_TIMESTEPS noise = randn_tensor( latents.shape, generator=generator, - device=latents.device, dtype=torch.float32, + device=latents.device, dtype=self.dtype, ) latents = (1.0 - sigma_next) * pred_video + sigma_next * noise else: @@ -167,4 +170,4 @@ def _dmd_denoise(self, latents, prompt_embeds, generator): if self.rank == 0: logger.info(f"DMD denoising done in {time.time() - start:.2f}s") - return latents.to(self.dtype) + return latents diff --git a/tests/integration/defs/examples/visual_gen/golden/visual_gen_lpips/fastwan_lpips_golden_video.json b/tests/integration/defs/examples/visual_gen/golden/visual_gen_lpips/fastwan_lpips_golden_video.json index c0ccb26b9705..1903647669b4 100644 --- a/tests/integration/defs/examples/visual_gen/golden/visual_gen_lpips/fastwan_lpips_golden_video.json +++ b/tests/integration/defs/examples/visual_gen/golden/visual_gen_lpips/fastwan_lpips_golden_video.json @@ -6,7 +6,7 @@ "negative_prompt": "", "height": 704, "width": 1280, - "num_frames": 9, + "num_frames": 121, "num_inference_steps": 3, "guidance_scale": 1.0, "seed": 42, diff --git a/tests/integration/test_lists/test-db/l0_b200.yml b/tests/integration/test_lists/test-db/l0_b200.yml index 96b35f7d820d..8ffada48403f 100644 --- a/tests/integration/test_lists/test-db/l0_b200.yml +++ b/tests/integration/test_lists/test-db/l0_b200.yml @@ -251,7 +251,6 @@ l0_b200: - unittest/_torch/visual_gen/test_wan22_ti2v_5b_pipeline.py - unittest/_torch/visual_gen/test_wan_vsa_pipeline.py - unittest/_torch/visual_gen/test_wan_vae.py - - unittest/_torch/visual_gen/test_fastwan_registry.py - unittest/_torch/visual_gen/test_fastwan_dmd_math.py - unittest/_torch/visual_gen/test_fastwan_pipeline.py - unittest/_torch/visual_gen/test_wan21_i2v_teacache.py @@ -373,7 +372,7 @@ l0_b200: - examples/visual_gen/test_visual_gen.py::test_qwenimage_cuda_graph_lpips_against_golden TIMEOUT (10) - examples/visual_gen/test_visual_gen.py::test_cosmos3_nano_t2i_lpips_against_golden TIMEOUT (10) - examples/visual_gen/test_visual_gen.py::test_cosmos3_nano_t2v_lpips_against_golden TIMEOUT (15) - - examples/visual_gen/test_visual_gen.py::test_fastwan_lpips_against_golden + - examples/visual_gen/test_visual_gen.py::test_fastwan_lpips_against_golden TIMEOUT (10) - visual_gen/test_visual_gen_benchmark.py::test_offline_benchmark - visual_gen/test_visual_gen_benchmark.py::test_online_benchmark[openai-videos] # ---- moved to post-merge (MoE CI optimization) ---- diff --git a/tests/unittest/_torch/visual_gen/test_fastwan_dmd_math.py b/tests/unittest/_torch/visual_gen/test_fastwan_dmd_math.py index 9c68b929089d..a703df68fb70 100644 --- a/tests/unittest/_torch/visual_gen/test_fastwan_dmd_math.py +++ b/tests/unittest/_torch/visual_gen/test_fastwan_dmd_math.py @@ -12,9 +12,9 @@ # 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. -"""DMD denoising loop math tests for FastWanPipeline. +"""DMD denoising loop math tests for WanDMDPipeline. -Tests _dmd_denoise in isolation: no checkpoint, no text encoder, no VAE. +Tests _denoise in isolation: no checkpoint, no text encoder, no VAE. A stub pipeline (object.__new__) with a fake transformer supplies controlled inputs so the DMD formulas can be verified numerically. @@ -32,7 +32,7 @@ import pytest import torch -from tensorrt_llm._torch.visual_gen.models.wan.pipeline_fastwan import FastWanPipeline +from tensorrt_llm._torch.visual_gen.models.wan.pipeline_fastwan import WanDMDPipeline @pytest.fixture(autouse=True, scope="module") @@ -55,8 +55,8 @@ def _cleanup_mpi_env(): # With pred_noise=0 and noise=0, re-noising reduces to: # latents_{i+1} = (1 - sigma_next) * latents_i # So final output = (1-sigma_1)*(1-sigma_2)*initial = 0.243*0.478*initial ≈ 0.1162 -_SIGMA_1 = FastWanPipeline.DMD_TIMESTEPS[1] / FastWanPipeline.NUM_TRAIN_TIMESTEPS # 0.757 -_SIGMA_2 = FastWanPipeline.DMD_TIMESTEPS[2] / FastWanPipeline.NUM_TRAIN_TIMESTEPS # 0.522 +_SIGMA_1 = WanDMDPipeline.DMD_TIMESTEPS[1] / WanDMDPipeline.NUM_TRAIN_TIMESTEPS # 0.757 +_SIGMA_2 = WanDMDPipeline.DMD_TIMESTEPS[2] / WanDMDPipeline.NUM_TRAIN_TIMESTEPS # 0.522 _ZERO_NOISE_EXPECTED_SCALE = (1.0 - _SIGMA_1) * (1.0 - _SIGMA_2) # ≈ 0.1162 _RANDN_PATH = "tensorrt_llm._torch.visual_gen.models.wan.pipeline_fastwan.randn_tensor" @@ -96,14 +96,14 @@ def call_count(self): def _make_stub(transformer): - """FastWanPipeline shell — no weights, no __init__. + """WanDMDPipeline shell — no weights, no __init__. We bypass nn.Module.__setattr__ by writing directly into __dict__. - transformer: accessed via __dict__, so no nn.Module submodule registration - pipeline_config: WanPipeline.dtype reads self.pipeline_config.torch_dtype - rank: read-only property on BasePipeline — returns 0 when MPI is disabled """ - pipe = object.__new__(FastWanPipeline) + pipe = object.__new__(WanDMDPipeline) pipe.__dict__["transformer"] = transformer pipe.__dict__["pipeline_config"] = type( "_Config", (), {"torch_dtype": torch.bfloat16} @@ -117,8 +117,8 @@ def _run(pipe, latents, zero_noise=False): if zero_noise: zeros = torch.zeros(_LATENT_SHAPE, device=latents.device, dtype=torch.float32) with mock.patch(_RANDN_PATH, return_value=zeros): - return pipe._dmd_denoise(latents, embeds, gen) - return pipe._dmd_denoise(latents, embeds, gen) + return pipe._denoise(latents, embeds, gen) + return pipe._denoise(latents, embeds, gen) # --------------------------------------------------------------------------- @@ -134,7 +134,7 @@ def test_sigma_values(self): recorder = _RecordingTransformer() _run(_make_stub(recorder), torch.ones(_LATENT_SHAPE, device="cuda", dtype=torch.bfloat16)) - expected = [t / 1000.0 for t in FastWanPipeline.DMD_TIMESTEPS] + expected = [t / 1000.0 for t in WanDMDPipeline.DMD_TIMESTEPS] for i, (captured, exp) in enumerate(zip(recorder.captured_timesteps, expected)): assert torch.allclose(captured, torch.full_like(captured, exp)), ( f"Step {i}: expected sigma {exp}, got {captured[0, 0].item():.6f}" @@ -195,6 +195,6 @@ def _counting(*args, **kwargs): latents = torch.ones(_LATENT_SHAPE, device="cuda", dtype=torch.bfloat16) with mock.patch(_RANDN_PATH, side_effect=_counting): - pipe._dmd_denoise(latents, embeds, gen) + pipe._denoise(latents, embeds, gen) assert call_count[0] == 2, f"Expected 2 randn_tensor calls, got {call_count[0]}" diff --git a/tests/unittest/_torch/visual_gen/test_fastwan_pipeline.py b/tests/unittest/_torch/visual_gen/test_fastwan_pipeline.py index c63765caaa52..d76f20a943f8 100644 --- a/tests/unittest/_torch/visual_gen/test_fastwan_pipeline.py +++ b/tests/unittest/_torch/visual_gen/test_fastwan_pipeline.py @@ -12,14 +12,18 @@ # 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. -"""Pipeline-level tests for FastWanPipeline requiring a real checkpoint. +"""Pipeline-level tests for WanDMDPipeline. TestFastWanComponentAccuracy Verifies that the text encoder and VAE decoder load correctly and produce numerically stable output. Reference tensors were generated once from this pipeline and committed to golden/component_accuracy/. Future runs compare against them to catch weight-loading bugs, quantization changes, or - refactors that silently shift component outputs. + refactors that silently shift component outputs. Requires a real checkpoint. + +TestFastWanImageNotSupported + Verifies FastWan raises NotImplementedError on image input (text-to-video + only for now). No checkpoint required. Run: DIFFUSION_MODEL_PATH_FASTWAN=/path/to/checkpoint \\ @@ -38,8 +42,9 @@ import pytest import torch +from tensorrt_llm._torch.visual_gen.models.wan.pipeline_fastwan import WanDMDPipeline from tensorrt_llm._torch.visual_gen.pipeline_loader import PipelineLoader -from tensorrt_llm.visual_gen.args import TorchCompileConfig, VisualGenArgs +from tensorrt_llm.visual_gen.args import AttentionConfig, TorchCompileConfig, VisualGenArgs @pytest.fixture(autouse=True, scope="module") @@ -116,3 +121,78 @@ def test_vae_decoder_reference(self, fastwan_pipeline): f"(shape {output_cpu.shape})" ) + +class TestFastWanImageNotSupported: + @pytest.mark.skipif(not torch.cuda.is_available(), reason="nvtx_range decorator needs CUDA") + def test_image_raises_not_implemented(self): + pipe = object.__new__(WanDMDPipeline) + with pytest.raises(NotImplementedError): + pipe.forward(prompt="test", seed=0, image=object()) + + +@pytest.mark.skipif(not torch.cuda.is_available(), reason="CUDA required") +class TestFastWanForward: + """Run the full forward() pass and validate the output video shape.""" + + def test_single_prompt_backward_compat(self, fastwan_pipeline): + """Single prompt returns (B, T, H, W, C) with B=1.""" + result = fastwan_pipeline.forward( + prompt="A red fox walking through snow", + height=704, + width=1280, + num_frames=9, + seed=42, + ) + assert result.video.dim() == 5, f"Expected 5D (B,T,H,W,C), got {result.video.dim()}D" + B, _T, H, W, C = result.video.shape + assert B == 1 and H == 704 and W == 1280 and C == 3 + + def test_batch_prompt_shape(self, fastwan_pipeline): + """List of prompts returns (B, T, H, W, C) with B=2.""" + result = fastwan_pipeline.forward( + prompt=["A red fox walking through snow", "A cat on a roof"], + height=704, + width=1280, + num_frames=9, + seed=42, + ) + assert result.video.dim() == 5, f"Expected 5D (B,T,H,W,C), got {result.video.dim()}D" + B, _T, H, W, C = result.video.shape + assert B == 2 and H == 704 and W == 1280 and C == 3 + + +@pytest.mark.skipif(not torch.cuda.is_available(), reason="CUDA required") +class TestFastWanFP8: + """Confirm FP8 + TRTLLM attention runs end-to-end on the FastWan checkpoint. + + FastWan inherits FP8 support from WanPipeline.post_load_weights(), but that + method is only tested against the TI2V-5B checkpoint in CI. This test confirms + it also works with the FastWan distilled weights and the DMD denoising loop. + """ + + def test_fp8_trtllm(self): + if not os.path.exists(FASTWAN_PATH): + pytest.skip(f"Checkpoint not found: {FASTWAN_PATH}") + args = VisualGenArgs( + model=FASTWAN_PATH, + torch_compile_config=TorchCompileConfig(enable=False), + quant_config={"quant_algo": "FP8", "dynamic": True}, + attention_config=AttentionConfig(backend="TRTLLM"), + ) + pipeline = PipelineLoader(args).load(skip_warmup=True) + try: + with torch.no_grad(): + result = pipeline.forward( + prompt="A red fox walking through snow", + height=704, + width=1280, + num_frames=9, + seed=42, + ) + assert result.video.dim() == 5 + B, _T, H, W, C = result.video.shape + assert B == 1 and H == 704 and W == 1280 and C == 3 + finally: + del pipeline + gc.collect() + torch.cuda.empty_cache() diff --git a/tests/unittest/_torch/visual_gen/test_fastwan_registry.py b/tests/unittest/_torch/visual_gen/test_fastwan_registry.py deleted file mode 100644 index 12148a81347c..000000000000 --- a/tests/unittest/_torch/visual_gen/test_fastwan_registry.py +++ /dev/null @@ -1,78 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: Apache-2.0 -# -# 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. -"""Registry and defaults tests for FastWanPipeline. - -No GPU or checkpoint required. - -Run: - pytest tests/unittest/_torch/visual_gen/test_fastwan_registry.py -v -""" - -import os - -os.environ["TLLM_DISABLE_MPI"] = "1" - -import pytest -import torch - -from tensorrt_llm._torch.visual_gen.models.wan.defaults import get_fastwan_default_params -from tensorrt_llm._torch.visual_gen.models.wan.pipeline_fastwan import FastWanPipeline -from tensorrt_llm._torch.visual_gen.pipeline_registry import PIPELINE_REGISTRY - - -@pytest.fixture(autouse=True, scope="module") -def _cleanup_mpi_env(): - yield - os.environ.pop("TLLM_DISABLE_MPI", None) - - -FASTWAN_HF_ID = "FastVideo/FastWan2.2-TI2V-5B-FullAttn-Diffusers" -REGISTRY_KEY = "WanDMDPipeline" - - -class TestFastWanRegistration: - def test_registry_key_exists(self): - assert REGISTRY_KEY in PIPELINE_REGISTRY - - def test_registry_maps_to_fastwan_class(self): - assert PIPELINE_REGISTRY[REGISTRY_KEY].pipeline_cls is FastWanPipeline - - def test_hf_id_in_registry(self): - hf_ids = PIPELINE_REGISTRY[REGISTRY_KEY].hf_ids - assert FASTWAN_HF_ID in hf_ids - - -class TestFastWanDefaultParams: - def test_num_inference_steps_is_3(self): - assert get_fastwan_default_params()["num_inference_steps"] == 3 - - def test_guidance_scale_is_cfg_free(self): - assert get_fastwan_default_params()["guidance_scale"] == 1.0 - - def test_frame_rate_is_24(self): - assert get_fastwan_default_params()["frame_rate"] == 24.0 - - def test_canonical_resolution(self): - params = get_fastwan_default_params() - assert params["height"] == 704 - assert params["width"] == 1280 - - -class TestFastWanImageNotSupported: - @pytest.mark.skipif(not torch.cuda.is_available(), reason="nvtx_range decorator needs CUDA") - def test_image_raises_not_implemented(self): - pipe = object.__new__(FastWanPipeline) - with pytest.raises(NotImplementedError): - pipe.forward(prompt="test", seed=0, image=object()) diff --git a/tests/unittest/_torch/visual_gen/test_visual_gen_params.py b/tests/unittest/_torch/visual_gen/test_visual_gen_params.py index e69c81d21f1b..3650439ae3b9 100644 --- a/tests/unittest/_torch/visual_gen/test_visual_gen_params.py +++ b/tests/unittest/_torch/visual_gen/test_visual_gen_params.py @@ -224,6 +224,18 @@ def test_wan22_5b_defaults(self): assert d["num_frames"] == 121 assert d["frame_rate"] == 24.0 + def test_fastwan_defaults(self): + """FastWan 2.2 TI2V-5B (DMD distilled): wan22-5b defaults, 3-step, CFG-free.""" + from tensorrt_llm._torch.visual_gen.models.wan.pipeline_fastwan import WanDMDPipeline + + d = WanDMDPipeline.default_generation_params.fget(None) + assert d["height"] == 704 + assert d["width"] == 1280 + assert d["num_inference_steps"] == 3 + assert d["guidance_scale"] == 1.0 + assert d["num_frames"] == 121 + assert d["frame_rate"] == 24.0 + def test_flux_defaults(self): from tensorrt_llm._torch.visual_gen.models.flux.pipeline_flux import FluxPipeline @@ -518,6 +530,22 @@ def test_wan22_5b_default_params(self): assert params.frame_rate == 24.0 assert params.extra_params is None + def test_fastwan_default_params(self): + """FastWan 2.2 TI2V-5B (DMD distilled): 3-step, CFG-free, no extra params.""" + from tensorrt_llm._torch.visual_gen.models.wan.pipeline_fastwan import WanDMDPipeline + + vg = self._make_visual_gen( + WanDMDPipeline, _wan_mock(is_wan22_14b=False, is_wan22_5b=True, num_heads=24) + ) + params = vg.default_params + assert params.height == 704 + assert params.width == 1280 + assert params.num_inference_steps == 3 + assert params.guidance_scale == 1.0 + assert params.num_frames == 121 + assert params.frame_rate == 24.0 + assert params.extra_params is None + def test_wan21_default_params(self): """Wan 2.1 small-model returns 480p defaults with no extra params.""" from tensorrt_llm._torch.visual_gen.models.wan.pipeline_wan import WanPipeline From e3ea6403a747563790f019da503ddae6137cd1cf Mon Sep 17 00:00:00 2001 From: knwankwo Date: Wed, 15 Jul 2026 23:29:06 +0000 Subject: [PATCH 04/15] [None][fix] Remove redundant FastWan image-not-supported test and fix LPIPS golden source label - Remove TestFastWanImageNotSupported from test_fastwan_pipeline.py (no longer needed) - Update fastwan_lpips_golden_video.json source label to reflect FastVideo VideoGenerator Signed-off-by: knwankwo --- .../visual_gen_lpips/fastwan_lpips_golden_video.json | 2 +- .../unittest/_torch/visual_gen/test_fastwan_pipeline.py | 9 +-------- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/tests/integration/defs/examples/visual_gen/golden/visual_gen_lpips/fastwan_lpips_golden_video.json b/tests/integration/defs/examples/visual_gen/golden/visual_gen_lpips/fastwan_lpips_golden_video.json index 1903647669b4..a7749e7949d6 100644 --- a/tests/integration/defs/examples/visual_gen/golden/visual_gen_lpips/fastwan_lpips_golden_video.json +++ b/tests/integration/defs/examples/visual_gen/golden/visual_gen_lpips/fastwan_lpips_golden_video.json @@ -1,7 +1,7 @@ { "video": "fastwan_lpips_golden_video.mp4", "model": "FastVideo/FastWan2.2-TI2V-5B-FullAttn-Diffusers", - "source": "SGLang multimodal_gen (trusted reference)", + "source": "FastVideo VideoGenerator (trusted reference)", "prompt": "A red fox walking through snow", "negative_prompt": "", "height": 704, diff --git a/tests/unittest/_torch/visual_gen/test_fastwan_pipeline.py b/tests/unittest/_torch/visual_gen/test_fastwan_pipeline.py index d76f20a943f8..22fe1b7996ce 100644 --- a/tests/unittest/_torch/visual_gen/test_fastwan_pipeline.py +++ b/tests/unittest/_torch/visual_gen/test_fastwan_pipeline.py @@ -122,19 +122,12 @@ def test_vae_decoder_reference(self, fastwan_pipeline): ) -class TestFastWanImageNotSupported: - @pytest.mark.skipif(not torch.cuda.is_available(), reason="nvtx_range decorator needs CUDA") - def test_image_raises_not_implemented(self): - pipe = object.__new__(WanDMDPipeline) - with pytest.raises(NotImplementedError): - pipe.forward(prompt="test", seed=0, image=object()) - @pytest.mark.skipif(not torch.cuda.is_available(), reason="CUDA required") class TestFastWanForward: """Run the full forward() pass and validate the output video shape.""" - def test_single_prompt_backward_compat(self, fastwan_pipeline): + def test_single_prompt_shape(self, fastwan_pipeline): """Single prompt returns (B, T, H, W, C) with B=1.""" result = fastwan_pipeline.forward( prompt="A red fox walking through snow", From 6449d26faf5cc4dcb53cb4832b25fc4039b393e5 Mon Sep 17 00:00:00 2001 From: knwankwo Date: Wed, 15 Jul 2026 23:44:48 +0000 Subject: [PATCH 05/15] [None][fix] Remove stale docstring and unused import after TestFastWanImageNotSupported removal Signed-off-by: knwankwo --- tests/unittest/_torch/visual_gen/test_fastwan_pipeline.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tests/unittest/_torch/visual_gen/test_fastwan_pipeline.py b/tests/unittest/_torch/visual_gen/test_fastwan_pipeline.py index 22fe1b7996ce..4dd95274c461 100644 --- a/tests/unittest/_torch/visual_gen/test_fastwan_pipeline.py +++ b/tests/unittest/_torch/visual_gen/test_fastwan_pipeline.py @@ -21,10 +21,6 @@ against them to catch weight-loading bugs, quantization changes, or refactors that silently shift component outputs. Requires a real checkpoint. -TestFastWanImageNotSupported - Verifies FastWan raises NotImplementedError on image input (text-to-video - only for now). No checkpoint required. - Run: DIFFUSION_MODEL_PATH_FASTWAN=/path/to/checkpoint \\ pytest tests/unittest/_torch/visual_gen/test_fastwan_pipeline.py -v -s @@ -42,7 +38,6 @@ import pytest import torch -from tensorrt_llm._torch.visual_gen.models.wan.pipeline_fastwan import WanDMDPipeline from tensorrt_llm._torch.visual_gen.pipeline_loader import PipelineLoader from tensorrt_llm.visual_gen.args import AttentionConfig, TorchCompileConfig, VisualGenArgs From 39985a41e760c7797ebe990203c9ba664f57478a Mon Sep 17 00:00:00 2001 From: knwankwo Date: Thu, 16 Jul 2026 00:25:49 +0000 Subject: [PATCH 06/15] [None][fix] Collapse single-line raise ValueError to satisfy ruff-format Signed-off-by: knwankwo --- tensorrt_llm/_torch/visual_gen/models/wan/pipeline_fastwan.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tensorrt_llm/_torch/visual_gen/models/wan/pipeline_fastwan.py b/tensorrt_llm/_torch/visual_gen/models/wan/pipeline_fastwan.py index 705f69fc9eec..e036d0b0a063 100644 --- a/tensorrt_llm/_torch/visual_gen/models/wan/pipeline_fastwan.py +++ b/tensorrt_llm/_torch/visual_gen/models/wan/pipeline_fastwan.py @@ -95,9 +95,7 @@ def forward( self.validate_resolution(height, width, num_frames) if negative_prompt: - raise ValueError( - "FastWan is CFG-free and does not support negative prompts." - ) + raise ValueError("FastWan is CFG-free and does not support negative prompts.") prompt_embeds, _ = self._encode_prompt(prompt, "", max_sequence_length) if self._fixed_latent is not None: From 80aeed8b01c8e1ad06b2e047e5440db559c7f7da Mon Sep 17 00:00:00 2001 From: knwankwo Date: Thu, 16 Jul 2026 00:43:27 +0000 Subject: [PATCH 07/15] [None][fix] Apply ruff-format to pipeline_fastwan.py Signed-off-by: knwankwo --- .../_torch/visual_gen/models/wan/pipeline_fastwan.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tensorrt_llm/_torch/visual_gen/models/wan/pipeline_fastwan.py b/tensorrt_llm/_torch/visual_gen/models/wan/pipeline_fastwan.py index e036d0b0a063..bf29af6d7831 100644 --- a/tensorrt_llm/_torch/visual_gen/models/wan/pipeline_fastwan.py +++ b/tensorrt_llm/_torch/visual_gen/models/wan/pipeline_fastwan.py @@ -140,9 +140,7 @@ def _denoise(self, latents, prompt_embeds, generator): nw = latents.shape[4] // pw start = time.time() for i, t in enumerate(timesteps): - t_tensor = torch.full( - (latents.shape[0], nf * nh * nw), float(t), device=latents.device - ) + t_tensor = torch.full((latents.shape[0], nf * nh * nw), float(t), device=latents.device) pred_noise = self.transformer( hidden_states=latents, @@ -156,8 +154,10 @@ def _denoise(self, latents, prompt_embeds, generator): if i < num_steps - 1: sigma_next = timesteps[i + 1] / self.NUM_TRAIN_TIMESTEPS noise = randn_tensor( - latents.shape, generator=generator, - device=latents.device, dtype=self.dtype, + latents.shape, + generator=generator, + device=latents.device, + dtype=self.dtype, ) latents = (1.0 - sigma_next) * pred_video + sigma_next * noise else: From 9abbc7bdf2f3d8b5a62795a46cc8d5fa26ff8cd6 Mon Sep 17 00:00:00 2001 From: knwankwo Date: Thu, 16 Jul 2026 00:50:52 +0000 Subject: [PATCH 08/15] [None][fix] Apply ruff-format to fastwan test files Signed-off-by: knwankwo --- tests/unittest/_torch/visual_gen/test_fastwan_dmd_math.py | 8 +++----- tests/unittest/_torch/visual_gen/test_fastwan_pipeline.py | 1 - 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/tests/unittest/_torch/visual_gen/test_fastwan_dmd_math.py b/tests/unittest/_torch/visual_gen/test_fastwan_dmd_math.py index a703df68fb70..6f9d397a96d9 100644 --- a/tests/unittest/_torch/visual_gen/test_fastwan_dmd_math.py +++ b/tests/unittest/_torch/visual_gen/test_fastwan_dmd_math.py @@ -57,7 +57,7 @@ def _cleanup_mpi_env(): # So final output = (1-sigma_1)*(1-sigma_2)*initial = 0.243*0.478*initial ≈ 0.1162 _SIGMA_1 = WanDMDPipeline.DMD_TIMESTEPS[1] / WanDMDPipeline.NUM_TRAIN_TIMESTEPS # 0.757 _SIGMA_2 = WanDMDPipeline.DMD_TIMESTEPS[2] / WanDMDPipeline.NUM_TRAIN_TIMESTEPS # 0.522 -_ZERO_NOISE_EXPECTED_SCALE = (1.0 - _SIGMA_1) * (1.0 - _SIGMA_2) # ≈ 0.1162 +_ZERO_NOISE_EXPECTED_SCALE = (1.0 - _SIGMA_1) * (1.0 - _SIGMA_2) # ≈ 0.1162 _RANDN_PATH = "tensorrt_llm._torch.visual_gen.models.wan.pipeline_fastwan.randn_tensor" @@ -105,9 +105,7 @@ def _make_stub(transformer): """ pipe = object.__new__(WanDMDPipeline) pipe.__dict__["transformer"] = transformer - pipe.__dict__["pipeline_config"] = type( - "_Config", (), {"torch_dtype": torch.bfloat16} - )() + pipe.__dict__["pipeline_config"] = type("_Config", (), {"torch_dtype": torch.bfloat16})() return pipe @@ -158,7 +156,6 @@ def test_transformer_called_three_times(self): @pytest.mark.skipif(not torch.cuda.is_available(), reason="CUDA required") class TestDMDMath: - def test_output_dtype_is_bfloat16(self): output = _run( _make_stub(_RecordingTransformer()), @@ -181,6 +178,7 @@ def test_exact_output_with_zero_noise(self): def test_final_step_does_not_call_randn_tensor(self): """randn_tensor must be called for steps 0 and 1 only — never on the final step.""" from diffusers.utils.torch_utils import randn_tensor as _orig + call_count = [0] def _counting(*args, **kwargs): diff --git a/tests/unittest/_torch/visual_gen/test_fastwan_pipeline.py b/tests/unittest/_torch/visual_gen/test_fastwan_pipeline.py index 4dd95274c461..bbb3592258c9 100644 --- a/tests/unittest/_torch/visual_gen/test_fastwan_pipeline.py +++ b/tests/unittest/_torch/visual_gen/test_fastwan_pipeline.py @@ -117,7 +117,6 @@ def test_vae_decoder_reference(self, fastwan_pipeline): ) - @pytest.mark.skipif(not torch.cuda.is_available(), reason="CUDA required") class TestFastWanForward: """Run the full forward() pass and validate the output video shape.""" From 5faa880d382ec17ec93a37e3f05a3e39e519764c Mon Sep 17 00:00:00 2001 From: knwankwo Date: Fri, 17 Jul 2026 21:34:28 +0000 Subject: [PATCH 09/15] [None][fix] Address PR review: type hints, docstrings, path fixes, and param warnings - pipeline_fastwan.py: replace typing.Union/List/Optional with modern | syntax, add return type annotations to forward() and _denoise(), add docstrings to default_generation_params and forward(), replace hard ValueError for unsupported params (num_inference_steps, guidance_scale, guidance_scale_2, boundary_ratio) with logger.warning to match WanPipeline behaviour for the 5B model - fastwan_lpips_golden_video.json: remove FastVideo/ org prefix from model path - test_visual_gen.py: remove FastVideo/ org prefix from _lpips_model_path call - test_fastwan_dmd_math.py: use torch.zeros_like(latents) instead of explicit shape Signed-off-by: knwankwo --- .../visual_gen/models/wan/pipeline_fastwan.py | 47 ++++++++++++++----- .../fastwan_lpips_golden_video.json | 2 +- .../examples/visual_gen/test_visual_gen.py | 2 +- .../visual_gen/test_fastwan_dmd_math.py | 2 +- 4 files changed, 37 insertions(+), 16 deletions(-) diff --git a/tensorrt_llm/_torch/visual_gen/models/wan/pipeline_fastwan.py b/tensorrt_llm/_torch/visual_gen/models/wan/pipeline_fastwan.py index bf29af6d7831..14c1d1ac293b 100644 --- a/tensorrt_llm/_torch/visual_gen/models/wan/pipeline_fastwan.py +++ b/tensorrt_llm/_torch/visual_gen/models/wan/pipeline_fastwan.py @@ -20,7 +20,6 @@ """ import time -from typing import List, Optional, Union import PIL.Image import torch @@ -57,32 +56,54 @@ class WanDMDPipeline(WanPipeline): @property def default_generation_params(self): + """Return FastWan-specific default generation parameters (steps, guidance, frame rate).""" return get_fastwan_default_params() @nvtx_range("WanDMDPipeline.forward") @torch.no_grad() def forward( self, - prompt: Union[str, List[str]], + prompt: str | list[str], seed: int, - negative_prompt: Optional[str] = None, + negative_prompt: str | None = None, height: int = 704, width: int = 1280, num_frames: int = 121, - num_inference_steps: Optional[int] = None, - guidance_scale: Optional[float] = None, - guidance_scale_2: Optional[float] = None, - boundary_ratio: Optional[float] = None, + num_inference_steps: int | None = None, + guidance_scale: float | None = None, + guidance_scale_2: float | None = None, + boundary_ratio: float | None = None, max_sequence_length: int = 512, - image: Optional[Union[PIL.Image.Image, torch.Tensor, str]] = None, - ): - # FastWan is text-to-video only for now; CFG-free, so guidance_scale and - # the Wan-2.2 two-stage knobs (guidance_scale_2/boundary_ratio) are - # accepted for infer()/base-class compatibility but unused. + image: PIL.Image.Image | torch.Tensor | str | None = None, + ) -> PipelineOutput: + """Generate a video from a text prompt using the 3-step DMD sampling loop. + + CFG-free: one transformer forward pass per step, no negative prompt support. + Unsupported parameters (num_inference_steps, guidance_scale, guidance_scale_2, + boundary_ratio) are accepted for base-class compatibility but logged as warnings + and ignored. + """ if image is not None: raise NotImplementedError( "FastWan currently supports text-to-video only (no image conditioning)." ) + if num_inference_steps not in (None, len(self.DMD_TIMESTEPS)): + logger.warning( + f"FastWan always uses {len(self.DMD_TIMESTEPS)} DMD steps; " + f"ignoring num_inference_steps={num_inference_steps}." + ) + if guidance_scale not in (None, 1.0): + logger.warning( + f"FastWan is CFG-free; ignoring guidance_scale={guidance_scale}." + ) + if guidance_scale_2 is not None: + logger.warning( + f"FastWan does not support guidance_scale_2; ignoring guidance_scale_2={guidance_scale_2}." + ) + if boundary_ratio is not None: + logger.warning( + f"FastWan does not support boundary_ratio; ignoring boundary_ratio={boundary_ratio}." + ) pipeline_start = time.time() timer = CudaPhaseTimer() @@ -119,7 +140,7 @@ def forward( return timer.fill(PipelineOutput(video=video, frame_rate=frame_rate)) @nvtx_range("WanDMDPipeline._denoise", color="blue") - def _denoise(self, latents, prompt_embeds, generator): + def _denoise(self, latents: torch.Tensor, prompt_embeds: torch.Tensor, generator: torch.Generator) -> torch.Tensor: """3-step DMD loop: predict x0, then re-noise with fresh noise. The per-step sigma reduces to ``sigma = t / NUM_TRAIN_TIMESTEPS`` because diff --git a/tests/integration/defs/examples/visual_gen/golden/visual_gen_lpips/fastwan_lpips_golden_video.json b/tests/integration/defs/examples/visual_gen/golden/visual_gen_lpips/fastwan_lpips_golden_video.json index a7749e7949d6..25bef78765f5 100644 --- a/tests/integration/defs/examples/visual_gen/golden/visual_gen_lpips/fastwan_lpips_golden_video.json +++ b/tests/integration/defs/examples/visual_gen/golden/visual_gen_lpips/fastwan_lpips_golden_video.json @@ -1,6 +1,6 @@ { "video": "fastwan_lpips_golden_video.mp4", - "model": "FastVideo/FastWan2.2-TI2V-5B-FullAttn-Diffusers", + "model": "FastWan2.2-TI2V-5B-FullAttn-Diffusers", "source": "FastVideo VideoGenerator (trusted reference)", "prompt": "A red fox walking through snow", "negative_prompt": "", diff --git a/tests/integration/defs/examples/visual_gen/test_visual_gen.py b/tests/integration/defs/examples/visual_gen/test_visual_gen.py index fc2dc4b6eb5c..b2e20f5525aa 100644 --- a/tests/integration/defs/examples/visual_gen/test_visual_gen.py +++ b/tests/integration/defs/examples/visual_gen/test_visual_gen.py @@ -1152,7 +1152,7 @@ def test_fastwan_lpips_against_golden(tmp_path): tmp_path, "fastwan_lpips_golden_video.mp4", "FastWan LPIPS golden video" ) _generate_wan_lpips_video( - _lpips_model_path("FastVideo/FastWan2.2-TI2V-5B-FullAttn-Diffusers"), + _lpips_model_path("FastWan2.2-TI2V-5B-FullAttn-Diffusers"), generated_path, FASTWAN_LPIPS_PROMPT, FASTWAN_LPIPS_NEGATIVE_PROMPT, diff --git a/tests/unittest/_torch/visual_gen/test_fastwan_dmd_math.py b/tests/unittest/_torch/visual_gen/test_fastwan_dmd_math.py index 6f9d397a96d9..ba49c140becc 100644 --- a/tests/unittest/_torch/visual_gen/test_fastwan_dmd_math.py +++ b/tests/unittest/_torch/visual_gen/test_fastwan_dmd_math.py @@ -113,7 +113,7 @@ def _run(pipe, latents, zero_noise=False): gen = torch.Generator(device=latents.device).manual_seed(42) embeds = torch.zeros(1, 8, 4096, device=latents.device, dtype=torch.bfloat16) if zero_noise: - zeros = torch.zeros(_LATENT_SHAPE, device=latents.device, dtype=torch.float32) + zeros = torch.zeros_like(latents) with mock.patch(_RANDN_PATH, return_value=zeros): return pipe._denoise(latents, embeds, gen) return pipe._denoise(latents, embeds, gen) From 705c86c2f2807b0837da1711b12dbeb0fbfb8b97 Mon Sep 17 00:00:00 2001 From: knwankwo Date: Sat, 18 Jul 2026 02:04:55 +0000 Subject: [PATCH 10/15] [None][fix] Remove component accuracy .pt files and apply ruff-format fixes - Remove TestFastWanComponentAccuracy and golden/component_accuracy/ .pt reference tensors; E2E LPIPS test covers accuracy instead - Apply ruff-format fixes to pipeline_fastwan.py (logger.warning line collapsed, _denoise signature split across lines) Signed-off-by: knwankwo --- .../visual_gen/models/wan/pipeline_fastwan.py | 8 +-- .../text_encoder_reference.pt | Bin 4196114 -> 0 bytes .../component_accuracy/vae_input_latent.pt | Bin 3176 -> 0 bytes .../component_accuracy/vae_reference.pt | Bin 13907 -> 0 bytes .../visual_gen/test_fastwan_pipeline.py | 49 ------------------ 5 files changed, 4 insertions(+), 53 deletions(-) delete mode 100644 tests/unittest/_torch/visual_gen/golden/component_accuracy/text_encoder_reference.pt delete mode 100644 tests/unittest/_torch/visual_gen/golden/component_accuracy/vae_input_latent.pt delete mode 100644 tests/unittest/_torch/visual_gen/golden/component_accuracy/vae_reference.pt diff --git a/tensorrt_llm/_torch/visual_gen/models/wan/pipeline_fastwan.py b/tensorrt_llm/_torch/visual_gen/models/wan/pipeline_fastwan.py index 14c1d1ac293b..7ffa42478662 100644 --- a/tensorrt_llm/_torch/visual_gen/models/wan/pipeline_fastwan.py +++ b/tensorrt_llm/_torch/visual_gen/models/wan/pipeline_fastwan.py @@ -93,9 +93,7 @@ def forward( f"ignoring num_inference_steps={num_inference_steps}." ) if guidance_scale not in (None, 1.0): - logger.warning( - f"FastWan is CFG-free; ignoring guidance_scale={guidance_scale}." - ) + logger.warning(f"FastWan is CFG-free; ignoring guidance_scale={guidance_scale}.") if guidance_scale_2 is not None: logger.warning( f"FastWan does not support guidance_scale_2; ignoring guidance_scale_2={guidance_scale_2}." @@ -140,7 +138,9 @@ def forward( return timer.fill(PipelineOutput(video=video, frame_rate=frame_rate)) @nvtx_range("WanDMDPipeline._denoise", color="blue") - def _denoise(self, latents: torch.Tensor, prompt_embeds: torch.Tensor, generator: torch.Generator) -> torch.Tensor: + def _denoise( + self, latents: torch.Tensor, prompt_embeds: torch.Tensor, generator: torch.Generator + ) -> torch.Tensor: """3-step DMD loop: predict x0, then re-noise with fresh noise. The per-step sigma reduces to ``sigma = t / NUM_TRAIN_TIMESTEPS`` because diff --git a/tests/unittest/_torch/visual_gen/golden/component_accuracy/text_encoder_reference.pt b/tests/unittest/_torch/visual_gen/golden/component_accuracy/text_encoder_reference.pt deleted file mode 100644 index c2bcd24dcbc3218c170098e458b095b5cf8b6038..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4196114 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≀op z*xAwiVvKpm{%cxNQdHL2Ya5g_i8LLGzBhDrCiT5730>F4l(jk34sww`$Yne*_l%(! z9W{N-dx(v%2h+V>^;z&|WRR*um&`(&S`|ox$w&RRp=3I6IgAM0T(lR%xww+$>N7fR3K6 zU^3ZD-q>g!yAo#t%khNkqsi=i!kPzFDU)4>II5bx=xsJ*Ocs?&wXu~<0gI|zZz5eY ziz3&6TPIW_N-#IPlX&vq=_>rL8J==3WmlOaduchax0V_SUC@^%BLYtdV(lm@VF!RW z{(*`yw1iSp-bj6%Wj&M?GdH3tklBN1<2x1UGH}A6Kr>FkbtMG4x4BknH2Q!N`mQbcwa=Dni`AH%(1W)!)k<8E&SVIEqz@&eo0VIWs8wcBI|H)V|Gpzmm9 z&?xvXs6(}ByLlVU4gH#koqTWGdH7UP_I53vxsMvI9(s$Yq>57qyn%?irg=|mq<2m1 zACZyBi-_v4QklZQh8>8VuLp&p0^;lja~giJkh;R=`l>>dnp&G8CY5ay)TJa<*h_M$ zHIy5kbJ)90vp5j;r^{UTy-TVu#BHF|CB!YGJXMuJuS#+mB448J<`L?yV#BI@Pb1`f_Gi?DGG>3DmQ$#ps4VNuY;Nu5$}`j^j^W038Y(X;=szU4{sjFn zBXkKrtA82OO*}s7&gyCQd;Q9O0DJ0;QyhA?7qy#q=tI<&g}d`zo(D!&#d{2@E|`%C*LIA zh&snC@`y{I2B{jlQNBmlNM26iCslWR&7nn&1ga{t`3e42nvBZ2cTtmcMq2Sc)KzBT zuIMQo>F(eb&S9v^7^M$ze!mlbQp9dSkHgofkUfa1nv-@IDixROIjCkEDcfb8{K`Hi z-Zn+e=m(M+m6_=4;NflsBh%?S70*rO6G=c#%wd-i)$Bb`;WtmNpw`BspS-6lz|&L- zRQP$ih5y7(mlUW(?WecOc(3;xa&C|mLrW& zee_z?YP~Cu^k42BeyyhS8dTDalcWlvf8Ant5_4(hquZ<gYPuJ=nRYj7n~G!VZe@Re zbgJ1XmXq^4=tZi7>Q9!tuA$#7oGwXo5z5Iu>~?wgv6M$$SprW$zgu3$j4K(;)9oCE zyN)sC;6qHmdx*-q>i%A=$8!AMT1lEO7l(dq+)b>%<%`(mL??KwA^eVf!xOlu6ys!4 z0u`F~j9SX=n$bc54a`M3?I@T^&6y%$2#8^pi+9QR2`) zQAqnui8Ai6c3da zx=c6%mYOo$D(^`wR)0F`dFSIjcEBPF_?X6Pj@av*bTceEZ(JQzr&hq9XSn>Z{ipOk zFV#i#W<1RSSY&c^FBCy9$U=_tO^4tKGkvYP%oG09bJ#B=V^z7lU@(sFks&EHBC-pROTiGkkbTM>ltwLu) zyz@~-8e@N#5pr4K)*p26RYYeRz8&@ALtPK{8J%KW+uvfJ^HhsFnmHw}mtMvMS5P6Y zI5)a6$8kNkm@d1d}^TJE-%!fEs|wwF?#$Ss(G;Qlllf{;5n$*AHmoM`C2!Xa=?Uuub>*PCI9N4 zx{j#ee1tmV7N{Zp8LO}Z9Vnm35>{@eYNH?UkM0f^ali3duad2dYT8n&iJW#X)gxEm zZQ~6*R#y)1z#rbg+FP*>r-frQ0eeGydsj^NI?P$!X6cLC`j~LGyTb93JiLgyJCnaZyJo}!jCl}OO)Th<)PUzp&J#-mVLAQ;P8G0S+w(qHuu7hlMUH!#ihU}

(C^zK{v}h&av{wvn&G-0~0=i&eR*OXjzf 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%0Dq=`-H;7;;fZ>~~2D(rHwLljM}~U@afY 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

a4#*9&LEi(l>U)jV+6nw+l?9vRl;|yv% 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 z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZ;Q!mDW1c3W01n`XU?EPf4ua9dXd=+k9#D<3VPNUfn3x!srpiGY zp@rk3Xxxl`3_gHyaPw0*V2qQSE>3<0-xW|=J&lvg@0yq9-MjnWKfm_~5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkL{KMAy&lT+`W-8~ycjnJSGwVLA-Q8YF6Yn|z+7G=p^ z)=qj4`fEwrPLuT{4U=U4QIhU<`@Pkba&+$>uj-k+!NLBYt}WK8<%Pv^99L^`rM6J1hWS!0 zuGg!1%l(TVzFY|n^U-RKQ7UV>|7dJnj zD}}gxTo{VI9llmj_5PDA>8Ifgji#MEiRXvXJ{G49w!S`rd{ z>`>PG;;i2v$yT#ex^@&XJ^nLn^61|2|MK8;MbX|wW3Uq58!Wvk9nQm^g)?|MXOAYs JFMs~<+3ybU;WGdL diff --git a/tests/unittest/_torch/visual_gen/golden/component_accuracy/vae_input_latent.pt b/tests/unittest/_torch/visual_gen/golden/component_accuracy/vae_input_latent.pt deleted file mode 100644 index 0fcda478d0fb5c38f1f38fe184acf3f4ab0ed228..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3176 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 diff --git a/tests/unittest/_torch/visual_gen/test_fastwan_pipeline.py b/tests/unittest/_torch/visual_gen/test_fastwan_pipeline.py index bbb3592258c9..1572c637c3e5 100644 --- a/tests/unittest/_torch/visual_gen/test_fastwan_pipeline.py +++ b/tests/unittest/_torch/visual_gen/test_fastwan_pipeline.py @@ -14,13 +14,6 @@ # limitations under the License. """Pipeline-level tests for WanDMDPipeline. -TestFastWanComponentAccuracy - Verifies that the text encoder and VAE decoder load correctly and produce - numerically stable output. Reference tensors were generated once from this - pipeline and committed to golden/component_accuracy/. Future runs compare - against them to catch weight-loading bugs, quantization changes, or - refactors that silently shift component outputs. Requires a real checkpoint. - Run: DIFFUSION_MODEL_PATH_FASTWAN=/path/to/checkpoint \\ pytest tests/unittest/_torch/visual_gen/test_fastwan_pipeline.py -v -s @@ -31,7 +24,6 @@ import gc import os -from pathlib import Path os.environ["TLLM_DISABLE_MPI"] = "1" @@ -60,11 +52,6 @@ def _checkpoint_path() -> str: FASTWAN_PATH = _checkpoint_path() -GOLDEN_DIR = Path(__file__).parent / "golden" / "component_accuracy" - -# Prompt used when generating the text encoder reference tensor. -_COMPONENT_PROMPT = "A cat sitting on a sunny windowsill watching birds outside." - @pytest.fixture(scope="module") def fastwan_pipeline(): @@ -81,42 +68,6 @@ def fastwan_pipeline(): torch.cuda.empty_cache() -@pytest.mark.skipif(not torch.cuda.is_available(), reason="CUDA required") -class TestFastWanComponentAccuracy: - """Verify text encoder and VAE decoder produce numerically stable output. - - Each test loads a reference tensor from golden/component_accuracy/, runs the - component on a fixed input, and asserts torch.allclose against the reference. - This catches weight-loading bugs and silent numerical regressions without - running the full pipeline. - """ - - def test_text_encoder_reference(self, fastwan_pipeline): - ref = torch.load(GOLDEN_DIR / "text_encoder_reference.pt", weights_only=True) - with torch.no_grad(): - embeds, _ = fastwan_pipeline._encode_prompt([_COMPONENT_PROMPT], "", 512) - embeds_cpu = embeds.cpu().float() - ref_f = ref.float() - assert torch.allclose(embeds_cpu, ref_f, atol=1e-3), ( - f"Text encoder output diverged from reference. " - f"Max diff: {(embeds_cpu - ref_f).abs().max():.6f} " - f"(shape {embeds_cpu.shape}, dtype {embeds.dtype})" - ) - - def test_vae_decoder_reference(self, fastwan_pipeline): - latent = torch.load(GOLDEN_DIR / "vae_input_latent.pt", weights_only=True) - ref = torch.load(GOLDEN_DIR / "vae_reference.pt", weights_only=True) - with torch.no_grad(): - output = fastwan_pipeline._decode_latents(latent.to(fastwan_pipeline.device)) - output_cpu = output.cpu().float() - ref_f = ref.float() - assert torch.allclose(output_cpu, ref_f, atol=1.0), ( - f"VAE decoder output diverged from reference. " - f"Max diff: {(output_cpu - ref_f).abs().max():.1f} pixels " - f"(shape {output_cpu.shape})" - ) - - @pytest.mark.skipif(not torch.cuda.is_available(), reason="CUDA required") class TestFastWanForward: """Run the full forward() pass and validate the output video shape.""" From 503dde57df0ffe20226d6f9fe6ef49b5cfc0b958 Mon Sep 17 00:00:00 2001 From: KAMBILI NWANKWO <67324523+Kambili@users.noreply.github.com> Date: Mon, 20 Jul 2026 16:24:40 -0700 Subject: [PATCH 11/15] Update visual generation models and feature matrix Added FastWan 2.2 model to the visual generation documentation and updated the feature matrix accordingly. Signed-off-by: KAMBILI NWANKWO <67324523+Kambili@users.noreply.github.com> --- docs/source/models/visual-generation.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/source/models/visual-generation.md b/docs/source/models/visual-generation.md index d1e376b9a13e..602e70ef3aa7 100644 --- a/docs/source/models/visual-generation.md +++ b/docs/source/models/visual-generation.md @@ -39,6 +39,7 @@ TensorRT-LLM **VisualGen** provides a unified inference stack for diffusion mode | `Qwen/Qwen-Image-2512` | Text-to-Image | | `nvidia/Cosmos3-Nano` | Text-to-Image, Text-to-Video, Image-to-Video | | `nvidia/Cosmos3-Super` | Text-to-Image, Text-to-Video, Image-to-Video | +| `FastVideo/FastWan2.2-TI2V-5B-FullAttn-Diffusers` | Text-to-Video | Models are auto-detected from the checkpoint directory. Diffusers-format models are detected via `model_index.json`; LTX-2 monolithic safetensors checkpoints are detected via embedded metadata. The `AutoPipeline` registry selects the appropriate pipeline class automatically. @@ -51,6 +52,7 @@ Models are auto-detected from the checkpoint directory. Diffusers-format models | **Wan 2.1** | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | | **Wan 2.1 VSA** [^2] | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | | **Wan 2.2** | Yes | Yes | Yes [^3] | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | +| **FastWan 2.2** [^6] | Yes | Yes | No | No | No [^6] | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | | **LTX-2** | Yes | Yes | Yes [^4] | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | No | No | | **Qwen-Image** [^5] | Yes | Yes | No | No | No | Yes | No | Yes | Yes | Yes | Yes | Yes | No | No | | **Cosmos3** | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | No | @@ -65,6 +67,8 @@ Models are auto-detected from the checkpoint directory. Diffusers-format models [^5]: Qwen-Image ships a native BF16 implementation with per-module numerical parity against `diffusers.QwenImagePipeline` (cosine similarity >= 0.999 on the full 20B transformer) and supports `trtllm-serve` / `/v1/images/generations`. VisualGen supports FP8 blockwise and NVFP4 dynamic quantization from BF16 checkpoints, as well as direct loading of statically quantized FP8 and NVFP4 ModelOpt checkpoints. +[^6]: `FastVideo/FastWan2.2-TI2V-5B-FullAttn-Diffusers` — a distilled version of Wan2.2-TI2V-5B. Its transformer, VAE, and text encoder are identical to Wan2.2-5B; only the sampling loop changes: 3 denoising steps with fixed timesteps, no CFG, and a distribution-matching-distillation (DMD) noise update. It runs through the `WanDMDPipeline` and currently supports text-to-video only. Because there is no CFG path, CFG parallelism does not apply; and with only 3 steps, step caching (TeaCache / Cache-DiT) gives no benefit. VSA is not enabled in this full-attention checkpoint. + ## Quick Start Here is a simple example to generate a video with Wan 2.1: From e4929b517c87182f7ea0916afcbc1fc31e256ce5 Mon Sep 17 00:00:00 2001 From: KAMBILI NWANKWO <67324523+Kambili@users.noreply.github.com> Date: Mon, 20 Jul 2026 18:52:26 -0700 Subject: [PATCH 12/15] Update FastWan2.2-TI2V-5B description Simplified the description of FastVideo/FastWan2.2-TI2V-5B. Signed-off-by: KAMBILI NWANKWO <67324523+Kambili@users.noreply.github.com> --- docs/source/models/visual-generation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/models/visual-generation.md b/docs/source/models/visual-generation.md index 602e70ef3aa7..4462cf6983d7 100644 --- a/docs/source/models/visual-generation.md +++ b/docs/source/models/visual-generation.md @@ -67,7 +67,7 @@ Models are auto-detected from the checkpoint directory. Diffusers-format models [^5]: Qwen-Image ships a native BF16 implementation with per-module numerical parity against `diffusers.QwenImagePipeline` (cosine similarity >= 0.999 on the full 20B transformer) and supports `trtllm-serve` / `/v1/images/generations`. VisualGen supports FP8 blockwise and NVFP4 dynamic quantization from BF16 checkpoints, as well as direct loading of statically quantized FP8 and NVFP4 ModelOpt checkpoints. -[^6]: `FastVideo/FastWan2.2-TI2V-5B-FullAttn-Diffusers` — a distilled version of Wan2.2-TI2V-5B. Its transformer, VAE, and text encoder are identical to Wan2.2-5B; only the sampling loop changes: 3 denoising steps with fixed timesteps, no CFG, and a distribution-matching-distillation (DMD) noise update. It runs through the `WanDMDPipeline` and currently supports text-to-video only. Because there is no CFG path, CFG parallelism does not apply; and with only 3 steps, step caching (TeaCache / Cache-DiT) gives no benefit. VSA is not enabled in this full-attention checkpoint. +[^6]: `FastVideo/FastWan2.2-TI2V-5B-FullAttn-Diffusers` — a distilled version of Wan2.2-TI2V-5B with 3 denoising steps. CFG parallelism, TeaCache, and Cache-DiT are not applicable. ## Quick Start From 063b7b9ca037405c9bb7faeb2493a46f8a0bf9a6 Mon Sep 17 00:00:00 2001 From: KAMBILI NWANKWO <67324523+Kambili@users.noreply.github.com> Date: Wed, 22 Jul 2026 02:50:45 -0700 Subject: [PATCH 13/15] Update docs/source/models/visual-generation.md Co-authored-by: Zhenhua Wang <4936589+zhenhuaw-me@users.noreply.github.com> Signed-off-by: KAMBILI NWANKWO <67324523+Kambili@users.noreply.github.com> --- docs/source/models/visual-generation.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/source/models/visual-generation.md b/docs/source/models/visual-generation.md index 4462cf6983d7..70b3f911720b 100644 --- a/docs/source/models/visual-generation.md +++ b/docs/source/models/visual-generation.md @@ -67,7 +67,6 @@ Models are auto-detected from the checkpoint directory. Diffusers-format models [^5]: Qwen-Image ships a native BF16 implementation with per-module numerical parity against `diffusers.QwenImagePipeline` (cosine similarity >= 0.999 on the full 20B transformer) and supports `trtllm-serve` / `/v1/images/generations`. VisualGen supports FP8 blockwise and NVFP4 dynamic quantization from BF16 checkpoints, as well as direct loading of statically quantized FP8 and NVFP4 ModelOpt checkpoints. -[^6]: `FastVideo/FastWan2.2-TI2V-5B-FullAttn-Diffusers` — a distilled version of Wan2.2-TI2V-5B with 3 denoising steps. CFG parallelism, TeaCache, and Cache-DiT are not applicable. ## Quick Start From 4fdfdf476248eef84fd5680a1b0591cc5f4edd09 Mon Sep 17 00:00:00 2001 From: KAMBILI NWANKWO <67324523+Kambili@users.noreply.github.com> Date: Wed, 22 Jul 2026 02:51:09 -0700 Subject: [PATCH 14/15] Update docs/source/models/visual-generation.md Co-authored-by: Zhenhua Wang <4936589+zhenhuaw-me@users.noreply.github.com> Signed-off-by: KAMBILI NWANKWO <67324523+Kambili@users.noreply.github.com> --- docs/source/models/visual-generation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/models/visual-generation.md b/docs/source/models/visual-generation.md index 70b3f911720b..be76aaf29b28 100644 --- a/docs/source/models/visual-generation.md +++ b/docs/source/models/visual-generation.md @@ -52,7 +52,7 @@ Models are auto-detected from the checkpoint directory. Diffusers-format models | **Wan 2.1** | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | | **Wan 2.1 VSA** [^2] | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | | **Wan 2.2** | Yes | Yes | Yes [^3] | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | -| **FastWan 2.2** [^6] | Yes | Yes | No | No | No [^6] | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | +| **FastWan 2.2** | Yes | Yes | No | No | No [^6] | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | | **LTX-2** | Yes | Yes | Yes [^4] | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | No | No | | **Qwen-Image** [^5] | Yes | Yes | No | No | No | Yes | No | Yes | Yes | Yes | Yes | Yes | No | No | | **Cosmos3** | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | No | From b5c6e4f8f20cad3123a6f887436f92b6a1bd951f Mon Sep 17 00:00:00 2001 From: KAMBILI NWANKWO <67324523+Kambili@users.noreply.github.com> Date: Fri, 24 Jul 2026 12:17:21 -0700 Subject: [PATCH 15/15] Fix formatting in visual-generation.md table Signed-off-by: KAMBILI NWANKWO <67324523+Kambili@users.noreply.github.com> --- docs/source/models/visual-generation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/models/visual-generation.md b/docs/source/models/visual-generation.md index be76aaf29b28..40d26bd6c06f 100644 --- a/docs/source/models/visual-generation.md +++ b/docs/source/models/visual-generation.md @@ -52,7 +52,7 @@ Models are auto-detected from the checkpoint directory. Diffusers-format models | **Wan 2.1** | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | | **Wan 2.1 VSA** [^2] | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | | **Wan 2.2** | Yes | Yes | Yes [^3] | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | -| **FastWan 2.2** | Yes | Yes | No | No | No [^6] | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | +| **FastWan 2.2** | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | | **LTX-2** | Yes | Yes | Yes [^4] | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | No | No | | **Qwen-Image** [^5] | Yes | Yes | No | No | No | Yes | No | Yes | Yes | Yes | Yes | Yes | No | No | | **Cosmos3** | Yes | Yes | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | Yes | No |