diff --git a/THIRD-PARTY-NOTICES b/THIRD-PARTY-NOTICES index 21c389ba9..43e0fe1db 100644 --- a/THIRD-PARTY-NOTICES +++ b/THIRD-PARTY-NOTICES @@ -60,6 +60,11 @@ opencv-python-headless Apache-2.0 https://github.com/opencv/opencv-python grpcio, grpcio-tools Apache-2.0 https://github.com/grpc/grpc shapely BSD-3-Clause https://github.com/shapely/shapely ludus-renderer Apache-2.0 (NVIDIA, internal distribution) +cmake BSD-3-Clause https://github.com/Kitware/CMake +NVIDIA PhysX 5.9.0 BSD-3-Clause https://github.com/NVIDIA-Omniverse/PhysX + ``ludus-renderer`` downloads the pinned PhysX source archive at first use, + verifies its SHA-256, and builds it into a platform-local cache. The source + and resulting native module are not redistributed in this repository. Files in integrations/omnidreams/omnidreams/conditioning/world_scenario/ diff --git a/docs/source/models/omnidreams.rst b/docs/source/models/omnidreams.rst index 60db7e64f..3ffbfc7ee 100644 --- a/docs/source/models/omnidreams.rst +++ b/docs/source/models/omnidreams.rst @@ -185,6 +185,20 @@ Run the demo and stream to your browser: Then open ``http://:8080/`` in any browser on the same network and pick a scene from the picker in the bottom-right. +Collision physics, the vehicle speed limit, and the collision visual effect are +disabled by default. Add ``--game-mode`` to enable the speed limit and +collisions with scene actors and static map geometry, along with the collision +visual flare: + +.. code-block:: bash + + uv run --package flashdreams-omnidreams interactive-drive \ + --stream-mjpeg :8080 \ + --game-mode + +Combine ``--game-mode`` with ``--disable-visual-flare`` to retain collision +physics without the full-screen collision effect. + .. note:: **The first launch is slow.** The first time you start the demo, the world diff --git a/integrations/omnidreams/README.md b/integrations/omnidreams/README.md index 47bc78f27..9fa57f14d 100644 --- a/integrations/omnidreams/README.md +++ b/integrations/omnidreams/README.md @@ -140,7 +140,7 @@ uv run --package flashdreams-omnidreams python integrations/omnidreams/omnidream uv run --package flashdreams-omnidreams omnidreams-prepare --perf # Run demo uv run --package flashdreams-omnidreams interactive-drive \ - --manifest example_world_model_perf.yaml + --manifest example_world_model_perf.yaml --auto-start --game-mode # add `--stream-mjpeg :8080` to stream to your browser ``` diff --git a/integrations/omnidreams/ludus-renderer/README.md b/integrations/omnidreams/ludus-renderer/README.md index 2775df410..52cbcf4b6 100644 --- a/integrations/omnidreams/ludus-renderer/README.md +++ b/integrations/omnidreams/ludus-renderer/README.md @@ -1,22 +1,20 @@ # Ludus Renderer -GPU-native F-theta renderer for autonomous vehicle simulation, with two -interchangeable backends: - -- **CUDA software rasterizer** (`LudusCudaTimestampedContext`): always - available, no graphics driver required, built on the HPG 2011 - CudaRaster triangle pipeline. -- **Vulkan mesh-shader backend** (`LudusTimestampedContext`): opt-in, - uses `VK_EXT_mesh_shader` for hardware-accelerated procedural geometry - with CUDA-Vulkan external-memory interop. +GPU-native F-theta renderer and PhysX-first object graph for autonomous +vehicle simulation. Rendering is CUDA-only and is built on the HPG 2011 +CudaRaster triangle pipeline; the former Vulkan backend has been removed. ## Features - **F-theta Camera Model**: Native support for fisheye lens distortion using polynomial projection -- **Two rendering backends**: CUDA software rasterizer or Vulkan mesh shaders +- **One CUDA rendering path**: no graphics API interop or duplicate backend +- **PhysX object graph**: generic rigid bodies and invisible map barriers; + applications own semantic vehicle design and driving policy +- **Mutable simulation buffers**: actor add/update/remove operations preserve one + native scene and one fixed-capacity state table - **Timestamped Rendering**: Efficient temporal queries for simulation playback - **Adaptive Tessellation**: Automatic subdivision based on distortion error -- **MSAA**: 4x antialiasing (2x supersampling on CUDA, hardware MSAA on Vulkan) +- **MSAA**: configurable CUDA supersampling - **Mirror Augmentation**: Extend scenes by tiling reflected copies for longer driving sequences - **GPU Spatial Culling**: Per-element AABB/sphere culling for large scenes @@ -32,14 +30,9 @@ interchangeable backends: - NVIDIA GPU (Turing or later) - CUDA 11+ - Python 3.10+ +- A C++17 compiler (Visual Studio 2022 on Windows) - ffmpeg (for MP4 muxing with `--output-format mp4`) -**For the Vulkan backend additionally:** -- Vulkan 1.3 SDK or `libvulkan-dev` + `libvulkan1` (Debian/Ubuntu) -- An NVIDIA GPU + driver that exposes `VK_EXT_mesh_shader` (Ada generation - and later on the latest production drivers; consult `vulkaninfo`). -- To rebuild shaders from source: `glslangValidator` from the Vulkan SDK. - ## Installation ```bash @@ -51,60 +44,43 @@ Dependencies installed: - NumPy, Pandas, SciPy - PyArrow (for parquet scene files) - Pillow, ImageIO (for image handling) +- CMake 4+ for the one-time native module build +- NVIDIA PhysX 5.9.0, fetched from the official repository at a pinned commit + and verified by SHA-256 + +Prebuild PhysX during environment setup so interactive startup never pays the +one-time compile cost: + +```bash +uv run --package ludus-renderer python -c "from ludus_renderer import prepare_physx; prepare_physx()" +``` ## Usage -The default CUDA backend just works everywhere: +The CUDA renderer is the only public rendering backend: ```python from ludus_renderer import LudusCudaTimestampedContext ctx = LudusCudaTimestampedContext(device="cuda") ``` -The Vulkan backend has the same public API and is selected at construction: - -```python -from ludus_renderer import LudusTimestampedContext -ctx = LudusTimestampedContext(device="cuda") -# ... ctx.upload_cameras / upload_scene / render_batch ... -``` - -If Vulkan headers / loader / `VK_EXT_mesh_shader` are missing, the -constructor raises a friendly `ImportError`. The CUDA backend stays -fully usable. - -### Choosing a backend - -| Aspect | CUDA backend | Vulkan backend | -| --- | --- | --- | -| Driver requirement | CUDA only | CUDA + Vulkan 1.3 + `VK_EXT_mesh_shader` | -| Geometry generation | CUDA kernels (CPU-side dispatch) | Task/Mesh shaders on the GPU | -| Render dispatch | One CUDA kernel per query (Python loop) | Single Vulkan submission per batch | -| MSAA | 2x supersampling | Hardware 4x MSAA | -| First-call cost | Plugin JIT (~10s once) | Plugin JIT (~10s once) + Vulkan context init | - -### Shader build (Vulkan only) - -The Vulkan backend ships with pre-compiled SPIR-V embedded in -`_cpp/render/shaders_spv.h`. The GLSL sources in `ludus_renderer/shaders/` -are hand-maintained `GL_EXT_mesh_shader` style; regenerate after editing them -with: - -```bash -bash ludus_renderer/shaders/compile.sh # GLSL -> SPIR-V -> embed in shaders_spv.h -``` - -### v1 caveats for the Vulkan backend - -- Dot-primitive rendering (`PRIM_DOT_*`) is implemented in the CUDA - backend but not yet plumbed through the Vulkan task/mesh pipeline. -- The CUDA-Vulkan handoff uses opaque file-descriptor external memory, - which is Linux-only; the Vulkan plugin currently refuses to build on - Windows. The CUDA backend remains cross-platform. -- Diagnostics: set `LUDUS_VK_DEBUG=1` to enable internal `[Vulkan] ...` - trace logs, and `LUDUS_VK_CLEAR_RED=1` to clear the framebuffer to - opaque red instead of transparent black (useful to verify the - render-pass and readback path are alive independent of the shaders). +`PhysXWorld` consumes `PhysicsObjectGraph` and creates `PxScene`, rigid actors, +materials, and shapes directly, without an intermediate scene-format runtime. +The first use builds the pinned CPU PhysX module in the platform cache; later +processes load that module directly. Set `LUDUS_PHYSX_CACHE` to place this cache +elsewhere. + +`PhysicsObjectGraph.upsert_object`, `remove_object`, `upsert_barrier`, and +`remove_barrier` edit graph topology. `PhysXWorld.synchronize` applies only those +differences to the live scene. Its `state_buffer` and `active_buffer` views keep +the same addresses while body slots are recycled. `MutableObjectSceneBuffer` +owns the CUDA renderer's update-versus-reallocate policy, so interactive clients +do not manage packed-scene replacement themselves. + +`build_hdmap_object_pool` turns simulated graph tracks into the same oriented +boxes used by regular-camera and BEV model inputs. `PhysicsObjectGraph.copy_for_physx` +creates a bounded active topology while the complete graph remains available to +render model-input and BEV boxes. ## Examples diff --git a/integrations/omnidreams/ludus-renderer/THIRD_PARTY_NOTICES.txt b/integrations/omnidreams/ludus-renderer/THIRD_PARTY_NOTICES.txt index e25d4c7b5..86d572316 100644 --- a/integrations/omnidreams/ludus-renderer/THIRD_PARTY_NOTICES.txt +++ b/integrations/omnidreams/ludus-renderer/THIRD_PARTY_NOTICES.txt @@ -1,5 +1,13 @@ This project includes third-party software: +Name: NVIDIA PhysX 5.9.0 +Source: https://github.com/NVIDIA-Omniverse/PhysX +License: BSD-3-Clause + +Ludus downloads a pinned PhysX source archive at first use, verifies its +SHA-256, and builds it into a platform-local cache. PhysX source and binaries +are not redistributed in this package. + Name: cudaraster Source path: ludus_renderer/_cpp/cudaraster License: BSD-3-Clause-style diff --git a/integrations/omnidreams/ludus-renderer/examples/compare_vulkan_vs_cuda.py b/integrations/omnidreams/ludus-renderer/examples/compare_vulkan_vs_cuda.py deleted file mode 100644 index 23840547a..000000000 --- a/integrations/omnidreams/ludus-renderer/examples/compare_vulkan_vs_cuda.py +++ /dev/null @@ -1,421 +0,0 @@ -#!/usr/bin/env python3 -# 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. - -"""Render the same HDMap frame with both the CUDA and Vulkan backends and -save the outputs side-by-side for visual comparison. - -``--scene`` accepts either a clipgt scene directory or a clipgt ``.usdz`` -archive (e.g. ``~/.cache/flashdreams/omnidreams-scenes/clipgt-.usdz``). -When ``--scene`` is -left at the default and the bundled sample is absent, a cached USDZ scene under -``$FLASHDREAMS_CACHE_DIR/omnidreams-scenes`` is used automatically; only if none -is found does it fall back to a small synthetic scene (also forced via -``--synthetic``). - -Outputs (in ``--out-dir``, default ``./_vk_compare``): - cuda.png CUDA backend render - vulkan.png Vulkan backend render - diff_10x.png |cuda - vulkan| * 10 - side_by_side.png CUDA | Vulkan | diff in one strip - -Usage: - uv run python examples/compare_vulkan_vs_cuda.py - uv run python examples/compare_vulkan_vs_cuda.py --frame 30 \ - --width 1280 --height 720 - uv run python examples/compare_vulkan_vs_cuda.py \ - --scene ~/.cache/flashdreams/omnidreams-scenes/clipgt-.usdz - uv run python examples/compare_vulkan_vs_cuda.py --synthetic -""" - -from __future__ import annotations - -import argparse -import math -import os -import sys -from pathlib import Path - -# Ensure we import the local ``ludus_renderer`` (this project) even when an -# editable install of a sibling project is on sys.path. -_PROJECT_ROOT = Path(__file__).resolve().parent.parent -if str(_PROJECT_ROOT) not in sys.path: - sys.path.insert(0, str(_PROJECT_ROOT)) - -import numpy as np -import torch -from PIL import Image - -DEFAULT_SCENE_PATH = str(_PROJECT_ROOT / "example_data" / "test_hdmap") -DEFAULT_CAMERA = "camera:front:wide:120fov" - -# Shared cache used by the omnidreams demos. Scene archives live at -# ``/clipgt-[-].usdz`` and bundle the HDMap vector data as -# ``clipgt/.parquet`` (alongside large mesh/checkpoint payloads that -# rasterization does not need). -DEFAULT_SCENE_CACHE = ( - Path(os.path.expanduser(os.getenv("FLASHDREAMS_CACHE_DIR", "~/.cache/flashdreams"))) - / "omnidreams-scenes" -) - - -# --------------------------------------------------------------------------- -# Scene resolution: ClipGT directory or archive -# --------------------------------------------------------------------------- - - -def discover_cached_usdz() -> Path | None: - """Return a cached ClipGT USDZ, preferring the base variant if present.""" - if not DEFAULT_SCENE_CACHE.is_dir(): - return None - candidates = sorted(DEFAULT_SCENE_CACHE.glob("clipgt-*.usdz")) - if not candidates: - return None - return min(candidates, key=lambda p: len(p.name)) - - -def resolve_clipgt_scene(scene_arg: str) -> Path | None: - """Resolve ``--scene`` to a ClipGT directory or archive path.""" - from ludus_renderer import is_clipgt - - scene_path = Path(scene_arg) - return scene_path if is_clipgt(scene_path) else None - - -# --------------------------------------------------------------------------- -# Synthetic fallback scene (no external data required) -# --------------------------------------------------------------------------- - - -def build_synthetic_scene(): - from ludus_renderer import ( - PRIM_CROSSWALK, - PRIM_OBSTACLE, - PRIM_ROAD_BOUNDARY, - CubePool, - TimestampedPolygonPool, - TimestampedPolylinePool, - TimestampedScene, - ) - - polyline_pts = torch.tensor( - [ - [5.0, -2.0, 0.0], - [5.0, -1.0, 0.0], - [5.0, 0.0, 0.0], - [5.0, 1.0, 0.0], - [5.0, 2.0, 0.0], - ], - dtype=torch.float32, - ) - polyline = TimestampedPolylinePool( - timestamps_us=torch.tensor([0], dtype=torch.int64), - timestamped_varrays_prefix_sum=torch.tensor([1], dtype=torch.int32), - varrays_prefix_sum=torch.tensor([polyline_pts.shape[0]], dtype=torch.int32), - vertices=polyline_pts, - prim_type_id=PRIM_ROAD_BOUNDARY, - ) - - polygon_pts = torch.tensor( - [[8.0, -1.5, 0.0], [12.0, -1.5, 0.0], [12.0, 1.5, 0.0], [8.0, 1.5, 0.0]], - dtype=torch.float32, - ) - polygon_tris = torch.tensor([[0, 1, 2], [0, 2, 3]], dtype=torch.int32) - polygon = TimestampedPolygonPool( - timestamps_us=torch.tensor([0], dtype=torch.int64), - timestamped_varrays_prefix_sum=torch.tensor([1], dtype=torch.int32), - varrays_prefix_sum=torch.tensor([polygon_pts.shape[0]], dtype=torch.int32), - triangle_prefix_sum=torch.tensor([polygon_tris.shape[0]], dtype=torch.int32), - vertices=polygon_pts, - triangles=polygon_tris, - prim_type_id=PRIM_CROSSWALK, - ) - - cube = CubePool( - timestamps_us=torch.tensor([0], dtype=torch.int64), - cube_ts_prefix_sum=torch.tensor([1], dtype=torch.int32), - track_timestamps_us=torch.tensor([0], dtype=torch.int64), - translations=torch.tensor([[7.0, -2.5, 0.5]], dtype=torch.float32), - quaternions=torch.tensor([[0.0, 0.0, 0.0, 1.0]], dtype=torch.float32), - scales=torch.tensor([[1.0, 0.5, 1.0]], dtype=torch.float32), - colors=torch.tensor([[1.0, 0.4, 0.2, 0.8, 0.2, 0.2]], dtype=torch.float32), - prim_type_id=PRIM_OBSTACLE, - ) - - return TimestampedScene( - polyline_pools=[polyline], - polygon_pools=[polygon], - cube_pools=[cube], - ) - - -def render_synthetic(ctx_cls, width: int, height: int) -> np.ndarray: - from ludus_renderer import FThetaCamera - - cam = FThetaCamera( - principal_point=torch.tensor([width / 2.0, height / 2.0], dtype=torch.float32), - image_size=torch.tensor([float(width), float(height)], dtype=torch.float32), - fw_poly=torch.tensor([0.0, 200.0, 0.0, 0.0, 0.0, 0.0], dtype=torch.float32), - max_ray_angle=math.pi / 2.0, - depth_max=200.0, - ) - ctx = ctx_cls(device="cuda") - ctx.upload_cameras([cam]) - scene_id = ctx.upload_scene(build_synthetic_scene()) - poses = torch.eye(4, dtype=torch.float32, device="cuda").unsqueeze(0) - img = ctx.render_batch([(scene_id, 0, 0, 0)], poses, (height, width)) - return img.detach().cpu().numpy()[0] - - -# --------------------------------------------------------------------------- -# HDMap scene rendering (mirrors examples/render_hdmap_scene.py) -# --------------------------------------------------------------------------- - - -def render_hdmap( - ctx_cls, - scene_path: str, - frame: int, - width: int, - height: int, - camera_name: str, - msaa: int, -) -> np.ndarray: - from ludus_renderer.render_utils import ( - create_camera, - get_available_cameras, - render_frame, - ) - from ludus_renderer.render_utils import ( - load_scene_adapted as load_scene, - ) - from ludus_renderer.util import resample_timestamps - - device = torch.device("cuda") - scene = load_scene( - scene_path, - device, - include_ego_obstacle=False, - include_ego_trajectory=False, - use_gpu_decoder=True, - ) - - # Fall back to an available camera if the requested one isn't in the scene - # (camera names vary between captures), so the example still renders. - available = get_available_cameras(scene) - if camera_name not in available and available: - print( - f" camera {camera_name!r} not in scene; using {available[0]!r} " - f"(available: {available})" - ) - camera_name = available[0] - - timestamps = resample_timestamps(scene.ego_tracks.timestamps, 100000, 20000000) - if frame >= len(timestamps): - raise SystemExit( - f"frame {frame} out of range (scene has {len(timestamps)} frames)" - ) - - ctx = ctx_cls(device=device) - ctx.set_depth_scaling(True) - if msaa > 0: - ctx.set_msaa_samples(msaa) - - cam = create_camera( - width, - height, - device, - bev=False, - bev_height=80.0, - bev_fov=60.0, - scene=scene, - camera_name=camera_name, - ) - ctx.upload_cameras([cam]) - scene_id = ctx.upload_scene(scene.timestamped_scene) - img = render_frame( - ctx, - scene, - scene_id, - timestamps, - frame, - width, - height, - device, - bev_height=None, - camera_name=camera_name, - ) - return np.array(img) # PIL.Image -> (H, W, 3 or 4) uint8 - - -# --------------------------------------------------------------------------- -# Compositing -# --------------------------------------------------------------------------- - - -def _to_rgba(img: np.ndarray) -> np.ndarray: - """Coerce to (H, W, 4) uint8.""" - if img.ndim == 2: - img = img[..., None].repeat(3, axis=-1) - if img.shape[-1] == 3: - alpha = np.full(img.shape[:2] + (1,), 255, dtype=np.uint8) - img = np.concatenate([img, alpha], axis=-1) - return img.astype(np.uint8) - - -def composite(cuda_img: np.ndarray, vk_img: np.ndarray): - cuda_img = _to_rgba(cuda_img) - vk_img = _to_rgba(vk_img) - diff = np.abs(cuda_img.astype(np.int16) - vk_img.astype(np.int16)) - diff_amp = np.clip(diff * 10, 0, 255).astype(np.uint8) - diff_amp[..., 3] = 255 - - h = cuda_img.shape[0] - sep_w = 4 - sep = np.zeros((h, sep_w, 4), dtype=np.uint8) - sep[..., 3] = 255 - side = np.concatenate([cuda_img, sep, vk_img, sep, diff_amp], axis=1) - return cuda_img, vk_img, diff_amp, side - - -def main() -> int: - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument( - "--scene", - default=DEFAULT_SCENE_PATH, - help="clipgt scene directory or a clipgt .usdz archive " - "(default: bundled sample, else a cached USDZ under " - "$FLASHDREAMS_CACHE_DIR/omnidreams-scenes)", - ) - parser.add_argument( - "--frame", type=int, default=12, help="Frame index to render (default: 12)" - ) - parser.add_argument("--camera", default=DEFAULT_CAMERA, help="Scene camera name") - parser.add_argument("--width", type=int, default=640) - parser.add_argument("--height", type=int, default=480) - parser.add_argument( - "--msaa", - type=int, - default=0, - choices=[0, 4], - help="MSAA sample count for the CUDA backend (0 or 4)", - ) - parser.add_argument( - "--out-dir", - default="_vk_compare", - help="Output directory (default: ./_vk_compare)", - ) - parser.add_argument( - "--synthetic", - action="store_true", - help="Use the small synthetic fallback scene instead " - "of the clipgt HDMap scene.", - ) - args = parser.parse_args() - - out_dir = Path(args.out_dir).resolve() - out_dir.mkdir(parents=True, exist_ok=True) - - from ludus_renderer import LudusCudaTimestampedContext - - try: - from ludus_renderer import LudusTimestampedContext - except ImportError as exc: - print(f"Vulkan backend unavailable: {exc}", file=sys.stderr) - return 1 - - # Resolve a real scene: explicit ClipGT dir/archive, else auto-discover a - # cached USDZ, else fall back to the synthetic scene. - scene_path = None - if not args.synthetic: - scene_path = resolve_clipgt_scene(args.scene) - if scene_path is None and args.scene == DEFAULT_SCENE_PATH: - usdz = discover_cached_usdz() - if usdz is not None: - print( - f"default scene {args.scene!r} not found; using cached " - f"USDZ scene {usdz.name}" - ) - scene_path = usdz - - use_synthetic = args.synthetic or scene_path is None - if not args.synthetic and scene_path is None: - print( - f"no clipgt scene found for {args.scene!r} (and none cached under " - f"{DEFAULT_SCENE_CACHE}); falling back to synthetic" - ) - - if use_synthetic: - label = "synthetic" - print(f"Rendering synthetic scene at {args.width}x{args.height}...") - cuda_img = render_synthetic( - LudusCudaTimestampedContext, args.width, args.height - ) - print(f" CUDA lit pixels: {int((cuda_img[..., :3].sum(-1) > 0).sum())}") - vk_img = render_synthetic(LudusTimestampedContext, args.width, args.height) - print(f" Vulkan lit pixels: {int((vk_img[..., :3].sum(-1) > 0).sum())}") - else: - label = f"hdmap frame {args.frame} ({args.camera})" - print(f"Rendering {label} from {scene_path} at {args.width}x{args.height}...") - print(" CUDA backend...") - cuda_img = render_hdmap( - LudusCudaTimestampedContext, - str(scene_path), - args.frame, - args.width, - args.height, - args.camera, - args.msaa, - ) - print(f" lit pixels: {int((cuda_img[..., :3].sum(-1) > 0).sum())}") - print(" Vulkan backend...") - vk_img = render_hdmap( - LudusTimestampedContext, - str(scene_path), - args.frame, - args.width, - args.height, - args.camera, - args.msaa, - ) - print(f" lit pixels: {int((vk_img[..., :3].sum(-1) > 0).sum())}") - - cuda_img, vk_img, diff_amp, side = composite(cuda_img, vk_img) - - Image.fromarray(cuda_img, mode="RGBA").save(out_dir / "cuda.png") - Image.fromarray(vk_img, mode="RGBA").save(out_dir / "vulkan.png") - Image.fromarray(diff_amp, mode="RGBA").save(out_dir / "diff_10x.png") - Image.fromarray(side, mode="RGBA").save(out_dir / "side_by_side.png") - - rgb_diff = np.abs( - cuda_img[..., :3].astype(np.int16) - vk_img[..., :3].astype(np.int16) - ) - max_diff = int(rgb_diff.max()) - mean_diff = float(rgb_diff.mean()) - differing = int((rgb_diff.sum(-1) > 0).sum()) - total = cuda_img.shape[0] * cuda_img.shape[1] - - print(f"\nOutputs written to: {out_dir}") - for name in ("cuda.png", "vulkan.png", "diff_10x.png", "side_by_side.png"): - print(f" {name:<18} {os.path.getsize(out_dir / name):>9} bytes") - print("\nPixel comparison (RGB only):") - print(f" Max per-channel difference: {max_diff} / 255") - print(f" Mean per-channel difference: {mean_diff:.3f} / 255") - print( - f" Differing pixels: {differing} / {total} ({100.0 * differing / total:.2f}%)" - ) - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/__init__.py b/integrations/omnidreams/ludus-renderer/ludus_renderer/__init__.py index 3f364b768..760d400eb 100644 --- a/integrations/omnidreams/ludus-renderer/ludus_renderer/__init__.py +++ b/integrations/omnidreams/ludus-renderer/ludus_renderer/__init__.py @@ -14,12 +14,7 @@ # limitations under the License. """ -Ludus Renderer - GPU-native F-theta fisheye renderer with two backends: - -- ``LudusCudaTimestampedContext`` (always available): CUDA software - rasterizer based on the HPG 2011 CudaRaster triangle pipeline. -- ``LudusTimestampedContext`` (requires Vulkan 1.3 + VK_EXT_mesh_shader): - hardware mesh-shader pipeline with CUDA-Vulkan external-memory interop. +Ludus Renderer - GPU-native F-theta CUDA software renderer and PhysX scene. High-level API:: @@ -32,13 +27,6 @@ images = ctx.render(scene_ids, camera_ids, timestamps_us, camera_type_ids, camera_poses, resolution=(H, W)) -The Vulkan backend exposes the same public method surface so it is a -near drop-in replacement:: - - from ludus_renderer import LudusTimestampedContext - ctx = LudusTimestampedContext(device="cuda") - # ... same upload_cameras / upload_scene / render API ... - NVJPEG Encoding (GPU-accelerated JPEG):: from ludus_renderer import nvjpeg @@ -72,7 +60,6 @@ FThetaCamera, # Contexts LudusCudaTimestampedContext, - LudusTimestampedContext, ObstaclePool, Polygon, # Primitives @@ -91,6 +78,18 @@ load_clipgt_scene, load_scene, ) +from .dynamic_scene import MutableObjectSceneBuffer, build_hdmap_object_pool +from .object_graph import ( + BodyState, + InvisibleBarrier, + ObjectPose, + PhysicsObjectGraph, + PhysicsStep, + RigidBodyModel, + SceneObject, + VehicleModel, +) +from .physx import PhysXWorld, prepare_physx # Scene cache from .scene_cache import ( @@ -126,7 +125,7 @@ "mirror_augment_scene", # Rendering contexts "LudusCudaTimestampedContext", - "LudusTimestampedContext", + "MutableObjectSceneBuffer", # Primitives "Polyline", "Polygon", @@ -151,6 +150,18 @@ "CAMERA_TYPE_REGULAR", "CAMERA_TYPE_BEV", "CUBE_FLAG_WIREFRAME", + # PhysX-first object graph + "BodyState", + "InvisibleBarrier", + "ObjectPose", + "PhysicsObjectGraph", + "PhysicsStep", + "PhysXWorld", + "prepare_physx", + "RigidBodyModel", + "SceneObject", + "VehicleModel", + "build_hdmap_object_pool", # Utilities "rgb", "resample_timestamps", diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/bindings/torch_bindings_cuda.cpp b/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/bindings/torch_bindings_cuda.cpp index 91c3b961d..4f73be900 100644 --- a/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/bindings/torch_bindings_cuda.cpp +++ b/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/bindings/torch_bindings_cuda.cpp @@ -23,7 +23,7 @@ torch::Tensor ludus_render_fwd_cuda(LudusCudaStateWrapper& stateWrapper, torch::Tensor polyline_headers, torch::Tensor polygon_headers, torch::Tensor cubes, torch::Tensor vertices, torch::Tensor triangles, torch::Tensor camera_intrinsics, torch::Tensor camera_poses, std::tuple resolution, float tessellation_threshold); torch::Tensor ludus_render_fwd_cuda_ts(LudusCudaStateWrapper& stateWrapper, torch::Tensor polyline_headers, torch::Tensor polygon_headers, torch::Tensor cubes, torch::Tensor vertices, torch::Tensor triangles, torch::Tensor camera_intrinsics, torch::Tensor camera_poses, std::tuple resolution, float tessellation_threshold, std::vector> cube_pool_list, std::vector> dot_list); -torch::Tensor ludus_render_fwd_cuda_timestamped(LudusCudaStateWrapper& stateWrapper, torch::Tensor timestamps, torch::Tensor int32_data, torch::Tensor vertices, torch::Tensor triangles, torch::Tensor float_data, torch::Tensor polyline_pools, torch::Tensor polygon_pools, torch::Tensor cube_pools, int64_t query_timestamp_us, int max_extrapolation_us, int max_varrays_per_ts_polyline, int max_varrays_per_ts_polygon, int camera_type_id, torch::Tensor camera_intrinsics, torch::Tensor camera_poses, std::tuple resolution, float tessellation_threshold); +torch::Tensor ludus_render_fwd_cuda_timestamped(LudusCudaStateWrapper& stateWrapper, torch::Tensor timestamps, torch::Tensor int32_data, torch::Tensor vertices, torch::Tensor triangles, torch::Tensor float_data, torch::Tensor polyline_pools, torch::Tensor polygon_pools, torch::Tensor cube_pools, int total_cubes, std::vector cube_pool_counts, std::vector query_timestamps_us, int max_extrapolation_us, int max_varrays_per_ts_polyline, int max_varrays_per_ts_polygon, int camera_type_id, torch::Tensor camera_intrinsics, torch::Tensor camera_poses, std::tuple resolution, float tessellation_threshold); //------------------------------------------------------------------------ diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/bindings/torch_rasterize_cuda.cpp b/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/bindings/torch_rasterize_cuda.cpp index ab9721a69..2f7d343ea 100644 --- a/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/bindings/torch_rasterize_cuda.cpp +++ b/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/bindings/torch_rasterize_cuda.cpp @@ -18,6 +18,7 @@ #include "../common/common.h" #include "../render/ludus_cuda.h" #include "../cudaraster/CudaRaster.hpp" +#include #include //------------------------------------------------------------------------ @@ -48,6 +49,7 @@ class CudaRasterTestWrapper::Impl CudaRasterTestWrapper::CudaRasterTestWrapper(int cudaDeviceIdx) { + const at::cuda::OptionalCUDAGuard device_guard(c10::Device(c10::kCUDA, cudaDeviceIdx)); m_impl = new Impl(cudaDeviceIdx); } @@ -199,22 +201,42 @@ static torch::Tensor flu_to_rdf_cuda(const torch::Tensor& camera_poses) // CUDA renderer state wrapper. LudusCudaStateWrapper::LudusCudaStateWrapper(int cudaDeviceIdx_) + : pState(nullptr) + , cudaDeviceIdx(cudaDeviceIdx_) + , lastUseEvent(nullptr) + , hasLastUseEvent(false) { + const at::cuda::OptionalCUDAGuard device_guard(c10::Device(c10::kCUDA, cudaDeviceIdx)); pState = new LudusCudaState(); - cudaDeviceIdx = cudaDeviceIdx_; + AT_CUDA_CHECK(cudaEventCreateWithFlags(&lastUseEvent, cudaEventDisableTiming)); ludusCudaInit(NVDR_CTX_PARAMS, *pState); } LudusCudaStateWrapper::~LudusCudaStateWrapper(void) { + const at::cuda::OptionalCUDAGuard device_guard(c10::Device(c10::kCUDA, cudaDeviceIdx)); + std::lock_guard lock(stateMutex); + if (hasLastUseEvent) + AT_CUDA_CHECK(cudaEventSynchronize(lastUseEvent)); ludusCudaDestroy(NVDR_CTX_PARAMS, *pState); delete pState; + AT_CUDA_CHECK(cudaEventDestroy(lastUseEvent)); +} + +static void synchronizeStateForMutation(LudusCudaStateWrapper& stateWrapper) +{ + if (stateWrapper.hasLastUseEvent) + AT_CUDA_CHECK(cudaEventSynchronize(stateWrapper.lastUseEvent)); } void LudusCudaStateWrapper::setLineWidths(float polyline_regular, float polyline_bev, float ego_traj_regular, float ego_traj_bev, float wireframe) { + const at::cuda::OptionalCUDAGuard device_guard( + c10::Device(c10::kCUDA, cudaDeviceIdx)); + std::lock_guard lock(stateMutex); + synchronizeStateForMutation(*this); pState->widthPolylineRegular = polyline_regular; pState->widthPolylineBev = polyline_bev; pState->widthEgoTrajRegular = ego_traj_regular; @@ -224,21 +246,43 @@ void LudusCudaStateWrapper::setLineWidths(float polyline_regular, float polyline void LudusCudaStateWrapper::setResolutionScale(float scale) { + const at::cuda::OptionalCUDAGuard device_guard( + c10::Device(c10::kCUDA, cudaDeviceIdx)); + std::lock_guard lock(stateMutex); + synchronizeStateForMutation(*this); pState->resolutionScale = scale; } void LudusCudaStateWrapper::setDepthScaling(float enabled) { + const at::cuda::OptionalCUDAGuard device_guard( + c10::Device(c10::kCUDA, cudaDeviceIdx)); + std::lock_guard lock(stateMutex); + synchronizeStateForMutation(*this); pState->depthScaling = enabled; } void LudusCudaStateWrapper::setCullRadius(float radius) { + const at::cuda::OptionalCUDAGuard device_guard( + c10::Device(c10::kCUDA, cudaDeviceIdx)); + std::lock_guard lock(stateMutex); + synchronizeStateForMutation(*this); pState->cullRadiusScale = radius; } void LudusCudaStateWrapper::setMaxTessellationLevels(int polyline, int polygon, int cube) { + const at::cuda::OptionalCUDAGuard device_guard( + c10::Device(c10::kCUDA, cudaDeviceIdx)); + std::lock_guard lock(stateMutex); + synchronizeStateForMutation(*this); + NVDR_CHECK(polyline >= 0 && polyline <= 4, + "polyline tessellation level must be in [0, 4]"); + NVDR_CHECK(polygon >= 0 && polygon <= 3, + "polygon tessellation level must be in [0, 3]"); + NVDR_CHECK(cube >= 0 && cube <= 3, + "cube tessellation level must be in [0, 3]"); pState->maxTessPolyline = polyline; pState->maxTessPolygon = polygon; pState->maxTessCube = cube; @@ -246,6 +290,10 @@ void LudusCudaStateWrapper::setMaxTessellationLevels(int polyline, int polygon, void LudusCudaStateWrapper::setMsaaSamples(int samples) { + const at::cuda::OptionalCUDAGuard device_guard( + c10::Device(c10::kCUDA, cudaDeviceIdx)); + std::lock_guard lock(stateMutex); + synchronizeStateForMutation(*this); NVDR_CHECK(samples == 0 || samples == 4, "CUDA renderer MSAA samples must be 0 (disabled) or 4 (4x SSAA)"); pState->msaaSamples = samples; @@ -253,6 +301,10 @@ void LudusCudaStateWrapper::setMsaaSamples(int samples) void LudusCudaStateWrapper::uploadColorPalette(torch::Tensor colors) { + const at::cuda::OptionalCUDAGuard device_guard( + c10::Device(c10::kCUDA, cudaDeviceIdx)); + std::lock_guard lock(stateMutex); + synchronizeStateForMutation(*this); NVDR_CHECK(colors.dim() == 1, "color palette must be 1D tensor of packed RGBA8 uint32"); int count = colors.size(0); std::vector hostPalette(count); @@ -278,6 +330,9 @@ torch::Tensor ludus_render_fwd_cuda( { const at::cuda::OptionalCUDAGuard device_guard(device_of(camera_poses)); cudaStream_t stream = at::cuda::getCurrentCUDAStream(); + std::lock_guard state_lock(stateWrapper.stateMutex); + if (stateWrapper.hasLastUseEvent) + AT_CUDA_CHECK(cudaStreamWaitEvent(stream, stateWrapper.lastUseEvent, 0)); LudusCudaState& s = *stateWrapper.pState; NVDR_CHECK_DEVICE(polyline_headers, polygon_headers, cubes, vertices, triangles, camera_intrinsics, camera_poses); @@ -334,6 +389,9 @@ torch::Tensor ludus_render_fwd_cuda( nullptr, 0, nullptr, 0); + AT_CUDA_CHECK(cudaEventRecord(stateWrapper.lastUseEvent, stream)); + stateWrapper.hasLastUseEvent = true; + return out_rgba; } @@ -359,6 +417,9 @@ torch::Tensor ludus_render_fwd_cuda_ts( { const at::cuda::OptionalCUDAGuard device_guard(device_of(camera_poses)); cudaStream_t stream = at::cuda::getCurrentCUDAStream(); + std::lock_guard state_lock(stateWrapper.stateMutex); + if (stateWrapper.hasLastUseEvent) + AT_CUDA_CHECK(cudaStreamWaitEvent(stream, stateWrapper.lastUseEvent, 0)); LudusCudaState& s = *stateWrapper.pState; NVDR_CHECK_DEVICE(polyline_headers, polygon_headers, cubes, vertices, triangles, camera_intrinsics, camera_poses); @@ -440,6 +501,9 @@ torch::Tensor ludus_render_fwd_cuda_ts( pools.data(), numPools, dotGroups.data(), numDotGroups); + AT_CUDA_CHECK(cudaEventRecord(stateWrapper.lastUseEvent, stream)); + stateWrapper.hasLastUseEvent = true; + return out_rgba; } @@ -456,7 +520,9 @@ torch::Tensor ludus_render_fwd_cuda_timestamped( torch::Tensor polyline_pools, // [num_pl_pools, 16] uint32 torch::Tensor polygon_pools, // [num_pg_pools, 16] uint32 torch::Tensor cube_pools, // [num_cb_pools, 16] uint32 - int64_t query_timestamp_us, + int total_cubes, + std::vector cube_pool_counts, + std::vector query_timestamps_us, int max_extrapolation_us, int max_varrays_per_ts_polyline, int max_varrays_per_ts_polygon, @@ -468,12 +534,63 @@ torch::Tensor ludus_render_fwd_cuda_timestamped( { const at::cuda::OptionalCUDAGuard device_guard(device_of(camera_poses)); cudaStream_t stream = at::cuda::getCurrentCUDAStream(); + std::lock_guard state_lock(stateWrapper.stateMutex); + if (stateWrapper.hasLastUseEvent) + AT_CUDA_CHECK(cudaStreamWaitEvent(stream, stateWrapper.lastUseEvent, 0)); LudusCudaState& s = *stateWrapper.pState; + NVDR_CHECK_DEVICE(timestamps, int32_data, vertices, triangles, float_data, + polyline_pools, polygon_pools, cube_pools, + camera_intrinsics, camera_poses); + NVDR_CHECK_CONTIGUOUS(timestamps, int32_data, vertices, triangles, float_data, + polyline_pools, polygon_pools, cube_pools, + camera_intrinsics, camera_poses); + NVDR_CHECK(timestamps.dtype() == torch::kInt64, "timestamps must be int64"); + NVDR_CHECK_I32(int32_data, triangles, polyline_pools, polygon_pools, cube_pools); + NVDR_CHECK_F32(vertices, float_data, camera_intrinsics, camera_poses); + + int inputDevice = camera_poses.get_device(); + NVDR_CHECK(timestamps.get_device() == inputDevice && + int32_data.get_device() == inputDevice && + vertices.get_device() == inputDevice && + triangles.get_device() == inputDevice && + float_data.get_device() == inputDevice && + polyline_pools.get_device() == inputDevice && + polygon_pools.get_device() == inputDevice && + cube_pools.get_device() == inputDevice && + camera_intrinsics.get_device() == inputDevice, + "all timestamped renderer tensors must be on the same CUDA device"); NVDR_CHECK(camera_poses.get_device() == stateWrapper.cudaDeviceIdx, "CUDA context must reside on the same device as input tensors"); + NVDR_CHECK(timestamps.dim() == 1, "timestamps must have shape [N]"); + NVDR_CHECK(int32_data.dim() == 1, "int32_data must have shape [N]"); + NVDR_CHECK(vertices.dim() == 2 && vertices.size(1) == 4, + "vertices must have shape [N, 4]"); + NVDR_CHECK(triangles.dim() == 2 && triangles.size(1) == 4, + "triangles must have shape [N, 4]"); + NVDR_CHECK(float_data.dim() == 1, "float_data must have shape [N]"); + NVDR_CHECK(polyline_pools.dim() == 2 && polyline_pools.size(1) == 16, + "polyline_pools must have shape [N, 16]"); + NVDR_CHECK(polygon_pools.dim() == 2 && polygon_pools.size(1) == 16, + "polygon_pools must have shape [N, 16]"); + NVDR_CHECK(cube_pools.dim() == 2 && cube_pools.size(1) == 16, + "cube_pools must have shape [N, 16]"); + NVDR_CHECK(camera_intrinsics.dim() == 2 && camera_intrinsics.size(1) == 18, + "camera_intrinsics must have shape [C, 18]"); + NVDR_CHECK(camera_poses.dim() == 3 && camera_poses.size(1) == 4 && camera_poses.size(2) == 4, + "camera_poses must have shape [C, 4, 4]"); + NVDR_CHECK(camera_intrinsics.size(0) == camera_poses.size(0), + "camera intrinsics and poses must have matching camera counts"); + NVDR_CHECK(max_varrays_per_ts_polyline >= 0 && max_varrays_per_ts_polygon >= 0, + "max varrays per timestamp must be non-negative"); + NVDR_CHECK(total_cubes >= 0, "total cubes must be non-negative"); + NVDR_CHECK(camera_type_id == 0 || camera_type_id == 1, + "camera_type_id must be 0 (regular) or 1 (BEV)"); + int numCameras = camera_intrinsics.size(0); + NVDR_CHECK((int)query_timestamps_us.size() == numCameras, + "query timestamps must match camera count"); int height = std::get<0>(resolution); int width = std::get<1>(resolution); NVDR_CHECK(height > 0 && width > 0, "resolution must be [>0, >0]"); @@ -506,6 +623,16 @@ torch::Tensor ludus_render_fwd_cuda_timestamped( int numPlPools = polyline_pools.size(0); int numPgPools = polygon_pools.size(0); int numCbPools = cube_pools.size(0); + NVDR_CHECK((int)cube_pool_counts.size() == numCbPools, + "cube pool counts must match cube pool count"); + int64_t countedCubes = 0; + for (int64_t count : cube_pool_counts) { + NVDR_CHECK(count >= 0 && count <= std::numeric_limits::max(), + "cube pool counts must fit non-negative int32"); + countedCubes += count; + } + NVDR_CHECK(countedCubes == total_cubes, + "cube pool counts must sum to total cubes"); const TsPolylinePoolHeader* plPoolPtr = numPlPools > 0 ? reinterpret_cast(polyline_pools.data_ptr()) : nullptr; @@ -530,7 +657,8 @@ torch::Tensor ludus_render_fwd_cuda_timestamped( plPoolPtr, numPlPools, pgPoolPtr, numPgPools, cbPoolPtr, numCbPools, - query_timestamp_us, max_extrapolation_us, + total_cubes, cube_pool_counts.data(), + query_timestamps_us.data(), max_extrapolation_us, max_varrays_per_ts_polyline, max_varrays_per_ts_polygon, params, @@ -538,6 +666,9 @@ torch::Tensor ludus_render_fwd_cuda_timestamped( numCameras, width, height, out_rgba.data_ptr()); + AT_CUDA_CHECK(cudaEventRecord(stateWrapper.lastUseEvent, stream)); + stateWrapper.hasLastUseEvent = true; + return out_rgba; } diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/bindings/torch_rasterize_vk.cpp b/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/bindings/torch_rasterize_vk.cpp deleted file mode 100644 index 9df6c11fc..000000000 --- a/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/bindings/torch_rasterize_vk.cpp +++ /dev/null @@ -1,317 +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. - -// Vulkan-backend Python bindings. Compiled into its own torch extension -// (ludus_renderer_vk_plugin) so the CUDA-only extension stays buildable on -// systems without Vulkan headers. - -#include "torch_common.inl" -#include "../common/common.h" -#include "../render/ludus_vk.h" -#include - -//------------------------------------------------------------------------ -// FLU (front-left-up) to RDF (right-down-front) basis conversion. -// The shaders consume RDF column-major matrices; PyTorch poses are FLU. -//------------------------------------------------------------------------ - -static torch::Tensor flu_to_rdf(const torch::Tensor& camera_poses) -{ - static const float kFluToRdf[16] = { - 0, -1, 0, 0, - 0, 0, -1, 0, - 1, 0, 0, 0, - 0, 0, 0, 1, - }; - auto conv = torch::from_blob((void*)kFluToRdf, {4, 4}, torch::kFloat32) - .to(camera_poses.device()); - return torch::matmul(conv, camera_poses); -} - -//------------------------------------------------------------------------ -// Python-facing wrapper for the Vulkan timestamped renderer. -//------------------------------------------------------------------------ - -class LudusTimestampedVkStateWrapper -{ -public: - LudusTimestampedVkState* pState; - int cudaDeviceIdx; - - LudusTimestampedVkStateWrapper(int cudaDeviceIdx_) - { - pState = new LudusTimestampedVkState(); - cudaDeviceIdx = cudaDeviceIdx_; - memset(pState, 0, sizeof(LudusTimestampedVkState)); - pState->cullRadiusScale = 1.5f; - ludusTimestampedInitVk(NVDR_CTX_PARAMS, *pState, cudaDeviceIdx_); - } - - ~LudusTimestampedVkStateWrapper() - { - ludusTimestampedReleaseVk(NVDR_CTX_PARAMS, *pState); - delete pState; - } - - int uploadScene( - torch::Tensor scene_desc, torch::Tensor polyline_pools, - torch::Tensor polygon_pools, torch::Tensor obstacle_pools, - int max_obstacles_in_pool, - int max_varrays_per_ts_polyline, int max_varrays_per_ts_polygon, - torch::Tensor timestamps, - torch::Tensor int32_data, torch::Tensor vertices, - torch::Tensor triangles, torch::Tensor poses, - torch::Tensor float_data) - { - const at::cuda::OptionalCUDAGuard device_guard(device_of(scene_desc)); - cudaStream_t stream = at::cuda::getCurrentCUDAStream(); - return ludusUploadSceneVk( - NVDR_CTX_PARAMS, *pState, stream, - reinterpret_cast(scene_desc.data_ptr()), - reinterpret_cast(polyline_pools.data_ptr()), - polyline_pools.numel() > 0 ? (int)polyline_pools.size(0) : 0, - reinterpret_cast(polygon_pools.data_ptr()), - polygon_pools.numel() > 0 ? (int)polygon_pools.size(0) : 0, - reinterpret_cast(obstacle_pools.data_ptr()), - obstacle_pools.numel() > 0 ? (int)obstacle_pools.size(0) : 0, - max_obstacles_in_pool, - max_varrays_per_ts_polyline, max_varrays_per_ts_polygon, - timestamps.data_ptr(), (int)timestamps.numel(), - int32_data.data_ptr(), (int)int32_data.numel(), - reinterpret_cast(vertices.data_ptr()), (int)vertices.size(0), - reinterpret_cast(triangles.data_ptr()), (int)triangles.size(0), - reinterpret_cast(poses.data_ptr()), (int)poses.size(0), - float_data.data_ptr(), (int)float_data.numel() - ); - } - - void uploadCameras(torch::Tensor intrinsics) - { - const at::cuda::OptionalCUDAGuard device_guard(device_of(intrinsics)); - cudaStream_t stream = at::cuda::getCurrentCUDAStream(); - ludusUploadCamerasVk(NVDR_CTX_PARAMS, *pState, stream, - reinterpret_cast(intrinsics.data_ptr()), - (int)intrinsics.size(0)); - } - - void uploadColorPalette(torch::Tensor colors) - { - // Accept either packed int32 RGBA8 (CUDA backend convention) or - // float[N,4] RGBA in [0,1]. The Vulkan shaders sample float; we - // convert int32 packed -> float here so callers can use either. - const at::cuda::OptionalCUDAGuard device_guard(device_of(colors)); - cudaStream_t stream = at::cuda::getCurrentCUDAStream(); - - torch::Tensor f; - int numColors; - if (colors.dtype() == torch::kInt32) { - numColors = (int)colors.numel(); - auto packed = colors.to(torch::kInt64).clone(); - auto r = (packed.bitwise_and(0xFFLL)).to(torch::kFloat32).div(255.0f); - auto g = (packed.bitwise_right_shift(8).bitwise_and(0xFFLL)).to(torch::kFloat32).div(255.0f); - auto b = (packed.bitwise_right_shift(16).bitwise_and(0xFFLL)).to(torch::kFloat32).div(255.0f); - auto a = (packed.bitwise_right_shift(24).bitwise_and(0xFFLL)).to(torch::kFloat32).div(255.0f); - f = torch::stack({r, g, b, a}, /*dim=*/-1).contiguous(); - } else { - TORCH_CHECK(colors.dtype() == torch::kFloat32, - "upload_color_palette: expected int32 packed RGBA8 or float32 [N,4]"); - TORCH_CHECK(colors.dim() == 2 && colors.size(1) == 4, - "upload_color_palette: float tensor must be [N,4]"); - f = colors.contiguous(); - numColors = (int)f.size(0); - } - // The tensor came in on CPU/CUDA; the VK uploader needs CUDA memory. - if (!f.is_cuda()) - f = f.to(torch::kCUDA); - - ludusUploadColorPaletteVk(NVDR_CTX_PARAMS, *pState, stream, - f.data_ptr(), numColors); - } - - void removeScene(int sceneId) - { - const at::cuda::OptionalCUDAGuard device_guard(c10::Device(c10::kCUDA, cudaDeviceIdx)); - cudaStream_t stream = at::cuda::getCurrentCUDAStream(); - ludusRemoveSceneVk(NVDR_CTX_PARAMS, *pState, sceneId, stream); - } - - void clearScenes() { ludusClearScenesVk(NVDR_CTX_PARAMS, *pState); } - - void setTessellationThreshold(float t) { pState->tessellationThreshold = t; } - - void setMaxTessellationLevels(int pl, int pg, int c) { - pState->maxTessellationLevelPolyline = pl; - pState->maxTessellationLevelPolygon = pg; - pState->maxTessellationLevelCube = c; - } - - void setLineWidths(float pr, float pb, float er, float eb, float w) { - pState->widthPolylineRegular = pr; - pState->widthPolylineBev = pb; - pState->widthEgoTrajRegular = er; - pState->widthEgoTrajBev = eb; - pState->widthWireframe = w; - } - - void setResolutionScale(float s) { pState->resolutionScale = s; } - void setDepthScaling(float e) { pState->depthScaling = e; } - void setCullRadius(float r) { pState->cullRadiusScale = r; } - - void setMsaaSamples(int s) { - pState->msaaSamples = s; - // Zero the cached dimensions so the next render re-enters - // ensureFramebuffer, which rebuilds the framebuffer and (when the - // sample count changed) the render pass and pipelines to match. - pState->width = 0; - pState->height = 0; - } - - int getMaxBatchSize() { - // Vulkan multi-view has driver-dependent layer limits; 2048 is a safe - // working upper bound on contemporary NVIDIA drivers. - return 2048; - } -}; - -//------------------------------------------------------------------------ -// Render batch -//------------------------------------------------------------------------ - -torch::Tensor ludus_timestamped_render_batch_vk( - LudusTimestampedVkStateWrapper& stateWrapper, - torch::Tensor queries, torch::Tensor camera_poses, - std::tuple resolution) -{ - const at::cuda::OptionalCUDAGuard device_guard(device_of(queries)); - cudaStream_t stream = at::cuda::getCurrentCUDAStream(); - LudusTimestampedVkState& s = *stateWrapper.pState; - - NVDR_CHECK_DEVICE(queries, camera_poses); - NVDR_CHECK_CONTIGUOUS(queries, camera_poses); - - int numQueries = queries.size(0); - int height = std::get<0>(resolution); - int width = std::get<1>(resolution); - - // FLU -> RDF then transpose (column-major mat4 for GLSL). - torch::Tensor poses_rdf = flu_to_rdf(camera_poses).transpose(-2, -1).contiguous(); - - ludusRenderBatchVk(NVDR_CTX_PARAMS, s, stream, - reinterpret_cast(queries.data_ptr()), - reinterpret_cast(poses_rdf.data_ptr()), - numQueries, width, height); - - auto opts = torch::TensorOptions().dtype(torch::kUInt8).device(queries.device()); - torch::Tensor out = torch::empty({numQueries, height, width, 4}, opts); - - ludusCopyBatchResultsVk(NVDR_CTX_PARAMS, s, stream, - out.data_ptr(), width, height, numQueries); - - return out; -} - -//------------------------------------------------------------------------ -// Render to staging (for double-buffered async output) -//------------------------------------------------------------------------ - -std::tuple ludus_timestamped_render_to_staging_vk( - LudusTimestampedVkStateWrapper& stateWrapper, - torch::Tensor queries, torch::Tensor camera_poses, - std::tuple resolution) -{ - const at::cuda::OptionalCUDAGuard device_guard(device_of(queries)); - cudaStream_t stream = at::cuda::getCurrentCUDAStream(); - LudusTimestampedVkState& s = *stateWrapper.pState; - - NVDR_CHECK_DEVICE(queries, camera_poses); - NVDR_CHECK_CONTIGUOUS(queries, camera_poses); - - int numQueries = queries.size(0); - int height = std::get<0>(resolution); - int width = std::get<1>(resolution); - - torch::Tensor poses_rdf = flu_to_rdf(camera_poses).transpose(-2, -1).contiguous(); - - ludusRenderBatchVk(NVDR_CTX_PARAMS, s, stream, - reinterpret_cast(queries.data_ptr()), - reinterpret_cast(poses_rdf.data_ptr()), - numQueries, width, height); - - int stagingIdx = ludusCopyBatchResultsToStagingVk(NVDR_CTX_PARAMS, s, stream, - width, height, numQueries); - - return std::make_tuple(stagingIdx, true); -} - -torch::Tensor ludus_timestamped_get_staging_data_vk( - LudusTimestampedVkStateWrapper& stateWrapper, int stagingIdx) -{ - LudusTimestampedVkState& s = *stateWrapper.pState; - int w = s.stagingWidth, h = s.stagingHeight, n = s.stagingNumQueries; - auto opts = torch::TensorOptions().dtype(torch::kUInt8).device(torch::kCUDA, stateWrapper.cudaDeviceIdx); - torch::Tensor out = torch::empty({n, h, w, 4}, opts); - - ludusCopyStagingToOutputVk(NVDR_CTX_PARAMS, s, stagingIdx, - out.data_ptr(), w, h, n); - return out; -} - -py::list ludus_timestamped_encode_jpeg_batch_staging_vk( - LudusTimestampedVkStateWrapper& stateWrapper, int stagingIdx, int quality) -{ - LudusTimestampedVkState& s = *stateWrapper.pState; - std::vector> jpegs; - ludusEncodeJpegBatchStagingVk(NVDR_CTX_PARAMS, s, stagingIdx, quality, jpegs); - - py::list result; - for (auto& [data, size] : jpegs) { - result.append(py::bytes(reinterpret_cast(data), size)); - free(data); - } - return result; -} - -bool ludus_timestamped_is_nvjpeg_available_vk(LudusTimestampedVkStateWrapper& /*stateWrapper*/) -{ - return true; -} - -//------------------------------------------------------------------------ -// pybind11 module -//------------------------------------------------------------------------ - -PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) { - pybind11::class_(m, "LudusTimestampedVkStateWrapper") - .def(pybind11::init()) - .def("upload_scene", &LudusTimestampedVkStateWrapper::uploadScene) - .def("upload_cameras", &LudusTimestampedVkStateWrapper::uploadCameras) - .def("upload_color_palette", &LudusTimestampedVkStateWrapper::uploadColorPalette) - .def("remove_scene", &LudusTimestampedVkStateWrapper::removeScene) - .def("clear_scenes", &LudusTimestampedVkStateWrapper::clearScenes) - .def("set_tessellation_threshold", &LudusTimestampedVkStateWrapper::setTessellationThreshold) - .def("set_max_tessellation_levels", &LudusTimestampedVkStateWrapper::setMaxTessellationLevels) - .def("set_line_widths", &LudusTimestampedVkStateWrapper::setLineWidths) - .def("set_resolution_scale", &LudusTimestampedVkStateWrapper::setResolutionScale) - .def("set_depth_scaling", &LudusTimestampedVkStateWrapper::setDepthScaling) - .def("set_cull_radius", &LudusTimestampedVkStateWrapper::setCullRadius) - .def("set_msaa_samples", &LudusTimestampedVkStateWrapper::setMsaaSamples) - .def("get_max_batch_size", &LudusTimestampedVkStateWrapper::getMaxBatchSize); - - m.def("ludus_timestamped_render_batch", &ludus_timestamped_render_batch_vk); - m.def("ludus_timestamped_render_to_staging", &ludus_timestamped_render_to_staging_vk); - m.def("ludus_timestamped_get_staging_data", &ludus_timestamped_get_staging_data_vk); - m.def("ludus_timestamped_is_nvjpeg_available", &ludus_timestamped_is_nvjpeg_available_vk); - m.def("ludus_timestamped_encode_jpeg_batch_staging", &ludus_timestamped_encode_jpeg_batch_staging_vk); -} diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/bindings/torch_types.h b/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/bindings/torch_types.h index d843c5487..c97692d87 100644 --- a/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/bindings/torch_types.h +++ b/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/bindings/torch_types.h @@ -14,6 +14,7 @@ // limitations under the License. #include "torch_common.inl" +#include #include //------------------------------------------------------------------------ @@ -42,6 +43,9 @@ class LudusCudaStateWrapper LudusCudaState* pState; int cudaDeviceIdx; + cudaEvent_t lastUseEvent; + bool hasLastUseEvent; + std::mutex stateMutex; }; //------------------------------------------------------------------------ diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/common/vkutil.cpp b/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/common/vkutil.cpp deleted file mode 100644 index 8ba6152fb..000000000 --- a/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/common/vkutil.cpp +++ /dev/null @@ -1,575 +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. - -#include "framework.h" -#include "vkutil.h" -#include -#include -#include - -// VK_CHECK / VK_DBG / ludus_vk_debug() live in vkutil.h (shared with the -// renderer translation unit). - -// --------------------------------------------------------------------------- -// Debug messenger (optional, only attached when validation layer is loaded). -// --------------------------------------------------------------------------- - -static VKAPI_ATTR VkBool32 VKAPI_CALL debugCallback( - VkDebugUtilsMessageSeverityFlagBitsEXT severity, - VkDebugUtilsMessageTypeFlagsEXT /*type*/, - const VkDebugUtilsMessengerCallbackDataEXT* data, - void* /*userData*/) -{ - if (severity >= VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT) { - fprintf(stderr, "[Vulkan] %s\n", data->pMessage); - fflush(stderr); - } - return VK_FALSE; -} - -// --------------------------------------------------------------------------- -// PCI bus-id based pairing with a CUDA device. -// --------------------------------------------------------------------------- - -static bool matchCudaDevice(VkInstance /*instance*/, VkPhysicalDevice physDev, int cudaDeviceIdx) -{ - cudaDeviceProp cudaProps; - if (cudaGetDeviceProperties(&cudaProps, cudaDeviceIdx) != cudaSuccess) - return false; - - VkPhysicalDeviceProperties2 props2 = {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2}; - VkPhysicalDevicePCIBusInfoPropertiesEXT pciInfo = {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT}; - props2.pNext = &pciInfo; - vkGetPhysicalDeviceProperties2(physDev, &props2); - - return pciInfo.pciDomain == (uint32_t)cudaProps.pciDomainID && - pciInfo.pciBus == (uint32_t)cudaProps.pciBusID && - pciInfo.pciDevice == (uint32_t)cudaProps.pciDeviceID; -} - -// --------------------------------------------------------------------------- -// Context creation -// --------------------------------------------------------------------------- - -VkContext createVkContext(int cudaDeviceIdx) -{ - VkContext ctx = {}; - ctx.cudaDeviceIdx = cudaDeviceIdx; - - VkApplicationInfo appInfo = {VK_STRUCTURE_TYPE_APPLICATION_INFO}; - appInfo.pApplicationName = "ludus-renderer"; - appInfo.apiVersion = VK_API_VERSION_1_3; - - std::vector instExts = { - VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, - VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME, - VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME, - }; - std::vector layers; - -#ifndef NDEBUG - uint32_t layerCount = 0; - vkEnumerateInstanceLayerProperties(&layerCount, nullptr); - std::vector availLayers(layerCount); - vkEnumerateInstanceLayerProperties(&layerCount, availLayers.data()); - for (auto& l : availLayers) { - if (strcmp(l.layerName, "VK_LAYER_KHRONOS_validation") == 0) { - layers.push_back("VK_LAYER_KHRONOS_validation"); - instExts.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); - break; - } - } -#endif - - VkInstanceCreateInfo instCI = {VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO}; - instCI.pApplicationInfo = &appInfo; - instCI.enabledExtensionCount = (uint32_t)instExts.size(); - instCI.ppEnabledExtensionNames = instExts.data(); - instCI.enabledLayerCount = (uint32_t)layers.size(); - instCI.ppEnabledLayerNames = layers.data(); - VK_CHECK(vkCreateInstance(&instCI, nullptr, &ctx.instance)); - - uint32_t devCount = 0; - vkEnumeratePhysicalDevices(ctx.instance, &devCount, nullptr); - TORCH_CHECK(devCount > 0, "No Vulkan physical devices found"); - std::vector physDevs(devCount); - vkEnumeratePhysicalDevices(ctx.instance, &devCount, physDevs.data()); - - ctx.physicalDevice = VK_NULL_HANDLE; - if (cudaDeviceIdx >= 0) { - for (auto& pd : physDevs) { - if (matchCudaDevice(ctx.instance, pd, cudaDeviceIdx)) { - ctx.physicalDevice = pd; - break; - } - } - } - if (ctx.physicalDevice == VK_NULL_HANDLE) { - ctx.physicalDevice = physDevs[0]; - if (cudaDeviceIdx >= 0) - fprintf(stderr, "[Vulkan] Could not match CUDA device %d, falling back to first Vulkan device\n", cudaDeviceIdx); - } - - VkPhysicalDeviceProperties devProps; - vkGetPhysicalDeviceProperties(ctx.physicalDevice, &devProps); - VK_DBG("[Vulkan] Device: %s (apiVersion %u.%u.%u)\n", - devProps.deviceName, - VK_API_VERSION_MAJOR(devProps.apiVersion), - VK_API_VERSION_MINOR(devProps.apiVersion), - VK_API_VERSION_PATCH(devProps.apiVersion)); - - vkGetPhysicalDeviceMemoryProperties(ctx.physicalDevice, &ctx.memProperties); - - uint32_t extCount = 0; - vkEnumerateDeviceExtensionProperties(ctx.physicalDevice, nullptr, &extCount, nullptr); - std::vector availExts(extCount); - vkEnumerateDeviceExtensionProperties(ctx.physicalDevice, nullptr, &extCount, availExts.data()); - - auto hasExt = [&](const char* name) { - for (auto& e : availExts) - if (strcmp(e.extensionName, name) == 0) return true; - return false; - }; - - ctx.hasMeshShader = hasExt(VK_EXT_MESH_SHADER_EXTENSION_NAME); - ctx.hasFragmentShaderBarycentric = hasExt(VK_KHR_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME); - ctx.hasExternalMemory = hasExt(VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME); - - TORCH_CHECK(ctx.hasMeshShader, - "VK_EXT_mesh_shader is required but not supported by Vulkan device '", - devProps.deviceName, "'"); - TORCH_CHECK(ctx.hasExternalMemory, - "VK_KHR_external_memory_fd is required for CUDA interop"); - - uint32_t qfCount = 0; - vkGetPhysicalDeviceQueueFamilyProperties(ctx.physicalDevice, &qfCount, nullptr); - std::vector qfProps(qfCount); - vkGetPhysicalDeviceQueueFamilyProperties(ctx.physicalDevice, &qfCount, qfProps.data()); - - ctx.graphicsQueueFamily = UINT32_MAX; - for (uint32_t i = 0; i < qfCount; i++) { - if (qfProps[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) { - ctx.graphicsQueueFamily = i; - break; - } - } - TORCH_CHECK(ctx.graphicsQueueFamily != UINT32_MAX, "No graphics queue family found"); - - float queuePriority = 1.0f; - VkDeviceQueueCreateInfo queueCI = {VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO}; - queueCI.queueFamilyIndex = ctx.graphicsQueueFamily; - queueCI.queueCount = 1; - queueCI.pQueuePriorities = &queuePriority; - - std::vector devExts = { - VK_EXT_MESH_SHADER_EXTENSION_NAME, - VK_KHR_SPIRV_1_4_EXTENSION_NAME, - VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME, - VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME, - VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME, - VK_EXT_PCI_BUS_INFO_EXTENSION_NAME, - VK_KHR_MULTIVIEW_EXTENSION_NAME, - }; - if (ctx.hasFragmentShaderBarycentric) - devExts.push_back(VK_KHR_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME); - - // Feature chain: VK_EXT_mesh_shader requires its own features struct, - // plus maintenance4 to allow the task/mesh shader stages to express - // workgroup sizes via local_size_x_id constants. - VkPhysicalDeviceMeshShaderFeaturesEXT meshFeatures = {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_EXT}; - meshFeatures.taskShader = VK_TRUE; - meshFeatures.meshShader = VK_TRUE; - - VkPhysicalDeviceMaintenance4Features maint4 = {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES}; - maint4.maintenance4 = VK_TRUE; - meshFeatures.pNext = &maint4; - - VkPhysicalDeviceMultiviewFeatures mvFeatures = {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES}; - mvFeatures.multiview = VK_TRUE; - maint4.pNext = &mvFeatures; - - VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR barycentricFeatures = {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR}; - barycentricFeatures.fragmentShaderBarycentric = VK_TRUE; - mvFeatures.pNext = ctx.hasFragmentShaderBarycentric ? (void*)&barycentricFeatures : nullptr; - - VkPhysicalDeviceFeatures2 features2 = {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2}; - features2.features.multiDrawIndirect = VK_TRUE; - features2.features.fillModeNonSolid = VK_TRUE; - features2.features.shaderInt64 = VK_TRUE; - features2.pNext = &meshFeatures; - - VkDeviceCreateInfo devCI = {VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO}; - devCI.queueCreateInfoCount = 1; - devCI.pQueueCreateInfos = &queueCI; - devCI.enabledExtensionCount = (uint32_t)devExts.size(); - devCI.ppEnabledExtensionNames = devExts.data(); - devCI.pNext = &features2; - - VK_CHECK(vkCreateDevice(ctx.physicalDevice, &devCI, nullptr, &ctx.device)); - vkGetDeviceQueue(ctx.device, ctx.graphicsQueueFamily, 0, &ctx.graphicsQueue); - - ctx.pfnCmdDrawMeshTasksEXT = (PFN_vkCmdDrawMeshTasksEXT) - vkGetDeviceProcAddr(ctx.device, "vkCmdDrawMeshTasksEXT"); - TORCH_CHECK(ctx.pfnCmdDrawMeshTasksEXT != nullptr, - "vkCmdDrawMeshTasksEXT not available even though VK_EXT_mesh_shader is reported"); - - VkCommandPoolCreateInfo poolCI = {VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO}; - poolCI.queueFamilyIndex = ctx.graphicsQueueFamily; - poolCI.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT; - VK_CHECK(vkCreateCommandPool(ctx.device, &poolCI, nullptr, &ctx.commandPool)); - - VkCommandBufferAllocateInfo allocCI = {VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO}; - allocCI.commandPool = ctx.commandPool; - allocCI.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY; - allocCI.commandBufferCount = 1; - VK_CHECK(vkAllocateCommandBuffers(ctx.device, &allocCI, &ctx.commandBuffer)); - - VkFenceCreateInfo fenceCI = {VK_STRUCTURE_TYPE_FENCE_CREATE_INFO}; - fenceCI.flags = VK_FENCE_CREATE_SIGNALED_BIT; - VK_CHECK(vkCreateFence(ctx.device, &fenceCI, nullptr, &ctx.fence)); - - VK_DBG("[Vulkan] Context ready (mesh_shader=EXT, barycentric=%s)\n", - ctx.hasFragmentShaderBarycentric ? "KHR" : "off"); - - return ctx; -} - -void destroyVkContext(VkContext& ctx) -{ - if (ctx.device) { - vkDeviceWaitIdle(ctx.device); - if (ctx.fence) vkDestroyFence(ctx.device, ctx.fence, nullptr); - if (ctx.commandPool) vkDestroyCommandPool(ctx.device, ctx.commandPool, nullptr); - vkDestroyDevice(ctx.device, nullptr); - } - if (ctx.instance) vkDestroyInstance(ctx.instance, nullptr); - memset(&ctx, 0, sizeof(VkContext)); -} - -// --------------------------------------------------------------------------- -// Memory helpers -// --------------------------------------------------------------------------- - -uint32_t findMemoryType( - const VkPhysicalDeviceMemoryProperties& memProps, - uint32_t typeFilter, - VkMemoryPropertyFlags properties) -{ - for (uint32_t i = 0; i < memProps.memoryTypeCount; i++) { - if ((typeFilter & (1 << i)) && - (memProps.memoryTypes[i].propertyFlags & properties) == properties) - return i; - } - TORCH_CHECK(false, "Failed to find suitable Vulkan memory type"); - return UINT32_MAX; -} - -// --------------------------------------------------------------------------- -// External buffer (SSBO with CUDA import) -// --------------------------------------------------------------------------- - -VkExternalBuffer createExternalBuffer( - VkContext& ctx, - VkDeviceSize size, - VkBufferUsageFlags usage, - bool cudaImportable) -{ - VkExternalBuffer buf = {}; - buf.size = size; - buf.memFd = -1; - - if (size == 0) return buf; - - VkExternalMemoryBufferCreateInfo extBufCI = {VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO}; - extBufCI.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT; - - VkBufferCreateInfo bufCI = {VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO}; - bufCI.size = size; - bufCI.usage = usage; - bufCI.sharingMode = VK_SHARING_MODE_EXCLUSIVE; - if (cudaImportable) bufCI.pNext = &extBufCI; - - VK_CHECK(vkCreateBuffer(ctx.device, &bufCI, nullptr, &buf.buffer)); - - VkMemoryRequirements memReqs; - vkGetBufferMemoryRequirements(ctx.device, buf.buffer, &memReqs); - - VkExportMemoryAllocateInfo exportAI = {VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO}; - exportAI.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT; - - VkMemoryAllocateInfo allocInfo = {VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO}; - allocInfo.allocationSize = memReqs.size; - allocInfo.memoryTypeIndex = findMemoryType(ctx.memProperties, memReqs.memoryTypeBits, - VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); - if (cudaImportable) allocInfo.pNext = &exportAI; - - VK_CHECK(vkAllocateMemory(ctx.device, &allocInfo, nullptr, &buf.memory)); - VK_CHECK(vkBindBufferMemory(ctx.device, buf.buffer, buf.memory, 0)); - - if (cudaImportable) { - VkMemoryGetFdInfoKHR getFdInfo = {VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR}; - getFdInfo.memory = buf.memory; - getFdInfo.handleType = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT; - - auto vkGetMemoryFdKHR = (PFN_vkGetMemoryFdKHR)vkGetDeviceProcAddr(ctx.device, "vkGetMemoryFdKHR"); - TORCH_CHECK(vkGetMemoryFdKHR, "vkGetMemoryFdKHR not available"); - VK_CHECK(vkGetMemoryFdKHR(ctx.device, &getFdInfo, &buf.memFd)); - - CUDA_EXTERNAL_MEMORY_HANDLE_DESC memDesc = {}; - memDesc.type = CU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD; - memDesc.handle.fd = buf.memFd; - memDesc.size = memReqs.size; - CUresult cr = cuImportExternalMemory(&buf.cuExtMem, &memDesc); - TORCH_CHECK(cr == CUDA_SUCCESS, "cuImportExternalMemory failed: ", (int)cr); - - CUDA_EXTERNAL_MEMORY_BUFFER_DESC bufDesc = {}; - bufDesc.offset = 0; - bufDesc.size = size; - cr = cuExternalMemoryGetMappedBuffer(&buf.cuDevPtr, buf.cuExtMem, &bufDesc); - TORCH_CHECK(cr == CUDA_SUCCESS, "cuExternalMemoryGetMappedBuffer failed: ", (int)cr); - } - - return buf; -} - -void destroyExternalBuffer(VkContext& ctx, VkExternalBuffer& buf) -{ - if (buf.cuExtMem) { cuDestroyExternalMemory(buf.cuExtMem); buf.cuExtMem = 0; } - if (buf.buffer) { vkDestroyBuffer(ctx.device, buf.buffer, nullptr); buf.buffer = VK_NULL_HANDLE; } - if (buf.memory) { vkFreeMemory(ctx.device, buf.memory, nullptr); buf.memory = VK_NULL_HANDLE; } - buf.cuDevPtr = 0; - buf.size = 0; - buf.memFd = -1; -} - -void resizeExternalBuffer( - VkContext& ctx, - VkExternalBuffer& buf, - VkDeviceSize newSize, - VkBufferUsageFlags usage, - bool cudaImportable) -{ - bool needsCuda = cudaImportable && (buf.cuDevPtr == 0); - if (buf.size >= newSize && buf.buffer != VK_NULL_HANDLE && !needsCuda) return; - destroyExternalBuffer(ctx, buf); - buf = createExternalBuffer(ctx, newSize, usage, cudaImportable); -} - -// --------------------------------------------------------------------------- -// External image (color/depth with CUDA import for color only) -// --------------------------------------------------------------------------- - -VkExternalImage createExternalImage( - VkContext& ctx, - uint32_t width, uint32_t height, uint32_t layers, - VkFormat format, - VkImageUsageFlags usage, - VkSampleCountFlagBits samples, - bool cudaImportable) -{ - VkExternalImage img = {}; - img.width = width; - img.height = height; - img.layers = layers; - img.format = format; - img.memFd = -1; - - VkExternalMemoryImageCreateInfo extImgCI = {VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO}; - extImgCI.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT; - - VkImageCreateInfo imgCI = {VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO}; - imgCI.imageType = VK_IMAGE_TYPE_2D; - imgCI.format = format; - imgCI.extent = {width, height, 1}; - imgCI.mipLevels = 1; - imgCI.arrayLayers = layers; - imgCI.samples = samples; - imgCI.tiling = VK_IMAGE_TILING_OPTIMAL; - imgCI.usage = usage; - imgCI.sharingMode = VK_SHARING_MODE_EXCLUSIVE; - imgCI.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; - if (cudaImportable) imgCI.pNext = &extImgCI; - - VK_CHECK(vkCreateImage(ctx.device, &imgCI, nullptr, &img.image)); - - VkMemoryRequirements memReqs; - vkGetImageMemoryRequirements(ctx.device, img.image, &memReqs); - img.size = memReqs.size; - - VkExportMemoryAllocateInfo exportAI = {VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO}; - exportAI.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT; - - VkMemoryAllocateInfo allocInfo = {VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO}; - allocInfo.allocationSize = memReqs.size; - allocInfo.memoryTypeIndex = findMemoryType(ctx.memProperties, memReqs.memoryTypeBits, - VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); - if (cudaImportable) allocInfo.pNext = &exportAI; - - VK_CHECK(vkAllocateMemory(ctx.device, &allocInfo, nullptr, &img.memory)); - VK_CHECK(vkBindImageMemory(ctx.device, img.image, img.memory, 0)); - - VkImageAspectFlags aspect = VK_IMAGE_ASPECT_COLOR_BIT; - if (format == VK_FORMAT_D24_UNORM_S8_UINT || format == VK_FORMAT_D32_SFLOAT_S8_UINT) - aspect = VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT; - - VkImageViewCreateInfo viewCI = {VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO}; - viewCI.image = img.image; - viewCI.viewType = VK_IMAGE_VIEW_TYPE_2D_ARRAY; - viewCI.format = format; - viewCI.subresourceRange.aspectMask = aspect; - viewCI.subresourceRange.baseMipLevel = 0; - viewCI.subresourceRange.levelCount = 1; - viewCI.subresourceRange.baseArrayLayer = 0; - viewCI.subresourceRange.layerCount = layers; - VK_CHECK(vkCreateImageView(ctx.device, &viewCI, nullptr, &img.imageView)); - - if (cudaImportable && aspect == VK_IMAGE_ASPECT_COLOR_BIT) { - auto vkGetMemoryFdKHR = (PFN_vkGetMemoryFdKHR)vkGetDeviceProcAddr(ctx.device, "vkGetMemoryFdKHR"); - VkMemoryGetFdInfoKHR getFdInfo = {VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR}; - getFdInfo.memory = img.memory; - getFdInfo.handleType = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT; - VK_CHECK(vkGetMemoryFdKHR(ctx.device, &getFdInfo, &img.memFd)); - - CUDA_EXTERNAL_MEMORY_HANDLE_DESC memDesc = {}; - memDesc.type = CU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD; - memDesc.handle.fd = img.memFd; - memDesc.size = memReqs.size; - CUresult cr = cuImportExternalMemory(&img.cuExtMem, &memDesc); - TORCH_CHECK(cr == CUDA_SUCCESS, "cuImportExternalMemory (image) failed: ", (int)cr); - - CUDA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC mipDesc = {}; - mipDesc.offset = 0; - mipDesc.arrayDesc.Width = width; - mipDesc.arrayDesc.Height = height; - mipDesc.arrayDesc.Depth = layers; - // Layered images (arrayLayers > 1) need CUDA_ARRAY3D_LAYERED, else CUDA - // reads Depth as a 3D volume and the import fails with INVALID_VALUE. - if (layers > 1) - mipDesc.arrayDesc.Flags = CUDA_ARRAY3D_LAYERED; - if (format == VK_FORMAT_R8G8B8A8_UNORM) { - mipDesc.arrayDesc.Format = CU_AD_FORMAT_UNSIGNED_INT8; - mipDesc.arrayDesc.NumChannels = 4; - } - mipDesc.numLevels = 1; - cr = cuExternalMemoryGetMappedMipmappedArray(&img.cuMipArray, img.cuExtMem, &mipDesc); - TORCH_CHECK(cr == CUDA_SUCCESS, "cuExternalMemoryGetMappedMipmappedArray failed: ", (int)cr); - - cr = cuMipmappedArrayGetLevel(&img.cuArray, img.cuMipArray, 0); - TORCH_CHECK(cr == CUDA_SUCCESS, "cuMipmappedArrayGetLevel failed: ", (int)cr); - } - - return img; -} - -void destroyExternalImage(VkContext& ctx, VkExternalImage& img) -{ - if (img.cuMipArray) { cuMipmappedArrayDestroy(img.cuMipArray); img.cuMipArray = 0; } - if (img.cuExtMem) { cuDestroyExternalMemory(img.cuExtMem); img.cuExtMem = 0; } - if (img.imageView) { vkDestroyImageView(ctx.device, img.imageView, nullptr); img.imageView = VK_NULL_HANDLE; } - if (img.image) { vkDestroyImage(ctx.device, img.image, nullptr); img.image = VK_NULL_HANDLE; } - if (img.memory) { vkFreeMemory(ctx.device, img.memory, nullptr); img.memory = VK_NULL_HANDLE; } - img.cuArray = 0; - img.memFd = -1; -} - -// --------------------------------------------------------------------------- -// Command buffer helpers -// --------------------------------------------------------------------------- - -VkCommandBuffer beginSingleTimeCommands(VkContext& ctx) -{ - VkCommandBufferAllocateInfo allocCI = {VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO}; - allocCI.commandPool = ctx.commandPool; - allocCI.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY; - allocCI.commandBufferCount = 1; - - VkCommandBuffer cmd; - VK_CHECK(vkAllocateCommandBuffers(ctx.device, &allocCI, &cmd)); - - VkCommandBufferBeginInfo beginCI = {VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO}; - beginCI.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT; - VK_CHECK(vkBeginCommandBuffer(cmd, &beginCI)); - return cmd; -} - -void endSingleTimeCommands(VkContext& ctx, VkCommandBuffer cmd) -{ - VK_CHECK(vkEndCommandBuffer(cmd)); - - VkSubmitInfo submitInfo = {VK_STRUCTURE_TYPE_SUBMIT_INFO}; - submitInfo.commandBufferCount = 1; - submitInfo.pCommandBuffers = &cmd; - - VkFence tempFence; - VkFenceCreateInfo fenceCI = {VK_STRUCTURE_TYPE_FENCE_CREATE_INFO}; - VK_CHECK(vkCreateFence(ctx.device, &fenceCI, nullptr, &tempFence)); - VK_CHECK(vkQueueSubmit(ctx.graphicsQueue, 1, &submitInfo, tempFence)); - VK_CHECK(vkWaitForFences(ctx.device, 1, &tempFence, VK_TRUE, UINT64_MAX)); - - vkDestroyFence(ctx.device, tempFence, nullptr); - vkFreeCommandBuffers(ctx.device, ctx.commandPool, 1, &cmd); -} - -void transitionImageLayout( - VkCommandBuffer cmd, - VkImage image, - VkImageLayout oldLayout, - VkImageLayout newLayout, - uint32_t layerCount, - VkImageAspectFlags aspect) -{ - VkImageMemoryBarrier barrier = {VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER}; - barrier.oldLayout = oldLayout; - barrier.newLayout = newLayout; - barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; - barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; - barrier.image = image; - barrier.subresourceRange.aspectMask = aspect; - barrier.subresourceRange.baseMipLevel = 0; - barrier.subresourceRange.levelCount = 1; - barrier.subresourceRange.baseArrayLayer = 0; - barrier.subresourceRange.layerCount = layerCount; - - VkPipelineStageFlags srcStage, dstStage; - if (oldLayout == VK_IMAGE_LAYOUT_UNDEFINED) { - barrier.srcAccessMask = 0; - srcStage = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT; - } else { - barrier.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; - srcStage = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT; - } - - if (newLayout == VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL) { - barrier.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; - dstStage = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; - } else if (newLayout == VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL) { - barrier.dstAccessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; - dstStage = VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT; - } else if (newLayout == VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL) { - barrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT; - dstStage = VK_PIPELINE_STAGE_TRANSFER_BIT; - } else if (newLayout == VK_IMAGE_LAYOUT_GENERAL) { - barrier.dstAccessMask = VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT; - dstStage = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT; - } else { - barrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT; - dstStage = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT; - } - - vkCmdPipelineBarrier(cmd, srcStage, dstStage, 0, 0, nullptr, 0, nullptr, 1, &barrier); -} - -// CUDA<->Vulkan handoff is fence-only (cudaStreamSynchronize -> vkQueueSubmit -// -> vkWaitForFences); no external-semaphore path is used. diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/common/vkutil.h b/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/common/vkutil.h deleted file mode 100644 index 16842c250..000000000 --- a/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/common/vkutil.h +++ /dev/null @@ -1,159 +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. - -#pragma once - -#include -#include -#include -#include -#include -#include -#include - -// --------------------------------------------------------------------------- -// Shared helpers for the Vulkan backend translation units (vkutil.cpp and -// ludus_timestamped_vk.cpp). Defined here so they aren't copy-pasted per file. -// --------------------------------------------------------------------------- - -// Raise via torch's TORCH_CHECK (from framework.h, included by each .cpp before -// this header) when a Vulkan call doesn't return VK_SUCCESS. -#define VK_CHECK(call) do { \ - VkResult _r = (call); \ - TORCH_CHECK(_r == VK_SUCCESS, #call " failed with VkResult ", (int)_r); \ -} while(0) - -// Verbose "[Vulkan] ..." diagnostics, gated on LUDUS_VK_DEBUG=1 so device and -// per-frame traces stay out of production output. -inline bool ludus_vk_debug() { - static int cached = -1; - if (cached == -1) { - const char* e = getenv("LUDUS_VK_DEBUG"); - cached = (e && *e && *e != '0') ? 1 : 0; - } - return cached != 0; -} - -#define VK_DBG(...) do { if (ludus_vk_debug()) { fprintf(stderr, __VA_ARGS__); fflush(stderr); } } while(0) - -// --------------------------------------------------------------------------- -// VkContext: instance + physical device + logical device + queue + command -// pool. Targets Vulkan 1.3 with VK_EXT_mesh_shader for hardware mesh shading. -// --------------------------------------------------------------------------- - -struct VkContext -{ - VkInstance instance; - VkPhysicalDevice physicalDevice; - VkDevice device; - VkQueue graphicsQueue; - uint32_t graphicsQueueFamily; - VkCommandPool commandPool; - VkCommandBuffer commandBuffer; - VkFence fence; - VkPhysicalDeviceMemoryProperties memProperties; - int cudaDeviceIdx; - - // Device capabilities (checked at init) - bool hasMeshShader; // VK_EXT_mesh_shader - bool hasFragmentShaderBarycentric; - bool hasExternalMemory; - - // Cached EXT entry point (resolved at device creation) - PFN_vkCmdDrawMeshTasksEXT pfnCmdDrawMeshTasksEXT; -}; - -// Vulkan buffer with optional CUDA-importable external memory backing. -// When cudaImportable is true the underlying allocation is exported as -// VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT and imported into CUDA so -// that PyTorch tensors can write directly into the buffer. -struct VkExternalBuffer -{ - VkBuffer buffer; - VkDeviceMemory memory; - VkDeviceSize size; - CUexternalMemory cuExtMem; - CUdeviceptr cuDevPtr; - int memFd; // POSIX fd for external memory (-1 if not external) -}; - -// Vulkan image with optional CUDA-importable external memory backing. -struct VkExternalImage -{ - VkImage image; - VkDeviceMemory memory; - VkImageView imageView; - VkDeviceSize size; - uint32_t width; - uint32_t height; - uint32_t layers; - VkFormat format; - CUexternalMemory cuExtMem; - CUmipmappedArray cuMipArray; - CUarray cuArray; // First level of mipmap - int memFd; -}; - -// Context lifecycle. -VkContext createVkContext(int cudaDeviceIdx); -void destroyVkContext(VkContext& ctx); - -// Buffer management with CUDA external memory. -VkExternalBuffer createExternalBuffer( - VkContext& ctx, - VkDeviceSize size, - VkBufferUsageFlags usage, - bool cudaImportable -); -void destroyExternalBuffer(VkContext& ctx, VkExternalBuffer& buf); -void resizeExternalBuffer( - VkContext& ctx, - VkExternalBuffer& buf, - VkDeviceSize newSize, - VkBufferUsageFlags usage, - bool cudaImportable -); - -// Image management with CUDA external memory. -VkExternalImage createExternalImage( - VkContext& ctx, - uint32_t width, uint32_t height, uint32_t layers, - VkFormat format, - VkImageUsageFlags usage, - VkSampleCountFlagBits samples, - bool cudaImportable -); -void destroyExternalImage(VkContext& ctx, VkExternalImage& img); - -// Memory type helpers. -uint32_t findMemoryType( - const VkPhysicalDeviceMemoryProperties& memProps, - uint32_t typeFilter, - VkMemoryPropertyFlags properties -); - -// Single-use command buffer helpers. -VkCommandBuffer beginSingleTimeCommands(VkContext& ctx); -void endSingleTimeCommands(VkContext& ctx, VkCommandBuffer cmd); - -// Image layout transitions. -void transitionImageLayout( - VkCommandBuffer cmd, - VkImage image, - VkImageLayout oldLayout, - VkImageLayout newLayout, - uint32_t layerCount, - VkImageAspectFlags aspect = VK_IMAGE_ASPECT_COLOR_BIT -); diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/physx/CMakeLists.txt b/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/physx/CMakeLists.txt new file mode 100644 index 000000000..afca909fa --- /dev/null +++ b/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/physx/CMakeLists.txt @@ -0,0 +1,68 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +cmake_minimum_required(VERSION 3.25) +project(ludus_physx_native LANGUAGES C CXX) + +if(NOT DEFINED PHYSX_ROOT_DIR) + message(FATAL_ERROR "PHYSX_ROOT_DIR must point at the pinned PhysX source tree") +endif() +if(NOT DEFINED PYBIND11_INCLUDE_DIR) + message(FATAL_ERROR "PYBIND11_INCLUDE_DIR must point at Torch's pybind11 headers") +endif() + +set(PX_BUILDSNIPPETS OFF CACHE BOOL "" FORCE) +set(PX_BUILDPVDRUNTIME OFF CACHE BOOL "" FORCE) +set(PX_GENERATE_GPU_PROJECTS OFF CACHE BOOL "" FORCE) +set(PX_GENERATE_GPU_PROJECTS_ONLY OFF CACHE BOOL "" FORCE) +set(PX_GENERATE_STATIC_LIBRARIES ON CACHE BOOL "" FORCE) +set(PX_CMAKE_SUPPRESS_REGENERATION ON CACHE BOOL "" FORCE) +set(NV_USE_STATIC_WINCRT OFF CACHE BOOL "" FORCE) +set(NV_USE_DEBUG_WINCRT OFF CACHE BOOL "" FORCE) + +if(WIN32) + set(TARGET_BUILD_PLATFORM windows CACHE STRING "" FORCE) +elseif(UNIX) + set(TARGET_BUILD_PLATFORM linux CACHE STRING "" FORCE) +else() + message(FATAL_ERROR "Ludus native PhysX supports Windows and Linux") +endif() + +set(PX_OUTPUT_LIB_DIR "${CMAKE_BINARY_DIR}/physx-lib" CACHE PATH "" FORCE) +set(PX_OUTPUT_BIN_DIR "${CMAKE_BINARY_DIR}/physx-bin" CACHE PATH "" FORCE) +add_subdirectory("${PHYSX_ROOT_DIR}/compiler/public" physx-build) + +find_package(Python3 REQUIRED COMPONENTS Interpreter Development.Module) +Python3_add_library(ludus_physx_native MODULE WITH_SOABI bindings.cpp) +target_compile_features(ludus_physx_native PRIVATE cxx_std_17) +target_include_directories( + ludus_physx_native + PRIVATE + "${PHYSX_ROOT_DIR}/include" + "${PYBIND11_INCLUDE_DIR}" +) +target_link_libraries( + ludus_physx_native + PRIVATE + PhysX + PhysXCommon + PhysXExtensions + PhysXCooking + PhysXFoundation +) +target_compile_definitions(ludus_physx_native PRIVATE PX_PHYSX_STATIC_LIB) +set_target_properties( + ludus_physx_native + PROPERTIES + LIBRARY_OUTPUT_DIRECTORY "${LUDUS_MODULE_OUTPUT_DIR}" + RUNTIME_OUTPUT_DIRECTORY "${LUDUS_MODULE_OUTPUT_DIR}" +) +foreach(configuration Debug Release RelWithDebInfo MinSizeRel) + string(TOUPPER "${configuration}" configuration_upper) + set_target_properties( + ludus_physx_native + PROPERTIES + "LIBRARY_OUTPUT_DIRECTORY_${configuration_upper}" "${LUDUS_MODULE_OUTPUT_DIR}" + "RUNTIME_OUTPUT_DIRECTORY_${configuration_upper}" "${LUDUS_MODULE_OUTPUT_DIR}" + ) +endforeach() diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/physx/bindings.cpp b/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/physx/bindings.cpp new file mode 100644 index 000000000..082b63ce8 --- /dev/null +++ b/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/physx/bindings.cpp @@ -0,0 +1,1366 @@ +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace py = pybind11; +using namespace physx; + +namespace { + +constexpr std::size_t kStateWidth = 13; +constexpr std::size_t kTrackStateWidth = 10; +constexpr float kMaxOffRoadYawRad = 0.4363323129985824f; + +PxFilterFlags vehicleFilterShader( + PxFilterObjectAttributes, + PxFilterData, + PxFilterObjectAttributes, + PxFilterData, + PxPairFlags& pairFlags, + const void*, + PxU32) +{ + pairFlags = PxPairFlag::eCONTACT_DEFAULT | PxPairFlag::eDETECT_CCD_CONTACT; + return PxFilterFlag::eDEFAULT; +} + +PxTransform poseFromArray(const py::array_t& values) +{ + if (values.ndim() != 1 || values.shape(0) != 7) + throw std::invalid_argument("pose must have shape [7]"); + const float* p = values.data(); + PxQuat quaternion(p[3], p[4], p[5], p[6]); + quaternion.normalize(); + return PxTransform(PxVec3(p[0], p[1], p[2]), quaternion); +} + +PxVec3 vectorFromArray( + const py::array_t& values, + const char* name) +{ + if (values.ndim() != 1 || values.shape(0) != 3) + throw std::invalid_argument(std::string(name) + " must have shape [3]"); + return PxVec3(values.data()[0], values.data()[1], values.data()[2]); +} + +struct BodyRecord { + PxRigidDynamic* actor = nullptr; + PxMaterial* material = nullptr; + std::size_t slot = 0; + PxVec3 halfExtents{0.0f}; + float mass = 0.0f; + float restitution = 0.0f; + bool collisionActive = false; + bool detached = false; + bool trackVisible = true; + bool trackDriveEnabled = true; + bool overlappingEgo = false; + std::vector timestampsUs; + std::vector positions; + std::vector orientations; + double maxExtrapolationUs = -1.0; + std::array suspensionMounts{}; + float wheelRadius = 0.0f; + float suspensionRestLength = 0.0f; + float suspensionMaxCompression = 0.0f; + float springStiffness = 0.0f; + float damperRate = 0.0f; + float tireFriction = 0.0f; + float corneringStiffness = 0.0f; + float rollingResistance = 0.0f; + float maxEngineForce = 0.0f; + float maxBrakeForce = 0.0f; + float maxDriveSpeed = 0.0f; + bool driveIntentActive = false; + PxVec3 desiredLinearVelocity{0.0f}; + PxVec3 desiredAngularVelocity{0.0f}; + bool verticalTrackControl = false; + float targetHeight = 0.0f; + float targetVerticalVelocity = 0.0f; + + bool hasTrack() const { return !timestampsUs.empty(); } + bool hasVehicle() const { return wheelRadius > 0.0f; } +}; + +struct BarrierRecord { + PxRigidStatic* actor = nullptr; + PxMaterial* material = nullptr; + PxVec2 start{0.0f}; + PxVec2 end{0.0f}; + PxVec2 segment{0.0f}; + PxVec2 minimum{0.0f}; + PxVec2 maximum{0.0f}; + float lengthSquared = 0.0f; + float yaw = 0.0f; + float thickness = 0.0f; +}; + +struct TrackSample { + PxTransform transform; + PxVec3 velocity{0.0f}; + PxVec3 angularVelocity{0.0f}; +}; + +using StepClock = std::chrono::steady_clock; + +double elapsedMs(const StepClock::time_point& begin, const StepClock::time_point& end) +{ + return std::chrono::duration(end - begin).count(); +} + +float yawFromQuaternion(const PxQuat& quaternion) +{ + return std::atan2( + 2.0f * (quaternion.w * quaternion.z + quaternion.x * quaternion.y), + 1.0f - 2.0f * (quaternion.y * quaternion.y + quaternion.z * quaternion.z)); +} + +float wrappedAngle(float angle) +{ + return std::atan2(std::sin(angle), std::cos(angle)); +} + +class NativeScene { +public: + explicit NativeScene(std::size_t capacity) + : mCapacity(capacity), mStates(capacity * kStateWidth, 0.0f), + mTrackStates(capacity * kTrackStateWidth, 0.0f), + mIds(capacity, -1), mActive(capacity, 0), + mCollisionActive(capacity, 0), mDetached(capacity, 0), + mStruck(capacity, 0) + { + if (capacity == 0) + throw std::invalid_argument("capacity must be positive"); + mFoundation = PxCreateFoundation(PX_PHYSICS_VERSION, mAllocator, mError); + if (!mFoundation) + throw std::runtime_error("PxCreateFoundation failed"); + mPhysics = PxCreatePhysics( + PX_PHYSICS_VERSION, *mFoundation, PxTolerancesScale(), false, nullptr); + if (!mPhysics) + throw std::runtime_error("PxCreatePhysics failed"); + if (!PxInitExtensions(*mPhysics, nullptr)) + throw std::runtime_error("PxInitExtensions failed"); + mExtensionsInitialized = true; + mDispatcher = PxDefaultCpuDispatcherCreate(2); + if (!mDispatcher) + throw std::runtime_error("PxDefaultCpuDispatcherCreate failed"); + + PxSceneDesc description(mPhysics->getTolerancesScale()); + description.gravity = PxVec3(0.0f, 0.0f, -9.81f); + description.cpuDispatcher = mDispatcher; + description.filterShader = vehicleFilterShader; + description.broadPhaseType = PxBroadPhaseType::eABP; + description.solverType = PxSolverType::eTGS; + description.flags |= PxSceneFlag::eENABLE_CCD; + mScene = mPhysics->createScene(description); + if (!mScene) + throw std::runtime_error("PxPhysics::createScene failed"); + + addGround(); + } + + NativeScene(const NativeScene&) = delete; + NativeScene& operator=(const NativeScene&) = delete; + + ~NativeScene() { close(); } + + std::size_t addBody( + std::int64_t objectId, + const py::array_t& halfExtents, + const py::array_t& chassisHalfExtents, + const py::array_t& chassisOffset, + float mass, + float friction, + float restitution, + const py::array_t& pose, + const py::array_t& linearVelocity, + const py::array_t& angularVelocity, + bool kinematic, + bool collisionEnabled, + const py::array_t& suspensionMounts, + float wheelRadius, + float suspensionRestLength, + float suspensionMaxCompression, + float springStiffness, + float damperRate, + float tireFriction, + float corneringStiffness, + float rollingResistance, + float maxEngineForce, + float maxBrakeForce, + float maxDriveSpeed) + { + ensureOpen(); + if (mBodies.count(objectId)) + throw std::invalid_argument("body id already exists"); + if (mass <= 0.0f) + throw std::invalid_argument("mass must be positive"); + const PxVec3 half = vectorFromArray(halfExtents, "half_extents"); + const PxVec3 chassisHalf = vectorFromArray( + chassisHalfExtents, "chassis_half_extents"); + const PxVec3 chassisCenter = vectorFromArray(chassisOffset, "chassis_offset"); + if (half.x <= 0.0f || half.y <= 0.0f || half.z <= 0.0f) + throw std::invalid_argument("half_extents must be positive"); + if (chassisHalf.x <= 0.0f || chassisHalf.y <= 0.0f || chassisHalf.z <= 0.0f) + throw std::invalid_argument("chassis_half_extents must be positive"); + const bool hasVehicle = suspensionMounts.ndim() == 2 + && suspensionMounts.shape(0) == 4 && suspensionMounts.shape(1) == 3; + const bool noVehicle = suspensionMounts.ndim() == 2 + && suspensionMounts.shape(0) == 0 && suspensionMounts.shape(1) == 3; + if (!hasVehicle && !noVehicle) + throw std::invalid_argument("suspension_mounts must have shape [4, 3] or [0, 3]"); + if (hasVehicle + && (wheelRadius <= 0.0f || suspensionRestLength <= 0.0f + || suspensionMaxCompression <= 0.0f || springStiffness <= 0.0f + || damperRate < 0.0f || tireFriction < 0.0f + || corneringStiffness < 0.0f || rollingResistance < 0.0f + || maxEngineForce <= 0.0f || maxBrakeForce <= 0.0f)) + throw std::invalid_argument("vehicle wheel and suspension parameters are invalid"); + if (!std::isfinite(maxDriveSpeed) || maxDriveSpeed < 0.0f) + throw std::invalid_argument( + "max_drive_speed must be finite and non-negative"); + + const std::size_t slot = allocateSlot(); + PxMaterial* material = mPhysics->createMaterial(friction, friction, restitution); + PxRigidDynamic* actor = mPhysics->createRigidDynamic(poseFromArray(pose)); + if (!material || !actor) { + if (actor) + actor->release(); + if (material) + material->release(); + releaseSlot(slot); + throw std::runtime_error("failed to create PhysX body"); + } + PxShape* shape = mPhysics->createShape( + PxBoxGeometry(chassisHalf), *material, true); + if (!shape) { + actor->release(); + material->release(); + releaseSlot(slot); + throw std::runtime_error("failed to create PhysX box shape"); + } + shape->setLocalPose(PxTransform(chassisCenter)); + shape->setRestOffset(0.01f); + shape->setContactOffset(0.04f); + shape->setFlag(PxShapeFlag::eSIMULATION_SHAPE, collisionEnabled); + actor->attachShape(*shape); + shape->release(); + actor->setMass(mass); + actor->setMassSpaceInertiaTensor(PxVec3( + mass * (half.y * half.y + half.z * half.z) / 3.0f, + mass * (half.x * half.x + half.z * half.z) / 3.0f, + mass * (half.x * half.x + half.y * half.y) / 3.0f)); + actor->setSolverIterationCounts(8, 2); + actor->setRigidBodyFlag(PxRigidBodyFlag::eENABLE_CCD, !kinematic); + actor->setRigidBodyFlag( + PxRigidBodyFlag::eENABLE_SPECULATIVE_CCD, !kinematic); + actor->setRigidBodyFlag(PxRigidBodyFlag::eKINEMATIC, kinematic); + actor->setLinearVelocity(vectorFromArray(linearVelocity, "linear_velocity")); + actor->setAngularVelocity(vectorFromArray(angularVelocity, "angular_velocity")); + mScene->addActor(*actor); + BodyRecord record; + record.actor = actor; + record.material = material; + record.slot = slot; + record.halfExtents = half; + record.mass = mass; + record.restitution = restitution; + record.collisionActive = collisionEnabled; + record.maxDriveSpeed = maxDriveSpeed; + if (hasVehicle) { + const float* mounts = suspensionMounts.data(); + for (std::size_t index = 0; index < record.suspensionMounts.size(); ++index) + record.suspensionMounts[index] = PxVec3( + mounts[index * 3], mounts[index * 3 + 1], mounts[index * 3 + 2]); + record.wheelRadius = wheelRadius; + record.suspensionRestLength = suspensionRestLength; + record.suspensionMaxCompression = suspensionMaxCompression; + record.springStiffness = springStiffness; + record.damperRate = damperRate; + record.tireFriction = tireFriction; + record.corneringStiffness = corneringStiffness; + record.rollingResistance = rollingResistance; + record.maxEngineForce = maxEngineForce; + record.maxBrakeForce = maxBrakeForce; + } + mBodies.emplace(objectId, std::move(record)); + mIds[slot] = objectId; + mActive[slot] = 1; + mCollisionActive[slot] = collisionEnabled ? 1 : 0; + writeState(mBodies.at(objectId)); + return slot; + } + + void setBodyTrack( + std::int64_t objectId, + const py::array_t& timestamps, + const py::array_t& positions, + const py::array_t& orientations, + double maxExtrapolationUs) + { + BodyRecord& body = bodyAt(objectId); + if (timestamps.ndim() != 1 || timestamps.shape(0) == 0) + throw std::invalid_argument("timestamps must have shape [samples]"); + const py::ssize_t count = timestamps.shape(0); + if (positions.ndim() != 2 || positions.shape(0) != count || positions.shape(1) != 3) + throw std::invalid_argument("positions must have shape [samples, 3]"); + if (orientations.ndim() != 2 || orientations.shape(0) != count || orientations.shape(1) != 4) + throw std::invalid_argument("orientations must have shape [samples, 4]"); + body.timestampsUs.assign(timestamps.data(), timestamps.data() + count); + body.positions.assign(positions.data(), positions.data() + count * 3); + body.orientations.assign(orientations.data(), orientations.data() + count * 4); + body.maxExtrapolationUs = maxExtrapolationUs; + } + + void updateBody( + std::int64_t objectId, + const py::array_t& pose, + const py::array_t& linearVelocity, + const py::array_t& angularVelocity, + bool kinematic) + { + BodyRecord& body = bodyAt(objectId); + PxRigidDynamic* actor = body.actor; + const bool wasKinematic = actor->getRigidBodyFlags().isSet(PxRigidBodyFlag::eKINEMATIC); + if (wasKinematic != kinematic) { + if (kinematic) { + actor->setRigidBodyFlag(PxRigidBodyFlag::eENABLE_CCD, false); + actor->setRigidBodyFlag( + PxRigidBodyFlag::eENABLE_SPECULATIVE_CCD, false); + actor->setRigidBodyFlag(PxRigidBodyFlag::eKINEMATIC, true); + } else { + actor->setRigidBodyFlag(PxRigidBodyFlag::eKINEMATIC, false); + actor->setRigidBodyFlag(PxRigidBodyFlag::eENABLE_CCD, true); + actor->setRigidBodyFlag( + PxRigidBodyFlag::eENABLE_SPECULATIVE_CCD, true); + } + } + const PxTransform transform = poseFromArray(pose); + if (kinematic && wasKinematic) + actor->setKinematicTarget(transform); + else + actor->setGlobalPose(transform, false); + actor->setLinearVelocity(vectorFromArray(linearVelocity, "linear_velocity")); + actor->setAngularVelocity(vectorFromArray(angularVelocity, "angular_velocity")); + actor->wakeUp(); + writeState(body); + } + + void removeBody(std::int64_t objectId) + { + auto found = mBodies.find(objectId); + if (found == mBodies.end()) + return; + BodyRecord body = std::move(found->second); + mScene->removeActor(*body.actor); + body.actor->release(); + body.material->release(); + releaseSlot(body.slot); + mBodies.erase(found); + } + + void setBodyCollisionEnabled(std::int64_t objectId, bool enabled) + { + BodyRecord& body = bodyAt(objectId); + setCollisionEnabled(body, enabled); + } + + void setBodyTrackDriveEnabled(std::int64_t objectId, bool enabled) + { + BodyRecord& body = bodyAt(objectId); + body.trackDriveEnabled = enabled; + if (!enabled) { + body.driveIntentActive = false; + body.verticalTrackControl = false; + } + } + + void setBodyDetached(std::int64_t objectId, bool detached) + { + BodyRecord& body = bodyAt(objectId); + body.detached = detached; + mDetached[body.slot] = detached ? 1 : 0; + } + + void setBodyTrackControls( + const py::array_t& objectIds, + const py::array_t& driveEnabled, + const py::array_t& detached) + { + if (objectIds.ndim() != 1 || driveEnabled.ndim() != 1 || detached.ndim() != 1) + throw std::invalid_argument("track-control arrays must be one-dimensional"); + const py::ssize_t count = objectIds.shape(0); + if (driveEnabled.shape(0) != count || detached.shape(0) != count) + throw std::invalid_argument("track-control arrays must have equal lengths"); + for (py::ssize_t index = 0; index < count; ++index) { + BodyRecord& body = bodyAt(objectIds.data()[index]); + const bool enabled = driveEnabled.data()[index] != 0; + body.trackDriveEnabled = enabled; + if (!enabled) { + body.driveIntentActive = false; + body.verticalTrackControl = false; + } + body.detached = detached.data()[index] != 0; + mDetached[body.slot] = body.detached ? 1 : 0; + } + } + + void setCollisionEnabled(BodyRecord& body, bool enabled) + { + if (body.collisionActive == enabled) + return; + PxShape* shape = nullptr; + if (body.actor->getShapes(&shape, 1) != 1 || !shape) + throw std::runtime_error("PhysX body has no collision shape"); + shape->setFlag(PxShapeFlag::eSIMULATION_SHAPE, enabled); + body.collisionActive = enabled; + mCollisionActive[body.slot] = enabled ? 1 : 0; + } + + void addBarrier( + std::int64_t barrierId, + const py::array_t& start, + const py::array_t& end, + float thickness, + float height, + float friction, + float restitution) + { + ensureOpen(); + if (mBarriers.count(barrierId)) + throw std::invalid_argument("barrier id already exists"); + if (start.ndim() != 1 || start.shape(0) != 2 || end.ndim() != 1 || end.shape(0) != 2) + throw std::invalid_argument("barrier endpoints must have shape [2]"); + const float dx = end.data()[0] - start.data()[0]; + const float dy = end.data()[1] - start.data()[1]; + const float length = std::sqrt(dx * dx + dy * dy); + if (length <= 1.0e-4f || thickness <= 0.0f || height <= 0.0f) + throw std::invalid_argument("barrier dimensions must be positive"); + const float yaw = std::atan2(dy, dx); + const PxTransform transform( + PxVec3( + (start.data()[0] + end.data()[0]) * 0.5f, + (start.data()[1] + end.data()[1]) * 0.5f, + height * 0.5f), + PxQuat(yaw, PxVec3(0.0f, 0.0f, 1.0f))); + PxMaterial* material = mPhysics->createMaterial(friction, friction, restitution); + PxRigidStatic* actor = mPhysics->createRigidStatic(transform); + PxShape* shape = material + ? mPhysics->createShape( + PxBoxGeometry(length * 0.5f, thickness * 0.5f, height * 0.5f), + *material, + true) + : nullptr; + if (!material || !actor || !shape) { + if (shape) + shape->release(); + if (actor) + actor->release(); + if (material) + material->release(); + throw std::runtime_error("failed to create PhysX barrier"); + } + actor->attachShape(*shape); + shape->release(); + mScene->addActor(*actor); + mBarriers.emplace( + barrierId, + BarrierRecord{ + actor, + material, + PxVec2(start.data()[0], start.data()[1]), + PxVec2(end.data()[0], end.data()[1]), + PxVec2(dx, dy), + PxVec2( + std::min(start.data()[0], end.data()[0]), + std::min(start.data()[1], end.data()[1])), + PxVec2( + std::max(start.data()[0], end.data()[0]), + std::max(start.data()[1], end.data()[1])), + length * length, + yaw, + thickness}); + } + + void removeBarrier(std::int64_t barrierId) + { + auto found = mBarriers.find(barrierId); + if (found == mBarriers.end()) + return; + mScene->removeActor(*found->second.actor); + found->second.actor->release(); + found->second.material->release(); + mBarriers.erase(found); + } + + void step(float dt) + { + ensureOpen(); + if (!(dt > 0.0f)) + throw std::invalid_argument("dt must be positive"); + { + py::gil_scoped_release release; + simulateSubsteps(dt); + } + for (const auto& entry : mBodies) + writeState(entry.second); + } + + py::tuple stepTracked( + const py::array_t& egoPose, + const py::array_t& egoLinearVelocity, + const py::array_t& egoAngularVelocity, + std::int64_t timestampUs, + float dt, + bool actorCollisionEnabled) + { + ensureOpen(); + if (!(dt > 0.0f)) + throw std::invalid_argument("dt must be positive"); + const PxTransform requestedEgoPose = poseFromArray(egoPose); + const PxVec3 requestedEgoLinear = vectorFromArray(egoLinearVelocity, "linear_velocity"); + const PxVec3 requestedEgoAngular = vectorFromArray(egoAngularVelocity, "angular_velocity"); + BodyRecord& ego = bodyAt(0); + bool impact = false; + std::size_t visibleCount = 0; + std::size_t detachedCount = 0; + double actorUpdateMs = 0.0; + double solverMs = 0.0; + double readbackMs = 0.0; + std::fill(mStruck.begin(), mStruck.end(), 0); + + { + py::gil_scoped_release release; + const auto actorBegin = StepClock::now(); + if (!mEgoPoseInitialized) { + updateActorState( + ego, + requestedEgoPose, + requestedEgoLinear, + requestedEgoAngular, + false); + mEgoPoseInitialized = true; + } else { + applyDriveIntent( + ego, requestedEgoLinear, requestedEgoAngular, dt); + } + for (auto& entry : mBodies) { + BodyRecord& body = entry.second; + if (!body.hasTrack()) + continue; + if (!isTrackVisible(body, timestampUs)) { + body.trackVisible = false; + body.overlappingEgo = false; + body.driveIntentActive = false; + body.verticalTrackControl = false; + setCollisionEnabled(body, false); + continue; + } + body.trackVisible = true; + ++visibleCount; + const TrackSample track = sampleTrack(body, timestampUs); + writeTrackState(body, track); + const PxTransform actorTransform = body.actor->getGlobalPose(); + const PxVec3 actorVelocity = body.actor->getLinearVelocity(); + const bool overlapsEgo = actorCollisionEnabled + && overlaps2d( + requestedEgoPose, + ego.halfExtents, + actorTransform, + body.halfExtents); + const PxVec3 separation = actorTransform.p - requestedEgoPose.p; + const PxVec3 relativeVelocity = actorVelocity - requestedEgoLinear; + if ( + overlapsEgo + && !body.overlappingEgo + && relativeVelocity.dot(separation) < 0.0f) { + body.detached = true; + mStruck[body.slot] = 1; + impact = true; + } + body.overlappingEgo = overlapsEgo; + if (body.trackDriveEnabled) + driveTowardsTrack(body, track, dt); + else { + body.driveIntentActive = false; + body.verticalTrackControl = false; + } + setCollisionEnabled(body, actorCollisionEnabled); + mDetached[body.slot] = body.detached ? 1 : 0; + if (body.detached) + ++detachedCount; + } + const auto actorEnd = StepClock::now(); + + simulateSubsteps(dt); + const auto solverEnd = StepClock::now(); + + for (const auto& entry : mBodies) { + const BodyRecord& body = entry.second; + if (!body.hasTrack() || body.trackVisible || body.detached) + writeState(body); + } + PxVec3 rebound; + if (barrierReboundVelocity(requestedEgoPose, requestedEgoLinear, ego, rebound)) { + float* output = mStates.data() + ego.slot * kStateWidth; + output[7] = rebound.x; + output[8] = rebound.y; + output[9] = rebound.z; + impact = true; + } + const auto readbackEnd = StepClock::now(); + actorUpdateMs = elapsedMs(actorBegin, actorEnd); + solverMs = elapsedMs(actorEnd, solverEnd); + readbackMs = elapsedMs(solverEnd, readbackEnd); + } + return py::make_tuple( + impact, + actorUpdateMs, + solverMs, + readbackMs, + visibleCount, + detachedCount); + } + + py::array stateBuffer() + { + return py::array_t( + {static_cast(mCapacity), static_cast(kStateWidth)}, + {static_cast(kStateWidth * sizeof(float)), static_cast(sizeof(float))}, + mStates.data(), + py::cast(this, py::return_value_policy::reference)); + } + + py::array trackStateBuffer() + { + return py::array_t( + {static_cast(mCapacity), static_cast(kTrackStateWidth)}, + {static_cast(kTrackStateWidth * sizeof(float)), static_cast(sizeof(float))}, + mTrackStates.data(), + py::cast(this, py::return_value_policy::reference)); + } + + py::array idBuffer() + { + return py::array_t( + mCapacity, + mIds.data(), + py::cast(this, py::return_value_policy::reference)); + } + + py::array activeBuffer() + { + return py::array_t( + mCapacity, + mActive.data(), + py::cast(this, py::return_value_policy::reference)); + } + + py::array collisionActiveBuffer() + { + return py::array_t( + mCapacity, + mCollisionActive.data(), + py::cast(this, py::return_value_policy::reference)); + } + + py::array detachedBuffer() + { + return py::array_t( + mCapacity, + mDetached.data(), + py::cast(this, py::return_value_policy::reference)); + } + + py::array struckBuffer() + { + return py::array_t( + mCapacity, + mStruck.data(), + py::cast(this, py::return_value_policy::reference)); + } + + std::size_t bodyCount() const { return mBodies.size(); } + std::size_t barrierCount() const { return mBarriers.size(); } + + void close() + { + if (!mPhysics) + return; + for (auto& entry : mBodies) { + entry.second.actor->release(); + entry.second.material->release(); + } + mBodies.clear(); + for (auto& entry : mBarriers) { + entry.second.actor->release(); + entry.second.material->release(); + } + mBarriers.clear(); + if (mGround) + mGround->release(); + if (mGroundMaterial) + mGroundMaterial->release(); + if (mScene) + mScene->release(); + if (mDispatcher) + mDispatcher->release(); + if (mExtensionsInitialized) + PxCloseExtensions(); + mPhysics->release(); + mFoundation->release(); + mPhysics = nullptr; + mFoundation = nullptr; + mScene = nullptr; + mDispatcher = nullptr; + mGround = nullptr; + mGroundMaterial = nullptr; + } + +private: + void simulateSubsteps(float dt) + { + constexpr float maxSubstepS = 1.0f / 120.0f; + const std::size_t substepCount = static_cast( + std::max(1.0f, std::ceil(dt / maxSubstepS))); + const float substepDt = dt / static_cast(substepCount); + for (std::size_t substep = 0; substep < substepCount; ++substep) { + applyVehicleForces(substepDt); + mScene->simulate(substepDt); + if (!mScene->fetchResults(true)) + throw std::runtime_error("PhysX fetchResults failed"); + constrainVehicleYawsAtBarriers(); + } + } + + void constrainVehicleYawsAtBarriers() + { + for (auto& entry : mBodies) { + BodyRecord& body = entry.second; + if (!body.hasVehicle() + || body.actor->getRigidBodyFlags().isSet(PxRigidBodyFlag::eKINEMATIC)) + continue; + + PxTransform pose = body.actor->getGlobalPose(); + const float yaw = yawFromQuaternion(pose.q); + const PxVec2 position(pose.p.x, pose.p.y); + const PxVec2 forward(std::cos(yaw), std::sin(yaw)); + const PxVec2 left(-forward.y, forward.x); + const BarrierRecord* nearestBoundary = nullptr; + float nearestClearance = std::numeric_limits::max(); + const float bodyRadius = std::sqrt( + body.halfExtents.x * body.halfExtents.x + + body.halfExtents.y * body.halfExtents.y) + 0.05f; + for (const auto& barrierEntry : mBarriers) { + const BarrierRecord& barrier = barrierEntry.second; + const float broadPhaseRadius = + bodyRadius + barrier.thickness * 0.5f; + if (position.x < barrier.minimum.x - broadPhaseRadius + || position.x > barrier.maximum.x + broadPhaseRadius + || position.y < barrier.minimum.y - broadPhaseRadius + || position.y > barrier.maximum.y + broadPhaseRadius) + continue; + const float alpha = std::clamp( + (position - barrier.start).dot(barrier.segment) + / barrier.lengthSquared, + 0.0f, + 1.0f); + const PxVec2 offset = + position - (barrier.start + barrier.segment * alpha); + const float distance = offset.magnitude(); + const PxVec2 normal = distance > 1.0e-6f + ? offset / distance + : PxVec2(-barrier.segment.y, barrier.segment.x).getNormalized(); + const float support = std::abs(normal.dot(forward)) * body.halfExtents.x + + std::abs(normal.dot(left)) * body.halfExtents.y; + const float clearance = distance - support - barrier.thickness * 0.5f; + if (clearance <= 0.05f && clearance < nearestClearance) { + nearestBoundary = &barrier; + nearestClearance = clearance; + } + } + // A vehicle whose complete footprint clears every road boundary + // remains free to take any heading while it is fully on the road. + if (!nearestBoundary) + continue; + + float yawError = wrappedAngle(yaw - nearestBoundary->yaw); + if (yawError > 1.5707963267948966f) + yawError -= 3.1415926535897932f; + else if (yawError < -1.5707963267948966f) + yawError += 3.1415926535897932f; + const float constrainedYawError = std::clamp( + yawError, -kMaxOffRoadYawRad, kMaxOffRoadYawRad); + if (constrainedYawError == yawError) + continue; + + pose.q = PxQuat( + constrainedYawError - yawError, + PxVec3(0.0f, 0.0f, 1.0f)) * pose.q; + pose.q.normalize(); + body.actor->setGlobalPose(pose, false); + + PxVec3 angularVelocity = body.actor->getAngularVelocity(); + if (angularVelocity.z * yawError > 0.0f) { + angularVelocity.z = 0.0f; + body.actor->setAngularVelocity(angularVelocity, false); + } + } + } + + void applyVehicleForces(float dt) + { + PxQueryFilterData staticQuery; + staticQuery.flags = PxQueryFlag::eSTATIC; + for (auto& entry : mBodies) { + BodyRecord& body = entry.second; + applyDriveForces(body, dt); + if (!body.hasVehicle() + || body.actor->getRigidBodyFlags().isSet(PxRigidBodyFlag::eKINEMATIC)) + continue; + + const PxTransform pose = body.actor->getGlobalPose(); + const PxVec3 suspensionUp = pose.q.rotate(PxVec3(0.0f, 0.0f, 1.0f)); + const PxVec3 suspensionDown = -suspensionUp; + const float rayLength = body.suspensionRestLength + body.wheelRadius; + for (const PxVec3& localMount : body.suspensionMounts) { + const PxVec3 mount = pose.transform(localMount); + PxRaycastBuffer hit; + if (!mScene->raycast( + mount, + suspensionDown, + rayLength, + hit, + PxHitFlag::ePOSITION | PxHitFlag::eNORMAL, + staticQuery)) + continue; + + const float suspensionLength = std::max( + 0.0f, hit.block.distance - body.wheelRadius); + const float compression = std::clamp( + body.suspensionRestLength - suspensionLength, + 0.0f, + body.suspensionMaxCompression); + if (compression <= 0.0f) + continue; + + const PxVec3 mountVelocity = PxRigidBodyExt::getVelocityAtPos( + *body.actor, mount); + const float compressionSpeed = -mountVelocity.dot(suspensionUp); + const float maxWheelLoad = body.mass * 9.81f; + const float wheelLoad = std::clamp( + body.springStiffness * compression + + body.damperRate * compressionSpeed, + 0.0f, + maxWheelLoad); + if (wheelLoad <= 0.0f) + continue; + + PxRigidBodyExt::addForceAtPos( + *body.actor, + suspensionUp * wheelLoad, + mount, + PxForceMode::eFORCE); + + const PxVec3 normal = hit.block.normal; + PxVec3 forward = pose.q.rotate(PxVec3(1.0f, 0.0f, 0.0f)); + forward -= normal * forward.dot(normal); + if (forward.normalize() <= 1.0e-6f) + continue; + PxVec3 lateral = normal.cross(forward); + if (lateral.normalize() <= 1.0e-6f) + continue; + const PxVec3 contactVelocity = PxRigidBodyExt::getVelocityAtPos( + *body.actor, hit.block.position); + const float longitudinalSpeed = contactVelocity.dot(forward); + const float lateralSpeed = contactVelocity.dot(lateral); + const float slipAngle = std::atan2( + lateralSpeed, std::abs(longitudinalSpeed) + 0.5f); + const float frictionLimit = body.tireFriction * wheelLoad; + const float lateralForce = std::clamp( + -0.25f * body.corneringStiffness * slipAngle, + -frictionLimit, + frictionLimit); + const float rollingMagnitude = std::min( + body.rollingResistance * wheelLoad, + std::sqrt(std::max( + 0.0f, + frictionLimit * frictionLimit - lateralForce * lateralForce))); + const float rollingForce = std::abs(longitudinalSpeed) > 1.0e-3f + ? -std::copysign(rollingMagnitude, longitudinalSpeed) + : 0.0f; + PxRigidBodyExt::addForceAtPos( + *body.actor, + lateral * lateralForce + forward * rollingForce, + hit.block.position, + PxForceMode::eFORCE); + } + } + } + + static bool isTrackVisible(const BodyRecord& body, std::int64_t timestampUs) + { + if (body.maxExtrapolationUs < 0.0) + return true; + const std::int64_t first = body.timestampsUs.front(); + if (timestampUs < first) + return body.timestampsUs.size() >= 2 + && static_cast(first - timestampUs) <= body.maxExtrapolationUs; + // The HD-map renderer holds an object's final sample after its track + // starts. Keep the PhysX shape alive for the same interval so a box + // that is still rendered cannot silently stop colliding or disappear + // from the PhysX debug view. + return true; + } + + static TrackSample sampleTrack(const BodyRecord& body, std::int64_t timestampUs) + { + const auto found = std::lower_bound( + body.timestampsUs.begin(), body.timestampsUs.end(), timestampUs); + std::size_t lo = 0; + std::size_t hi = 0; + float alpha = 0.0f; + if (found == body.timestampsUs.begin()) { + lo = hi = 0; + } else if (found == body.timestampsUs.end()) { + lo = hi = body.timestampsUs.size() - 1; + } else { + hi = static_cast(found - body.timestampsUs.begin()); + lo = hi - 1; + const std::int64_t span = body.timestampsUs[hi] - body.timestampsUs[lo]; + if (span != 0) + alpha = static_cast(timestampUs - body.timestampsUs[lo]) + / static_cast(span); + } + const float oneMinusAlpha = 1.0f - alpha; + const float* loPosition = body.positions.data() + lo * 3; + const float* hiPosition = body.positions.data() + hi * 3; + const PxVec3 position( + loPosition[0] * oneMinusAlpha + hiPosition[0] * alpha, + loPosition[1] * oneMinusAlpha + hiPosition[1] * alpha, + loPosition[2] * oneMinusAlpha + hiPosition[2] * alpha); + const float* loQuaternion = body.orientations.data() + lo * 4; + const float* hiQuaternion = body.orientations.data() + hi * 4; + PxQuat quaternion( + loQuaternion[0] * oneMinusAlpha + hiQuaternion[0] * alpha, + loQuaternion[1] * oneMinusAlpha + hiQuaternion[1] * alpha, + loQuaternion[2] * oneMinusAlpha + hiQuaternion[2] * alpha, + loQuaternion[3] * oneMinusAlpha + hiQuaternion[3] * alpha); + if (quaternion.magnitudeSquared() > 1.0e-16f) + quaternion.normalize(); + else + quaternion = PxQuat(PxIdentity); + PxVec3 velocity(0.0f); + if (lo != hi) { + const float dt = static_cast(body.timestampsUs[hi] - body.timestampsUs[lo]) + / 1'000'000.0f; + if (dt > 0.0f) { + velocity = PxVec3( + hiPosition[0] - loPosition[0], + hiPosition[1] - loPosition[1], + hiPosition[2] - loPosition[2]); + velocity *= 1.0f / dt; + } + } + return TrackSample{PxTransform(position, quaternion), velocity, PxVec3(0.0f)}; + } + + static bool overlaps2d( + const PxTransform& first, + const PxVec3& firstHalf, + const PxTransform& second, + const PxVec3& secondHalf) + { + const float firstYaw = yawFromQuaternion(first.q); + const float secondYaw = yawFromQuaternion(second.q); + const std::array axes{ + PxVec2(std::cos(firstYaw), std::sin(firstYaw)), + PxVec2(-std::sin(firstYaw), std::cos(firstYaw)), + PxVec2(std::cos(secondYaw), std::sin(secondYaw)), + PxVec2(-std::sin(secondYaw), std::cos(secondYaw))}; + const PxVec2 delta(second.p.x - first.p.x, second.p.y - first.p.y); + for (const PxVec2& axis : axes) { + const float firstRadius = firstHalf.x * std::abs(axes[0].dot(axis)) + + firstHalf.y * std::abs(axes[1].dot(axis)); + const float secondRadius = secondHalf.x * std::abs(axes[2].dot(axis)) + + secondHalf.y * std::abs(axes[3].dot(axis)); + if (std::abs(delta.dot(axis)) > firstRadius + secondRadius) + return false; + } + return true; + } + + static void applyDriveIntent( + BodyRecord& body, + const PxVec3& desiredVelocity, + const PxVec3& desiredAngularVelocity, + float) + { + body.desiredLinearVelocity = desiredVelocity; + body.desiredAngularVelocity = desiredAngularVelocity; + body.driveIntentActive = true; + } + + static void applyDriveForces(BodyRecord& body, float dt) + { + if (!body.driveIntentActive + || body.actor->getRigidBodyFlags().isSet(PxRigidBodyFlag::eKINEMATIC)) + return; + PxRigidDynamic* actor = body.actor; + const PxTransform pose = actor->getGlobalPose(); + PxVec3 forward = pose.q.rotate(PxVec3(1.0f, 0.0f, 0.0f)); + forward.z = 0.0f; + if (forward.normalize() <= 1.0e-6f) + return; + const PxVec3 lateral(-forward.y, forward.x, 0.0f); + + const PxVec3 currentVelocity = actor->getLinearVelocity(); + const float currentSpeed = currentVelocity.dot(forward); + const float desiredSpeed = body.desiredLinearVelocity.dot(forward); + const float speedError = desiredSpeed - currentSpeed; + const bool braking = std::abs(desiredSpeed) < std::abs(currentSpeed) + || desiredSpeed * currentSpeed < 0.0f; + const float forceLimit = body.hasVehicle() + ? (braking ? body.maxBrakeForce : body.maxEngineForce) + : body.mass * 6.5f; + const float driveForce = std::clamp( + body.mass * speedError / std::max(dt, 1.0e-3f), + -forceLimit, + forceLimit); + const float lateralForceLimit = body.hasVehicle() + ? body.tireFriction * body.mass * 9.81f + : body.mass * 6.5f; + const float lateralForce = std::clamp( + body.mass + * (body.desiredLinearVelocity - currentVelocity).dot(lateral) + / std::max(dt, 1.0e-3f), + -lateralForceLimit, + lateralForceLimit); + actor->addForce( + forward * driveForce + lateral * lateralForce, + PxForceMode::eFORCE, + true); + + const float yawInertia = actor->getMassSpaceInertiaTensor().z; + const float unconstrainedYawTorque = yawInertia + * (body.desiredAngularVelocity.z - actor->getAngularVelocity().z) + / std::max(dt, 1.0e-3f); + const float halfWheelBase = body.hasVehicle() + ? std::max(std::abs(body.suspensionMounts[0].x), 0.5f) + : 0.5f; + const float maxYawTorque = body.hasVehicle() + ? body.tireFriction * body.mass * 9.81f * halfWheelBase + : yawInertia * 4.0f; + actor->addTorque( + PxVec3( + 0.0f, + 0.0f, + std::clamp( + unconstrainedYawTorque, -maxYawTorque, maxYawTorque)), + PxForceMode::eFORCE, + true); + + if (body.verticalTrackControl) { + constexpr float maxVerticalAcceleration = 12.0f; + const float verticalAcceleration = std::clamp( + (body.targetHeight - pose.p.z) * 8.0f + + (body.targetVerticalVelocity - currentVelocity.z) * 4.0f + + 9.81f, + -maxVerticalAcceleration, + maxVerticalAcceleration); + actor->addForce( + PxVec3(0.0f, 0.0f, verticalAcceleration * body.mass), + PxForceMode::eFORCE, + true); + } + } + + static void driveTowardsTrack( + BodyRecord& body, const TrackSample& track, float dt) + { + const PxTransform current = body.actor->getGlobalPose(); + PxVec2 correction( + track.transform.p.x - current.p.x, + track.transform.p.y - current.p.y); + correction *= 1.5f; + const float correctionSpeed = correction.magnitude(); + if (correctionSpeed > 8.0f) + correction *= 8.0f / correctionSpeed; + PxVec3 desiredVelocity = track.velocity; + desiredVelocity.x += correction.x; + desiredVelocity.y += correction.y; + const float desiredHorizontalSpeed = std::sqrt( + desiredVelocity.x * desiredVelocity.x + + desiredVelocity.y * desiredVelocity.y); + if (body.maxDriveSpeed > 0.0f + && desiredHorizontalSpeed > body.maxDriveSpeed) { + const float scale = body.maxDriveSpeed / desiredHorizontalSpeed; + desiredVelocity.x *= scale; + desiredVelocity.y *= scale; + } + + const float headingError = wrappedAngle( + yawFromQuaternion(track.transform.q) - yawFromQuaternion(current.q)); + PxVec3 desiredAngularVelocity = track.angularVelocity; + desiredAngularVelocity.z = std::clamp( + headingError * 3.0f, -1.5f, 1.5f); + applyDriveIntent(body, desiredVelocity, desiredAngularVelocity, dt); + + if (!body.hasVehicle() || !body.detached) { + body.verticalTrackControl = true; + body.targetHeight = track.transform.p.z; + body.targetVerticalVelocity = track.velocity.z; + } else + body.verticalTrackControl = false; + } + + static void updateActorState( + BodyRecord& body, + const PxTransform& transform, + const PxVec3& linearVelocity, + const PxVec3& angularVelocity, + bool kinematic) + { + PxRigidDynamic* actor = body.actor; + const bool wasKinematic = actor->getRigidBodyFlags().isSet(PxRigidBodyFlag::eKINEMATIC); + if (wasKinematic != kinematic) { + if (kinematic) { + actor->setRigidBodyFlag(PxRigidBodyFlag::eENABLE_CCD, false); + actor->setRigidBodyFlag( + PxRigidBodyFlag::eENABLE_SPECULATIVE_CCD, false); + actor->setRigidBodyFlag(PxRigidBodyFlag::eKINEMATIC, true); + } else { + actor->setRigidBodyFlag(PxRigidBodyFlag::eKINEMATIC, false); + actor->setRigidBodyFlag(PxRigidBodyFlag::eENABLE_CCD, true); + actor->setRigidBodyFlag( + PxRigidBodyFlag::eENABLE_SPECULATIVE_CCD, true); + } + } + if (kinematic && wasKinematic) + actor->setKinematicTarget(transform); + else + actor->setGlobalPose(transform, false); + actor->setLinearVelocity(linearVelocity); + actor->setAngularVelocity(angularVelocity); + actor->wakeUp(); + } + + bool barrierReboundVelocity( + const PxTransform& egoTransform, + const PxVec3& egoVelocity, + const BodyRecord& ego, + PxVec3& rebound) const + { + const PxVec2 position(egoTransform.p.x, egoTransform.p.y); + const float yaw = yawFromQuaternion(egoTransform.q); + const PxVec2 forward(std::cos(yaw), std::sin(yaw)); + const PxVec2 left(-forward.y, forward.x); + const float egoRadius = std::sqrt( + ego.halfExtents.x * ego.halfExtents.x + + ego.halfExtents.y * ego.halfExtents.y) + 0.05f; + for (const auto& entry : mBarriers) { + const BarrierRecord& barrier = entry.second; + const float broadPhaseRadius = egoRadius + barrier.thickness * 0.5f; + if (position.x < barrier.minimum.x - broadPhaseRadius + || position.x > barrier.maximum.x + broadPhaseRadius + || position.y < barrier.minimum.y - broadPhaseRadius + || position.y > barrier.maximum.y + broadPhaseRadius) + continue; + const float alpha = std::clamp( + (position - barrier.start).dot(barrier.segment) + / barrier.lengthSquared, + 0.0f, + 1.0f); + const PxVec2 offset = + position - (barrier.start + barrier.segment * alpha); + const float distance = offset.magnitude(); + PxVec2 normal; + if (distance > 1.0e-6f) { + normal = offset / distance; + } else { + const PxVec2 horizontalVelocity(egoVelocity.x, egoVelocity.y); + const float speed = horizontalVelocity.magnitude(); + normal = speed > 1.0e-6f + ? -horizontalVelocity / speed + : PxVec2(1.0f, 0.0f); + } + const float support = std::abs(normal.dot(forward)) * ego.halfExtents.x + + std::abs(normal.dot(left)) * ego.halfExtents.y; + if (distance > support + barrier.thickness * 0.5f + 0.05f) + continue; + const float normalSpeed = egoVelocity.x * normal.x + egoVelocity.y * normal.y; + rebound = egoVelocity; + if (normalSpeed < 0.0f) { + rebound.x -= (1.0f + ego.restitution) * normalSpeed * normal.x; + rebound.y -= (1.0f + ego.restitution) * normalSpeed * normal.y; + } + return true; + } + return false; + } + + void ensureOpen() const + { + if (!mPhysics || !mScene) + throw std::runtime_error("PhysX scene is closed"); + } + + std::size_t allocateSlot() + { + if (!mFreeSlots.empty()) { + const std::size_t slot = mFreeSlots.back(); + mFreeSlots.pop_back(); + return slot; + } + if (mNextSlot >= mCapacity) + throw std::runtime_error("PhysX body capacity exceeded"); + return mNextSlot++; + } + + void releaseSlot(std::size_t slot) + { + mIds[slot] = -1; + mActive[slot] = 0; + mCollisionActive[slot] = 0; + mDetached[slot] = 0; + mStruck[slot] = 0; + std::fill_n(mStates.data() + slot * kStateWidth, kStateWidth, 0.0f); + std::fill_n( + mTrackStates.data() + slot * kTrackStateWidth, + kTrackStateWidth, + 0.0f); + mFreeSlots.push_back(slot); + } + + BodyRecord& bodyAt(std::int64_t objectId) + { + auto found = mBodies.find(objectId); + if (found == mBodies.end()) + throw std::out_of_range("unknown body id"); + return found->second; + } + + void writeState(const BodyRecord& body) + { + const PxTransform pose = body.actor->getGlobalPose(); + const PxVec3 linear = body.actor->getLinearVelocity(); + const PxVec3 angular = body.actor->getAngularVelocity(); + float* output = mStates.data() + body.slot * kStateWidth; + output[0] = pose.p.x; + output[1] = pose.p.y; + output[2] = pose.p.z; + output[3] = pose.q.x; + output[4] = pose.q.y; + output[5] = pose.q.z; + output[6] = pose.q.w; + output[7] = linear.x; + output[8] = linear.y; + output[9] = linear.z; + output[10] = angular.x; + output[11] = angular.y; + output[12] = angular.z; + } + + void writeTrackState(const BodyRecord& body, const TrackSample& track) + { + float* output = mTrackStates.data() + body.slot * kTrackStateWidth; + output[0] = track.transform.p.x; + output[1] = track.transform.p.y; + output[2] = track.transform.p.z; + output[3] = track.transform.q.x; + output[4] = track.transform.q.y; + output[5] = track.transform.q.z; + output[6] = track.transform.q.w; + output[7] = track.velocity.x; + output[8] = track.velocity.y; + output[9] = track.velocity.z; + } + + void addGround() + { + mGroundMaterial = mPhysics->createMaterial(0.8f, 0.8f, 0.05f); + mGround = mPhysics->createRigidStatic(PxTransform(PxVec3(0.0f, 0.0f, -0.5f))); + PxShape* shape = mPhysics->createShape( + PxBoxGeometry(50000.0f, 50000.0f, 0.5f), *mGroundMaterial, true); + mGround->attachShape(*shape); + shape->release(); + mScene->addActor(*mGround); + } + + PxDefaultAllocator mAllocator; + PxDefaultErrorCallback mError; + PxFoundation* mFoundation = nullptr; + PxPhysics* mPhysics = nullptr; + PxDefaultCpuDispatcher* mDispatcher = nullptr; + PxScene* mScene = nullptr; + PxRigidStatic* mGround = nullptr; + PxMaterial* mGroundMaterial = nullptr; + bool mExtensionsInitialized = false; + bool mEgoPoseInitialized = false; + std::size_t mCapacity; + std::size_t mNextSlot = 0; + std::vector mFreeSlots; + std::vector mStates; + std::vector mTrackStates; + std::vector mIds; + std::vector mActive; + std::vector mCollisionActive; + std::vector mDetached; + std::vector mStruck; + std::unordered_map mBodies; + std::unordered_map mBarriers; +}; + +} // namespace + +PYBIND11_MODULE(ludus_physx_native, module) +{ + module.doc() = "Standalone native PhysX scene for Ludus"; + py::class_(module, "NativeScene") + .def(py::init(), py::arg("capacity")) + .def("add_body", &NativeScene::addBody) + .def("set_body_track", &NativeScene::setBodyTrack) + .def("update_body", &NativeScene::updateBody) + .def("set_body_collision_enabled", &NativeScene::setBodyCollisionEnabled) + .def("set_body_track_drive_enabled", &NativeScene::setBodyTrackDriveEnabled) + .def("set_body_detached", &NativeScene::setBodyDetached) + .def("set_body_track_controls", &NativeScene::setBodyTrackControls) + .def("remove_body", &NativeScene::removeBody) + .def("add_barrier", &NativeScene::addBarrier) + .def("remove_barrier", &NativeScene::removeBarrier) + .def("step", &NativeScene::step) + .def("step_tracked", &NativeScene::stepTracked) + .def("state_buffer", &NativeScene::stateBuffer) + .def("track_state_buffer", &NativeScene::trackStateBuffer) + .def("id_buffer", &NativeScene::idBuffer) + .def("active_buffer", &NativeScene::activeBuffer) + .def("collision_active_buffer", &NativeScene::collisionActiveBuffer) + .def("detached_buffer", &NativeScene::detachedBuffer) + .def("struck_buffer", &NativeScene::struckBuffer) + .def_property_readonly("body_count", &NativeScene::bodyCount) + .def_property_readonly("barrier_count", &NativeScene::barrierCount) + .def("close", &NativeScene::close); +} diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/render/ludus_cuda.cu b/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/render/ludus_cuda.cu index 1eda2ed0e..9d235870e 100644 --- a/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/render/ludus_cuda.cu +++ b/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/render/ludus_cuda.cu @@ -140,6 +140,20 @@ static __device__ __forceinline__ uint32_t pack_rgba8(float r, float g, float b) return rb | (gb << 8) | (bb << 16) | (0xFFu << 24); } +static __device__ __forceinline__ bool geometry_reservation_fits( + int vbase, int vertexCount, + int triBase, int triangleCount, + int* atomicVerts, int* atomicTris) +{ + if (vbase < 0 || triBase < 0 || + vertexCount > atomicVerts[1] - vbase || + triangleCount > atomicTris[1] - triBase) { + atomicExch(&atomicVerts[2], 1); + return false; + } + return true; +} + //------------------------------------------------------------------------ // Adaptive tessellation helpers. //------------------------------------------------------------------------ @@ -383,6 +397,8 @@ __global__ void polygonGeometryKernel( if (level == 0) { int vbase = atomicAdd(atomicVerts, 3); int triOut = atomicAdd(atomicTris, 1); + if (!geometry_reservation_fits(vbase, 3, triOut, 1, atomicVerts, atomicTris)) + return; for (int vi = 0; vi < 3; vi++) { outVerts[vbase + vi] = ftheta_project(wp[vi], poseData, camData); outVertColors[vbase + vi] = color; @@ -395,6 +411,8 @@ __global__ void polygonGeometryKernel( int nT = bary_triangle_count(level); int vbase = atomicAdd(atomicVerts, nV); int triBase = atomicAdd(atomicTris, nT); + if (!geometry_reservation_fits(vbase, nV, triBase, nT, atomicVerts, atomicTris)) + return; for (int v = 0; v < nV; v++) { float2 uv = bary_vertex_uv(v, level); float wb = 1.0f - uv.x - uv.y; @@ -511,6 +529,8 @@ __global__ void cubeGeometryKernel( int vbase = atomicAdd(atomicVerts, 4); int triBase = atomicAdd(atomicTris, 2); + if (!geometry_reservation_fits(vbase, 4, triBase, 2, atomicVerts, atomicTris)) + return; for (int i = 0; i < 4; i++) { int vi = FACE_VERTS_D[faceIdx][i]; @@ -605,6 +625,8 @@ __global__ void cubeWireframeKernel( int vbase = atomicAdd(atomicVerts, 4); int triBase = atomicAdd(atomicTris, 2); + if (!geometry_reservation_fits(vbase, 4, triBase, 2, atomicVerts, atomicTris)) + return; outVerts[vbase + 0] = make_float4(clip0.x - ox*clip0.w, clip0.y - oy*clip0.w, clip0.z + z_bias0, clip0.w); outVerts[vbase + 1] = make_float4(clip0.x + ox*clip0.w, clip0.y + oy*clip0.w, clip0.z + z_bias0, clip0.w); @@ -663,6 +685,17 @@ static __device__ __forceinline__ float3 quat_rotate_d(float4 q, float3 v) ); } +static __device__ __forceinline__ bool point_inside_cube_d( + float3 point, float3 tr, float4 qr, float3 sc) +{ + float3 delta = make_float3(point.x - tr.x, point.y - tr.y, point.z - tr.z); + float4 inverse = make_float4(-qr.x, -qr.y, -qr.z, qr.w); + float3 local = quat_rotate_d(inverse, delta); + return fabsf(local.x) <= 0.5f * fabsf(sc.x) + && fabsf(local.y) <= 0.5f * fabsf(sc.y) + && fabsf(local.z) <= 0.5f * fabsf(sc.z); +} + //------------------------------------------------------------------------ // Fused timestamped cube pool kernel: geometry + wireframe in one launch. // 256 threads/block = 8 warps. Each warp handles one cube. @@ -804,6 +837,7 @@ __global__ void cubePoolFusedKernel( float4 qr = make_float4(qx, qy, qz, qw); float3 sc = make_float3(poolScales[cubeIdx*3], poolScales[cubeIdx*3+1], poolScales[cubeIdx*3+2]); float3 cw = cube_cam_world(poseData); + bool cameraInside = point_inside_cube_d(cw, tr, qr, sc); // --- Lanes 0-5: face geometry (with barycentric tessellation) --- if (lane < 6) { @@ -814,7 +848,7 @@ __global__ void cubePoolFusedKernel( float3 fc_world = quat_rotate_d(qr, fc_local); fc_world.x += tr.x; fc_world.y += tr.y; fc_world.z += tr.z; float3 to_cam = make_float3(cw.x - fc_world.x, cw.y - fc_world.y, cw.z - fc_world.z); - if (n_world.x*to_cam.x + n_world.y*to_cam.y + n_world.z*to_cam.z > 0.0f) { + if (cameraInside || n_world.x*to_cam.x + n_world.y*to_cam.y + n_world.z*to_cam.z > 0.0f) { float3 fc_col = make_float3(poolColors[cubeIdx*6], poolColors[cubeIdx*6+1], poolColors[cubeIdx*6+2]); float3 bc_col = make_float3(poolColors[cubeIdx*6+3], poolColors[cubeIdx*6+4], poolColors[cubeIdx*6+5]); @@ -837,6 +871,8 @@ __global__ void cubePoolFusedKernel( int totalT = nT * 2; int vbase = atomicAdd(atomicVerts, totalV); int triBase = atomicAdd(atomicTris, totalT); + if (!geometry_reservation_fits(vbase, totalV, triBase, totalT, atomicVerts, atomicTris)) + return; for (int half = 0; half < 2; half++) { float3 v0 = corners[0]; @@ -877,7 +913,7 @@ __global__ void cubePoolFusedKernel( int edgeIdx = lane - 6; int f0 = EDGE_FACES_D[edgeIdx][0], f1 = EDGE_FACES_D[edgeIdx][1]; - bool anyVisible = false; + bool anyVisible = cameraInside; for (int fi = 0; fi < 2; fi++) { int f = (fi == 0) ? f0 : f1; float3 n = quat_rotate_d(qr, FACE_NORMALS_D[f]); @@ -899,6 +935,9 @@ __global__ void cubePoolFusedKernel( int numSegs = 1 << subdiv; int vbase = atomicAdd(atomicVerts, numSegs * 4); int triBase = atomicAdd(atomicTris, numSegs * 2); + if (!geometry_reservation_fits(vbase, numSegs * 4, triBase, numSegs * 2, + atomicVerts, atomicTris)) + return; float img_w = camData[2], img_h = camData[3]; float EDGE_WIDTH = 2.0f; uint32_t ec = pack_rgba8(0.784f, 0.784f, 0.784f); @@ -971,6 +1010,8 @@ __global__ void dotGeometryKernel( // 7 vertices: center + 6 ring, 6 triangles int vbase = atomicAdd(atomicVerts, 7); int triBase = atomicAdd(atomicTris, 6); + if (!geometry_reservation_fits(vbase, 7, triBase, 6, atomicVerts, atomicTris)) + return; outVerts[vbase] = clip; outVertColors[vbase] = dotColor; @@ -1039,6 +1080,9 @@ __global__ void polylineGeometryKernel( // Phase 2: allocate output int vbase = atomicAdd(atomicVerts, totalEffPts * 2); int triBase = atomicAdd(atomicTris, (totalEffPts - 1) * 2); + if (!geometry_reservation_fits(vbase, totalEffPts * 2, triBase, + (totalEffPts - 1) * 2, atomicVerts, atomicTris)) + return; // Phase 3: generate effective points and geometry int ept = 0; @@ -1233,6 +1277,8 @@ __global__ void polylinePoolKernel( if (r < 0.5f) continue; int vbase = atomicAdd(atomicVerts, 7); int triBase = atomicAdd(atomicTris, 6); + if (!geometry_reservation_fits(vbase, 7, triBase, 6, atomicVerts, atomicTris)) + return; outVerts[vbase] = clip; outVertColors[vbase] = packedColor; for (int i = 0; i < 6; i++) { @@ -1277,6 +1323,10 @@ __global__ void polylinePoolKernel( const int CAP_SEGS = 6; int vbase = atomicAdd(atomicVerts, totalEffPts * 2 + CAP_SEGS * 2); int triBase = atomicAdd(atomicTris, (totalEffPts - 1) * 2 + CAP_SEGS * 2); + if (!geometry_reservation_fits(vbase, totalEffPts * 2 + CAP_SEGS * 2, + triBase, (totalEffPts - 1) * 2 + CAP_SEGS * 2, + atomicVerts, atomicTris)) + return; int ept = 0; float prev_sx = 0.0f, prev_sy = 0.0f; @@ -1545,6 +1595,8 @@ __global__ void polygonPoolKernel( if (level == 0) { int vbase = atomicAdd(atomicVerts, 3); int triOut = atomicAdd(atomicTris, 1); + if (!geometry_reservation_fits(vbase, 3, triOut, 1, atomicVerts, atomicTris)) + return; for (int vi = 0; vi < 3; vi++) { outVerts[vbase + vi] = ftheta_project(wp[vi], poseData, camData); outVertColors[vbase + vi] = color; @@ -1557,6 +1609,8 @@ __global__ void polygonPoolKernel( int nT = bary_triangle_count(level); int vbase = atomicAdd(atomicVerts, nV); int triBase = atomicAdd(atomicTris, nT); + if (!geometry_reservation_fits(vbase, nV, triBase, nT, atomicVerts, atomicTris)) + return; for (int v = 0; v < nV; v++) { float2 uv = bary_vertex_uv(v, level); float wb = 1.0f - uv.x - uv.y; @@ -1681,10 +1735,26 @@ __global__ void cubePoolFlatKernel( float4 qr = make_float4(qx, qy, qz, qw); float3 tr = make_float3(tr_x, tr_y, tr_z); float3 sc = make_float3(sc_x, sc_y, sc_z); + float3 cw = cube_cam_world(poseData); + bool cameraInside = point_inside_cube_d(cw, tr, qr, sc); // Lanes 0-5: face geometry if (lane < 6) { int faceIdx = lane; + float3 nLocal = FACE_NORMALS_D[faceIdx]; + float3 nWorld = quat_rotate_d(qr, nLocal); + float3 fcLocal = make_float3( + nLocal.x * 0.5f * sc.x, + nLocal.y * 0.5f * sc.y, + nLocal.z * 0.5f * sc.z); + float3 fcWorld = quat_rotate_d(qr, fcLocal); + fcWorld.x += tr.x; fcWorld.y += tr.y; fcWorld.z += tr.z; + float3 toCamera = make_float3( + cw.x - fcWorld.x, cw.y - fcWorld.y, cw.z - fcWorld.z); + if (!cameraInside && + nWorld.x*toCamera.x + nWorld.y*toCamera.y + nWorld.z*toCamera.z <= 0.0f) + return; + int i0 = FACE_VERTS_D[faceIdx][0], i1 = FACE_VERTS_D[faceIdx][1]; int i2 = FACE_VERTS_D[faceIdx][2], i3 = FACE_VERTS_D[faceIdx][3]; @@ -1705,6 +1775,8 @@ __global__ void cubePoolFlatKernel( if (subdiv == 0) { int vbase = atomicAdd(atomicVerts, 4); int triBase = atomicAdd(atomicTris, 2); + if (!geometry_reservation_fits(vbase, 4, triBase, 2, atomicVerts, atomicTris)) + return; for (int ci = 0; ci < 4; ci++) { outVerts[vbase + ci] = ftheta_project(corners[ci], poseData, camData); float gt = corner_t[ci]; @@ -1730,6 +1802,9 @@ __global__ void cubePoolFlatKernel( int nT = bary_triangle_count(subdiv); int vbase = atomicAdd(atomicVerts, nV); int triBase = atomicAdd(atomicTris, nT); + if (!geometry_reservation_fits(vbase, nV, triBase, nT, + atomicVerts, atomicTris)) + return; for (int v = 0; v < nV; v++) { float2 uv = bary_vertex_uv(v, subdiv); float wb = 1.0f - uv.x - uv.y; @@ -1756,9 +1831,8 @@ __global__ void cubePoolFlatKernel( if ((renderFlags & 1u) && lane >= 6 && lane < 18) { int edgeIdx = lane - 6; - float3 cw = cube_cam_world(poseData); int f0 = EDGE_FACES_D[edgeIdx][0], f1 = EDGE_FACES_D[edgeIdx][1]; - bool anyVisible = false; + bool anyVisible = cameraInside; for (int fi = 0; fi < 2; fi++) { int f = (fi == 0) ? f0 : f1; float3 n = quat_rotate_d(qr, FACE_NORMALS_D[f]); @@ -1780,6 +1854,9 @@ __global__ void cubePoolFlatKernel( int numSegs = 1 << subdiv; int vbase = atomicAdd(atomicVerts, numSegs * 4); int triBase = atomicAdd(atomicTris, numSegs * 2); + if (!geometry_reservation_fits(vbase, numSegs * 4, triBase, numSegs * 2, + atomicVerts, atomicTris)) + return; float img_w = camData[2], img_h = camData[3]; float EDGE_WIDTH = get_wireframe_width(params); uint32_t ec = pack_rgba8(0.784f, 0.784f, 0.784f); @@ -1959,8 +2036,8 @@ void ludusCudaInit(NVDR_CTX_ARGS, LudusCudaState& s) s.maxTessPolygon = 3; s.maxTessCube = 3; - CUDA_CHECK(cudaMalloc(&s.atomicVertexCount, sizeof(int))); - CUDA_CHECK(cudaMalloc(&s.atomicTriangleCount, sizeof(int))); + CUDA_CHECK(cudaMalloc(&s.atomicVertexCount, 3 * sizeof(int))); + CUDA_CHECK(cudaMalloc(&s.atomicTriangleCount, 2 * sizeof(int))); printf("LudusCuda: Initialized renderer\n"); } @@ -2020,6 +2097,10 @@ static void ensureBuffers(LudusCudaState& s, int maxVerts, int maxTris) CUDA_CHECK(cudaMalloc(&s.projectedVertices, vertBytes)); CUDA_CHECK(cudaMalloc(&s.triangleIndices, triBytes)); CUDA_CHECK(cudaMalloc(&s.vertexColors, colBytes)); + CUDA_CHECK(cudaMemcpy(s.atomicVertexCount + 1, &s.maxVertices, + sizeof(int), cudaMemcpyHostToDevice)); + CUDA_CHECK(cudaMemcpy(s.atomicTriangleCount + 1, &s.maxTriangles, + sizeof(int), cudaMemcpyHostToDevice)); } //------------------------------------------------------------------------ @@ -2053,9 +2134,9 @@ void ludusCudaRender( // Tessellation multipliers for geometry budget bool hasTess = s.tessellationThreshold > 0.0f; - int tessPolyMul = hasTess ? 16 : 1; // polygon triangles: up to level-2 (16x) - int tessLineMul = hasTess ? 8 : 1; // polyline segments: average subdivision - int tessCubeMul = hasTess ? 16 : 1; // cube faces: up to level-2 (16x per tri) + int tessPolyMul = hasTess ? (1 << (2 * s.maxTessPolygon)) : 1; + int tessLineMul = hasTess ? (1 << s.maxTessPolyline) : 1; + int tessCubeMul = hasTess ? (1 << (2 * s.maxTessCube)) : 1; // Estimate worst-case per-camera geometry int maxTrisPerCam = numTriangles * tessPolyMul // polygon triangles @@ -2095,11 +2176,13 @@ void ludusCudaRender( } // Render each camera sequentially + int geometryRetryCount = 0; for (int camIdx = 0; camIdx < numCameras; camIdx++) { // Clear atomic counters CUDA_CHECK(cudaMemsetAsync(s.atomicVertexCount, 0, sizeof(int), stream)); CUDA_CHECK(cudaMemsetAsync(s.atomicTriangleCount, 0, sizeof(int), stream)); + CUDA_CHECK(cudaMemsetAsync(s.atomicVertexCount + 2, 0, sizeof(int), stream)); // Camera data pointers (raw float arrays matching struct layout) const float* camData = (const float*)&cameras[camIdx]; // 18 floats @@ -2163,11 +2246,33 @@ void ludusCudaRender( } // Read back actual counts - int actualVerts = 0, actualTris = 0; + int actualVerts = 0, actualTris = 0, geometryOverflow = 0; CUDA_CHECK(cudaMemcpyAsync(&actualTris, s.atomicTriangleCount, sizeof(int), cudaMemcpyDeviceToHost, stream)); CUDA_CHECK(cudaMemcpyAsync(&actualVerts, s.atomicVertexCount, sizeof(int), cudaMemcpyDeviceToHost, stream)); + CUDA_CHECK(cudaMemcpyAsync(&geometryOverflow, s.atomicVertexCount + 2, sizeof(int), cudaMemcpyDeviceToHost, stream)); CUDA_CHECK(cudaStreamSynchronize(stream)); + if (geometryOverflow) { + fprintf(stderr, + "[LudusCuda] geometry capacity exceeded (%d/%d vertices, %d/%d triangles); " + "growing buffers\n", + actualVerts, s.maxVertices, actualTris, s.maxTriangles); + int requiredVerts = actualVerts > s.maxVertices ? actualVerts : s.maxVertices + 1; + int requiredTris = actualTris > s.maxTriangles ? actualTris : s.maxTriangles + 1; + ensureBuffers(s, requiredVerts, requiredTris); + if (geometryRetryCount++ == 0) { + --camIdx; + continue; + } + fprintf(stderr, "[LudusCuda] geometry still overflowed after retry; zeroing camera output\n"); + CUDA_CHECK(cudaMemsetAsync( + outputPtr + (size_t)camIdx * height * width * 4, 0, + (size_t)width * height * 4, stream)); + geometryRetryCount = 0; + continue; + } + geometryRetryCount = 0; + // Debug: uncomment to log per-camera geometry counts and vertex data // fprintf(stderr, "[LudusCuda] cam %d: %d verts, %d tris (buf: %dx%d, cr: %dx%d)\n", // camIdx, actualVerts, actualTris, width, height, crWidth, crHeight); @@ -2269,7 +2374,8 @@ void ludusCudaRenderTimestamped( const TsPolylinePoolHeader* polylinePools, int numPolylinePools, const TsPolygonPoolHeader* polygonPools, int numPolygonPools, const TsCubePoolHeader* cubePools, int numCubePools, - int64_t queryTimestampUs, int maxExtrapolationUs, + int totalCubes, const int64_t* cubePoolCounts, + const int64_t* queryTimestampsUs, int maxExtrapolationUs, int maxVarraysPerTsPolyline, int maxVarraysPerTsPolygon, const CudaRenderParams& params, const FThetaCamera* cameras, const CameraPose* poses, @@ -2278,23 +2384,13 @@ void ludusCudaRenderTimestamped( { if (numCameras == 0 || width == 0 || height == 0) return; - // Pool headers live in device memory — copy to host for CPU-side logic - std::vector cbPoolsHost(numCubePools); - if (numCubePools > 0) - CUDA_CHECK(cudaMemcpy(cbPoolsHost.data(), cubePools, - numCubePools * sizeof(TsCubePoolHeader), - cudaMemcpyDeviceToHost)); - + // Pool headers stay device-resident; totalCubes is cached at scene upload. bool hasTess = params.tessellationThreshold > 0.0f; - int tessPolyMul = hasTess ? 16 : 1; - int tessLineMul = hasTess ? 8 : 1; - int tessCubeMul = hasTess ? 16 : 1; + int tessPolyMul = hasTess ? (1 << (2 * params.maxTessPolygon)) : 1; + int tessLineMul = hasTess ? (1 << params.maxTessPolyline) : 1; + int tessCubeMul = hasTess ? (1 << (2 * params.maxTessCube)) : 1; // Compute geometry budget per camera using actual per-timestamp max varrays - int totalCubes = 0; - for (int p = 0; p < numCubePools; p++) - totalCubes += (int)cbPoolsHost[p].num_cubes; - // Use per-timestamp max (computed from prefix sums on Python side) int mvPl = maxVarraysPerTsPolyline; int mvPg = maxVarraysPerTsPolygon; @@ -2338,10 +2434,13 @@ void ludusCudaRenderTimestamped( } } + int geometryRetryCount = 0; for (int camIdx = 0; camIdx < numCameras; camIdx++) { + int64_t queryTimestampUs = queryTimestampsUs[camIdx]; CUDA_CHECK(cudaMemsetAsync(s.atomicVertexCount, 0, sizeof(int), stream)); CUDA_CHECK(cudaMemsetAsync(s.atomicTriangleCount, 0, sizeof(int), stream)); + CUDA_CHECK(cudaMemsetAsync(s.atomicVertexCount + 2, 0, sizeof(int), stream)); const float* camData = (const float*)&cameras[camIdx]; const float* poseData = (const float*)&poses[camIdx]; @@ -2360,7 +2459,9 @@ void ludusCudaRenderTimestamped( // Cube pools (flat-buffer variant) for (int p = 0; p < numCubePools; p++) { - int nc = (int)cbPoolsHost[p].num_cubes; + // Pool sizes are captured on the host during scene upload, so + // dispatch exact grids without a per-frame device readback. + int nc = (int)cubePoolCounts[p]; if (nc <= 0) continue; int nCubeBlocks = (nc + CUBES_PER_BLOCK - 1) / CUBES_PER_BLOCK; cubePoolFlatKernel<<>>( @@ -2385,11 +2486,33 @@ void ludusCudaRenderTimestamped( } // Read back actual counts - int actualVerts = 0, actualTris = 0; + int actualVerts = 0, actualTris = 0, geometryOverflow = 0; CUDA_CHECK(cudaMemcpyAsync(&actualTris, s.atomicTriangleCount, sizeof(int), cudaMemcpyDeviceToHost, stream)); CUDA_CHECK(cudaMemcpyAsync(&actualVerts, s.atomicVertexCount, sizeof(int), cudaMemcpyDeviceToHost, stream)); + CUDA_CHECK(cudaMemcpyAsync(&geometryOverflow, s.atomicVertexCount + 2, sizeof(int), cudaMemcpyDeviceToHost, stream)); CUDA_CHECK(cudaStreamSynchronize(stream)); + if (geometryOverflow) { + fprintf(stderr, + "[LudusCudaTS] geometry capacity exceeded (%d/%d vertices, %d/%d triangles); " + "growing buffers\n", + actualVerts, s.maxVertices, actualTris, s.maxTriangles); + int requiredVerts = actualVerts > s.maxVertices ? actualVerts : s.maxVertices + 1; + int requiredTris = actualTris > s.maxTriangles ? actualTris : s.maxTriangles + 1; + ensureBuffers(s, requiredVerts, requiredTris); + if (geometryRetryCount++ == 0) { + --camIdx; + continue; + } + fprintf(stderr, "[LudusCudaTS] geometry still overflowed after retry; zeroing camera output\n"); + CUDA_CHECK(cudaMemsetAsync( + outputPtr + (size_t)camIdx * height * width * 4, 0, + (size_t)width * height * 4, stream)); + geometryRetryCount = 0; + continue; + } + geometryRetryCount = 0; + // Debug: uncomment to log per-camera geometry counts // fprintf(stderr, "[LudusCudaTS] cam %d: %d verts, %d tris (cr: %dx%d)\n", // camIdx, actualVerts, actualTris, crWidth, crHeight); diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/render/ludus_cuda.h b/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/render/ludus_cuda.h index 09fa371da..dd75a4b1e 100644 --- a/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/render/ludus_cuda.h +++ b/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/render/ludus_cuda.h @@ -64,7 +64,10 @@ struct LudusCudaState int allocatedVertices; int allocatedTriangles; - // Atomic counter for geometry generation + // Geometry reservation state. Vertex storage is [count, capacity, overflow] + // and triangle storage is [count, capacity]. Keeping capacities next to the + // counters lets every producer validate its atomic reservation without + // growing every kernel launch signature. int* atomicVertexCount; int* atomicTriangleCount; @@ -207,7 +210,8 @@ void ludusCudaRenderTimestamped( const TsPolylinePoolHeader* polylinePools, int numPolylinePools, const TsPolygonPoolHeader* polygonPools, int numPolygonPools, const TsCubePoolHeader* cubePools, int numCubePools, - int64_t queryTimestampUs, int maxExtrapolationUs, + int totalCubes, const int64_t* cubePoolCounts, + const int64_t* queryTimestampsUs, int maxExtrapolationUs, int maxVarraysPerTsPolyline, int maxVarraysPerTsPolygon, const CudaRenderParams& params, const FThetaCamera* cameras, const CameraPose* poses, diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/render/ludus_jpeg.cu b/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/render/ludus_jpeg.cu deleted file mode 100644 index a91b06321..000000000 --- a/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/render/ludus_jpeg.cu +++ /dev/null @@ -1,58 +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. - -// CUDA helper used by the Vulkan timestamped renderer to prep RGBA color -// buffers for nvJPEG encoding. The Vulkan render path uses an inverted -// viewport-height to match the shaders' GL-style NDC, which means the -// framebuffer is stored bottom-up in image memory. nvJPEG expects RGB -// top-down, so the kernel both strips alpha and flips rows. - -#include -#include - -__global__ void rgbaToRgbFlipKernel( - const uint8_t* __restrict__ srcRgba, - uint8_t* __restrict__ dstRgb, - int width, - int height) -{ - int x = blockIdx.x * blockDim.x + threadIdx.x; - int y = blockIdx.y * blockDim.y + threadIdx.y; - - if (x >= width || y >= height) return; - - int srcRow = height - 1 - y; - int srcIdx = (srcRow * width + x) * 4; - uint8_t r = srcRgba[srcIdx + 0]; - uint8_t g = srcRgba[srcIdx + 1]; - uint8_t b = srcRgba[srcIdx + 2]; - - int dstIdx = (y * width + x) * 3; - dstRgb[dstIdx + 0] = r; - dstRgb[dstIdx + 1] = g; - dstRgb[dstIdx + 2] = b; -} - -extern "C" void launchRgbaToRgbFlip( - const uint8_t* srcRgba, - uint8_t* dstRgb, - int width, - int height, - cudaStream_t stream) -{ - dim3 block(16, 16); - dim3 grid((width + block.x - 1) / block.x, (height + block.y - 1) / block.y); - rgbaToRgbFlipKernel<<>>(srcRgba, dstRgb, width, height); -} diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/render/ludus_timestamped_vk.cpp b/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/render/ludus_timestamped_vk.cpp deleted file mode 100644 index f449679c6..000000000 --- a/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/render/ludus_timestamped_vk.cpp +++ /dev/null @@ -1,1266 +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. - -//============================================================================= -// Vulkan Timestamped Renderer (VK_EXT_mesh_shader path). -// -// Port from the GL-based timestamped renderer to native Vulkan. Geometry is -// generated procedurally in task/mesh shaders. CUDA tensors are bridged in -// through VK_KHR_external_memory_fd: every SSBO that needs to receive CUDA -// writes is allocated as external memory and imported into CUDA, allowing -// PyTorch to copy directly into the Vulkan buffer with cudaMemcpyAsync. -//============================================================================= - -#include "ludus_vk.h" -#include "shaders_spv.h" // generated header with embedded SPIR-V byte arrays -#include -#include -#include -#include - -// VK_CHECK / VK_DBG / ludus_vk_debug() are shared from vkutil.h (included via -// ludus_vk.h). - -//============================================================================= -// SPIR-V Shader Module Creation -//============================================================================= - -static VkShaderModule createShaderModule(VkDevice device, const uint32_t* code, size_t bytes) -{ - VkShaderModuleCreateInfo ci = {VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO}; - ci.codeSize = bytes; - ci.pCode = code; - VkShaderModule module; - VK_CHECK(vkCreateShaderModule(device, &ci, nullptr, &module)); - return module; -} - -//============================================================================= -// Render Pass -//============================================================================= - -static VkRenderPass createTimestampedRenderPass( - VkDevice device, VkFormat colorFormat, VkFormat depthFormat, - VkSampleCountFlagBits samples) -{ - bool msaa = (samples != VK_SAMPLE_COUNT_1_BIT); - - std::vector attachments; - std::vector colorRefs, resolveRefs, depthRefs; - - if (msaa) { - VkAttachmentDescription msaaColor = {}; - msaaColor.format = colorFormat; - msaaColor.samples = samples; - msaaColor.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR; - msaaColor.storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE; - msaaColor.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE; - msaaColor.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE; - msaaColor.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; - msaaColor.finalLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; - attachments.push_back(msaaColor); - - VkAttachmentDescription resolveColor = {}; - resolveColor.format = colorFormat; - resolveColor.samples = VK_SAMPLE_COUNT_1_BIT; - resolveColor.loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE; - resolveColor.storeOp = VK_ATTACHMENT_STORE_OP_STORE; - resolveColor.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE; - resolveColor.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE; - resolveColor.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; - resolveColor.finalLayout = VK_IMAGE_LAYOUT_GENERAL; - attachments.push_back(resolveColor); - - VkAttachmentDescription msaaDepth = {}; - msaaDepth.format = depthFormat; - msaaDepth.samples = samples; - msaaDepth.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR; - msaaDepth.storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE; - msaaDepth.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_CLEAR; - msaaDepth.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE; - msaaDepth.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; - msaaDepth.finalLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL; - attachments.push_back(msaaDepth); - - colorRefs.push_back({0, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL}); - resolveRefs.push_back({1, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL}); - depthRefs.push_back({2, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL}); - } else { - VkAttachmentDescription color = {}; - color.format = colorFormat; - color.samples = VK_SAMPLE_COUNT_1_BIT; - color.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR; - color.storeOp = VK_ATTACHMENT_STORE_OP_STORE; - color.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE; - color.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE; - color.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; - color.finalLayout = VK_IMAGE_LAYOUT_GENERAL; - attachments.push_back(color); - - VkAttachmentDescription depth = {}; - depth.format = depthFormat; - depth.samples = VK_SAMPLE_COUNT_1_BIT; - depth.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR; - depth.storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE; - depth.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_CLEAR; - depth.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE; - depth.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; - depth.finalLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL; - attachments.push_back(depth); - - colorRefs.push_back({0, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL}); - depthRefs.push_back({1, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL}); - } - - VkSubpassDescription subpass = {}; - subpass.pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS; - subpass.colorAttachmentCount = (uint32_t)colorRefs.size(); - subpass.pColorAttachments = colorRefs.data(); - subpass.pResolveAttachments = msaa ? resolveRefs.data() : nullptr; - subpass.pDepthStencilAttachment = depthRefs.data(); - - VkSubpassDependency dep = {}; - dep.srcSubpass = VK_SUBPASS_EXTERNAL; - dep.dstSubpass = 0; - dep.srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT; - dep.dstStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT; - dep.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; - - VkRenderPassCreateInfo rpCI = {VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO}; - rpCI.attachmentCount = (uint32_t)attachments.size(); - rpCI.pAttachments = attachments.data(); - rpCI.subpassCount = 1; - rpCI.pSubpasses = &subpass; - rpCI.dependencyCount = 1; - rpCI.pDependencies = &dep; - - VkRenderPass renderPass; - VK_CHECK(vkCreateRenderPass(device, &rpCI, nullptr, &renderPass)); - return renderPass; -} - -//============================================================================= -// Descriptor Set Layout (14 SSBOs matching the GL/CUDA backend binding slots) -//============================================================================= - -static VkDescriptorSetLayout createDescriptorSetLayout(VkDevice device) -{ - constexpr uint32_t kNumBindings = 14; - std::vector bindings; - for (uint32_t i = 0; i < kNumBindings; i++) { - VkDescriptorSetLayoutBinding b = {}; - b.binding = i; - b.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER; - b.descriptorCount = 1; - b.stageFlags = VK_SHADER_STAGE_TASK_BIT_EXT - | VK_SHADER_STAGE_MESH_BIT_EXT - | VK_SHADER_STAGE_FRAGMENT_BIT; - bindings.push_back(b); - } - - VkDescriptorSetLayoutCreateInfo ci = {VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO}; - ci.bindingCount = (uint32_t)bindings.size(); - ci.pBindings = bindings.data(); - - VkDescriptorSetLayout layout; - VK_CHECK(vkCreateDescriptorSetLayout(device, &ci, nullptr, &layout)); - return layout; -} - -//============================================================================= -// Pipeline Layout -//============================================================================= - -static VkPipelineLayout createPipelineLayout(VkDevice device, VkDescriptorSetLayout dsLayout) -{ - VkPushConstantRange pushRange = {}; - pushRange.stageFlags = VK_SHADER_STAGE_TASK_BIT_EXT - | VK_SHADER_STAGE_MESH_BIT_EXT - | VK_SHADER_STAGE_FRAGMENT_BIT; - pushRange.offset = 0; - pushRange.size = sizeof(LudusPushConstants); - - VkPipelineLayoutCreateInfo ci = {VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO}; - ci.setLayoutCount = 1; - ci.pSetLayouts = &dsLayout; - ci.pushConstantRangeCount = 1; - ci.pPushConstantRanges = &pushRange; - - VkPipelineLayout layout; - VK_CHECK(vkCreatePipelineLayout(device, &ci, nullptr, &layout)); - return layout; -} - -//============================================================================= -// Mesh Pipeline (task + mesh + fragment) -//============================================================================= - -static VkPipeline createMeshPipeline( - VkDevice device, - VkPipelineLayout layout, - VkRenderPass renderPass, - VkShaderModule taskModule, - VkShaderModule meshModule, - VkShaderModule fragModule, - VkSampleCountFlagBits samples) -{ - std::vector stages; - - if (taskModule != VK_NULL_HANDLE) { - VkPipelineShaderStageCreateInfo taskStage = {VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO}; - taskStage.stage = VK_SHADER_STAGE_TASK_BIT_EXT; - taskStage.module = taskModule; - taskStage.pName = "main"; - stages.push_back(taskStage); - } - - VkPipelineShaderStageCreateInfo meshStage = {VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO}; - meshStage.stage = VK_SHADER_STAGE_MESH_BIT_EXT; - meshStage.module = meshModule; - meshStage.pName = "main"; - stages.push_back(meshStage); - - VkPipelineShaderStageCreateInfo fragStage = {VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO}; - fragStage.stage = VK_SHADER_STAGE_FRAGMENT_BIT; - fragStage.module = fragModule; - fragStage.pName = "main"; - stages.push_back(fragStage); - - VkPipelineViewportStateCreateInfo viewportState = {VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO}; - viewportState.viewportCount = 1; - viewportState.scissorCount = 1; - - VkPipelineRasterizationStateCreateInfo rasterState = {VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO}; - rasterState.polygonMode = VK_POLYGON_MODE_FILL; - rasterState.cullMode = VK_CULL_MODE_NONE; - rasterState.frontFace = VK_FRONT_FACE_COUNTER_CLOCKWISE; - rasterState.lineWidth = 1.0f; - - VkPipelineMultisampleStateCreateInfo msaaState = {VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO}; - msaaState.rasterizationSamples = samples; - - VkPipelineDepthStencilStateCreateInfo depthState = {VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO}; - depthState.depthTestEnable = VK_TRUE; - depthState.depthWriteEnable = VK_TRUE; - depthState.depthCompareOp = VK_COMPARE_OP_LESS; - - VkPipelineColorBlendAttachmentState blendAttachment = {}; - blendAttachment.colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | - VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT; - - VkPipelineColorBlendStateCreateInfo blendState = {VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO}; - blendState.attachmentCount = 1; - blendState.pAttachments = &blendAttachment; - - VkDynamicState dynamicStates[] = {VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR}; - VkPipelineDynamicStateCreateInfo dynamicState = {VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO}; - dynamicState.dynamicStateCount = 2; - dynamicState.pDynamicStates = dynamicStates; - - VkGraphicsPipelineCreateInfo pipelineCI = {VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO}; - pipelineCI.stageCount = (uint32_t)stages.size(); - pipelineCI.pStages = stages.data(); - pipelineCI.pViewportState = &viewportState; - pipelineCI.pRasterizationState = &rasterState; - pipelineCI.pMultisampleState = &msaaState; - pipelineCI.pDepthStencilState = &depthState; - pipelineCI.pColorBlendState = &blendState; - pipelineCI.pDynamicState = &dynamicState; - pipelineCI.layout = layout; - pipelineCI.renderPass = renderPass; - pipelineCI.subpass = 0; - - VkPipeline pipeline; - VkResult r = vkCreateGraphicsPipelines(device, VK_NULL_HANDLE, 1, &pipelineCI, nullptr, &pipeline); - TORCH_CHECK(r == VK_SUCCESS, "vkCreateGraphicsPipelines failed for mesh pipeline: ", (int)r); - return pipeline; -} - -//============================================================================= -// Descriptor Set Update -//============================================================================= - -static void updateDescriptorSet(VkDevice device, VkDescriptorSet& ds, LudusTimestampedVkState& s) -{ - struct BufInfo { uint32_t binding; VkBuffer buffer; VkDeviceSize size; }; - BufInfo bufs[] = { - { 0, s.timestampsBuffer.buffer, s.timestampsBuffer.size}, - { 1, s.int32Buffer.buffer, s.int32Buffer.size}, - { 2, s.vertexBuffer.buffer, s.vertexBuffer.size}, - { 3, s.triangleBuffer.buffer, s.triangleBuffer.size}, - { 4, s.poseBuffer.buffer, s.poseBuffer.size}, - { 5, s.floatBuffer.buffer, s.floatBuffer.size}, - { 6, s.sceneBuffer.buffer, s.sceneBuffer.size}, - { 7, s.polylinePoolBuffer.buffer, s.polylinePoolBuffer.size}, - { 8, s.polygonPoolBuffer.buffer, s.polygonPoolBuffer.size}, - { 9, s.obstaclePoolBuffer.buffer, s.obstaclePoolBuffer.size}, - {10, s.colorPaletteBuffer.buffer, s.colorPaletteBuffer.size}, - {11, s.cameraIntrinsicsBuffer.buffer, s.cameraIntrinsicsBuffer.size}, - {12, s.cameraPoseBuffer.buffer, s.cameraPoseBuffer.size}, - {13, s.queryBuffer.buffer, s.queryBuffer.size}, - }; - - std::vector writes; - std::vector bufInfos(14); - - for (int i = 0; i < 14; i++) { - if (bufs[i].buffer == VK_NULL_HANDLE || bufs[i].size == 0) - continue; - - bufInfos[i].buffer = bufs[i].buffer; - bufInfos[i].offset = 0; - bufInfos[i].range = bufs[i].size; - - VkWriteDescriptorSet w = {VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET}; - w.dstSet = ds; - w.dstBinding = bufs[i].binding; - w.descriptorCount = 1; - w.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER; - w.pBufferInfo = &bufInfos[i]; - writes.push_back(w); - } - - if (!writes.empty()) { - // Reset and re-allocate to avoid stale-handle cache when a buffer was - // resized and the underlying VkBuffer is reused at a new GPU address. - vkResetDescriptorPool(device, s.descriptorPool, 0); - VkDescriptorSetAllocateInfo realloc = {VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO}; - realloc.descriptorPool = s.descriptorPool; - realloc.descriptorSetCount = 1; - realloc.pSetLayouts = &s.descriptorSetLayout; - vkAllocateDescriptorSets(device, &realloc, &ds); - for (auto& w : writes) - w.dstSet = ds; - vkUpdateDescriptorSets(device, (uint32_t)writes.size(), writes.data(), 0, nullptr); - } -} - -//============================================================================= -// Initialization -//============================================================================= - -void ludusTimestampedInitVk(NVDR_CTX_ARGS, LudusTimestampedVkState& s, int cudaDeviceIdx) -{ - (void)nvdr_ctx; - memset(&s, 0, sizeof(s)); - - // cuImportExternalMemory and friends require a current CUDA context. - // Force the runtime to materialize a primary context on the requested - // device before any external-memory imports happen during init. - cudaSetDevice(cudaDeviceIdx); - cudaFree(nullptr); - - s.vkctx = createVkContext(cudaDeviceIdx); - s.hasMeshShader = s.vkctx.hasMeshShader ? 1 : 0; - - s.msaaSamples = 0; - s.tessellationThreshold = 1.0f; - s.maxTessellationLevelPolyline = 4; - s.maxTessellationLevelPolygon = 3; - s.maxTessellationLevelCube = 3; - s.depthScaling = 1.0f; - s.maxExtrapolationUs = 500000; - s.cullRadiusScale = 1.5f; - - s.renderPass = createTimestampedRenderPass( - s.vkctx.device, VK_FORMAT_R8G8B8A8_UNORM, VK_FORMAT_D24_UNORM_S8_UINT, - VK_SAMPLE_COUNT_1_BIT - ); - - s.descriptorSetLayout = createDescriptorSetLayout(s.vkctx.device); - s.pipelineLayout = createPipelineLayout(s.vkctx.device, s.descriptorSetLayout); - - VkDescriptorPoolSize poolSize = {}; - poolSize.type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER; - poolSize.descriptorCount = 14; - - VkDescriptorPoolCreateInfo poolCI = {VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO}; - poolCI.maxSets = 1; - poolCI.poolSizeCount = 1; - poolCI.pPoolSizes = &poolSize; - VK_CHECK(vkCreateDescriptorPool(s.vkctx.device, &poolCI, nullptr, &s.descriptorPool)); - - VkDescriptorSetAllocateInfo dsAllocCI = {VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO}; - dsAllocCI.descriptorPool = s.descriptorPool; - dsAllocCI.descriptorSetCount = 1; - dsAllocCI.pSetLayouts = &s.descriptorSetLayout; - VK_CHECK(vkAllocateDescriptorSets(s.vkctx.device, &dsAllocCI, &s.descriptorSet)); - - // Embedded SPIR-V (generated from shaders/*.spv at build time). - struct ShaderBin { const uint32_t* code; size_t bytes; }; - const ShaderBin bins[9] = { - {kSpv_ts_polyline_task, sizeof(kSpv_ts_polyline_task)}, - {kSpv_ts_polyline_mesh, sizeof(kSpv_ts_polyline_mesh)}, - {kSpv_ts_polyline_frag, sizeof(kSpv_ts_polyline_frag)}, - {kSpv_ts_polygon_task, sizeof(kSpv_ts_polygon_task)}, - {kSpv_ts_polygon_mesh, sizeof(kSpv_ts_polygon_mesh)}, - {kSpv_ts_polygon_frag, sizeof(kSpv_ts_polygon_frag)}, - {kSpv_ts_obstacle_task, sizeof(kSpv_ts_obstacle_task)}, - {kSpv_ts_obstacle_mesh, sizeof(kSpv_ts_obstacle_mesh)}, - {kSpv_ts_obstacle_frag, sizeof(kSpv_ts_obstacle_frag)}, - }; - for (int i = 0; i < 9; i++) - s.shaderModules[i] = createShaderModule(s.vkctx.device, bins[i].code, bins[i].bytes); - - VkSampleCountFlagBits samples = VK_SAMPLE_COUNT_1_BIT; - s.pipelinePolyline = createMeshPipeline(s.vkctx.device, s.pipelineLayout, s.renderPass, - s.shaderModules[0], s.shaderModules[1], s.shaderModules[2], samples); - s.pipelinePolygon = createMeshPipeline(s.vkctx.device, s.pipelineLayout, s.renderPass, - s.shaderModules[3], s.shaderModules[4], s.shaderModules[5], samples); - s.pipelineObstacle = createMeshPipeline(s.vkctx.device, s.pipelineLayout, s.renderPass, - s.shaderModules[6], s.shaderModules[7], s.shaderModules[8], samples); - s.renderPassSamples = 1; // render pass + pipelines built single-sample above - - // Dummy buffers so every descriptor binding has a valid buffer before - // the first upload_scene call. Most aren't CUDA-importable because they - // hold placeholder data; the ones the uploader writes through CUDA are - // marked importable. - VkDeviceSize dummySize = 256; - VkBufferUsageFlags ssboUsage = VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT; - auto makeDummy = [&](VkExternalBuffer& buf, bool needsCuda = false) { - if (buf.buffer == VK_NULL_HANDLE) - buf = createExternalBuffer(s.vkctx, dummySize, ssboUsage, needsCuda); - }; - makeDummy(s.timestampsBuffer); - makeDummy(s.int32Buffer); - makeDummy(s.vertexBuffer); - makeDummy(s.triangleBuffer); - makeDummy(s.poseBuffer); - makeDummy(s.floatBuffer); - // Scene buffer: smaller dummy so uploadScene always creates a larger one - s.sceneBuffer = createExternalBuffer(s.vkctx, 64, ssboUsage, false); - makeDummy(s.polylinePoolBuffer, true); - makeDummy(s.polygonPoolBuffer, true); - makeDummy(s.obstaclePoolBuffer, true); - makeDummy(s.colorPaletteBuffer); - makeDummy(s.cameraIntrinsicsBuffer); - makeDummy(s.cameraPoseBuffer); - makeDummy(s.queryBuffer); - updateDescriptorSet(s.vkctx.device, s.descriptorSet, s); - - cudaStreamCreate(&s.copyStream); - for (int i = 0; i < 2; i++) { - cudaEventCreateWithFlags(&s.stagingReadyEvent[i], cudaEventDisableTiming); - cudaEventCreateWithFlags(&s.pinnedReadyEvent[i], cudaEventDisableTiming); - } - - VK_DBG("[Vulkan] Timestamped renderer initialized\n"); -} - -//============================================================================= -// Buffer Resize Helpers -//============================================================================= - -static const VkBufferUsageFlags SSBO_USAGE = - VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT; - -static void ensureBuffers(LudusTimestampedVkState& s, bool& changed) -{ - // We always want CUDA-importable buffers here so the uploader can write - // directly through cudaMemcpyAsync. A dummy buffer that was created - // without CUDA import (cuDevPtr == 0) must be recreated even if its - // Vulkan-side size already exceeds the requested capacity, otherwise - // upload_scene will hit the "no CUDA pointer" guard. - auto resize = [&](VkExternalBuffer& buf, int capacity, size_t elemSize) { - VkDeviceSize needed = (VkDeviceSize)capacity * elemSize; - if (needed == 0) return; - bool needs_cuda_upgrade = (buf.cuDevPtr == 0); - bool needs_grow = (buf.buffer == VK_NULL_HANDLE || buf.size < needed); - if (needs_grow || needs_cuda_upgrade) { - VkDeviceSize target = std::max(needed, buf.size); - resizeExternalBuffer(s.vkctx, buf, target, SSBO_USAGE, true); - changed = true; - } - }; - - resize(s.timestampsBuffer, s.timestampsCapacity, sizeof(int64_t)); - resize(s.int32Buffer, s.int32Capacity, sizeof(int32_t)); - resize(s.vertexBuffer, s.vertexCapacity, sizeof(Vertex)); - resize(s.triangleBuffer, s.triangleCapacity, sizeof(Triangle)); - resize(s.poseBuffer, s.poseCapacity, sizeof(CameraPose)); - resize(s.floatBuffer, s.floatCapacity, sizeof(float)); - resize(s.polylinePoolBuffer, s.polylinePoolCapacity, sizeof(TimestampedPolylinePool)); - resize(s.polygonPoolBuffer, s.polygonPoolCapacity, sizeof(TimestampedPolygonPool)); - resize(s.obstaclePoolBuffer, s.obstaclePoolCapacity, sizeof(ObstaclePool)); - resize(s.cameraIntrinsicsBuffer, s.cameraCapacity, sizeof(FThetaCamera)); - resize(s.cameraPoseBuffer, s.queryCapacity, sizeof(CameraPose)); - resize(s.queryBuffer, s.queryCapacity, sizeof(RenderQuery)); -} - -// Rebuild the render pass + pipelines for a new sample count (their attachment -// layout and rasterizationSamples are fixed at creation). Caller must be idle. -static void rebuildRenderPassAndPipelines(LudusTimestampedVkState& s, VkSampleCountFlagBits samples) -{ - if (s.pipelinePolyline) { vkDestroyPipeline(s.vkctx.device, s.pipelinePolyline, nullptr); s.pipelinePolyline = VK_NULL_HANDLE; } - if (s.pipelinePolygon) { vkDestroyPipeline(s.vkctx.device, s.pipelinePolygon, nullptr); s.pipelinePolygon = VK_NULL_HANDLE; } - if (s.pipelineObstacle) { vkDestroyPipeline(s.vkctx.device, s.pipelineObstacle, nullptr); s.pipelineObstacle = VK_NULL_HANDLE; } - if (s.renderPass) { vkDestroyRenderPass(s.vkctx.device, s.renderPass, nullptr); s.renderPass = VK_NULL_HANDLE; } - - s.renderPass = createTimestampedRenderPass( - s.vkctx.device, VK_FORMAT_R8G8B8A8_UNORM, VK_FORMAT_D24_UNORM_S8_UINT, samples); - - s.pipelinePolyline = createMeshPipeline(s.vkctx.device, s.pipelineLayout, s.renderPass, - s.shaderModules[0], s.shaderModules[1], s.shaderModules[2], samples); - s.pipelinePolygon = createMeshPipeline(s.vkctx.device, s.pipelineLayout, s.renderPass, - s.shaderModules[3], s.shaderModules[4], s.shaderModules[5], samples); - s.pipelineObstacle = createMeshPipeline(s.vkctx.device, s.pipelineLayout, s.renderPass, - s.shaderModules[6], s.shaderModules[7], s.shaderModules[8], samples); - - s.renderPassSamples = (samples == VK_SAMPLE_COUNT_1_BIT) ? 1 : (int)samples; -} - -static void ensureFramebuffer(LudusTimestampedVkState& s, int width, int height, int layers) -{ - if (s.width == width && s.height == height && s.maxLayers >= layers) - return; - - vkDeviceWaitIdle(s.vkctx.device); - - // Rebuild the render pass/pipelines if the sample count changed so they - // match the framebuffer created below. - int desiredSamplesInt = (s.msaaSamples > 1) ? s.msaaSamples : 1; - if (s.renderPassSamples != desiredSamplesInt) { - rebuildRenderPassAndPipelines(s, (VkSampleCountFlagBits)desiredSamplesInt); - } - - if (s.framebuffer) { vkDestroyFramebuffer(s.vkctx.device, s.framebuffer, nullptr); s.framebuffer = VK_NULL_HANDLE; } - destroyExternalImage(s.vkctx, s.colorImage); - destroyExternalImage(s.vkctx, s.depthStencilImage); - if (s.msaaSamples > 1) { - destroyExternalImage(s.vkctx, s.colorImageMSAA); - destroyExternalImage(s.vkctx, s.depthStencilImageMSAA); - } - - s.width = width; - s.height = height; - s.maxLayers = layers; - - s.colorImage = createExternalImage(s.vkctx, width, height, layers, - VK_FORMAT_R8G8B8A8_UNORM, - VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT, - VK_SAMPLE_COUNT_1_BIT, true); - - s.depthStencilImage = createExternalImage(s.vkctx, width, height, layers, - VK_FORMAT_D24_UNORM_S8_UINT, - VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, - VK_SAMPLE_COUNT_1_BIT, false); - - std::vector fbAttachments; - if (s.msaaSamples > 1) { - VkSampleCountFlagBits samples = (VkSampleCountFlagBits)s.msaaSamples; - s.colorImageMSAA = createExternalImage(s.vkctx, width, height, layers, - VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, - samples, false); - s.depthStencilImageMSAA = createExternalImage(s.vkctx, width, height, layers, - VK_FORMAT_D24_UNORM_S8_UINT, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, - samples, false); - fbAttachments = {s.colorImageMSAA.imageView, s.colorImage.imageView, s.depthStencilImageMSAA.imageView}; - } else { - fbAttachments = {s.colorImage.imageView, s.depthStencilImage.imageView}; - } - - VkFramebufferCreateInfo fbCI = {VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO}; - fbCI.renderPass = s.renderPass; - fbCI.attachmentCount = (uint32_t)fbAttachments.size(); - fbCI.pAttachments = fbAttachments.data(); - fbCI.width = width; - fbCI.height = height; - fbCI.layers = layers; - VK_CHECK(vkCreateFramebuffer(s.vkctx.device, &fbCI, nullptr, &s.framebuffer)); - - size_t frameSize = (size_t)width * height * 4 * layers; - if (frameSize > s.stagingBufferSize) { - for (int i = 0; i < 2; i++) { - if (s.stagingBuffer[i]) cudaFree(s.stagingBuffer[i]); - cudaMalloc(&s.stagingBuffer[i], frameSize); - s.stagingValid[i] = 0; - } - s.stagingBufferSize = frameSize; - } -} - -//============================================================================= -// Scene Upload -//============================================================================= - -void ludusUploadCamerasVk( - NVDR_CTX_ARGS, LudusTimestampedVkState& s, cudaStream_t stream, - const FThetaCamera* intrinsics, int numCameras) -{ - (void)nvdr_ctx; - if (numCameras > s.cameraCapacity) { - s.cameraCapacity = numCameras; - resizeExternalBuffer(s.vkctx, s.cameraIntrinsicsBuffer, - numCameras * sizeof(FThetaCamera), SSBO_USAGE, true); - } - s.numCameras = numCameras; - - cudaMemcpyAsync((void*)s.cameraIntrinsicsBuffer.cuDevPtr, intrinsics, - numCameras * sizeof(FThetaCamera), cudaMemcpyDeviceToDevice, stream); - s.sceneBuffersDirty = 1; - - updateDescriptorSet(s.vkctx.device, s.descriptorSet, s); -} - -void ludusUploadColorPaletteVk( - NVDR_CTX_ARGS, LudusTimestampedVkState& s, cudaStream_t stream, - const float* colors, int numColors) -{ - (void)nvdr_ctx; - VkDeviceSize size = numColors * 4 * sizeof(float); - resizeExternalBuffer(s.vkctx, s.colorPaletteBuffer, size, SSBO_USAGE, true); - cudaMemcpyAsync((void*)s.colorPaletteBuffer.cuDevPtr, colors, size, - cudaMemcpyDeviceToDevice, stream); - s.colorPaletteSize = numColors; - s.sceneBuffersDirty = 1; - updateDescriptorSet(s.vkctx.device, s.descriptorSet, s); -} - -int ludusUploadSceneVk( - NVDR_CTX_ARGS, LudusTimestampedVkState& s, cudaStream_t stream, - const TimestampedScene* sceneDesc, - const TimestampedPolylinePool* polylinePools, int numPolylinePools, - const TimestampedPolygonPool* polygonPools, int numPolygonPools, - const ObstaclePool* obstaclePools, int numObstaclePools, - int maxObstaclesInPool, - int maxVarraysPerTsPolyline, int maxVarraysPerTsPolygon, - const int64_t* timestamps, int numTimestamps, - const int32_t* int32Data, int numInt32, - const Vertex* vertices, int numVertices, - const Triangle* triangles, int numTriangles, - const CameraPose* poses, int numPoses, - const float* floatData, int numFloats) -{ - (void)nvdr_ctx; - int sceneId = s.numScenes++; - - s.timestampsCapacity = std::max(s.timestampsCapacity, s.timestampsUsed + numTimestamps); - s.int32Capacity = std::max(s.int32Capacity, s.int32Used + numInt32); - s.vertexCapacity = std::max(s.vertexCapacity, s.vertexUsed + numVertices); - s.triangleCapacity = std::max(s.triangleCapacity, s.triangleUsed + numTriangles); - s.poseCapacity = std::max(s.poseCapacity, s.poseUsed + numPoses); - s.floatCapacity = std::max(s.floatCapacity, s.floatUsed + numFloats); - s.polylinePoolCapacity = std::max(s.polylinePoolCapacity, s.polylinePoolUsed + numPolylinePools); - s.polygonPoolCapacity = std::max(s.polygonPoolCapacity, s.polygonPoolUsed + numPolygonPools); - s.obstaclePoolCapacity = std::max(s.obstaclePoolCapacity, s.obstaclePoolUsed + numObstaclePools); - s.maxObstaclesPerPool = std::max(s.maxObstaclesPerPool, maxObstaclesInPool); - s.maxPolylinePoolsPerScene = std::max(s.maxPolylinePoolsPerScene, numPolylinePools); - s.maxPolygonPoolsPerScene = std::max(s.maxPolygonPoolsPerScene, numPolygonPools); - s.maxCubePoolsPerScene = std::max(s.maxCubePoolsPerScene, numObstaclePools); - s.maxVarraysPerTsPolyline = std::max(s.maxVarraysPerTsPolyline, maxVarraysPerTsPolyline); - s.maxVarraysPerTsPolygon = std::max(s.maxVarraysPerTsPolygon, maxVarraysPerTsPolygon); - - int sceneCapNeeded = sceneId + 1; - if (sceneCapNeeded > s.maxScenes) { - s.maxScenes = sceneCapNeeded; - resizeExternalBuffer(s.vkctx, s.sceneBuffer, - s.maxScenes * sizeof(TimestampedScene), SSBO_USAGE, true); - } - - bool changed = false; - ensureBuffers(s, changed); - - auto copyAppend = [&](VkExternalBuffer& buf, const void* data, int count, size_t elemSize, - int& used, const char* tag) { - if (count > 0 && data) { - TORCH_CHECK(buf.cuDevPtr != 0, - "upload_scene: buffer ", tag, " has no CUDA pointer (cudaImportable not set?)"); - size_t dstOff = (size_t)used * elemSize; - size_t bytes = (size_t)count * elemSize; - CUdeviceptr dst = buf.cuDevPtr + dstOff; - cudaError_t e = cudaMemcpyAsync((void*)dst, data, bytes, - cudaMemcpyDeviceToDevice, stream); - TORCH_CHECK(e == cudaSuccess, "upload_scene: cudaMemcpyAsync ", tag, - " failed: ", (int)e); - VK_DBG("[Vulkan] upload %6s: count=%d bytes=%zu\n", tag, count, bytes); - } - int offset = used; - used += count; - return offset; - }; - - copyAppend(s.timestampsBuffer, timestamps, numTimestamps, sizeof(int64_t), s.timestampsUsed, "ts"); - copyAppend(s.int32Buffer, int32Data, numInt32, sizeof(int32_t), s.int32Used, "i32"); - copyAppend(s.vertexBuffer, vertices, numVertices, sizeof(Vertex), s.vertexUsed, "vert"); - copyAppend(s.triangleBuffer, triangles, numTriangles, sizeof(Triangle), s.triangleUsed, "tri"); - copyAppend(s.poseBuffer, poses, numPoses, sizeof(CameraPose), s.poseUsed, "pose"); - copyAppend(s.floatBuffer, floatData, numFloats, sizeof(float), s.floatUsed, "flt"); - copyAppend(s.polylinePoolBuffer, polylinePools, numPolylinePools, sizeof(TimestampedPolylinePool), s.polylinePoolUsed, "pl"); - copyAppend(s.polygonPoolBuffer, polygonPools, numPolygonPools, sizeof(TimestampedPolygonPool), s.polygonPoolUsed, "pg"); - copyAppend(s.obstaclePoolBuffer, obstaclePools, numObstaclePools, sizeof(ObstaclePool), s.obstaclePoolUsed, "obs"); - - TORCH_CHECK(s.sceneBuffer.cuDevPtr != 0, - "upload_scene: sceneBuffer has no CUDA pointer (cudaImportable not set?)"); - cudaError_t e_scene = cudaMemcpyAsync( - (void*)(s.sceneBuffer.cuDevPtr + sceneId * sizeof(TimestampedScene)), - sceneDesc, sizeof(TimestampedScene), cudaMemcpyDeviceToDevice, stream); - TORCH_CHECK(e_scene == cudaSuccess, - "upload_scene: cudaMemcpyAsync (scene desc) failed: ", (int)e_scene); - - s.sceneBuffersDirty = 1; - updateDescriptorSet(s.vkctx.device, s.descriptorSet, s); - return sceneId; -} - -void ludusRemoveSceneVk(NVDR_CTX_ARGS, LudusTimestampedVkState& s, int sceneId, cudaStream_t stream) -{ - (void)nvdr_ctx; - // Tombstone the scene descriptor's first int so shaders skip it. HostToDevice - // (source is host memory) and synchronous so `zero` outlives the copy. - const int zero = 0; - cudaError_t e = cudaMemcpyAsync( - (void*)(s.sceneBuffer.cuDevPtr + sceneId * sizeof(TimestampedScene)), - &zero, sizeof(int), cudaMemcpyHostToDevice, stream); - TORCH_CHECK(e == cudaSuccess, "remove_scene: cudaMemcpyAsync (tombstone) failed: ", (int)e); - cudaStreamSynchronize(stream); - s.sceneBuffersDirty = 1; -} - -//============================================================================= -// Render Batch -//============================================================================= - -void ludusRenderBatchVk( - NVDR_CTX_ARGS, LudusTimestampedVkState& s, cudaStream_t stream, - const RenderQuery* queries, const CameraPose* cameraPoses, - int numQueries, int width, int height) -{ - (void)nvdr_ctx; - if (numQueries <= 0) return; - - VK_DBG("[Vulkan] renderBatch: nq=%d size=%dx%d\n", numQueries, width, height); - - ensureFramebuffer(s, width, height, numQueries); - - if (numQueries > s.queryCapacity) { - s.queryCapacity = numQueries; - resizeExternalBuffer(s.vkctx, s.queryBuffer, - numQueries * sizeof(RenderQuery), SSBO_USAGE, true); - resizeExternalBuffer(s.vkctx, s.cameraPoseBuffer, - numQueries * sizeof(CameraPose), SSBO_USAGE, true); - updateDescriptorSet(s.vkctx.device, s.descriptorSet, s); - } - - cudaError_t e1 = cudaMemcpyAsync((void*)s.queryBuffer.cuDevPtr, queries, - numQueries * sizeof(RenderQuery), cudaMemcpyDeviceToDevice, stream); - cudaError_t e2 = cudaMemcpyAsync((void*)s.cameraPoseBuffer.cuDevPtr, cameraPoses, - numQueries * sizeof(CameraPose), cudaMemcpyDeviceToDevice, stream); - TORCH_CHECK(e1 == cudaSuccess, "renderBatch: cudaMemcpyAsync (queries) failed: ", (int)e1); - TORCH_CHECK(e2 == cudaSuccess, "renderBatch: cudaMemcpyAsync (poses) failed: ", (int)e2); - - // Ensure all CUDA writes are visible before Vulkan reads. Simple - // synchronous handoff: cudaStreamSynchronize -> vkQueueSubmit(fence) -> - // vkWaitForFences. Future optimization: replace with timeline semaphore. - cudaStreamSynchronize(stream); - - vkResetFences(s.vkctx.device, 1, &s.vkctx.fence); - - VkCommandBuffer cmd = s.vkctx.commandBuffer; - VkCommandBufferBeginInfo beginCI = {VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO}; - beginCI.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT; - VK_CHECK(vkBeginCommandBuffer(cmd, &beginCI)); - - // CUDA->Vulkan coherence workaround for drivers where CUDA writes to - // VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD memory are not made fully - // visible to subsequent Vulkan shader reads even after a queue-family - // ownership transfer. Reads each CUDA-imported buffer back to a host - // staging copy and writes it back through vkCmdUpdateBuffer (which - // goes through Vulkan's own coherent transfer path). Opt out via - // LUDUS_VK_DIRECT_IMPORT=1 if the driver doesn't need this hack. - // Not static: re-read each call so the env var isn't latched at first render. - const bool kHostRoundtrip = (getenv("LUDUS_VK_DIRECT_IMPORT") == nullptr); - if (kHostRoundtrip) { - auto copyToVk = [&](VkExternalBuffer& buf) { - if (buf.buffer == VK_NULL_HANDLE || buf.size == 0 || buf.cuDevPtr == 0) return; - size_t sz = (size_t)buf.size; - std::vector host(sz); - cudaMemcpy(host.data(), (void*)buf.cuDevPtr, sz, cudaMemcpyDeviceToHost); - // vkCmdUpdateBuffer must be called in <=65536 byte chunks per Vulkan spec. - for (size_t off = 0; off < sz; off += 65536) { - size_t chunk = std::min((size_t)65536, sz - off); - vkCmdUpdateBuffer(cmd, buf.buffer, off, chunk, host.data() + off); - } - }; - // Per-query buffers are rewritten by CUDA every render -> always push. - copyToVk(s.cameraPoseBuffer); - copyToVk(s.queryBuffer); - // Scene/camera/palette buffers only change on upload/remove/clear, so - // push them once after such an op instead of every frame. - if (s.sceneBuffersDirty) { - copyToVk(s.timestampsBuffer); - copyToVk(s.int32Buffer); - copyToVk(s.vertexBuffer); - copyToVk(s.triangleBuffer); - copyToVk(s.poseBuffer); - copyToVk(s.floatBuffer); - copyToVk(s.sceneBuffer); - copyToVk(s.polylinePoolBuffer); - copyToVk(s.polygonPoolBuffer); - copyToVk(s.obstaclePoolBuffer); - copyToVk(s.colorPaletteBuffer); - copyToVk(s.cameraIntrinsicsBuffer); - s.sceneBuffersDirty = 0; - } - - VkMemoryBarrier mb = {VK_STRUCTURE_TYPE_MEMORY_BARRIER}; - mb.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; - mb.dstAccessMask = VK_ACCESS_SHADER_READ_BIT; - vkCmdPipelineBarrier(cmd, - VK_PIPELINE_STAGE_TRANSFER_BIT, - VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT - | VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT - | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, - 0, 1, &mb, 0, nullptr, 0, nullptr); - } - - // Queue family ownership acquire from VK_QUEUE_FAMILY_EXTERNAL. - // CUDA writes happen on an external queue family; this barrier transfers - // ownership to the graphics queue and makes the writes visible to shaders. - { - std::vector bufBarriers; - auto addBarrier = [&](VkExternalBuffer& buf) { - if (buf.buffer == VK_NULL_HANDLE || buf.size == 0 || buf.memFd < 0) return; - VkBufferMemoryBarrier b = {VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER}; - b.srcAccessMask = 0; - b.dstAccessMask = VK_ACCESS_SHADER_READ_BIT; - b.srcQueueFamilyIndex = VK_QUEUE_FAMILY_EXTERNAL; - b.dstQueueFamilyIndex = s.vkctx.graphicsQueueFamily; - b.buffer = buf.buffer; - b.offset = 0; - b.size = VK_WHOLE_SIZE; - bufBarriers.push_back(b); - }; - addBarrier(s.timestampsBuffer); - addBarrier(s.int32Buffer); - addBarrier(s.vertexBuffer); - addBarrier(s.triangleBuffer); - addBarrier(s.poseBuffer); - addBarrier(s.floatBuffer); - addBarrier(s.sceneBuffer); - addBarrier(s.polylinePoolBuffer); - addBarrier(s.polygonPoolBuffer); - addBarrier(s.obstaclePoolBuffer); - addBarrier(s.colorPaletteBuffer); - addBarrier(s.cameraIntrinsicsBuffer); - addBarrier(s.cameraPoseBuffer); - addBarrier(s.queryBuffer); - - if (!bufBarriers.empty()) { - vkCmdPipelineBarrier(cmd, - VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, - VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT - | VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT - | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, - 0, 0, nullptr, - (uint32_t)bufBarriers.size(), bufBarriers.data(), - 0, nullptr); - } - } - - // Clear values must match attachment order from createTimestampedRenderPass. - // Use a non-black diagnostic clear color when LUDUS_VK_CLEAR_RED is set so - // we can distinguish "framebuffer was cleared but nothing was drawn on - // top" from "the readback path returned uninitialised memory". - float cr = 0.0f, cg = 0.0f, cb = 0.0f, ca = 0.0f; - if (getenv("LUDUS_VK_CLEAR_RED")) { - cr = 1.0f; ca = 1.0f; - } - VkClearValue clearValues[3] = {}; - if (s.msaaSamples >= 2) { - clearValues[0].color = {{cr, cg, cb, ca}}; // MSAA color - clearValues[1].color = {{cr, cg, cb, ca}}; // resolve color - clearValues[2].depthStencil = {1.0f, 0}; // MSAA depth/stencil - } else { - clearValues[0].color = {{cr, cg, cb, ca}}; // color - clearValues[1].depthStencil = {1.0f, 0}; // depth/stencil - } - - VkRenderPassBeginInfo rpBegin = {VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO}; - rpBegin.renderPass = s.renderPass; - rpBegin.framebuffer = s.framebuffer; - rpBegin.renderArea = {{0, 0}, {(uint32_t)width, (uint32_t)height}}; - rpBegin.clearValueCount = (s.msaaSamples > 1) ? 3 : 2; - rpBegin.pClearValues = clearValues; - // Refresh descriptors before the render pass: updateDescriptorSet may - // reset/realloc the descriptor pool, which is illegal inside a render pass. - updateDescriptorSet(s.vkctx.device, s.descriptorSet, s); - - vkCmdBeginRenderPass(cmd, &rpBegin, VK_SUBPASS_CONTENTS_INLINE); - - // Y-flip viewport: shaders use OpenGL-style NDC (+Y up); Vulkan framebuffer - // origin is top-left. Negative height inverts Y so the math stays GL-style. - VkViewport viewport = {0, (float)height, (float)width, -(float)height, 0.0f, 1.0f}; - vkCmdSetViewport(cmd, 0, 1, &viewport); - VkRect2D scissor = {{0, 0}, {(uint32_t)width, (uint32_t)height}}; - vkCmdSetScissor(cmd, 0, 1, &scissor); - - vkCmdBindDescriptorSets(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, - s.pipelineLayout, 0, 1, &s.descriptorSet, 0, nullptr); - - LudusPushConstants pc = {}; - pc.u_width_polyline_regular = s.widthPolylineRegular > 0 ? s.widthPolylineRegular : 7.0f; - pc.u_width_polyline_bev = s.widthPolylineBev > 0 ? s.widthPolylineBev : 4.0f; - pc.u_width_ego_traj_regular = s.widthEgoTrajRegular > 0 ? s.widthEgoTrajRegular : 12.0f; - pc.u_width_ego_traj_bev = s.widthEgoTrajBev > 0 ? s.widthEgoTrajBev : 5.0f; - pc.u_width_wireframe = s.widthWireframe > 0 ? s.widthWireframe : 2.0f; - pc.u_resolution_scale = s.resolutionScale > 0 ? s.resolutionScale : 1.0f; - pc.u_depth_scaling = s.depthScaling; - pc.u_max_extrapolation_us = s.maxExtrapolationUs; - pc.u_color_palette_size = s.colorPaletteSize; - pc.u_num_queries = numQueries; - pc.u_tessellation_threshold = s.tessellationThreshold; - pc.u_max_tessellation_polyline = s.maxTessellationLevelPolyline; - pc.u_max_tessellation_polygon = s.maxTessellationLevelPolygon; - pc.u_max_tessellation_cube = s.maxTessellationLevelCube; - pc.u_cull_radius_scale = s.cullRadiusScale; - pc.u_fog_enabled = s.depthScaling; - - const VkShaderStageFlags pcStages = VK_SHADER_STAGE_TASK_BIT_EXT - | VK_SHADER_STAGE_MESH_BIT_EXT - | VK_SHADER_STAGE_FRAGMENT_BIT; - - const char* dbg = getenv("LUDUS_VK_PIPELINES"); - bool draw_polyline = !dbg || strchr(dbg, 'P'); - bool draw_polygon = !dbg || strchr(dbg, 'G'); - bool draw_obstacle = !dbg || strchr(dbg, 'O'); - - auto drawMeshTasks = s.vkctx.pfnCmdDrawMeshTasksEXT; - - if (draw_polyline && s.polylinePoolUsed > 0 && drawMeshTasks && s.pipelinePolyline) { - vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, s.pipelinePolyline); - pc.u_num_polyline_pools = std::max(1u, (uint32_t)s.maxPolylinePoolsPerScene); - pc.u_max_varrays_per_pool = std::max(1u, (uint32_t)s.maxVarraysPerTsPolyline); - pc.u_cube_pool_index = 0; - vkCmdPushConstants(cmd, s.pipelineLayout, pcStages, 0, sizeof(pc), &pc); - uint32_t totalWG = numQueries * pc.u_num_polyline_pools * pc.u_max_varrays_per_pool; - drawMeshTasks(cmd, totalWG, 1, 1); - } - - if (draw_polygon && s.polygonPoolUsed > 0 && drawMeshTasks && s.pipelinePolygon) { - vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, s.pipelinePolygon); - pc.u_num_polygon_pools = std::max(1u, (uint32_t)s.maxPolygonPoolsPerScene); - pc.u_max_varrays_per_pool = std::max(1u, (uint32_t)s.maxVarraysPerTsPolygon); - pc.u_cube_pool_index = 0; - vkCmdPushConstants(cmd, s.pipelineLayout, pcStages, 0, sizeof(pc), &pc); - uint32_t totalWG = numQueries * pc.u_num_polygon_pools * pc.u_max_varrays_per_pool; - drawMeshTasks(cmd, totalWG, 1, 1); - } - - uint32_t maxObstacles = std::max(1u, (uint32_t)s.maxObstaclesPerPool); - for (int poolIdx = 0; poolIdx < s.maxCubePoolsPerScene; poolIdx++) { - if (!(draw_obstacle && drawMeshTasks && s.pipelineObstacle)) break; - vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, s.pipelineObstacle); - pc.u_max_obstacles = maxObstacles; - pc.u_cube_pool_index = poolIdx; - // Wireframe rendering is driven by the per-pool ObstaclePool.render_flags - // SSBO field that the mesh shader reads (CUBE_FLAG_WIREFRAME bit). - vkCmdPushConstants(cmd, s.pipelineLayout, pcStages, 0, sizeof(pc), &pc); - uint32_t totalWG = numQueries * maxObstacles; - drawMeshTasks(cmd, totalWG, 1, 1); - } - - vkCmdEndRenderPass(cmd); - VK_CHECK(vkEndCommandBuffer(cmd)); - - VkSubmitInfo submitInfo = {VK_STRUCTURE_TYPE_SUBMIT_INFO}; - submitInfo.commandBufferCount = 1; - submitInfo.pCommandBuffers = &cmd; - VK_CHECK(vkQueueSubmit(s.vkctx.graphicsQueue, 1, &submitInfo, s.vkctx.fence)); - VK_CHECK(vkWaitForFences(s.vkctx.device, 1, &s.vkctx.fence, VK_TRUE, UINT64_MAX)); -} - -//============================================================================= -// Copy Results -//============================================================================= - -void ludusCopyBatchResultsVk( - NVDR_CTX_ARGS, LudusTimestampedVkState& s, cudaStream_t stream, - uint8_t* outputPtr, int width, int height, int numQueries) -{ - (void)nvdr_ctx; - size_t totalSize = (size_t)width * height * 4 * numQueries; - - // Pull rendered color image through a CUDA-importable readback buffer - // owned by this state. Grow on demand. - if (s.readbackBuffer.buffer == VK_NULL_HANDLE || s.readbackBuffer.size < totalSize) { - if (s.readbackBuffer.buffer != VK_NULL_HANDLE) - destroyExternalBuffer(s.vkctx, s.readbackBuffer); - s.readbackBuffer = createExternalBuffer(s.vkctx, totalSize, - VK_BUFFER_USAGE_TRANSFER_DST_BIT, true); - } - VkExternalBuffer& readbackBuf = s.readbackBuffer; - - VkCommandBuffer copyCmd = beginSingleTimeCommands(s.vkctx); - - VkMemoryBarrier fullBarrier = {VK_STRUCTURE_TYPE_MEMORY_BARRIER}; - fullBarrier.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; - fullBarrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT; - vkCmdPipelineBarrier(copyCmd, - VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, - VK_PIPELINE_STAGE_TRANSFER_BIT, - 0, 1, &fullBarrier, 0, nullptr, 0, nullptr); - - transitionImageLayout(copyCmd, s.colorImage.image, - VK_IMAGE_LAYOUT_GENERAL, - VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, - numQueries, VK_IMAGE_ASPECT_COLOR_BIT); - - std::vector regions(numQueries); - for (int i = 0; i < numQueries; i++) { - regions[i] = {}; - regions[i].bufferOffset = (VkDeviceSize)i * width * height * 4; - regions[i].bufferRowLength = 0; - regions[i].bufferImageHeight = 0; - regions[i].imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; - regions[i].imageSubresource.mipLevel = 0; - regions[i].imageSubresource.baseArrayLayer = i; - regions[i].imageSubresource.layerCount = 1; - regions[i].imageOffset = {0, 0, 0}; - regions[i].imageExtent = {(uint32_t)width, (uint32_t)height, 1}; - } - vkCmdCopyImageToBuffer(copyCmd, s.colorImage.image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, - readbackBuf.buffer, (uint32_t)regions.size(), regions.data()); - - transitionImageLayout(copyCmd, s.colorImage.image, - VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, - VK_IMAGE_LAYOUT_GENERAL, - numQueries, VK_IMAGE_ASPECT_COLOR_BIT); - - endSingleTimeCommands(s.vkctx, copyCmd); - - cudaMemcpyAsync(outputPtr, (void*)readbackBuf.cuDevPtr, totalSize, - cudaMemcpyDeviceToDevice, stream); -} - -int ludusCopyBatchResultsToStagingVk( - NVDR_CTX_ARGS, LudusTimestampedVkState& s, cudaStream_t stream, - int width, int height, int numQueries) -{ - int idx = s.currentStagingIdx; - s.currentStagingIdx = 1 - idx; - - size_t totalSize = (size_t)width * height * 4 * numQueries; - if (totalSize > s.stagingBufferSize) { - for (int i = 0; i < 2; i++) { - if (s.stagingBuffer[i]) cudaFree(s.stagingBuffer[i]); - cudaMalloc(&s.stagingBuffer[i], totalSize); - s.stagingValid[i] = 0; - } - s.stagingBufferSize = totalSize; - } - - ludusCopyBatchResultsVk(NVDR_CTX_PARAMS, s, stream, s.stagingBuffer[idx], width, height, numQueries); - cudaEventRecord(s.stagingReadyEvent[idx], stream); - - s.stagingWidth = width; - s.stagingHeight = height; - s.stagingNumQueries = numQueries; - s.stagingValid[idx] = 1; - - return idx; -} - -void ludusCopyStagingToOutputVk( - NVDR_CTX_ARGS, LudusTimestampedVkState& s, int stagingIdx, - uint8_t* outputPtr, int width, int height, int numQueries) -{ - (void)nvdr_ctx; - cudaEventSynchronize(s.stagingReadyEvent[stagingIdx]); - size_t size = (size_t)width * height * 4 * numQueries; - cudaMemcpy(outputPtr, s.stagingBuffer[stagingIdx], size, cudaMemcpyDeviceToDevice); -} - -int ludusStartAsyncHostTransferVk( - NVDR_CTX_ARGS, LudusTimestampedVkState& s, int stagingIdx) -{ - (void)nvdr_ctx; - if (!s.stagingValid[stagingIdx]) return -1; - - int pinnedIdx = s.currentPinnedIdx; - s.currentPinnedIdx = 1 - pinnedIdx; - - size_t size = (size_t)s.stagingWidth * s.stagingHeight * 4 * s.stagingNumQueries; - if (size > s.pinnedHostBufferSize) { - for (int i = 0; i < 2; i++) { - if (s.pinnedHostBuffer[i]) cudaFreeHost(s.pinnedHostBuffer[i]); - cudaMallocHost(&s.pinnedHostBuffer[i], size); - s.pinnedValid[i] = 0; - } - s.pinnedHostBufferSize = size; - } - - cudaEventSynchronize(s.stagingReadyEvent[stagingIdx]); - cudaMemcpyAsync(s.pinnedHostBuffer[pinnedIdx], s.stagingBuffer[stagingIdx], - size, cudaMemcpyDeviceToHost, s.copyStream); - cudaEventRecord(s.pinnedReadyEvent[pinnedIdx], s.copyStream); - - s.pinnedWidth[pinnedIdx] = s.stagingWidth; - s.pinnedHeight[pinnedIdx] = s.stagingHeight; - s.pinnedNumQueries[pinnedIdx] = s.stagingNumQueries; - s.pinnedValid[pinnedIdx] = 1; - - return pinnedIdx; -} - -int ludusIsPinnedBufferReadyVk( - NVDR_CTX_ARGS, LudusTimestampedVkState& s, int pinnedIdx) -{ - (void)nvdr_ctx; - if (!s.pinnedValid[pinnedIdx]) return 0; - return (cudaEventQuery(s.pinnedReadyEvent[pinnedIdx]) == cudaSuccess) ? 1 : 0; -} - -int ludusIsHostTransferCompleteVk( - NVDR_CTX_ARGS, LudusTimestampedVkState& s) -{ - int prev = 1 - s.currentPinnedIdx; - return ludusIsPinnedBufferReadyVk(NVDR_CTX_PARAMS, s, prev); -} - -int ludusEncodeJpegBatchStagingVk( - NVDR_CTX_ARGS, LudusTimestampedVkState& s, int stagingIdx, int quality, - std::vector>& outJpegs) -{ - (void)nvdr_ctx; - if (!s.nvjpegInitialized) { - nvjpegCreateSimple(&s.nvjpegHandle); - nvjpegEncoderStateCreate(s.nvjpegHandle, &s.nvjpegEncoderState, 0); - nvjpegEncoderParamsCreate(s.nvjpegHandle, &s.nvjpegEncoderParams, 0); - s.nvjpegInitialized = 1; - } - nvjpegEncoderParamsSetQuality(s.nvjpegEncoderParams, quality, 0); - - cudaEventSynchronize(s.stagingReadyEvent[stagingIdx]); - - int w = s.stagingWidth; - int h = s.stagingHeight; - int n = s.stagingNumQueries; - size_t layerSize = (size_t)w * h * 4; - size_t rgbSize = (size_t)w * h * 3; - - if (rgbSize > s.jpegFlipBufferSize) { - if (s.jpegFlipBuffer) cudaFree(s.jpegFlipBuffer); - cudaMalloc(&s.jpegFlipBuffer, rgbSize); - s.jpegFlipBufferSize = rgbSize; - } - - outJpegs.resize(n); - for (int i = 0; i < n; i++) { - uint8_t* srcRgba = s.stagingBuffer[stagingIdx] + i * layerSize; - launchRgbaToRgbFlip(srcRgba, s.jpegFlipBuffer, w, h, 0); - cudaDeviceSynchronize(); - - nvjpegImage_t img; - memset(&img, 0, sizeof(img)); - img.channel[0] = s.jpegFlipBuffer; - img.pitch[0] = w * 3; - - nvjpegEncodeImage(s.nvjpegHandle, s.nvjpegEncoderState, s.nvjpegEncoderParams, - &img, NVJPEG_INPUT_RGBI, w, h, 0); - - size_t jpegSize = 0; - nvjpegEncodeRetrieveBitstream(s.nvjpegHandle, s.nvjpegEncoderState, nullptr, &jpegSize, 0); - - if (jpegSize > s.jpegOutputBufferSize) { - if (s.jpegOutputBuffer) cudaFreeHost(s.jpegOutputBuffer); - cudaMallocHost(&s.jpegOutputBuffer, jpegSize); - s.jpegOutputBufferSize = jpegSize; - } - - nvjpegEncodeRetrieveBitstream(s.nvjpegHandle, s.nvjpegEncoderState, - s.jpegOutputBuffer, &jpegSize, 0); - - uint8_t* jpegCopy = (uint8_t*)malloc(jpegSize); - memcpy(jpegCopy, s.jpegOutputBuffer, jpegSize); - outJpegs[i] = {jpegCopy, jpegSize}; - } - - return n; -} - -//============================================================================= -// Cleanup -//============================================================================= - -void ludusClearScenesVk(NVDR_CTX_ARGS, LudusTimestampedVkState& s) -{ - (void)nvdr_ctx; - s.numScenes = 0; - s.timestampsUsed = s.int32Used = s.vertexUsed = s.triangleUsed = 0; - s.poseUsed = s.floatUsed = 0; - s.polylinePoolUsed = s.polygonPoolUsed = s.obstaclePoolUsed = 0; - s.maxObstaclesPerPool = s.maxCubePoolsPerScene = 0; - s.maxPolylinePoolsPerScene = s.maxPolygonPoolsPerScene = 0; - s.maxVarraysPerTsPolyline = s.maxVarraysPerTsPolygon = 0; - s.sceneBuffersDirty = 1; -} - -void ludusTimestampedReleaseVk(NVDR_CTX_ARGS, LudusTimestampedVkState& s) -{ - (void)nvdr_ctx; - if (s.vkctx.device) vkDeviceWaitIdle(s.vkctx.device); - - for (int i = 0; i < 2; i++) { - if (s.stagingBuffer[i]) cudaFree(s.stagingBuffer[i]); - if (s.pinnedHostBuffer[i]) cudaFreeHost(s.pinnedHostBuffer[i]); - if (s.stagingReadyEvent[i]) cudaEventDestroy(s.stagingReadyEvent[i]); - if (s.pinnedReadyEvent[i]) cudaEventDestroy(s.pinnedReadyEvent[i]); - } - if (s.copyStream) cudaStreamDestroy(s.copyStream); - if (s.jpegOutputBuffer) cudaFreeHost(s.jpegOutputBuffer); - if (s.jpegFlipBuffer) cudaFree(s.jpegFlipBuffer); - if (s.nvjpegInitialized) { - nvjpegEncoderParamsDestroy(s.nvjpegEncoderParams); - nvjpegEncoderStateDestroy(s.nvjpegEncoderState); - nvjpegDestroy(s.nvjpegHandle); - } - - for (int i = 0; i < 9; i++) - if (s.shaderModules[i]) vkDestroyShaderModule(s.vkctx.device, s.shaderModules[i], nullptr); - - if (s.pipelinePolyline) vkDestroyPipeline(s.vkctx.device, s.pipelinePolyline, nullptr); - if (s.pipelinePolygon) vkDestroyPipeline(s.vkctx.device, s.pipelinePolygon, nullptr); - if (s.pipelineObstacle) vkDestroyPipeline(s.vkctx.device, s.pipelineObstacle, nullptr); - if (s.pipelineLayout) vkDestroyPipelineLayout(s.vkctx.device, s.pipelineLayout, nullptr); - if (s.descriptorPool) vkDestroyDescriptorPool(s.vkctx.device, s.descriptorPool, nullptr); - if (s.descriptorSetLayout) vkDestroyDescriptorSetLayout(s.vkctx.device, s.descriptorSetLayout, nullptr); - - if (s.framebuffer) vkDestroyFramebuffer(s.vkctx.device, s.framebuffer, nullptr); - if (s.renderPass) vkDestroyRenderPass(s.vkctx.device, s.renderPass, nullptr); - - destroyExternalImage(s.vkctx, s.colorImage); - destroyExternalImage(s.vkctx, s.depthStencilImage); - destroyExternalImage(s.vkctx, s.colorImageMSAA); - destroyExternalImage(s.vkctx, s.depthStencilImageMSAA); - - destroyExternalBuffer(s.vkctx, s.timestampsBuffer); - destroyExternalBuffer(s.vkctx, s.int32Buffer); - destroyExternalBuffer(s.vkctx, s.vertexBuffer); - destroyExternalBuffer(s.vkctx, s.triangleBuffer); - destroyExternalBuffer(s.vkctx, s.poseBuffer); - destroyExternalBuffer(s.vkctx, s.floatBuffer); - destroyExternalBuffer(s.vkctx, s.sceneBuffer); - destroyExternalBuffer(s.vkctx, s.polylinePoolBuffer); - destroyExternalBuffer(s.vkctx, s.polygonPoolBuffer); - destroyExternalBuffer(s.vkctx, s.obstaclePoolBuffer); - destroyExternalBuffer(s.vkctx, s.colorPaletteBuffer); - destroyExternalBuffer(s.vkctx, s.cameraIntrinsicsBuffer); - destroyExternalBuffer(s.vkctx, s.cameraPoseBuffer); - destroyExternalBuffer(s.vkctx, s.queryBuffer); - destroyExternalBuffer(s.vkctx, s.readbackBuffer); - - destroyVkContext(s.vkctx); - memset(&s, 0, sizeof(s)); -} diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/render/ludus_vk.h b/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/render/ludus_vk.h deleted file mode 100644 index a03992082..000000000 --- a/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/render/ludus_vk.h +++ /dev/null @@ -1,293 +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. - -#pragma once - -#if !(defined(NVDR_TORCH) && defined(__CUDACC__)) -#include "../common/framework.h" -#include "../common/vkutil.h" -#include "ludus_types.h" -#include -#include - -// Forward-declared helper kernel (defined in render/ludus_jpeg.cu). -extern "C" void launchRgbaToRgbFlip( - const uint8_t* srcRgba, uint8_t* dstRgb, - int width, int height, cudaStream_t stream -); - -// ======================================================================== -// Vulkan Timestamped Rendering State -// -// Mirrors the GL-based timestamped renderer (now removed from this project) -// but uses Vulkan task/mesh/fragment pipelines via VK_EXT_mesh_shader. -// -// Same public API signatures as the CUDA backend in ludus_cuda.h so the -// Python bindings can dispatch to either with minimal differences. -// ======================================================================== - -struct LudusTimestampedVkState -{ - // ---------- Framebuffer ---------- - int width; - int height; - int maxLayers; - - // ---------- Scene storage bookkeeping ---------- - int maxScenes; - int numScenes; - - int timestampsCapacity, timestampsUsed; - int int32Capacity, int32Used; - int vertexCapacity, vertexUsed; - int triangleCapacity, triangleUsed; - int poseCapacity, poseUsed; - int floatCapacity, floatUsed; - int polylinePoolCapacity, polylinePoolUsed; - int polygonPoolCapacity, polygonPoolUsed; - int obstaclePoolCapacity, obstaclePoolUsed; - int maxObstaclesPerPool; - int maxCubePoolsPerScene; - int maxPolylinePoolsPerScene; - int maxPolygonPoolsPerScene; - // Max varrays in any pool at a single timestamp, per family. Drives the - // per-pool mesh-task dispatch stride so large pools aren't silently capped. - int maxVarraysPerTsPolyline; - int maxVarraysPerTsPolygon; - - // ---------- Cameras ---------- - int cameraCapacity; - int numCameras; - - // ---------- Query batch ---------- - int queryCapacity; - - // ---------- Vulkan context ---------- - VkContext vkctx; - - // ---------- Framebuffer images ---------- - VkExternalImage colorImage; - VkExternalImage depthStencilImage; - - // ---------- MSAA ---------- - int msaaSamples; - VkExternalImage colorImageMSAA; - VkExternalImage depthStencilImageMSAA; - - // ---------- Render pass and framebuffer ---------- - VkRenderPass renderPass; - VkFramebuffer framebuffer; - // Sample count the renderPass + pipelines were last built with (1 = no - // MSAA). The render pass attachment layout and the pipelines bake in the - // sample count, so both must be rebuilt when msaaSamples changes. - int renderPassSamples; - - // ---------- Data buffers (SSBOs, CUDA-importable) ---------- - VkExternalBuffer timestampsBuffer; // binding 0: int64[] - VkExternalBuffer int32Buffer; // binding 1: int32[] - VkExternalBuffer vertexBuffer; // binding 2: Vertex[] - VkExternalBuffer triangleBuffer; // binding 3: Triangle[] - VkExternalBuffer poseBuffer; // binding 4: CameraPose[] - VkExternalBuffer floatBuffer; // binding 5: float[] - VkExternalBuffer sceneBuffer; // binding 6: TimestampedScene[] - VkExternalBuffer polylinePoolBuffer; // binding 7: TimestampedPolylinePool[] - VkExternalBuffer polygonPoolBuffer; // binding 8: TimestampedPolygonPool[] - VkExternalBuffer obstaclePoolBuffer; // binding 9: ObstaclePool[] - VkExternalBuffer colorPaletteBuffer; // binding 10: vec4[] - VkExternalBuffer cameraIntrinsicsBuffer; // binding 11: FThetaCamera[] - VkExternalBuffer cameraPoseBuffer; // binding 12: CameraPose[] per-query - VkExternalBuffer queryBuffer; // binding 13: RenderQuery[] - - int colorPaletteSize; - - // Set by control-plane ops (upload/remove/clear); the per-frame host - // roundtrip re-pushes the scene SSBOs only when set. - int sceneBuffersDirty; - - // ---------- Descriptor set ---------- - VkDescriptorSetLayout descriptorSetLayout; - VkDescriptorPool descriptorPool; - VkDescriptorSet descriptorSet; - - // ---------- Pipeline layout (shared across all 3 pipelines) ---------- - VkPipelineLayout pipelineLayout; - - // ---------- Pipelines (one per draw type) ---------- - VkPipeline pipelinePolyline; - VkPipeline pipelinePolygon; - VkPipeline pipelineObstacle; - - // ---------- Shader modules: 3 pipelines x 3 stages (task, mesh, frag) ---------- - VkShaderModule shaderModules[9]; - - // ---------- Capability flags ---------- - int hasMeshShader; - float tessellationThreshold; - - // ---------- Configurable parameters ---------- - int maxTessellationLevelPolyline; - int maxTessellationLevelPolygon; - int maxTessellationLevelCube; - float widthPolylineRegular; - float widthPolylineBev; - float widthEgoTrajRegular; - float widthEgoTrajBev; - float widthWireframe; - float resolutionScale; - float depthScaling; - int maxExtrapolationUs; - float cullRadiusScale; - - // ---------- Double-buffered staging for async transfer ---------- - uint8_t* stagingBuffer[2]; - size_t stagingBufferSize; - int stagingWidth, stagingHeight, stagingNumQueries; - int currentStagingIdx; - int stagingValid[2]; - cudaStream_t copyStream; - cudaEvent_t stagingReadyEvent[2]; - - uint8_t* pinnedHostBuffer[2]; - size_t pinnedHostBufferSize; - int currentPinnedIdx; - int pinnedValid[2]; - int pinnedWidth[2], pinnedHeight[2], pinnedNumQueries[2]; - cudaEvent_t pinnedReadyEvent[2]; - - // ---------- NVJPEG (GPU JPEG encoding) ---------- - nvjpegHandle_t nvjpegHandle; - nvjpegEncoderState_t nvjpegEncoderState; - nvjpegEncoderParams_t nvjpegEncoderParams; - int nvjpegInitialized; - uint8_t* jpegOutputBuffer; - size_t jpegOutputBufferSize; - uint8_t* jpegFlipBuffer; - size_t jpegFlipBufferSize; - - // ---------- Per-state readback buffer (image -> CUDA tensor) ---------- - // Must be a per-state member (not a process-wide static) so the - // Vulkan handles stay tied to a single VkDevice's lifetime, which - // matters when multiple LudusTimestampedContext objects are created - // and destroyed in the same process. - VkExternalBuffer readbackBuffer; -}; - -// Unified push constants block, shared across all 3 pipelines and stages. -// 21 fields, 84 bytes -- must match the layout(push_constant) block in -// every Vulkan GLSL shader. Per-cube wireframe rendering is driven by the -// ObstaclePool.render_flags SSBO field (not a push constant) so that -// different cube pools in the same draw can mix solid and wireframe modes. -struct LudusPushConstants -{ - float u_width_polyline_regular; // 0 - float u_width_polyline_bev; // 4 - float u_width_ego_traj_regular; // 8 - float u_width_ego_traj_bev; // 12 - float u_width_wireframe; // 16 - float u_resolution_scale; // 20 - float u_depth_scaling; // 24 - int32_t u_max_extrapolation_us; // 28 - int32_t u_color_palette_size; // 32 - uint32_t u_num_queries; // 36 - float u_tessellation_threshold; // 40 - uint32_t u_max_tessellation_polyline; // 44 - uint32_t u_max_tessellation_polygon; // 48 - uint32_t u_max_tessellation_cube; // 52 - float u_cull_radius_scale; // 56 - float u_fog_enabled; // 60 - uint32_t u_max_obstacles; // 64 - uint32_t u_cube_pool_index; // 68 - uint32_t u_num_polygon_pools; // 72 - uint32_t u_max_varrays_per_pool; // 76 - uint32_t u_num_polyline_pools; // 80 -}; -static_assert(sizeof(LudusPushConstants) == 84, "LudusPushConstants must be 84 bytes"); - -// ======================================================================== -// Public API -- same shape as the GL/CUDA backends so bindings can dispatch. -// ======================================================================== - -void ludusTimestampedInitVk(NVDR_CTX_ARGS, LudusTimestampedVkState& s, int cudaDeviceIdx); - -void ludusUploadCamerasVk( - NVDR_CTX_ARGS, LudusTimestampedVkState& s, cudaStream_t stream, - const FThetaCamera* intrinsics, int numCameras -); - -void ludusUploadColorPaletteVk( - NVDR_CTX_ARGS, LudusTimestampedVkState& s, cudaStream_t stream, - const float* colors, int numColors -); - -int ludusUploadSceneVk( - NVDR_CTX_ARGS, LudusTimestampedVkState& s, cudaStream_t stream, - const TimestampedScene* sceneDesc, - const TimestampedPolylinePool* polylinePools, int numPolylinePools, - const TimestampedPolygonPool* polygonPools, int numPolygonPools, - const ObstaclePool* obstaclePools, int numObstaclePools, - int maxObstaclesInPool, - int maxVarraysPerTsPolyline, int maxVarraysPerTsPolygon, - const int64_t* timestamps, int numTimestamps, - const int32_t* int32Data, int numInt32, - const Vertex* vertices, int numVertices, - const Triangle* triangles, int numTriangles, - const CameraPose* poses, int numPoses, - const float* floatData, int numFloats -); - -void ludusRemoveSceneVk(NVDR_CTX_ARGS, LudusTimestampedVkState& s, int sceneId, cudaStream_t stream); - -void ludusRenderBatchVk( - NVDR_CTX_ARGS, LudusTimestampedVkState& s, cudaStream_t stream, - const RenderQuery* queries, const CameraPose* cameraPoses, - int numQueries, int width, int height -); - -void ludusCopyBatchResultsVk( - NVDR_CTX_ARGS, LudusTimestampedVkState& s, cudaStream_t stream, - uint8_t* outputPtr, int width, int height, int numQueries -); - -int ludusCopyBatchResultsToStagingVk( - NVDR_CTX_ARGS, LudusTimestampedVkState& s, cudaStream_t stream, - int width, int height, int numQueries -); - -void ludusCopyStagingToOutputVk( - NVDR_CTX_ARGS, LudusTimestampedVkState& s, int stagingIdx, - uint8_t* outputPtr, int width, int height, int numQueries -); - -int ludusStartAsyncHostTransferVk( - NVDR_CTX_ARGS, LudusTimestampedVkState& s, int stagingIdx -); - -int ludusIsPinnedBufferReadyVk( - NVDR_CTX_ARGS, LudusTimestampedVkState& s, int pinnedIdx -); - -int ludusIsHostTransferCompleteVk( - NVDR_CTX_ARGS, LudusTimestampedVkState& s -); - -int ludusEncodeJpegBatchStagingVk( - NVDR_CTX_ARGS, LudusTimestampedVkState& s, int stagingIdx, int quality, - std::vector>& outJpegs -); - -void ludusClearScenesVk(NVDR_CTX_ARGS, LudusTimestampedVkState& s); -void ludusTimestampedReleaseVk(NVDR_CTX_ARGS, LudusTimestampedVkState& s); - -#endif // !(defined(NVDR_TORCH) && defined(__CUDACC__)) diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/render/shaders_spv.h b/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/render/shaders_spv.h deleted file mode 100644 index 1d713c075..000000000 --- a/integrations/omnidreams/ludus-renderer/ludus_renderer/_cpp/render/shaders_spv.h +++ /dev/null @@ -1,9683 +0,0 @@ -// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -// SPDX-License-Identifier: Apache-2.0 -// -// AUTOGENERATED by ludus_renderer/shaders/embed_spv.py -// DO NOT EDIT BY HAND. Regenerate with: -// bash ludus_renderer/shaders/compile.sh (compiles GLSL -> SPIR-V and re-embeds) - -#pragma once -#include - -static const uint32_t kSpv_ts_polyline_task[] = { - 0x07230203u, 0x00010600u, 0x0008000bu, 0x00000349u, 0x00000000u, 0x00020011u, 0x0000000bu, 0x00020011u, - 0x000014a3u, 0x0006000au, 0x5f565053u, 0x5f545845u, 0x6873656du, 0x6168735fu, 0x00726564u, 0x0006000bu, - 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, - 0x0016000fu, 0x000014f4u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x000000d7u, 0x000000edu, 0x00000176u, - 0x000001bau, 0x000001e6u, 0x000001f5u, 0x0000020cu, 0x00000234u, 0x00000270u, 0x0000027fu, 0x000002a2u, - 0x0000030fu, 0x00000335u, 0x00000339u, 0x0000033du, 0x00000342u, 0x00000347u, 0x0006014bu, 0x00000004u, - 0x00000026u, 0x00000007u, 0x00000007u, 0x00000007u, 0x00030003u, 0x00000002u, 0x000001ccu, 0x00060004u, - 0x455f4c47u, 0x6d5f5458u, 0x5f687365u, 0x64616873u, 0x00007265u, 0x000d0004u, 0x455f4c47u, 0x735f5458u, - 0x65646168u, 0x78655f72u, 0x63696c70u, 0x615f7469u, 0x68746972u, 0x6974656du, 0x79745f63u, 0x5f736570u, - 0x36746e69u, 0x00000034u, 0x00040005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00090005u, 0x0000000du, - 0x5f746567u, 0x61666564u, 0x5f746c75u, 0x6d697270u, 0x6c6f635fu, 0x7528726fu, 0x00003b31u, 0x00060005u, - 0x0000000cu, 0x6d697270u, 0x7079745fu, 0x64695f65u, 0x00000000u, 0x00070005u, 0x00000010u, 0x5f746567u, - 0x6d697270u, 0x6c6f635fu, 0x7528726fu, 0x00003b31u, 0x00060005u, 0x0000000fu, 0x6d697270u, 0x7079745fu, - 0x64695f65u, 0x00000000u, 0x00080005u, 0x00000015u, 0x645f7369u, 0x705f746fu, 0x696d6972u, 0x65766974u, - 0x3b317528u, 0x00000000u, 0x00060005u, 0x00000014u, 0x6d697270u, 0x7079745fu, 0x64695f65u, 0x00000000u, - 0x00080005u, 0x0000001au, 0x5f746567u, 0x6d697270u, 0x6469775fu, 0x75286874u, 0x31753b31u, 0x0000003bu, - 0x00060005u, 0x00000018u, 0x6d697270u, 0x7079745fu, 0x64695f65u, 0x00000000u, 0x00060005u, 0x00000019u, - 0x656d6163u, 0x745f6172u, 0x5f657079u, 0x00006469u, 0x000c0005u, 0x00000023u, 0x616e6962u, 0x735f7972u, - 0x63726165u, 0x69745f68u, 0x7473656du, 0x73706d61u, 0x3b317528u, 0x693b3175u, 0x3b313436u, 0x00000000u, - 0x00050005u, 0x00000020u, 0x65736162u, 0x66666f5fu, 0x00746573u, 0x00040005u, 0x00000021u, 0x6e756f63u, - 0x00000074u, 0x00040005u, 0x00000022u, 0x67726174u, 0x00007465u, 0x000b0005u, 0x0000002bu, 0x6c6c7563u, - 0x6261615fu, 0x766f5f62u, 0x616c7265u, 0x66762870u, 0x66763b33u, 0x66763b33u, 0x66763b33u, 0x00003b33u, - 0x00040005u, 0x00000027u, 0x696d5f61u, 0x0000006eu, 0x00040005u, 0x00000028u, 0x616d5f61u, 0x00000078u, - 0x00040005u, 0x00000029u, 0x696d5f62u, 0x0000006eu, 0x00040005u, 0x0000002au, 0x616d5f62u, 0x00000078u, - 0x00050005u, 0x0000002fu, 0x656d6143u, 0x6f506172u, 0x00006573u, 0x00070006u, 0x0000002fu, 0x00000000u, - 0x6c726f77u, 0x6f745f64u, 0x6d61635fu, 0x00617265u, 0x000e0005u, 0x00000033u, 0x5f746567u, 0x656d6163u, - 0x775f6172u, 0x646c726fu, 0x736f705fu, 0x72747328u, 0x2d746375u, 0x656d6143u, 0x6f506172u, 0x6d2d6573u, - 0x31343466u, 0x0000003bu, 0x00040005u, 0x00000032u, 0x65736f70u, 0x00000000u, 0x00060005u, 0x000000d5u, - 0x68737550u, 0x736e6f43u, 0x746e6174u, 0x00000073u, 0x000a0006u, 0x000000d5u, 0x00000000u, 0x69775f75u, - 0x5f687464u, 0x796c6f70u, 0x656e696cu, 0x6765725fu, 0x72616c75u, 0x00000000u, 0x00090006u, 0x000000d5u, - 0x00000001u, 0x69775f75u, 0x5f687464u, 0x796c6f70u, 0x656e696cu, 0x7665625fu, 0x00000000u, 0x000a0006u, - 0x000000d5u, 0x00000002u, 0x69775f75u, 0x5f687464u, 0x5f6f6765u, 0x6a617274u, 0x6765725fu, 0x72616c75u, - 0x00000000u, 0x00090006u, 0x000000d5u, 0x00000003u, 0x69775f75u, 0x5f687464u, 0x5f6f6765u, 0x6a617274u, - 0x7665625fu, 0x00000000u, 0x00080006u, 0x000000d5u, 0x00000004u, 0x69775f75u, 0x5f687464u, 0x65726977u, - 0x6d617266u, 0x00000065u, 0x00080006u, 0x000000d5u, 0x00000005u, 0x65725f75u, 0x756c6f73u, 0x6e6f6974u, - 0x6163735fu, 0x0000656cu, 0x00070006u, 0x000000d5u, 0x00000006u, 0x65645f75u, 0x5f687470u, 0x6c616373u, - 0x00676e69u, 0x00090006u, 0x000000d5u, 0x00000007u, 0x616d5f75u, 0x78655f78u, 0x70617274u, 0x74616c6fu, - 0x5f6e6f69u, 0x00007375u, 0x00090006u, 0x000000d5u, 0x00000008u, 0x6f635f75u, 0x5f726f6cu, 0x656c6170u, - 0x5f657474u, 0x657a6973u, 0x00000000u, 0x00070006u, 0x000000d5u, 0x00000009u, 0x756e5f75u, 0x75715f6du, - 0x65697265u, 0x00000073u, 0x000a0006u, 0x000000d5u, 0x0000000au, 0x65745f75u, 0x6c657373u, 0x6974616cu, - 0x745f6e6fu, 0x73657268u, 0x646c6f68u, 0x00000000u, 0x000a0006u, 0x000000d5u, 0x0000000bu, 0x616d5f75u, - 0x65745f78u, 0x6c657373u, 0x6974616cu, 0x705f6e6fu, 0x6c796c6fu, 0x00656e69u, 0x000a0006u, 0x000000d5u, - 0x0000000cu, 0x616d5f75u, 0x65745f78u, 0x6c657373u, 0x6974616cu, 0x705f6e6fu, 0x67796c6fu, 0x00006e6fu, - 0x00090006u, 0x000000d5u, 0x0000000du, 0x616d5f75u, 0x65745f78u, 0x6c657373u, 0x6974616cu, 0x635f6e6fu, - 0x00656275u, 0x00080006u, 0x000000d5u, 0x0000000eu, 0x75635f75u, 0x725f6c6cu, 0x75696461u, 0x63735f73u, - 0x00656c61u, 0x00070006u, 0x000000d5u, 0x0000000fu, 0x6f665f75u, 0x6e655f67u, 0x656c6261u, 0x00000064u, - 0x00070006u, 0x000000d5u, 0x00000010u, 0x616d5f75u, 0x626f5f78u, 0x63617473u, 0x0073656cu, 0x00080006u, - 0x000000d5u, 0x00000011u, 0x75635f75u, 0x705f6562u, 0x5f6c6f6fu, 0x65646e69u, 0x00000078u, 0x00080006u, - 0x000000d5u, 0x00000012u, 0x756e5f75u, 0x6f705f6du, 0x6f67796cu, 0x6f705f6eu, 0x00736c6fu, 0x00090006u, - 0x000000d5u, 0x00000013u, 0x616d5f75u, 0x61765f78u, 0x79617272u, 0x65705f73u, 0x6f705f72u, 0x00006c6fu, - 0x00090006u, 0x000000d5u, 0x00000014u, 0x756e5f75u, 0x6f705f6du, 0x696c796cu, 0x705f656eu, 0x736c6f6fu, - 0x00000000u, 0x00030005u, 0x000000d7u, 0x00006370u, 0x00060005u, 0x000000e9u, 0x656c6170u, 0x5f657474u, - 0x6f6c6f63u, 0x00000072u, 0x00080005u, 0x000000ebu, 0x6f6c6f43u, 0x6c615072u, 0x65747465u, 0x66667542u, - 0x61457265u, 0x00796c72u, 0x00070006u, 0x000000ebu, 0x00000000u, 0x6f635f67u, 0x5f726f6cu, 0x656c6170u, - 0x00657474u, 0x00030005u, 0x000000edu, 0x00000000u, 0x00040005u, 0x000000fbu, 0x61726170u, 0x0000006du, - 0x00040005u, 0x00000108u, 0x625f7369u, 0x00007665u, 0x00040005u, 0x0000010bu, 0x6c616373u, 0x00000065u, - 0x00050005u, 0x0000011cu, 0x61666564u, 0x5f746c75u, 0x00000077u, 0x00050005u, 0x00000121u, 0x74737563u, - 0x775f6d6fu, 0x00000000u, 0x00050005u, 0x0000012eu, 0x65736162u, 0x6469775fu, 0x00006874u, 0x00050005u, - 0x0000013du, 0x61666564u, 0x5f746c75u, 0x00000077u, 0x00050005u, 0x00000142u, 0x74737563u, 0x775f6d6fu, - 0x00000000u, 0x00040005u, 0x0000015fu, 0x7466656cu, 0x00000000u, 0x00040005u, 0x00000160u, 0x68676972u, - 0x00000074u, 0x00040005u, 0x00000164u, 0x75736572u, 0x0000746cu, 0x00030005u, 0x0000016du, 0x0064696du, - 0x00030005u, 0x00000172u, 0x006c6176u, 0x00070005u, 0x00000174u, 0x656d6954u, 0x6d617473u, 0x75427370u, - 0x72656666u, 0x00000000u, 0x00070006u, 0x00000174u, 0x00000000u, 0x69745f67u, 0x7473656du, 0x73706d61u, - 0x00000000u, 0x00030005u, 0x00000176u, 0x00000000u, 0x00030005u, 0x0000019cu, 0x00000052u, 0x00050005u, - 0x000001b6u, 0x7361745fu, 0x6f635f6bu, 0x00746e75u, 0x00040005u, 0x000001b7u, 0x6b726f77u, 0x0064695fu, - 0x00060005u, 0x000001bau, 0x575f6c67u, 0x476b726fu, 0x70756f72u, 0x00004449u, 0x00060005u, 0x000001beu, - 0x72726176u, 0x6f5f7961u, 0x65736666u, 0x00000074u, 0x00040005u, 0x000001c5u, 0x706d6574u, 0x00000000u, - 0x00060005u, 0x000001cau, 0x6c6f6f70u, 0x5f64695fu, 0x61636f6cu, 0x0000006cu, 0x00060005u, 0x000001d0u, - 0x72657571u, 0x64695f79u, 0x636f6c5fu, 0x00006c61u, 0x00050005u, 0x000001dfu, 0x646e6552u, 0x75517265u, - 0x00797265u, 0x00060006u, 0x000001dfu, 0x00000000u, 0x6e656373u, 0x64695f65u, 0x00000000u, 0x00060006u, - 0x000001dfu, 0x00000001u, 0x656d6163u, 0x695f6172u, 0x00000064u, 0x00070006u, 0x000001dfu, 0x00000002u, - 0x656d6974u, 0x6d617473u, 0x73755f70u, 0x00000000u, 0x00070006u, 0x000001dfu, 0x00000003u, 0x656d6163u, - 0x745f6172u, 0x5f657079u, 0x00006469u, 0x00050006u, 0x000001dfu, 0x00000004u, 0x6461705fu, 0x00000031u, - 0x00050006u, 0x000001dfu, 0x00000005u, 0x6461705fu, 0x00000032u, 0x00050006u, 0x000001dfu, 0x00000006u, - 0x6461705fu, 0x00000033u, 0x00040005u, 0x000001e1u, 0x72657571u, 0x00000079u, 0x00050005u, 0x000001e2u, - 0x646e6552u, 0x75517265u, 0x00797265u, 0x00060006u, 0x000001e2u, 0x00000000u, 0x6e656373u, 0x64695f65u, - 0x00000000u, 0x00060006u, 0x000001e2u, 0x00000001u, 0x656d6163u, 0x695f6172u, 0x00000064u, 0x00070006u, - 0x000001e2u, 0x00000002u, 0x656d6974u, 0x6d617473u, 0x73755f70u, 0x00000000u, 0x00070006u, 0x000001e2u, - 0x00000003u, 0x656d6163u, 0x745f6172u, 0x5f657079u, 0x00006469u, 0x00050006u, 0x000001e2u, 0x00000004u, - 0x6461705fu, 0x00000031u, 0x00050006u, 0x000001e2u, 0x00000005u, 0x6461705fu, 0x00000032u, 0x00050006u, - 0x000001e2u, 0x00000006u, 0x6461705fu, 0x00000033u, 0x00050005u, 0x000001e4u, 0x72657551u, 0x66754279u, - 0x00726566u, 0x00060006u, 0x000001e4u, 0x00000000u, 0x75715f67u, 0x65697265u, 0x00000073u, 0x00030005u, - 0x000001e6u, 0x00000000u, 0x00070005u, 0x000001edu, 0x656d6954u, 0x6d617473u, 0x53646570u, 0x656e6563u, - 0x00000000u, 0x00080006u, 0x000001edu, 0x00000000u, 0x5f6d756eu, 0x796c6f70u, 0x656e696cu, 0x6f6f705fu, - 0x0000736cu, 0x00090006u, 0x000001edu, 0x00000001u, 0x796c6f70u, 0x656e696cu, 0x6f6f705fu, 0x6f5f736cu, - 0x65736666u, 0x00000074u, 0x00080006u, 0x000001edu, 0x00000002u, 0x5f6d756eu, 0x796c6f70u, 0x5f6e6f67u, - 0x6c6f6f70u, 0x00000073u, 0x00090006u, 0x000001edu, 0x00000003u, 0x796c6f70u, 0x5f6e6f67u, 0x6c6f6f70u, - 0x666f5f73u, 0x74657366u, 0x00000000u, 0x00070006u, 0x000001edu, 0x00000004u, 0x5f6d756eu, 0x65627563u, - 0x6f6f705fu, 0x0000736cu, 0x00080006u, 0x000001edu, 0x00000005u, 0x65627563u, 0x6f6f705fu, 0x6f5f736cu, - 0x65736666u, 0x00000074u, 0x000a0006u, 0x000001edu, 0x00000006u, 0x656d6974u, 0x6d617473u, 0x625f7370u, - 0x65666675u, 0x666f5f72u, 0x74657366u, 0x00000000u, 0x00080006u, 0x000001edu, 0x00000007u, 0x33746e69u, - 0x75625f32u, 0x72656666u, 0x66666f5fu, 0x00746573u, 0x00090006u, 0x000001edu, 0x00000008u, 0x74726576u, - 0x625f7865u, 0x65666675u, 0x666f5f72u, 0x74657366u, 0x00000000u, 0x00090006u, 0x000001edu, 0x00000009u, - 0x61697274u, 0x656c676eu, 0x6675625fu, 0x5f726566u, 0x7366666fu, 0x00007465u, 0x00080006u, 0x000001edu, - 0x0000000au, 0x65736f70u, 0x6675625fu, 0x5f726566u, 0x7366666fu, 0x00007465u, 0x00080006u, 0x000001edu, - 0x0000000bu, 0x616f6c66u, 0x75625f74u, 0x72656666u, 0x66666f5fu, 0x00746573u, 0x00050006u, 0x000001edu, - 0x0000000cu, 0x6461705fu, 0x00000000u, 0x00040005u, 0x000001efu, 0x6e656373u, 0x00000065u, 0x00070005u, - 0x000001f1u, 0x656d6954u, 0x6d617473u, 0x53646570u, 0x656e6563u, 0x00000000u, 0x00080006u, 0x000001f1u, - 0x00000000u, 0x5f6d756eu, 0x796c6f70u, 0x656e696cu, 0x6f6f705fu, 0x0000736cu, 0x00090006u, 0x000001f1u, - 0x00000001u, 0x796c6f70u, 0x656e696cu, 0x6f6f705fu, 0x6f5f736cu, 0x65736666u, 0x00000074u, 0x00080006u, - 0x000001f1u, 0x00000002u, 0x5f6d756eu, 0x796c6f70u, 0x5f6e6f67u, 0x6c6f6f70u, 0x00000073u, 0x00090006u, - 0x000001f1u, 0x00000003u, 0x796c6f70u, 0x5f6e6f67u, 0x6c6f6f70u, 0x666f5f73u, 0x74657366u, 0x00000000u, - 0x00070006u, 0x000001f1u, 0x00000004u, 0x5f6d756eu, 0x65627563u, 0x6f6f705fu, 0x0000736cu, 0x00080006u, - 0x000001f1u, 0x00000005u, 0x65627563u, 0x6f6f705fu, 0x6f5f736cu, 0x65736666u, 0x00000074u, 0x000a0006u, - 0x000001f1u, 0x00000006u, 0x656d6974u, 0x6d617473u, 0x625f7370u, 0x65666675u, 0x666f5f72u, 0x74657366u, - 0x00000000u, 0x00080006u, 0x000001f1u, 0x00000007u, 0x33746e69u, 0x75625f32u, 0x72656666u, 0x66666f5fu, - 0x00746573u, 0x00090006u, 0x000001f1u, 0x00000008u, 0x74726576u, 0x625f7865u, 0x65666675u, 0x666f5f72u, - 0x74657366u, 0x00000000u, 0x00090006u, 0x000001f1u, 0x00000009u, 0x61697274u, 0x656c676eu, 0x6675625fu, - 0x5f726566u, 0x7366666fu, 0x00007465u, 0x00080006u, 0x000001f1u, 0x0000000au, 0x65736f70u, 0x6675625fu, - 0x5f726566u, 0x7366666fu, 0x00007465u, 0x00080006u, 0x000001f1u, 0x0000000bu, 0x616f6c66u, 0x75625f74u, - 0x72656666u, 0x66666f5fu, 0x00746573u, 0x00050006u, 0x000001f1u, 0x0000000cu, 0x6461705fu, 0x00000000u, - 0x00050005u, 0x000001f3u, 0x6e656353u, 0x66754265u, 0x00726566u, 0x00060006u, 0x000001f3u, 0x00000000u, - 0x63735f67u, 0x73656e65u, 0x00000000u, 0x00030005u, 0x000001f5u, 0x00000000u, 0x00080005u, 0x00000205u, - 0x656d6954u, 0x6d617473u, 0x50646570u, 0x6c796c6fu, 0x50656e69u, 0x006c6f6fu, 0x00070006u, 0x00000205u, - 0x00000000u, 0x5f6d756eu, 0x656d6974u, 0x6d617473u, 0x00007370u, 0x00060006u, 0x00000205u, 0x00000001u, - 0x5f6d756eu, 0x72726176u, 0x00737961u, 0x00070006u, 0x00000205u, 0x00000002u, 0x5f6d756eu, 0x74726576u, - 0x73656369u, 0x00000000u, 0x00070006u, 0x00000205u, 0x00000003u, 0x6d697270u, 0x7079745fu, 0x64695f65u, - 0x00000000u, 0x00080006u, 0x00000205u, 0x00000004u, 0x656d6974u, 0x6d617473u, 0x6f5f7370u, 0x65736666u, - 0x00000074u, 0x00090006u, 0x00000205u, 0x00000005u, 0x765f7374u, 0x61727261u, 0x705f7379u, 0x666f5f73u, - 0x74657366u, 0x00000000u, 0x00080006u, 0x00000205u, 0x00000006u, 0x72726176u, 0x5f737961u, 0x6f5f7370u, - 0x65736666u, 0x00000074u, 0x00070006u, 0x00000205u, 0x00000007u, 0x74726576u, 0x73656369u, 0x66666f5fu, - 0x00746573u, 0x00060006u, 0x00000205u, 0x00000008u, 0x62626161u, 0x66666f5fu, 0x00746573u, 0x00050006u, - 0x00000205u, 0x00000009u, 0x6461705fu, 0x00000031u, 0x00050006u, 0x00000205u, 0x0000000au, 0x6461705fu, - 0x00000032u, 0x00050006u, 0x00000205u, 0x0000000bu, 0x6461705fu, 0x00000033u, 0x00050006u, 0x00000205u, - 0x0000000cu, 0x6461705fu, 0x00000034u, 0x00050006u, 0x00000205u, 0x0000000du, 0x6461705fu, 0x00000035u, - 0x00050006u, 0x00000205u, 0x0000000eu, 0x6461705fu, 0x00000036u, 0x00050006u, 0x00000205u, 0x0000000fu, - 0x6461705fu, 0x00000037u, 0x00040005u, 0x00000207u, 0x6c6f6f70u, 0x00000000u, 0x00080005u, 0x00000208u, - 0x656d6954u, 0x6d617473u, 0x50646570u, 0x6c796c6fu, 0x50656e69u, 0x006c6f6fu, 0x00070006u, 0x00000208u, - 0x00000000u, 0x5f6d756eu, 0x656d6974u, 0x6d617473u, 0x00007370u, 0x00060006u, 0x00000208u, 0x00000001u, - 0x5f6d756eu, 0x72726176u, 0x00737961u, 0x00070006u, 0x00000208u, 0x00000002u, 0x5f6d756eu, 0x74726576u, - 0x73656369u, 0x00000000u, 0x00070006u, 0x00000208u, 0x00000003u, 0x6d697270u, 0x7079745fu, 0x64695f65u, - 0x00000000u, 0x00080006u, 0x00000208u, 0x00000004u, 0x656d6974u, 0x6d617473u, 0x6f5f7370u, 0x65736666u, - 0x00000074u, 0x00090006u, 0x00000208u, 0x00000005u, 0x765f7374u, 0x61727261u, 0x705f7379u, 0x666f5f73u, - 0x74657366u, 0x00000000u, 0x00080006u, 0x00000208u, 0x00000006u, 0x72726176u, 0x5f737961u, 0x6f5f7370u, - 0x65736666u, 0x00000074u, 0x00070006u, 0x00000208u, 0x00000007u, 0x74726576u, 0x73656369u, 0x66666f5fu, - 0x00746573u, 0x00060006u, 0x00000208u, 0x00000008u, 0x62626161u, 0x66666f5fu, 0x00746573u, 0x00050006u, - 0x00000208u, 0x00000009u, 0x6461705fu, 0x00000031u, 0x00050006u, 0x00000208u, 0x0000000au, 0x6461705fu, - 0x00000032u, 0x00050006u, 0x00000208u, 0x0000000bu, 0x6461705fu, 0x00000033u, 0x00050006u, 0x00000208u, - 0x0000000cu, 0x6461705fu, 0x00000034u, 0x00050006u, 0x00000208u, 0x0000000du, 0x6461705fu, 0x00000035u, - 0x00050006u, 0x00000208u, 0x0000000eu, 0x6461705fu, 0x00000036u, 0x00050006u, 0x00000208u, 0x0000000fu, - 0x6461705fu, 0x00000037u, 0x00070005u, 0x0000020au, 0x796c6f50u, 0x656e696cu, 0x6c6f6f50u, 0x66667542u, - 0x00007265u, 0x00080006u, 0x0000020au, 0x00000000u, 0x6f705f67u, 0x696c796cu, 0x705f656eu, 0x736c6f6fu, - 0x00000000u, 0x00030005u, 0x0000020cu, 0x00000000u, 0x00040005u, 0x00000215u, 0x695f7374u, 0x00007864u, - 0x00040005u, 0x0000021du, 0x61726170u, 0x0000006du, 0x00040005u, 0x0000021eu, 0x61726170u, 0x0000006du, - 0x00040005u, 0x00000221u, 0x61726170u, 0x0000006du, 0x00060005u, 0x0000022cu, 0x72726176u, 0x735f7961u, - 0x74726174u, 0x00000000u, 0x00050005u, 0x00000232u, 0x33746e49u, 0x66754232u, 0x00726566u, 0x00050006u, - 0x00000232u, 0x00000000u, 0x6e695f67u, 0x00323374u, 0x00030005u, 0x00000234u, 0x00000000u, 0x00050005u, - 0x00000243u, 0x72726176u, 0x655f7961u, 0x0000646eu, 0x00050005u, 0x0000024fu, 0x5f6d756eu, 0x72726176u, - 0x00737961u, 0x00070005u, 0x00000253u, 0x63726f66u, 0x657a5f65u, 0x745f6f72u, 0x736b7361u, 0x00000000u, - 0x00070005u, 0x0000025bu, 0x75746361u, 0x765f6c61u, 0x61727261u, 0x64695f79u, 0x00000078u, 0x00040005u, - 0x0000026bu, 0x6c6c7563u, 0x0000725fu, 0x00060005u, 0x0000026cu, 0x65685446u, 0x61436174u, 0x6172656du, - 0x00000000u, 0x00040006u, 0x0000026cu, 0x00000000u, 0x00007863u, 0x00040006u, 0x0000026cu, 0x00000001u, - 0x00007963u, 0x00050006u, 0x0000026cu, 0x00000002u, 0x5f676d69u, 0x00000077u, 0x00050006u, 0x0000026cu, - 0x00000003u, 0x5f676d69u, 0x00000068u, 0x00050006u, 0x0000026cu, 0x00000004u, 0x796c6f70u, 0x00000030u, - 0x00050006u, 0x0000026cu, 0x00000005u, 0x796c6f70u, 0x00000031u, 0x00050006u, 0x0000026cu, 0x00000006u, - 0x796c6f70u, 0x00000032u, 0x00050006u, 0x0000026cu, 0x00000007u, 0x796c6f70u, 0x00000033u, 0x00050006u, - 0x0000026cu, 0x00000008u, 0x796c6f70u, 0x00000034u, 0x00050006u, 0x0000026cu, 0x00000009u, 0x796c6f70u, - 0x00000035u, 0x00070006u, 0x0000026cu, 0x0000000au, 0x5f78616du, 0x5f796172u, 0x6c676e61u, 0x00000065u, - 0x00080006u, 0x0000026cu, 0x0000000bu, 0x5f78616du, 0x74736964u, 0x6974726fu, 0x765f6e6fu, 0x00006c61u, - 0x00080006u, 0x0000026cu, 0x0000000cu, 0x5f78616du, 0x74736964u, 0x6974726fu, 0x645f6e6fu, 0x006c6176u, - 0x00060006u, 0x0000026cu, 0x0000000du, 0x74706564u, 0x616d5f68u, 0x00000078u, 0x00050006u, 0x0000026cu, - 0x0000000eu, 0x635f646cu, 0x00000000u, 0x00050006u, 0x0000026cu, 0x0000000fu, 0x645f646cu, 0x00000000u, - 0x00050006u, 0x0000026cu, 0x00000010u, 0x655f646cu, 0x00000000u, 0x00050006u, 0x0000026cu, 0x00000011u, - 0x665f646cu, 0x00000000u, 0x00080005u, 0x0000026eu, 0x656d6143u, 0x6e496172u, 0x6e697274u, 0x73636973u, - 0x66667542u, 0x00007265u, 0x00080006u, 0x0000026eu, 0x00000000u, 0x61635f67u, 0x6172656du, 0x746e695fu, - 0x736e6972u, 0x00736369u, 0x00030005u, 0x00000270u, 0x00000000u, 0x00050005u, 0x0000027au, 0x6c6c7563u, - 0x736f705fu, 0x00000065u, 0x00050005u, 0x0000027bu, 0x656d6143u, 0x6f506172u, 0x00006573u, 0x00070006u, - 0x0000027bu, 0x00000000u, 0x6c726f77u, 0x6f745f64u, 0x6d61635fu, 0x00617265u, 0x00070005u, 0x0000027du, - 0x656d6143u, 0x6f506172u, 0x75426573u, 0x72656666u, 0x00000000u, 0x00070006u, 0x0000027du, 0x00000000u, - 0x61635f67u, 0x6172656du, 0x736f705fu, 0x00007365u, 0x00030005u, 0x0000027fu, 0x00000000u, 0x00040005u, - 0x00000285u, 0x5f6d6163u, 0x00736f70u, 0x00040005u, 0x00000286u, 0x61726170u, 0x0000006du, 0x00050005u, - 0x00000289u, 0x77656976u, 0x6e696d5fu, 0x00000000u, 0x00050005u, 0x0000028eu, 0x77656976u, 0x78616d5fu, - 0x00000000u, 0x00030005u, 0x00000293u, 0x00006261u, 0x00040005u, 0x0000029eu, 0x696d5f65u, 0x0000006eu, - 0x00050005u, 0x000002a0u, 0x616f6c46u, 0x66754274u, 0x00726566u, 0x00060006u, 0x000002a0u, 0x00000000u, - 0x6c665f67u, 0x7374616fu, 0x00000000u, 0x00030005u, 0x000002a2u, 0x00000000u, 0x00040005u, 0x000002afu, - 0x616d5f65u, 0x00000078u, 0x00040005u, 0x000002beu, 0x61726170u, 0x0000006du, 0x00040005u, 0x000002c0u, - 0x61726170u, 0x0000006du, 0x00040005u, 0x000002c2u, 0x61726170u, 0x0000006du, 0x00040005u, 0x000002c4u, - 0x61726170u, 0x0000006du, 0x00040005u, 0x000002cau, 0x74735f76u, 0x00747261u, 0x00040005u, 0x000002dau, - 0x6e655f76u, 0x00000064u, 0x00050005u, 0x000002e5u, 0x61746f74u, 0x74705f6cu, 0x00000073u, 0x00040005u, - 0x000002e9u, 0x645f7369u, 0x0000746fu, 0x00040005u, 0x000002eau, 0x61726170u, 0x0000006du, 0x00050005u, - 0x000002f1u, 0x5f6d756eu, 0x6e756863u, 0x0000736bu, 0x00060005u, 0x00000300u, 0x5f6d756eu, 0x6d676573u, - 0x73746e65u, 0x00000000u, 0x00050005u, 0x00000303u, 0x5f6d756eu, 0x6e756863u, 0x0000736bu, 0x00070005u, - 0x0000030du, 0x796c6f50u, 0x656e696cu, 0x6b736154u, 0x6c796150u, 0x0064616fu, 0x00060006u, 0x0000030du, - 0x00000000u, 0x72657571u, 0x64695f79u, 0x00000000u, 0x00050006u, 0x0000030du, 0x00000001u, 0x6c6f6f70u, - 0x0064695fu, 0x00060006u, 0x0000030du, 0x00000002u, 0x72726176u, 0x695f7961u, 0x00007864u, 0x00070006u, - 0x0000030du, 0x00000003u, 0x61746f74u, 0x6f705f6cu, 0x73746e69u, 0x00000000u, 0x00050006u, 0x0000030du, - 0x00000004u, 0x74646977u, 0x00000068u, 0x00050006u, 0x0000030du, 0x00000005u, 0x6f6c6f63u, 0x00000072u, - 0x00060006u, 0x0000030du, 0x00000006u, 0x5f706163u, 0x6c797473u, 0x00000065u, 0x00050006u, 0x0000030du, - 0x00000007u, 0x625f7369u, 0x00007665u, 0x00040005u, 0x0000030fu, 0x6c796170u, 0x0064616fu, 0x00040005u, - 0x00000319u, 0x61726170u, 0x0000006du, 0x00040005u, 0x0000031cu, 0x61726170u, 0x0000006du, 0x00040005u, - 0x00000322u, 0x61726170u, 0x0000006du, 0x00040005u, 0x00000331u, 0x74726556u, 0x00007865u, 0x00040006u, - 0x00000331u, 0x00000000u, 0x00000078u, 0x00040006u, 0x00000331u, 0x00000001u, 0x00000079u, 0x00040006u, - 0x00000331u, 0x00000002u, 0x0000007au, 0x00050006u, 0x00000331u, 0x00000003u, 0x6461705fu, 0x00000000u, - 0x00060005u, 0x00000333u, 0x74726556u, 0x75427865u, 0x72656666u, 0x00000000u, 0x00060006u, 0x00000333u, - 0x00000000u, 0x65765f67u, 0x63697472u, 0x00007365u, 0x00030005u, 0x00000335u, 0x00000000u, 0x00060005u, - 0x00000337u, 0x61697254u, 0x656c676eu, 0x66667542u, 0x00007265u, 0x00060006u, 0x00000337u, 0x00000000u, - 0x72745f67u, 0x676e6169u, 0x0073656cu, 0x00030005u, 0x00000339u, 0x00000000u, 0x00050005u, 0x0000033bu, - 0x65736f50u, 0x66667542u, 0x00007265u, 0x00050006u, 0x0000033bu, 0x00000000u, 0x6f705f67u, 0x00736573u, - 0x00030005u, 0x0000033du, 0x00000000u, 0x00080005u, 0x0000033eu, 0x656d6954u, 0x6d617473u, 0x50646570u, - 0x67796c6fu, 0x6f506e6fu, 0x00006c6fu, 0x00070006u, 0x0000033eu, 0x00000000u, 0x5f6d756eu, 0x656d6974u, - 0x6d617473u, 0x00007370u, 0x00060006u, 0x0000033eu, 0x00000001u, 0x5f6d756eu, 0x72726176u, 0x00737961u, - 0x00070006u, 0x0000033eu, 0x00000002u, 0x5f6d756eu, 0x74726576u, 0x73656369u, 0x00000000u, 0x00070006u, - 0x0000033eu, 0x00000003u, 0x5f6d756eu, 0x61697274u, 0x656c676eu, 0x00000073u, 0x00070006u, 0x0000033eu, - 0x00000004u, 0x6d697270u, 0x7079745fu, 0x64695f65u, 0x00000000u, 0x00080006u, 0x0000033eu, 0x00000005u, - 0x656d6974u, 0x6d617473u, 0x6f5f7370u, 0x65736666u, 0x00000074u, 0x00090006u, 0x0000033eu, 0x00000006u, - 0x765f7374u, 0x61727261u, 0x705f7379u, 0x666f5f73u, 0x74657366u, 0x00000000u, 0x00080006u, 0x0000033eu, - 0x00000007u, 0x72726176u, 0x5f737961u, 0x6f5f7370u, 0x65736666u, 0x00000074u, 0x00070006u, 0x0000033eu, - 0x00000008u, 0x5f697274u, 0x6f5f7370u, 0x65736666u, 0x00000074u, 0x00070006u, 0x0000033eu, 0x00000009u, - 0x74726576u, 0x73656369u, 0x66666f5fu, 0x00746573u, 0x00080006u, 0x0000033eu, 0x0000000au, 0x61697274u, - 0x656c676eu, 0x666f5f73u, 0x74657366u, 0x00000000u, 0x00060006u, 0x0000033eu, 0x0000000bu, 0x62626161u, - 0x66666f5fu, 0x00746573u, 0x00050006u, 0x0000033eu, 0x0000000cu, 0x6461705fu, 0x00000031u, 0x00050006u, - 0x0000033eu, 0x0000000du, 0x6461705fu, 0x00000032u, 0x00050006u, 0x0000033eu, 0x0000000eu, 0x6461705fu, - 0x00000033u, 0x00050006u, 0x0000033eu, 0x0000000fu, 0x6461705fu, 0x00000034u, 0x00070005u, 0x00000340u, - 0x796c6f50u, 0x506e6f67u, 0x426c6f6fu, 0x65666675u, 0x00000072u, 0x00070006u, 0x00000340u, 0x00000000u, - 0x6f705f67u, 0x6f67796cu, 0x6f705f6eu, 0x00736c6fu, 0x00030005u, 0x00000342u, 0x00000000u, 0x00060005u, - 0x00000343u, 0x7473624fu, 0x656c6361u, 0x6c6f6f50u, 0x00000000u, 0x00060006u, 0x00000343u, 0x00000000u, - 0x5f6d756eu, 0x65627563u, 0x00000073u, 0x00070006u, 0x00000343u, 0x00000001u, 0x5f6d756eu, 0x656d6974u, - 0x6d617473u, 0x00007370u, 0x00070006u, 0x00000343u, 0x00000002u, 0x5f6d756eu, 0x63617274u, 0x6f705f6bu, - 0x00736573u, 0x00070006u, 0x00000343u, 0x00000003u, 0x6d697270u, 0x7079745fu, 0x64695f65u, 0x00000000u, - 0x00080006u, 0x00000343u, 0x00000004u, 0x656d6974u, 0x6d617473u, 0x6f5f7370u, 0x65736666u, 0x00000074u, - 0x00080006u, 0x00000343u, 0x00000005u, 0x65627563u, 0x5f73745fu, 0x6f5f7370u, 0x65736666u, 0x00000074u, - 0x00090006u, 0x00000343u, 0x00000006u, 0x63617274u, 0x69745f6bu, 0x7473656du, 0x73706d61u, 0x66666f5fu, - 0x00746573u, 0x00080006u, 0x00000343u, 0x00000007u, 0x6e617274u, 0x74616c73u, 0x736e6f69u, 0x66666f5fu, - 0x00746573u, 0x00080006u, 0x00000343u, 0x00000008u, 0x74617571u, 0x696e7265u, 0x5f736e6fu, 0x7366666fu, - 0x00007465u, 0x00070006u, 0x00000343u, 0x00000009u, 0x6c616373u, 0x6f5f7365u, 0x65736666u, 0x00000074u, - 0x00070006u, 0x00000343u, 0x0000000au, 0x6f6c6f63u, 0x6f5f7372u, 0x65736666u, 0x00000074u, 0x00070006u, - 0x00000343u, 0x0000000bu, 0x646e6572u, 0x665f7265u, 0x7367616cu, 0x00000000u, 0x00050006u, 0x00000343u, - 0x0000000cu, 0x6461705fu, 0x00000032u, 0x00050006u, 0x00000343u, 0x0000000du, 0x6461705fu, 0x00000033u, - 0x00050006u, 0x00000343u, 0x0000000eu, 0x6461705fu, 0x00000034u, 0x00050006u, 0x00000343u, 0x0000000fu, - 0x6461705fu, 0x00000035u, 0x00070005u, 0x00000345u, 0x7473624fu, 0x656c6361u, 0x6c6f6f50u, 0x66667542u, - 0x00007265u, 0x00080006u, 0x00000345u, 0x00000000u, 0x626f5f67u, 0x63617473u, 0x705f656cu, 0x736c6f6fu, - 0x00000000u, 0x00030005u, 0x00000347u, 0x00000000u, 0x00030047u, 0x000000d5u, 0x00000002u, 0x00050048u, - 0x000000d5u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000000d5u, 0x00000001u, 0x00000023u, - 0x00000004u, 0x00050048u, 0x000000d5u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x000000d5u, - 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x000000d5u, 0x00000004u, 0x00000023u, 0x00000010u, - 0x00050048u, 0x000000d5u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x000000d5u, 0x00000006u, - 0x00000023u, 0x00000018u, 0x00050048u, 0x000000d5u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, - 0x000000d5u, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x000000d5u, 0x00000009u, 0x00000023u, - 0x00000024u, 0x00050048u, 0x000000d5u, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x000000d5u, - 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x000000d5u, 0x0000000cu, 0x00000023u, 0x00000030u, - 0x00050048u, 0x000000d5u, 0x0000000du, 0x00000023u, 0x00000034u, 0x00050048u, 0x000000d5u, 0x0000000eu, - 0x00000023u, 0x00000038u, 0x00050048u, 0x000000d5u, 0x0000000fu, 0x00000023u, 0x0000003cu, 0x00050048u, - 0x000000d5u, 0x00000010u, 0x00000023u, 0x00000040u, 0x00050048u, 0x000000d5u, 0x00000011u, 0x00000023u, - 0x00000044u, 0x00050048u, 0x000000d5u, 0x00000012u, 0x00000023u, 0x00000048u, 0x00050048u, 0x000000d5u, - 0x00000013u, 0x00000023u, 0x0000004cu, 0x00050048u, 0x000000d5u, 0x00000014u, 0x00000023u, 0x00000050u, - 0x00040047u, 0x000000eau, 0x00000006u, 0x00000010u, 0x00030047u, 0x000000ebu, 0x00000002u, 0x00040048u, - 0x000000ebu, 0x00000000u, 0x00000018u, 0x00050048u, 0x000000ebu, 0x00000000u, 0x00000023u, 0x00000000u, - 0x00030047u, 0x000000edu, 0x00000018u, 0x00040047u, 0x000000edu, 0x00000021u, 0x0000000au, 0x00040047u, - 0x000000edu, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000173u, 0x00000006u, 0x00000008u, 0x00030047u, - 0x00000174u, 0x00000002u, 0x00040048u, 0x00000174u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000174u, - 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000176u, 0x00000018u, 0x00040047u, 0x00000176u, - 0x00000021u, 0x00000000u, 0x00040047u, 0x00000176u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001bau, - 0x0000000bu, 0x0000001au, 0x00050048u, 0x000001e2u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, - 0x000001e2u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000001e2u, 0x00000002u, 0x00000023u, - 0x00000008u, 0x00050048u, 0x000001e2u, 0x00000003u, 0x00000023u, 0x00000010u, 0x00050048u, 0x000001e2u, - 0x00000004u, 0x00000023u, 0x00000014u, 0x00050048u, 0x000001e2u, 0x00000005u, 0x00000023u, 0x00000018u, - 0x00050048u, 0x000001e2u, 0x00000006u, 0x00000023u, 0x0000001cu, 0x00040047u, 0x000001e3u, 0x00000006u, - 0x00000020u, 0x00030047u, 0x000001e4u, 0x00000002u, 0x00040048u, 0x000001e4u, 0x00000000u, 0x00000018u, - 0x00050048u, 0x000001e4u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001e6u, 0x00000018u, - 0x00040047u, 0x000001e6u, 0x00000021u, 0x0000000du, 0x00040047u, 0x000001e6u, 0x00000022u, 0x00000000u, - 0x00040047u, 0x000001f0u, 0x00000006u, 0x00000004u, 0x00050048u, 0x000001f1u, 0x00000000u, 0x00000023u, - 0x00000000u, 0x00050048u, 0x000001f1u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000001f1u, - 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x000001f1u, 0x00000003u, 0x00000023u, 0x0000000cu, - 0x00050048u, 0x000001f1u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x000001f1u, 0x00000005u, - 0x00000023u, 0x00000014u, 0x00050048u, 0x000001f1u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, - 0x000001f1u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x000001f1u, 0x00000008u, 0x00000023u, - 0x00000020u, 0x00050048u, 0x000001f1u, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x000001f1u, - 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x000001f1u, 0x0000000bu, 0x00000023u, 0x0000002cu, - 0x00050048u, 0x000001f1u, 0x0000000cu, 0x00000023u, 0x00000030u, 0x00040047u, 0x000001f2u, 0x00000006u, - 0x00000080u, 0x00030047u, 0x000001f3u, 0x00000002u, 0x00040048u, 0x000001f3u, 0x00000000u, 0x00000018u, - 0x00050048u, 0x000001f3u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001f5u, 0x00000018u, - 0x00040047u, 0x000001f5u, 0x00000021u, 0x00000006u, 0x00040047u, 0x000001f5u, 0x00000022u, 0x00000000u, - 0x00050048u, 0x00000208u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000208u, 0x00000001u, - 0x00000023u, 0x00000004u, 0x00050048u, 0x00000208u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, - 0x00000208u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000208u, 0x00000004u, 0x00000023u, - 0x00000010u, 0x00050048u, 0x00000208u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000208u, - 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000208u, 0x00000007u, 0x00000023u, 0x0000001cu, - 0x00050048u, 0x00000208u, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000208u, 0x00000009u, - 0x00000023u, 0x00000024u, 0x00050048u, 0x00000208u, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, - 0x00000208u, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x00000208u, 0x0000000cu, 0x00000023u, - 0x00000030u, 0x00050048u, 0x00000208u, 0x0000000du, 0x00000023u, 0x00000034u, 0x00050048u, 0x00000208u, - 0x0000000eu, 0x00000023u, 0x00000038u, 0x00050048u, 0x00000208u, 0x0000000fu, 0x00000023u, 0x0000003cu, - 0x00040047u, 0x00000209u, 0x00000006u, 0x00000040u, 0x00030047u, 0x0000020au, 0x00000002u, 0x00040048u, - 0x0000020au, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000020au, 0x00000000u, 0x00000023u, 0x00000000u, - 0x00030047u, 0x0000020cu, 0x00000018u, 0x00040047u, 0x0000020cu, 0x00000021u, 0x00000007u, 0x00040047u, - 0x0000020cu, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000231u, 0x00000006u, 0x00000004u, 0x00030047u, - 0x00000232u, 0x00000002u, 0x00040048u, 0x00000232u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000232u, - 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000234u, 0x00000018u, 0x00040047u, 0x00000234u, - 0x00000021u, 0x00000001u, 0x00040047u, 0x00000234u, 0x00000022u, 0x00000000u, 0x00050048u, 0x0000026cu, - 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000026cu, 0x00000001u, 0x00000023u, 0x00000004u, - 0x00050048u, 0x0000026cu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000026cu, 0x00000003u, - 0x00000023u, 0x0000000cu, 0x00050048u, 0x0000026cu, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, - 0x0000026cu, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x0000026cu, 0x00000006u, 0x00000023u, - 0x00000018u, 0x00050048u, 0x0000026cu, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x0000026cu, - 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x0000026cu, 0x00000009u, 0x00000023u, 0x00000024u, - 0x00050048u, 0x0000026cu, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x0000026cu, 0x0000000bu, - 0x00000023u, 0x0000002cu, 0x00050048u, 0x0000026cu, 0x0000000cu, 0x00000023u, 0x00000030u, 0x00050048u, - 0x0000026cu, 0x0000000du, 0x00000023u, 0x00000034u, 0x00050048u, 0x0000026cu, 0x0000000eu, 0x00000023u, - 0x00000038u, 0x00050048u, 0x0000026cu, 0x0000000fu, 0x00000023u, 0x0000003cu, 0x00050048u, 0x0000026cu, - 0x00000010u, 0x00000023u, 0x00000040u, 0x00050048u, 0x0000026cu, 0x00000011u, 0x00000023u, 0x00000044u, - 0x00040047u, 0x0000026du, 0x00000006u, 0x00000048u, 0x00030047u, 0x0000026eu, 0x00000002u, 0x00040048u, - 0x0000026eu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000026eu, 0x00000000u, 0x00000023u, 0x00000000u, - 0x00030047u, 0x00000270u, 0x00000018u, 0x00040047u, 0x00000270u, 0x00000021u, 0x0000000bu, 0x00040047u, - 0x00000270u, 0x00000022u, 0x00000000u, 0x00040048u, 0x0000027bu, 0x00000000u, 0x00000005u, 0x00050048u, - 0x0000027bu, 0x00000000u, 0x00000007u, 0x00000010u, 0x00050048u, 0x0000027bu, 0x00000000u, 0x00000023u, - 0x00000000u, 0x00040047u, 0x0000027cu, 0x00000006u, 0x00000040u, 0x00030047u, 0x0000027du, 0x00000002u, - 0x00040048u, 0x0000027du, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000027du, 0x00000000u, 0x00000023u, - 0x00000000u, 0x00030047u, 0x0000027fu, 0x00000018u, 0x00040047u, 0x0000027fu, 0x00000021u, 0x0000000cu, - 0x00040047u, 0x0000027fu, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000029fu, 0x00000006u, 0x00000004u, - 0x00030047u, 0x000002a0u, 0x00000002u, 0x00040048u, 0x000002a0u, 0x00000000u, 0x00000018u, 0x00050048u, - 0x000002a0u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002a2u, 0x00000018u, 0x00040047u, - 0x000002a2u, 0x00000021u, 0x00000005u, 0x00040047u, 0x000002a2u, 0x00000022u, 0x00000000u, 0x00050048u, - 0x00000331u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000331u, 0x00000001u, 0x00000023u, - 0x00000004u, 0x00050048u, 0x00000331u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000331u, - 0x00000003u, 0x00000023u, 0x0000000cu, 0x00040047u, 0x00000332u, 0x00000006u, 0x00000010u, 0x00030047u, - 0x00000333u, 0x00000002u, 0x00040048u, 0x00000333u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000333u, - 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000335u, 0x00000018u, 0x00040047u, 0x00000335u, - 0x00000021u, 0x00000002u, 0x00040047u, 0x00000335u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000336u, - 0x00000006u, 0x00000010u, 0x00030047u, 0x00000337u, 0x00000002u, 0x00040048u, 0x00000337u, 0x00000000u, - 0x00000018u, 0x00050048u, 0x00000337u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000339u, - 0x00000018u, 0x00040047u, 0x00000339u, 0x00000021u, 0x00000003u, 0x00040047u, 0x00000339u, 0x00000022u, - 0x00000000u, 0x00040047u, 0x0000033au, 0x00000006u, 0x00000040u, 0x00030047u, 0x0000033bu, 0x00000002u, - 0x00040048u, 0x0000033bu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000033bu, 0x00000000u, 0x00000023u, - 0x00000000u, 0x00030047u, 0x0000033du, 0x00000018u, 0x00040047u, 0x0000033du, 0x00000021u, 0x00000004u, - 0x00040047u, 0x0000033du, 0x00000022u, 0x00000000u, 0x00050048u, 0x0000033eu, 0x00000000u, 0x00000023u, - 0x00000000u, 0x00050048u, 0x0000033eu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000033eu, - 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000033eu, 0x00000003u, 0x00000023u, 0x0000000cu, - 0x00050048u, 0x0000033eu, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x0000033eu, 0x00000005u, - 0x00000023u, 0x00000014u, 0x00050048u, 0x0000033eu, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, - 0x0000033eu, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x0000033eu, 0x00000008u, 0x00000023u, - 0x00000020u, 0x00050048u, 0x0000033eu, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x0000033eu, - 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x0000033eu, 0x0000000bu, 0x00000023u, 0x0000002cu, - 0x00050048u, 0x0000033eu, 0x0000000cu, 0x00000023u, 0x00000030u, 0x00050048u, 0x0000033eu, 0x0000000du, - 0x00000023u, 0x00000034u, 0x00050048u, 0x0000033eu, 0x0000000eu, 0x00000023u, 0x00000038u, 0x00050048u, - 0x0000033eu, 0x0000000fu, 0x00000023u, 0x0000003cu, 0x00040047u, 0x0000033fu, 0x00000006u, 0x00000040u, - 0x00030047u, 0x00000340u, 0x00000002u, 0x00040048u, 0x00000340u, 0x00000000u, 0x00000018u, 0x00050048u, - 0x00000340u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000342u, 0x00000018u, 0x00040047u, - 0x00000342u, 0x00000021u, 0x00000008u, 0x00040047u, 0x00000342u, 0x00000022u, 0x00000000u, 0x00050048u, - 0x00000343u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000343u, 0x00000001u, 0x00000023u, - 0x00000004u, 0x00050048u, 0x00000343u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000343u, - 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000343u, 0x00000004u, 0x00000023u, 0x00000010u, - 0x00050048u, 0x00000343u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000343u, 0x00000006u, - 0x00000023u, 0x00000018u, 0x00050048u, 0x00000343u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, - 0x00000343u, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000343u, 0x00000009u, 0x00000023u, - 0x00000024u, 0x00050048u, 0x00000343u, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x00000343u, - 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x00000343u, 0x0000000cu, 0x00000023u, 0x00000030u, - 0x00050048u, 0x00000343u, 0x0000000du, 0x00000023u, 0x00000034u, 0x00050048u, 0x00000343u, 0x0000000eu, - 0x00000023u, 0x00000038u, 0x00050048u, 0x00000343u, 0x0000000fu, 0x00000023u, 0x0000003cu, 0x00040047u, - 0x00000344u, 0x00000006u, 0x00000040u, 0x00030047u, 0x00000345u, 0x00000002u, 0x00040048u, 0x00000345u, - 0x00000000u, 0x00000018u, 0x00050048u, 0x00000345u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, - 0x00000347u, 0x00000018u, 0x00040047u, 0x00000347u, 0x00000021u, 0x00000009u, 0x00040047u, 0x00000347u, - 0x00000022u, 0x00000000u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, - 0x00000006u, 0x00000020u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x00000007u, 0x00000001u, 0x00040020u, - 0x00000008u, 0x00000007u, 0x00000006u, 0x00030016u, 0x00000009u, 0x00000020u, 0x00040017u, 0x0000000au, - 0x00000009u, 0x00000003u, 0x00040021u, 0x0000000bu, 0x0000000au, 0x00000008u, 0x00020014u, 0x00000012u, - 0x00040021u, 0x00000013u, 0x00000012u, 0x00000008u, 0x00050021u, 0x00000017u, 0x00000009u, 0x00000008u, - 0x00000008u, 0x00040015u, 0x0000001cu, 0x00000040u, 0x00000001u, 0x00040020u, 0x0000001du, 0x00000007u, - 0x0000001cu, 0x00040015u, 0x0000001eu, 0x00000020u, 0x00000001u, 0x00060021u, 0x0000001fu, 0x0000001eu, - 0x00000008u, 0x00000008u, 0x0000001du, 0x00040020u, 0x00000025u, 0x00000007u, 0x0000000au, 0x00070021u, - 0x00000026u, 0x00000012u, 0x00000025u, 0x00000025u, 0x00000025u, 0x00000025u, 0x00040017u, 0x0000002du, - 0x00000009u, 0x00000004u, 0x00040018u, 0x0000002eu, 0x0000002du, 0x00000004u, 0x0003001eu, 0x0000002fu, - 0x0000002eu, 0x00040020u, 0x00000030u, 0x00000007u, 0x0000002fu, 0x00040021u, 0x00000031u, 0x0000000au, - 0x00000030u, 0x0004002bu, 0x00000006u, 0x00000036u, 0x00000000u, 0x0004002bu, 0x00000009u, 0x0000003au, - 0x3f7dfdfeu, 0x0004002bu, 0x00000009u, 0x0000003bu, 0x3b808081u, 0x0004002bu, 0x00000009u, 0x0000003cu, - 0x3f68e8e9u, 0x0006002cu, 0x0000000au, 0x0000003du, 0x0000003au, 0x0000003bu, 0x0000003cu, 0x0004002bu, - 0x00000009u, 0x00000043u, 0x3ec4c4c5u, 0x0004002bu, 0x00000009u, 0x00000044u, 0x3f37b7b8u, 0x0004002bu, - 0x00000009u, 0x00000045u, 0x3f79f9fau, 0x0006002cu, 0x0000000au, 0x00000046u, 0x00000043u, 0x00000044u, - 0x00000045u, 0x0004002bu, 0x00000006u, 0x00000049u, 0x00000002u, 0x0004002bu, 0x00000009u, 0x0000004du, - 0x3f0b8b8cu, 0x0004002bu, 0x00000009u, 0x0000004eu, 0x3ebababbu, 0x0004002bu, 0x00000009u, 0x0000004fu, - 0x3f800000u, 0x0006002cu, 0x0000000au, 0x00000050u, 0x0000004du, 0x0000004eu, 0x0000004fu, 0x0004002bu, - 0x00000006u, 0x00000053u, 0x00000003u, 0x0004002bu, 0x00000009u, 0x00000057u, 0x3ec8c8c9u, 0x0004002bu, - 0x00000009u, 0x00000058u, 0x00000000u, 0x0006002cu, 0x0000000au, 0x00000059u, 0x0000004fu, 0x00000057u, - 0x00000058u, 0x0004002bu, 0x00000006u, 0x0000005cu, 0x00000004u, 0x0006002cu, 0x0000000au, 0x00000060u, - 0x00000058u, 0x0000004fu, 0x00000058u, 0x0004002bu, 0x00000006u, 0x00000063u, 0x00000007u, 0x0004002bu, - 0x00000009u, 0x00000067u, 0x3ed8d8d9u, 0x0004002bu, 0x00000009u, 0x00000068u, 0x3f33b3b4u, 0x0004002bu, - 0x00000009u, 0x00000069u, 0x3e6cecedu, 0x0006002cu, 0x0000000au, 0x0000006au, 0x00000067u, 0x00000068u, - 0x00000069u, 0x0004002bu, 0x00000006u, 0x0000006du, 0x00000008u, 0x0004002bu, 0x00000009u, 0x00000071u, - 0x3e8a8a8bu, 0x0004002bu, 0x00000009u, 0x00000072u, 0x3f31b1b2u, 0x0006002cu, 0x0000000au, 0x00000073u, - 0x00000044u, 0x00000071u, 0x00000072u, 0x0004002bu, 0x00000006u, 0x00000076u, 0x00000009u, 0x0004002bu, - 0x00000009u, 0x0000007au, 0x3da0a0a1u, 0x0004002bu, 0x00000009u, 0x0000007bu, 0x3f7efeffu, 0x0004002bu, - 0x00000009u, 0x0000007cu, 0x3f39b9bau, 0x0006002cu, 0x0000000au, 0x0000007du, 0x0000007au, 0x0000007bu, - 0x0000007cu, 0x0004002bu, 0x00000006u, 0x00000080u, 0x0000000au, 0x0004002bu, 0x00000006u, 0x00000086u, - 0x0000000bu, 0x0006002cu, 0x0000000au, 0x0000008au, 0x00000057u, 0x00000057u, 0x00000057u, 0x0004002bu, - 0x00000006u, 0x0000008du, 0x0000000cu, 0x0004002bu, 0x00000009u, 0x00000091u, 0x3d008081u, 0x0004002bu, - 0x00000009u, 0x00000092u, 0x3c008081u, 0x0006002cu, 0x0000000au, 0x00000093u, 0x00000091u, 0x00000092u, - 0x0000004fu, 0x0004002bu, 0x00000006u, 0x00000096u, 0x0000000du, 0x0004002bu, 0x00000009u, 0x0000009au, - 0x3ea0a0a1u, 0x0004002bu, 0x00000009u, 0x0000009bu, 0x3ef0f0f1u, 0x0006002cu, 0x0000000au, 0x0000009cu, - 0x0000009au, 0x0000009au, 0x0000009bu, 0x0004002bu, 0x00000006u, 0x0000009fu, 0x0000000eu, 0x0004002bu, - 0x00000009u, 0x000000a3u, 0x3e70f0f1u, 0x0006002cu, 0x0000000au, 0x000000a4u, 0x000000a3u, 0x0000009bu, - 0x000000a3u, 0x0004002bu, 0x00000006u, 0x000000a7u, 0x0000000fu, 0x0006002cu, 0x0000000au, 0x000000abu, - 0x0000009bu, 0x0000009au, 0x0000009au, 0x0004002bu, 0x00000006u, 0x000000aeu, 0x00000010u, 0x0006002cu, - 0x0000000au, 0x000000b2u, 0x0000004fu, 0x0000004fu, 0x0000004fu, 0x0004002bu, 0x00000006u, 0x000000b5u, - 0x00000011u, 0x0004002bu, 0x00000006u, 0x000000bbu, 0x00000012u, 0x0006002cu, 0x0000000au, 0x000000bfu, - 0x0000004fu, 0x0000004fu, 0x00000058u, 0x0004002bu, 0x00000006u, 0x000000c2u, 0x00000013u, 0x0004002bu, - 0x00000006u, 0x000000c8u, 0x00000014u, 0x0004002bu, 0x00000006u, 0x000000ceu, 0x00000015u, 0x0017001eu, - 0x000000d5u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, - 0x0000001eu, 0x0000001eu, 0x00000006u, 0x00000009u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000009u, - 0x00000009u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x000000d6u, - 0x00000009u, 0x000000d5u, 0x0004003bu, 0x000000d6u, 0x000000d7u, 0x00000009u, 0x0004002bu, 0x0000001eu, - 0x000000d8u, 0x00000008u, 0x00040020u, 0x000000d9u, 0x00000009u, 0x0000001eu, 0x0004002bu, 0x0000001eu, - 0x000000dcu, 0x00000000u, 0x00040020u, 0x000000e8u, 0x00000007u, 0x0000002du, 0x0003001du, 0x000000eau, - 0x0000002du, 0x0003001eu, 0x000000ebu, 0x000000eau, 0x00040020u, 0x000000ecu, 0x0000000cu, 0x000000ebu, - 0x0004003bu, 0x000000ecu, 0x000000edu, 0x0000000cu, 0x00040020u, 0x000000efu, 0x0000000cu, 0x0000002du, - 0x00040020u, 0x000000f2u, 0x00000007u, 0x00000009u, 0x00040020u, 0x00000107u, 0x00000007u, 0x00000012u, - 0x0004002bu, 0x0000001eu, 0x0000010cu, 0x00000005u, 0x00040020u, 0x0000010du, 0x00000009u, 0x00000009u, - 0x0004002bu, 0x00000009u, 0x0000011eu, 0x40a00000u, 0x0004002bu, 0x00000009u, 0x0000011fu, 0x41400000u, - 0x0004002bu, 0x0000001eu, 0x00000126u, 0x00000003u, 0x0004002bu, 0x0000001eu, 0x0000012au, 0x00000002u, - 0x0004002bu, 0x00000009u, 0x0000013au, 0x40400000u, 0x0004002bu, 0x00000009u, 0x0000013fu, 0x40800000u, - 0x0004002bu, 0x00000009u, 0x00000140u, 0x40e00000u, 0x0004002bu, 0x0000001eu, 0x00000147u, 0x00000001u, - 0x0004002bu, 0x0000001eu, 0x0000015cu, 0xffffffffu, 0x00040020u, 0x0000015eu, 0x00000007u, 0x0000001eu, - 0x0003001du, 0x00000173u, 0x0000001cu, 0x0003001eu, 0x00000174u, 0x00000173u, 0x00040020u, 0x00000175u, - 0x0000000cu, 0x00000174u, 0x0004003bu, 0x00000175u, 0x00000176u, 0x0000000cu, 0x00040020u, 0x0000017bu, - 0x0000000cu, 0x0000001cu, 0x00040017u, 0x0000018eu, 0x00000012u, 0x00000003u, 0x00040018u, 0x0000019au, - 0x0000000au, 0x00000003u, 0x00040020u, 0x0000019bu, 0x00000007u, 0x0000019au, 0x00040020u, 0x0000019du, - 0x00000007u, 0x0000002eu, 0x00040017u, 0x000001b8u, 0x00000006u, 0x00000003u, 0x00040020u, 0x000001b9u, - 0x00000001u, 0x000001b8u, 0x0004003bu, 0x000001b9u, 0x000001bau, 0x00000001u, 0x00040020u, 0x000001bbu, - 0x00000001u, 0x00000006u, 0x0004002bu, 0x0000001eu, 0x000001c0u, 0x00000013u, 0x00040020u, 0x000001c1u, - 0x00000009u, 0x00000006u, 0x0004002bu, 0x0000001eu, 0x000001ccu, 0x00000014u, 0x0004002bu, 0x0000001eu, - 0x000001d6u, 0x00000009u, 0x0009001eu, 0x000001dfu, 0x00000006u, 0x00000006u, 0x0000001cu, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x000001e0u, 0x00000007u, 0x000001dfu, 0x0009001eu, - 0x000001e2u, 0x00000006u, 0x00000006u, 0x0000001cu, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x0003001du, 0x000001e3u, 0x000001e2u, 0x0003001eu, 0x000001e4u, 0x000001e3u, 0x00040020u, 0x000001e5u, - 0x0000000cu, 0x000001e4u, 0x0004003bu, 0x000001e5u, 0x000001e6u, 0x0000000cu, 0x00040020u, 0x000001e8u, - 0x0000000cu, 0x000001e2u, 0x0004001cu, 0x000001ecu, 0x00000006u, 0x000000c8u, 0x000f001eu, 0x000001edu, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x000001ecu, 0x00040020u, 0x000001eeu, 0x00000007u, - 0x000001edu, 0x0004001cu, 0x000001f0u, 0x00000006u, 0x000000c8u, 0x000f001eu, 0x000001f1u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x000001f0u, 0x0003001du, 0x000001f2u, 0x000001f1u, 0x0003001eu, - 0x000001f3u, 0x000001f2u, 0x00040020u, 0x000001f4u, 0x0000000cu, 0x000001f3u, 0x0004003bu, 0x000001f4u, - 0x000001f5u, 0x0000000cu, 0x00040020u, 0x000001f8u, 0x0000000cu, 0x000001f1u, 0x0012001eu, 0x00000205u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00040020u, 0x00000206u, 0x00000007u, 0x00000205u, 0x0012001eu, 0x00000208u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0003001du, 0x00000209u, - 0x00000208u, 0x0003001eu, 0x0000020au, 0x00000209u, 0x00040020u, 0x0000020bu, 0x0000000cu, 0x0000020au, - 0x0004003bu, 0x0000020bu, 0x0000020cu, 0x0000000cu, 0x00040020u, 0x00000211u, 0x0000000cu, 0x00000208u, - 0x0004002bu, 0x0000001eu, 0x00000216u, 0x00000006u, 0x0004002bu, 0x0000001eu, 0x00000219u, 0x00000004u, - 0x0003001du, 0x00000231u, 0x0000001eu, 0x0003001eu, 0x00000232u, 0x00000231u, 0x00040020u, 0x00000233u, - 0x0000000cu, 0x00000232u, 0x0004003bu, 0x00000233u, 0x00000234u, 0x0000000cu, 0x0004002bu, 0x0000001eu, - 0x00000235u, 0x00000007u, 0x00040020u, 0x0000023fu, 0x0000000cu, 0x0000001eu, 0x0003002au, 0x00000012u, - 0x00000254u, 0x00030029u, 0x00000012u, 0x0000025au, 0x0004002bu, 0x0000001eu, 0x0000025fu, 0x0000000eu, - 0x0014001eu, 0x0000026cu, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, - 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, - 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x0003001du, 0x0000026du, 0x0000026cu, 0x0003001eu, - 0x0000026eu, 0x0000026du, 0x00040020u, 0x0000026fu, 0x0000000cu, 0x0000026eu, 0x0004003bu, 0x0000026fu, - 0x00000270u, 0x0000000cu, 0x0004002bu, 0x0000001eu, 0x00000273u, 0x0000000du, 0x00040020u, 0x00000274u, - 0x0000000cu, 0x00000009u, 0x0003001eu, 0x0000027bu, 0x0000002eu, 0x0003001du, 0x0000027cu, 0x0000027bu, - 0x0003001eu, 0x0000027du, 0x0000027cu, 0x00040020u, 0x0000027eu, 0x0000000cu, 0x0000027du, 0x0004003bu, - 0x0000027eu, 0x0000027fu, 0x0000000cu, 0x00040020u, 0x00000281u, 0x0000000cu, 0x0000027bu, 0x0004002bu, - 0x0000001eu, 0x00000294u, 0x0000000bu, 0x0004002bu, 0x00000006u, 0x0000029bu, 0x00000006u, 0x0003001du, - 0x0000029fu, 0x00000009u, 0x0003001eu, 0x000002a0u, 0x0000029fu, 0x00040020u, 0x000002a1u, 0x0000000cu, - 0x000002a0u, 0x0004003bu, 0x000002a1u, 0x000002a2u, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x000002b9u, - 0x00000005u, 0x000a001eu, 0x0000030du, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000009u, - 0x0000000au, 0x00000006u, 0x00000009u, 0x00040020u, 0x0000030eu, 0x0000151au, 0x0000030du, 0x0004003bu, - 0x0000030eu, 0x0000030fu, 0x0000151au, 0x00040020u, 0x00000311u, 0x0000151au, 0x00000006u, 0x00040020u, - 0x00000320u, 0x0000151au, 0x00000009u, 0x00040020u, 0x00000326u, 0x0000151au, 0x0000000au, 0x0004002bu, - 0x00000009u, 0x00000330u, 0x40000000u, 0x0006001eu, 0x00000331u, 0x00000009u, 0x00000009u, 0x00000009u, - 0x00000009u, 0x0003001du, 0x00000332u, 0x00000331u, 0x0003001eu, 0x00000333u, 0x00000332u, 0x00040020u, - 0x00000334u, 0x0000000cu, 0x00000333u, 0x0004003bu, 0x00000334u, 0x00000335u, 0x0000000cu, 0x0003001du, - 0x00000336u, 0x000001b8u, 0x0003001eu, 0x00000337u, 0x00000336u, 0x00040020u, 0x00000338u, 0x0000000cu, - 0x00000337u, 0x0004003bu, 0x00000338u, 0x00000339u, 0x0000000cu, 0x0003001du, 0x0000033au, 0x0000027bu, - 0x0003001eu, 0x0000033bu, 0x0000033au, 0x00040020u, 0x0000033cu, 0x0000000cu, 0x0000033bu, 0x0004003bu, - 0x0000033cu, 0x0000033du, 0x0000000cu, 0x0012001eu, 0x0000033eu, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0003001du, 0x0000033fu, 0x0000033eu, - 0x0003001eu, 0x00000340u, 0x0000033fu, 0x00040020u, 0x00000341u, 0x0000000cu, 0x00000340u, 0x0004003bu, - 0x00000341u, 0x00000342u, 0x0000000cu, 0x0012001eu, 0x00000343u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0003001du, 0x00000344u, 0x00000343u, - 0x0003001eu, 0x00000345u, 0x00000344u, 0x00040020u, 0x00000346u, 0x0000000cu, 0x00000345u, 0x0004003bu, - 0x00000346u, 0x00000347u, 0x0000000cu, 0x0006002cu, 0x000001b8u, 0x00000348u, 0x00000007u, 0x00000007u, - 0x00000007u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, - 0x0004003bu, 0x00000008u, 0x000001b6u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000001b7u, 0x00000007u, - 0x0004003bu, 0x00000008u, 0x000001beu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000001c5u, 0x00000007u, - 0x0004003bu, 0x00000008u, 0x000001cau, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000001d0u, 0x00000007u, - 0x0004003bu, 0x000001e0u, 0x000001e1u, 0x00000007u, 0x0004003bu, 0x000001eeu, 0x000001efu, 0x00000007u, - 0x0004003bu, 0x00000206u, 0x00000207u, 0x00000007u, 0x0004003bu, 0x0000015eu, 0x00000215u, 0x00000007u, - 0x0004003bu, 0x00000008u, 0x0000021du, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000021eu, 0x00000007u, - 0x0004003bu, 0x0000001du, 0x00000221u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000022cu, 0x00000007u, - 0x0004003bu, 0x00000008u, 0x00000243u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000024fu, 0x00000007u, - 0x0004003bu, 0x00000107u, 0x00000253u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000025bu, 0x00000007u, - 0x0004003bu, 0x000000f2u, 0x0000026bu, 0x00000007u, 0x0004003bu, 0x00000030u, 0x0000027au, 0x00000007u, - 0x0004003bu, 0x00000025u, 0x00000285u, 0x00000007u, 0x0004003bu, 0x00000030u, 0x00000286u, 0x00000007u, - 0x0004003bu, 0x00000025u, 0x00000289u, 0x00000007u, 0x0004003bu, 0x00000025u, 0x0000028eu, 0x00000007u, - 0x0004003bu, 0x00000008u, 0x00000293u, 0x00000007u, 0x0004003bu, 0x00000025u, 0x0000029eu, 0x00000007u, - 0x0004003bu, 0x00000025u, 0x000002afu, 0x00000007u, 0x0004003bu, 0x00000025u, 0x000002beu, 0x00000007u, - 0x0004003bu, 0x00000025u, 0x000002c0u, 0x00000007u, 0x0004003bu, 0x00000025u, 0x000002c2u, 0x00000007u, - 0x0004003bu, 0x00000025u, 0x000002c4u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000002cau, 0x00000007u, - 0x0004003bu, 0x00000008u, 0x000002dau, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000002e5u, 0x00000007u, - 0x0004003bu, 0x00000107u, 0x000002e9u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000002eau, 0x00000007u, - 0x0004003bu, 0x00000008u, 0x000002f1u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000300u, 0x00000007u, - 0x0004003bu, 0x00000008u, 0x00000303u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000319u, 0x00000007u, - 0x0004003bu, 0x00000008u, 0x0000031cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000322u, 0x00000007u, - 0x0003003eu, 0x000001b6u, 0x00000036u, 0x00050041u, 0x000001bbu, 0x000001bcu, 0x000001bau, 0x00000036u, - 0x0004003du, 0x00000006u, 0x000001bdu, 0x000001bcu, 0x0003003eu, 0x000001b7u, 0x000001bdu, 0x0004003du, - 0x00000006u, 0x000001bfu, 0x000001b7u, 0x00050041u, 0x000001c1u, 0x000001c2u, 0x000000d7u, 0x000001c0u, - 0x0004003du, 0x00000006u, 0x000001c3u, 0x000001c2u, 0x00050089u, 0x00000006u, 0x000001c4u, 0x000001bfu, - 0x000001c3u, 0x0003003eu, 0x000001beu, 0x000001c4u, 0x0004003du, 0x00000006u, 0x000001c6u, 0x000001b7u, - 0x00050041u, 0x000001c1u, 0x000001c7u, 0x000000d7u, 0x000001c0u, 0x0004003du, 0x00000006u, 0x000001c8u, - 0x000001c7u, 0x00050086u, 0x00000006u, 0x000001c9u, 0x000001c6u, 0x000001c8u, 0x0003003eu, 0x000001c5u, - 0x000001c9u, 0x0004003du, 0x00000006u, 0x000001cbu, 0x000001c5u, 0x00050041u, 0x000001c1u, 0x000001cdu, - 0x000000d7u, 0x000001ccu, 0x0004003du, 0x00000006u, 0x000001ceu, 0x000001cdu, 0x00050089u, 0x00000006u, - 0x000001cfu, 0x000001cbu, 0x000001ceu, 0x0003003eu, 0x000001cau, 0x000001cfu, 0x0004003du, 0x00000006u, - 0x000001d1u, 0x000001c5u, 0x00050041u, 0x000001c1u, 0x000001d2u, 0x000000d7u, 0x000001ccu, 0x0004003du, - 0x00000006u, 0x000001d3u, 0x000001d2u, 0x00050086u, 0x00000006u, 0x000001d4u, 0x000001d1u, 0x000001d3u, - 0x0003003eu, 0x000001d0u, 0x000001d4u, 0x0004003du, 0x00000006u, 0x000001d5u, 0x000001d0u, 0x00050041u, - 0x000001c1u, 0x000001d7u, 0x000000d7u, 0x000001d6u, 0x0004003du, 0x00000006u, 0x000001d8u, 0x000001d7u, - 0x000500aeu, 0x00000012u, 0x000001d9u, 0x000001d5u, 0x000001d8u, 0x000300f7u, 0x000001dbu, 0x00000000u, - 0x000400fau, 0x000001d9u, 0x000001dau, 0x000001dbu, 0x000200f8u, 0x000001dau, 0x0003003eu, 0x000001b6u, - 0x00000036u, 0x0004003du, 0x00000006u, 0x000001dcu, 0x000001b6u, 0x000414aeu, 0x000001dcu, 0x00000007u, - 0x00000007u, 0x000200f8u, 0x000001dbu, 0x0004003du, 0x00000006u, 0x000001e7u, 0x000001d0u, 0x00060041u, - 0x000001e8u, 0x000001e9u, 0x000001e6u, 0x000000dcu, 0x000001e7u, 0x0004003du, 0x000001e2u, 0x000001eau, - 0x000001e9u, 0x00040190u, 0x000001dfu, 0x000001ebu, 0x000001eau, 0x0003003eu, 0x000001e1u, 0x000001ebu, - 0x00050041u, 0x00000008u, 0x000001f6u, 0x000001e1u, 0x000000dcu, 0x0004003du, 0x00000006u, 0x000001f7u, - 0x000001f6u, 0x00060041u, 0x000001f8u, 0x000001f9u, 0x000001f5u, 0x000000dcu, 0x000001f7u, 0x0004003du, - 0x000001f1u, 0x000001fau, 0x000001f9u, 0x00040190u, 0x000001edu, 0x000001fbu, 0x000001fau, 0x0003003eu, - 0x000001efu, 0x000001fbu, 0x0004003du, 0x00000006u, 0x000001fcu, 0x000001cau, 0x00050041u, 0x00000008u, - 0x000001fdu, 0x000001efu, 0x000000dcu, 0x0004003du, 0x00000006u, 0x000001feu, 0x000001fdu, 0x000500aeu, - 0x00000012u, 0x000001ffu, 0x000001fcu, 0x000001feu, 0x000300f7u, 0x00000201u, 0x00000000u, 0x000400fau, - 0x000001ffu, 0x00000200u, 0x00000201u, 0x000200f8u, 0x00000200u, 0x0003003eu, 0x000001b6u, 0x00000036u, - 0x0004003du, 0x00000006u, 0x00000202u, 0x000001b6u, 0x000414aeu, 0x00000202u, 0x00000007u, 0x00000007u, - 0x000200f8u, 0x00000201u, 0x00050041u, 0x00000008u, 0x0000020du, 0x000001efu, 0x00000147u, 0x0004003du, - 0x00000006u, 0x0000020eu, 0x0000020du, 0x0004003du, 0x00000006u, 0x0000020fu, 0x000001cau, 0x00050080u, - 0x00000006u, 0x00000210u, 0x0000020eu, 0x0000020fu, 0x00060041u, 0x00000211u, 0x00000212u, 0x0000020cu, - 0x000000dcu, 0x00000210u, 0x0004003du, 0x00000208u, 0x00000213u, 0x00000212u, 0x00040190u, 0x00000205u, - 0x00000214u, 0x00000213u, 0x0003003eu, 0x00000207u, 0x00000214u, 0x00050041u, 0x00000008u, 0x00000217u, - 0x000001efu, 0x00000216u, 0x0004003du, 0x00000006u, 0x00000218u, 0x00000217u, 0x00050041u, 0x00000008u, - 0x0000021au, 0x00000207u, 0x00000219u, 0x0004003du, 0x00000006u, 0x0000021bu, 0x0000021au, 0x00050080u, - 0x00000006u, 0x0000021cu, 0x00000218u, 0x0000021bu, 0x0003003eu, 0x0000021du, 0x0000021cu, 0x00050041u, - 0x00000008u, 0x0000021fu, 0x00000207u, 0x000000dcu, 0x0004003du, 0x00000006u, 0x00000220u, 0x0000021fu, - 0x0003003eu, 0x0000021eu, 0x00000220u, 0x00050041u, 0x0000001du, 0x00000222u, 0x000001e1u, 0x0000012au, - 0x0004003du, 0x0000001cu, 0x00000223u, 0x00000222u, 0x0003003eu, 0x00000221u, 0x00000223u, 0x00070039u, - 0x0000001eu, 0x00000224u, 0x00000023u, 0x0000021du, 0x0000021eu, 0x00000221u, 0x0003003eu, 0x00000215u, - 0x00000224u, 0x0004003du, 0x0000001eu, 0x00000225u, 0x00000215u, 0x000500b1u, 0x00000012u, 0x00000226u, - 0x00000225u, 0x000000dcu, 0x000300f7u, 0x00000228u, 0x00000000u, 0x000400fau, 0x00000226u, 0x00000227u, - 0x00000228u, 0x000200f8u, 0x00000227u, 0x0003003eu, 0x000001b6u, 0x00000036u, 0x0004003du, 0x00000006u, - 0x00000229u, 0x000001b6u, 0x000414aeu, 0x00000229u, 0x00000007u, 0x00000007u, 0x000200f8u, 0x00000228u, - 0x0003003eu, 0x0000022cu, 0x00000036u, 0x0004003du, 0x0000001eu, 0x0000022du, 0x00000215u, 0x000500adu, - 0x00000012u, 0x0000022eu, 0x0000022du, 0x000000dcu, 0x000300f7u, 0x00000230u, 0x00000000u, 0x000400fau, - 0x0000022eu, 0x0000022fu, 0x00000230u, 0x000200f8u, 0x0000022fu, 0x00050041u, 0x00000008u, 0x00000236u, - 0x000001efu, 0x00000235u, 0x0004003du, 0x00000006u, 0x00000237u, 0x00000236u, 0x00050041u, 0x00000008u, - 0x00000238u, 0x00000207u, 0x0000010cu, 0x0004003du, 0x00000006u, 0x00000239u, 0x00000238u, 0x00050080u, - 0x00000006u, 0x0000023au, 0x00000237u, 0x00000239u, 0x0004003du, 0x0000001eu, 0x0000023bu, 0x00000215u, - 0x0004007cu, 0x00000006u, 0x0000023cu, 0x0000023bu, 0x00050080u, 0x00000006u, 0x0000023du, 0x0000023au, - 0x0000023cu, 0x00050082u, 0x00000006u, 0x0000023eu, 0x0000023du, 0x00000007u, 0x00060041u, 0x0000023fu, - 0x00000240u, 0x00000234u, 0x000000dcu, 0x0000023eu, 0x0004003du, 0x0000001eu, 0x00000241u, 0x00000240u, - 0x0004007cu, 0x00000006u, 0x00000242u, 0x00000241u, 0x0003003eu, 0x0000022cu, 0x00000242u, 0x000200f9u, - 0x00000230u, 0x000200f8u, 0x00000230u, 0x00050041u, 0x00000008u, 0x00000244u, 0x000001efu, 0x00000235u, - 0x0004003du, 0x00000006u, 0x00000245u, 0x00000244u, 0x00050041u, 0x00000008u, 0x00000246u, 0x00000207u, - 0x0000010cu, 0x0004003du, 0x00000006u, 0x00000247u, 0x00000246u, 0x00050080u, 0x00000006u, 0x00000248u, - 0x00000245u, 0x00000247u, 0x0004003du, 0x0000001eu, 0x00000249u, 0x00000215u, 0x0004007cu, 0x00000006u, - 0x0000024au, 0x00000249u, 0x00050080u, 0x00000006u, 0x0000024bu, 0x00000248u, 0x0000024au, 0x00060041u, - 0x0000023fu, 0x0000024cu, 0x00000234u, 0x000000dcu, 0x0000024bu, 0x0004003du, 0x0000001eu, 0x0000024du, - 0x0000024cu, 0x0004007cu, 0x00000006u, 0x0000024eu, 0x0000024du, 0x0003003eu, 0x00000243u, 0x0000024eu, - 0x0004003du, 0x00000006u, 0x00000250u, 0x00000243u, 0x0004003du, 0x00000006u, 0x00000251u, 0x0000022cu, - 0x00050082u, 0x00000006u, 0x00000252u, 0x00000250u, 0x00000251u, 0x0003003eu, 0x0000024fu, 0x00000252u, - 0x0003003eu, 0x00000253u, 0x00000254u, 0x0004003du, 0x00000006u, 0x00000255u, 0x000001beu, 0x0004003du, - 0x00000006u, 0x00000256u, 0x0000024fu, 0x000500aeu, 0x00000012u, 0x00000257u, 0x00000255u, 0x00000256u, - 0x000300f7u, 0x00000259u, 0x00000000u, 0x000400fau, 0x00000257u, 0x00000258u, 0x00000259u, 0x000200f8u, - 0x00000258u, 0x0003003eu, 0x00000253u, 0x0000025au, 0x0003003eu, 0x000001beu, 0x00000036u, 0x000200f9u, - 0x00000259u, 0x000200f8u, 0x00000259u, 0x0004003du, 0x00000006u, 0x0000025cu, 0x0000022cu, 0x0004003du, - 0x00000006u, 0x0000025du, 0x000001beu, 0x00050080u, 0x00000006u, 0x0000025eu, 0x0000025cu, 0x0000025du, - 0x0003003eu, 0x0000025bu, 0x0000025eu, 0x00050041u, 0x0000010du, 0x00000260u, 0x000000d7u, 0x0000025fu, - 0x0004003du, 0x00000009u, 0x00000261u, 0x00000260u, 0x000500bau, 0x00000012u, 0x00000262u, 0x00000261u, - 0x00000058u, 0x000300f7u, 0x00000264u, 0x00000000u, 0x000400fau, 0x00000262u, 0x00000263u, 0x00000264u, - 0x000200f8u, 0x00000263u, 0x00050041u, 0x00000008u, 0x00000265u, 0x00000207u, 0x000000d8u, 0x0004003du, - 0x00000006u, 0x00000266u, 0x00000265u, 0x000500abu, 0x00000012u, 0x00000267u, 0x00000266u, 0x00000036u, - 0x000200f9u, 0x00000264u, 0x000200f8u, 0x00000264u, 0x000700f5u, 0x00000012u, 0x00000268u, 0x00000262u, - 0x00000259u, 0x00000267u, 0x00000263u, 0x000300f7u, 0x0000026au, 0x00000000u, 0x000400fau, 0x00000268u, - 0x00000269u, 0x0000026au, 0x000200f8u, 0x00000269u, 0x00050041u, 0x00000008u, 0x00000271u, 0x000001e1u, - 0x00000147u, 0x0004003du, 0x00000006u, 0x00000272u, 0x00000271u, 0x00070041u, 0x00000274u, 0x00000275u, - 0x00000270u, 0x000000dcu, 0x00000272u, 0x00000273u, 0x0004003du, 0x00000009u, 0x00000276u, 0x00000275u, - 0x00050041u, 0x0000010du, 0x00000277u, 0x000000d7u, 0x0000025fu, 0x0004003du, 0x00000009u, 0x00000278u, - 0x00000277u, 0x00050085u, 0x00000009u, 0x00000279u, 0x00000276u, 0x00000278u, 0x0003003eu, 0x0000026bu, - 0x00000279u, 0x0004003du, 0x00000006u, 0x00000280u, 0x000001d0u, 0x00060041u, 0x00000281u, 0x00000282u, - 0x0000027fu, 0x000000dcu, 0x00000280u, 0x0004003du, 0x0000027bu, 0x00000283u, 0x00000282u, 0x00040190u, - 0x0000002fu, 0x00000284u, 0x00000283u, 0x0003003eu, 0x0000027au, 0x00000284u, 0x0004003du, 0x0000002fu, - 0x00000287u, 0x0000027au, 0x0003003eu, 0x00000286u, 0x00000287u, 0x00050039u, 0x0000000au, 0x00000288u, - 0x00000033u, 0x00000286u, 0x0003003eu, 0x00000285u, 0x00000288u, 0x0004003du, 0x0000000au, 0x0000028au, - 0x00000285u, 0x0004003du, 0x00000009u, 0x0000028bu, 0x0000026bu, 0x00060050u, 0x0000000au, 0x0000028cu, - 0x0000028bu, 0x0000028bu, 0x0000028bu, 0x00050083u, 0x0000000au, 0x0000028du, 0x0000028au, 0x0000028cu, - 0x0003003eu, 0x00000289u, 0x0000028du, 0x0004003du, 0x0000000au, 0x0000028fu, 0x00000285u, 0x0004003du, - 0x00000009u, 0x00000290u, 0x0000026bu, 0x00060050u, 0x0000000au, 0x00000291u, 0x00000290u, 0x00000290u, - 0x00000290u, 0x00050081u, 0x0000000au, 0x00000292u, 0x0000028fu, 0x00000291u, 0x0003003eu, 0x0000028eu, - 0x00000292u, 0x00050041u, 0x00000008u, 0x00000295u, 0x000001efu, 0x00000294u, 0x0004003du, 0x00000006u, - 0x00000296u, 0x00000295u, 0x00050041u, 0x00000008u, 0x00000297u, 0x00000207u, 0x000000d8u, 0x0004003du, - 0x00000006u, 0x00000298u, 0x00000297u, 0x00050080u, 0x00000006u, 0x00000299u, 0x00000296u, 0x00000298u, - 0x0004003du, 0x00000006u, 0x0000029au, 0x0000025bu, 0x00050084u, 0x00000006u, 0x0000029cu, 0x0000029au, - 0x0000029bu, 0x00050080u, 0x00000006u, 0x0000029du, 0x00000299u, 0x0000029cu, 0x0003003eu, 0x00000293u, - 0x0000029du, 0x0004003du, 0x00000006u, 0x000002a3u, 0x00000293u, 0x00060041u, 0x00000274u, 0x000002a4u, - 0x000002a2u, 0x000000dcu, 0x000002a3u, 0x0004003du, 0x00000009u, 0x000002a5u, 0x000002a4u, 0x0004003du, - 0x00000006u, 0x000002a6u, 0x00000293u, 0x00050080u, 0x00000006u, 0x000002a7u, 0x000002a6u, 0x00000007u, - 0x00060041u, 0x00000274u, 0x000002a8u, 0x000002a2u, 0x000000dcu, 0x000002a7u, 0x0004003du, 0x00000009u, - 0x000002a9u, 0x000002a8u, 0x0004003du, 0x00000006u, 0x000002aau, 0x00000293u, 0x00050080u, 0x00000006u, - 0x000002abu, 0x000002aau, 0x00000049u, 0x00060041u, 0x00000274u, 0x000002acu, 0x000002a2u, 0x000000dcu, - 0x000002abu, 0x0004003du, 0x00000009u, 0x000002adu, 0x000002acu, 0x00060050u, 0x0000000au, 0x000002aeu, - 0x000002a5u, 0x000002a9u, 0x000002adu, 0x0003003eu, 0x0000029eu, 0x000002aeu, 0x0004003du, 0x00000006u, - 0x000002b0u, 0x00000293u, 0x00050080u, 0x00000006u, 0x000002b1u, 0x000002b0u, 0x00000053u, 0x00060041u, - 0x00000274u, 0x000002b2u, 0x000002a2u, 0x000000dcu, 0x000002b1u, 0x0004003du, 0x00000009u, 0x000002b3u, - 0x000002b2u, 0x0004003du, 0x00000006u, 0x000002b4u, 0x00000293u, 0x00050080u, 0x00000006u, 0x000002b5u, - 0x000002b4u, 0x0000005cu, 0x00060041u, 0x00000274u, 0x000002b6u, 0x000002a2u, 0x000000dcu, 0x000002b5u, - 0x0004003du, 0x00000009u, 0x000002b7u, 0x000002b6u, 0x0004003du, 0x00000006u, 0x000002b8u, 0x00000293u, - 0x00050080u, 0x00000006u, 0x000002bau, 0x000002b8u, 0x000002b9u, 0x00060041u, 0x00000274u, 0x000002bbu, - 0x000002a2u, 0x000000dcu, 0x000002bau, 0x0004003du, 0x00000009u, 0x000002bcu, 0x000002bbu, 0x00060050u, - 0x0000000au, 0x000002bdu, 0x000002b3u, 0x000002b7u, 0x000002bcu, 0x0003003eu, 0x000002afu, 0x000002bdu, - 0x0004003du, 0x0000000au, 0x000002bfu, 0x0000029eu, 0x0003003eu, 0x000002beu, 0x000002bfu, 0x0004003du, - 0x0000000au, 0x000002c1u, 0x000002afu, 0x0003003eu, 0x000002c0u, 0x000002c1u, 0x0004003du, 0x0000000au, - 0x000002c3u, 0x00000289u, 0x0003003eu, 0x000002c2u, 0x000002c3u, 0x0004003du, 0x0000000au, 0x000002c5u, - 0x0000028eu, 0x0003003eu, 0x000002c4u, 0x000002c5u, 0x00080039u, 0x00000012u, 0x000002c6u, 0x0000002bu, - 0x000002beu, 0x000002c0u, 0x000002c2u, 0x000002c4u, 0x000400a8u, 0x00000012u, 0x000002c7u, 0x000002c6u, - 0x000300f7u, 0x000002c9u, 0x00000000u, 0x000400fau, 0x000002c7u, 0x000002c8u, 0x000002c9u, 0x000200f8u, - 0x000002c8u, 0x0003003eu, 0x00000253u, 0x0000025au, 0x000200f9u, 0x000002c9u, 0x000200f8u, 0x000002c9u, - 0x000200f9u, 0x0000026au, 0x000200f8u, 0x0000026au, 0x0003003eu, 0x000002cau, 0x00000036u, 0x0004003du, - 0x00000006u, 0x000002cbu, 0x0000025bu, 0x000500acu, 0x00000012u, 0x000002ccu, 0x000002cbu, 0x00000036u, - 0x000300f7u, 0x000002ceu, 0x00000000u, 0x000400fau, 0x000002ccu, 0x000002cdu, 0x000002ceu, 0x000200f8u, - 0x000002cdu, 0x00050041u, 0x00000008u, 0x000002cfu, 0x000001efu, 0x00000235u, 0x0004003du, 0x00000006u, - 0x000002d0u, 0x000002cfu, 0x00050041u, 0x00000008u, 0x000002d1u, 0x00000207u, 0x00000216u, 0x0004003du, - 0x00000006u, 0x000002d2u, 0x000002d1u, 0x00050080u, 0x00000006u, 0x000002d3u, 0x000002d0u, 0x000002d2u, - 0x0004003du, 0x00000006u, 0x000002d4u, 0x0000025bu, 0x00050080u, 0x00000006u, 0x000002d5u, 0x000002d3u, - 0x000002d4u, 0x00050082u, 0x00000006u, 0x000002d6u, 0x000002d5u, 0x00000007u, 0x00060041u, 0x0000023fu, - 0x000002d7u, 0x00000234u, 0x000000dcu, 0x000002d6u, 0x0004003du, 0x0000001eu, 0x000002d8u, 0x000002d7u, - 0x0004007cu, 0x00000006u, 0x000002d9u, 0x000002d8u, 0x0003003eu, 0x000002cau, 0x000002d9u, 0x000200f9u, - 0x000002ceu, 0x000200f8u, 0x000002ceu, 0x00050041u, 0x00000008u, 0x000002dbu, 0x000001efu, 0x00000235u, - 0x0004003du, 0x00000006u, 0x000002dcu, 0x000002dbu, 0x00050041u, 0x00000008u, 0x000002ddu, 0x00000207u, - 0x00000216u, 0x0004003du, 0x00000006u, 0x000002deu, 0x000002ddu, 0x00050080u, 0x00000006u, 0x000002dfu, - 0x000002dcu, 0x000002deu, 0x0004003du, 0x00000006u, 0x000002e0u, 0x0000025bu, 0x00050080u, 0x00000006u, - 0x000002e1u, 0x000002dfu, 0x000002e0u, 0x00060041u, 0x0000023fu, 0x000002e2u, 0x00000234u, 0x000000dcu, - 0x000002e1u, 0x0004003du, 0x0000001eu, 0x000002e3u, 0x000002e2u, 0x0004007cu, 0x00000006u, 0x000002e4u, - 0x000002e3u, 0x0003003eu, 0x000002dau, 0x000002e4u, 0x0004003du, 0x00000006u, 0x000002e6u, 0x000002dau, - 0x0004003du, 0x00000006u, 0x000002e7u, 0x000002cau, 0x00050082u, 0x00000006u, 0x000002e8u, 0x000002e6u, - 0x000002e7u, 0x0003003eu, 0x000002e5u, 0x000002e8u, 0x00050041u, 0x00000008u, 0x000002ebu, 0x00000207u, - 0x00000126u, 0x0004003du, 0x00000006u, 0x000002ecu, 0x000002ebu, 0x0003003eu, 0x000002eau, 0x000002ecu, - 0x00050039u, 0x00000012u, 0x000002edu, 0x00000015u, 0x000002eau, 0x0003003eu, 0x000002e9u, 0x000002edu, - 0x0004003du, 0x00000012u, 0x000002eeu, 0x000002e9u, 0x000300f7u, 0x000002f0u, 0x00000000u, 0x000400fau, - 0x000002eeu, 0x000002efu, 0x000002fbu, 0x000200f8u, 0x000002efu, 0x0004003du, 0x00000006u, 0x000002f2u, - 0x000002e5u, 0x00050080u, 0x00000006u, 0x000002f3u, 0x000002f2u, 0x00000063u, 0x00050082u, 0x00000006u, - 0x000002f4u, 0x000002f3u, 0x00000007u, 0x00050086u, 0x00000006u, 0x000002f5u, 0x000002f4u, 0x00000063u, - 0x0003003eu, 0x000002f1u, 0x000002f5u, 0x0004003du, 0x00000006u, 0x000002f6u, 0x000002f1u, 0x0007000cu, - 0x00000006u, 0x000002f7u, 0x00000001u, 0x00000029u, 0x000002f6u, 0x00000007u, 0x0003003eu, 0x000002f1u, - 0x000002f7u, 0x0004003du, 0x00000012u, 0x000002f8u, 0x00000253u, 0x0004003du, 0x00000006u, 0x000002f9u, - 0x000002f1u, 0x000600a9u, 0x00000006u, 0x000002fau, 0x000002f8u, 0x00000036u, 0x000002f9u, 0x0003003eu, - 0x000001b6u, 0x000002fau, 0x000200f9u, 0x000002f0u, 0x000200f8u, 0x000002fbu, 0x0004003du, 0x00000006u, - 0x000002fcu, 0x000002e5u, 0x000500b0u, 0x00000012u, 0x000002fdu, 0x000002fcu, 0x00000049u, 0x000300f7u, - 0x000002ffu, 0x00000000u, 0x000400fau, 0x000002fdu, 0x000002feu, 0x000002ffu, 0x000200f8u, 0x000002feu, - 0x0003003eu, 0x00000253u, 0x0000025au, 0x0003003eu, 0x000002e5u, 0x00000049u, 0x000200f9u, 0x000002ffu, - 0x000200f8u, 0x000002ffu, 0x0004003du, 0x00000006u, 0x00000301u, 0x000002e5u, 0x00050082u, 0x00000006u, - 0x00000302u, 0x00000301u, 0x00000007u, 0x0003003eu, 0x00000300u, 0x00000302u, 0x0004003du, 0x00000006u, - 0x00000304u, 0x00000300u, 0x00050080u, 0x00000006u, 0x00000305u, 0x00000304u, 0x00000053u, 0x00050082u, - 0x00000006u, 0x00000306u, 0x00000305u, 0x00000007u, 0x00050086u, 0x00000006u, 0x00000307u, 0x00000306u, - 0x00000053u, 0x0003003eu, 0x00000303u, 0x00000307u, 0x0004003du, 0x00000006u, 0x00000308u, 0x00000303u, - 0x0007000cu, 0x00000006u, 0x00000309u, 0x00000001u, 0x00000029u, 0x00000308u, 0x00000007u, 0x0003003eu, - 0x00000303u, 0x00000309u, 0x0004003du, 0x00000012u, 0x0000030au, 0x00000253u, 0x0004003du, 0x00000006u, - 0x0000030bu, 0x00000303u, 0x000600a9u, 0x00000006u, 0x0000030cu, 0x0000030au, 0x00000036u, 0x0000030bu, - 0x0003003eu, 0x000001b6u, 0x0000030cu, 0x000200f9u, 0x000002f0u, 0x000200f8u, 0x000002f0u, 0x0004003du, - 0x00000006u, 0x00000310u, 0x000001d0u, 0x00050041u, 0x00000311u, 0x00000312u, 0x0000030fu, 0x000000dcu, - 0x0003003eu, 0x00000312u, 0x00000310u, 0x0004003du, 0x00000006u, 0x00000313u, 0x000001cau, 0x00050041u, - 0x00000311u, 0x00000314u, 0x0000030fu, 0x00000147u, 0x0003003eu, 0x00000314u, 0x00000313u, 0x0004003du, - 0x00000006u, 0x00000315u, 0x0000025bu, 0x00050041u, 0x00000311u, 0x00000316u, 0x0000030fu, 0x0000012au, - 0x0003003eu, 0x00000316u, 0x00000315u, 0x0004003du, 0x00000006u, 0x00000317u, 0x000002e5u, 0x00050041u, - 0x00000311u, 0x00000318u, 0x0000030fu, 0x00000126u, 0x0003003eu, 0x00000318u, 0x00000317u, 0x00050041u, - 0x00000008u, 0x0000031au, 0x00000207u, 0x00000126u, 0x0004003du, 0x00000006u, 0x0000031bu, 0x0000031au, - 0x0003003eu, 0x00000319u, 0x0000031bu, 0x00050041u, 0x00000008u, 0x0000031du, 0x000001e1u, 0x00000126u, - 0x0004003du, 0x00000006u, 0x0000031eu, 0x0000031du, 0x0003003eu, 0x0000031cu, 0x0000031eu, 0x00060039u, - 0x00000009u, 0x0000031fu, 0x0000001au, 0x00000319u, 0x0000031cu, 0x00050041u, 0x00000320u, 0x00000321u, - 0x0000030fu, 0x00000219u, 0x0003003eu, 0x00000321u, 0x0000031fu, 0x00050041u, 0x00000008u, 0x00000323u, - 0x00000207u, 0x00000126u, 0x0004003du, 0x00000006u, 0x00000324u, 0x00000323u, 0x0003003eu, 0x00000322u, - 0x00000324u, 0x00050039u, 0x0000000au, 0x00000325u, 0x00000010u, 0x00000322u, 0x00050041u, 0x00000326u, - 0x00000327u, 0x0000030fu, 0x0000010cu, 0x0003003eu, 0x00000327u, 0x00000325u, 0x00050041u, 0x00000311u, - 0x00000328u, 0x0000030fu, 0x00000216u, 0x0003003eu, 0x00000328u, 0x00000049u, 0x00050041u, 0x00000008u, - 0x00000329u, 0x000001e1u, 0x00000126u, 0x0004003du, 0x00000006u, 0x0000032au, 0x00000329u, 0x000500aau, - 0x00000012u, 0x0000032bu, 0x0000032au, 0x00000007u, 0x000600a9u, 0x00000009u, 0x0000032cu, 0x0000032bu, - 0x0000004fu, 0x00000058u, 0x00050041u, 0x00000320u, 0x0000032du, 0x0000030fu, 0x00000235u, 0x0003003eu, - 0x0000032du, 0x0000032cu, 0x0004003du, 0x00000006u, 0x0000032eu, 0x000001b6u, 0x000514aeu, 0x0000032eu, - 0x00000007u, 0x00000007u, 0x0000030fu, 0x00010038u, 0x00050036u, 0x0000000au, 0x0000000du, 0x00000000u, - 0x0000000bu, 0x00030037u, 0x00000008u, 0x0000000cu, 0x000200f8u, 0x0000000eu, 0x0004003du, 0x00000006u, - 0x00000035u, 0x0000000cu, 0x000500aau, 0x00000012u, 0x00000037u, 0x00000035u, 0x00000036u, 0x000300f7u, - 0x00000039u, 0x00000000u, 0x000400fau, 0x00000037u, 0x00000038u, 0x00000039u, 0x000200f8u, 0x00000038u, - 0x000200feu, 0x0000003du, 0x000200f8u, 0x00000039u, 0x0004003du, 0x00000006u, 0x0000003fu, 0x0000000cu, - 0x000500aau, 0x00000012u, 0x00000040u, 0x0000003fu, 0x00000007u, 0x000300f7u, 0x00000042u, 0x00000000u, - 0x000400fau, 0x00000040u, 0x00000041u, 0x00000042u, 0x000200f8u, 0x00000041u, 0x000200feu, 0x00000046u, - 0x000200f8u, 0x00000042u, 0x0004003du, 0x00000006u, 0x00000048u, 0x0000000cu, 0x000500aau, 0x00000012u, - 0x0000004au, 0x00000048u, 0x00000049u, 0x000300f7u, 0x0000004cu, 0x00000000u, 0x000400fau, 0x0000004au, - 0x0000004bu, 0x0000004cu, 0x000200f8u, 0x0000004bu, 0x000200feu, 0x00000050u, 0x000200f8u, 0x0000004cu, - 0x0004003du, 0x00000006u, 0x00000052u, 0x0000000cu, 0x000500aau, 0x00000012u, 0x00000054u, 0x00000052u, - 0x00000053u, 0x000300f7u, 0x00000056u, 0x00000000u, 0x000400fau, 0x00000054u, 0x00000055u, 0x00000056u, - 0x000200f8u, 0x00000055u, 0x000200feu, 0x00000059u, 0x000200f8u, 0x00000056u, 0x0004003du, 0x00000006u, - 0x0000005bu, 0x0000000cu, 0x000500aau, 0x00000012u, 0x0000005du, 0x0000005bu, 0x0000005cu, 0x000300f7u, - 0x0000005fu, 0x00000000u, 0x000400fau, 0x0000005du, 0x0000005eu, 0x0000005fu, 0x000200f8u, 0x0000005eu, - 0x000200feu, 0x00000060u, 0x000200f8u, 0x0000005fu, 0x0004003du, 0x00000006u, 0x00000062u, 0x0000000cu, - 0x000500aau, 0x00000012u, 0x00000064u, 0x00000062u, 0x00000063u, 0x000300f7u, 0x00000066u, 0x00000000u, - 0x000400fau, 0x00000064u, 0x00000065u, 0x00000066u, 0x000200f8u, 0x00000065u, 0x000200feu, 0x0000006au, - 0x000200f8u, 0x00000066u, 0x0004003du, 0x00000006u, 0x0000006cu, 0x0000000cu, 0x000500aau, 0x00000012u, - 0x0000006eu, 0x0000006cu, 0x0000006du, 0x000300f7u, 0x00000070u, 0x00000000u, 0x000400fau, 0x0000006eu, - 0x0000006fu, 0x00000070u, 0x000200f8u, 0x0000006fu, 0x000200feu, 0x00000073u, 0x000200f8u, 0x00000070u, - 0x0004003du, 0x00000006u, 0x00000075u, 0x0000000cu, 0x000500aau, 0x00000012u, 0x00000077u, 0x00000075u, - 0x00000076u, 0x000300f7u, 0x00000079u, 0x00000000u, 0x000400fau, 0x00000077u, 0x00000078u, 0x00000079u, - 0x000200f8u, 0x00000078u, 0x000200feu, 0x0000007du, 0x000200f8u, 0x00000079u, 0x0004003du, 0x00000006u, - 0x0000007fu, 0x0000000cu, 0x000500aau, 0x00000012u, 0x00000081u, 0x0000007fu, 0x00000080u, 0x000300f7u, - 0x00000083u, 0x00000000u, 0x000400fau, 0x00000081u, 0x00000082u, 0x00000083u, 0x000200f8u, 0x00000082u, - 0x000200feu, 0x00000046u, 0x000200f8u, 0x00000083u, 0x0004003du, 0x00000006u, 0x00000085u, 0x0000000cu, - 0x000500aau, 0x00000012u, 0x00000087u, 0x00000085u, 0x00000086u, 0x000300f7u, 0x00000089u, 0x00000000u, - 0x000400fau, 0x00000087u, 0x00000088u, 0x00000089u, 0x000200f8u, 0x00000088u, 0x000200feu, 0x0000008au, - 0x000200f8u, 0x00000089u, 0x0004003du, 0x00000006u, 0x0000008cu, 0x0000000cu, 0x000500aau, 0x00000012u, - 0x0000008eu, 0x0000008cu, 0x0000008du, 0x000300f7u, 0x00000090u, 0x00000000u, 0x000400fau, 0x0000008eu, - 0x0000008fu, 0x00000090u, 0x000200f8u, 0x0000008fu, 0x000200feu, 0x00000093u, 0x000200f8u, 0x00000090u, - 0x0004003du, 0x00000006u, 0x00000095u, 0x0000000cu, 0x000500aau, 0x00000012u, 0x00000097u, 0x00000095u, - 0x00000096u, 0x000300f7u, 0x00000099u, 0x00000000u, 0x000400fau, 0x00000097u, 0x00000098u, 0x00000099u, - 0x000200f8u, 0x00000098u, 0x000200feu, 0x0000009cu, 0x000200f8u, 0x00000099u, 0x0004003du, 0x00000006u, - 0x0000009eu, 0x0000000cu, 0x000500aau, 0x00000012u, 0x000000a0u, 0x0000009eu, 0x0000009fu, 0x000300f7u, - 0x000000a2u, 0x00000000u, 0x000400fau, 0x000000a0u, 0x000000a1u, 0x000000a2u, 0x000200f8u, 0x000000a1u, - 0x000200feu, 0x000000a4u, 0x000200f8u, 0x000000a2u, 0x0004003du, 0x00000006u, 0x000000a6u, 0x0000000cu, - 0x000500aau, 0x00000012u, 0x000000a8u, 0x000000a6u, 0x000000a7u, 0x000300f7u, 0x000000aau, 0x00000000u, - 0x000400fau, 0x000000a8u, 0x000000a9u, 0x000000aau, 0x000200f8u, 0x000000a9u, 0x000200feu, 0x000000abu, - 0x000200f8u, 0x000000aau, 0x0004003du, 0x00000006u, 0x000000adu, 0x0000000cu, 0x000500aau, 0x00000012u, - 0x000000afu, 0x000000adu, 0x000000aeu, 0x000300f7u, 0x000000b1u, 0x00000000u, 0x000400fau, 0x000000afu, - 0x000000b0u, 0x000000b1u, 0x000200f8u, 0x000000b0u, 0x000200feu, 0x000000b2u, 0x000200f8u, 0x000000b1u, - 0x0004003du, 0x00000006u, 0x000000b4u, 0x0000000cu, 0x000500aau, 0x00000012u, 0x000000b6u, 0x000000b4u, - 0x000000b5u, 0x000300f7u, 0x000000b8u, 0x00000000u, 0x000400fau, 0x000000b6u, 0x000000b7u, 0x000000b8u, - 0x000200f8u, 0x000000b7u, 0x000200feu, 0x000000b2u, 0x000200f8u, 0x000000b8u, 0x0004003du, 0x00000006u, - 0x000000bau, 0x0000000cu, 0x000500aau, 0x00000012u, 0x000000bcu, 0x000000bau, 0x000000bbu, 0x000300f7u, - 0x000000beu, 0x00000000u, 0x000400fau, 0x000000bcu, 0x000000bdu, 0x000000beu, 0x000200f8u, 0x000000bdu, - 0x000200feu, 0x000000bfu, 0x000200f8u, 0x000000beu, 0x0004003du, 0x00000006u, 0x000000c1u, 0x0000000cu, - 0x000500aau, 0x00000012u, 0x000000c3u, 0x000000c1u, 0x000000c2u, 0x000300f7u, 0x000000c5u, 0x00000000u, - 0x000400fau, 0x000000c3u, 0x000000c4u, 0x000000c5u, 0x000200f8u, 0x000000c4u, 0x000200feu, 0x000000bfu, - 0x000200f8u, 0x000000c5u, 0x0004003du, 0x00000006u, 0x000000c7u, 0x0000000cu, 0x000500aau, 0x00000012u, - 0x000000c9u, 0x000000c7u, 0x000000c8u, 0x000300f7u, 0x000000cbu, 0x00000000u, 0x000400fau, 0x000000c9u, - 0x000000cau, 0x000000cbu, 0x000200f8u, 0x000000cau, 0x000200feu, 0x000000bfu, 0x000200f8u, 0x000000cbu, - 0x0004003du, 0x00000006u, 0x000000cdu, 0x0000000cu, 0x000500aau, 0x00000012u, 0x000000cfu, 0x000000cdu, - 0x000000ceu, 0x000300f7u, 0x000000d1u, 0x00000000u, 0x000400fau, 0x000000cfu, 0x000000d0u, 0x000000d1u, - 0x000200f8u, 0x000000d0u, 0x000200feu, 0x000000b2u, 0x000200f8u, 0x000000d1u, 0x000200feu, 0x000000b2u, - 0x00010038u, 0x00050036u, 0x0000000au, 0x00000010u, 0x00000000u, 0x0000000bu, 0x00030037u, 0x00000008u, - 0x0000000fu, 0x000200f8u, 0x00000011u, 0x0004003bu, 0x000000e8u, 0x000000e9u, 0x00000007u, 0x0004003bu, - 0x00000008u, 0x000000fbu, 0x00000007u, 0x00050041u, 0x000000d9u, 0x000000dau, 0x000000d7u, 0x000000d8u, - 0x0004003du, 0x0000001eu, 0x000000dbu, 0x000000dau, 0x000500adu, 0x00000012u, 0x000000ddu, 0x000000dbu, - 0x000000dcu, 0x000300f7u, 0x000000dfu, 0x00000000u, 0x000400fau, 0x000000ddu, 0x000000deu, 0x000000dfu, - 0x000200f8u, 0x000000deu, 0x0004003du, 0x00000006u, 0x000000e0u, 0x0000000fu, 0x00050041u, 0x000000d9u, - 0x000000e1u, 0x000000d7u, 0x000000d8u, 0x0004003du, 0x0000001eu, 0x000000e2u, 0x000000e1u, 0x0004007cu, - 0x00000006u, 0x000000e3u, 0x000000e2u, 0x000500b0u, 0x00000012u, 0x000000e4u, 0x000000e0u, 0x000000e3u, - 0x000200f9u, 0x000000dfu, 0x000200f8u, 0x000000dfu, 0x000700f5u, 0x00000012u, 0x000000e5u, 0x000000ddu, - 0x00000011u, 0x000000e4u, 0x000000deu, 0x000300f7u, 0x000000e7u, 0x00000000u, 0x000400fau, 0x000000e5u, - 0x000000e6u, 0x000000e7u, 0x000200f8u, 0x000000e6u, 0x0004003du, 0x00000006u, 0x000000eeu, 0x0000000fu, - 0x00060041u, 0x000000efu, 0x000000f0u, 0x000000edu, 0x000000dcu, 0x000000eeu, 0x0004003du, 0x0000002du, - 0x000000f1u, 0x000000f0u, 0x0003003eu, 0x000000e9u, 0x000000f1u, 0x00050041u, 0x000000f2u, 0x000000f3u, - 0x000000e9u, 0x00000053u, 0x0004003du, 0x00000009u, 0x000000f4u, 0x000000f3u, 0x000500beu, 0x00000012u, - 0x000000f5u, 0x000000f4u, 0x00000058u, 0x000300f7u, 0x000000f7u, 0x00000000u, 0x000400fau, 0x000000f5u, - 0x000000f6u, 0x000000f7u, 0x000200f8u, 0x000000f6u, 0x0004003du, 0x0000002du, 0x000000f8u, 0x000000e9u, - 0x0008004fu, 0x0000000au, 0x000000f9u, 0x000000f8u, 0x000000f8u, 0x00000000u, 0x00000001u, 0x00000002u, - 0x000200feu, 0x000000f9u, 0x000200f8u, 0x000000f7u, 0x000200f9u, 0x000000e7u, 0x000200f8u, 0x000000e7u, - 0x0004003du, 0x00000006u, 0x000000fcu, 0x0000000fu, 0x0003003eu, 0x000000fbu, 0x000000fcu, 0x00050039u, - 0x0000000au, 0x000000fdu, 0x0000000du, 0x000000fbu, 0x000200feu, 0x000000fdu, 0x00010038u, 0x00050036u, - 0x00000012u, 0x00000015u, 0x00000000u, 0x00000013u, 0x00030037u, 0x00000008u, 0x00000014u, 0x000200f8u, - 0x00000016u, 0x0004003du, 0x00000006u, 0x00000100u, 0x00000014u, 0x000500aau, 0x00000012u, 0x00000101u, - 0x00000100u, 0x000000c8u, 0x0004003du, 0x00000006u, 0x00000102u, 0x00000014u, 0x000500aau, 0x00000012u, - 0x00000103u, 0x00000102u, 0x000000ceu, 0x000500a6u, 0x00000012u, 0x00000104u, 0x00000101u, 0x00000103u, - 0x000200feu, 0x00000104u, 0x00010038u, 0x00050036u, 0x00000009u, 0x0000001au, 0x00000000u, 0x00000017u, - 0x00030037u, 0x00000008u, 0x00000018u, 0x00030037u, 0x00000008u, 0x00000019u, 0x000200f8u, 0x0000001bu, - 0x0004003bu, 0x00000107u, 0x00000108u, 0x00000007u, 0x0004003bu, 0x000000f2u, 0x0000010bu, 0x00000007u, - 0x0004003bu, 0x000000f2u, 0x00000111u, 0x00000007u, 0x0004003bu, 0x000000f2u, 0x0000011cu, 0x00000007u, - 0x0004003bu, 0x000000f2u, 0x00000121u, 0x00000007u, 0x0004003bu, 0x000000f2u, 0x00000123u, 0x00000007u, - 0x0004003bu, 0x000000f2u, 0x0000012eu, 0x00000007u, 0x0004003bu, 0x000000f2u, 0x0000013du, 0x00000007u, - 0x0004003bu, 0x000000f2u, 0x00000142u, 0x00000007u, 0x0004003bu, 0x000000f2u, 0x00000144u, 0x00000007u, - 0x0004003du, 0x00000006u, 0x00000109u, 0x00000019u, 0x000500aau, 0x00000012u, 0x0000010au, 0x00000109u, - 0x00000007u, 0x0003003eu, 0x00000108u, 0x0000010au, 0x00050041u, 0x0000010du, 0x0000010eu, 0x000000d7u, - 0x0000010cu, 0x0004003du, 0x00000009u, 0x0000010fu, 0x0000010eu, 0x000500bau, 0x00000012u, 0x00000110u, - 0x0000010fu, 0x00000058u, 0x000300f7u, 0x00000113u, 0x00000000u, 0x000400fau, 0x00000110u, 0x00000112u, - 0x00000116u, 0x000200f8u, 0x00000112u, 0x00050041u, 0x0000010du, 0x00000114u, 0x000000d7u, 0x0000010cu, - 0x0004003du, 0x00000009u, 0x00000115u, 0x00000114u, 0x0003003eu, 0x00000111u, 0x00000115u, 0x000200f9u, - 0x00000113u, 0x000200f8u, 0x00000116u, 0x0003003eu, 0x00000111u, 0x0000004fu, 0x000200f9u, 0x00000113u, - 0x000200f8u, 0x00000113u, 0x0004003du, 0x00000009u, 0x00000117u, 0x00000111u, 0x0003003eu, 0x0000010bu, - 0x00000117u, 0x0004003du, 0x00000006u, 0x00000118u, 0x00000018u, 0x000500aau, 0x00000012u, 0x00000119u, - 0x00000118u, 0x0000005cu, 0x000300f7u, 0x0000011bu, 0x00000000u, 0x000400fau, 0x00000119u, 0x0000011au, - 0x00000134u, 0x000200f8u, 0x0000011au, 0x0004003du, 0x00000012u, 0x0000011du, 0x00000108u, 0x000600a9u, - 0x00000009u, 0x00000120u, 0x0000011du, 0x0000011eu, 0x0000011fu, 0x0003003eu, 0x0000011cu, 0x00000120u, - 0x0004003du, 0x00000012u, 0x00000122u, 0x00000108u, 0x000300f7u, 0x00000125u, 0x00000000u, 0x000400fau, - 0x00000122u, 0x00000124u, 0x00000129u, 0x000200f8u, 0x00000124u, 0x00050041u, 0x0000010du, 0x00000127u, - 0x000000d7u, 0x00000126u, 0x0004003du, 0x00000009u, 0x00000128u, 0x00000127u, 0x0003003eu, 0x00000123u, - 0x00000128u, 0x000200f9u, 0x00000125u, 0x000200f8u, 0x00000129u, 0x00050041u, 0x0000010du, 0x0000012bu, - 0x000000d7u, 0x0000012au, 0x0004003du, 0x00000009u, 0x0000012cu, 0x0000012bu, 0x0003003eu, 0x00000123u, - 0x0000012cu, 0x000200f9u, 0x00000125u, 0x000200f8u, 0x00000125u, 0x0004003du, 0x00000009u, 0x0000012du, - 0x00000123u, 0x0003003eu, 0x00000121u, 0x0000012du, 0x0004003du, 0x00000009u, 0x0000012fu, 0x00000121u, - 0x000500bau, 0x00000012u, 0x00000130u, 0x0000012fu, 0x00000058u, 0x0004003du, 0x00000009u, 0x00000131u, - 0x00000121u, 0x0004003du, 0x00000009u, 0x00000132u, 0x0000011cu, 0x000600a9u, 0x00000009u, 0x00000133u, - 0x00000130u, 0x00000131u, 0x00000132u, 0x0003003eu, 0x0000012eu, 0x00000133u, 0x000200f9u, 0x0000011bu, - 0x000200f8u, 0x00000134u, 0x0004003du, 0x00000006u, 0x00000135u, 0x00000018u, 0x000500aau, 0x00000012u, - 0x00000136u, 0x00000135u, 0x0000006du, 0x000300f7u, 0x00000138u, 0x00000000u, 0x000400fau, 0x00000136u, - 0x00000137u, 0x0000013cu, 0x000200f8u, 0x00000137u, 0x0004003du, 0x00000012u, 0x00000139u, 0x00000108u, - 0x000600a9u, 0x00000009u, 0x0000013bu, 0x00000139u, 0x0000013au, 0x0000011eu, 0x0003003eu, 0x0000012eu, - 0x0000013bu, 0x000200f9u, 0x00000138u, 0x000200f8u, 0x0000013cu, 0x0004003du, 0x00000012u, 0x0000013eu, - 0x00000108u, 0x000600a9u, 0x00000009u, 0x00000141u, 0x0000013eu, 0x0000013fu, 0x00000140u, 0x0003003eu, - 0x0000013du, 0x00000141u, 0x0004003du, 0x00000012u, 0x00000143u, 0x00000108u, 0x000300f7u, 0x00000146u, - 0x00000000u, 0x000400fau, 0x00000143u, 0x00000145u, 0x0000014au, 0x000200f8u, 0x00000145u, 0x00050041u, - 0x0000010du, 0x00000148u, 0x000000d7u, 0x00000147u, 0x0004003du, 0x00000009u, 0x00000149u, 0x00000148u, - 0x0003003eu, 0x00000144u, 0x00000149u, 0x000200f9u, 0x00000146u, 0x000200f8u, 0x0000014au, 0x00050041u, - 0x0000010du, 0x0000014bu, 0x000000d7u, 0x000000dcu, 0x0004003du, 0x00000009u, 0x0000014cu, 0x0000014bu, - 0x0003003eu, 0x00000144u, 0x0000014cu, 0x000200f9u, 0x00000146u, 0x000200f8u, 0x00000146u, 0x0004003du, - 0x00000009u, 0x0000014du, 0x00000144u, 0x0003003eu, 0x00000142u, 0x0000014du, 0x0004003du, 0x00000009u, - 0x0000014eu, 0x00000142u, 0x000500bau, 0x00000012u, 0x0000014fu, 0x0000014eu, 0x00000058u, 0x0004003du, - 0x00000009u, 0x00000150u, 0x00000142u, 0x0004003du, 0x00000009u, 0x00000151u, 0x0000013du, 0x000600a9u, - 0x00000009u, 0x00000152u, 0x0000014fu, 0x00000150u, 0x00000151u, 0x0003003eu, 0x0000012eu, 0x00000152u, - 0x000200f9u, 0x00000138u, 0x000200f8u, 0x00000138u, 0x000200f9u, 0x0000011bu, 0x000200f8u, 0x0000011bu, - 0x0004003du, 0x00000009u, 0x00000153u, 0x0000012eu, 0x0004003du, 0x00000009u, 0x00000154u, 0x0000010bu, - 0x00050085u, 0x00000009u, 0x00000155u, 0x00000153u, 0x00000154u, 0x000200feu, 0x00000155u, 0x00010038u, - 0x00050036u, 0x0000001eu, 0x00000023u, 0x00000000u, 0x0000001fu, 0x00030037u, 0x00000008u, 0x00000020u, - 0x00030037u, 0x00000008u, 0x00000021u, 0x00030037u, 0x0000001du, 0x00000022u, 0x000200f8u, 0x00000024u, - 0x0004003bu, 0x0000015eu, 0x0000015fu, 0x00000007u, 0x0004003bu, 0x0000015eu, 0x00000160u, 0x00000007u, - 0x0004003bu, 0x0000015eu, 0x00000164u, 0x00000007u, 0x0004003bu, 0x0000015eu, 0x0000016du, 0x00000007u, - 0x0004003bu, 0x0000001du, 0x00000172u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000158u, 0x00000021u, - 0x000500aau, 0x00000012u, 0x00000159u, 0x00000158u, 0x00000036u, 0x000300f7u, 0x0000015bu, 0x00000000u, - 0x000400fau, 0x00000159u, 0x0000015au, 0x0000015bu, 0x000200f8u, 0x0000015au, 0x000200feu, 0x0000015cu, - 0x000200f8u, 0x0000015bu, 0x0003003eu, 0x0000015fu, 0x000000dcu, 0x0004003du, 0x00000006u, 0x00000161u, - 0x00000021u, 0x0004007cu, 0x0000001eu, 0x00000162u, 0x00000161u, 0x00050082u, 0x0000001eu, 0x00000163u, - 0x00000162u, 0x00000147u, 0x0003003eu, 0x00000160u, 0x00000163u, 0x0003003eu, 0x00000164u, 0x0000015cu, - 0x000200f9u, 0x00000165u, 0x000200f8u, 0x00000165u, 0x000400f6u, 0x00000167u, 0x00000168u, 0x00000000u, - 0x000200f9u, 0x00000169u, 0x000200f8u, 0x00000169u, 0x0004003du, 0x0000001eu, 0x0000016au, 0x0000015fu, - 0x0004003du, 0x0000001eu, 0x0000016bu, 0x00000160u, 0x000500b3u, 0x00000012u, 0x0000016cu, 0x0000016au, - 0x0000016bu, 0x000400fau, 0x0000016cu, 0x00000166u, 0x00000167u, 0x000200f8u, 0x00000166u, 0x0004003du, - 0x0000001eu, 0x0000016eu, 0x0000015fu, 0x0004003du, 0x0000001eu, 0x0000016fu, 0x00000160u, 0x00050080u, - 0x0000001eu, 0x00000170u, 0x0000016eu, 0x0000016fu, 0x00050087u, 0x0000001eu, 0x00000171u, 0x00000170u, - 0x0000012au, 0x0003003eu, 0x0000016du, 0x00000171u, 0x0004003du, 0x00000006u, 0x00000177u, 0x00000020u, - 0x0004003du, 0x0000001eu, 0x00000178u, 0x0000016du, 0x0004007cu, 0x00000006u, 0x00000179u, 0x00000178u, - 0x00050080u, 0x00000006u, 0x0000017au, 0x00000177u, 0x00000179u, 0x00060041u, 0x0000017bu, 0x0000017cu, - 0x00000176u, 0x000000dcu, 0x0000017au, 0x0004003du, 0x0000001cu, 0x0000017du, 0x0000017cu, 0x0003003eu, - 0x00000172u, 0x0000017du, 0x0004003du, 0x0000001cu, 0x0000017eu, 0x00000172u, 0x0004003du, 0x0000001cu, - 0x0000017fu, 0x00000022u, 0x000500b3u, 0x00000012u, 0x00000180u, 0x0000017eu, 0x0000017fu, 0x000300f7u, - 0x00000182u, 0x00000000u, 0x000400fau, 0x00000180u, 0x00000181u, 0x00000186u, 0x000200f8u, 0x00000181u, - 0x0004003du, 0x0000001eu, 0x00000183u, 0x0000016du, 0x0003003eu, 0x00000164u, 0x00000183u, 0x0004003du, - 0x0000001eu, 0x00000184u, 0x0000016du, 0x00050080u, 0x0000001eu, 0x00000185u, 0x00000184u, 0x00000147u, - 0x0003003eu, 0x0000015fu, 0x00000185u, 0x000200f9u, 0x00000182u, 0x000200f8u, 0x00000186u, 0x0004003du, - 0x0000001eu, 0x00000187u, 0x0000016du, 0x00050082u, 0x0000001eu, 0x00000188u, 0x00000187u, 0x00000147u, - 0x0003003eu, 0x00000160u, 0x00000188u, 0x000200f9u, 0x00000182u, 0x000200f8u, 0x00000182u, 0x000200f9u, - 0x00000168u, 0x000200f8u, 0x00000168u, 0x000200f9u, 0x00000165u, 0x000200f8u, 0x00000167u, 0x0004003du, - 0x0000001eu, 0x00000189u, 0x00000164u, 0x000200feu, 0x00000189u, 0x00010038u, 0x00050036u, 0x00000012u, - 0x0000002bu, 0x00000000u, 0x00000026u, 0x00030037u, 0x00000025u, 0x00000027u, 0x00030037u, 0x00000025u, - 0x00000028u, 0x00030037u, 0x00000025u, 0x00000029u, 0x00030037u, 0x00000025u, 0x0000002au, 0x000200f8u, - 0x0000002cu, 0x0004003du, 0x0000000au, 0x0000018cu, 0x00000027u, 0x0004003du, 0x0000000au, 0x0000018du, - 0x0000002au, 0x000500bcu, 0x0000018eu, 0x0000018fu, 0x0000018cu, 0x0000018du, 0x0004009bu, 0x00000012u, - 0x00000190u, 0x0000018fu, 0x000300f7u, 0x00000192u, 0x00000000u, 0x000400fau, 0x00000190u, 0x00000191u, - 0x00000192u, 0x000200f8u, 0x00000191u, 0x0004003du, 0x0000000au, 0x00000193u, 0x00000028u, 0x0004003du, - 0x0000000au, 0x00000194u, 0x00000029u, 0x000500beu, 0x0000018eu, 0x00000195u, 0x00000193u, 0x00000194u, - 0x0004009bu, 0x00000012u, 0x00000196u, 0x00000195u, 0x000200f9u, 0x00000192u, 0x000200f8u, 0x00000192u, - 0x000700f5u, 0x00000012u, 0x00000197u, 0x00000190u, 0x0000002cu, 0x00000196u, 0x00000191u, 0x000200feu, - 0x00000197u, 0x00010038u, 0x00050036u, 0x0000000au, 0x00000033u, 0x00000000u, 0x00000031u, 0x00030037u, - 0x00000030u, 0x00000032u, 0x000200f8u, 0x00000034u, 0x0004003bu, 0x0000019bu, 0x0000019cu, 0x00000007u, - 0x00050041u, 0x0000019du, 0x0000019eu, 0x00000032u, 0x000000dcu, 0x0004003du, 0x0000002eu, 0x0000019fu, - 0x0000019eu, 0x00050051u, 0x0000002du, 0x000001a0u, 0x0000019fu, 0x00000000u, 0x0008004fu, 0x0000000au, - 0x000001a1u, 0x000001a0u, 0x000001a0u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00050051u, 0x0000002du, - 0x000001a2u, 0x0000019fu, 0x00000001u, 0x0008004fu, 0x0000000au, 0x000001a3u, 0x000001a2u, 0x000001a2u, - 0x00000000u, 0x00000001u, 0x00000002u, 0x00050051u, 0x0000002du, 0x000001a4u, 0x0000019fu, 0x00000002u, - 0x0008004fu, 0x0000000au, 0x000001a5u, 0x000001a4u, 0x000001a4u, 0x00000000u, 0x00000001u, 0x00000002u, - 0x00060050u, 0x0000019au, 0x000001a6u, 0x000001a1u, 0x000001a3u, 0x000001a5u, 0x0003003eu, 0x0000019cu, - 0x000001a6u, 0x0004003du, 0x0000019au, 0x000001a7u, 0x0000019cu, 0x00040054u, 0x0000019au, 0x000001a8u, - 0x000001a7u, 0x00050051u, 0x0000000au, 0x000001a9u, 0x000001a8u, 0x00000000u, 0x0004007fu, 0x0000000au, - 0x000001aau, 0x000001a9u, 0x00050051u, 0x0000000au, 0x000001abu, 0x000001a8u, 0x00000001u, 0x0004007fu, - 0x0000000au, 0x000001acu, 0x000001abu, 0x00050051u, 0x0000000au, 0x000001adu, 0x000001a8u, 0x00000002u, - 0x0004007fu, 0x0000000au, 0x000001aeu, 0x000001adu, 0x00060050u, 0x0000019au, 0x000001afu, 0x000001aau, - 0x000001acu, 0x000001aeu, 0x00060041u, 0x000000e8u, 0x000001b0u, 0x00000032u, 0x000000dcu, 0x00000126u, - 0x0004003du, 0x0000002du, 0x000001b1u, 0x000001b0u, 0x0008004fu, 0x0000000au, 0x000001b2u, 0x000001b1u, - 0x000001b1u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00050091u, 0x0000000au, 0x000001b3u, 0x000001afu, - 0x000001b2u, 0x000200feu, 0x000001b3u, 0x00010038u, -}; - -static const uint32_t kSpv_ts_polyline_mesh[] = { - 0x07230203u, 0x00010600u, 0x0008000bu, 0x00000a8du, 0x00000000u, 0x00020011u, 0x0000000bu, 0x00020011u, - 0x000014a3u, 0x0006000au, 0x5f565053u, 0x5f545845u, 0x6873656du, 0x6168735fu, 0x00726564u, 0x0006000bu, - 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, - 0x001e000fu, 0x000014f5u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x0000002eu, 0x00000309u, 0x0000030eu, - 0x00000314u, 0x00000320u, 0x00000330u, 0x0000033eu, 0x0000034du, 0x00000359u, 0x00000385u, 0x000003c7u, - 0x00000400u, 0x0000045au, 0x0000046du, 0x00000479u, 0x000004e5u, 0x000005b4u, 0x000005f9u, 0x00000a6eu, - 0x00000a72u, 0x00000a76u, 0x00000a7au, 0x00000a7eu, 0x00000a83u, 0x00000a88u, 0x0006014bu, 0x00000004u, - 0x00000026u, 0x00000007u, 0x00000008u, 0x00000008u, 0x00040010u, 0x00000004u, 0x0000001au, 0x00000080u, - 0x00040010u, 0x00000004u, 0x00001496u, 0x0000007eu, 0x00030010u, 0x00000004u, 0x000014b2u, 0x00030003u, - 0x00000002u, 0x000001ccu, 0x00060004u, 0x455f4c47u, 0x6d5f5458u, 0x5f687365u, 0x64616873u, 0x00007265u, - 0x000d0004u, 0x455f4c47u, 0x735f5458u, 0x65646168u, 0x78655f72u, 0x63696c70u, 0x615f7469u, 0x68746972u, - 0x6974656du, 0x79745f63u, 0x5f736570u, 0x36746e69u, 0x00000034u, 0x00040005u, 0x00000004u, 0x6e69616du, - 0x00000000u, 0x00080005u, 0x0000000eu, 0x5f746567u, 0x74706564u, 0x63735f68u, 0x28656c61u, 0x3b346676u, - 0x00000000u, 0x00040005u, 0x0000000du, 0x70696c63u, 0x00000000u, 0x00080005u, 0x00000014u, 0x645f7369u, - 0x705f746fu, 0x696d6972u, 0x65766974u, 0x3b317528u, 0x00000000u, 0x00060005u, 0x00000013u, 0x6d697270u, - 0x7079745fu, 0x64695f65u, 0x00000000u, 0x00050005u, 0x00000019u, 0x656d6143u, 0x6f506172u, 0x00006573u, - 0x00070006u, 0x00000019u, 0x00000000u, 0x6c726f77u, 0x6f745f64u, 0x6d61635fu, 0x00617265u, 0x00060005u, - 0x0000001bu, 0x65685446u, 0x61436174u, 0x6172656du, 0x00000000u, 0x00040006u, 0x0000001bu, 0x00000000u, - 0x00007863u, 0x00040006u, 0x0000001bu, 0x00000001u, 0x00007963u, 0x00050006u, 0x0000001bu, 0x00000002u, - 0x5f676d69u, 0x00000077u, 0x00050006u, 0x0000001bu, 0x00000003u, 0x5f676d69u, 0x00000068u, 0x00050006u, - 0x0000001bu, 0x00000004u, 0x796c6f70u, 0x00000030u, 0x00050006u, 0x0000001bu, 0x00000005u, 0x796c6f70u, - 0x00000031u, 0x00050006u, 0x0000001bu, 0x00000006u, 0x796c6f70u, 0x00000032u, 0x00050006u, 0x0000001bu, - 0x00000007u, 0x796c6f70u, 0x00000033u, 0x00050006u, 0x0000001bu, 0x00000008u, 0x796c6f70u, 0x00000034u, - 0x00050006u, 0x0000001bu, 0x00000009u, 0x796c6f70u, 0x00000035u, 0x00070006u, 0x0000001bu, 0x0000000au, - 0x5f78616du, 0x5f796172u, 0x6c676e61u, 0x00000065u, 0x00080006u, 0x0000001bu, 0x0000000bu, 0x5f78616du, - 0x74736964u, 0x6974726fu, 0x765f6e6fu, 0x00006c61u, 0x00080006u, 0x0000001bu, 0x0000000cu, 0x5f78616du, - 0x74736964u, 0x6974726fu, 0x645f6e6fu, 0x006c6176u, 0x00060006u, 0x0000001bu, 0x0000000du, 0x74706564u, - 0x616d5f68u, 0x00000078u, 0x00050006u, 0x0000001bu, 0x0000000eu, 0x635f646cu, 0x00000000u, 0x00050006u, - 0x0000001bu, 0x0000000fu, 0x645f646cu, 0x00000000u, 0x00050006u, 0x0000001bu, 0x00000010u, 0x655f646cu, - 0x00000000u, 0x00050006u, 0x0000001bu, 0x00000011u, 0x665f646cu, 0x00000000u, 0x00200005u, 0x00000021u, - 0x65687466u, 0x705f6174u, 0x656a6f72u, 0x76287463u, 0x733b3366u, 0x63757274u, 0x61432d74u, 0x6172656du, - 0x65736f50u, 0x34666d2du, 0x733b3134u, 0x63757274u, 0x54462d74u, 0x61746568u, 0x656d6143u, 0x662d6172u, - 0x31662d31u, 0x2d31662du, 0x662d3166u, 0x31662d31u, 0x2d31662du, 0x662d3166u, 0x31662d31u, 0x2d31662du, - 0x662d3166u, 0x31662d31u, 0x2d31662du, 0x662d3166u, 0x31662d31u, 0x00003b31u, 0x00050005u, 0x0000001eu, - 0x6c726f77u, 0x6f705f64u, 0x00000073u, 0x00040005u, 0x0000001fu, 0x65736f70u, 0x00000000u, 0x00030005u, - 0x00000020u, 0x006d6163u, 0x00220005u, 0x00000029u, 0x69747365u, 0x6574616du, 0x6764655fu, 0x69645f65u, - 0x726f7473u, 0x6e6f6974u, 0x7869705fu, 0x5f736c65u, 0x3474616du, 0x33667628u, 0x3366763bu, 0x34666d3bu, - 0x74733b34u, 0x74637572u, 0x6854462du, 0x43617465u, 0x72656d61u, 0x31662d61u, 0x2d31662du, 0x662d3166u, - 0x31662d31u, 0x2d31662du, 0x662d3166u, 0x31662d31u, 0x2d31662du, 0x662d3166u, 0x31662d31u, 0x2d31662du, - 0x662d3166u, 0x31662d31u, 0x3131662du, 0x0000003bu, 0x00030005u, 0x00000025u, 0x00003076u, 0x00030005u, - 0x00000026u, 0x00003176u, 0x00060005u, 0x00000027u, 0x6c726f77u, 0x6f745f64u, 0x6d61635fu, 0x00000000u, - 0x00030005u, 0x00000028u, 0x006d6163u, 0x00060005u, 0x0000002cu, 0x68737550u, 0x736e6f43u, 0x746e6174u, - 0x00000073u, 0x000a0006u, 0x0000002cu, 0x00000000u, 0x69775f75u, 0x5f687464u, 0x796c6f70u, 0x656e696cu, - 0x6765725fu, 0x72616c75u, 0x00000000u, 0x00090006u, 0x0000002cu, 0x00000001u, 0x69775f75u, 0x5f687464u, - 0x796c6f70u, 0x656e696cu, 0x7665625fu, 0x00000000u, 0x000a0006u, 0x0000002cu, 0x00000002u, 0x69775f75u, - 0x5f687464u, 0x5f6f6765u, 0x6a617274u, 0x6765725fu, 0x72616c75u, 0x00000000u, 0x00090006u, 0x0000002cu, - 0x00000003u, 0x69775f75u, 0x5f687464u, 0x5f6f6765u, 0x6a617274u, 0x7665625fu, 0x00000000u, 0x00080006u, - 0x0000002cu, 0x00000004u, 0x69775f75u, 0x5f687464u, 0x65726977u, 0x6d617266u, 0x00000065u, 0x00080006u, - 0x0000002cu, 0x00000005u, 0x65725f75u, 0x756c6f73u, 0x6e6f6974u, 0x6163735fu, 0x0000656cu, 0x00070006u, - 0x0000002cu, 0x00000006u, 0x65645f75u, 0x5f687470u, 0x6c616373u, 0x00676e69u, 0x00090006u, 0x0000002cu, - 0x00000007u, 0x616d5f75u, 0x78655f78u, 0x70617274u, 0x74616c6fu, 0x5f6e6f69u, 0x00007375u, 0x00090006u, - 0x0000002cu, 0x00000008u, 0x6f635f75u, 0x5f726f6cu, 0x656c6170u, 0x5f657474u, 0x657a6973u, 0x00000000u, - 0x00070006u, 0x0000002cu, 0x00000009u, 0x756e5f75u, 0x75715f6du, 0x65697265u, 0x00000073u, 0x000a0006u, - 0x0000002cu, 0x0000000au, 0x65745f75u, 0x6c657373u, 0x6974616cu, 0x745f6e6fu, 0x73657268u, 0x646c6f68u, - 0x00000000u, 0x000a0006u, 0x0000002cu, 0x0000000bu, 0x616d5f75u, 0x65745f78u, 0x6c657373u, 0x6974616cu, - 0x705f6e6fu, 0x6c796c6fu, 0x00656e69u, 0x000a0006u, 0x0000002cu, 0x0000000cu, 0x616d5f75u, 0x65745f78u, - 0x6c657373u, 0x6974616cu, 0x705f6e6fu, 0x67796c6fu, 0x00006e6fu, 0x00090006u, 0x0000002cu, 0x0000000du, - 0x616d5f75u, 0x65745f78u, 0x6c657373u, 0x6974616cu, 0x635f6e6fu, 0x00656275u, 0x00080006u, 0x0000002cu, - 0x0000000eu, 0x75635f75u, 0x725f6c6cu, 0x75696461u, 0x63735f73u, 0x00656c61u, 0x00070006u, 0x0000002cu, - 0x0000000fu, 0x6f665f75u, 0x6e655f67u, 0x656c6261u, 0x00000064u, 0x00070006u, 0x0000002cu, 0x00000010u, - 0x616d5f75u, 0x626f5f78u, 0x63617473u, 0x0073656cu, 0x00080006u, 0x0000002cu, 0x00000011u, 0x75635f75u, - 0x705f6562u, 0x5f6c6f6fu, 0x65646e69u, 0x00000078u, 0x00080006u, 0x0000002cu, 0x00000012u, 0x756e5f75u, - 0x6f705f6du, 0x6f67796cu, 0x6f705f6eu, 0x00736c6fu, 0x00090006u, 0x0000002cu, 0x00000013u, 0x616d5f75u, - 0x61765f78u, 0x79617272u, 0x65705f73u, 0x6f705f72u, 0x00006c6fu, 0x00090006u, 0x0000002cu, 0x00000014u, - 0x756e5f75u, 0x6f705f6du, 0x696c796cu, 0x705f656eu, 0x736c6f6fu, 0x00000000u, 0x00030005u, 0x0000002eu, - 0x00006370u, 0x00040005u, 0x0000003au, 0x646e5f7au, 0x00000063u, 0x00050005u, 0x00000042u, 0x74706564u, - 0x63735f68u, 0x00656c61u, 0x00040005u, 0x00000053u, 0x5f6d6163u, 0x00007470u, 0x00040005u, 0x0000005eu, - 0x74706564u, 0x00000068u, 0x00050005u, 0x00000061u, 0x5f796172u, 0x6d726f6eu, 0x00000000u, 0x00040005u, - 0x0000006bu, 0x666c6168u, 0x0069705fu, 0x00060005u, 0x00000078u, 0x75657370u, 0x665f6f64u, 0x6c61636fu, - 0x00000000u, 0x00040005u, 0x0000007cu, 0x6c635f78u, 0x00007069u, 0x00040005u, 0x00000087u, 0x6c635f79u, - 0x00007069u, 0x00040005u, 0x00000099u, 0x6e5f7978u, 0x006d726fu, 0x00050005u, 0x0000009eu, 0x5f736f63u, - 0x68706c61u, 0x00000061u, 0x00040005u, 0x000000a5u, 0x68706c61u, 0x00000061u, 0x00030005u, 0x000000a8u, - 0x00003261u, 0x00030005u, 0x000000acu, 0x00003361u, 0x00030005u, 0x000000b0u, 0x00003461u, 0x00030005u, - 0x000000b4u, 0x00003561u, 0x00040005u, 0x000000b8u, 0x746c6564u, 0x00000061u, 0x00040005u, 0x000000eau, - 0x6c616373u, 0x00000065u, 0x00050005u, 0x000000f6u, 0x65786970u, 0x65725f6cu, 0x0000006cu, 0x00050005u, - 0x000000fbu, 0x65786970u, 0x69645f6cu, 0x00007473u, 0x00040005u, 0x00000118u, 0x65786970u, 0x0000006cu, - 0x00040005u, 0x00000121u, 0x646e5f78u, 0x00000063u, 0x00040005u, 0x0000012au, 0x646e5f79u, 0x00000063u, - 0x00040005u, 0x00000138u, 0x61765f7au, 0x0065756cu, 0x00040005u, 0x00000146u, 0x646e5f7au, 0x00000063u, - 0x00040005u, 0x00000152u, 0x5f6d6163u, 0x00307470u, 0x00040005u, 0x0000015bu, 0x5f6d6163u, 0x00317470u, - 0x00050005u, 0x00000164u, 0x5f64696du, 0x6c726f77u, 0x00000064u, 0x00050005u, 0x00000169u, 0x5f6d6163u, - 0x6d5f7470u, 0x00006469u, 0x00040005u, 0x00000172u, 0x74706564u, 0x00003068u, 0x00040005u, 0x00000176u, - 0x74706564u, 0x00003168u, 0x00050005u, 0x0000017au, 0x74706564u, 0x696d5f68u, 0x00000064u, 0x00040005u, - 0x0000017eu, 0x6e5f7978u, 0x006d726fu, 0x00050005u, 0x00000182u, 0x5f796172u, 0x6d726f6eu, 0x00000000u, - 0x00050005u, 0x0000018cu, 0x5f736f63u, 0x68706c61u, 0x00000061u, 0x00040005u, 0x00000191u, 0x68706c61u, - 0x00000061u, 0x00030005u, 0x00000194u, 0x00003261u, 0x00040005u, 0x00000198u, 0x746c6564u, 0x00000061u, - 0x00040005u, 0x000001ccu, 0x6c616373u, 0x00000065u, 0x00050005u, 0x000001d7u, 0x65786970u, 0x65725f6cu, - 0x0000006cu, 0x00050005u, 0x000001dcu, 0x65786970u, 0x69645f6cu, 0x00007473u, 0x00040005u, 0x000001f4u, - 0x65786970u, 0x0000306cu, 0x00040005u, 0x000001fcu, 0x6e5f7978u, 0x006d726fu, 0x00050005u, 0x00000200u, - 0x5f796172u, 0x6d726f6eu, 0x00000000u, 0x00050005u, 0x00000209u, 0x5f736f63u, 0x68706c61u, 0x00000061u, - 0x00040005u, 0x0000020eu, 0x68706c61u, 0x00000061u, 0x00030005u, 0x00000211u, 0x00003261u, 0x00040005u, - 0x00000215u, 0x746c6564u, 0x00000061u, 0x00040005u, 0x00000249u, 0x6c616373u, 0x00000065u, 0x00050005u, - 0x00000254u, 0x65786970u, 0x65725f6cu, 0x0000006cu, 0x00050005u, 0x00000259u, 0x65786970u, 0x69645f6cu, - 0x00007473u, 0x00040005u, 0x00000271u, 0x65786970u, 0x0000316cu, 0x00040005u, 0x00000279u, 0x6e5f7978u, - 0x006d726fu, 0x00050005u, 0x0000027du, 0x5f796172u, 0x6d726f6eu, 0x00000000u, 0x00050005u, 0x00000286u, - 0x5f736f63u, 0x68706c61u, 0x00000061u, 0x00040005u, 0x0000028bu, 0x68706c61u, 0x00000061u, 0x00030005u, - 0x0000028eu, 0x00003261u, 0x00040005u, 0x00000292u, 0x746c6564u, 0x00000061u, 0x00040005u, 0x000002c6u, - 0x6c616373u, 0x00000065u, 0x00050005u, 0x000002d1u, 0x65786970u, 0x65725f6cu, 0x0000006cu, 0x00050005u, - 0x000002d6u, 0x65786970u, 0x69645f6cu, 0x00007473u, 0x00050005u, 0x000002eeu, 0x65786970u, 0x696d5f6cu, - 0x00000064u, 0x00070005u, 0x000002f6u, 0x656e696cu, 0x705f7261u, 0x6c657869u, 0x64696d5fu, 0x00000000u, - 0x00060005u, 0x000002fbu, 0x6f727265u, 0x69705f72u, 0x736c6578u, 0x00000000u, 0x00050005u, 0x00000305u, - 0x6972705fu, 0x6f635f6du, 0x00746e75u, 0x00050005u, 0x00000306u, 0x6e756863u, 0x64695f6bu, 0x00000000u, - 0x00060005u, 0x00000309u, 0x575f6c67u, 0x476b726fu, 0x70756f72u, 0x00004449u, 0x00030005u, 0x0000030du, - 0x00646974u, 0x00080005u, 0x0000030eu, 0x4c5f6c67u, 0x6c61636fu, 0x6f766e49u, 0x69746163u, 0x44496e6fu, - 0x00000000u, 0x00050005u, 0x00000311u, 0x61746f74u, 0x74705f6cu, 0x00000073u, 0x00070005u, 0x00000312u, - 0x796c6f50u, 0x656e696cu, 0x6b736154u, 0x6c796150u, 0x0064616fu, 0x00060006u, 0x00000312u, 0x00000000u, - 0x72657571u, 0x64695f79u, 0x00000000u, 0x00050006u, 0x00000312u, 0x00000001u, 0x6c6f6f70u, 0x0064695fu, - 0x00060006u, 0x00000312u, 0x00000002u, 0x72726176u, 0x695f7961u, 0x00007864u, 0x00070006u, 0x00000312u, - 0x00000003u, 0x61746f74u, 0x6f705f6cu, 0x73746e69u, 0x00000000u, 0x00050006u, 0x00000312u, 0x00000004u, - 0x74646977u, 0x00000068u, 0x00050006u, 0x00000312u, 0x00000005u, 0x6f6c6f63u, 0x00000072u, 0x00060006u, - 0x00000312u, 0x00000006u, 0x5f706163u, 0x6c797473u, 0x00000065u, 0x00050006u, 0x00000312u, 0x00000007u, - 0x625f7369u, 0x00007665u, 0x00040005u, 0x00000314u, 0x6c796170u, 0x0064616fu, 0x00050005u, 0x00000319u, - 0x646e6552u, 0x75517265u, 0x00797265u, 0x00060006u, 0x00000319u, 0x00000000u, 0x6e656373u, 0x64695f65u, - 0x00000000u, 0x00060006u, 0x00000319u, 0x00000001u, 0x656d6163u, 0x695f6172u, 0x00000064u, 0x00070006u, - 0x00000319u, 0x00000002u, 0x656d6974u, 0x6d617473u, 0x73755f70u, 0x00000000u, 0x00070006u, 0x00000319u, - 0x00000003u, 0x656d6163u, 0x745f6172u, 0x5f657079u, 0x00006469u, 0x00050006u, 0x00000319u, 0x00000004u, - 0x6461705fu, 0x00000031u, 0x00050006u, 0x00000319u, 0x00000005u, 0x6461705fu, 0x00000032u, 0x00050006u, - 0x00000319u, 0x00000006u, 0x6461705fu, 0x00000033u, 0x00040005u, 0x0000031bu, 0x72657571u, 0x00000079u, - 0x00050005u, 0x0000031cu, 0x646e6552u, 0x75517265u, 0x00797265u, 0x00060006u, 0x0000031cu, 0x00000000u, - 0x6e656373u, 0x64695f65u, 0x00000000u, 0x00060006u, 0x0000031cu, 0x00000001u, 0x656d6163u, 0x695f6172u, - 0x00000064u, 0x00070006u, 0x0000031cu, 0x00000002u, 0x656d6974u, 0x6d617473u, 0x73755f70u, 0x00000000u, - 0x00070006u, 0x0000031cu, 0x00000003u, 0x656d6163u, 0x745f6172u, 0x5f657079u, 0x00006469u, 0x00050006u, - 0x0000031cu, 0x00000004u, 0x6461705fu, 0x00000031u, 0x00050006u, 0x0000031cu, 0x00000005u, 0x6461705fu, - 0x00000032u, 0x00050006u, 0x0000031cu, 0x00000006u, 0x6461705fu, 0x00000033u, 0x00050005u, 0x0000031eu, - 0x72657551u, 0x66754279u, 0x00726566u, 0x00060006u, 0x0000031eu, 0x00000000u, 0x75715f67u, 0x65697265u, - 0x00000073u, 0x00030005u, 0x00000320u, 0x00000000u, 0x00070005u, 0x00000328u, 0x656d6954u, 0x6d617473u, - 0x53646570u, 0x656e6563u, 0x00000000u, 0x00080006u, 0x00000328u, 0x00000000u, 0x5f6d756eu, 0x796c6f70u, - 0x656e696cu, 0x6f6f705fu, 0x0000736cu, 0x00090006u, 0x00000328u, 0x00000001u, 0x796c6f70u, 0x656e696cu, - 0x6f6f705fu, 0x6f5f736cu, 0x65736666u, 0x00000074u, 0x00080006u, 0x00000328u, 0x00000002u, 0x5f6d756eu, - 0x796c6f70u, 0x5f6e6f67u, 0x6c6f6f70u, 0x00000073u, 0x00090006u, 0x00000328u, 0x00000003u, 0x796c6f70u, - 0x5f6e6f67u, 0x6c6f6f70u, 0x666f5f73u, 0x74657366u, 0x00000000u, 0x00070006u, 0x00000328u, 0x00000004u, - 0x5f6d756eu, 0x65627563u, 0x6f6f705fu, 0x0000736cu, 0x00080006u, 0x00000328u, 0x00000005u, 0x65627563u, - 0x6f6f705fu, 0x6f5f736cu, 0x65736666u, 0x00000074u, 0x000a0006u, 0x00000328u, 0x00000006u, 0x656d6974u, - 0x6d617473u, 0x625f7370u, 0x65666675u, 0x666f5f72u, 0x74657366u, 0x00000000u, 0x00080006u, 0x00000328u, - 0x00000007u, 0x33746e69u, 0x75625f32u, 0x72656666u, 0x66666f5fu, 0x00746573u, 0x00090006u, 0x00000328u, - 0x00000008u, 0x74726576u, 0x625f7865u, 0x65666675u, 0x666f5f72u, 0x74657366u, 0x00000000u, 0x00090006u, - 0x00000328u, 0x00000009u, 0x61697274u, 0x656c676eu, 0x6675625fu, 0x5f726566u, 0x7366666fu, 0x00007465u, - 0x00080006u, 0x00000328u, 0x0000000au, 0x65736f70u, 0x6675625fu, 0x5f726566u, 0x7366666fu, 0x00007465u, - 0x00080006u, 0x00000328u, 0x0000000bu, 0x616f6c66u, 0x75625f74u, 0x72656666u, 0x66666f5fu, 0x00746573u, - 0x00050006u, 0x00000328u, 0x0000000cu, 0x6461705fu, 0x00000000u, 0x00040005u, 0x0000032au, 0x6e656373u, - 0x00000065u, 0x00070005u, 0x0000032cu, 0x656d6954u, 0x6d617473u, 0x53646570u, 0x656e6563u, 0x00000000u, - 0x00080006u, 0x0000032cu, 0x00000000u, 0x5f6d756eu, 0x796c6f70u, 0x656e696cu, 0x6f6f705fu, 0x0000736cu, - 0x00090006u, 0x0000032cu, 0x00000001u, 0x796c6f70u, 0x656e696cu, 0x6f6f705fu, 0x6f5f736cu, 0x65736666u, - 0x00000074u, 0x00080006u, 0x0000032cu, 0x00000002u, 0x5f6d756eu, 0x796c6f70u, 0x5f6e6f67u, 0x6c6f6f70u, - 0x00000073u, 0x00090006u, 0x0000032cu, 0x00000003u, 0x796c6f70u, 0x5f6e6f67u, 0x6c6f6f70u, 0x666f5f73u, - 0x74657366u, 0x00000000u, 0x00070006u, 0x0000032cu, 0x00000004u, 0x5f6d756eu, 0x65627563u, 0x6f6f705fu, - 0x0000736cu, 0x00080006u, 0x0000032cu, 0x00000005u, 0x65627563u, 0x6f6f705fu, 0x6f5f736cu, 0x65736666u, - 0x00000074u, 0x000a0006u, 0x0000032cu, 0x00000006u, 0x656d6974u, 0x6d617473u, 0x625f7370u, 0x65666675u, - 0x666f5f72u, 0x74657366u, 0x00000000u, 0x00080006u, 0x0000032cu, 0x00000007u, 0x33746e69u, 0x75625f32u, - 0x72656666u, 0x66666f5fu, 0x00746573u, 0x00090006u, 0x0000032cu, 0x00000008u, 0x74726576u, 0x625f7865u, - 0x65666675u, 0x666f5f72u, 0x74657366u, 0x00000000u, 0x00090006u, 0x0000032cu, 0x00000009u, 0x61697274u, - 0x656c676eu, 0x6675625fu, 0x5f726566u, 0x7366666fu, 0x00007465u, 0x00080006u, 0x0000032cu, 0x0000000au, - 0x65736f70u, 0x6675625fu, 0x5f726566u, 0x7366666fu, 0x00007465u, 0x00080006u, 0x0000032cu, 0x0000000bu, - 0x616f6c66u, 0x75625f74u, 0x72656666u, 0x66666f5fu, 0x00746573u, 0x00050006u, 0x0000032cu, 0x0000000cu, - 0x6461705fu, 0x00000000u, 0x00050005u, 0x0000032eu, 0x6e656353u, 0x66754265u, 0x00726566u, 0x00060006u, - 0x0000032eu, 0x00000000u, 0x63735f67u, 0x73656e65u, 0x00000000u, 0x00030005u, 0x00000330u, 0x00000000u, - 0x00080005u, 0x00000337u, 0x656d6954u, 0x6d617473u, 0x50646570u, 0x6c796c6fu, 0x50656e69u, 0x006c6f6fu, - 0x00070006u, 0x00000337u, 0x00000000u, 0x5f6d756eu, 0x656d6974u, 0x6d617473u, 0x00007370u, 0x00060006u, - 0x00000337u, 0x00000001u, 0x5f6d756eu, 0x72726176u, 0x00737961u, 0x00070006u, 0x00000337u, 0x00000002u, - 0x5f6d756eu, 0x74726576u, 0x73656369u, 0x00000000u, 0x00070006u, 0x00000337u, 0x00000003u, 0x6d697270u, - 0x7079745fu, 0x64695f65u, 0x00000000u, 0x00080006u, 0x00000337u, 0x00000004u, 0x656d6974u, 0x6d617473u, - 0x6f5f7370u, 0x65736666u, 0x00000074u, 0x00090006u, 0x00000337u, 0x00000005u, 0x765f7374u, 0x61727261u, - 0x705f7379u, 0x666f5f73u, 0x74657366u, 0x00000000u, 0x00080006u, 0x00000337u, 0x00000006u, 0x72726176u, - 0x5f737961u, 0x6f5f7370u, 0x65736666u, 0x00000074u, 0x00070006u, 0x00000337u, 0x00000007u, 0x74726576u, - 0x73656369u, 0x66666f5fu, 0x00746573u, 0x00060006u, 0x00000337u, 0x00000008u, 0x62626161u, 0x66666f5fu, - 0x00746573u, 0x00050006u, 0x00000337u, 0x00000009u, 0x6461705fu, 0x00000031u, 0x00050006u, 0x00000337u, - 0x0000000au, 0x6461705fu, 0x00000032u, 0x00050006u, 0x00000337u, 0x0000000bu, 0x6461705fu, 0x00000033u, - 0x00050006u, 0x00000337u, 0x0000000cu, 0x6461705fu, 0x00000034u, 0x00050006u, 0x00000337u, 0x0000000du, - 0x6461705fu, 0x00000035u, 0x00050006u, 0x00000337u, 0x0000000eu, 0x6461705fu, 0x00000036u, 0x00050006u, - 0x00000337u, 0x0000000fu, 0x6461705fu, 0x00000037u, 0x00040005u, 0x00000339u, 0x6c6f6f70u, 0x00000000u, - 0x00080005u, 0x0000033au, 0x656d6954u, 0x6d617473u, 0x50646570u, 0x6c796c6fu, 0x50656e69u, 0x006c6f6fu, - 0x00070006u, 0x0000033au, 0x00000000u, 0x5f6d756eu, 0x656d6974u, 0x6d617473u, 0x00007370u, 0x00060006u, - 0x0000033au, 0x00000001u, 0x5f6d756eu, 0x72726176u, 0x00737961u, 0x00070006u, 0x0000033au, 0x00000002u, - 0x5f6d756eu, 0x74726576u, 0x73656369u, 0x00000000u, 0x00070006u, 0x0000033au, 0x00000003u, 0x6d697270u, - 0x7079745fu, 0x64695f65u, 0x00000000u, 0x00080006u, 0x0000033au, 0x00000004u, 0x656d6974u, 0x6d617473u, - 0x6f5f7370u, 0x65736666u, 0x00000074u, 0x00090006u, 0x0000033au, 0x00000005u, 0x765f7374u, 0x61727261u, - 0x705f7379u, 0x666f5f73u, 0x74657366u, 0x00000000u, 0x00080006u, 0x0000033au, 0x00000006u, 0x72726176u, - 0x5f737961u, 0x6f5f7370u, 0x65736666u, 0x00000074u, 0x00070006u, 0x0000033au, 0x00000007u, 0x74726576u, - 0x73656369u, 0x66666f5fu, 0x00746573u, 0x00060006u, 0x0000033au, 0x00000008u, 0x62626161u, 0x66666f5fu, - 0x00746573u, 0x00050006u, 0x0000033au, 0x00000009u, 0x6461705fu, 0x00000031u, 0x00050006u, 0x0000033au, - 0x0000000au, 0x6461705fu, 0x00000032u, 0x00050006u, 0x0000033au, 0x0000000bu, 0x6461705fu, 0x00000033u, - 0x00050006u, 0x0000033au, 0x0000000cu, 0x6461705fu, 0x00000034u, 0x00050006u, 0x0000033au, 0x0000000du, - 0x6461705fu, 0x00000035u, 0x00050006u, 0x0000033au, 0x0000000eu, 0x6461705fu, 0x00000036u, 0x00050006u, - 0x0000033au, 0x0000000fu, 0x6461705fu, 0x00000037u, 0x00070005u, 0x0000033cu, 0x796c6f50u, 0x656e696cu, - 0x6c6f6f50u, 0x66667542u, 0x00007265u, 0x00080006u, 0x0000033cu, 0x00000000u, 0x6f705f67u, 0x696c796cu, - 0x705f656eu, 0x736c6f6fu, 0x00000000u, 0x00030005u, 0x0000033eu, 0x00000000u, 0x00030005u, 0x00000348u, - 0x006d6163u, 0x00060005u, 0x00000349u, 0x65685446u, 0x61436174u, 0x6172656du, 0x00000000u, 0x00040006u, - 0x00000349u, 0x00000000u, 0x00007863u, 0x00040006u, 0x00000349u, 0x00000001u, 0x00007963u, 0x00050006u, - 0x00000349u, 0x00000002u, 0x5f676d69u, 0x00000077u, 0x00050006u, 0x00000349u, 0x00000003u, 0x5f676d69u, - 0x00000068u, 0x00050006u, 0x00000349u, 0x00000004u, 0x796c6f70u, 0x00000030u, 0x00050006u, 0x00000349u, - 0x00000005u, 0x796c6f70u, 0x00000031u, 0x00050006u, 0x00000349u, 0x00000006u, 0x796c6f70u, 0x00000032u, - 0x00050006u, 0x00000349u, 0x00000007u, 0x796c6f70u, 0x00000033u, 0x00050006u, 0x00000349u, 0x00000008u, - 0x796c6f70u, 0x00000034u, 0x00050006u, 0x00000349u, 0x00000009u, 0x796c6f70u, 0x00000035u, 0x00070006u, - 0x00000349u, 0x0000000au, 0x5f78616du, 0x5f796172u, 0x6c676e61u, 0x00000065u, 0x00080006u, 0x00000349u, - 0x0000000bu, 0x5f78616du, 0x74736964u, 0x6974726fu, 0x765f6e6fu, 0x00006c61u, 0x00080006u, 0x00000349u, - 0x0000000cu, 0x5f78616du, 0x74736964u, 0x6974726fu, 0x645f6e6fu, 0x006c6176u, 0x00060006u, 0x00000349u, - 0x0000000du, 0x74706564u, 0x616d5f68u, 0x00000078u, 0x00050006u, 0x00000349u, 0x0000000eu, 0x635f646cu, - 0x00000000u, 0x00050006u, 0x00000349u, 0x0000000fu, 0x645f646cu, 0x00000000u, 0x00050006u, 0x00000349u, - 0x00000010u, 0x655f646cu, 0x00000000u, 0x00050006u, 0x00000349u, 0x00000011u, 0x665f646cu, 0x00000000u, - 0x00080005u, 0x0000034bu, 0x656d6143u, 0x6e496172u, 0x6e697274u, 0x73636973u, 0x66667542u, 0x00007265u, - 0x00080006u, 0x0000034bu, 0x00000000u, 0x61635f67u, 0x6172656du, 0x746e695fu, 0x736e6972u, 0x00736369u, - 0x00030005u, 0x0000034du, 0x00000000u, 0x00040005u, 0x00000354u, 0x65736f70u, 0x00000000u, 0x00050005u, - 0x00000355u, 0x656d6143u, 0x6f506172u, 0x00006573u, 0x00070006u, 0x00000355u, 0x00000000u, 0x6c726f77u, - 0x6f745f64u, 0x6d61635fu, 0x00617265u, 0x00070005u, 0x00000357u, 0x656d6143u, 0x6f506172u, 0x75426573u, - 0x72656666u, 0x00000000u, 0x00070006u, 0x00000357u, 0x00000000u, 0x61635f67u, 0x6172656du, 0x736f705fu, - 0x00007365u, 0x00030005u, 0x00000359u, 0x00000000u, 0x00060005u, 0x00000360u, 0x5f706163u, 0x6c797473u, - 0x6f6c5f65u, 0x006c6163u, 0x00040005u, 0x00000363u, 0x61726170u, 0x0000006du, 0x00050005u, 0x00000369u, - 0x5f746f64u, 0x72617473u, 0x00000074u, 0x00040005u, 0x0000036du, 0x5f746f64u, 0x00646e65u, 0x00050005u, - 0x00000372u, 0x5f6d756eu, 0x73746f64u, 0x00000000u, 0x00060005u, 0x0000037cu, 0x74735f76u, 0x5f747261u, - 0x65736162u, 0x00000000u, 0x00050005u, 0x00000383u, 0x33746e49u, 0x66754232u, 0x00726566u, 0x00050006u, - 0x00000383u, 0x00000000u, 0x6e695f67u, 0x00323374u, 0x00030005u, 0x00000385u, 0x00000000u, 0x00050005u, - 0x00000393u, 0x65736162u, 0x695f765fu, 0x00007864u, 0x00050005u, 0x0000039bu, 0x666c6168u, 0x6469775fu, - 0x00006874u, 0x00050005u, 0x000003a0u, 0x61746f74u, 0x65765f6cu, 0x00737472u, 0x00050005u, 0x000003a4u, - 0x61746f74u, 0x72745f6cu, 0x00007369u, 0x00030005u, 0x000003afu, 0x00000064u, 0x00050005u, 0x000003b8u, - 0x626f6c67u, 0x645f6c61u, 0x0000746fu, 0x00030005u, 0x000003bcu, 0x00006976u, 0x00040005u, 0x000003c0u, - 0x74726556u, 0x00007865u, 0x00040006u, 0x000003c0u, 0x00000000u, 0x00000078u, 0x00040006u, 0x000003c0u, - 0x00000001u, 0x00000079u, 0x00040006u, 0x000003c0u, 0x00000002u, 0x0000007au, 0x00050006u, 0x000003c0u, - 0x00000003u, 0x6461705fu, 0x00000000u, 0x00030005u, 0x000003c2u, 0x00007876u, 0x00040005u, 0x000003c3u, - 0x74726556u, 0x00007865u, 0x00040006u, 0x000003c3u, 0x00000000u, 0x00000078u, 0x00040006u, 0x000003c3u, - 0x00000001u, 0x00000079u, 0x00040006u, 0x000003c3u, 0x00000002u, 0x0000007au, 0x00050006u, 0x000003c3u, - 0x00000003u, 0x6461705fu, 0x00000000u, 0x00060005u, 0x000003c5u, 0x74726556u, 0x75427865u, 0x72656666u, - 0x00000000u, 0x00060006u, 0x000003c5u, 0x00000000u, 0x65765f67u, 0x63697472u, 0x00007365u, 0x00030005u, - 0x000003c7u, 0x00000000u, 0x00050005u, 0x000003cdu, 0x6c726f77u, 0x6f705f64u, 0x00000073u, 0x00050005u, - 0x000003d5u, 0x746e6563u, 0x635f7265u, 0x0070696cu, 0x00040005u, 0x000003d6u, 0x61726170u, 0x0000006du, - 0x00040005u, 0x000003d8u, 0x61726170u, 0x0000006du, 0x00040005u, 0x000003dau, 0x61726170u, 0x0000006du, - 0x00030005u, 0x000003ddu, 0x00000077u, 0x00060005u, 0x000003e5u, 0x746e6563u, 0x735f7265u, 0x65657263u, - 0x0000006eu, 0x00050005u, 0x000003f9u, 0x65736162u, 0x7265765fu, 0x00000074u, 0x00070005u, 0x000003fcu, - 0x4d5f6c67u, 0x50687365u, 0x65567265u, 0x78657472u, 0x00545845u, 0x00060006u, 0x000003fcu, 0x00000000u, - 0x505f6c67u, 0x7469736fu, 0x006e6f69u, 0x00070005u, 0x00000400u, 0x4d5f6c67u, 0x56687365u, 0x69747265u, - 0x45736563u, 0x00005458u, 0x00060005u, 0x00000405u, 0x5f746f64u, 0x74706564u, 0x63735f68u, 0x00656c61u, - 0x00040005u, 0x00000406u, 0x61726170u, 0x0000006du, 0x00070005u, 0x00000409u, 0x6c616373u, 0x685f6465u, - 0x5f666c61u, 0x74646977u, 0x00000068u, 0x00030005u, 0x0000040du, 0x00000069u, 0x00040005u, 0x00000415u, - 0x6c676e61u, 0x00000065u, 0x00040005u, 0x0000041au, 0x7366666fu, 0x00007465u, 0x00050005u, 0x00000422u, - 0x676e6972u, 0x7263735fu, 0x006e6565u, 0x00050005u, 0x00000426u, 0x676e6972u, 0x696c635fu, 0x00000070u, - 0x00050005u, 0x00000448u, 0x65736162u, 0x6972745fu, 0x00000000u, 0x00030005u, 0x0000044bu, 0x00000069u, - 0x00040005u, 0x00000453u, 0x7478656eu, 0x0000695fu, 0x000a0005u, 0x0000045au, 0x505f6c67u, 0x696d6972u, - 0x65766974u, 0x61697254u, 0x656c676eu, 0x69646e49u, 0x45736563u, 0x00005458u, 0x00080005u, 0x0000046au, - 0x4d5f6c67u, 0x50687365u, 0x72507265u, 0x74696d69u, 0x45657669u, 0x00005458u, 0x00060006u, 0x0000046au, - 0x00000000u, 0x4c5f6c67u, 0x72657961u, 0x00000000u, 0x00080005u, 0x0000046du, 0x4d5f6c67u, 0x50687365u, - 0x696d6972u, 0x65766974u, 0x54584573u, 0x00000000u, 0x00060005u, 0x00000476u, 0x6d697250u, 0x6f6c6f43u, - 0x6f6c4272u, 0x00006b63u, 0x00050006u, 0x00000476u, 0x00000000u, 0x6f6c6f63u, 0x00000072u, 0x00050006u, - 0x00000476u, 0x00000001u, 0x625f7369u, 0x00007665u, 0x00050005u, 0x00000479u, 0x6d697270u, 0x74756f5fu, - 0x00000000u, 0x00060005u, 0x0000048eu, 0x5f6d756eu, 0x6d676573u, 0x73746e65u, 0x00000000u, 0x00050005u, - 0x00000491u, 0x5f676573u, 0x72617473u, 0x00000074u, 0x00040005u, 0x00000494u, 0x5f676573u, 0x00646e65u, - 0x00070005u, 0x00000499u, 0x5f6d756eu, 0x73676573u, 0x5f6e695fu, 0x6e756863u, 0x0000006bu, 0x00060005u, - 0x0000049eu, 0x665f7369u, 0x74737269u, 0x7568635fu, 0x00006b6eu, 0x00060005u, 0x000004a1u, 0x6c5f7369u, - 0x5f747361u, 0x6e756863u, 0x0000006bu, 0x00050005u, 0x000004abu, 0x666c6168u, 0x6469775fu, 0x00006874u, - 0x00040005u, 0x000004afu, 0x74735f76u, 0x00747261u, 0x00050005u, 0x000004c1u, 0x65736162u, 0x695f765fu, - 0x00007864u, 0x00060005u, 0x000004c9u, 0x5f666665u, 0x6e696f70u, 0x6f635f74u, 0x00746e75u, 0x00070005u, - 0x000004cau, 0x5f736168u, 0x7265766fu, 0x5f70616cu, 0x6f666562u, 0x00006572u, 0x00070005u, 0x000004ccu, - 0x5f736168u, 0x7265766fu, 0x5f70616cu, 0x65746661u, 0x00000072u, 0x00050005u, 0x000004d8u, 0x625f6976u, - 0x726f6665u, 0x00000065u, 0x00050005u, 0x000004ddu, 0x625f7876u, 0x726f6665u, 0x00000065u, 0x00050005u, - 0x000004e5u, 0x6f775f73u, 0x5f646c72u, 0x00736f70u, 0x00050005u, 0x000004f9u, 0x615f6976u, 0x72657466u, - 0x00000000u, 0x00050005u, 0x000004feu, 0x615f7876u, 0x72657466u, 0x00000000u, 0x00040005u, 0x0000050cu, - 0x5f676573u, 0x00786469u, 0x00050005u, 0x00000515u, 0x626f6c67u, 0x735f6c61u, 0x00006765u, 0x00030005u, - 0x00000519u, 0x00306976u, 0x00030005u, 0x0000051du, 0x00316976u, 0x00030005u, 0x00000522u, 0x00307876u, - 0x00030005u, 0x00000527u, 0x00317876u, 0x00030005u, 0x0000052cu, 0x00003070u, 0x00030005u, 0x00000534u, - 0x00003170u, 0x00040005u, 0x0000053cu, 0x6f727265u, 0x00000072u, 0x00040005u, 0x0000053du, 0x61726170u, - 0x0000006du, 0x00040005u, 0x0000053fu, 0x61726170u, 0x0000006du, 0x00040005u, 0x00000541u, 0x61726170u, - 0x0000006du, 0x00040005u, 0x00000544u, 0x61726170u, 0x0000006du, 0x00060005u, 0x00000547u, 0x64627573u, - 0x6c5f7669u, 0x6c657665u, 0x00000000u, 0x00050005u, 0x00000548u, 0x73736574u, 0x7268745fu, 0x00687365u, - 0x00060005u, 0x0000057du, 0x5f6d756eu, 0x73627573u, 0x656d6765u, 0x0073746eu, 0x00040005u, 0x00000589u, - 0x5f627573u, 0x00000069u, 0x00030005u, 0x00000592u, 0x00000074u, 0x00050005u, 0x00000598u, 0x6c726f77u, - 0x6f705f64u, 0x00000073u, 0x00050005u, 0x000005b4u, 0x6c635f73u, 0x705f7069u, 0x0000736fu, 0x00060005u, - 0x000005c1u, 0x5f6d756eu, 0x5f666665u, 0x6e696f70u, 0x00007374u, 0x00070005u, 0x000005c5u, 0x5f657375u, - 0x7265766fu, 0x5f70616cu, 0x6f666562u, 0x00006572u, 0x00070005u, 0x000005c9u, 0x5f657375u, 0x7265766fu, - 0x5f70616cu, 0x65746661u, 0x00000072u, 0x00030005u, 0x000005d5u, 0x00007470u, 0x00050005u, 0x000005dfu, - 0x6c726f77u, 0x6f705f64u, 0x00000073u, 0x00040005u, 0x000005e3u, 0x70696c63u, 0x00000000u, 0x00040005u, - 0x000005e4u, 0x61726170u, 0x0000006du, 0x00040005u, 0x000005e6u, 0x61726170u, 0x0000006du, 0x00040005u, - 0x000005e8u, 0x61726170u, 0x0000006du, 0x00030005u, 0x000005efu, 0x00000077u, 0x00060005u, 0x000005f9u, - 0x63735f73u, 0x6e656572u, 0x736f705fu, 0x00000000u, 0x00060005u, 0x00000612u, 0x5f6d756eu, 0x5f666665u, - 0x73676573u, 0x00000000u, 0x00060005u, 0x00000615u, 0x77617264u, 0x6174735fu, 0x635f7472u, 0x00007061u, - 0x00060005u, 0x00000616u, 0x77617264u, 0x646e655fu, 0x7061635fu, 0x00000000u, 0x00060005u, 0x00000617u, - 0x5f6d756eu, 0x5f706163u, 0x74726576u, 0x00000073u, 0x00060005u, 0x0000061du, 0x5f6d756eu, 0x5f706163u, - 0x73697274u, 0x00000000u, 0x00060005u, 0x00000623u, 0x6e696f70u, 0x65765f74u, 0x5f737472u, 0x00646e65u, - 0x00060005u, 0x00000626u, 0x72617473u, 0x61635f74u, 0x61625f70u, 0x00006573u, 0x00060005u, 0x00000628u, - 0x5f646e65u, 0x5f706163u, 0x65736162u, 0x00000000u, 0x00050005u, 0x0000062du, 0x5f6d756eu, 0x74726576u, - 0x00000073u, 0x00050005u, 0x00000631u, 0x5f6d756eu, 0x73697274u, 0x00000000u, 0x00030005u, 0x0000063bu, - 0x00007470u, 0x00040005u, 0x00000645u, 0x70696c63u, 0x00000000u, 0x00040005u, 0x00000649u, 0x65726373u, - 0x00006e65u, 0x00040005u, 0x0000064du, 0x696d5f77u, 0x0000006eu, 0x00050005u, 0x0000064eu, 0x5f726964u, - 0x76657270u, 0x00000000u, 0x00050005u, 0x00000650u, 0x5f726964u, 0x7478656eu, 0x00000000u, 0x00050005u, - 0x00000651u, 0x5f736168u, 0x76657270u, 0x00000000u, 0x00050005u, 0x00000654u, 0x5f736168u, 0x7478656eu, - 0x00000000u, 0x00060005u, 0x00000659u, 0x65726373u, 0x665f6e65u, 0x645f726fu, 0x00007269u, 0x00050005u, - 0x0000065bu, 0x70696c63u, 0x7275635fu, 0x00000072u, 0x00040005u, 0x0000066fu, 0x646f6f67u, 0x00000000u, - 0x00030005u, 0x00000674u, 0x00646162u, 0x00040005u, 0x00000679u, 0x72657469u, 0x00000000u, 0x00030005u, - 0x00000681u, 0x0064696du, 0x00050005u, 0x00000686u, 0x5f64696du, 0x70696c63u, 0x00000000u, 0x00040005u, - 0x00000687u, 0x61726170u, 0x0000006du, 0x00040005u, 0x00000689u, 0x61726170u, 0x0000006du, 0x00040005u, - 0x0000068bu, 0x61726170u, 0x0000006du, 0x00040005u, 0x00000699u, 0x6d616c63u, 0x00646570u, 0x00040005u, - 0x0000069au, 0x61726170u, 0x0000006du, 0x00040005u, 0x0000069cu, 0x61726170u, 0x0000006du, 0x00040005u, - 0x0000069eu, 0x61726170u, 0x0000006du, 0x00030005u, 0x000006a1u, 0x00635f77u, 0x00040005u, 0x000006cfu, - 0x646f6f67u, 0x00000000u, 0x00030005u, 0x000006d4u, 0x00646162u, 0x00040005u, 0x000006d8u, 0x72657469u, - 0x00000000u, 0x00030005u, 0x000006e0u, 0x0064696du, 0x00050005u, 0x000006e5u, 0x5f64696du, 0x70696c63u, - 0x00000000u, 0x00040005u, 0x000006e6u, 0x61726170u, 0x0000006du, 0x00040005u, 0x000006e8u, 0x61726170u, - 0x0000006du, 0x00040005u, 0x000006eau, 0x61726170u, 0x0000006du, 0x00040005u, 0x000006f8u, 0x6d616c63u, - 0x00646570u, 0x00040005u, 0x000006f9u, 0x61726170u, 0x0000006du, 0x00040005u, 0x000006fbu, 0x61726170u, - 0x0000006du, 0x00040005u, 0x000006fdu, 0x61726170u, 0x0000006du, 0x00030005u, 0x00000700u, 0x00635f77u, - 0x00050005u, 0x0000071au, 0x65726373u, 0x705f6e65u, 0x00766572u, 0x00040005u, 0x0000072eu, 0x646f6f67u, - 0x00000000u, 0x00030005u, 0x00000732u, 0x00646162u, 0x00040005u, 0x00000737u, 0x72657469u, 0x00000000u, - 0x00030005u, 0x0000073fu, 0x0064696du, 0x00050005u, 0x00000744u, 0x5f64696du, 0x70696c63u, 0x00000000u, - 0x00040005u, 0x00000745u, 0x61726170u, 0x0000006du, 0x00040005u, 0x00000747u, 0x61726170u, 0x0000006du, - 0x00040005u, 0x00000749u, 0x61726170u, 0x0000006du, 0x00040005u, 0x00000757u, 0x6d616c63u, 0x00646570u, - 0x00040005u, 0x00000758u, 0x61726170u, 0x0000006du, 0x00040005u, 0x0000075au, 0x61726170u, 0x0000006du, - 0x00040005u, 0x0000075cu, 0x61726170u, 0x0000006du, 0x00030005u, 0x0000075fu, 0x00635f77u, 0x00030005u, - 0x00000776u, 0x00000064u, 0x00030005u, 0x0000077au, 0x006e656cu, 0x00050005u, 0x00000788u, 0x65726373u, - 0x6e5f6e65u, 0x00747865u, 0x00040005u, 0x0000079cu, 0x646f6f67u, 0x00000000u, 0x00030005u, 0x000007a0u, - 0x00646162u, 0x00040005u, 0x000007a5u, 0x72657469u, 0x00000000u, 0x00030005u, 0x000007adu, 0x0064696du, - 0x00050005u, 0x000007b2u, 0x5f64696du, 0x70696c63u, 0x00000000u, 0x00040005u, 0x000007b3u, 0x61726170u, - 0x0000006du, 0x00040005u, 0x000007b5u, 0x61726170u, 0x0000006du, 0x00040005u, 0x000007b7u, 0x61726170u, - 0x0000006du, 0x00040005u, 0x000007c5u, 0x6d616c63u, 0x00646570u, 0x00040005u, 0x000007c6u, 0x61726170u, - 0x0000006du, 0x00040005u, 0x000007c8u, 0x61726170u, 0x0000006du, 0x00040005u, 0x000007cau, 0x61726170u, - 0x0000006du, 0x00030005u, 0x000007cdu, 0x00635f77u, 0x00030005u, 0x000007e4u, 0x00000064u, 0x00030005u, - 0x000007e8u, 0x006e656cu, 0x00050005u, 0x000007f3u, 0x6574696du, 0x63735f72u, 0x00656c61u, 0x00050005u, - 0x00000805u, 0x70726570u, 0x6572705fu, 0x00000076u, 0x00050005u, 0x0000080cu, 0x70726570u, 0x78656e5fu, - 0x00000074u, 0x00050005u, 0x00000813u, 0x6574696du, 0x75735f72u, 0x0000006du, 0x00050005u, 0x00000817u, - 0x6574696du, 0x656c5f72u, 0x0000006eu, 0x00040005u, 0x0000081eu, 0x6574696du, 0x00000072u, 0x00050005u, - 0x00000823u, 0x5f736f63u, 0x666c6168u, 0x00000000u, 0x00050005u, 0x00000854u, 0x74706564u, 0x63735f68u, - 0x00656c61u, 0x00040005u, 0x00000855u, 0x61726170u, 0x0000006du, 0x00070005u, 0x00000858u, 0x6c616373u, - 0x685f6465u, 0x5f666c61u, 0x74646977u, 0x00000068u, 0x00040005u, 0x0000085cu, 0x5f66666fu, 0x00000078u, - 0x00040005u, 0x0000086au, 0x5f66666fu, 0x00000079u, 0x00040005u, 0x00000879u, 0x65736162u, 0x00000000u, - 0x00040005u, 0x000008a7u, 0x70696c63u, 0x00000030u, 0x00040005u, 0x000008aau, 0x65726373u, 0x00306e65u, - 0x00040005u, 0x000008adu, 0x65726373u, 0x00316e65u, 0x00050005u, 0x000008b0u, 0x656e696cu, 0x7269645fu, - 0x00000000u, 0x00040005u, 0x000008b5u, 0x70726570u, 0x00000000u, 0x00040005u, 0x000008c1u, 0x6c676e61u, - 0x00007365u, 0x00070005u, 0x000008c6u, 0x30706163u, 0x7065645fu, 0x735f6874u, 0x656c6163u, 0x00000000u, - 0x00040005u, 0x000008c7u, 0x61726170u, 0x0000006du, 0x00080005u, 0x000008cau, 0x30706163u, 0x6163735fu, - 0x5f64656cu, 0x666c6168u, 0x6469775fu, 0x00006874u, 0x00030005u, 0x000008ceu, 0x00000069u, 0x00030005u, - 0x000008d6u, 0x00000061u, 0x00040005u, 0x000008dau, 0x5f637261u, 0x00726964u, 0x00050005u, 0x000008e5u, - 0x5f637261u, 0x5f66666fu, 0x00000078u, 0x00050005u, 0x000008f1u, 0x5f637261u, 0x5f66666fu, 0x00000079u, - 0x00040005u, 0x00000919u, 0x7473616cu, 0x0074705fu, 0x00040005u, 0x0000091cu, 0x70696c63u, 0x0000004eu, - 0x00040005u, 0x00000920u, 0x65726373u, 0x004e6e65u, 0x00050005u, 0x00000924u, 0x65726373u, 0x314e6e65u, - 0x00000000u, 0x00050005u, 0x00000929u, 0x656e696cu, 0x7269645fu, 0x00000000u, 0x00040005u, 0x0000092eu, - 0x70726570u, 0x00000000u, 0x00040005u, 0x00000938u, 0x6c676e61u, 0x00007365u, 0x00070005u, 0x00000939u, - 0x4e706163u, 0x7065645fu, 0x735f6874u, 0x656c6163u, 0x00000000u, 0x00040005u, 0x0000093au, 0x61726170u, - 0x0000006du, 0x00080005u, 0x0000093du, 0x4e706163u, 0x6163735fu, 0x5f64656cu, 0x666c6168u, 0x6469775fu, - 0x00006874u, 0x00030005u, 0x00000941u, 0x00000069u, 0x00030005u, 0x00000949u, 0x00000061u, 0x00040005u, - 0x0000094du, 0x5f637261u, 0x00726964u, 0x00050005u, 0x00000958u, 0x5f637261u, 0x5f66666fu, 0x00000078u, - 0x00050005u, 0x00000964u, 0x5f637261u, 0x5f66666fu, 0x00000079u, 0x00040005u, 0x0000098au, 0x5f697274u, - 0x00786469u, 0x00030005u, 0x0000098bu, 0x00676573u, 0x00040005u, 0x00000994u, 0x7466656cu, 0x00000030u, - 0x00040005u, 0x00000997u, 0x68676972u, 0x00003074u, 0x00040005u, 0x0000099bu, 0x7466656cu, 0x00000031u, - 0x00040005u, 0x0000099fu, 0x68676972u, 0x00003174u, 0x00040005u, 0x000009b9u, 0x746e6563u, 0x00007265u, - 0x00050005u, 0x000009bbu, 0x68676972u, 0x64655f74u, 0x00006567u, 0x00050005u, 0x000009bcu, 0x7466656cu, - 0x6764655fu, 0x00000065u, 0x00040005u, 0x000009bdu, 0x31637261u, 0x00000000u, 0x00040005u, 0x000009c0u, - 0x32637261u, 0x00000000u, 0x00040005u, 0x000009c3u, 0x33637261u, 0x00000000u, 0x00040005u, 0x000009e9u, - 0x7473616cu, 0x0074705fu, 0x00040005u, 0x000009ecu, 0x746e6563u, 0x00007265u, 0x00050005u, 0x000009eeu, - 0x7466656cu, 0x6764655fu, 0x00000065u, 0x00050005u, 0x000009f1u, 0x68676972u, 0x64655f74u, 0x00006567u, - 0x00040005u, 0x000009f5u, 0x31637261u, 0x00000000u, 0x00040005u, 0x000009f8u, 0x32637261u, 0x00000000u, - 0x00040005u, 0x000009fbu, 0x33637261u, 0x00000000u, 0x00030005u, 0x00000a1eu, 0x00000069u, 0x00080005u, - 0x00000a6cu, 0x6f6c6f43u, 0x6c615072u, 0x65747465u, 0x66667542u, 0x61457265u, 0x00796c72u, 0x00070006u, - 0x00000a6cu, 0x00000000u, 0x6f635f67u, 0x5f726f6cu, 0x656c6170u, 0x00657474u, 0x00030005u, 0x00000a6eu, - 0x00000000u, 0x00070005u, 0x00000a70u, 0x656d6954u, 0x6d617473u, 0x75427370u, 0x72656666u, 0x00000000u, - 0x00070006u, 0x00000a70u, 0x00000000u, 0x69745f67u, 0x7473656du, 0x73706d61u, 0x00000000u, 0x00030005u, - 0x00000a72u, 0x00000000u, 0x00060005u, 0x00000a74u, 0x61697254u, 0x656c676eu, 0x66667542u, 0x00007265u, - 0x00060006u, 0x00000a74u, 0x00000000u, 0x72745f67u, 0x676e6169u, 0x0073656cu, 0x00030005u, 0x00000a76u, - 0x00000000u, 0x00050005u, 0x00000a78u, 0x65736f50u, 0x66667542u, 0x00007265u, 0x00050006u, 0x00000a78u, - 0x00000000u, 0x6f705f67u, 0x00736573u, 0x00030005u, 0x00000a7au, 0x00000000u, 0x00050005u, 0x00000a7cu, - 0x616f6c46u, 0x66754274u, 0x00726566u, 0x00060006u, 0x00000a7cu, 0x00000000u, 0x6c665f67u, 0x7374616fu, - 0x00000000u, 0x00030005u, 0x00000a7eu, 0x00000000u, 0x00080005u, 0x00000a7fu, 0x656d6954u, 0x6d617473u, - 0x50646570u, 0x67796c6fu, 0x6f506e6fu, 0x00006c6fu, 0x00070006u, 0x00000a7fu, 0x00000000u, 0x5f6d756eu, - 0x656d6974u, 0x6d617473u, 0x00007370u, 0x00060006u, 0x00000a7fu, 0x00000001u, 0x5f6d756eu, 0x72726176u, - 0x00737961u, 0x00070006u, 0x00000a7fu, 0x00000002u, 0x5f6d756eu, 0x74726576u, 0x73656369u, 0x00000000u, - 0x00070006u, 0x00000a7fu, 0x00000003u, 0x5f6d756eu, 0x61697274u, 0x656c676eu, 0x00000073u, 0x00070006u, - 0x00000a7fu, 0x00000004u, 0x6d697270u, 0x7079745fu, 0x64695f65u, 0x00000000u, 0x00080006u, 0x00000a7fu, - 0x00000005u, 0x656d6974u, 0x6d617473u, 0x6f5f7370u, 0x65736666u, 0x00000074u, 0x00090006u, 0x00000a7fu, - 0x00000006u, 0x765f7374u, 0x61727261u, 0x705f7379u, 0x666f5f73u, 0x74657366u, 0x00000000u, 0x00080006u, - 0x00000a7fu, 0x00000007u, 0x72726176u, 0x5f737961u, 0x6f5f7370u, 0x65736666u, 0x00000074u, 0x00070006u, - 0x00000a7fu, 0x00000008u, 0x5f697274u, 0x6f5f7370u, 0x65736666u, 0x00000074u, 0x00070006u, 0x00000a7fu, - 0x00000009u, 0x74726576u, 0x73656369u, 0x66666f5fu, 0x00746573u, 0x00080006u, 0x00000a7fu, 0x0000000au, - 0x61697274u, 0x656c676eu, 0x666f5f73u, 0x74657366u, 0x00000000u, 0x00060006u, 0x00000a7fu, 0x0000000bu, - 0x62626161u, 0x66666f5fu, 0x00746573u, 0x00050006u, 0x00000a7fu, 0x0000000cu, 0x6461705fu, 0x00000031u, - 0x00050006u, 0x00000a7fu, 0x0000000du, 0x6461705fu, 0x00000032u, 0x00050006u, 0x00000a7fu, 0x0000000eu, - 0x6461705fu, 0x00000033u, 0x00050006u, 0x00000a7fu, 0x0000000fu, 0x6461705fu, 0x00000034u, 0x00070005u, - 0x00000a81u, 0x796c6f50u, 0x506e6f67u, 0x426c6f6fu, 0x65666675u, 0x00000072u, 0x00070006u, 0x00000a81u, - 0x00000000u, 0x6f705f67u, 0x6f67796cu, 0x6f705f6eu, 0x00736c6fu, 0x00030005u, 0x00000a83u, 0x00000000u, - 0x00060005u, 0x00000a84u, 0x7473624fu, 0x656c6361u, 0x6c6f6f50u, 0x00000000u, 0x00060006u, 0x00000a84u, - 0x00000000u, 0x5f6d756eu, 0x65627563u, 0x00000073u, 0x00070006u, 0x00000a84u, 0x00000001u, 0x5f6d756eu, - 0x656d6974u, 0x6d617473u, 0x00007370u, 0x00070006u, 0x00000a84u, 0x00000002u, 0x5f6d756eu, 0x63617274u, - 0x6f705f6bu, 0x00736573u, 0x00070006u, 0x00000a84u, 0x00000003u, 0x6d697270u, 0x7079745fu, 0x64695f65u, - 0x00000000u, 0x00080006u, 0x00000a84u, 0x00000004u, 0x656d6974u, 0x6d617473u, 0x6f5f7370u, 0x65736666u, - 0x00000074u, 0x00080006u, 0x00000a84u, 0x00000005u, 0x65627563u, 0x5f73745fu, 0x6f5f7370u, 0x65736666u, - 0x00000074u, 0x00090006u, 0x00000a84u, 0x00000006u, 0x63617274u, 0x69745f6bu, 0x7473656du, 0x73706d61u, - 0x66666f5fu, 0x00746573u, 0x00080006u, 0x00000a84u, 0x00000007u, 0x6e617274u, 0x74616c73u, 0x736e6f69u, - 0x66666f5fu, 0x00746573u, 0x00080006u, 0x00000a84u, 0x00000008u, 0x74617571u, 0x696e7265u, 0x5f736e6fu, - 0x7366666fu, 0x00007465u, 0x00070006u, 0x00000a84u, 0x00000009u, 0x6c616373u, 0x6f5f7365u, 0x65736666u, - 0x00000074u, 0x00070006u, 0x00000a84u, 0x0000000au, 0x6f6c6f63u, 0x6f5f7372u, 0x65736666u, 0x00000074u, - 0x00070006u, 0x00000a84u, 0x0000000bu, 0x646e6572u, 0x665f7265u, 0x7367616cu, 0x00000000u, 0x00050006u, - 0x00000a84u, 0x0000000cu, 0x6461705fu, 0x00000032u, 0x00050006u, 0x00000a84u, 0x0000000du, 0x6461705fu, - 0x00000033u, 0x00050006u, 0x00000a84u, 0x0000000eu, 0x6461705fu, 0x00000034u, 0x00050006u, 0x00000a84u, - 0x0000000fu, 0x6461705fu, 0x00000035u, 0x00070005u, 0x00000a86u, 0x7473624fu, 0x656c6361u, 0x6c6f6f50u, - 0x66667542u, 0x00007265u, 0x00080006u, 0x00000a86u, 0x00000000u, 0x626f5f67u, 0x63617473u, 0x705f656cu, - 0x736c6f6fu, 0x00000000u, 0x00030005u, 0x00000a88u, 0x00000000u, 0x00030047u, 0x0000002cu, 0x00000002u, - 0x00050048u, 0x0000002cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000002cu, 0x00000001u, - 0x00000023u, 0x00000004u, 0x00050048u, 0x0000002cu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, - 0x0000002cu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x0000002cu, 0x00000004u, 0x00000023u, - 0x00000010u, 0x00050048u, 0x0000002cu, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x0000002cu, - 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x0000002cu, 0x00000007u, 0x00000023u, 0x0000001cu, - 0x00050048u, 0x0000002cu, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x0000002cu, 0x00000009u, - 0x00000023u, 0x00000024u, 0x00050048u, 0x0000002cu, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, - 0x0000002cu, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x0000002cu, 0x0000000cu, 0x00000023u, - 0x00000030u, 0x00050048u, 0x0000002cu, 0x0000000du, 0x00000023u, 0x00000034u, 0x00050048u, 0x0000002cu, - 0x0000000eu, 0x00000023u, 0x00000038u, 0x00050048u, 0x0000002cu, 0x0000000fu, 0x00000023u, 0x0000003cu, - 0x00050048u, 0x0000002cu, 0x00000010u, 0x00000023u, 0x00000040u, 0x00050048u, 0x0000002cu, 0x00000011u, - 0x00000023u, 0x00000044u, 0x00050048u, 0x0000002cu, 0x00000012u, 0x00000023u, 0x00000048u, 0x00050048u, - 0x0000002cu, 0x00000013u, 0x00000023u, 0x0000004cu, 0x00050048u, 0x0000002cu, 0x00000014u, 0x00000023u, - 0x00000050u, 0x00040047u, 0x00000309u, 0x0000000bu, 0x0000001au, 0x00040047u, 0x0000030eu, 0x0000000bu, - 0x0000001bu, 0x00050048u, 0x0000031cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000031cu, - 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000031cu, 0x00000002u, 0x00000023u, 0x00000008u, - 0x00050048u, 0x0000031cu, 0x00000003u, 0x00000023u, 0x00000010u, 0x00050048u, 0x0000031cu, 0x00000004u, - 0x00000023u, 0x00000014u, 0x00050048u, 0x0000031cu, 0x00000005u, 0x00000023u, 0x00000018u, 0x00050048u, - 0x0000031cu, 0x00000006u, 0x00000023u, 0x0000001cu, 0x00040047u, 0x0000031du, 0x00000006u, 0x00000020u, - 0x00030047u, 0x0000031eu, 0x00000002u, 0x00040048u, 0x0000031eu, 0x00000000u, 0x00000018u, 0x00050048u, - 0x0000031eu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000320u, 0x00000018u, 0x00040047u, - 0x00000320u, 0x00000021u, 0x0000000du, 0x00040047u, 0x00000320u, 0x00000022u, 0x00000000u, 0x00040047u, - 0x0000032bu, 0x00000006u, 0x00000004u, 0x00050048u, 0x0000032cu, 0x00000000u, 0x00000023u, 0x00000000u, - 0x00050048u, 0x0000032cu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000032cu, 0x00000002u, - 0x00000023u, 0x00000008u, 0x00050048u, 0x0000032cu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, - 0x0000032cu, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x0000032cu, 0x00000005u, 0x00000023u, - 0x00000014u, 0x00050048u, 0x0000032cu, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x0000032cu, - 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x0000032cu, 0x00000008u, 0x00000023u, 0x00000020u, - 0x00050048u, 0x0000032cu, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x0000032cu, 0x0000000au, - 0x00000023u, 0x00000028u, 0x00050048u, 0x0000032cu, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, - 0x0000032cu, 0x0000000cu, 0x00000023u, 0x00000030u, 0x00040047u, 0x0000032du, 0x00000006u, 0x00000080u, - 0x00030047u, 0x0000032eu, 0x00000002u, 0x00040048u, 0x0000032eu, 0x00000000u, 0x00000018u, 0x00050048u, - 0x0000032eu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000330u, 0x00000018u, 0x00040047u, - 0x00000330u, 0x00000021u, 0x00000006u, 0x00040047u, 0x00000330u, 0x00000022u, 0x00000000u, 0x00050048u, - 0x0000033au, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000033au, 0x00000001u, 0x00000023u, - 0x00000004u, 0x00050048u, 0x0000033au, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000033au, - 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x0000033au, 0x00000004u, 0x00000023u, 0x00000010u, - 0x00050048u, 0x0000033au, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x0000033au, 0x00000006u, - 0x00000023u, 0x00000018u, 0x00050048u, 0x0000033au, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, - 0x0000033au, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x0000033au, 0x00000009u, 0x00000023u, - 0x00000024u, 0x00050048u, 0x0000033au, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x0000033au, - 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x0000033au, 0x0000000cu, 0x00000023u, 0x00000030u, - 0x00050048u, 0x0000033au, 0x0000000du, 0x00000023u, 0x00000034u, 0x00050048u, 0x0000033au, 0x0000000eu, - 0x00000023u, 0x00000038u, 0x00050048u, 0x0000033au, 0x0000000fu, 0x00000023u, 0x0000003cu, 0x00040047u, - 0x0000033bu, 0x00000006u, 0x00000040u, 0x00030047u, 0x0000033cu, 0x00000002u, 0x00040048u, 0x0000033cu, - 0x00000000u, 0x00000018u, 0x00050048u, 0x0000033cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, - 0x0000033eu, 0x00000018u, 0x00040047u, 0x0000033eu, 0x00000021u, 0x00000007u, 0x00040047u, 0x0000033eu, - 0x00000022u, 0x00000000u, 0x00050048u, 0x00000349u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, - 0x00000349u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000349u, 0x00000002u, 0x00000023u, - 0x00000008u, 0x00050048u, 0x00000349u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000349u, - 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000349u, 0x00000005u, 0x00000023u, 0x00000014u, - 0x00050048u, 0x00000349u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000349u, 0x00000007u, - 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000349u, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, - 0x00000349u, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x00000349u, 0x0000000au, 0x00000023u, - 0x00000028u, 0x00050048u, 0x00000349u, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x00000349u, - 0x0000000cu, 0x00000023u, 0x00000030u, 0x00050048u, 0x00000349u, 0x0000000du, 0x00000023u, 0x00000034u, - 0x00050048u, 0x00000349u, 0x0000000eu, 0x00000023u, 0x00000038u, 0x00050048u, 0x00000349u, 0x0000000fu, - 0x00000023u, 0x0000003cu, 0x00050048u, 0x00000349u, 0x00000010u, 0x00000023u, 0x00000040u, 0x00050048u, - 0x00000349u, 0x00000011u, 0x00000023u, 0x00000044u, 0x00040047u, 0x0000034au, 0x00000006u, 0x00000048u, - 0x00030047u, 0x0000034bu, 0x00000002u, 0x00040048u, 0x0000034bu, 0x00000000u, 0x00000018u, 0x00050048u, - 0x0000034bu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000034du, 0x00000018u, 0x00040047u, - 0x0000034du, 0x00000021u, 0x0000000bu, 0x00040047u, 0x0000034du, 0x00000022u, 0x00000000u, 0x00040048u, - 0x00000355u, 0x00000000u, 0x00000005u, 0x00050048u, 0x00000355u, 0x00000000u, 0x00000007u, 0x00000010u, - 0x00050048u, 0x00000355u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x00000356u, 0x00000006u, - 0x00000040u, 0x00030047u, 0x00000357u, 0x00000002u, 0x00040048u, 0x00000357u, 0x00000000u, 0x00000018u, - 0x00050048u, 0x00000357u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000359u, 0x00000018u, - 0x00040047u, 0x00000359u, 0x00000021u, 0x0000000cu, 0x00040047u, 0x00000359u, 0x00000022u, 0x00000000u, - 0x00040047u, 0x00000382u, 0x00000006u, 0x00000004u, 0x00030047u, 0x00000383u, 0x00000002u, 0x00040048u, - 0x00000383u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000383u, 0x00000000u, 0x00000023u, 0x00000000u, - 0x00030047u, 0x00000385u, 0x00000018u, 0x00040047u, 0x00000385u, 0x00000021u, 0x00000001u, 0x00040047u, - 0x00000385u, 0x00000022u, 0x00000000u, 0x00050048u, 0x000003c3u, 0x00000000u, 0x00000023u, 0x00000000u, - 0x00050048u, 0x000003c3u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000003c3u, 0x00000002u, - 0x00000023u, 0x00000008u, 0x00050048u, 0x000003c3u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00040047u, - 0x000003c4u, 0x00000006u, 0x00000010u, 0x00030047u, 0x000003c5u, 0x00000002u, 0x00040048u, 0x000003c5u, - 0x00000000u, 0x00000018u, 0x00050048u, 0x000003c5u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, - 0x000003c7u, 0x00000018u, 0x00040047u, 0x000003c7u, 0x00000021u, 0x00000002u, 0x00040047u, 0x000003c7u, - 0x00000022u, 0x00000000u, 0x00030047u, 0x000003fcu, 0x00000002u, 0x00050048u, 0x000003fcu, 0x00000000u, - 0x0000000bu, 0x00000000u, 0x00040047u, 0x0000045au, 0x0000000bu, 0x000014b0u, 0x00030047u, 0x0000046au, - 0x00000002u, 0x00050048u, 0x0000046au, 0x00000000u, 0x0000000bu, 0x00000009u, 0x00040048u, 0x0000046au, - 0x00000000u, 0x00001497u, 0x00030047u, 0x00000476u, 0x00000002u, 0x00040048u, 0x00000476u, 0x00000000u, - 0x00001497u, 0x00040048u, 0x00000476u, 0x00000001u, 0x00001497u, 0x00040047u, 0x00000479u, 0x0000001eu, - 0x00000000u, 0x00040047u, 0x00000a6bu, 0x00000006u, 0x00000010u, 0x00030047u, 0x00000a6cu, 0x00000002u, - 0x00040048u, 0x00000a6cu, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000a6cu, 0x00000000u, 0x00000023u, - 0x00000000u, 0x00030047u, 0x00000a6eu, 0x00000018u, 0x00040047u, 0x00000a6eu, 0x00000021u, 0x0000000au, - 0x00040047u, 0x00000a6eu, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000a6fu, 0x00000006u, 0x00000008u, - 0x00030047u, 0x00000a70u, 0x00000002u, 0x00040048u, 0x00000a70u, 0x00000000u, 0x00000018u, 0x00050048u, - 0x00000a70u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000a72u, 0x00000018u, 0x00040047u, - 0x00000a72u, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000a72u, 0x00000022u, 0x00000000u, 0x00040047u, - 0x00000a73u, 0x00000006u, 0x00000010u, 0x00030047u, 0x00000a74u, 0x00000002u, 0x00040048u, 0x00000a74u, - 0x00000000u, 0x00000018u, 0x00050048u, 0x00000a74u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, - 0x00000a76u, 0x00000018u, 0x00040047u, 0x00000a76u, 0x00000021u, 0x00000003u, 0x00040047u, 0x00000a76u, - 0x00000022u, 0x00000000u, 0x00040047u, 0x00000a77u, 0x00000006u, 0x00000040u, 0x00030047u, 0x00000a78u, - 0x00000002u, 0x00040048u, 0x00000a78u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000a78u, 0x00000000u, - 0x00000023u, 0x00000000u, 0x00030047u, 0x00000a7au, 0x00000018u, 0x00040047u, 0x00000a7au, 0x00000021u, - 0x00000004u, 0x00040047u, 0x00000a7au, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000a7bu, 0x00000006u, - 0x00000004u, 0x00030047u, 0x00000a7cu, 0x00000002u, 0x00040048u, 0x00000a7cu, 0x00000000u, 0x00000018u, - 0x00050048u, 0x00000a7cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000a7eu, 0x00000018u, - 0x00040047u, 0x00000a7eu, 0x00000021u, 0x00000005u, 0x00040047u, 0x00000a7eu, 0x00000022u, 0x00000000u, - 0x00050048u, 0x00000a7fu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000a7fu, 0x00000001u, - 0x00000023u, 0x00000004u, 0x00050048u, 0x00000a7fu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, - 0x00000a7fu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000a7fu, 0x00000004u, 0x00000023u, - 0x00000010u, 0x00050048u, 0x00000a7fu, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000a7fu, - 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000a7fu, 0x00000007u, 0x00000023u, 0x0000001cu, - 0x00050048u, 0x00000a7fu, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000a7fu, 0x00000009u, - 0x00000023u, 0x00000024u, 0x00050048u, 0x00000a7fu, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, - 0x00000a7fu, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x00000a7fu, 0x0000000cu, 0x00000023u, - 0x00000030u, 0x00050048u, 0x00000a7fu, 0x0000000du, 0x00000023u, 0x00000034u, 0x00050048u, 0x00000a7fu, - 0x0000000eu, 0x00000023u, 0x00000038u, 0x00050048u, 0x00000a7fu, 0x0000000fu, 0x00000023u, 0x0000003cu, - 0x00040047u, 0x00000a80u, 0x00000006u, 0x00000040u, 0x00030047u, 0x00000a81u, 0x00000002u, 0x00040048u, - 0x00000a81u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000a81u, 0x00000000u, 0x00000023u, 0x00000000u, - 0x00030047u, 0x00000a83u, 0x00000018u, 0x00040047u, 0x00000a83u, 0x00000021u, 0x00000008u, 0x00040047u, - 0x00000a83u, 0x00000022u, 0x00000000u, 0x00050048u, 0x00000a84u, 0x00000000u, 0x00000023u, 0x00000000u, - 0x00050048u, 0x00000a84u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000a84u, 0x00000002u, - 0x00000023u, 0x00000008u, 0x00050048u, 0x00000a84u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, - 0x00000a84u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000a84u, 0x00000005u, 0x00000023u, - 0x00000014u, 0x00050048u, 0x00000a84u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000a84u, - 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000a84u, 0x00000008u, 0x00000023u, 0x00000020u, - 0x00050048u, 0x00000a84u, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x00000a84u, 0x0000000au, - 0x00000023u, 0x00000028u, 0x00050048u, 0x00000a84u, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, - 0x00000a84u, 0x0000000cu, 0x00000023u, 0x00000030u, 0x00050048u, 0x00000a84u, 0x0000000du, 0x00000023u, - 0x00000034u, 0x00050048u, 0x00000a84u, 0x0000000eu, 0x00000023u, 0x00000038u, 0x00050048u, 0x00000a84u, - 0x0000000fu, 0x00000023u, 0x0000003cu, 0x00040047u, 0x00000a85u, 0x00000006u, 0x00000040u, 0x00030047u, - 0x00000a86u, 0x00000002u, 0x00040048u, 0x00000a86u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000a86u, - 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000a88u, 0x00000018u, 0x00040047u, 0x00000a88u, - 0x00000021u, 0x00000009u, 0x00040047u, 0x00000a88u, 0x00000022u, 0x00000000u, 0x00020013u, 0x00000002u, - 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x0004002bu, - 0x00000006u, 0x00000007u, 0x00000020u, 0x0004002bu, 0x00000006u, 0x00000008u, 0x00000001u, 0x00030016u, - 0x00000009u, 0x00000020u, 0x00040017u, 0x0000000au, 0x00000009u, 0x00000004u, 0x00040020u, 0x0000000bu, - 0x00000007u, 0x0000000au, 0x00040021u, 0x0000000cu, 0x00000009u, 0x0000000bu, 0x00040020u, 0x00000010u, - 0x00000007u, 0x00000006u, 0x00020014u, 0x00000011u, 0x00040021u, 0x00000012u, 0x00000011u, 0x00000010u, - 0x00040017u, 0x00000016u, 0x00000009u, 0x00000003u, 0x00040020u, 0x00000017u, 0x00000007u, 0x00000016u, - 0x00040018u, 0x00000018u, 0x0000000au, 0x00000004u, 0x0003001eu, 0x00000019u, 0x00000018u, 0x00040020u, - 0x0000001au, 0x00000007u, 0x00000019u, 0x0014001eu, 0x0000001bu, 0x00000009u, 0x00000009u, 0x00000009u, - 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, - 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00040020u, - 0x0000001cu, 0x00000007u, 0x0000001bu, 0x00060021u, 0x0000001du, 0x0000000au, 0x00000017u, 0x0000001au, - 0x0000001cu, 0x00040020u, 0x00000023u, 0x00000007u, 0x00000018u, 0x00070021u, 0x00000024u, 0x00000009u, - 0x00000017u, 0x00000017u, 0x00000023u, 0x0000001cu, 0x00040015u, 0x0000002bu, 0x00000020u, 0x00000001u, - 0x0017001eu, 0x0000002cu, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, - 0x00000009u, 0x0000002bu, 0x0000002bu, 0x00000006u, 0x00000009u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000009u, 0x00000009u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, - 0x0000002du, 0x00000009u, 0x0000002cu, 0x0004003bu, 0x0000002du, 0x0000002eu, 0x00000009u, 0x0004002bu, - 0x0000002bu, 0x0000002fu, 0x00000006u, 0x00040020u, 0x00000030u, 0x00000009u, 0x00000009u, 0x0004002bu, - 0x00000009u, 0x00000033u, 0x3f000000u, 0x0004002bu, 0x00000009u, 0x00000037u, 0x3f800000u, 0x00040020u, - 0x00000039u, 0x00000007u, 0x00000009u, 0x0004002bu, 0x00000006u, 0x0000003bu, 0x00000002u, 0x0004002bu, - 0x00000006u, 0x0000003eu, 0x00000003u, 0x0004002bu, 0x00000009u, 0x00000046u, 0x00000000u, 0x0004002bu, - 0x00000006u, 0x0000004bu, 0x00000014u, 0x0004002bu, 0x00000006u, 0x0000004eu, 0x00000015u, 0x0004002bu, - 0x0000002bu, 0x00000054u, 0x00000000u, 0x0004002bu, 0x00000009u, 0x00000065u, 0x358637bdu, 0x0007002cu, - 0x0000000au, 0x00000069u, 0x00000046u, 0x00000046u, 0x00000046u, 0x00000037u, 0x0004002bu, 0x00000009u, - 0x0000006cu, 0x3fc90fdau, 0x0004002bu, 0x0000002bu, 0x0000006du, 0x0000000au, 0x0004002bu, 0x00000009u, - 0x00000073u, 0x3a83126fu, 0x0004002bu, 0x0000002bu, 0x00000079u, 0x00000005u, 0x0004002bu, 0x00000006u, - 0x0000007du, 0x00000000u, 0x0004002bu, 0x0000002bu, 0x00000082u, 0x00000002u, 0x0004002bu, 0x0000002bu, - 0x0000008du, 0x00000003u, 0x0004002bu, 0x00000009u, 0x00000093u, 0x41200000u, 0x00040017u, 0x0000009au, - 0x00000009u, 0x00000002u, 0x0004002bu, 0x00000009u, 0x000000a3u, 0xbf800000u, 0x0004002bu, 0x0000002bu, - 0x000000b9u, 0x00000004u, 0x0004002bu, 0x0000002bu, 0x000000c6u, 0x00000007u, 0x0004002bu, 0x0000002bu, - 0x000000ccu, 0x00000008u, 0x0004002bu, 0x0000002bu, 0x000000d2u, 0x00000009u, 0x0004002bu, 0x0000002bu, - 0x000000deu, 0x0000000bu, 0x0004002bu, 0x0000002bu, 0x000000e5u, 0x0000000cu, 0x00040020u, 0x000000f5u, - 0x00000007u, 0x0000009au, 0x0004002bu, 0x0000002bu, 0x000000fcu, 0x0000000eu, 0x0004002bu, 0x0000002bu, - 0x00000102u, 0x0000000fu, 0x0004002bu, 0x0000002bu, 0x0000010au, 0x00000010u, 0x0004002bu, 0x0000002bu, - 0x00000110u, 0x00000011u, 0x0004002bu, 0x0000002bu, 0x0000011cu, 0x00000001u, 0x0004002bu, 0x00000009u, - 0x00000122u, 0x40000000u, 0x0004002bu, 0x0000002bu, 0x00000140u, 0x0000000du, 0x0004002bu, 0x00000009u, - 0x0000018au, 0x2edbe6ffu, 0x0004002bu, 0x00000009u, 0x00000301u, 0x461c4000u, 0x00040017u, 0x00000307u, - 0x00000006u, 0x00000003u, 0x00040020u, 0x00000308u, 0x00000001u, 0x00000307u, 0x0004003bu, 0x00000308u, - 0x00000309u, 0x00000001u, 0x00040020u, 0x0000030au, 0x00000001u, 0x00000006u, 0x0004003bu, 0x00000308u, - 0x0000030eu, 0x00000001u, 0x000a001eu, 0x00000312u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000009u, 0x00000016u, 0x00000006u, 0x00000009u, 0x00040020u, 0x00000313u, 0x0000151au, 0x00000312u, - 0x0004003bu, 0x00000313u, 0x00000314u, 0x0000151au, 0x00040020u, 0x00000315u, 0x0000151au, 0x00000006u, - 0x00040015u, 0x00000318u, 0x00000040u, 0x00000001u, 0x0009001eu, 0x00000319u, 0x00000006u, 0x00000006u, - 0x00000318u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x0000031au, 0x00000007u, - 0x00000319u, 0x0009001eu, 0x0000031cu, 0x00000006u, 0x00000006u, 0x00000318u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x0003001du, 0x0000031du, 0x0000031cu, 0x0003001eu, 0x0000031eu, 0x0000031du, - 0x00040020u, 0x0000031fu, 0x0000000cu, 0x0000031eu, 0x0004003bu, 0x0000031fu, 0x00000320u, 0x0000000cu, - 0x00040020u, 0x00000323u, 0x0000000cu, 0x0000031cu, 0x0004001cu, 0x00000327u, 0x00000006u, 0x0000004bu, - 0x000f001eu, 0x00000328u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000327u, 0x00040020u, - 0x00000329u, 0x00000007u, 0x00000328u, 0x0004001cu, 0x0000032bu, 0x00000006u, 0x0000004bu, 0x000f001eu, - 0x0000032cu, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0000032bu, 0x0003001du, 0x0000032du, - 0x0000032cu, 0x0003001eu, 0x0000032eu, 0x0000032du, 0x00040020u, 0x0000032fu, 0x0000000cu, 0x0000032eu, - 0x0004003bu, 0x0000032fu, 0x00000330u, 0x0000000cu, 0x00040020u, 0x00000333u, 0x0000000cu, 0x0000032cu, - 0x0012001eu, 0x00000337u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00040020u, 0x00000338u, 0x00000007u, 0x00000337u, 0x0012001eu, 0x0000033au, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x0003001du, 0x0000033bu, 0x0000033au, 0x0003001eu, 0x0000033cu, 0x0000033bu, 0x00040020u, 0x0000033du, - 0x0000000cu, 0x0000033cu, 0x0004003bu, 0x0000033du, 0x0000033eu, 0x0000000cu, 0x00040020u, 0x00000344u, - 0x0000000cu, 0x0000033au, 0x0014001eu, 0x00000349u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, - 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, - 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x0003001du, 0x0000034au, - 0x00000349u, 0x0003001eu, 0x0000034bu, 0x0000034au, 0x00040020u, 0x0000034cu, 0x0000000cu, 0x0000034bu, - 0x0004003bu, 0x0000034cu, 0x0000034du, 0x0000000cu, 0x00040020u, 0x00000350u, 0x0000000cu, 0x00000349u, - 0x0003001eu, 0x00000355u, 0x00000018u, 0x0003001du, 0x00000356u, 0x00000355u, 0x0003001eu, 0x00000357u, - 0x00000356u, 0x00040020u, 0x00000358u, 0x0000000cu, 0x00000357u, 0x0004003bu, 0x00000358u, 0x00000359u, - 0x0000000cu, 0x00040020u, 0x0000035cu, 0x0000000cu, 0x00000355u, 0x0004002bu, 0x00000006u, 0x0000036bu, - 0x00000007u, 0x0003001du, 0x00000382u, 0x0000002bu, 0x0003001eu, 0x00000383u, 0x00000382u, 0x00040020u, - 0x00000384u, 0x0000000cu, 0x00000383u, 0x0004003bu, 0x00000384u, 0x00000385u, 0x0000000cu, 0x00040020u, - 0x0000038fu, 0x0000000cu, 0x0000002bu, 0x00040020u, 0x0000039cu, 0x0000151au, 0x00000009u, 0x0004002bu, - 0x00000006u, 0x000003a2u, 0x00000009u, 0x0004002bu, 0x00000006u, 0x000003a6u, 0x00000008u, 0x0006001eu, - 0x000003c0u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00040020u, 0x000003c1u, 0x00000007u, - 0x000003c0u, 0x0006001eu, 0x000003c3u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x0003001du, - 0x000003c4u, 0x000003c3u, 0x0003001eu, 0x000003c5u, 0x000003c4u, 0x00040020u, 0x000003c6u, 0x0000000cu, - 0x000003c5u, 0x0004003bu, 0x000003c6u, 0x000003c7u, 0x0000000cu, 0x00040020u, 0x000003c9u, 0x0000000cu, - 0x000003c3u, 0x0003001eu, 0x000003fcu, 0x0000000au, 0x0004002bu, 0x00000006u, 0x000003fdu, 0x00000080u, - 0x0004001cu, 0x000003feu, 0x000003fcu, 0x000003fdu, 0x00040020u, 0x000003ffu, 0x00000003u, 0x000003feu, - 0x0004003bu, 0x000003ffu, 0x00000400u, 0x00000003u, 0x00040020u, 0x00000403u, 0x00000003u, 0x0000000au, - 0x0004002bu, 0x00000009u, 0x00000418u, 0x3f490fd8u, 0x0004002bu, 0x00000006u, 0x00000457u, 0x0000007eu, - 0x0004001cu, 0x00000458u, 0x00000307u, 0x00000457u, 0x00040020u, 0x00000459u, 0x00000003u, 0x00000458u, - 0x0004003bu, 0x00000459u, 0x0000045au, 0x00000003u, 0x00040020u, 0x00000468u, 0x00000003u, 0x00000307u, - 0x0003001eu, 0x0000046au, 0x0000002bu, 0x0004001cu, 0x0000046bu, 0x0000046au, 0x00000457u, 0x00040020u, - 0x0000046cu, 0x00000003u, 0x0000046bu, 0x0004003bu, 0x0000046cu, 0x0000046du, 0x00000003u, 0x00040020u, - 0x00000474u, 0x00000003u, 0x0000002bu, 0x0004001eu, 0x00000476u, 0x00000016u, 0x00000009u, 0x0004001cu, - 0x00000477u, 0x00000476u, 0x00000457u, 0x00040020u, 0x00000478u, 0x00000003u, 0x00000477u, 0x0004003bu, - 0x00000478u, 0x00000479u, 0x00000003u, 0x00040020u, 0x0000047du, 0x0000151au, 0x00000016u, 0x00040020u, - 0x00000480u, 0x00000003u, 0x00000016u, 0x00040020u, 0x00000487u, 0x00000003u, 0x00000009u, 0x00040020u, - 0x0000049du, 0x00000007u, 0x00000011u, 0x0003002au, 0x00000011u, 0x000004cbu, 0x0004002bu, 0x00000006u, - 0x000004e2u, 0x00000040u, 0x0004001cu, 0x000004e3u, 0x00000016u, 0x000004e2u, 0x00040020u, 0x000004e4u, - 0x00000004u, 0x000004e3u, 0x0004003bu, 0x000004e4u, 0x000004e5u, 0x00000004u, 0x0004002bu, 0x0000002bu, - 0x000004e6u, 0x0000003eu, 0x00040020u, 0x000004eeu, 0x00000004u, 0x00000016u, 0x00030029u, 0x00000011u, - 0x000004f0u, 0x0004002bu, 0x0000002bu, 0x00000503u, 0x0000003fu, 0x0004002bu, 0x00000009u, 0x00000559u, - 0x40800000u, 0x0004002bu, 0x00000009u, 0x00000565u, 0x41800000u, 0x0004002bu, 0x00000009u, 0x00000571u, - 0x42800000u, 0x0004002bu, 0x00000006u, 0x00000577u, 0x00000004u, 0x00040020u, 0x00000579u, 0x00000009u, - 0x00000006u, 0x0004002bu, 0x00000006u, 0x000005a4u, 0x00000032u, 0x0004001cu, 0x000005b2u, 0x0000000au, - 0x000004e2u, 0x00040020u, 0x000005b3u, 0x00000004u, 0x000005b2u, 0x0004003bu, 0x000005b3u, 0x000005b4u, - 0x00000004u, 0x0004002bu, 0x0000002bu, 0x000005b5u, 0x0000003du, 0x00040020u, 0x000005b8u, 0x00000004u, - 0x00000009u, 0x0004002bu, 0x00000006u, 0x000005c0u, 0x00000108u, 0x00040020u, 0x000005edu, 0x00000004u, - 0x0000000au, 0x0004001cu, 0x000005f7u, 0x0000009au, 0x000004e2u, 0x00040020u, 0x000005f8u, 0x00000004u, - 0x000005f7u, 0x0004003bu, 0x000005f8u, 0x000005f9u, 0x00000004u, 0x00040020u, 0x0000060eu, 0x00000004u, - 0x0000009au, 0x0004002bu, 0x00000006u, 0x00000637u, 0x00000078u, 0x0005002cu, 0x0000009au, 0x0000064fu, - 0x00000046u, 0x00000046u, 0x00040020u, 0x00000678u, 0x00000007u, 0x0000002bu, 0x0005002cu, 0x0000009au, - 0x00000853u, 0x00000037u, 0x00000046u, 0x0004001cu, 0x000008bfu, 0x00000009u, 0x0000003eu, 0x00040020u, - 0x000008c0u, 0x00000007u, 0x000008bfu, 0x0004002bu, 0x00000009u, 0x000008c2u, 0x3f490ff9u, 0x0004002bu, - 0x00000009u, 0x000008c3u, 0x3fc90ff9u, 0x0004002bu, 0x00000009u, 0x000008c4u, 0x4016cbfbu, 0x0006002cu, - 0x000008bfu, 0x000008c5u, 0x000008c2u, 0x000008c3u, 0x000008c4u, 0x0004002bu, 0x00000006u, 0x00000a36u, - 0x00000005u, 0x0004002bu, 0x00000006u, 0x00000a37u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x00000a38u, - 0x0000000au, 0x0004002bu, 0x00000006u, 0x00000a39u, 0x0000000bu, 0x0004002bu, 0x00000006u, 0x00000a3au, - 0x0000000cu, 0x0004002bu, 0x00000006u, 0x00000a3bu, 0x0000000du, 0x0004002bu, 0x00000006u, 0x00000a3cu, - 0x0000000eu, 0x0004002bu, 0x00000006u, 0x00000a3du, 0x0000000fu, 0x0004002bu, 0x00000006u, 0x00000a3eu, - 0x00000010u, 0x0004002bu, 0x00000006u, 0x00000a3fu, 0x00000011u, 0x0004002bu, 0x00000006u, 0x00000a40u, - 0x00000012u, 0x0004002bu, 0x00000006u, 0x00000a41u, 0x00000013u, 0x0004002bu, 0x00000009u, 0x00000a42u, - 0x3f7dfdfeu, 0x0004002bu, 0x00000009u, 0x00000a43u, 0x3b808081u, 0x0004002bu, 0x00000009u, 0x00000a44u, - 0x3f68e8e9u, 0x0006002cu, 0x00000016u, 0x00000a45u, 0x00000a42u, 0x00000a43u, 0x00000a44u, 0x0004002bu, - 0x00000009u, 0x00000a46u, 0x3ec4c4c5u, 0x0004002bu, 0x00000009u, 0x00000a47u, 0x3f37b7b8u, 0x0004002bu, - 0x00000009u, 0x00000a48u, 0x3f79f9fau, 0x0006002cu, 0x00000016u, 0x00000a49u, 0x00000a46u, 0x00000a47u, - 0x00000a48u, 0x0004002bu, 0x00000009u, 0x00000a4au, 0x3f0b8b8cu, 0x0004002bu, 0x00000009u, 0x00000a4bu, - 0x3ebababbu, 0x0006002cu, 0x00000016u, 0x00000a4cu, 0x00000a4au, 0x00000a4bu, 0x00000037u, 0x0004002bu, - 0x00000009u, 0x00000a4du, 0x3ec8c8c9u, 0x0006002cu, 0x00000016u, 0x00000a4eu, 0x00000037u, 0x00000a4du, - 0x00000046u, 0x0006002cu, 0x00000016u, 0x00000a4fu, 0x00000046u, 0x00000037u, 0x00000046u, 0x0004002bu, - 0x00000009u, 0x00000a50u, 0x3ed8d8d9u, 0x0004002bu, 0x00000009u, 0x00000a51u, 0x3f33b3b4u, 0x0004002bu, - 0x00000009u, 0x00000a52u, 0x3e6cecedu, 0x0006002cu, 0x00000016u, 0x00000a53u, 0x00000a50u, 0x00000a51u, - 0x00000a52u, 0x0004002bu, 0x00000009u, 0x00000a54u, 0x3e8a8a8bu, 0x0004002bu, 0x00000009u, 0x00000a55u, - 0x3f31b1b2u, 0x0006002cu, 0x00000016u, 0x00000a56u, 0x00000a47u, 0x00000a54u, 0x00000a55u, 0x0004002bu, - 0x00000009u, 0x00000a57u, 0x3da0a0a1u, 0x0004002bu, 0x00000009u, 0x00000a58u, 0x3f7efeffu, 0x0004002bu, - 0x00000009u, 0x00000a59u, 0x3f39b9bau, 0x0006002cu, 0x00000016u, 0x00000a5au, 0x00000a57u, 0x00000a58u, - 0x00000a59u, 0x0006002cu, 0x00000016u, 0x00000a5bu, 0x00000a4du, 0x00000a4du, 0x00000a4du, 0x0004002bu, - 0x00000009u, 0x00000a5cu, 0x3d008081u, 0x0004002bu, 0x00000009u, 0x00000a5du, 0x3c008081u, 0x0006002cu, - 0x00000016u, 0x00000a5eu, 0x00000a5cu, 0x00000a5du, 0x00000037u, 0x0004002bu, 0x00000009u, 0x00000a5fu, - 0x3ea0a0a1u, 0x0004002bu, 0x00000009u, 0x00000a60u, 0x3ef0f0f1u, 0x0006002cu, 0x00000016u, 0x00000a61u, - 0x00000a5fu, 0x00000a5fu, 0x00000a60u, 0x0004002bu, 0x00000009u, 0x00000a62u, 0x3e70f0f1u, 0x0006002cu, - 0x00000016u, 0x00000a63u, 0x00000a62u, 0x00000a60u, 0x00000a62u, 0x0006002cu, 0x00000016u, 0x00000a64u, - 0x00000a60u, 0x00000a5fu, 0x00000a5fu, 0x0006002cu, 0x00000016u, 0x00000a65u, 0x00000037u, 0x00000037u, - 0x00000037u, 0x0006002cu, 0x00000016u, 0x00000a66u, 0x00000037u, 0x00000037u, 0x00000046u, 0x0004002bu, - 0x00000009u, 0x00000a67u, 0x40e00000u, 0x0004002bu, 0x00000009u, 0x00000a68u, 0x41400000u, 0x0004002bu, - 0x00000009u, 0x00000a69u, 0x40a00000u, 0x0004002bu, 0x00000009u, 0x00000a6au, 0x40400000u, 0x0003001du, - 0x00000a6bu, 0x0000000au, 0x0003001eu, 0x00000a6cu, 0x00000a6bu, 0x00040020u, 0x00000a6du, 0x0000000cu, - 0x00000a6cu, 0x0004003bu, 0x00000a6du, 0x00000a6eu, 0x0000000cu, 0x0003001du, 0x00000a6fu, 0x00000318u, - 0x0003001eu, 0x00000a70u, 0x00000a6fu, 0x00040020u, 0x00000a71u, 0x0000000cu, 0x00000a70u, 0x0004003bu, - 0x00000a71u, 0x00000a72u, 0x0000000cu, 0x0003001du, 0x00000a73u, 0x00000307u, 0x0003001eu, 0x00000a74u, - 0x00000a73u, 0x00040020u, 0x00000a75u, 0x0000000cu, 0x00000a74u, 0x0004003bu, 0x00000a75u, 0x00000a76u, - 0x0000000cu, 0x0003001du, 0x00000a77u, 0x00000355u, 0x0003001eu, 0x00000a78u, 0x00000a77u, 0x00040020u, - 0x00000a79u, 0x0000000cu, 0x00000a78u, 0x0004003bu, 0x00000a79u, 0x00000a7au, 0x0000000cu, 0x0003001du, - 0x00000a7bu, 0x00000009u, 0x0003001eu, 0x00000a7cu, 0x00000a7bu, 0x00040020u, 0x00000a7du, 0x0000000cu, - 0x00000a7cu, 0x0004003bu, 0x00000a7du, 0x00000a7eu, 0x0000000cu, 0x0012001eu, 0x00000a7fu, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0003001du, - 0x00000a80u, 0x00000a7fu, 0x0003001eu, 0x00000a81u, 0x00000a80u, 0x00040020u, 0x00000a82u, 0x0000000cu, - 0x00000a81u, 0x0004003bu, 0x00000a82u, 0x00000a83u, 0x0000000cu, 0x0012001eu, 0x00000a84u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0003001du, - 0x00000a85u, 0x00000a84u, 0x0003001eu, 0x00000a86u, 0x00000a85u, 0x00040020u, 0x00000a87u, 0x0000000cu, - 0x00000a86u, 0x0004003bu, 0x00000a87u, 0x00000a88u, 0x0000000cu, 0x0006002cu, 0x00000307u, 0x00000a89u, - 0x00000007u, 0x00000008u, 0x00000008u, 0x0004002bu, 0x00000006u, 0x00000a8au, 0x0000003eu, 0x0004002bu, - 0x00000006u, 0x00000a8bu, 0x0000003fu, 0x0004002bu, 0x00000006u, 0x00000a8cu, 0x0000003du, 0x00050036u, - 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000010u, - 0x00000305u, 0x00000007u, 0x0004003bu, 0x00000010u, 0x00000306u, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x0000030du, 0x00000007u, 0x0004003bu, 0x00000010u, 0x00000311u, 0x00000007u, 0x0004003bu, 0x0000031au, - 0x0000031bu, 0x00000007u, 0x0004003bu, 0x00000329u, 0x0000032au, 0x00000007u, 0x0004003bu, 0x00000338u, - 0x00000339u, 0x00000007u, 0x0004003bu, 0x0000001cu, 0x00000348u, 0x00000007u, 0x0004003bu, 0x0000001au, - 0x00000354u, 0x00000007u, 0x0004003bu, 0x00000010u, 0x00000360u, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x00000363u, 0x00000007u, 0x0004003bu, 0x00000010u, 0x00000369u, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x0000036du, 0x00000007u, 0x0004003bu, 0x00000010u, 0x00000372u, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x0000037cu, 0x00000007u, 0x0004003bu, 0x00000010u, 0x00000393u, 0x00000007u, 0x0004003bu, 0x00000039u, - 0x0000039bu, 0x00000007u, 0x0004003bu, 0x00000010u, 0x000003a0u, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x000003a4u, 0x00000007u, 0x0004003bu, 0x00000010u, 0x000003afu, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x000003b8u, 0x00000007u, 0x0004003bu, 0x00000010u, 0x000003bcu, 0x00000007u, 0x0004003bu, 0x000003c1u, - 0x000003c2u, 0x00000007u, 0x0004003bu, 0x00000017u, 0x000003cdu, 0x00000007u, 0x0004003bu, 0x0000000bu, - 0x000003d5u, 0x00000007u, 0x0004003bu, 0x00000017u, 0x000003d6u, 0x00000007u, 0x0004003bu, 0x0000001au, - 0x000003d8u, 0x00000007u, 0x0004003bu, 0x0000001cu, 0x000003dau, 0x00000007u, 0x0004003bu, 0x00000039u, - 0x000003ddu, 0x00000007u, 0x0004003bu, 0x000000f5u, 0x000003e5u, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x000003f9u, 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000405u, 0x00000007u, 0x0004003bu, 0x0000000bu, - 0x00000406u, 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000409u, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x0000040du, 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000415u, 0x00000007u, 0x0004003bu, 0x000000f5u, - 0x0000041au, 0x00000007u, 0x0004003bu, 0x000000f5u, 0x00000422u, 0x00000007u, 0x0004003bu, 0x0000000bu, - 0x00000426u, 0x00000007u, 0x0004003bu, 0x00000010u, 0x00000448u, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x0000044bu, 0x00000007u, 0x0004003bu, 0x00000010u, 0x00000453u, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x0000048eu, 0x00000007u, 0x0004003bu, 0x00000010u, 0x00000491u, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x00000494u, 0x00000007u, 0x0004003bu, 0x00000010u, 0x00000499u, 0x00000007u, 0x0004003bu, 0x0000049du, - 0x0000049eu, 0x00000007u, 0x0004003bu, 0x0000049du, 0x000004a1u, 0x00000007u, 0x0004003bu, 0x00000039u, - 0x000004abu, 0x00000007u, 0x0004003bu, 0x00000010u, 0x000004afu, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x000004c1u, 0x00000007u, 0x0004003bu, 0x00000010u, 0x000004c9u, 0x00000007u, 0x0004003bu, 0x0000049du, - 0x000004cau, 0x00000007u, 0x0004003bu, 0x0000049du, 0x000004ccu, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x000004d8u, 0x00000007u, 0x0004003bu, 0x000003c1u, 0x000004ddu, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x000004f9u, 0x00000007u, 0x0004003bu, 0x000003c1u, 0x000004feu, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x0000050cu, 0x00000007u, 0x0004003bu, 0x00000010u, 0x00000515u, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x00000519u, 0x00000007u, 0x0004003bu, 0x00000010u, 0x0000051du, 0x00000007u, 0x0004003bu, 0x000003c1u, - 0x00000522u, 0x00000007u, 0x0004003bu, 0x000003c1u, 0x00000527u, 0x00000007u, 0x0004003bu, 0x00000017u, - 0x0000052cu, 0x00000007u, 0x0004003bu, 0x00000017u, 0x00000534u, 0x00000007u, 0x0004003bu, 0x00000039u, - 0x0000053cu, 0x00000007u, 0x0004003bu, 0x00000017u, 0x0000053du, 0x00000007u, 0x0004003bu, 0x00000017u, - 0x0000053fu, 0x00000007u, 0x0004003bu, 0x00000023u, 0x00000541u, 0x00000007u, 0x0004003bu, 0x0000001cu, - 0x00000544u, 0x00000007u, 0x0004003bu, 0x00000010u, 0x00000547u, 0x00000007u, 0x0004003bu, 0x00000039u, - 0x00000548u, 0x00000007u, 0x0004003bu, 0x00000010u, 0x0000057du, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x00000589u, 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000592u, 0x00000007u, 0x0004003bu, 0x00000017u, - 0x00000598u, 0x00000007u, 0x0004003bu, 0x00000010u, 0x000005c1u, 0x00000007u, 0x0004003bu, 0x0000049du, - 0x000005c5u, 0x00000007u, 0x0004003bu, 0x0000049du, 0x000005c9u, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x000005d5u, 0x00000007u, 0x0004003bu, 0x00000017u, 0x000005dfu, 0x00000007u, 0x0004003bu, 0x0000000bu, - 0x000005e3u, 0x00000007u, 0x0004003bu, 0x00000017u, 0x000005e4u, 0x00000007u, 0x0004003bu, 0x0000001au, - 0x000005e6u, 0x00000007u, 0x0004003bu, 0x0000001cu, 0x000005e8u, 0x00000007u, 0x0004003bu, 0x00000039u, - 0x000005efu, 0x00000007u, 0x0004003bu, 0x00000010u, 0x00000612u, 0x00000007u, 0x0004003bu, 0x0000049du, - 0x00000615u, 0x00000007u, 0x0004003bu, 0x0000049du, 0x00000616u, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x00000617u, 0x00000007u, 0x0004003bu, 0x00000010u, 0x0000061du, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x00000623u, 0x00000007u, 0x0004003bu, 0x00000010u, 0x00000626u, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x00000628u, 0x00000007u, 0x0004003bu, 0x00000010u, 0x0000062du, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x00000631u, 0x00000007u, 0x0004003bu, 0x00000010u, 0x0000063bu, 0x00000007u, 0x0004003bu, 0x0000000bu, - 0x00000645u, 0x00000007u, 0x0004003bu, 0x000000f5u, 0x00000649u, 0x00000007u, 0x0004003bu, 0x00000039u, - 0x0000064du, 0x00000007u, 0x0004003bu, 0x000000f5u, 0x0000064eu, 0x00000007u, 0x0004003bu, 0x000000f5u, - 0x00000650u, 0x00000007u, 0x0004003bu, 0x0000049du, 0x00000651u, 0x00000007u, 0x0004003bu, 0x0000049du, - 0x00000654u, 0x00000007u, 0x0004003bu, 0x000000f5u, 0x00000659u, 0x00000007u, 0x0004003bu, 0x0000000bu, - 0x0000065bu, 0x00000007u, 0x0004003bu, 0x00000017u, 0x0000066fu, 0x00000007u, 0x0004003bu, 0x00000017u, - 0x00000674u, 0x00000007u, 0x0004003bu, 0x00000678u, 0x00000679u, 0x00000007u, 0x0004003bu, 0x00000017u, - 0x00000681u, 0x00000007u, 0x0004003bu, 0x0000000bu, 0x00000686u, 0x00000007u, 0x0004003bu, 0x00000017u, - 0x00000687u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000689u, 0x00000007u, 0x0004003bu, 0x0000001cu, - 0x0000068bu, 0x00000007u, 0x0004003bu, 0x0000000bu, 0x00000699u, 0x00000007u, 0x0004003bu, 0x00000017u, - 0x0000069au, 0x00000007u, 0x0004003bu, 0x0000001au, 0x0000069cu, 0x00000007u, 0x0004003bu, 0x0000001cu, - 0x0000069eu, 0x00000007u, 0x0004003bu, 0x00000039u, 0x000006a1u, 0x00000007u, 0x0004003bu, 0x00000017u, - 0x000006cfu, 0x00000007u, 0x0004003bu, 0x00000017u, 0x000006d4u, 0x00000007u, 0x0004003bu, 0x00000678u, - 0x000006d8u, 0x00000007u, 0x0004003bu, 0x00000017u, 0x000006e0u, 0x00000007u, 0x0004003bu, 0x0000000bu, - 0x000006e5u, 0x00000007u, 0x0004003bu, 0x00000017u, 0x000006e6u, 0x00000007u, 0x0004003bu, 0x0000001au, - 0x000006e8u, 0x00000007u, 0x0004003bu, 0x0000001cu, 0x000006eau, 0x00000007u, 0x0004003bu, 0x0000000bu, - 0x000006f8u, 0x00000007u, 0x0004003bu, 0x00000017u, 0x000006f9u, 0x00000007u, 0x0004003bu, 0x0000001au, - 0x000006fbu, 0x00000007u, 0x0004003bu, 0x0000001cu, 0x000006fdu, 0x00000007u, 0x0004003bu, 0x00000039u, - 0x00000700u, 0x00000007u, 0x0004003bu, 0x000000f5u, 0x0000071au, 0x00000007u, 0x0004003bu, 0x00000017u, - 0x0000072eu, 0x00000007u, 0x0004003bu, 0x00000017u, 0x00000732u, 0x00000007u, 0x0004003bu, 0x00000678u, - 0x00000737u, 0x00000007u, 0x0004003bu, 0x00000017u, 0x0000073fu, 0x00000007u, 0x0004003bu, 0x0000000bu, - 0x00000744u, 0x00000007u, 0x0004003bu, 0x00000017u, 0x00000745u, 0x00000007u, 0x0004003bu, 0x0000001au, - 0x00000747u, 0x00000007u, 0x0004003bu, 0x0000001cu, 0x00000749u, 0x00000007u, 0x0004003bu, 0x0000000bu, - 0x00000757u, 0x00000007u, 0x0004003bu, 0x00000017u, 0x00000758u, 0x00000007u, 0x0004003bu, 0x0000001au, - 0x0000075au, 0x00000007u, 0x0004003bu, 0x0000001cu, 0x0000075cu, 0x00000007u, 0x0004003bu, 0x00000039u, - 0x0000075fu, 0x00000007u, 0x0004003bu, 0x000000f5u, 0x00000776u, 0x00000007u, 0x0004003bu, 0x00000039u, - 0x0000077au, 0x00000007u, 0x0004003bu, 0x000000f5u, 0x00000788u, 0x00000007u, 0x0004003bu, 0x00000017u, - 0x0000079cu, 0x00000007u, 0x0004003bu, 0x00000017u, 0x000007a0u, 0x00000007u, 0x0004003bu, 0x00000678u, - 0x000007a5u, 0x00000007u, 0x0004003bu, 0x00000017u, 0x000007adu, 0x00000007u, 0x0004003bu, 0x0000000bu, - 0x000007b2u, 0x00000007u, 0x0004003bu, 0x00000017u, 0x000007b3u, 0x00000007u, 0x0004003bu, 0x0000001au, - 0x000007b5u, 0x00000007u, 0x0004003bu, 0x0000001cu, 0x000007b7u, 0x00000007u, 0x0004003bu, 0x0000000bu, - 0x000007c5u, 0x00000007u, 0x0004003bu, 0x00000017u, 0x000007c6u, 0x00000007u, 0x0004003bu, 0x0000001au, - 0x000007c8u, 0x00000007u, 0x0004003bu, 0x0000001cu, 0x000007cau, 0x00000007u, 0x0004003bu, 0x00000039u, - 0x000007cdu, 0x00000007u, 0x0004003bu, 0x000000f5u, 0x000007e4u, 0x00000007u, 0x0004003bu, 0x00000039u, - 0x000007e8u, 0x00000007u, 0x0004003bu, 0x00000039u, 0x000007f3u, 0x00000007u, 0x0004003bu, 0x000000f5u, - 0x00000805u, 0x00000007u, 0x0004003bu, 0x000000f5u, 0x0000080cu, 0x00000007u, 0x0004003bu, 0x000000f5u, - 0x00000813u, 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000817u, 0x00000007u, 0x0004003bu, 0x000000f5u, - 0x0000081eu, 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000823u, 0x00000007u, 0x0004003bu, 0x00000039u, - 0x00000829u, 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000854u, 0x00000007u, 0x0004003bu, 0x0000000bu, - 0x00000855u, 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000858u, 0x00000007u, 0x0004003bu, 0x00000039u, - 0x0000085cu, 0x00000007u, 0x0004003bu, 0x00000039u, 0x0000086au, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x00000879u, 0x00000007u, 0x0004003bu, 0x0000000bu, 0x000008a7u, 0x00000007u, 0x0004003bu, 0x000000f5u, - 0x000008aau, 0x00000007u, 0x0004003bu, 0x000000f5u, 0x000008adu, 0x00000007u, 0x0004003bu, 0x000000f5u, - 0x000008b0u, 0x00000007u, 0x0004003bu, 0x000000f5u, 0x000008b5u, 0x00000007u, 0x0004003bu, 0x000008c0u, - 0x000008c1u, 0x00000007u, 0x0004003bu, 0x00000039u, 0x000008c6u, 0x00000007u, 0x0004003bu, 0x0000000bu, - 0x000008c7u, 0x00000007u, 0x0004003bu, 0x00000039u, 0x000008cau, 0x00000007u, 0x0004003bu, 0x00000678u, - 0x000008ceu, 0x00000007u, 0x0004003bu, 0x00000039u, 0x000008d6u, 0x00000007u, 0x0004003bu, 0x000000f5u, - 0x000008dau, 0x00000007u, 0x0004003bu, 0x00000039u, 0x000008e5u, 0x00000007u, 0x0004003bu, 0x00000039u, - 0x000008f1u, 0x00000007u, 0x0004003bu, 0x00000010u, 0x00000919u, 0x00000007u, 0x0004003bu, 0x0000000bu, - 0x0000091cu, 0x00000007u, 0x0004003bu, 0x000000f5u, 0x00000920u, 0x00000007u, 0x0004003bu, 0x000000f5u, - 0x00000924u, 0x00000007u, 0x0004003bu, 0x000000f5u, 0x00000929u, 0x00000007u, 0x0004003bu, 0x000000f5u, - 0x0000092eu, 0x00000007u, 0x0004003bu, 0x000008c0u, 0x00000938u, 0x00000007u, 0x0004003bu, 0x00000039u, - 0x00000939u, 0x00000007u, 0x0004003bu, 0x0000000bu, 0x0000093au, 0x00000007u, 0x0004003bu, 0x00000039u, - 0x0000093du, 0x00000007u, 0x0004003bu, 0x00000678u, 0x00000941u, 0x00000007u, 0x0004003bu, 0x00000039u, - 0x00000949u, 0x00000007u, 0x0004003bu, 0x000000f5u, 0x0000094du, 0x00000007u, 0x0004003bu, 0x00000039u, - 0x00000958u, 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000964u, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x0000098au, 0x00000007u, 0x0004003bu, 0x00000010u, 0x0000098bu, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x00000994u, 0x00000007u, 0x0004003bu, 0x00000010u, 0x00000997u, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x0000099bu, 0x00000007u, 0x0004003bu, 0x00000010u, 0x0000099fu, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x000009b9u, 0x00000007u, 0x0004003bu, 0x00000010u, 0x000009bbu, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x000009bcu, 0x00000007u, 0x0004003bu, 0x00000010u, 0x000009bdu, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x000009c0u, 0x00000007u, 0x0004003bu, 0x00000010u, 0x000009c3u, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x000009e9u, 0x00000007u, 0x0004003bu, 0x00000010u, 0x000009ecu, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x000009eeu, 0x00000007u, 0x0004003bu, 0x00000010u, 0x000009f1u, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x000009f5u, 0x00000007u, 0x0004003bu, 0x00000010u, 0x000009f8u, 0x00000007u, 0x0004003bu, 0x00000010u, - 0x000009fbu, 0x00000007u, 0x0004003bu, 0x00000010u, 0x00000a1eu, 0x00000007u, 0x0003003eu, 0x00000305u, - 0x0000007du, 0x00050041u, 0x0000030au, 0x0000030bu, 0x00000309u, 0x0000007du, 0x0004003du, 0x00000006u, - 0x0000030cu, 0x0000030bu, 0x0003003eu, 0x00000306u, 0x0000030cu, 0x00050041u, 0x0000030au, 0x0000030fu, - 0x0000030eu, 0x0000007du, 0x0004003du, 0x00000006u, 0x00000310u, 0x0000030fu, 0x0003003eu, 0x0000030du, - 0x00000310u, 0x00050041u, 0x00000315u, 0x00000316u, 0x00000314u, 0x0000008du, 0x0004003du, 0x00000006u, - 0x00000317u, 0x00000316u, 0x0003003eu, 0x00000311u, 0x00000317u, 0x00050041u, 0x00000315u, 0x00000321u, - 0x00000314u, 0x00000054u, 0x0004003du, 0x00000006u, 0x00000322u, 0x00000321u, 0x00060041u, 0x00000323u, - 0x00000324u, 0x00000320u, 0x00000054u, 0x00000322u, 0x0004003du, 0x0000031cu, 0x00000325u, 0x00000324u, - 0x00040190u, 0x00000319u, 0x00000326u, 0x00000325u, 0x0003003eu, 0x0000031bu, 0x00000326u, 0x00050041u, - 0x00000010u, 0x00000331u, 0x0000031bu, 0x00000054u, 0x0004003du, 0x00000006u, 0x00000332u, 0x00000331u, - 0x00060041u, 0x00000333u, 0x00000334u, 0x00000330u, 0x00000054u, 0x00000332u, 0x0004003du, 0x0000032cu, - 0x00000335u, 0x00000334u, 0x00040190u, 0x00000328u, 0x00000336u, 0x00000335u, 0x0003003eu, 0x0000032au, - 0x00000336u, 0x00050041u, 0x00000010u, 0x0000033fu, 0x0000032au, 0x0000011cu, 0x0004003du, 0x00000006u, - 0x00000340u, 0x0000033fu, 0x00050041u, 0x00000315u, 0x00000341u, 0x00000314u, 0x0000011cu, 0x0004003du, - 0x00000006u, 0x00000342u, 0x00000341u, 0x00050080u, 0x00000006u, 0x00000343u, 0x00000340u, 0x00000342u, - 0x00060041u, 0x00000344u, 0x00000345u, 0x0000033eu, 0x00000054u, 0x00000343u, 0x0004003du, 0x0000033au, - 0x00000346u, 0x00000345u, 0x00040190u, 0x00000337u, 0x00000347u, 0x00000346u, 0x0003003eu, 0x00000339u, - 0x00000347u, 0x00050041u, 0x00000010u, 0x0000034eu, 0x0000031bu, 0x0000011cu, 0x0004003du, 0x00000006u, - 0x0000034fu, 0x0000034eu, 0x00060041u, 0x00000350u, 0x00000351u, 0x0000034du, 0x00000054u, 0x0000034fu, - 0x0004003du, 0x00000349u, 0x00000352u, 0x00000351u, 0x00040190u, 0x0000001bu, 0x00000353u, 0x00000352u, - 0x0003003eu, 0x00000348u, 0x00000353u, 0x00050041u, 0x00000315u, 0x0000035au, 0x00000314u, 0x00000054u, - 0x0004003du, 0x00000006u, 0x0000035bu, 0x0000035au, 0x00060041u, 0x0000035cu, 0x0000035du, 0x00000359u, - 0x00000054u, 0x0000035bu, 0x0004003du, 0x00000355u, 0x0000035eu, 0x0000035du, 0x00040190u, 0x00000019u, - 0x0000035fu, 0x0000035eu, 0x0003003eu, 0x00000354u, 0x0000035fu, 0x00050041u, 0x00000315u, 0x00000361u, - 0x00000314u, 0x0000002fu, 0x0004003du, 0x00000006u, 0x00000362u, 0x00000361u, 0x0003003eu, 0x00000360u, - 0x00000362u, 0x00050041u, 0x00000010u, 0x00000364u, 0x00000339u, 0x0000008du, 0x0004003du, 0x00000006u, - 0x00000365u, 0x00000364u, 0x0003003eu, 0x00000363u, 0x00000365u, 0x00050039u, 0x00000011u, 0x00000366u, - 0x00000014u, 0x00000363u, 0x000300f7u, 0x00000368u, 0x00000000u, 0x000400fau, 0x00000366u, 0x00000367u, - 0x00000368u, 0x000200f8u, 0x00000367u, 0x0004003du, 0x00000006u, 0x0000036au, 0x00000306u, 0x00050084u, - 0x00000006u, 0x0000036cu, 0x0000036au, 0x0000036bu, 0x0003003eu, 0x00000369u, 0x0000036cu, 0x0004003du, - 0x00000006u, 0x0000036eu, 0x00000369u, 0x00050080u, 0x00000006u, 0x0000036fu, 0x0000036eu, 0x0000036bu, - 0x0004003du, 0x00000006u, 0x00000370u, 0x00000311u, 0x0007000cu, 0x00000006u, 0x00000371u, 0x00000001u, - 0x00000026u, 0x0000036fu, 0x00000370u, 0x0003003eu, 0x0000036du, 0x00000371u, 0x0004003du, 0x00000006u, - 0x00000373u, 0x0000036du, 0x0004003du, 0x00000006u, 0x00000374u, 0x00000369u, 0x00050082u, 0x00000006u, - 0x00000375u, 0x00000373u, 0x00000374u, 0x0003003eu, 0x00000372u, 0x00000375u, 0x0004003du, 0x00000006u, - 0x00000376u, 0x00000372u, 0x000500aau, 0x00000011u, 0x00000377u, 0x00000376u, 0x0000007du, 0x000300f7u, - 0x00000379u, 0x00000000u, 0x000400fau, 0x00000377u, 0x00000378u, 0x00000379u, 0x000200f8u, 0x00000378u, - 0x0003003eu, 0x00000305u, 0x0000007du, 0x0004003du, 0x00000006u, 0x0000037au, 0x00000305u, 0x000314afu, - 0x0000007du, 0x0000037au, 0x000100fdu, 0x000200f8u, 0x00000379u, 0x0003003eu, 0x0000037cu, 0x0000007du, - 0x00050041u, 0x00000315u, 0x0000037du, 0x00000314u, 0x00000082u, 0x0004003du, 0x00000006u, 0x0000037eu, - 0x0000037du, 0x000500acu, 0x00000011u, 0x0000037fu, 0x0000037eu, 0x0000007du, 0x000300f7u, 0x00000381u, - 0x00000000u, 0x000400fau, 0x0000037fu, 0x00000380u, 0x00000381u, 0x000200f8u, 0x00000380u, 0x00050041u, - 0x00000010u, 0x00000386u, 0x0000032au, 0x000000c6u, 0x0004003du, 0x00000006u, 0x00000387u, 0x00000386u, - 0x00050041u, 0x00000010u, 0x00000388u, 0x00000339u, 0x0000002fu, 0x0004003du, 0x00000006u, 0x00000389u, - 0x00000388u, 0x00050080u, 0x00000006u, 0x0000038au, 0x00000387u, 0x00000389u, 0x00050041u, 0x00000315u, - 0x0000038bu, 0x00000314u, 0x00000082u, 0x0004003du, 0x00000006u, 0x0000038cu, 0x0000038bu, 0x00050080u, - 0x00000006u, 0x0000038du, 0x0000038au, 0x0000038cu, 0x00050082u, 0x00000006u, 0x0000038eu, 0x0000038du, - 0x00000008u, 0x00060041u, 0x0000038fu, 0x00000390u, 0x00000385u, 0x00000054u, 0x0000038eu, 0x0004003du, - 0x0000002bu, 0x00000391u, 0x00000390u, 0x0004007cu, 0x00000006u, 0x00000392u, 0x00000391u, 0x0003003eu, - 0x0000037cu, 0x00000392u, 0x000200f9u, 0x00000381u, 0x000200f8u, 0x00000381u, 0x00050041u, 0x00000010u, - 0x00000394u, 0x0000032au, 0x000000ccu, 0x0004003du, 0x00000006u, 0x00000395u, 0x00000394u, 0x00050041u, - 0x00000010u, 0x00000396u, 0x00000339u, 0x000000c6u, 0x0004003du, 0x00000006u, 0x00000397u, 0x00000396u, - 0x00050080u, 0x00000006u, 0x00000398u, 0x00000395u, 0x00000397u, 0x0004003du, 0x00000006u, 0x00000399u, - 0x0000037cu, 0x00050080u, 0x00000006u, 0x0000039au, 0x00000398u, 0x00000399u, 0x0003003eu, 0x00000393u, - 0x0000039au, 0x00050041u, 0x0000039cu, 0x0000039du, 0x00000314u, 0x000000b9u, 0x0004003du, 0x00000009u, - 0x0000039eu, 0x0000039du, 0x00050085u, 0x00000009u, 0x0000039fu, 0x0000039eu, 0x00000033u, 0x0003003eu, - 0x0000039bu, 0x0000039fu, 0x0004003du, 0x00000006u, 0x000003a1u, 0x00000372u, 0x00050084u, 0x00000006u, - 0x000003a3u, 0x000003a1u, 0x000003a2u, 0x0003003eu, 0x000003a0u, 0x000003a3u, 0x0004003du, 0x00000006u, - 0x000003a5u, 0x00000372u, 0x00050084u, 0x00000006u, 0x000003a7u, 0x000003a5u, 0x000003a6u, 0x0003003eu, - 0x000003a4u, 0x000003a7u, 0x0004003du, 0x00000006u, 0x000003a8u, 0x000003a4u, 0x0003003eu, 0x00000305u, - 0x000003a8u, 0x0004003du, 0x00000006u, 0x000003a9u, 0x000003a0u, 0x0004003du, 0x00000006u, 0x000003aau, - 0x00000305u, 0x000314afu, 0x000003a9u, 0x000003aau, 0x0004003du, 0x00000006u, 0x000003abu, 0x0000030du, - 0x000500aau, 0x00000011u, 0x000003acu, 0x000003abu, 0x0000007du, 0x000300f7u, 0x000003aeu, 0x00000000u, - 0x000400fau, 0x000003acu, 0x000003adu, 0x000003aeu, 0x000200f8u, 0x000003adu, 0x0003003eu, 0x000003afu, - 0x0000007du, 0x000200f9u, 0x000003b0u, 0x000200f8u, 0x000003b0u, 0x000400f6u, 0x000003b2u, 0x000003b3u, - 0x00000000u, 0x000200f9u, 0x000003b4u, 0x000200f8u, 0x000003b4u, 0x0004003du, 0x00000006u, 0x000003b5u, - 0x000003afu, 0x0004003du, 0x00000006u, 0x000003b6u, 0x00000372u, 0x000500b0u, 0x00000011u, 0x000003b7u, - 0x000003b5u, 0x000003b6u, 0x000400fau, 0x000003b7u, 0x000003b1u, 0x000003b2u, 0x000200f8u, 0x000003b1u, - 0x0004003du, 0x00000006u, 0x000003b9u, 0x00000369u, 0x0004003du, 0x00000006u, 0x000003bau, 0x000003afu, - 0x00050080u, 0x00000006u, 0x000003bbu, 0x000003b9u, 0x000003bau, 0x0003003eu, 0x000003b8u, 0x000003bbu, - 0x0004003du, 0x00000006u, 0x000003bdu, 0x00000393u, 0x0004003du, 0x00000006u, 0x000003beu, 0x000003b8u, - 0x00050080u, 0x00000006u, 0x000003bfu, 0x000003bdu, 0x000003beu, 0x0003003eu, 0x000003bcu, 0x000003bfu, - 0x0004003du, 0x00000006u, 0x000003c8u, 0x000003bcu, 0x00060041u, 0x000003c9u, 0x000003cau, 0x000003c7u, - 0x00000054u, 0x000003c8u, 0x0004003du, 0x000003c3u, 0x000003cbu, 0x000003cau, 0x00040190u, 0x000003c0u, - 0x000003ccu, 0x000003cbu, 0x0003003eu, 0x000003c2u, 0x000003ccu, 0x00050041u, 0x00000039u, 0x000003ceu, - 0x000003c2u, 0x00000054u, 0x0004003du, 0x00000009u, 0x000003cfu, 0x000003ceu, 0x00050041u, 0x00000039u, - 0x000003d0u, 0x000003c2u, 0x0000011cu, 0x0004003du, 0x00000009u, 0x000003d1u, 0x000003d0u, 0x00050041u, - 0x00000039u, 0x000003d2u, 0x000003c2u, 0x00000082u, 0x0004003du, 0x00000009u, 0x000003d3u, 0x000003d2u, - 0x00060050u, 0x00000016u, 0x000003d4u, 0x000003cfu, 0x000003d1u, 0x000003d3u, 0x0003003eu, 0x000003cdu, - 0x000003d4u, 0x0004003du, 0x00000016u, 0x000003d7u, 0x000003cdu, 0x0003003eu, 0x000003d6u, 0x000003d7u, - 0x0004003du, 0x00000019u, 0x000003d9u, 0x00000354u, 0x0003003eu, 0x000003d8u, 0x000003d9u, 0x0004003du, - 0x0000001bu, 0x000003dbu, 0x00000348u, 0x0003003eu, 0x000003dau, 0x000003dbu, 0x00070039u, 0x0000000au, - 0x000003dcu, 0x00000021u, 0x000003d6u, 0x000003d8u, 0x000003dau, 0x0003003eu, 0x000003d5u, 0x000003dcu, - 0x00050041u, 0x00000039u, 0x000003deu, 0x000003d5u, 0x0000003eu, 0x0004003du, 0x00000009u, 0x000003dfu, - 0x000003deu, 0x0003003eu, 0x000003ddu, 0x000003dfu, 0x0004003du, 0x00000009u, 0x000003e0u, 0x000003ddu, - 0x0006000cu, 0x00000009u, 0x000003e1u, 0x00000001u, 0x00000004u, 0x000003e0u, 0x000500b8u, 0x00000011u, - 0x000003e2u, 0x000003e1u, 0x00000065u, 0x000300f7u, 0x000003e4u, 0x00000000u, 0x000400fau, 0x000003e2u, - 0x000003e3u, 0x000003e4u, 0x000200f8u, 0x000003e3u, 0x0003003eu, 0x000003ddu, 0x00000065u, 0x000200f9u, - 0x000003e4u, 0x000200f8u, 0x000003e4u, 0x00050041u, 0x00000039u, 0x000003e6u, 0x000003d5u, 0x0000007du, - 0x0004003du, 0x00000009u, 0x000003e7u, 0x000003e6u, 0x0004003du, 0x00000009u, 0x000003e8u, 0x000003ddu, - 0x00050088u, 0x00000009u, 0x000003e9u, 0x000003e7u, 0x000003e8u, 0x00050085u, 0x00000009u, 0x000003eau, - 0x000003e9u, 0x00000033u, 0x00050081u, 0x00000009u, 0x000003ebu, 0x000003eau, 0x00000033u, 0x00050041u, - 0x00000039u, 0x000003ecu, 0x00000348u, 0x00000082u, 0x0004003du, 0x00000009u, 0x000003edu, 0x000003ecu, - 0x00050085u, 0x00000009u, 0x000003eeu, 0x000003ebu, 0x000003edu, 0x00050041u, 0x00000039u, 0x000003efu, - 0x000003d5u, 0x00000008u, 0x0004003du, 0x00000009u, 0x000003f0u, 0x000003efu, 0x0004003du, 0x00000009u, - 0x000003f1u, 0x000003ddu, 0x00050088u, 0x00000009u, 0x000003f2u, 0x000003f0u, 0x000003f1u, 0x00050085u, - 0x00000009u, 0x000003f3u, 0x000003f2u, 0x00000033u, 0x00050083u, 0x00000009u, 0x000003f4u, 0x00000033u, - 0x000003f3u, 0x00050041u, 0x00000039u, 0x000003f5u, 0x00000348u, 0x0000008du, 0x0004003du, 0x00000009u, - 0x000003f6u, 0x000003f5u, 0x00050085u, 0x00000009u, 0x000003f7u, 0x000003f4u, 0x000003f6u, 0x00050050u, - 0x0000009au, 0x000003f8u, 0x000003eeu, 0x000003f7u, 0x0003003eu, 0x000003e5u, 0x000003f8u, 0x0004003du, - 0x00000006u, 0x000003fau, 0x000003afu, 0x00050084u, 0x00000006u, 0x000003fbu, 0x000003fau, 0x000003a2u, - 0x0003003eu, 0x000003f9u, 0x000003fbu, 0x0004003du, 0x00000006u, 0x00000401u, 0x000003f9u, 0x0004003du, - 0x0000000au, 0x00000402u, 0x000003d5u, 0x00060041u, 0x00000403u, 0x00000404u, 0x00000400u, 0x00000401u, - 0x00000054u, 0x0003003eu, 0x00000404u, 0x00000402u, 0x0004003du, 0x0000000au, 0x00000407u, 0x000003d5u, - 0x0003003eu, 0x00000406u, 0x00000407u, 0x00050039u, 0x00000009u, 0x00000408u, 0x0000000eu, 0x00000406u, - 0x0003003eu, 0x00000405u, 0x00000408u, 0x0004003du, 0x00000009u, 0x0000040au, 0x0000039bu, 0x0004003du, - 0x00000009u, 0x0000040bu, 0x00000405u, 0x00050085u, 0x00000009u, 0x0000040cu, 0x0000040au, 0x0000040bu, - 0x0003003eu, 0x00000409u, 0x0000040cu, 0x0003003eu, 0x0000040du, 0x0000007du, 0x000200f9u, 0x0000040eu, - 0x000200f8u, 0x0000040eu, 0x000400f6u, 0x00000410u, 0x00000411u, 0x00000000u, 0x000200f9u, 0x00000412u, - 0x000200f8u, 0x00000412u, 0x0004003du, 0x00000006u, 0x00000413u, 0x0000040du, 0x000500b0u, 0x00000011u, - 0x00000414u, 0x00000413u, 0x000003a6u, 0x000400fau, 0x00000414u, 0x0000040fu, 0x00000410u, 0x000200f8u, - 0x0000040fu, 0x0004003du, 0x00000006u, 0x00000416u, 0x0000040du, 0x00040070u, 0x00000009u, 0x00000417u, - 0x00000416u, 0x00050085u, 0x00000009u, 0x00000419u, 0x00000417u, 0x00000418u, 0x0003003eu, 0x00000415u, - 0x00000419u, 0x0004003du, 0x00000009u, 0x0000041bu, 0x00000415u, 0x0006000cu, 0x00000009u, 0x0000041cu, - 0x00000001u, 0x0000000eu, 0x0000041bu, 0x0004003du, 0x00000009u, 0x0000041du, 0x00000415u, 0x0006000cu, - 0x00000009u, 0x0000041eu, 0x00000001u, 0x0000000du, 0x0000041du, 0x00050050u, 0x0000009au, 0x0000041fu, - 0x0000041cu, 0x0000041eu, 0x0004003du, 0x00000009u, 0x00000420u, 0x00000409u, 0x0005008eu, 0x0000009au, - 0x00000421u, 0x0000041fu, 0x00000420u, 0x0003003eu, 0x0000041au, 0x00000421u, 0x0004003du, 0x0000009au, - 0x00000423u, 0x000003e5u, 0x0004003du, 0x0000009au, 0x00000424u, 0x0000041au, 0x00050081u, 0x0000009au, - 0x00000425u, 0x00000423u, 0x00000424u, 0x0003003eu, 0x00000422u, 0x00000425u, 0x00050041u, 0x00000039u, - 0x00000427u, 0x00000422u, 0x0000007du, 0x0004003du, 0x00000009u, 0x00000428u, 0x00000427u, 0x00050041u, - 0x00000039u, 0x00000429u, 0x00000348u, 0x00000082u, 0x0004003du, 0x00000009u, 0x0000042au, 0x00000429u, - 0x00050088u, 0x00000009u, 0x0000042bu, 0x00000428u, 0x0000042au, 0x00050085u, 0x00000009u, 0x0000042cu, - 0x0000042bu, 0x00000122u, 0x00050083u, 0x00000009u, 0x0000042du, 0x0000042cu, 0x00000037u, 0x0004003du, - 0x00000009u, 0x0000042eu, 0x000003ddu, 0x00050085u, 0x00000009u, 0x0000042fu, 0x0000042du, 0x0000042eu, - 0x00050041u, 0x00000039u, 0x00000430u, 0x00000426u, 0x0000007du, 0x0003003eu, 0x00000430u, 0x0000042fu, - 0x00050041u, 0x00000039u, 0x00000431u, 0x00000422u, 0x00000008u, 0x0004003du, 0x00000009u, 0x00000432u, - 0x00000431u, 0x00050041u, 0x00000039u, 0x00000433u, 0x00000348u, 0x0000008du, 0x0004003du, 0x00000009u, - 0x00000434u, 0x00000433u, 0x00050088u, 0x00000009u, 0x00000435u, 0x00000432u, 0x00000434u, 0x00050083u, - 0x00000009u, 0x00000436u, 0x00000033u, 0x00000435u, 0x00050085u, 0x00000009u, 0x00000437u, 0x00000436u, - 0x00000122u, 0x0004003du, 0x00000009u, 0x00000438u, 0x000003ddu, 0x00050085u, 0x00000009u, 0x00000439u, - 0x00000437u, 0x00000438u, 0x00050041u, 0x00000039u, 0x0000043au, 0x00000426u, 0x00000008u, 0x0003003eu, - 0x0000043au, 0x00000439u, 0x00050041u, 0x00000039u, 0x0000043bu, 0x000003d5u, 0x0000003bu, 0x0004003du, - 0x00000009u, 0x0000043cu, 0x0000043bu, 0x00050041u, 0x00000039u, 0x0000043du, 0x00000426u, 0x0000003bu, - 0x0003003eu, 0x0000043du, 0x0000043cu, 0x0004003du, 0x00000009u, 0x0000043eu, 0x000003ddu, 0x00050041u, - 0x00000039u, 0x0000043fu, 0x00000426u, 0x0000003eu, 0x0003003eu, 0x0000043fu, 0x0000043eu, 0x0004003du, - 0x00000006u, 0x00000440u, 0x000003f9u, 0x00050080u, 0x00000006u, 0x00000441u, 0x00000440u, 0x00000008u, - 0x0004003du, 0x00000006u, 0x00000442u, 0x0000040du, 0x00050080u, 0x00000006u, 0x00000443u, 0x00000441u, - 0x00000442u, 0x0004003du, 0x0000000au, 0x00000444u, 0x00000426u, 0x00060041u, 0x00000403u, 0x00000445u, - 0x00000400u, 0x00000443u, 0x00000054u, 0x0003003eu, 0x00000445u, 0x00000444u, 0x000200f9u, 0x00000411u, - 0x000200f8u, 0x00000411u, 0x0004003du, 0x00000006u, 0x00000446u, 0x0000040du, 0x00050080u, 0x00000006u, - 0x00000447u, 0x00000446u, 0x0000011cu, 0x0003003eu, 0x0000040du, 0x00000447u, 0x000200f9u, 0x0000040eu, - 0x000200f8u, 0x00000410u, 0x0004003du, 0x00000006u, 0x00000449u, 0x000003afu, 0x00050084u, 0x00000006u, - 0x0000044au, 0x00000449u, 0x000003a6u, 0x0003003eu, 0x00000448u, 0x0000044au, 0x0003003eu, 0x0000044bu, - 0x0000007du, 0x000200f9u, 0x0000044cu, 0x000200f8u, 0x0000044cu, 0x000400f6u, 0x0000044eu, 0x0000044fu, - 0x00000000u, 0x000200f9u, 0x00000450u, 0x000200f8u, 0x00000450u, 0x0004003du, 0x00000006u, 0x00000451u, - 0x0000044bu, 0x000500b0u, 0x00000011u, 0x00000452u, 0x00000451u, 0x000003a6u, 0x000400fau, 0x00000452u, - 0x0000044du, 0x0000044eu, 0x000200f8u, 0x0000044du, 0x0004003du, 0x00000006u, 0x00000454u, 0x0000044bu, - 0x00050080u, 0x00000006u, 0x00000455u, 0x00000454u, 0x00000008u, 0x00050089u, 0x00000006u, 0x00000456u, - 0x00000455u, 0x000003a6u, 0x0003003eu, 0x00000453u, 0x00000456u, 0x0004003du, 0x00000006u, 0x0000045bu, - 0x00000448u, 0x0004003du, 0x00000006u, 0x0000045cu, 0x0000044bu, 0x00050080u, 0x00000006u, 0x0000045du, - 0x0000045bu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000045eu, 0x000003f9u, 0x0004003du, 0x00000006u, - 0x0000045fu, 0x000003f9u, 0x00050080u, 0x00000006u, 0x00000460u, 0x0000045fu, 0x00000008u, 0x0004003du, - 0x00000006u, 0x00000461u, 0x0000044bu, 0x00050080u, 0x00000006u, 0x00000462u, 0x00000460u, 0x00000461u, - 0x0004003du, 0x00000006u, 0x00000463u, 0x000003f9u, 0x00050080u, 0x00000006u, 0x00000464u, 0x00000463u, - 0x00000008u, 0x0004003du, 0x00000006u, 0x00000465u, 0x00000453u, 0x00050080u, 0x00000006u, 0x00000466u, - 0x00000464u, 0x00000465u, 0x00060050u, 0x00000307u, 0x00000467u, 0x0000045eu, 0x00000462u, 0x00000466u, - 0x00050041u, 0x00000468u, 0x00000469u, 0x0000045au, 0x0000045du, 0x0003003eu, 0x00000469u, 0x00000467u, - 0x0004003du, 0x00000006u, 0x0000046eu, 0x00000448u, 0x0004003du, 0x00000006u, 0x0000046fu, 0x0000044bu, - 0x00050080u, 0x00000006u, 0x00000470u, 0x0000046eu, 0x0000046fu, 0x00050041u, 0x00000315u, 0x00000471u, - 0x00000314u, 0x00000054u, 0x0004003du, 0x00000006u, 0x00000472u, 0x00000471u, 0x0004007cu, 0x0000002bu, - 0x00000473u, 0x00000472u, 0x00060041u, 0x00000474u, 0x00000475u, 0x0000046du, 0x00000470u, 0x00000054u, - 0x0003003eu, 0x00000475u, 0x00000473u, 0x0004003du, 0x00000006u, 0x0000047au, 0x00000448u, 0x0004003du, - 0x00000006u, 0x0000047bu, 0x0000044bu, 0x00050080u, 0x00000006u, 0x0000047cu, 0x0000047au, 0x0000047bu, - 0x00050041u, 0x0000047du, 0x0000047eu, 0x00000314u, 0x00000079u, 0x0004003du, 0x00000016u, 0x0000047fu, - 0x0000047eu, 0x00060041u, 0x00000480u, 0x00000481u, 0x00000479u, 0x0000047cu, 0x00000054u, 0x0003003eu, - 0x00000481u, 0x0000047fu, 0x0004003du, 0x00000006u, 0x00000482u, 0x00000448u, 0x0004003du, 0x00000006u, - 0x00000483u, 0x0000044bu, 0x00050080u, 0x00000006u, 0x00000484u, 0x00000482u, 0x00000483u, 0x00050041u, - 0x0000039cu, 0x00000485u, 0x00000314u, 0x000000c6u, 0x0004003du, 0x00000009u, 0x00000486u, 0x00000485u, - 0x00060041u, 0x00000487u, 0x00000488u, 0x00000479u, 0x00000484u, 0x0000011cu, 0x0003003eu, 0x00000488u, - 0x00000486u, 0x000200f9u, 0x0000044fu, 0x000200f8u, 0x0000044fu, 0x0004003du, 0x00000006u, 0x00000489u, - 0x0000044bu, 0x00050080u, 0x00000006u, 0x0000048au, 0x00000489u, 0x0000011cu, 0x0003003eu, 0x0000044bu, - 0x0000048au, 0x000200f9u, 0x0000044cu, 0x000200f8u, 0x0000044eu, 0x000200f9u, 0x000003b3u, 0x000200f8u, - 0x000003b3u, 0x0004003du, 0x00000006u, 0x0000048bu, 0x000003afu, 0x00050080u, 0x00000006u, 0x0000048cu, - 0x0000048bu, 0x0000011cu, 0x0003003eu, 0x000003afu, 0x0000048cu, 0x000200f9u, 0x000003b0u, 0x000200f8u, - 0x000003b2u, 0x000200f9u, 0x000003aeu, 0x000200f8u, 0x000003aeu, 0x000100fdu, 0x000200f8u, 0x00000368u, - 0x0004003du, 0x00000006u, 0x0000048fu, 0x00000311u, 0x00050082u, 0x00000006u, 0x00000490u, 0x0000048fu, - 0x00000008u, 0x0003003eu, 0x0000048eu, 0x00000490u, 0x0004003du, 0x00000006u, 0x00000492u, 0x00000306u, - 0x00050084u, 0x00000006u, 0x00000493u, 0x00000492u, 0x0000003eu, 0x0003003eu, 0x00000491u, 0x00000493u, - 0x0004003du, 0x00000006u, 0x00000495u, 0x00000491u, 0x00050080u, 0x00000006u, 0x00000496u, 0x00000495u, - 0x0000003eu, 0x0004003du, 0x00000006u, 0x00000497u, 0x0000048eu, 0x0007000cu, 0x00000006u, 0x00000498u, - 0x00000001u, 0x00000026u, 0x00000496u, 0x00000497u, 0x0003003eu, 0x00000494u, 0x00000498u, 0x0004003du, - 0x00000006u, 0x0000049au, 0x00000494u, 0x0004003du, 0x00000006u, 0x0000049bu, 0x00000491u, 0x00050082u, - 0x00000006u, 0x0000049cu, 0x0000049au, 0x0000049bu, 0x0003003eu, 0x00000499u, 0x0000049cu, 0x0004003du, - 0x00000006u, 0x0000049fu, 0x00000306u, 0x000500aau, 0x00000011u, 0x000004a0u, 0x0000049fu, 0x0000007du, - 0x0003003eu, 0x0000049eu, 0x000004a0u, 0x0004003du, 0x00000006u, 0x000004a2u, 0x00000494u, 0x0004003du, - 0x00000006u, 0x000004a3u, 0x0000048eu, 0x000500aeu, 0x00000011u, 0x000004a4u, 0x000004a2u, 0x000004a3u, - 0x0003003eu, 0x000004a1u, 0x000004a4u, 0x0004003du, 0x00000006u, 0x000004a5u, 0x00000499u, 0x000500aau, - 0x00000011u, 0x000004a6u, 0x000004a5u, 0x0000007du, 0x000300f7u, 0x000004a8u, 0x00000000u, 0x000400fau, - 0x000004a6u, 0x000004a7u, 0x000004a8u, 0x000200f8u, 0x000004a7u, 0x0003003eu, 0x00000305u, 0x0000007du, - 0x0004003du, 0x00000006u, 0x000004a9u, 0x00000305u, 0x000314afu, 0x0000007du, 0x000004a9u, 0x000100fdu, - 0x000200f8u, 0x000004a8u, 0x00050041u, 0x0000039cu, 0x000004acu, 0x00000314u, 0x000000b9u, 0x0004003du, - 0x00000009u, 0x000004adu, 0x000004acu, 0x00050085u, 0x00000009u, 0x000004aeu, 0x000004adu, 0x00000033u, - 0x0003003eu, 0x000004abu, 0x000004aeu, 0x0003003eu, 0x000004afu, 0x0000007du, 0x00050041u, 0x00000315u, - 0x000004b0u, 0x00000314u, 0x00000082u, 0x0004003du, 0x00000006u, 0x000004b1u, 0x000004b0u, 0x000500acu, - 0x00000011u, 0x000004b2u, 0x000004b1u, 0x0000007du, 0x000300f7u, 0x000004b4u, 0x00000000u, 0x000400fau, - 0x000004b2u, 0x000004b3u, 0x000004b4u, 0x000200f8u, 0x000004b3u, 0x00050041u, 0x00000010u, 0x000004b5u, - 0x0000032au, 0x000000c6u, 0x0004003du, 0x00000006u, 0x000004b6u, 0x000004b5u, 0x00050041u, 0x00000010u, - 0x000004b7u, 0x00000339u, 0x0000002fu, 0x0004003du, 0x00000006u, 0x000004b8u, 0x000004b7u, 0x00050080u, - 0x00000006u, 0x000004b9u, 0x000004b6u, 0x000004b8u, 0x00050041u, 0x00000315u, 0x000004bau, 0x00000314u, - 0x00000082u, 0x0004003du, 0x00000006u, 0x000004bbu, 0x000004bau, 0x00050080u, 0x00000006u, 0x000004bcu, - 0x000004b9u, 0x000004bbu, 0x00050082u, 0x00000006u, 0x000004bdu, 0x000004bcu, 0x00000008u, 0x00060041u, - 0x0000038fu, 0x000004beu, 0x00000385u, 0x00000054u, 0x000004bdu, 0x0004003du, 0x0000002bu, 0x000004bfu, - 0x000004beu, 0x0004007cu, 0x00000006u, 0x000004c0u, 0x000004bfu, 0x0003003eu, 0x000004afu, 0x000004c0u, - 0x000200f9u, 0x000004b4u, 0x000200f8u, 0x000004b4u, 0x00050041u, 0x00000010u, 0x000004c2u, 0x0000032au, - 0x000000ccu, 0x0004003du, 0x00000006u, 0x000004c3u, 0x000004c2u, 0x00050041u, 0x00000010u, 0x000004c4u, - 0x00000339u, 0x000000c6u, 0x0004003du, 0x00000006u, 0x000004c5u, 0x000004c4u, 0x00050080u, 0x00000006u, - 0x000004c6u, 0x000004c3u, 0x000004c5u, 0x0004003du, 0x00000006u, 0x000004c7u, 0x000004afu, 0x00050080u, - 0x00000006u, 0x000004c8u, 0x000004c6u, 0x000004c7u, 0x0003003eu, 0x000004c1u, 0x000004c8u, 0x0003003eu, - 0x000004c9u, 0x0000007du, 0x0003003eu, 0x000004cau, 0x000004cbu, 0x0003003eu, 0x000004ccu, 0x000004cbu, - 0x0004003du, 0x00000006u, 0x000004cdu, 0x0000030du, 0x000500aau, 0x00000011u, 0x000004ceu, 0x000004cdu, - 0x0000007du, 0x000300f7u, 0x000004d0u, 0x00000000u, 0x000400fau, 0x000004ceu, 0x000004cfu, 0x000004d0u, - 0x000200f8u, 0x000004cfu, 0x0004003du, 0x00000011u, 0x000004d1u, 0x0000049eu, 0x000400a8u, 0x00000011u, - 0x000004d2u, 0x000004d1u, 0x0004003du, 0x00000006u, 0x000004d3u, 0x00000491u, 0x000500acu, 0x00000011u, - 0x000004d4u, 0x000004d3u, 0x0000007du, 0x000500a7u, 0x00000011u, 0x000004d5u, 0x000004d2u, 0x000004d4u, - 0x000300f7u, 0x000004d7u, 0x00000000u, 0x000400fau, 0x000004d5u, 0x000004d6u, 0x000004d7u, 0x000200f8u, - 0x000004d6u, 0x0004003du, 0x00000006u, 0x000004d9u, 0x000004c1u, 0x0004003du, 0x00000006u, 0x000004dau, - 0x00000491u, 0x00050080u, 0x00000006u, 0x000004dbu, 0x000004d9u, 0x000004dau, 0x00050082u, 0x00000006u, - 0x000004dcu, 0x000004dbu, 0x00000008u, 0x0003003eu, 0x000004d8u, 0x000004dcu, 0x0004003du, 0x00000006u, - 0x000004deu, 0x000004d8u, 0x00060041u, 0x000003c9u, 0x000004dfu, 0x000003c7u, 0x00000054u, 0x000004deu, - 0x0004003du, 0x000003c3u, 0x000004e0u, 0x000004dfu, 0x00040190u, 0x000003c0u, 0x000004e1u, 0x000004e0u, - 0x0003003eu, 0x000004ddu, 0x000004e1u, 0x00050041u, 0x00000039u, 0x000004e7u, 0x000004ddu, 0x00000054u, - 0x0004003du, 0x00000009u, 0x000004e8u, 0x000004e7u, 0x00050041u, 0x00000039u, 0x000004e9u, 0x000004ddu, - 0x0000011cu, 0x0004003du, 0x00000009u, 0x000004eau, 0x000004e9u, 0x00050041u, 0x00000039u, 0x000004ebu, - 0x000004ddu, 0x00000082u, 0x0004003du, 0x00000009u, 0x000004ecu, 0x000004ebu, 0x00060050u, 0x00000016u, - 0x000004edu, 0x000004e8u, 0x000004eau, 0x000004ecu, 0x00050041u, 0x000004eeu, 0x000004efu, 0x000004e5u, - 0x000004e6u, 0x0003003eu, 0x000004efu, 0x000004edu, 0x0003003eu, 0x000004cau, 0x000004f0u, 0x000200f9u, - 0x000004d7u, 0x000200f8u, 0x000004d7u, 0x0004003du, 0x00000011u, 0x000004f1u, 0x000004a1u, 0x000400a8u, - 0x00000011u, 0x000004f2u, 0x000004f1u, 0x0004003du, 0x00000006u, 0x000004f3u, 0x00000494u, 0x0004003du, - 0x00000006u, 0x000004f4u, 0x0000048eu, 0x000500b0u, 0x00000011u, 0x000004f5u, 0x000004f3u, 0x000004f4u, - 0x000500a7u, 0x00000011u, 0x000004f6u, 0x000004f2u, 0x000004f5u, 0x000300f7u, 0x000004f8u, 0x00000000u, - 0x000400fau, 0x000004f6u, 0x000004f7u, 0x000004f8u, 0x000200f8u, 0x000004f7u, 0x0004003du, 0x00000006u, - 0x000004fau, 0x000004c1u, 0x0004003du, 0x00000006u, 0x000004fbu, 0x00000494u, 0x00050080u, 0x00000006u, - 0x000004fcu, 0x000004fau, 0x000004fbu, 0x00050080u, 0x00000006u, 0x000004fdu, 0x000004fcu, 0x00000008u, - 0x0003003eu, 0x000004f9u, 0x000004fdu, 0x0004003du, 0x00000006u, 0x000004ffu, 0x000004f9u, 0x00060041u, - 0x000003c9u, 0x00000500u, 0x000003c7u, 0x00000054u, 0x000004ffu, 0x0004003du, 0x000003c3u, 0x00000501u, - 0x00000500u, 0x00040190u, 0x000003c0u, 0x00000502u, 0x00000501u, 0x0003003eu, 0x000004feu, 0x00000502u, - 0x00050041u, 0x00000039u, 0x00000504u, 0x000004feu, 0x00000054u, 0x0004003du, 0x00000009u, 0x00000505u, - 0x00000504u, 0x00050041u, 0x00000039u, 0x00000506u, 0x000004feu, 0x0000011cu, 0x0004003du, 0x00000009u, - 0x00000507u, 0x00000506u, 0x00050041u, 0x00000039u, 0x00000508u, 0x000004feu, 0x00000082u, 0x0004003du, - 0x00000009u, 0x00000509u, 0x00000508u, 0x00060050u, 0x00000016u, 0x0000050au, 0x00000505u, 0x00000507u, - 0x00000509u, 0x00050041u, 0x000004eeu, 0x0000050bu, 0x000004e5u, 0x00000503u, 0x0003003eu, 0x0000050bu, - 0x0000050au, 0x0003003eu, 0x000004ccu, 0x000004f0u, 0x000200f9u, 0x000004f8u, 0x000200f8u, 0x000004f8u, - 0x0003003eu, 0x0000050cu, 0x0000007du, 0x000200f9u, 0x0000050du, 0x000200f8u, 0x0000050du, 0x000400f6u, - 0x0000050fu, 0x00000510u, 0x00000000u, 0x000200f9u, 0x00000511u, 0x000200f8u, 0x00000511u, 0x0004003du, - 0x00000006u, 0x00000512u, 0x0000050cu, 0x0004003du, 0x00000006u, 0x00000513u, 0x00000499u, 0x000500b0u, - 0x00000011u, 0x00000514u, 0x00000512u, 0x00000513u, 0x000400fau, 0x00000514u, 0x0000050eu, 0x0000050fu, - 0x000200f8u, 0x0000050eu, 0x0004003du, 0x00000006u, 0x00000516u, 0x00000491u, 0x0004003du, 0x00000006u, - 0x00000517u, 0x0000050cu, 0x00050080u, 0x00000006u, 0x00000518u, 0x00000516u, 0x00000517u, 0x0003003eu, - 0x00000515u, 0x00000518u, 0x0004003du, 0x00000006u, 0x0000051au, 0x000004c1u, 0x0004003du, 0x00000006u, - 0x0000051bu, 0x00000515u, 0x00050080u, 0x00000006u, 0x0000051cu, 0x0000051au, 0x0000051bu, 0x0003003eu, - 0x00000519u, 0x0000051cu, 0x0004003du, 0x00000006u, 0x0000051eu, 0x000004c1u, 0x0004003du, 0x00000006u, - 0x0000051fu, 0x00000515u, 0x00050080u, 0x00000006u, 0x00000520u, 0x0000051eu, 0x0000051fu, 0x00050080u, - 0x00000006u, 0x00000521u, 0x00000520u, 0x00000008u, 0x0003003eu, 0x0000051du, 0x00000521u, 0x0004003du, - 0x00000006u, 0x00000523u, 0x00000519u, 0x00060041u, 0x000003c9u, 0x00000524u, 0x000003c7u, 0x00000054u, - 0x00000523u, 0x0004003du, 0x000003c3u, 0x00000525u, 0x00000524u, 0x00040190u, 0x000003c0u, 0x00000526u, - 0x00000525u, 0x0003003eu, 0x00000522u, 0x00000526u, 0x0004003du, 0x00000006u, 0x00000528u, 0x0000051du, - 0x00060041u, 0x000003c9u, 0x00000529u, 0x000003c7u, 0x00000054u, 0x00000528u, 0x0004003du, 0x000003c3u, - 0x0000052au, 0x00000529u, 0x00040190u, 0x000003c0u, 0x0000052bu, 0x0000052au, 0x0003003eu, 0x00000527u, - 0x0000052bu, 0x00050041u, 0x00000039u, 0x0000052du, 0x00000522u, 0x00000054u, 0x0004003du, 0x00000009u, - 0x0000052eu, 0x0000052du, 0x00050041u, 0x00000039u, 0x0000052fu, 0x00000522u, 0x0000011cu, 0x0004003du, - 0x00000009u, 0x00000530u, 0x0000052fu, 0x00050041u, 0x00000039u, 0x00000531u, 0x00000522u, 0x00000082u, - 0x0004003du, 0x00000009u, 0x00000532u, 0x00000531u, 0x00060050u, 0x00000016u, 0x00000533u, 0x0000052eu, - 0x00000530u, 0x00000532u, 0x0003003eu, 0x0000052cu, 0x00000533u, 0x00050041u, 0x00000039u, 0x00000535u, - 0x00000527u, 0x00000054u, 0x0004003du, 0x00000009u, 0x00000536u, 0x00000535u, 0x00050041u, 0x00000039u, - 0x00000537u, 0x00000527u, 0x0000011cu, 0x0004003du, 0x00000009u, 0x00000538u, 0x00000537u, 0x00050041u, - 0x00000039u, 0x00000539u, 0x00000527u, 0x00000082u, 0x0004003du, 0x00000009u, 0x0000053au, 0x00000539u, - 0x00060050u, 0x00000016u, 0x0000053bu, 0x00000536u, 0x00000538u, 0x0000053au, 0x0003003eu, 0x00000534u, - 0x0000053bu, 0x0004003du, 0x00000016u, 0x0000053eu, 0x0000052cu, 0x0003003eu, 0x0000053du, 0x0000053eu, - 0x0004003du, 0x00000016u, 0x00000540u, 0x00000534u, 0x0003003eu, 0x0000053fu, 0x00000540u, 0x00050041u, - 0x00000023u, 0x00000542u, 0x00000354u, 0x00000054u, 0x0004003du, 0x00000018u, 0x00000543u, 0x00000542u, - 0x0003003eu, 0x00000541u, 0x00000543u, 0x0004003du, 0x0000001bu, 0x00000545u, 0x00000348u, 0x0003003eu, - 0x00000544u, 0x00000545u, 0x00080039u, 0x00000009u, 0x00000546u, 0x00000029u, 0x0000053du, 0x0000053fu, - 0x00000541u, 0x00000544u, 0x0003003eu, 0x0000053cu, 0x00000546u, 0x0003003eu, 0x00000547u, 0x0000007du, - 0x00050041u, 0x00000030u, 0x00000549u, 0x0000002eu, 0x0000006du, 0x0004003du, 0x00000009u, 0x0000054au, - 0x00000549u, 0x0003003eu, 0x00000548u, 0x0000054au, 0x0004003du, 0x00000009u, 0x0000054bu, 0x00000548u, - 0x000500bau, 0x00000011u, 0x0000054cu, 0x0000054bu, 0x00000046u, 0x0004003du, 0x00000009u, 0x0000054du, - 0x0000053cu, 0x0004003du, 0x00000009u, 0x0000054eu, 0x00000548u, 0x000500bau, 0x00000011u, 0x0000054fu, - 0x0000054du, 0x0000054eu, 0x000500a7u, 0x00000011u, 0x00000550u, 0x0000054cu, 0x0000054fu, 0x000300f7u, - 0x00000552u, 0x00000000u, 0x000400fau, 0x00000550u, 0x00000551u, 0x00000552u, 0x000200f8u, 0x00000551u, - 0x0003003eu, 0x00000547u, 0x00000008u, 0x000200f9u, 0x00000552u, 0x000200f8u, 0x00000552u, 0x0004003du, - 0x00000009u, 0x00000553u, 0x00000548u, 0x000500bau, 0x00000011u, 0x00000554u, 0x00000553u, 0x00000046u, - 0x000300f7u, 0x00000556u, 0x00000000u, 0x000400fau, 0x00000554u, 0x00000555u, 0x00000556u, 0x000200f8u, - 0x00000555u, 0x0004003du, 0x00000009u, 0x00000557u, 0x0000053cu, 0x0004003du, 0x00000009u, 0x00000558u, - 0x00000548u, 0x00050085u, 0x00000009u, 0x0000055au, 0x00000558u, 0x00000559u, 0x000500bau, 0x00000011u, - 0x0000055bu, 0x00000557u, 0x0000055au, 0x000200f9u, 0x00000556u, 0x000200f8u, 0x00000556u, 0x000700f5u, - 0x00000011u, 0x0000055cu, 0x00000554u, 0x00000552u, 0x0000055bu, 0x00000555u, 0x000300f7u, 0x0000055eu, - 0x00000000u, 0x000400fau, 0x0000055cu, 0x0000055du, 0x0000055eu, 0x000200f8u, 0x0000055du, 0x0003003eu, - 0x00000547u, 0x0000003bu, 0x000200f9u, 0x0000055eu, 0x000200f8u, 0x0000055eu, 0x0004003du, 0x00000009u, - 0x0000055fu, 0x00000548u, 0x000500bau, 0x00000011u, 0x00000560u, 0x0000055fu, 0x00000046u, 0x000300f7u, - 0x00000562u, 0x00000000u, 0x000400fau, 0x00000560u, 0x00000561u, 0x00000562u, 0x000200f8u, 0x00000561u, - 0x0004003du, 0x00000009u, 0x00000563u, 0x0000053cu, 0x0004003du, 0x00000009u, 0x00000564u, 0x00000548u, - 0x00050085u, 0x00000009u, 0x00000566u, 0x00000564u, 0x00000565u, 0x000500bau, 0x00000011u, 0x00000567u, - 0x00000563u, 0x00000566u, 0x000200f9u, 0x00000562u, 0x000200f8u, 0x00000562u, 0x000700f5u, 0x00000011u, - 0x00000568u, 0x00000560u, 0x0000055eu, 0x00000567u, 0x00000561u, 0x000300f7u, 0x0000056au, 0x00000000u, - 0x000400fau, 0x00000568u, 0x00000569u, 0x0000056au, 0x000200f8u, 0x00000569u, 0x0003003eu, 0x00000547u, - 0x0000003eu, 0x000200f9u, 0x0000056au, 0x000200f8u, 0x0000056au, 0x0004003du, 0x00000009u, 0x0000056bu, - 0x00000548u, 0x000500bau, 0x00000011u, 0x0000056cu, 0x0000056bu, 0x00000046u, 0x000300f7u, 0x0000056eu, - 0x00000000u, 0x000400fau, 0x0000056cu, 0x0000056du, 0x0000056eu, 0x000200f8u, 0x0000056du, 0x0004003du, - 0x00000009u, 0x0000056fu, 0x0000053cu, 0x0004003du, 0x00000009u, 0x00000570u, 0x00000548u, 0x00050085u, - 0x00000009u, 0x00000572u, 0x00000570u, 0x00000571u, 0x000500bau, 0x00000011u, 0x00000573u, 0x0000056fu, - 0x00000572u, 0x000200f9u, 0x0000056eu, 0x000200f8u, 0x0000056eu, 0x000700f5u, 0x00000011u, 0x00000574u, - 0x0000056cu, 0x0000056au, 0x00000573u, 0x0000056du, 0x000300f7u, 0x00000576u, 0x00000000u, 0x000400fau, - 0x00000574u, 0x00000575u, 0x00000576u, 0x000200f8u, 0x00000575u, 0x0003003eu, 0x00000547u, 0x00000577u, - 0x000200f9u, 0x00000576u, 0x000200f8u, 0x00000576u, 0x0004003du, 0x00000006u, 0x00000578u, 0x00000547u, - 0x00050041u, 0x00000579u, 0x0000057au, 0x0000002eu, 0x000000deu, 0x0004003du, 0x00000006u, 0x0000057bu, - 0x0000057au, 0x0007000cu, 0x00000006u, 0x0000057cu, 0x00000001u, 0x00000026u, 0x00000578u, 0x0000057bu, - 0x0003003eu, 0x00000547u, 0x0000057cu, 0x0004003du, 0x00000006u, 0x0000057eu, 0x00000547u, 0x000500c4u, - 0x00000006u, 0x0000057fu, 0x00000008u, 0x0000057eu, 0x0003003eu, 0x0000057du, 0x0000057fu, 0x0004003du, - 0x00000006u, 0x00000580u, 0x0000050cu, 0x000500aau, 0x00000011u, 0x00000581u, 0x00000580u, 0x0000007du, - 0x000300f7u, 0x00000583u, 0x00000000u, 0x000400fau, 0x00000581u, 0x00000582u, 0x00000583u, 0x000200f8u, - 0x00000582u, 0x0004003du, 0x00000006u, 0x00000584u, 0x000004c9u, 0x0004003du, 0x00000016u, 0x00000585u, - 0x0000052cu, 0x00050041u, 0x000004eeu, 0x00000586u, 0x000004e5u, 0x00000584u, 0x0003003eu, 0x00000586u, - 0x00000585u, 0x0004003du, 0x00000006u, 0x00000587u, 0x000004c9u, 0x00050080u, 0x00000006u, 0x00000588u, - 0x00000587u, 0x0000011cu, 0x0003003eu, 0x000004c9u, 0x00000588u, 0x000200f9u, 0x00000583u, 0x000200f8u, - 0x00000583u, 0x0003003eu, 0x00000589u, 0x00000008u, 0x000200f9u, 0x0000058au, 0x000200f8u, 0x0000058au, - 0x000400f6u, 0x0000058cu, 0x0000058du, 0x00000000u, 0x000200f9u, 0x0000058eu, 0x000200f8u, 0x0000058eu, - 0x0004003du, 0x00000006u, 0x0000058fu, 0x00000589u, 0x0004003du, 0x00000006u, 0x00000590u, 0x0000057du, - 0x000500b2u, 0x00000011u, 0x00000591u, 0x0000058fu, 0x00000590u, 0x000400fau, 0x00000591u, 0x0000058bu, - 0x0000058cu, 0x000200f8u, 0x0000058bu, 0x0004003du, 0x00000006u, 0x00000593u, 0x00000589u, 0x00040070u, - 0x00000009u, 0x00000594u, 0x00000593u, 0x0004003du, 0x00000006u, 0x00000595u, 0x0000057du, 0x00040070u, - 0x00000009u, 0x00000596u, 0x00000595u, 0x00050088u, 0x00000009u, 0x00000597u, 0x00000594u, 0x00000596u, - 0x0003003eu, 0x00000592u, 0x00000597u, 0x0004003du, 0x00000016u, 0x00000599u, 0x0000052cu, 0x0004003du, - 0x00000016u, 0x0000059au, 0x00000534u, 0x0004003du, 0x00000009u, 0x0000059bu, 0x00000592u, 0x00060050u, - 0x00000016u, 0x0000059cu, 0x0000059bu, 0x0000059bu, 0x0000059bu, 0x0008000cu, 0x00000016u, 0x0000059du, - 0x00000001u, 0x0000002eu, 0x00000599u, 0x0000059au, 0x0000059cu, 0x0003003eu, 0x00000598u, 0x0000059du, - 0x0004003du, 0x00000006u, 0x0000059eu, 0x000004c9u, 0x0004003du, 0x00000016u, 0x0000059fu, 0x00000598u, - 0x00050041u, 0x000004eeu, 0x000005a0u, 0x000004e5u, 0x0000059eu, 0x0003003eu, 0x000005a0u, 0x0000059fu, - 0x0004003du, 0x00000006u, 0x000005a1u, 0x000004c9u, 0x00050080u, 0x00000006u, 0x000005a2u, 0x000005a1u, - 0x0000011cu, 0x0003003eu, 0x000004c9u, 0x000005a2u, 0x0004003du, 0x00000006u, 0x000005a3u, 0x000004c9u, - 0x000500aeu, 0x00000011u, 0x000005a5u, 0x000005a3u, 0x000005a4u, 0x000300f7u, 0x000005a7u, 0x00000000u, - 0x000400fau, 0x000005a5u, 0x000005a6u, 0x000005a7u, 0x000200f8u, 0x000005a6u, 0x000200f9u, 0x0000058cu, - 0x000200f8u, 0x000005a7u, 0x000200f9u, 0x0000058du, 0x000200f8u, 0x0000058du, 0x0004003du, 0x00000006u, - 0x000005a9u, 0x00000589u, 0x00050080u, 0x00000006u, 0x000005aau, 0x000005a9u, 0x0000011cu, 0x0003003eu, - 0x00000589u, 0x000005aau, 0x000200f9u, 0x0000058au, 0x000200f8u, 0x0000058cu, 0x0004003du, 0x00000006u, - 0x000005abu, 0x000004c9u, 0x000500aeu, 0x00000011u, 0x000005acu, 0x000005abu, 0x000005a4u, 0x000300f7u, - 0x000005aeu, 0x00000000u, 0x000400fau, 0x000005acu, 0x000005adu, 0x000005aeu, 0x000200f8u, 0x000005adu, - 0x000200f9u, 0x0000050fu, 0x000200f8u, 0x000005aeu, 0x000200f9u, 0x00000510u, 0x000200f8u, 0x00000510u, - 0x0004003du, 0x00000006u, 0x000005b0u, 0x0000050cu, 0x00050080u, 0x00000006u, 0x000005b1u, 0x000005b0u, - 0x0000011cu, 0x0003003eu, 0x0000050cu, 0x000005b1u, 0x000200f9u, 0x0000050du, 0x000200f8u, 0x0000050fu, - 0x0004003du, 0x00000006u, 0x000005b6u, 0x000004c9u, 0x00040070u, 0x00000009u, 0x000005b7u, 0x000005b6u, - 0x00060041u, 0x000005b8u, 0x000005b9u, 0x000005b4u, 0x000005b5u, 0x0000007du, 0x0003003eu, 0x000005b9u, - 0x000005b7u, 0x0004003du, 0x00000011u, 0x000005bau, 0x000004cau, 0x000600a9u, 0x00000009u, 0x000005bbu, - 0x000005bau, 0x00000037u, 0x00000046u, 0x00060041u, 0x000005b8u, 0x000005bcu, 0x000005b4u, 0x000005b5u, - 0x00000008u, 0x0003003eu, 0x000005bcu, 0x000005bbu, 0x0004003du, 0x00000011u, 0x000005bdu, 0x000004ccu, - 0x000600a9u, 0x00000009u, 0x000005beu, 0x000005bdu, 0x00000037u, 0x00000046u, 0x00060041u, 0x000005b8u, - 0x000005bfu, 0x000005b4u, 0x000005b5u, 0x0000003bu, 0x0003003eu, 0x000005bfu, 0x000005beu, 0x000200f9u, - 0x000004d0u, 0x000200f8u, 0x000004d0u, 0x000400e0u, 0x0000003bu, 0x0000003bu, 0x000005c0u, 0x00060041u, - 0x000005b8u, 0x000005c2u, 0x000005b4u, 0x000005b5u, 0x0000007du, 0x0004003du, 0x00000009u, 0x000005c3u, - 0x000005c2u, 0x0004006du, 0x00000006u, 0x000005c4u, 0x000005c3u, 0x0003003eu, 0x000005c1u, 0x000005c4u, - 0x00060041u, 0x000005b8u, 0x000005c6u, 0x000005b4u, 0x000005b5u, 0x00000008u, 0x0004003du, 0x00000009u, - 0x000005c7u, 0x000005c6u, 0x000500bau, 0x00000011u, 0x000005c8u, 0x000005c7u, 0x00000033u, 0x0003003eu, - 0x000005c5u, 0x000005c8u, 0x00060041u, 0x000005b8u, 0x000005cau, 0x000005b4u, 0x000005b5u, 0x0000003bu, - 0x0004003du, 0x00000009u, 0x000005cbu, 0x000005cau, 0x000500bau, 0x00000011u, 0x000005ccu, 0x000005cbu, - 0x00000033u, 0x0003003eu, 0x000005c9u, 0x000005ccu, 0x0004003du, 0x00000006u, 0x000005cdu, 0x000005c1u, - 0x0007000cu, 0x00000006u, 0x000005ceu, 0x00000001u, 0x00000026u, 0x000005cdu, 0x000005a4u, 0x0003003eu, - 0x000005c1u, 0x000005ceu, 0x0004003du, 0x00000006u, 0x000005cfu, 0x000005c1u, 0x000500b0u, 0x00000011u, - 0x000005d0u, 0x000005cfu, 0x0000003bu, 0x000300f7u, 0x000005d2u, 0x00000000u, 0x000400fau, 0x000005d0u, - 0x000005d1u, 0x000005d2u, 0x000200f8u, 0x000005d1u, 0x0003003eu, 0x00000305u, 0x0000007du, 0x0004003du, - 0x00000006u, 0x000005d3u, 0x00000305u, 0x000314afu, 0x0000007du, 0x000005d3u, 0x000100fdu, 0x000200f8u, - 0x000005d2u, 0x0004003du, 0x00000006u, 0x000005d6u, 0x0000030du, 0x0003003eu, 0x000005d5u, 0x000005d6u, - 0x000200f9u, 0x000005d7u, 0x000200f8u, 0x000005d7u, 0x000400f6u, 0x000005d9u, 0x000005dau, 0x00000000u, - 0x000200f9u, 0x000005dbu, 0x000200f8u, 0x000005dbu, 0x0004003du, 0x00000006u, 0x000005dcu, 0x000005d5u, - 0x0004003du, 0x00000006u, 0x000005ddu, 0x000005c1u, 0x000500b0u, 0x00000011u, 0x000005deu, 0x000005dcu, - 0x000005ddu, 0x000400fau, 0x000005deu, 0x000005d8u, 0x000005d9u, 0x000200f8u, 0x000005d8u, 0x0004003du, - 0x00000006u, 0x000005e0u, 0x000005d5u, 0x00050041u, 0x000004eeu, 0x000005e1u, 0x000004e5u, 0x000005e0u, - 0x0004003du, 0x00000016u, 0x000005e2u, 0x000005e1u, 0x0003003eu, 0x000005dfu, 0x000005e2u, 0x0004003du, - 0x00000016u, 0x000005e5u, 0x000005dfu, 0x0003003eu, 0x000005e4u, 0x000005e5u, 0x0004003du, 0x00000019u, - 0x000005e7u, 0x00000354u, 0x0003003eu, 0x000005e6u, 0x000005e7u, 0x0004003du, 0x0000001bu, 0x000005e9u, - 0x00000348u, 0x0003003eu, 0x000005e8u, 0x000005e9u, 0x00070039u, 0x0000000au, 0x000005eau, 0x00000021u, - 0x000005e4u, 0x000005e6u, 0x000005e8u, 0x0003003eu, 0x000005e3u, 0x000005eau, 0x0004003du, 0x00000006u, - 0x000005ebu, 0x000005d5u, 0x0004003du, 0x0000000au, 0x000005ecu, 0x000005e3u, 0x00050041u, 0x000005edu, - 0x000005eeu, 0x000005b4u, 0x000005ebu, 0x0003003eu, 0x000005eeu, 0x000005ecu, 0x00050041u, 0x00000039u, - 0x000005f0u, 0x000005e3u, 0x0000003eu, 0x0004003du, 0x00000009u, 0x000005f1u, 0x000005f0u, 0x0003003eu, - 0x000005efu, 0x000005f1u, 0x0004003du, 0x00000009u, 0x000005f2u, 0x000005efu, 0x0006000cu, 0x00000009u, - 0x000005f3u, 0x00000001u, 0x00000004u, 0x000005f2u, 0x000500b8u, 0x00000011u, 0x000005f4u, 0x000005f3u, - 0x00000065u, 0x000300f7u, 0x000005f6u, 0x00000000u, 0x000400fau, 0x000005f4u, 0x000005f5u, 0x000005f6u, - 0x000200f8u, 0x000005f5u, 0x0003003eu, 0x000005efu, 0x00000065u, 0x000200f9u, 0x000005f6u, 0x000200f8u, - 0x000005f6u, 0x0004003du, 0x00000006u, 0x000005fau, 0x000005d5u, 0x00050041u, 0x00000039u, 0x000005fbu, - 0x000005e3u, 0x0000007du, 0x0004003du, 0x00000009u, 0x000005fcu, 0x000005fbu, 0x0004003du, 0x00000009u, - 0x000005fdu, 0x000005efu, 0x00050088u, 0x00000009u, 0x000005feu, 0x000005fcu, 0x000005fdu, 0x00050085u, - 0x00000009u, 0x000005ffu, 0x000005feu, 0x00000033u, 0x00050081u, 0x00000009u, 0x00000600u, 0x000005ffu, - 0x00000033u, 0x00050041u, 0x00000039u, 0x00000601u, 0x00000348u, 0x00000082u, 0x0004003du, 0x00000009u, - 0x00000602u, 0x00000601u, 0x00050085u, 0x00000009u, 0x00000603u, 0x00000600u, 0x00000602u, 0x00050041u, - 0x00000039u, 0x00000604u, 0x000005e3u, 0x00000008u, 0x0004003du, 0x00000009u, 0x00000605u, 0x00000604u, - 0x0004003du, 0x00000009u, 0x00000606u, 0x000005efu, 0x00050088u, 0x00000009u, 0x00000607u, 0x00000605u, - 0x00000606u, 0x00050085u, 0x00000009u, 0x00000608u, 0x00000607u, 0x00000033u, 0x00050083u, 0x00000009u, - 0x00000609u, 0x00000033u, 0x00000608u, 0x00050041u, 0x00000039u, 0x0000060au, 0x00000348u, 0x0000008du, - 0x0004003du, 0x00000009u, 0x0000060bu, 0x0000060au, 0x00050085u, 0x00000009u, 0x0000060cu, 0x00000609u, - 0x0000060bu, 0x00050050u, 0x0000009au, 0x0000060du, 0x00000603u, 0x0000060cu, 0x00050041u, 0x0000060eu, - 0x0000060fu, 0x000005f9u, 0x000005fau, 0x0003003eu, 0x0000060fu, 0x0000060du, 0x000200f9u, 0x000005dau, - 0x000200f8u, 0x000005dau, 0x0004003du, 0x00000006u, 0x00000610u, 0x000005d5u, 0x00050080u, 0x00000006u, - 0x00000611u, 0x00000610u, 0x00000007u, 0x0003003eu, 0x000005d5u, 0x00000611u, 0x000200f9u, 0x000005d7u, - 0x000200f8u, 0x000005d9u, 0x000400e0u, 0x0000003bu, 0x0000003bu, 0x000005c0u, 0x0004003du, 0x00000006u, - 0x00000613u, 0x000005c1u, 0x00050082u, 0x00000006u, 0x00000614u, 0x00000613u, 0x00000008u, 0x0003003eu, - 0x00000612u, 0x00000614u, 0x0003003eu, 0x00000615u, 0x000004f0u, 0x0003003eu, 0x00000616u, 0x000004f0u, - 0x0004003du, 0x00000011u, 0x00000618u, 0x00000615u, 0x000600a9u, 0x00000006u, 0x00000619u, 0x00000618u, - 0x00000577u, 0x0000007du, 0x0004003du, 0x00000011u, 0x0000061au, 0x00000616u, 0x000600a9u, 0x00000006u, - 0x0000061bu, 0x0000061au, 0x00000577u, 0x0000007du, 0x00050080u, 0x00000006u, 0x0000061cu, 0x00000619u, - 0x0000061bu, 0x0003003eu, 0x00000617u, 0x0000061cu, 0x0004003du, 0x00000011u, 0x0000061eu, 0x00000615u, - 0x000600a9u, 0x00000006u, 0x0000061fu, 0x0000061eu, 0x00000577u, 0x0000007du, 0x0004003du, 0x00000011u, - 0x00000620u, 0x00000616u, 0x000600a9u, 0x00000006u, 0x00000621u, 0x00000620u, 0x00000577u, 0x0000007du, - 0x00050080u, 0x00000006u, 0x00000622u, 0x0000061fu, 0x00000621u, 0x0003003eu, 0x0000061du, 0x00000622u, - 0x0004003du, 0x00000006u, 0x00000624u, 0x000005c1u, 0x00050084u, 0x00000006u, 0x00000625u, 0x00000624u, - 0x0000003bu, 0x0003003eu, 0x00000623u, 0x00000625u, 0x0004003du, 0x00000006u, 0x00000627u, 0x00000623u, - 0x0003003eu, 0x00000626u, 0x00000627u, 0x0004003du, 0x00000006u, 0x00000629u, 0x00000626u, 0x0004003du, - 0x00000011u, 0x0000062au, 0x00000615u, 0x000600a9u, 0x00000006u, 0x0000062bu, 0x0000062au, 0x00000577u, - 0x0000007du, 0x00050080u, 0x00000006u, 0x0000062cu, 0x00000629u, 0x0000062bu, 0x0003003eu, 0x00000628u, - 0x0000062cu, 0x0004003du, 0x00000006u, 0x0000062eu, 0x00000623u, 0x0004003du, 0x00000006u, 0x0000062fu, - 0x00000617u, 0x00050080u, 0x00000006u, 0x00000630u, 0x0000062eu, 0x0000062fu, 0x0003003eu, 0x0000062du, - 0x00000630u, 0x0004003du, 0x00000006u, 0x00000632u, 0x00000612u, 0x00050084u, 0x00000006u, 0x00000633u, - 0x00000632u, 0x0000003bu, 0x0004003du, 0x00000006u, 0x00000634u, 0x0000061du, 0x00050080u, 0x00000006u, - 0x00000635u, 0x00000633u, 0x00000634u, 0x0003003eu, 0x00000631u, 0x00000635u, 0x0004003du, 0x00000006u, - 0x00000636u, 0x00000631u, 0x0007000cu, 0x00000006u, 0x00000638u, 0x00000001u, 0x00000026u, 0x00000636u, - 0x00000637u, 0x0003003eu, 0x00000305u, 0x00000638u, 0x0004003du, 0x00000006u, 0x00000639u, 0x0000062du, - 0x0004003du, 0x00000006u, 0x0000063au, 0x00000305u, 0x000314afu, 0x00000639u, 0x0000063au, 0x0004003du, - 0x00000006u, 0x0000063cu, 0x0000030du, 0x0003003eu, 0x0000063bu, 0x0000063cu, 0x000200f9u, 0x0000063du, - 0x000200f8u, 0x0000063du, 0x000400f6u, 0x0000063fu, 0x00000640u, 0x00000000u, 0x000200f9u, 0x00000641u, - 0x000200f8u, 0x00000641u, 0x0004003du, 0x00000006u, 0x00000642u, 0x0000063bu, 0x0004003du, 0x00000006u, - 0x00000643u, 0x000005c1u, 0x000500b0u, 0x00000011u, 0x00000644u, 0x00000642u, 0x00000643u, 0x000400fau, - 0x00000644u, 0x0000063eu, 0x0000063fu, 0x000200f8u, 0x0000063eu, 0x0004003du, 0x00000006u, 0x00000646u, - 0x0000063bu, 0x00050041u, 0x000005edu, 0x00000647u, 0x000005b4u, 0x00000646u, 0x0004003du, 0x0000000au, - 0x00000648u, 0x00000647u, 0x0003003eu, 0x00000645u, 0x00000648u, 0x0004003du, 0x00000006u, 0x0000064au, - 0x0000063bu, 0x00050041u, 0x0000060eu, 0x0000064bu, 0x000005f9u, 0x0000064au, 0x0004003du, 0x0000009au, - 0x0000064cu, 0x0000064bu, 0x0003003eu, 0x00000649u, 0x0000064cu, 0x0003003eu, 0x0000064du, 0x00000037u, - 0x0003003eu, 0x0000064eu, 0x0000064fu, 0x0003003eu, 0x00000650u, 0x0000064fu, 0x0004003du, 0x00000006u, - 0x00000652u, 0x0000063bu, 0x000500acu, 0x00000011u, 0x00000653u, 0x00000652u, 0x0000007du, 0x0003003eu, - 0x00000651u, 0x00000653u, 0x0004003du, 0x00000006u, 0x00000655u, 0x0000063bu, 0x0004003du, 0x00000006u, - 0x00000656u, 0x000005c1u, 0x00050082u, 0x00000006u, 0x00000657u, 0x00000656u, 0x00000008u, 0x000500b0u, - 0x00000011u, 0x00000658u, 0x00000655u, 0x00000657u, 0x0003003eu, 0x00000654u, 0x00000658u, 0x0004003du, - 0x0000009au, 0x0000065au, 0x00000649u, 0x0003003eu, 0x00000659u, 0x0000065au, 0x0004003du, 0x0000000au, - 0x0000065cu, 0x00000645u, 0x0003003eu, 0x0000065bu, 0x0000065cu, 0x00050041u, 0x00000039u, 0x0000065du, - 0x0000065bu, 0x0000003eu, 0x0004003du, 0x00000009u, 0x0000065eu, 0x0000065du, 0x0004003du, 0x00000009u, - 0x0000065fu, 0x0000064du, 0x000500b8u, 0x00000011u, 0x00000660u, 0x0000065eu, 0x0000065fu, 0x0004003du, - 0x00000006u, 0x00000661u, 0x0000063bu, 0x000500acu, 0x00000011u, 0x00000662u, 0x00000661u, 0x0000007du, - 0x000500a7u, 0x00000011u, 0x00000663u, 0x00000660u, 0x00000662u, 0x000300f7u, 0x00000665u, 0x00000000u, - 0x000400fau, 0x00000663u, 0x00000664u, 0x00000665u, 0x000200f8u, 0x00000664u, 0x0004003du, 0x00000006u, - 0x00000666u, 0x0000063bu, 0x00050082u, 0x00000006u, 0x00000667u, 0x00000666u, 0x00000008u, 0x00060041u, - 0x000005b8u, 0x00000668u, 0x000005b4u, 0x00000667u, 0x0000003eu, 0x0004003du, 0x00000009u, 0x00000669u, - 0x00000668u, 0x0004003du, 0x00000009u, 0x0000066au, 0x0000064du, 0x000500beu, 0x00000011u, 0x0000066bu, - 0x00000669u, 0x0000066au, 0x000200f9u, 0x00000665u, 0x000200f8u, 0x00000665u, 0x000700f5u, 0x00000011u, - 0x0000066cu, 0x00000663u, 0x0000063eu, 0x0000066bu, 0x00000664u, 0x000300f7u, 0x0000066eu, 0x00000000u, - 0x000400fau, 0x0000066cu, 0x0000066du, 0x000006b8u, 0x000200f8u, 0x0000066du, 0x0004003du, 0x00000006u, - 0x00000670u, 0x0000063bu, 0x00050082u, 0x00000006u, 0x00000671u, 0x00000670u, 0x00000008u, 0x00050041u, - 0x000004eeu, 0x00000672u, 0x000004e5u, 0x00000671u, 0x0004003du, 0x00000016u, 0x00000673u, 0x00000672u, - 0x0003003eu, 0x0000066fu, 0x00000673u, 0x0004003du, 0x00000006u, 0x00000675u, 0x0000063bu, 0x00050041u, - 0x000004eeu, 0x00000676u, 0x000004e5u, 0x00000675u, 0x0004003du, 0x00000016u, 0x00000677u, 0x00000676u, - 0x0003003eu, 0x00000674u, 0x00000677u, 0x0003003eu, 0x00000679u, 0x00000054u, 0x000200f9u, 0x0000067au, - 0x000200f8u, 0x0000067au, 0x000400f6u, 0x0000067cu, 0x0000067du, 0x00000000u, 0x000200f9u, 0x0000067eu, - 0x000200f8u, 0x0000067eu, 0x0004003du, 0x0000002bu, 0x0000067fu, 0x00000679u, 0x000500b1u, 0x00000011u, - 0x00000680u, 0x0000067fu, 0x00000079u, 0x000400fau, 0x00000680u, 0x0000067bu, 0x0000067cu, 0x000200f8u, - 0x0000067bu, 0x0004003du, 0x00000016u, 0x00000682u, 0x0000066fu, 0x0004003du, 0x00000016u, 0x00000683u, - 0x00000674u, 0x00050081u, 0x00000016u, 0x00000684u, 0x00000682u, 0x00000683u, 0x0005008eu, 0x00000016u, - 0x00000685u, 0x00000684u, 0x00000033u, 0x0003003eu, 0x00000681u, 0x00000685u, 0x0004003du, 0x00000016u, - 0x00000688u, 0x00000681u, 0x0003003eu, 0x00000687u, 0x00000688u, 0x0004003du, 0x00000019u, 0x0000068au, - 0x00000354u, 0x0003003eu, 0x00000689u, 0x0000068au, 0x0004003du, 0x0000001bu, 0x0000068cu, 0x00000348u, - 0x0003003eu, 0x0000068bu, 0x0000068cu, 0x00070039u, 0x0000000au, 0x0000068du, 0x00000021u, 0x00000687u, - 0x00000689u, 0x0000068bu, 0x0003003eu, 0x00000686u, 0x0000068du, 0x00050041u, 0x00000039u, 0x0000068eu, - 0x00000686u, 0x0000003eu, 0x0004003du, 0x00000009u, 0x0000068fu, 0x0000068eu, 0x0004003du, 0x00000009u, - 0x00000690u, 0x0000064du, 0x000500beu, 0x00000011u, 0x00000691u, 0x0000068fu, 0x00000690u, 0x000300f7u, - 0x00000693u, 0x00000000u, 0x000400fau, 0x00000691u, 0x00000692u, 0x00000695u, 0x000200f8u, 0x00000692u, - 0x0004003du, 0x00000016u, 0x00000694u, 0x00000681u, 0x0003003eu, 0x0000066fu, 0x00000694u, 0x000200f9u, - 0x00000693u, 0x000200f8u, 0x00000695u, 0x0004003du, 0x00000016u, 0x00000696u, 0x00000681u, 0x0003003eu, - 0x00000674u, 0x00000696u, 0x000200f9u, 0x00000693u, 0x000200f8u, 0x00000693u, 0x000200f9u, 0x0000067du, - 0x000200f8u, 0x0000067du, 0x0004003du, 0x0000002bu, 0x00000697u, 0x00000679u, 0x00050080u, 0x0000002bu, - 0x00000698u, 0x00000697u, 0x0000011cu, 0x0003003eu, 0x00000679u, 0x00000698u, 0x000200f9u, 0x0000067au, - 0x000200f8u, 0x0000067cu, 0x0004003du, 0x00000016u, 0x0000069bu, 0x0000066fu, 0x0003003eu, 0x0000069au, - 0x0000069bu, 0x0004003du, 0x00000019u, 0x0000069du, 0x00000354u, 0x0003003eu, 0x0000069cu, 0x0000069du, - 0x0004003du, 0x0000001bu, 0x0000069fu, 0x00000348u, 0x0003003eu, 0x0000069eu, 0x0000069fu, 0x00070039u, - 0x0000000au, 0x000006a0u, 0x00000021u, 0x0000069au, 0x0000069cu, 0x0000069eu, 0x0003003eu, 0x00000699u, - 0x000006a0u, 0x00050041u, 0x00000039u, 0x000006a2u, 0x00000699u, 0x0000003eu, 0x0004003du, 0x00000009u, - 0x000006a3u, 0x000006a2u, 0x0007000cu, 0x00000009u, 0x000006a4u, 0x00000001u, 0x00000028u, 0x000006a3u, - 0x00000073u, 0x0003003eu, 0x000006a1u, 0x000006a4u, 0x00050041u, 0x00000039u, 0x000006a5u, 0x00000699u, - 0x0000007du, 0x0004003du, 0x00000009u, 0x000006a6u, 0x000006a5u, 0x0004003du, 0x00000009u, 0x000006a7u, - 0x000006a1u, 0x00050088u, 0x00000009u, 0x000006a8u, 0x000006a6u, 0x000006a7u, 0x00050085u, 0x00000009u, - 0x000006a9u, 0x000006a8u, 0x00000033u, 0x00050081u, 0x00000009u, 0x000006aau, 0x000006a9u, 0x00000033u, - 0x00050041u, 0x00000039u, 0x000006abu, 0x00000348u, 0x00000082u, 0x0004003du, 0x00000009u, 0x000006acu, - 0x000006abu, 0x00050085u, 0x00000009u, 0x000006adu, 0x000006aau, 0x000006acu, 0x00050041u, 0x00000039u, - 0x000006aeu, 0x00000699u, 0x00000008u, 0x0004003du, 0x00000009u, 0x000006afu, 0x000006aeu, 0x0004003du, - 0x00000009u, 0x000006b0u, 0x000006a1u, 0x00050088u, 0x00000009u, 0x000006b1u, 0x000006afu, 0x000006b0u, - 0x00050085u, 0x00000009u, 0x000006b2u, 0x000006b1u, 0x00000033u, 0x00050083u, 0x00000009u, 0x000006b3u, - 0x00000033u, 0x000006b2u, 0x00050041u, 0x00000039u, 0x000006b4u, 0x00000348u, 0x0000008du, 0x0004003du, - 0x00000009u, 0x000006b5u, 0x000006b4u, 0x00050085u, 0x00000009u, 0x000006b6u, 0x000006b3u, 0x000006b5u, - 0x00050050u, 0x0000009au, 0x000006b7u, 0x000006adu, 0x000006b6u, 0x0003003eu, 0x00000659u, 0x000006b7u, - 0x000200f9u, 0x0000066eu, 0x000200f8u, 0x000006b8u, 0x00050041u, 0x00000039u, 0x000006b9u, 0x0000065bu, - 0x0000003eu, 0x0004003du, 0x00000009u, 0x000006bau, 0x000006b9u, 0x0004003du, 0x00000009u, 0x000006bbu, - 0x0000064du, 0x000500b8u, 0x00000011u, 0x000006bcu, 0x000006bau, 0x000006bbu, 0x000300f7u, 0x000006beu, - 0x00000000u, 0x000400fau, 0x000006bcu, 0x000006bdu, 0x000006beu, 0x000200f8u, 0x000006bdu, 0x0004003du, - 0x00000006u, 0x000006bfu, 0x0000063bu, 0x0004003du, 0x00000006u, 0x000006c0u, 0x000005c1u, 0x00050082u, - 0x00000006u, 0x000006c1u, 0x000006c0u, 0x00000008u, 0x000500b0u, 0x00000011u, 0x000006c2u, 0x000006bfu, - 0x000006c1u, 0x000200f9u, 0x000006beu, 0x000200f8u, 0x000006beu, 0x000700f5u, 0x00000011u, 0x000006c3u, - 0x000006bcu, 0x000006b8u, 0x000006c2u, 0x000006bdu, 0x000300f7u, 0x000006c5u, 0x00000000u, 0x000400fau, - 0x000006c3u, 0x000006c4u, 0x000006c5u, 0x000200f8u, 0x000006c4u, 0x0004003du, 0x00000006u, 0x000006c6u, - 0x0000063bu, 0x00050080u, 0x00000006u, 0x000006c7u, 0x000006c6u, 0x00000008u, 0x00060041u, 0x000005b8u, - 0x000006c8u, 0x000005b4u, 0x000006c7u, 0x0000003eu, 0x0004003du, 0x00000009u, 0x000006c9u, 0x000006c8u, - 0x0004003du, 0x00000009u, 0x000006cau, 0x0000064du, 0x000500beu, 0x00000011u, 0x000006cbu, 0x000006c9u, - 0x000006cau, 0x000200f9u, 0x000006c5u, 0x000200f8u, 0x000006c5u, 0x000700f5u, 0x00000011u, 0x000006ccu, - 0x000006c3u, 0x000006beu, 0x000006cbu, 0x000006c4u, 0x000300f7u, 0x000006ceu, 0x00000000u, 0x000400fau, - 0x000006ccu, 0x000006cdu, 0x000006ceu, 0x000200f8u, 0x000006cdu, 0x0004003du, 0x00000006u, 0x000006d0u, - 0x0000063bu, 0x00050080u, 0x00000006u, 0x000006d1u, 0x000006d0u, 0x00000008u, 0x00050041u, 0x000004eeu, - 0x000006d2u, 0x000004e5u, 0x000006d1u, 0x0004003du, 0x00000016u, 0x000006d3u, 0x000006d2u, 0x0003003eu, - 0x000006cfu, 0x000006d3u, 0x0004003du, 0x00000006u, 0x000006d5u, 0x0000063bu, 0x00050041u, 0x000004eeu, - 0x000006d6u, 0x000004e5u, 0x000006d5u, 0x0004003du, 0x00000016u, 0x000006d7u, 0x000006d6u, 0x0003003eu, - 0x000006d4u, 0x000006d7u, 0x0003003eu, 0x000006d8u, 0x00000054u, 0x000200f9u, 0x000006d9u, 0x000200f8u, - 0x000006d9u, 0x000400f6u, 0x000006dbu, 0x000006dcu, 0x00000000u, 0x000200f9u, 0x000006ddu, 0x000200f8u, - 0x000006ddu, 0x0004003du, 0x0000002bu, 0x000006deu, 0x000006d8u, 0x000500b1u, 0x00000011u, 0x000006dfu, - 0x000006deu, 0x00000079u, 0x000400fau, 0x000006dfu, 0x000006dau, 0x000006dbu, 0x000200f8u, 0x000006dau, - 0x0004003du, 0x00000016u, 0x000006e1u, 0x000006cfu, 0x0004003du, 0x00000016u, 0x000006e2u, 0x000006d4u, - 0x00050081u, 0x00000016u, 0x000006e3u, 0x000006e1u, 0x000006e2u, 0x0005008eu, 0x00000016u, 0x000006e4u, - 0x000006e3u, 0x00000033u, 0x0003003eu, 0x000006e0u, 0x000006e4u, 0x0004003du, 0x00000016u, 0x000006e7u, - 0x000006e0u, 0x0003003eu, 0x000006e6u, 0x000006e7u, 0x0004003du, 0x00000019u, 0x000006e9u, 0x00000354u, - 0x0003003eu, 0x000006e8u, 0x000006e9u, 0x0004003du, 0x0000001bu, 0x000006ebu, 0x00000348u, 0x0003003eu, - 0x000006eau, 0x000006ebu, 0x00070039u, 0x0000000au, 0x000006ecu, 0x00000021u, 0x000006e6u, 0x000006e8u, - 0x000006eau, 0x0003003eu, 0x000006e5u, 0x000006ecu, 0x00050041u, 0x00000039u, 0x000006edu, 0x000006e5u, - 0x0000003eu, 0x0004003du, 0x00000009u, 0x000006eeu, 0x000006edu, 0x0004003du, 0x00000009u, 0x000006efu, - 0x0000064du, 0x000500beu, 0x00000011u, 0x000006f0u, 0x000006eeu, 0x000006efu, 0x000300f7u, 0x000006f2u, - 0x00000000u, 0x000400fau, 0x000006f0u, 0x000006f1u, 0x000006f4u, 0x000200f8u, 0x000006f1u, 0x0004003du, - 0x00000016u, 0x000006f3u, 0x000006e0u, 0x0003003eu, 0x000006cfu, 0x000006f3u, 0x000200f9u, 0x000006f2u, - 0x000200f8u, 0x000006f4u, 0x0004003du, 0x00000016u, 0x000006f5u, 0x000006e0u, 0x0003003eu, 0x000006d4u, - 0x000006f5u, 0x000200f9u, 0x000006f2u, 0x000200f8u, 0x000006f2u, 0x000200f9u, 0x000006dcu, 0x000200f8u, - 0x000006dcu, 0x0004003du, 0x0000002bu, 0x000006f6u, 0x000006d8u, 0x00050080u, 0x0000002bu, 0x000006f7u, - 0x000006f6u, 0x0000011cu, 0x0003003eu, 0x000006d8u, 0x000006f7u, 0x000200f9u, 0x000006d9u, 0x000200f8u, - 0x000006dbu, 0x0004003du, 0x00000016u, 0x000006fau, 0x000006cfu, 0x0003003eu, 0x000006f9u, 0x000006fau, - 0x0004003du, 0x00000019u, 0x000006fcu, 0x00000354u, 0x0003003eu, 0x000006fbu, 0x000006fcu, 0x0004003du, - 0x0000001bu, 0x000006feu, 0x00000348u, 0x0003003eu, 0x000006fdu, 0x000006feu, 0x00070039u, 0x0000000au, - 0x000006ffu, 0x00000021u, 0x000006f9u, 0x000006fbu, 0x000006fdu, 0x0003003eu, 0x000006f8u, 0x000006ffu, - 0x00050041u, 0x00000039u, 0x00000701u, 0x000006f8u, 0x0000003eu, 0x0004003du, 0x00000009u, 0x00000702u, - 0x00000701u, 0x0007000cu, 0x00000009u, 0x00000703u, 0x00000001u, 0x00000028u, 0x00000702u, 0x00000073u, - 0x0003003eu, 0x00000700u, 0x00000703u, 0x00050041u, 0x00000039u, 0x00000704u, 0x000006f8u, 0x0000007du, - 0x0004003du, 0x00000009u, 0x00000705u, 0x00000704u, 0x0004003du, 0x00000009u, 0x00000706u, 0x00000700u, - 0x00050088u, 0x00000009u, 0x00000707u, 0x00000705u, 0x00000706u, 0x00050085u, 0x00000009u, 0x00000708u, - 0x00000707u, 0x00000033u, 0x00050081u, 0x00000009u, 0x00000709u, 0x00000708u, 0x00000033u, 0x00050041u, - 0x00000039u, 0x0000070au, 0x00000348u, 0x00000082u, 0x0004003du, 0x00000009u, 0x0000070bu, 0x0000070au, - 0x00050085u, 0x00000009u, 0x0000070cu, 0x00000709u, 0x0000070bu, 0x00050041u, 0x00000039u, 0x0000070du, - 0x000006f8u, 0x00000008u, 0x0004003du, 0x00000009u, 0x0000070eu, 0x0000070du, 0x0004003du, 0x00000009u, - 0x0000070fu, 0x00000700u, 0x00050088u, 0x00000009u, 0x00000710u, 0x0000070eu, 0x0000070fu, 0x00050085u, - 0x00000009u, 0x00000711u, 0x00000710u, 0x00000033u, 0x00050083u, 0x00000009u, 0x00000712u, 0x00000033u, - 0x00000711u, 0x00050041u, 0x00000039u, 0x00000713u, 0x00000348u, 0x0000008du, 0x0004003du, 0x00000009u, - 0x00000714u, 0x00000713u, 0x00050085u, 0x00000009u, 0x00000715u, 0x00000712u, 0x00000714u, 0x00050050u, - 0x0000009au, 0x00000716u, 0x0000070cu, 0x00000715u, 0x0003003eu, 0x00000659u, 0x00000716u, 0x000200f9u, - 0x000006ceu, 0x000200f8u, 0x000006ceu, 0x000200f9u, 0x0000066eu, 0x000200f8u, 0x0000066eu, 0x0004003du, - 0x00000011u, 0x00000717u, 0x00000651u, 0x000300f7u, 0x00000719u, 0x00000000u, 0x000400fau, 0x00000717u, - 0x00000718u, 0x00000719u, 0x000200f8u, 0x00000718u, 0x0004003du, 0x00000006u, 0x0000071bu, 0x0000063bu, - 0x00050082u, 0x00000006u, 0x0000071cu, 0x0000071bu, 0x00000008u, 0x00050041u, 0x0000060eu, 0x0000071du, - 0x000005f9u, 0x0000071cu, 0x0004003du, 0x0000009au, 0x0000071eu, 0x0000071du, 0x0003003eu, 0x0000071au, - 0x0000071eu, 0x0004003du, 0x00000006u, 0x0000071fu, 0x0000063bu, 0x00050082u, 0x00000006u, 0x00000720u, - 0x0000071fu, 0x00000008u, 0x00060041u, 0x000005b8u, 0x00000721u, 0x000005b4u, 0x00000720u, 0x0000003eu, - 0x0004003du, 0x00000009u, 0x00000722u, 0x00000721u, 0x0004003du, 0x00000009u, 0x00000723u, 0x0000064du, - 0x000500b8u, 0x00000011u, 0x00000724u, 0x00000722u, 0x00000723u, 0x000300f7u, 0x00000726u, 0x00000000u, - 0x000400fau, 0x00000724u, 0x00000725u, 0x00000726u, 0x000200f8u, 0x00000725u, 0x00050041u, 0x00000039u, - 0x00000727u, 0x0000065bu, 0x0000003eu, 0x0004003du, 0x00000009u, 0x00000728u, 0x00000727u, 0x0004003du, - 0x00000009u, 0x00000729u, 0x0000064du, 0x000500beu, 0x00000011u, 0x0000072au, 0x00000728u, 0x00000729u, - 0x000200f9u, 0x00000726u, 0x000200f8u, 0x00000726u, 0x000700f5u, 0x00000011u, 0x0000072bu, 0x00000724u, - 0x00000718u, 0x0000072au, 0x00000725u, 0x000300f7u, 0x0000072du, 0x00000000u, 0x000400fau, 0x0000072bu, - 0x0000072cu, 0x0000072du, 0x000200f8u, 0x0000072cu, 0x0004003du, 0x00000006u, 0x0000072fu, 0x0000063bu, - 0x00050041u, 0x000004eeu, 0x00000730u, 0x000004e5u, 0x0000072fu, 0x0004003du, 0x00000016u, 0x00000731u, - 0x00000730u, 0x0003003eu, 0x0000072eu, 0x00000731u, 0x0004003du, 0x00000006u, 0x00000733u, 0x0000063bu, - 0x00050082u, 0x00000006u, 0x00000734u, 0x00000733u, 0x00000008u, 0x00050041u, 0x000004eeu, 0x00000735u, - 0x000004e5u, 0x00000734u, 0x0004003du, 0x00000016u, 0x00000736u, 0x00000735u, 0x0003003eu, 0x00000732u, - 0x00000736u, 0x0003003eu, 0x00000737u, 0x00000054u, 0x000200f9u, 0x00000738u, 0x000200f8u, 0x00000738u, - 0x000400f6u, 0x0000073au, 0x0000073bu, 0x00000000u, 0x000200f9u, 0x0000073cu, 0x000200f8u, 0x0000073cu, - 0x0004003du, 0x0000002bu, 0x0000073du, 0x00000737u, 0x000500b1u, 0x00000011u, 0x0000073eu, 0x0000073du, - 0x00000079u, 0x000400fau, 0x0000073eu, 0x00000739u, 0x0000073au, 0x000200f8u, 0x00000739u, 0x0004003du, - 0x00000016u, 0x00000740u, 0x0000072eu, 0x0004003du, 0x00000016u, 0x00000741u, 0x00000732u, 0x00050081u, - 0x00000016u, 0x00000742u, 0x00000740u, 0x00000741u, 0x0005008eu, 0x00000016u, 0x00000743u, 0x00000742u, - 0x00000033u, 0x0003003eu, 0x0000073fu, 0x00000743u, 0x0004003du, 0x00000016u, 0x00000746u, 0x0000073fu, - 0x0003003eu, 0x00000745u, 0x00000746u, 0x0004003du, 0x00000019u, 0x00000748u, 0x00000354u, 0x0003003eu, - 0x00000747u, 0x00000748u, 0x0004003du, 0x0000001bu, 0x0000074au, 0x00000348u, 0x0003003eu, 0x00000749u, - 0x0000074au, 0x00070039u, 0x0000000au, 0x0000074bu, 0x00000021u, 0x00000745u, 0x00000747u, 0x00000749u, - 0x0003003eu, 0x00000744u, 0x0000074bu, 0x00050041u, 0x00000039u, 0x0000074cu, 0x00000744u, 0x0000003eu, - 0x0004003du, 0x00000009u, 0x0000074du, 0x0000074cu, 0x0004003du, 0x00000009u, 0x0000074eu, 0x0000064du, - 0x000500beu, 0x00000011u, 0x0000074fu, 0x0000074du, 0x0000074eu, 0x000300f7u, 0x00000751u, 0x00000000u, - 0x000400fau, 0x0000074fu, 0x00000750u, 0x00000753u, 0x000200f8u, 0x00000750u, 0x0004003du, 0x00000016u, - 0x00000752u, 0x0000073fu, 0x0003003eu, 0x0000072eu, 0x00000752u, 0x000200f9u, 0x00000751u, 0x000200f8u, - 0x00000753u, 0x0004003du, 0x00000016u, 0x00000754u, 0x0000073fu, 0x0003003eu, 0x00000732u, 0x00000754u, - 0x000200f9u, 0x00000751u, 0x000200f8u, 0x00000751u, 0x000200f9u, 0x0000073bu, 0x000200f8u, 0x0000073bu, - 0x0004003du, 0x0000002bu, 0x00000755u, 0x00000737u, 0x00050080u, 0x0000002bu, 0x00000756u, 0x00000755u, - 0x0000011cu, 0x0003003eu, 0x00000737u, 0x00000756u, 0x000200f9u, 0x00000738u, 0x000200f8u, 0x0000073au, - 0x0004003du, 0x00000016u, 0x00000759u, 0x0000072eu, 0x0003003eu, 0x00000758u, 0x00000759u, 0x0004003du, - 0x00000019u, 0x0000075bu, 0x00000354u, 0x0003003eu, 0x0000075au, 0x0000075bu, 0x0004003du, 0x0000001bu, - 0x0000075du, 0x00000348u, 0x0003003eu, 0x0000075cu, 0x0000075du, 0x00070039u, 0x0000000au, 0x0000075eu, - 0x00000021u, 0x00000758u, 0x0000075au, 0x0000075cu, 0x0003003eu, 0x00000757u, 0x0000075eu, 0x00050041u, - 0x00000039u, 0x00000760u, 0x00000757u, 0x0000003eu, 0x0004003du, 0x00000009u, 0x00000761u, 0x00000760u, - 0x0007000cu, 0x00000009u, 0x00000762u, 0x00000001u, 0x00000028u, 0x00000761u, 0x00000073u, 0x0003003eu, - 0x0000075fu, 0x00000762u, 0x00050041u, 0x00000039u, 0x00000763u, 0x00000757u, 0x0000007du, 0x0004003du, - 0x00000009u, 0x00000764u, 0x00000763u, 0x0004003du, 0x00000009u, 0x00000765u, 0x0000075fu, 0x00050088u, - 0x00000009u, 0x00000766u, 0x00000764u, 0x00000765u, 0x00050085u, 0x00000009u, 0x00000767u, 0x00000766u, - 0x00000033u, 0x00050081u, 0x00000009u, 0x00000768u, 0x00000767u, 0x00000033u, 0x00050041u, 0x00000039u, - 0x00000769u, 0x00000348u, 0x00000082u, 0x0004003du, 0x00000009u, 0x0000076au, 0x00000769u, 0x00050085u, - 0x00000009u, 0x0000076bu, 0x00000768u, 0x0000076au, 0x00050041u, 0x00000039u, 0x0000076cu, 0x00000757u, - 0x00000008u, 0x0004003du, 0x00000009u, 0x0000076du, 0x0000076cu, 0x0004003du, 0x00000009u, 0x0000076eu, - 0x0000075fu, 0x00050088u, 0x00000009u, 0x0000076fu, 0x0000076du, 0x0000076eu, 0x00050085u, 0x00000009u, - 0x00000770u, 0x0000076fu, 0x00000033u, 0x00050083u, 0x00000009u, 0x00000771u, 0x00000033u, 0x00000770u, - 0x00050041u, 0x00000039u, 0x00000772u, 0x00000348u, 0x0000008du, 0x0004003du, 0x00000009u, 0x00000773u, - 0x00000772u, 0x00050085u, 0x00000009u, 0x00000774u, 0x00000771u, 0x00000773u, 0x00050050u, 0x0000009au, - 0x00000775u, 0x0000076bu, 0x00000774u, 0x0003003eu, 0x0000071au, 0x00000775u, 0x000200f9u, 0x0000072du, - 0x000200f8u, 0x0000072du, 0x0004003du, 0x0000009au, 0x00000777u, 0x00000659u, 0x0004003du, 0x0000009au, - 0x00000778u, 0x0000071au, 0x00050083u, 0x0000009au, 0x00000779u, 0x00000777u, 0x00000778u, 0x0003003eu, - 0x00000776u, 0x00000779u, 0x0004003du, 0x0000009au, 0x0000077bu, 0x00000776u, 0x0006000cu, 0x00000009u, - 0x0000077cu, 0x00000001u, 0x00000042u, 0x0000077bu, 0x0003003eu, 0x0000077au, 0x0000077cu, 0x0004003du, - 0x00000009u, 0x0000077du, 0x0000077au, 0x000500bau, 0x00000011u, 0x0000077eu, 0x0000077du, 0x00000073u, - 0x000300f7u, 0x00000780u, 0x00000000u, 0x000400fau, 0x0000077eu, 0x0000077fu, 0x00000780u, 0x000200f8u, - 0x0000077fu, 0x0004003du, 0x0000009au, 0x00000781u, 0x00000776u, 0x0004003du, 0x00000009u, 0x00000782u, - 0x0000077au, 0x00050050u, 0x0000009au, 0x00000783u, 0x00000782u, 0x00000782u, 0x00050088u, 0x0000009au, - 0x00000784u, 0x00000781u, 0x00000783u, 0x0003003eu, 0x0000064eu, 0x00000784u, 0x000200f9u, 0x00000780u, - 0x000200f8u, 0x00000780u, 0x000200f9u, 0x00000719u, 0x000200f8u, 0x00000719u, 0x0004003du, 0x00000011u, - 0x00000785u, 0x00000654u, 0x000300f7u, 0x00000787u, 0x00000000u, 0x000400fau, 0x00000785u, 0x00000786u, - 0x00000787u, 0x000200f8u, 0x00000786u, 0x0004003du, 0x00000006u, 0x00000789u, 0x0000063bu, 0x00050080u, - 0x00000006u, 0x0000078au, 0x00000789u, 0x00000008u, 0x00050041u, 0x0000060eu, 0x0000078bu, 0x000005f9u, - 0x0000078au, 0x0004003du, 0x0000009au, 0x0000078cu, 0x0000078bu, 0x0003003eu, 0x00000788u, 0x0000078cu, - 0x0004003du, 0x00000006u, 0x0000078du, 0x0000063bu, 0x00050080u, 0x00000006u, 0x0000078eu, 0x0000078du, - 0x00000008u, 0x00060041u, 0x000005b8u, 0x0000078fu, 0x000005b4u, 0x0000078eu, 0x0000003eu, 0x0004003du, - 0x00000009u, 0x00000790u, 0x0000078fu, 0x0004003du, 0x00000009u, 0x00000791u, 0x0000064du, 0x000500b8u, - 0x00000011u, 0x00000792u, 0x00000790u, 0x00000791u, 0x000300f7u, 0x00000794u, 0x00000000u, 0x000400fau, - 0x00000792u, 0x00000793u, 0x00000794u, 0x000200f8u, 0x00000793u, 0x00050041u, 0x00000039u, 0x00000795u, - 0x0000065bu, 0x0000003eu, 0x0004003du, 0x00000009u, 0x00000796u, 0x00000795u, 0x0004003du, 0x00000009u, - 0x00000797u, 0x0000064du, 0x000500beu, 0x00000011u, 0x00000798u, 0x00000796u, 0x00000797u, 0x000200f9u, - 0x00000794u, 0x000200f8u, 0x00000794u, 0x000700f5u, 0x00000011u, 0x00000799u, 0x00000792u, 0x00000786u, - 0x00000798u, 0x00000793u, 0x000300f7u, 0x0000079bu, 0x00000000u, 0x000400fau, 0x00000799u, 0x0000079au, - 0x0000079bu, 0x000200f8u, 0x0000079au, 0x0004003du, 0x00000006u, 0x0000079du, 0x0000063bu, 0x00050041u, - 0x000004eeu, 0x0000079eu, 0x000004e5u, 0x0000079du, 0x0004003du, 0x00000016u, 0x0000079fu, 0x0000079eu, - 0x0003003eu, 0x0000079cu, 0x0000079fu, 0x0004003du, 0x00000006u, 0x000007a1u, 0x0000063bu, 0x00050080u, - 0x00000006u, 0x000007a2u, 0x000007a1u, 0x00000008u, 0x00050041u, 0x000004eeu, 0x000007a3u, 0x000004e5u, - 0x000007a2u, 0x0004003du, 0x00000016u, 0x000007a4u, 0x000007a3u, 0x0003003eu, 0x000007a0u, 0x000007a4u, - 0x0003003eu, 0x000007a5u, 0x00000054u, 0x000200f9u, 0x000007a6u, 0x000200f8u, 0x000007a6u, 0x000400f6u, - 0x000007a8u, 0x000007a9u, 0x00000000u, 0x000200f9u, 0x000007aau, 0x000200f8u, 0x000007aau, 0x0004003du, - 0x0000002bu, 0x000007abu, 0x000007a5u, 0x000500b1u, 0x00000011u, 0x000007acu, 0x000007abu, 0x00000079u, - 0x000400fau, 0x000007acu, 0x000007a7u, 0x000007a8u, 0x000200f8u, 0x000007a7u, 0x0004003du, 0x00000016u, - 0x000007aeu, 0x0000079cu, 0x0004003du, 0x00000016u, 0x000007afu, 0x000007a0u, 0x00050081u, 0x00000016u, - 0x000007b0u, 0x000007aeu, 0x000007afu, 0x0005008eu, 0x00000016u, 0x000007b1u, 0x000007b0u, 0x00000033u, - 0x0003003eu, 0x000007adu, 0x000007b1u, 0x0004003du, 0x00000016u, 0x000007b4u, 0x000007adu, 0x0003003eu, - 0x000007b3u, 0x000007b4u, 0x0004003du, 0x00000019u, 0x000007b6u, 0x00000354u, 0x0003003eu, 0x000007b5u, - 0x000007b6u, 0x0004003du, 0x0000001bu, 0x000007b8u, 0x00000348u, 0x0003003eu, 0x000007b7u, 0x000007b8u, - 0x00070039u, 0x0000000au, 0x000007b9u, 0x00000021u, 0x000007b3u, 0x000007b5u, 0x000007b7u, 0x0003003eu, - 0x000007b2u, 0x000007b9u, 0x00050041u, 0x00000039u, 0x000007bau, 0x000007b2u, 0x0000003eu, 0x0004003du, - 0x00000009u, 0x000007bbu, 0x000007bau, 0x0004003du, 0x00000009u, 0x000007bcu, 0x0000064du, 0x000500beu, - 0x00000011u, 0x000007bdu, 0x000007bbu, 0x000007bcu, 0x000300f7u, 0x000007bfu, 0x00000000u, 0x000400fau, - 0x000007bdu, 0x000007beu, 0x000007c1u, 0x000200f8u, 0x000007beu, 0x0004003du, 0x00000016u, 0x000007c0u, - 0x000007adu, 0x0003003eu, 0x0000079cu, 0x000007c0u, 0x000200f9u, 0x000007bfu, 0x000200f8u, 0x000007c1u, - 0x0004003du, 0x00000016u, 0x000007c2u, 0x000007adu, 0x0003003eu, 0x000007a0u, 0x000007c2u, 0x000200f9u, - 0x000007bfu, 0x000200f8u, 0x000007bfu, 0x000200f9u, 0x000007a9u, 0x000200f8u, 0x000007a9u, 0x0004003du, - 0x0000002bu, 0x000007c3u, 0x000007a5u, 0x00050080u, 0x0000002bu, 0x000007c4u, 0x000007c3u, 0x0000011cu, - 0x0003003eu, 0x000007a5u, 0x000007c4u, 0x000200f9u, 0x000007a6u, 0x000200f8u, 0x000007a8u, 0x0004003du, - 0x00000016u, 0x000007c7u, 0x0000079cu, 0x0003003eu, 0x000007c6u, 0x000007c7u, 0x0004003du, 0x00000019u, - 0x000007c9u, 0x00000354u, 0x0003003eu, 0x000007c8u, 0x000007c9u, 0x0004003du, 0x0000001bu, 0x000007cbu, - 0x00000348u, 0x0003003eu, 0x000007cau, 0x000007cbu, 0x00070039u, 0x0000000au, 0x000007ccu, 0x00000021u, - 0x000007c6u, 0x000007c8u, 0x000007cau, 0x0003003eu, 0x000007c5u, 0x000007ccu, 0x00050041u, 0x00000039u, - 0x000007ceu, 0x000007c5u, 0x0000003eu, 0x0004003du, 0x00000009u, 0x000007cfu, 0x000007ceu, 0x0007000cu, - 0x00000009u, 0x000007d0u, 0x00000001u, 0x00000028u, 0x000007cfu, 0x00000073u, 0x0003003eu, 0x000007cdu, - 0x000007d0u, 0x00050041u, 0x00000039u, 0x000007d1u, 0x000007c5u, 0x0000007du, 0x0004003du, 0x00000009u, - 0x000007d2u, 0x000007d1u, 0x0004003du, 0x00000009u, 0x000007d3u, 0x000007cdu, 0x00050088u, 0x00000009u, - 0x000007d4u, 0x000007d2u, 0x000007d3u, 0x00050085u, 0x00000009u, 0x000007d5u, 0x000007d4u, 0x00000033u, - 0x00050081u, 0x00000009u, 0x000007d6u, 0x000007d5u, 0x00000033u, 0x00050041u, 0x00000039u, 0x000007d7u, - 0x00000348u, 0x00000082u, 0x0004003du, 0x00000009u, 0x000007d8u, 0x000007d7u, 0x00050085u, 0x00000009u, - 0x000007d9u, 0x000007d6u, 0x000007d8u, 0x00050041u, 0x00000039u, 0x000007dau, 0x000007c5u, 0x00000008u, - 0x0004003du, 0x00000009u, 0x000007dbu, 0x000007dau, 0x0004003du, 0x00000009u, 0x000007dcu, 0x000007cdu, - 0x00050088u, 0x00000009u, 0x000007ddu, 0x000007dbu, 0x000007dcu, 0x00050085u, 0x00000009u, 0x000007deu, - 0x000007ddu, 0x00000033u, 0x00050083u, 0x00000009u, 0x000007dfu, 0x00000033u, 0x000007deu, 0x00050041u, - 0x00000039u, 0x000007e0u, 0x00000348u, 0x0000008du, 0x0004003du, 0x00000009u, 0x000007e1u, 0x000007e0u, - 0x00050085u, 0x00000009u, 0x000007e2u, 0x000007dfu, 0x000007e1u, 0x00050050u, 0x0000009au, 0x000007e3u, - 0x000007d9u, 0x000007e2u, 0x0003003eu, 0x00000788u, 0x000007e3u, 0x000200f9u, 0x0000079bu, 0x000200f8u, - 0x0000079bu, 0x0004003du, 0x0000009au, 0x000007e5u, 0x00000788u, 0x0004003du, 0x0000009au, 0x000007e6u, - 0x00000659u, 0x00050083u, 0x0000009au, 0x000007e7u, 0x000007e5u, 0x000007e6u, 0x0003003eu, 0x000007e4u, - 0x000007e7u, 0x0004003du, 0x0000009au, 0x000007e9u, 0x000007e4u, 0x0006000cu, 0x00000009u, 0x000007eau, - 0x00000001u, 0x00000042u, 0x000007e9u, 0x0003003eu, 0x000007e8u, 0x000007eau, 0x0004003du, 0x00000009u, - 0x000007ebu, 0x000007e8u, 0x000500bau, 0x00000011u, 0x000007ecu, 0x000007ebu, 0x00000073u, 0x000300f7u, - 0x000007eeu, 0x00000000u, 0x000400fau, 0x000007ecu, 0x000007edu, 0x000007eeu, 0x000200f8u, 0x000007edu, - 0x0004003du, 0x0000009au, 0x000007efu, 0x000007e4u, 0x0004003du, 0x00000009u, 0x000007f0u, 0x000007e8u, - 0x00050050u, 0x0000009au, 0x000007f1u, 0x000007f0u, 0x000007f0u, 0x00050088u, 0x0000009au, 0x000007f2u, - 0x000007efu, 0x000007f1u, 0x0003003eu, 0x00000650u, 0x000007f2u, 0x000200f9u, 0x000007eeu, 0x000200f8u, - 0x000007eeu, 0x000200f9u, 0x00000787u, 0x000200f8u, 0x00000787u, 0x0003003eu, 0x000007f3u, 0x00000037u, - 0x0004003du, 0x00000011u, 0x000007f4u, 0x00000651u, 0x0004003du, 0x00000011u, 0x000007f5u, 0x00000654u, - 0x000500a7u, 0x00000011u, 0x000007f6u, 0x000007f4u, 0x000007f5u, 0x000300f7u, 0x000007f8u, 0x00000000u, - 0x000400fau, 0x000007f6u, 0x000007f7u, 0x000007f8u, 0x000200f8u, 0x000007f7u, 0x0004003du, 0x0000009au, - 0x000007f9u, 0x0000064eu, 0x0006000cu, 0x00000009u, 0x000007fau, 0x00000001u, 0x00000042u, 0x000007f9u, - 0x000500bau, 0x00000011u, 0x000007fbu, 0x000007fau, 0x00000073u, 0x000200f9u, 0x000007f8u, 0x000200f8u, - 0x000007f8u, 0x000700f5u, 0x00000011u, 0x000007fcu, 0x000007f6u, 0x00000787u, 0x000007fbu, 0x000007f7u, - 0x000300f7u, 0x000007feu, 0x00000000u, 0x000400fau, 0x000007fcu, 0x000007fdu, 0x000007feu, 0x000200f8u, - 0x000007fdu, 0x0004003du, 0x0000009au, 0x000007ffu, 0x00000650u, 0x0006000cu, 0x00000009u, 0x00000800u, - 0x00000001u, 0x00000042u, 0x000007ffu, 0x000500bau, 0x00000011u, 0x00000801u, 0x00000800u, 0x00000073u, - 0x000200f9u, 0x000007feu, 0x000200f8u, 0x000007feu, 0x000700f5u, 0x00000011u, 0x00000802u, 0x000007fcu, - 0x000007f8u, 0x00000801u, 0x000007fdu, 0x000300f7u, 0x00000804u, 0x00000000u, 0x000400fau, 0x00000802u, - 0x00000803u, 0x00000832u, 0x000200f8u, 0x00000803u, 0x00050041u, 0x00000039u, 0x00000806u, 0x0000064eu, - 0x00000008u, 0x0004003du, 0x00000009u, 0x00000807u, 0x00000806u, 0x0004007fu, 0x00000009u, 0x00000808u, - 0x00000807u, 0x00050041u, 0x00000039u, 0x00000809u, 0x0000064eu, 0x0000007du, 0x0004003du, 0x00000009u, - 0x0000080au, 0x00000809u, 0x00050050u, 0x0000009au, 0x0000080bu, 0x00000808u, 0x0000080au, 0x0003003eu, - 0x00000805u, 0x0000080bu, 0x00050041u, 0x00000039u, 0x0000080du, 0x00000650u, 0x00000008u, 0x0004003du, - 0x00000009u, 0x0000080eu, 0x0000080du, 0x0004007fu, 0x00000009u, 0x0000080fu, 0x0000080eu, 0x00050041u, - 0x00000039u, 0x00000810u, 0x00000650u, 0x0000007du, 0x0004003du, 0x00000009u, 0x00000811u, 0x00000810u, - 0x00050050u, 0x0000009au, 0x00000812u, 0x0000080fu, 0x00000811u, 0x0003003eu, 0x0000080cu, 0x00000812u, - 0x0004003du, 0x0000009au, 0x00000814u, 0x00000805u, 0x0004003du, 0x0000009au, 0x00000815u, 0x0000080cu, - 0x00050081u, 0x0000009au, 0x00000816u, 0x00000814u, 0x00000815u, 0x0003003eu, 0x00000813u, 0x00000816u, - 0x0004003du, 0x0000009au, 0x00000818u, 0x00000813u, 0x0006000cu, 0x00000009u, 0x00000819u, 0x00000001u, - 0x00000042u, 0x00000818u, 0x0003003eu, 0x00000817u, 0x00000819u, 0x0004003du, 0x00000009u, 0x0000081au, - 0x00000817u, 0x000500bau, 0x00000011u, 0x0000081bu, 0x0000081au, 0x00000073u, 0x000300f7u, 0x0000081du, - 0x00000000u, 0x000400fau, 0x0000081bu, 0x0000081cu, 0x00000830u, 0x000200f8u, 0x0000081cu, 0x0004003du, - 0x0000009au, 0x0000081fu, 0x00000813u, 0x0004003du, 0x00000009u, 0x00000820u, 0x00000817u, 0x00050050u, - 0x0000009au, 0x00000821u, 0x00000820u, 0x00000820u, 0x00050088u, 0x0000009au, 0x00000822u, 0x0000081fu, - 0x00000821u, 0x0003003eu, 0x0000081eu, 0x00000822u, 0x0004003du, 0x0000009au, 0x00000824u, 0x0000081eu, - 0x0004003du, 0x0000009au, 0x00000825u, 0x0000080cu, 0x00050094u, 0x00000009u, 0x00000826u, 0x00000824u, - 0x00000825u, 0x0003003eu, 0x00000823u, 0x00000826u, 0x0004003du, 0x00000009u, 0x00000827u, 0x00000823u, - 0x000500bau, 0x00000011u, 0x00000828u, 0x00000827u, 0x00000033u, 0x000300f7u, 0x0000082bu, 0x00000000u, - 0x000400fau, 0x00000828u, 0x0000082au, 0x0000082eu, 0x000200f8u, 0x0000082au, 0x0004003du, 0x00000009u, - 0x0000082cu, 0x00000823u, 0x00050088u, 0x00000009u, 0x0000082du, 0x00000037u, 0x0000082cu, 0x0003003eu, - 0x00000829u, 0x0000082du, 0x000200f9u, 0x0000082bu, 0x000200f8u, 0x0000082eu, 0x0003003eu, 0x00000829u, - 0x00000122u, 0x000200f9u, 0x0000082bu, 0x000200f8u, 0x0000082bu, 0x0004003du, 0x00000009u, 0x0000082fu, - 0x00000829u, 0x0003003eu, 0x000007f3u, 0x0000082fu, 0x000200f9u, 0x0000081du, 0x000200f8u, 0x00000830u, - 0x0004003du, 0x0000009au, 0x00000831u, 0x0000080cu, 0x0003003eu, 0x0000081eu, 0x00000831u, 0x000200f9u, - 0x0000081du, 0x000200f8u, 0x0000081du, 0x000200f9u, 0x00000804u, 0x000200f8u, 0x00000832u, 0x0004003du, - 0x00000011u, 0x00000833u, 0x00000654u, 0x000300f7u, 0x00000835u, 0x00000000u, 0x000400fau, 0x00000833u, - 0x00000834u, 0x00000835u, 0x000200f8u, 0x00000834u, 0x0004003du, 0x0000009au, 0x00000836u, 0x00000650u, - 0x0006000cu, 0x00000009u, 0x00000837u, 0x00000001u, 0x00000042u, 0x00000836u, 0x000500bau, 0x00000011u, - 0x00000838u, 0x00000837u, 0x00000073u, 0x000200f9u, 0x00000835u, 0x000200f8u, 0x00000835u, 0x000700f5u, - 0x00000011u, 0x00000839u, 0x00000833u, 0x00000832u, 0x00000838u, 0x00000834u, 0x000300f7u, 0x0000083bu, - 0x00000000u, 0x000400fau, 0x00000839u, 0x0000083au, 0x00000842u, 0x000200f8u, 0x0000083au, 0x00050041u, - 0x00000039u, 0x0000083cu, 0x00000650u, 0x00000008u, 0x0004003du, 0x00000009u, 0x0000083du, 0x0000083cu, - 0x0004007fu, 0x00000009u, 0x0000083eu, 0x0000083du, 0x00050041u, 0x00000039u, 0x0000083fu, 0x00000650u, - 0x0000007du, 0x0004003du, 0x00000009u, 0x00000840u, 0x0000083fu, 0x00050050u, 0x0000009au, 0x00000841u, - 0x0000083eu, 0x00000840u, 0x0003003eu, 0x0000081eu, 0x00000841u, 0x000200f9u, 0x0000083bu, 0x000200f8u, - 0x00000842u, 0x0004003du, 0x00000011u, 0x00000843u, 0x00000651u, 0x000300f7u, 0x00000845u, 0x00000000u, - 0x000400fau, 0x00000843u, 0x00000844u, 0x00000845u, 0x000200f8u, 0x00000844u, 0x0004003du, 0x0000009au, - 0x00000846u, 0x0000064eu, 0x0006000cu, 0x00000009u, 0x00000847u, 0x00000001u, 0x00000042u, 0x00000846u, - 0x000500bau, 0x00000011u, 0x00000848u, 0x00000847u, 0x00000073u, 0x000200f9u, 0x00000845u, 0x000200f8u, - 0x00000845u, 0x000700f5u, 0x00000011u, 0x00000849u, 0x00000843u, 0x00000842u, 0x00000848u, 0x00000844u, - 0x000300f7u, 0x0000084bu, 0x00000000u, 0x000400fau, 0x00000849u, 0x0000084au, 0x00000852u, 0x000200f8u, - 0x0000084au, 0x00050041u, 0x00000039u, 0x0000084cu, 0x0000064eu, 0x00000008u, 0x0004003du, 0x00000009u, - 0x0000084du, 0x0000084cu, 0x0004007fu, 0x00000009u, 0x0000084eu, 0x0000084du, 0x00050041u, 0x00000039u, - 0x0000084fu, 0x0000064eu, 0x0000007du, 0x0004003du, 0x00000009u, 0x00000850u, 0x0000084fu, 0x00050050u, - 0x0000009au, 0x00000851u, 0x0000084eu, 0x00000850u, 0x0003003eu, 0x0000081eu, 0x00000851u, 0x000200f9u, - 0x0000084bu, 0x000200f8u, 0x00000852u, 0x0003003eu, 0x0000081eu, 0x00000853u, 0x000200f9u, 0x0000084bu, - 0x000200f8u, 0x0000084bu, 0x000200f9u, 0x0000083bu, 0x000200f8u, 0x0000083bu, 0x000200f9u, 0x00000804u, - 0x000200f8u, 0x00000804u, 0x0004003du, 0x0000000au, 0x00000856u, 0x00000645u, 0x0003003eu, 0x00000855u, - 0x00000856u, 0x00050039u, 0x00000009u, 0x00000857u, 0x0000000eu, 0x00000855u, 0x0003003eu, 0x00000854u, - 0x00000857u, 0x0004003du, 0x00000009u, 0x00000859u, 0x000004abu, 0x0004003du, 0x00000009u, 0x0000085au, - 0x00000854u, 0x00050085u, 0x00000009u, 0x0000085bu, 0x00000859u, 0x0000085au, 0x0003003eu, 0x00000858u, - 0x0000085bu, 0x00050041u, 0x00000039u, 0x0000085du, 0x0000081eu, 0x0000007du, 0x0004003du, 0x00000009u, - 0x0000085eu, 0x0000085du, 0x0004003du, 0x00000009u, 0x0000085fu, 0x00000858u, 0x00050085u, 0x00000009u, - 0x00000860u, 0x0000085eu, 0x0000085fu, 0x0004003du, 0x00000009u, 0x00000861u, 0x000007f3u, 0x00050085u, - 0x00000009u, 0x00000862u, 0x00000860u, 0x00000861u, 0x00050085u, 0x00000009u, 0x00000863u, 0x00000862u, - 0x00000122u, 0x00050041u, 0x00000039u, 0x00000864u, 0x00000348u, 0x00000082u, 0x0004003du, 0x00000009u, - 0x00000865u, 0x00000864u, 0x00050088u, 0x00000009u, 0x00000866u, 0x00000863u, 0x00000865u, 0x00050041u, - 0x00000039u, 0x00000867u, 0x00000645u, 0x0000003eu, 0x0004003du, 0x00000009u, 0x00000868u, 0x00000867u, - 0x00050085u, 0x00000009u, 0x00000869u, 0x00000866u, 0x00000868u, 0x0003003eu, 0x0000085cu, 0x00000869u, - 0x00050041u, 0x00000039u, 0x0000086bu, 0x0000081eu, 0x00000008u, 0x0004003du, 0x00000009u, 0x0000086cu, - 0x0000086bu, 0x0004007fu, 0x00000009u, 0x0000086du, 0x0000086cu, 0x0004003du, 0x00000009u, 0x0000086eu, - 0x00000858u, 0x00050085u, 0x00000009u, 0x0000086fu, 0x0000086du, 0x0000086eu, 0x0004003du, 0x00000009u, - 0x00000870u, 0x000007f3u, 0x00050085u, 0x00000009u, 0x00000871u, 0x0000086fu, 0x00000870u, 0x00050085u, - 0x00000009u, 0x00000872u, 0x00000871u, 0x00000122u, 0x00050041u, 0x00000039u, 0x00000873u, 0x00000348u, - 0x0000008du, 0x0004003du, 0x00000009u, 0x00000874u, 0x00000873u, 0x00050088u, 0x00000009u, 0x00000875u, - 0x00000872u, 0x00000874u, 0x00050041u, 0x00000039u, 0x00000876u, 0x00000645u, 0x0000003eu, 0x0004003du, - 0x00000009u, 0x00000877u, 0x00000876u, 0x00050085u, 0x00000009u, 0x00000878u, 0x00000875u, 0x00000877u, - 0x0003003eu, 0x0000086au, 0x00000878u, 0x0004003du, 0x00000006u, 0x0000087au, 0x0000063bu, 0x00050084u, - 0x00000006u, 0x0000087bu, 0x0000087au, 0x0000003bu, 0x0003003eu, 0x00000879u, 0x0000087bu, 0x0004003du, - 0x00000006u, 0x0000087cu, 0x00000879u, 0x00050041u, 0x00000039u, 0x0000087du, 0x00000645u, 0x0000007du, - 0x0004003du, 0x00000009u, 0x0000087eu, 0x0000087du, 0x0004003du, 0x00000009u, 0x0000087fu, 0x0000085cu, - 0x00050083u, 0x00000009u, 0x00000880u, 0x0000087eu, 0x0000087fu, 0x00050041u, 0x00000039u, 0x00000881u, - 0x00000645u, 0x00000008u, 0x0004003du, 0x00000009u, 0x00000882u, 0x00000881u, 0x0004003du, 0x00000009u, - 0x00000883u, 0x0000086au, 0x00050083u, 0x00000009u, 0x00000884u, 0x00000882u, 0x00000883u, 0x00050041u, - 0x00000039u, 0x00000885u, 0x00000645u, 0x0000003bu, 0x0004003du, 0x00000009u, 0x00000886u, 0x00000885u, - 0x00050041u, 0x00000039u, 0x00000887u, 0x00000645u, 0x0000003eu, 0x0004003du, 0x00000009u, 0x00000888u, - 0x00000887u, 0x00070050u, 0x0000000au, 0x00000889u, 0x00000880u, 0x00000884u, 0x00000886u, 0x00000888u, - 0x00060041u, 0x00000403u, 0x0000088au, 0x00000400u, 0x0000087cu, 0x00000054u, 0x0003003eu, 0x0000088au, - 0x00000889u, 0x0004003du, 0x00000006u, 0x0000088bu, 0x00000879u, 0x00050080u, 0x00000006u, 0x0000088cu, - 0x0000088bu, 0x00000008u, 0x00050041u, 0x00000039u, 0x0000088du, 0x00000645u, 0x0000007du, 0x0004003du, - 0x00000009u, 0x0000088eu, 0x0000088du, 0x0004003du, 0x00000009u, 0x0000088fu, 0x0000085cu, 0x00050081u, - 0x00000009u, 0x00000890u, 0x0000088eu, 0x0000088fu, 0x00050041u, 0x00000039u, 0x00000891u, 0x00000645u, - 0x00000008u, 0x0004003du, 0x00000009u, 0x00000892u, 0x00000891u, 0x0004003du, 0x00000009u, 0x00000893u, - 0x0000086au, 0x00050081u, 0x00000009u, 0x00000894u, 0x00000892u, 0x00000893u, 0x00050041u, 0x00000039u, - 0x00000895u, 0x00000645u, 0x0000003bu, 0x0004003du, 0x00000009u, 0x00000896u, 0x00000895u, 0x00050041u, - 0x00000039u, 0x00000897u, 0x00000645u, 0x0000003eu, 0x0004003du, 0x00000009u, 0x00000898u, 0x00000897u, - 0x00070050u, 0x0000000au, 0x00000899u, 0x00000890u, 0x00000894u, 0x00000896u, 0x00000898u, 0x00060041u, - 0x00000403u, 0x0000089au, 0x00000400u, 0x0000088cu, 0x00000054u, 0x0003003eu, 0x0000089au, 0x00000899u, - 0x000200f9u, 0x00000640u, 0x000200f8u, 0x00000640u, 0x0004003du, 0x00000006u, 0x0000089bu, 0x0000063bu, - 0x00050080u, 0x00000006u, 0x0000089cu, 0x0000089bu, 0x00000007u, 0x0003003eu, 0x0000063bu, 0x0000089cu, - 0x000200f9u, 0x0000063du, 0x000200f8u, 0x0000063fu, 0x0004003du, 0x00000006u, 0x0000089du, 0x0000030du, - 0x000500aau, 0x00000011u, 0x0000089eu, 0x0000089du, 0x0000007du, 0x000300f7u, 0x000008a0u, 0x00000000u, - 0x000400fau, 0x0000089eu, 0x0000089fu, 0x000008a0u, 0x000200f8u, 0x0000089fu, 0x0004003du, 0x00000011u, - 0x000008a1u, 0x00000615u, 0x0004003du, 0x00000006u, 0x000008a2u, 0x000005c1u, 0x000500aeu, 0x00000011u, - 0x000008a3u, 0x000008a2u, 0x0000003bu, 0x000500a7u, 0x00000011u, 0x000008a4u, 0x000008a1u, 0x000008a3u, - 0x000300f7u, 0x000008a6u, 0x00000000u, 0x000400fau, 0x000008a4u, 0x000008a5u, 0x000008a6u, 0x000200f8u, - 0x000008a5u, 0x00050041u, 0x000005edu, 0x000008a8u, 0x000005b4u, 0x00000054u, 0x0004003du, 0x0000000au, - 0x000008a9u, 0x000008a8u, 0x0003003eu, 0x000008a7u, 0x000008a9u, 0x00050041u, 0x0000060eu, 0x000008abu, - 0x000005f9u, 0x00000054u, 0x0004003du, 0x0000009au, 0x000008acu, 0x000008abu, 0x0003003eu, 0x000008aau, - 0x000008acu, 0x00050041u, 0x0000060eu, 0x000008aeu, 0x000005f9u, 0x0000011cu, 0x0004003du, 0x0000009au, - 0x000008afu, 0x000008aeu, 0x0003003eu, 0x000008adu, 0x000008afu, 0x0004003du, 0x0000009au, 0x000008b1u, - 0x000008adu, 0x0004003du, 0x0000009au, 0x000008b2u, 0x000008aau, 0x00050083u, 0x0000009au, 0x000008b3u, - 0x000008b1u, 0x000008b2u, 0x0006000cu, 0x0000009au, 0x000008b4u, 0x00000001u, 0x00000045u, 0x000008b3u, - 0x0003003eu, 0x000008b0u, 0x000008b4u, 0x00050041u, 0x00000039u, 0x000008b6u, 0x000008b0u, 0x00000008u, - 0x0004003du, 0x00000009u, 0x000008b7u, 0x000008b6u, 0x0004007fu, 0x00000009u, 0x000008b8u, 0x000008b7u, - 0x00050041u, 0x00000039u, 0x000008b9u, 0x000008b0u, 0x0000007du, 0x0004003du, 0x00000009u, 0x000008bau, - 0x000008b9u, 0x00050050u, 0x0000009au, 0x000008bbu, 0x000008b8u, 0x000008bau, 0x0003003eu, 0x000008b5u, - 0x000008bbu, 0x0004003du, 0x00000006u, 0x000008bcu, 0x00000626u, 0x0004003du, 0x0000000au, 0x000008bdu, - 0x000008a7u, 0x00060041u, 0x00000403u, 0x000008beu, 0x00000400u, 0x000008bcu, 0x00000054u, 0x0003003eu, - 0x000008beu, 0x000008bdu, 0x0003003eu, 0x000008c1u, 0x000008c5u, 0x0004003du, 0x0000000au, 0x000008c8u, - 0x000008a7u, 0x0003003eu, 0x000008c7u, 0x000008c8u, 0x00050039u, 0x00000009u, 0x000008c9u, 0x0000000eu, - 0x000008c7u, 0x0003003eu, 0x000008c6u, 0x000008c9u, 0x0004003du, 0x00000009u, 0x000008cbu, 0x000004abu, - 0x0004003du, 0x00000009u, 0x000008ccu, 0x000008c6u, 0x00050085u, 0x00000009u, 0x000008cdu, 0x000008cbu, - 0x000008ccu, 0x0003003eu, 0x000008cau, 0x000008cdu, 0x0003003eu, 0x000008ceu, 0x00000054u, 0x000200f9u, - 0x000008cfu, 0x000200f8u, 0x000008cfu, 0x000400f6u, 0x000008d1u, 0x000008d2u, 0x00000000u, 0x000200f9u, - 0x000008d3u, 0x000200f8u, 0x000008d3u, 0x0004003du, 0x0000002bu, 0x000008d4u, 0x000008ceu, 0x000500b1u, - 0x00000011u, 0x000008d5u, 0x000008d4u, 0x0000008du, 0x000400fau, 0x000008d5u, 0x000008d0u, 0x000008d1u, - 0x000200f8u, 0x000008d0u, 0x0004003du, 0x0000002bu, 0x000008d7u, 0x000008ceu, 0x00050041u, 0x00000039u, - 0x000008d8u, 0x000008c1u, 0x000008d7u, 0x0004003du, 0x00000009u, 0x000008d9u, 0x000008d8u, 0x0003003eu, - 0x000008d6u, 0x000008d9u, 0x0004003du, 0x00000009u, 0x000008dbu, 0x000008d6u, 0x0006000cu, 0x00000009u, - 0x000008dcu, 0x00000001u, 0x0000000eu, 0x000008dbu, 0x0004003du, 0x0000009au, 0x000008ddu, 0x000008b5u, - 0x0005008eu, 0x0000009au, 0x000008deu, 0x000008ddu, 0x000008dcu, 0x0004003du, 0x00000009u, 0x000008dfu, - 0x000008d6u, 0x0006000cu, 0x00000009u, 0x000008e0u, 0x00000001u, 0x0000000du, 0x000008dfu, 0x0004003du, - 0x0000009au, 0x000008e1u, 0x000008b0u, 0x0004007fu, 0x0000009au, 0x000008e2u, 0x000008e1u, 0x0005008eu, - 0x0000009au, 0x000008e3u, 0x000008e2u, 0x000008e0u, 0x00050081u, 0x0000009au, 0x000008e4u, 0x000008deu, - 0x000008e3u, 0x0003003eu, 0x000008dau, 0x000008e4u, 0x00050041u, 0x00000039u, 0x000008e6u, 0x000008dau, - 0x0000007du, 0x0004003du, 0x00000009u, 0x000008e7u, 0x000008e6u, 0x0004003du, 0x00000009u, 0x000008e8u, - 0x000008cau, 0x00050085u, 0x00000009u, 0x000008e9u, 0x000008e7u, 0x000008e8u, 0x00050085u, 0x00000009u, - 0x000008eau, 0x000008e9u, 0x00000122u, 0x00050041u, 0x00000039u, 0x000008ebu, 0x00000348u, 0x00000082u, - 0x0004003du, 0x00000009u, 0x000008ecu, 0x000008ebu, 0x00050088u, 0x00000009u, 0x000008edu, 0x000008eau, - 0x000008ecu, 0x00050041u, 0x00000039u, 0x000008eeu, 0x000008a7u, 0x0000003eu, 0x0004003du, 0x00000009u, - 0x000008efu, 0x000008eeu, 0x00050085u, 0x00000009u, 0x000008f0u, 0x000008edu, 0x000008efu, 0x0003003eu, - 0x000008e5u, 0x000008f0u, 0x00050041u, 0x00000039u, 0x000008f2u, 0x000008dau, 0x00000008u, 0x0004003du, - 0x00000009u, 0x000008f3u, 0x000008f2u, 0x0004007fu, 0x00000009u, 0x000008f4u, 0x000008f3u, 0x0004003du, - 0x00000009u, 0x000008f5u, 0x000008cau, 0x00050085u, 0x00000009u, 0x000008f6u, 0x000008f4u, 0x000008f5u, - 0x00050085u, 0x00000009u, 0x000008f7u, 0x000008f6u, 0x00000122u, 0x00050041u, 0x00000039u, 0x000008f8u, - 0x00000348u, 0x0000008du, 0x0004003du, 0x00000009u, 0x000008f9u, 0x000008f8u, 0x00050088u, 0x00000009u, - 0x000008fau, 0x000008f7u, 0x000008f9u, 0x00050041u, 0x00000039u, 0x000008fbu, 0x000008a7u, 0x0000003eu, - 0x0004003du, 0x00000009u, 0x000008fcu, 0x000008fbu, 0x00050085u, 0x00000009u, 0x000008fdu, 0x000008fau, - 0x000008fcu, 0x0003003eu, 0x000008f1u, 0x000008fdu, 0x0004003du, 0x00000006u, 0x000008feu, 0x00000626u, - 0x00050080u, 0x00000006u, 0x000008ffu, 0x000008feu, 0x00000008u, 0x0004003du, 0x0000002bu, 0x00000900u, - 0x000008ceu, 0x0004007cu, 0x00000006u, 0x00000901u, 0x00000900u, 0x00050080u, 0x00000006u, 0x00000902u, - 0x000008ffu, 0x00000901u, 0x00050041u, 0x00000039u, 0x00000903u, 0x000008a7u, 0x0000007du, 0x0004003du, - 0x00000009u, 0x00000904u, 0x00000903u, 0x0004003du, 0x00000009u, 0x00000905u, 0x000008e5u, 0x00050081u, - 0x00000009u, 0x00000906u, 0x00000904u, 0x00000905u, 0x00050041u, 0x00000039u, 0x00000907u, 0x000008a7u, - 0x00000008u, 0x0004003du, 0x00000009u, 0x00000908u, 0x00000907u, 0x0004003du, 0x00000009u, 0x00000909u, - 0x000008f1u, 0x00050081u, 0x00000009u, 0x0000090au, 0x00000908u, 0x00000909u, 0x00050041u, 0x00000039u, - 0x0000090bu, 0x000008a7u, 0x0000003bu, 0x0004003du, 0x00000009u, 0x0000090cu, 0x0000090bu, 0x00050041u, - 0x00000039u, 0x0000090du, 0x000008a7u, 0x0000003eu, 0x0004003du, 0x00000009u, 0x0000090eu, 0x0000090du, - 0x00070050u, 0x0000000au, 0x0000090fu, 0x00000906u, 0x0000090au, 0x0000090cu, 0x0000090eu, 0x00060041u, - 0x00000403u, 0x00000910u, 0x00000400u, 0x00000902u, 0x00000054u, 0x0003003eu, 0x00000910u, 0x0000090fu, - 0x000200f9u, 0x000008d2u, 0x000200f8u, 0x000008d2u, 0x0004003du, 0x0000002bu, 0x00000911u, 0x000008ceu, - 0x00050080u, 0x0000002bu, 0x00000912u, 0x00000911u, 0x0000011cu, 0x0003003eu, 0x000008ceu, 0x00000912u, - 0x000200f9u, 0x000008cfu, 0x000200f8u, 0x000008d1u, 0x000200f9u, 0x000008a6u, 0x000200f8u, 0x000008a6u, - 0x0004003du, 0x00000011u, 0x00000913u, 0x00000616u, 0x0004003du, 0x00000006u, 0x00000914u, 0x000005c1u, - 0x000500aeu, 0x00000011u, 0x00000915u, 0x00000914u, 0x0000003bu, 0x000500a7u, 0x00000011u, 0x00000916u, - 0x00000913u, 0x00000915u, 0x000300f7u, 0x00000918u, 0x00000000u, 0x000400fau, 0x00000916u, 0x00000917u, - 0x00000918u, 0x000200f8u, 0x00000917u, 0x0004003du, 0x00000006u, 0x0000091au, 0x000005c1u, 0x00050082u, - 0x00000006u, 0x0000091bu, 0x0000091au, 0x00000008u, 0x0003003eu, 0x00000919u, 0x0000091bu, 0x0004003du, - 0x00000006u, 0x0000091du, 0x00000919u, 0x00050041u, 0x000005edu, 0x0000091eu, 0x000005b4u, 0x0000091du, - 0x0004003du, 0x0000000au, 0x0000091fu, 0x0000091eu, 0x0003003eu, 0x0000091cu, 0x0000091fu, 0x0004003du, - 0x00000006u, 0x00000921u, 0x00000919u, 0x00050041u, 0x0000060eu, 0x00000922u, 0x000005f9u, 0x00000921u, - 0x0004003du, 0x0000009au, 0x00000923u, 0x00000922u, 0x0003003eu, 0x00000920u, 0x00000923u, 0x0004003du, - 0x00000006u, 0x00000925u, 0x00000919u, 0x00050082u, 0x00000006u, 0x00000926u, 0x00000925u, 0x00000008u, - 0x00050041u, 0x0000060eu, 0x00000927u, 0x000005f9u, 0x00000926u, 0x0004003du, 0x0000009au, 0x00000928u, - 0x00000927u, 0x0003003eu, 0x00000924u, 0x00000928u, 0x0004003du, 0x0000009au, 0x0000092au, 0x00000920u, - 0x0004003du, 0x0000009au, 0x0000092bu, 0x00000924u, 0x00050083u, 0x0000009au, 0x0000092cu, 0x0000092au, - 0x0000092bu, 0x0006000cu, 0x0000009au, 0x0000092du, 0x00000001u, 0x00000045u, 0x0000092cu, 0x0003003eu, - 0x00000929u, 0x0000092du, 0x00050041u, 0x00000039u, 0x0000092fu, 0x00000929u, 0x00000008u, 0x0004003du, - 0x00000009u, 0x00000930u, 0x0000092fu, 0x0004007fu, 0x00000009u, 0x00000931u, 0x00000930u, 0x00050041u, - 0x00000039u, 0x00000932u, 0x00000929u, 0x0000007du, 0x0004003du, 0x00000009u, 0x00000933u, 0x00000932u, - 0x00050050u, 0x0000009au, 0x00000934u, 0x00000931u, 0x00000933u, 0x0003003eu, 0x0000092eu, 0x00000934u, - 0x0004003du, 0x00000006u, 0x00000935u, 0x00000628u, 0x0004003du, 0x0000000au, 0x00000936u, 0x0000091cu, - 0x00060041u, 0x00000403u, 0x00000937u, 0x00000400u, 0x00000935u, 0x00000054u, 0x0003003eu, 0x00000937u, - 0x00000936u, 0x0003003eu, 0x00000938u, 0x000008c5u, 0x0004003du, 0x0000000au, 0x0000093bu, 0x0000091cu, - 0x0003003eu, 0x0000093au, 0x0000093bu, 0x00050039u, 0x00000009u, 0x0000093cu, 0x0000000eu, 0x0000093au, - 0x0003003eu, 0x00000939u, 0x0000093cu, 0x0004003du, 0x00000009u, 0x0000093eu, 0x000004abu, 0x0004003du, - 0x00000009u, 0x0000093fu, 0x00000939u, 0x00050085u, 0x00000009u, 0x00000940u, 0x0000093eu, 0x0000093fu, - 0x0003003eu, 0x0000093du, 0x00000940u, 0x0003003eu, 0x00000941u, 0x00000054u, 0x000200f9u, 0x00000942u, - 0x000200f8u, 0x00000942u, 0x000400f6u, 0x00000944u, 0x00000945u, 0x00000000u, 0x000200f9u, 0x00000946u, - 0x000200f8u, 0x00000946u, 0x0004003du, 0x0000002bu, 0x00000947u, 0x00000941u, 0x000500b1u, 0x00000011u, - 0x00000948u, 0x00000947u, 0x0000008du, 0x000400fau, 0x00000948u, 0x00000943u, 0x00000944u, 0x000200f8u, - 0x00000943u, 0x0004003du, 0x0000002bu, 0x0000094au, 0x00000941u, 0x00050041u, 0x00000039u, 0x0000094bu, - 0x00000938u, 0x0000094au, 0x0004003du, 0x00000009u, 0x0000094cu, 0x0000094bu, 0x0003003eu, 0x00000949u, - 0x0000094cu, 0x0004003du, 0x00000009u, 0x0000094eu, 0x00000949u, 0x0006000cu, 0x00000009u, 0x0000094fu, - 0x00000001u, 0x0000000eu, 0x0000094eu, 0x0004003du, 0x0000009au, 0x00000950u, 0x0000092eu, 0x0004007fu, - 0x0000009au, 0x00000951u, 0x00000950u, 0x0005008eu, 0x0000009au, 0x00000952u, 0x00000951u, 0x0000094fu, - 0x0004003du, 0x00000009u, 0x00000953u, 0x00000949u, 0x0006000cu, 0x00000009u, 0x00000954u, 0x00000001u, - 0x0000000du, 0x00000953u, 0x0004003du, 0x0000009au, 0x00000955u, 0x00000929u, 0x0005008eu, 0x0000009au, - 0x00000956u, 0x00000955u, 0x00000954u, 0x00050081u, 0x0000009au, 0x00000957u, 0x00000952u, 0x00000956u, - 0x0003003eu, 0x0000094du, 0x00000957u, 0x00050041u, 0x00000039u, 0x00000959u, 0x0000094du, 0x0000007du, - 0x0004003du, 0x00000009u, 0x0000095au, 0x00000959u, 0x0004003du, 0x00000009u, 0x0000095bu, 0x0000093du, - 0x00050085u, 0x00000009u, 0x0000095cu, 0x0000095au, 0x0000095bu, 0x00050085u, 0x00000009u, 0x0000095du, - 0x0000095cu, 0x00000122u, 0x00050041u, 0x00000039u, 0x0000095eu, 0x00000348u, 0x00000082u, 0x0004003du, - 0x00000009u, 0x0000095fu, 0x0000095eu, 0x00050088u, 0x00000009u, 0x00000960u, 0x0000095du, 0x0000095fu, - 0x00050041u, 0x00000039u, 0x00000961u, 0x0000091cu, 0x0000003eu, 0x0004003du, 0x00000009u, 0x00000962u, - 0x00000961u, 0x00050085u, 0x00000009u, 0x00000963u, 0x00000960u, 0x00000962u, 0x0003003eu, 0x00000958u, - 0x00000963u, 0x00050041u, 0x00000039u, 0x00000965u, 0x0000094du, 0x00000008u, 0x0004003du, 0x00000009u, - 0x00000966u, 0x00000965u, 0x0004007fu, 0x00000009u, 0x00000967u, 0x00000966u, 0x0004003du, 0x00000009u, - 0x00000968u, 0x0000093du, 0x00050085u, 0x00000009u, 0x00000969u, 0x00000967u, 0x00000968u, 0x00050085u, - 0x00000009u, 0x0000096au, 0x00000969u, 0x00000122u, 0x00050041u, 0x00000039u, 0x0000096bu, 0x00000348u, - 0x0000008du, 0x0004003du, 0x00000009u, 0x0000096cu, 0x0000096bu, 0x00050088u, 0x00000009u, 0x0000096du, - 0x0000096au, 0x0000096cu, 0x00050041u, 0x00000039u, 0x0000096eu, 0x0000091cu, 0x0000003eu, 0x0004003du, - 0x00000009u, 0x0000096fu, 0x0000096eu, 0x00050085u, 0x00000009u, 0x00000970u, 0x0000096du, 0x0000096fu, - 0x0003003eu, 0x00000964u, 0x00000970u, 0x0004003du, 0x00000006u, 0x00000971u, 0x00000628u, 0x00050080u, - 0x00000006u, 0x00000972u, 0x00000971u, 0x00000008u, 0x0004003du, 0x0000002bu, 0x00000973u, 0x00000941u, - 0x0004007cu, 0x00000006u, 0x00000974u, 0x00000973u, 0x00050080u, 0x00000006u, 0x00000975u, 0x00000972u, - 0x00000974u, 0x00050041u, 0x00000039u, 0x00000976u, 0x0000091cu, 0x0000007du, 0x0004003du, 0x00000009u, - 0x00000977u, 0x00000976u, 0x0004003du, 0x00000009u, 0x00000978u, 0x00000958u, 0x00050081u, 0x00000009u, - 0x00000979u, 0x00000977u, 0x00000978u, 0x00050041u, 0x00000039u, 0x0000097au, 0x0000091cu, 0x00000008u, - 0x0004003du, 0x00000009u, 0x0000097bu, 0x0000097au, 0x0004003du, 0x00000009u, 0x0000097cu, 0x00000964u, - 0x00050081u, 0x00000009u, 0x0000097du, 0x0000097bu, 0x0000097cu, 0x00050041u, 0x00000039u, 0x0000097eu, - 0x0000091cu, 0x0000003bu, 0x0004003du, 0x00000009u, 0x0000097fu, 0x0000097eu, 0x00050041u, 0x00000039u, - 0x00000980u, 0x0000091cu, 0x0000003eu, 0x0004003du, 0x00000009u, 0x00000981u, 0x00000980u, 0x00070050u, - 0x0000000au, 0x00000982u, 0x00000979u, 0x0000097du, 0x0000097fu, 0x00000981u, 0x00060041u, 0x00000403u, - 0x00000983u, 0x00000400u, 0x00000975u, 0x00000054u, 0x0003003eu, 0x00000983u, 0x00000982u, 0x000200f9u, - 0x00000945u, 0x000200f8u, 0x00000945u, 0x0004003du, 0x0000002bu, 0x00000984u, 0x00000941u, 0x00050080u, - 0x0000002bu, 0x00000985u, 0x00000984u, 0x0000011cu, 0x0003003eu, 0x00000941u, 0x00000985u, 0x000200f9u, - 0x00000942u, 0x000200f8u, 0x00000944u, 0x000200f9u, 0x00000918u, 0x000200f8u, 0x00000918u, 0x000200f9u, - 0x000008a0u, 0x000200f8u, 0x000008a0u, 0x0004003du, 0x00000006u, 0x00000986u, 0x0000030du, 0x000500aau, - 0x00000011u, 0x00000987u, 0x00000986u, 0x0000007du, 0x000300f7u, 0x00000989u, 0x00000000u, 0x000400fau, - 0x00000987u, 0x00000988u, 0x00000989u, 0x000200f8u, 0x00000988u, 0x0003003eu, 0x0000098au, 0x0000007du, - 0x0003003eu, 0x0000098bu, 0x0000007du, 0x000200f9u, 0x0000098cu, 0x000200f8u, 0x0000098cu, 0x000400f6u, - 0x0000098eu, 0x0000098fu, 0x00000000u, 0x000200f9u, 0x00000990u, 0x000200f8u, 0x00000990u, 0x0004003du, - 0x00000006u, 0x00000991u, 0x0000098bu, 0x0004003du, 0x00000006u, 0x00000992u, 0x00000612u, 0x000500b0u, - 0x00000011u, 0x00000993u, 0x00000991u, 0x00000992u, 0x000400fau, 0x00000993u, 0x0000098du, 0x0000098eu, - 0x000200f8u, 0x0000098du, 0x0004003du, 0x00000006u, 0x00000995u, 0x0000098bu, 0x00050084u, 0x00000006u, - 0x00000996u, 0x00000995u, 0x0000003bu, 0x0003003eu, 0x00000994u, 0x00000996u, 0x0004003du, 0x00000006u, - 0x00000998u, 0x0000098bu, 0x00050084u, 0x00000006u, 0x00000999u, 0x00000998u, 0x0000003bu, 0x00050080u, - 0x00000006u, 0x0000099au, 0x00000999u, 0x00000008u, 0x0003003eu, 0x00000997u, 0x0000099au, 0x0004003du, - 0x00000006u, 0x0000099cu, 0x0000098bu, 0x00050080u, 0x00000006u, 0x0000099du, 0x0000099cu, 0x00000008u, - 0x00050084u, 0x00000006u, 0x0000099eu, 0x0000099du, 0x0000003bu, 0x0003003eu, 0x0000099bu, 0x0000099eu, - 0x0004003du, 0x00000006u, 0x000009a0u, 0x0000098bu, 0x00050080u, 0x00000006u, 0x000009a1u, 0x000009a0u, - 0x00000008u, 0x00050084u, 0x00000006u, 0x000009a2u, 0x000009a1u, 0x0000003bu, 0x00050080u, 0x00000006u, - 0x000009a3u, 0x000009a2u, 0x00000008u, 0x0003003eu, 0x0000099fu, 0x000009a3u, 0x0004003du, 0x00000006u, - 0x000009a4u, 0x0000098au, 0x0004003du, 0x00000006u, 0x000009a5u, 0x00000994u, 0x0004003du, 0x00000006u, - 0x000009a6u, 0x00000997u, 0x0004003du, 0x00000006u, 0x000009a7u, 0x0000099bu, 0x00060050u, 0x00000307u, - 0x000009a8u, 0x000009a5u, 0x000009a6u, 0x000009a7u, 0x00050041u, 0x00000468u, 0x000009a9u, 0x0000045au, - 0x000009a4u, 0x0003003eu, 0x000009a9u, 0x000009a8u, 0x0004003du, 0x00000006u, 0x000009aau, 0x0000098au, - 0x00050080u, 0x00000006u, 0x000009abu, 0x000009aau, 0x0000011cu, 0x0003003eu, 0x0000098au, 0x000009abu, - 0x0004003du, 0x00000006u, 0x000009acu, 0x0000098au, 0x0004003du, 0x00000006u, 0x000009adu, 0x00000997u, - 0x0004003du, 0x00000006u, 0x000009aeu, 0x0000099fu, 0x0004003du, 0x00000006u, 0x000009afu, 0x0000099bu, - 0x00060050u, 0x00000307u, 0x000009b0u, 0x000009adu, 0x000009aeu, 0x000009afu, 0x00050041u, 0x00000468u, - 0x000009b1u, 0x0000045au, 0x000009acu, 0x0003003eu, 0x000009b1u, 0x000009b0u, 0x0004003du, 0x00000006u, - 0x000009b2u, 0x0000098au, 0x00050080u, 0x00000006u, 0x000009b3u, 0x000009b2u, 0x0000011cu, 0x0003003eu, - 0x0000098au, 0x000009b3u, 0x000200f9u, 0x0000098fu, 0x000200f8u, 0x0000098fu, 0x0004003du, 0x00000006u, - 0x000009b4u, 0x0000098bu, 0x00050080u, 0x00000006u, 0x000009b5u, 0x000009b4u, 0x0000011cu, 0x0003003eu, - 0x0000098bu, 0x000009b5u, 0x000200f9u, 0x0000098cu, 0x000200f8u, 0x0000098eu, 0x0004003du, 0x00000011u, - 0x000009b6u, 0x00000615u, 0x000300f7u, 0x000009b8u, 0x00000000u, 0x000400fau, 0x000009b6u, 0x000009b7u, - 0x000009b8u, 0x000200f8u, 0x000009b7u, 0x0004003du, 0x00000006u, 0x000009bau, 0x00000626u, 0x0003003eu, - 0x000009b9u, 0x000009bau, 0x0003003eu, 0x000009bbu, 0x00000008u, 0x0003003eu, 0x000009bcu, 0x0000007du, - 0x0004003du, 0x00000006u, 0x000009beu, 0x00000626u, 0x00050080u, 0x00000006u, 0x000009bfu, 0x000009beu, - 0x00000008u, 0x0003003eu, 0x000009bdu, 0x000009bfu, 0x0004003du, 0x00000006u, 0x000009c1u, 0x00000626u, - 0x00050080u, 0x00000006u, 0x000009c2u, 0x000009c1u, 0x0000003bu, 0x0003003eu, 0x000009c0u, 0x000009c2u, - 0x0004003du, 0x00000006u, 0x000009c4u, 0x00000626u, 0x00050080u, 0x00000006u, 0x000009c5u, 0x000009c4u, - 0x0000003eu, 0x0003003eu, 0x000009c3u, 0x000009c5u, 0x0004003du, 0x00000006u, 0x000009c6u, 0x0000098au, - 0x0004003du, 0x00000006u, 0x000009c7u, 0x000009b9u, 0x0004003du, 0x00000006u, 0x000009c8u, 0x000009bbu, - 0x0004003du, 0x00000006u, 0x000009c9u, 0x000009bdu, 0x00060050u, 0x00000307u, 0x000009cau, 0x000009c7u, - 0x000009c8u, 0x000009c9u, 0x00050041u, 0x00000468u, 0x000009cbu, 0x0000045au, 0x000009c6u, 0x0003003eu, - 0x000009cbu, 0x000009cau, 0x0004003du, 0x00000006u, 0x000009ccu, 0x0000098au, 0x00050080u, 0x00000006u, - 0x000009cdu, 0x000009ccu, 0x0000011cu, 0x0003003eu, 0x0000098au, 0x000009cdu, 0x0004003du, 0x00000006u, - 0x000009ceu, 0x0000098au, 0x0004003du, 0x00000006u, 0x000009cfu, 0x000009b9u, 0x0004003du, 0x00000006u, - 0x000009d0u, 0x000009bdu, 0x0004003du, 0x00000006u, 0x000009d1u, 0x000009c0u, 0x00060050u, 0x00000307u, - 0x000009d2u, 0x000009cfu, 0x000009d0u, 0x000009d1u, 0x00050041u, 0x00000468u, 0x000009d3u, 0x0000045au, - 0x000009ceu, 0x0003003eu, 0x000009d3u, 0x000009d2u, 0x0004003du, 0x00000006u, 0x000009d4u, 0x0000098au, - 0x00050080u, 0x00000006u, 0x000009d5u, 0x000009d4u, 0x0000011cu, 0x0003003eu, 0x0000098au, 0x000009d5u, - 0x0004003du, 0x00000006u, 0x000009d6u, 0x0000098au, 0x0004003du, 0x00000006u, 0x000009d7u, 0x000009b9u, - 0x0004003du, 0x00000006u, 0x000009d8u, 0x000009c0u, 0x0004003du, 0x00000006u, 0x000009d9u, 0x000009c3u, - 0x00060050u, 0x00000307u, 0x000009dau, 0x000009d7u, 0x000009d8u, 0x000009d9u, 0x00050041u, 0x00000468u, - 0x000009dbu, 0x0000045au, 0x000009d6u, 0x0003003eu, 0x000009dbu, 0x000009dau, 0x0004003du, 0x00000006u, - 0x000009dcu, 0x0000098au, 0x00050080u, 0x00000006u, 0x000009ddu, 0x000009dcu, 0x0000011cu, 0x0003003eu, - 0x0000098au, 0x000009ddu, 0x0004003du, 0x00000006u, 0x000009deu, 0x0000098au, 0x0004003du, 0x00000006u, - 0x000009dfu, 0x000009b9u, 0x0004003du, 0x00000006u, 0x000009e0u, 0x000009c3u, 0x0004003du, 0x00000006u, - 0x000009e1u, 0x000009bcu, 0x00060050u, 0x00000307u, 0x000009e2u, 0x000009dfu, 0x000009e0u, 0x000009e1u, - 0x00050041u, 0x00000468u, 0x000009e3u, 0x0000045au, 0x000009deu, 0x0003003eu, 0x000009e3u, 0x000009e2u, - 0x0004003du, 0x00000006u, 0x000009e4u, 0x0000098au, 0x00050080u, 0x00000006u, 0x000009e5u, 0x000009e4u, - 0x0000011cu, 0x0003003eu, 0x0000098au, 0x000009e5u, 0x000200f9u, 0x000009b8u, 0x000200f8u, 0x000009b8u, - 0x0004003du, 0x00000011u, 0x000009e6u, 0x00000616u, 0x000300f7u, 0x000009e8u, 0x00000000u, 0x000400fau, - 0x000009e6u, 0x000009e7u, 0x000009e8u, 0x000200f8u, 0x000009e7u, 0x0004003du, 0x00000006u, 0x000009eau, - 0x000005c1u, 0x00050082u, 0x00000006u, 0x000009ebu, 0x000009eau, 0x00000008u, 0x0003003eu, 0x000009e9u, - 0x000009ebu, 0x0004003du, 0x00000006u, 0x000009edu, 0x00000628u, 0x0003003eu, 0x000009ecu, 0x000009edu, - 0x0004003du, 0x00000006u, 0x000009efu, 0x000009e9u, 0x00050084u, 0x00000006u, 0x000009f0u, 0x000009efu, - 0x0000003bu, 0x0003003eu, 0x000009eeu, 0x000009f0u, 0x0004003du, 0x00000006u, 0x000009f2u, 0x000009e9u, - 0x00050084u, 0x00000006u, 0x000009f3u, 0x000009f2u, 0x0000003bu, 0x00050080u, 0x00000006u, 0x000009f4u, - 0x000009f3u, 0x00000008u, 0x0003003eu, 0x000009f1u, 0x000009f4u, 0x0004003du, 0x00000006u, 0x000009f6u, - 0x00000628u, 0x00050080u, 0x00000006u, 0x000009f7u, 0x000009f6u, 0x00000008u, 0x0003003eu, 0x000009f5u, - 0x000009f7u, 0x0004003du, 0x00000006u, 0x000009f9u, 0x00000628u, 0x00050080u, 0x00000006u, 0x000009fau, - 0x000009f9u, 0x0000003bu, 0x0003003eu, 0x000009f8u, 0x000009fau, 0x0004003du, 0x00000006u, 0x000009fcu, - 0x00000628u, 0x00050080u, 0x00000006u, 0x000009fdu, 0x000009fcu, 0x0000003eu, 0x0003003eu, 0x000009fbu, - 0x000009fdu, 0x0004003du, 0x00000006u, 0x000009feu, 0x0000098au, 0x0004003du, 0x00000006u, 0x000009ffu, - 0x000009ecu, 0x0004003du, 0x00000006u, 0x00000a00u, 0x000009eeu, 0x0004003du, 0x00000006u, 0x00000a01u, - 0x000009f5u, 0x00060050u, 0x00000307u, 0x00000a02u, 0x000009ffu, 0x00000a00u, 0x00000a01u, 0x00050041u, - 0x00000468u, 0x00000a03u, 0x0000045au, 0x000009feu, 0x0003003eu, 0x00000a03u, 0x00000a02u, 0x0004003du, - 0x00000006u, 0x00000a04u, 0x0000098au, 0x00050080u, 0x00000006u, 0x00000a05u, 0x00000a04u, 0x0000011cu, - 0x0003003eu, 0x0000098au, 0x00000a05u, 0x0004003du, 0x00000006u, 0x00000a06u, 0x0000098au, 0x0004003du, - 0x00000006u, 0x00000a07u, 0x000009ecu, 0x0004003du, 0x00000006u, 0x00000a08u, 0x000009f5u, 0x0004003du, - 0x00000006u, 0x00000a09u, 0x000009f8u, 0x00060050u, 0x00000307u, 0x00000a0au, 0x00000a07u, 0x00000a08u, - 0x00000a09u, 0x00050041u, 0x00000468u, 0x00000a0bu, 0x0000045au, 0x00000a06u, 0x0003003eu, 0x00000a0bu, - 0x00000a0au, 0x0004003du, 0x00000006u, 0x00000a0cu, 0x0000098au, 0x00050080u, 0x00000006u, 0x00000a0du, - 0x00000a0cu, 0x0000011cu, 0x0003003eu, 0x0000098au, 0x00000a0du, 0x0004003du, 0x00000006u, 0x00000a0eu, - 0x0000098au, 0x0004003du, 0x00000006u, 0x00000a0fu, 0x000009ecu, 0x0004003du, 0x00000006u, 0x00000a10u, - 0x000009f8u, 0x0004003du, 0x00000006u, 0x00000a11u, 0x000009fbu, 0x00060050u, 0x00000307u, 0x00000a12u, - 0x00000a0fu, 0x00000a10u, 0x00000a11u, 0x00050041u, 0x00000468u, 0x00000a13u, 0x0000045au, 0x00000a0eu, - 0x0003003eu, 0x00000a13u, 0x00000a12u, 0x0004003du, 0x00000006u, 0x00000a14u, 0x0000098au, 0x00050080u, - 0x00000006u, 0x00000a15u, 0x00000a14u, 0x0000011cu, 0x0003003eu, 0x0000098au, 0x00000a15u, 0x0004003du, - 0x00000006u, 0x00000a16u, 0x0000098au, 0x0004003du, 0x00000006u, 0x00000a17u, 0x000009ecu, 0x0004003du, - 0x00000006u, 0x00000a18u, 0x000009fbu, 0x0004003du, 0x00000006u, 0x00000a19u, 0x000009f1u, 0x00060050u, - 0x00000307u, 0x00000a1au, 0x00000a17u, 0x00000a18u, 0x00000a19u, 0x00050041u, 0x00000468u, 0x00000a1bu, - 0x0000045au, 0x00000a16u, 0x0003003eu, 0x00000a1bu, 0x00000a1au, 0x0004003du, 0x00000006u, 0x00000a1cu, - 0x0000098au, 0x00050080u, 0x00000006u, 0x00000a1du, 0x00000a1cu, 0x0000011cu, 0x0003003eu, 0x0000098au, - 0x00000a1du, 0x000200f9u, 0x000009e8u, 0x000200f8u, 0x000009e8u, 0x0003003eu, 0x00000a1eu, 0x0000007du, - 0x000200f9u, 0x00000a1fu, 0x000200f8u, 0x00000a1fu, 0x000400f6u, 0x00000a21u, 0x00000a22u, 0x00000000u, - 0x000200f9u, 0x00000a23u, 0x000200f8u, 0x00000a23u, 0x0004003du, 0x00000006u, 0x00000a24u, 0x00000a1eu, - 0x0004003du, 0x00000006u, 0x00000a25u, 0x00000305u, 0x000500b0u, 0x00000011u, 0x00000a26u, 0x00000a24u, - 0x00000a25u, 0x000400fau, 0x00000a26u, 0x00000a20u, 0x00000a21u, 0x000200f8u, 0x00000a20u, 0x0004003du, - 0x00000006u, 0x00000a27u, 0x00000a1eu, 0x00050041u, 0x00000315u, 0x00000a28u, 0x00000314u, 0x00000054u, - 0x0004003du, 0x00000006u, 0x00000a29u, 0x00000a28u, 0x0004007cu, 0x0000002bu, 0x00000a2au, 0x00000a29u, - 0x00060041u, 0x00000474u, 0x00000a2bu, 0x0000046du, 0x00000a27u, 0x00000054u, 0x0003003eu, 0x00000a2bu, - 0x00000a2au, 0x0004003du, 0x00000006u, 0x00000a2cu, 0x00000a1eu, 0x00050041u, 0x0000047du, 0x00000a2du, - 0x00000314u, 0x00000079u, 0x0004003du, 0x00000016u, 0x00000a2eu, 0x00000a2du, 0x00060041u, 0x00000480u, - 0x00000a2fu, 0x00000479u, 0x00000a2cu, 0x00000054u, 0x0003003eu, 0x00000a2fu, 0x00000a2eu, 0x0004003du, - 0x00000006u, 0x00000a30u, 0x00000a1eu, 0x00050041u, 0x0000039cu, 0x00000a31u, 0x00000314u, 0x000000c6u, - 0x0004003du, 0x00000009u, 0x00000a32u, 0x00000a31u, 0x00060041u, 0x00000487u, 0x00000a33u, 0x00000479u, - 0x00000a30u, 0x0000011cu, 0x0003003eu, 0x00000a33u, 0x00000a32u, 0x000200f9u, 0x00000a22u, 0x000200f8u, - 0x00000a22u, 0x0004003du, 0x00000006u, 0x00000a34u, 0x00000a1eu, 0x00050080u, 0x00000006u, 0x00000a35u, - 0x00000a34u, 0x0000011cu, 0x0003003eu, 0x00000a1eu, 0x00000a35u, 0x000200f9u, 0x00000a1fu, 0x000200f8u, - 0x00000a21u, 0x000200f9u, 0x00000989u, 0x000200f8u, 0x00000989u, 0x000100fdu, 0x00010038u, 0x00050036u, - 0x00000009u, 0x0000000eu, 0x00000000u, 0x0000000cu, 0x00030037u, 0x0000000bu, 0x0000000du, 0x000200f8u, - 0x0000000fu, 0x0004003bu, 0x00000039u, 0x0000003au, 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000042u, - 0x00000007u, 0x00050041u, 0x00000030u, 0x00000031u, 0x0000002eu, 0x0000002fu, 0x0004003du, 0x00000009u, - 0x00000032u, 0x00000031u, 0x000500b8u, 0x00000011u, 0x00000034u, 0x00000032u, 0x00000033u, 0x000300f7u, - 0x00000036u, 0x00000000u, 0x000400fau, 0x00000034u, 0x00000035u, 0x00000036u, 0x000200f8u, 0x00000035u, - 0x000200feu, 0x00000037u, 0x000200f8u, 0x00000036u, 0x00050041u, 0x00000039u, 0x0000003cu, 0x0000000du, - 0x0000003bu, 0x0004003du, 0x00000009u, 0x0000003du, 0x0000003cu, 0x00050041u, 0x00000039u, 0x0000003fu, - 0x0000000du, 0x0000003eu, 0x0004003du, 0x00000009u, 0x00000040u, 0x0000003fu, 0x00050088u, 0x00000009u, - 0x00000041u, 0x0000003du, 0x00000040u, 0x0003003eu, 0x0000003au, 0x00000041u, 0x0004003du, 0x00000009u, - 0x00000043u, 0x0000003au, 0x00050083u, 0x00000009u, 0x00000044u, 0x00000037u, 0x00000043u, 0x0003003eu, - 0x00000042u, 0x00000044u, 0x0004003du, 0x00000009u, 0x00000045u, 0x00000042u, 0x0008000cu, 0x00000009u, - 0x00000047u, 0x00000001u, 0x0000002bu, 0x00000045u, 0x00000046u, 0x00000037u, 0x000200feu, 0x00000047u, - 0x00010038u, 0x00050036u, 0x00000011u, 0x00000014u, 0x00000000u, 0x00000012u, 0x00030037u, 0x00000010u, - 0x00000013u, 0x000200f8u, 0x00000015u, 0x0004003du, 0x00000006u, 0x0000004au, 0x00000013u, 0x000500aau, - 0x00000011u, 0x0000004cu, 0x0000004au, 0x0000004bu, 0x0004003du, 0x00000006u, 0x0000004du, 0x00000013u, - 0x000500aau, 0x00000011u, 0x0000004fu, 0x0000004du, 0x0000004eu, 0x000500a6u, 0x00000011u, 0x00000050u, - 0x0000004cu, 0x0000004fu, 0x000200feu, 0x00000050u, 0x00010038u, 0x00050036u, 0x0000000au, 0x00000021u, - 0x00000000u, 0x0000001du, 0x00030037u, 0x00000017u, 0x0000001eu, 0x00030037u, 0x0000001au, 0x0000001fu, - 0x00030037u, 0x0000001cu, 0x00000020u, 0x000200f8u, 0x00000022u, 0x0004003bu, 0x00000017u, 0x00000053u, - 0x00000007u, 0x0004003bu, 0x00000039u, 0x0000005eu, 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000061u, - 0x00000007u, 0x0004003bu, 0x00000039u, 0x0000006bu, 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000078u, - 0x00000007u, 0x0004003bu, 0x00000039u, 0x0000007cu, 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000087u, - 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000099u, 0x00000007u, 0x0004003bu, 0x00000039u, 0x0000009eu, - 0x00000007u, 0x0004003bu, 0x00000039u, 0x000000a5u, 0x00000007u, 0x0004003bu, 0x00000039u, 0x000000a8u, - 0x00000007u, 0x0004003bu, 0x00000039u, 0x000000acu, 0x00000007u, 0x0004003bu, 0x00000039u, 0x000000b0u, - 0x00000007u, 0x0004003bu, 0x00000039u, 0x000000b4u, 0x00000007u, 0x0004003bu, 0x00000039u, 0x000000b8u, - 0x00000007u, 0x0004003bu, 0x00000039u, 0x000000eau, 0x00000007u, 0x0004003bu, 0x00000039u, 0x000000edu, - 0x00000007u, 0x0004003bu, 0x000000f5u, 0x000000f6u, 0x00000007u, 0x0004003bu, 0x000000f5u, 0x000000fbu, - 0x00000007u, 0x0004003bu, 0x000000f5u, 0x00000118u, 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000121u, - 0x00000007u, 0x0004003bu, 0x00000039u, 0x0000012au, 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000138u, - 0x00000007u, 0x0004003bu, 0x00000039u, 0x0000013bu, 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000146u, - 0x00000007u, 0x00050041u, 0x00000023u, 0x00000055u, 0x0000001fu, 0x00000054u, 0x0004003du, 0x00000018u, - 0x00000056u, 0x00000055u, 0x0004003du, 0x00000016u, 0x00000057u, 0x0000001eu, 0x00050051u, 0x00000009u, - 0x00000058u, 0x00000057u, 0x00000000u, 0x00050051u, 0x00000009u, 0x00000059u, 0x00000057u, 0x00000001u, - 0x00050051u, 0x00000009u, 0x0000005au, 0x00000057u, 0x00000002u, 0x00070050u, 0x0000000au, 0x0000005bu, - 0x00000058u, 0x00000059u, 0x0000005au, 0x00000037u, 0x00050091u, 0x0000000au, 0x0000005cu, 0x00000056u, - 0x0000005bu, 0x0008004fu, 0x00000016u, 0x0000005du, 0x0000005cu, 0x0000005cu, 0x00000000u, 0x00000001u, - 0x00000002u, 0x0003003eu, 0x00000053u, 0x0000005du, 0x00050041u, 0x00000039u, 0x0000005fu, 0x00000053u, - 0x0000003bu, 0x0004003du, 0x00000009u, 0x00000060u, 0x0000005fu, 0x0003003eu, 0x0000005eu, 0x00000060u, - 0x0004003du, 0x00000016u, 0x00000062u, 0x00000053u, 0x0006000cu, 0x00000009u, 0x00000063u, 0x00000001u, - 0x00000042u, 0x00000062u, 0x0003003eu, 0x00000061u, 0x00000063u, 0x0004003du, 0x00000009u, 0x00000064u, - 0x00000061u, 0x000500b8u, 0x00000011u, 0x00000066u, 0x00000064u, 0x00000065u, 0x000300f7u, 0x00000068u, - 0x00000000u, 0x000400fau, 0x00000066u, 0x00000067u, 0x00000068u, 0x000200f8u, 0x00000067u, 0x000200feu, - 0x00000069u, 0x000200f8u, 0x00000068u, 0x0003003eu, 0x0000006bu, 0x0000006cu, 0x00050041u, 0x00000039u, - 0x0000006eu, 0x00000020u, 0x0000006du, 0x0004003du, 0x00000009u, 0x0000006fu, 0x0000006eu, 0x0004003du, - 0x00000009u, 0x00000070u, 0x0000006bu, 0x000500bcu, 0x00000011u, 0x00000071u, 0x0000006fu, 0x00000070u, - 0x0004003du, 0x00000009u, 0x00000072u, 0x0000005eu, 0x000500b8u, 0x00000011u, 0x00000074u, 0x00000072u, - 0x00000073u, 0x000500a7u, 0x00000011u, 0x00000075u, 0x00000071u, 0x00000074u, 0x000300f7u, 0x00000077u, - 0x00000000u, 0x000400fau, 0x00000075u, 0x00000076u, 0x00000077u, 0x000200f8u, 0x00000076u, 0x00050041u, - 0x00000039u, 0x0000007au, 0x00000020u, 0x00000079u, 0x0004003du, 0x00000009u, 0x0000007bu, 0x0000007au, - 0x0003003eu, 0x00000078u, 0x0000007bu, 0x00050041u, 0x00000039u, 0x0000007eu, 0x00000053u, 0x0000007du, - 0x0004003du, 0x00000009u, 0x0000007fu, 0x0000007eu, 0x0004003du, 0x00000009u, 0x00000080u, 0x00000078u, - 0x00050085u, 0x00000009u, 0x00000081u, 0x0000007fu, 0x00000080u, 0x00050041u, 0x00000039u, 0x00000083u, - 0x00000020u, 0x00000082u, 0x0004003du, 0x00000009u, 0x00000084u, 0x00000083u, 0x00050085u, 0x00000009u, - 0x00000085u, 0x00000084u, 0x00000033u, 0x00050088u, 0x00000009u, 0x00000086u, 0x00000081u, 0x00000085u, - 0x0003003eu, 0x0000007cu, 0x00000086u, 0x00050041u, 0x00000039u, 0x00000088u, 0x00000053u, 0x00000008u, - 0x0004003du, 0x00000009u, 0x00000089u, 0x00000088u, 0x0004007fu, 0x00000009u, 0x0000008au, 0x00000089u, - 0x0004003du, 0x00000009u, 0x0000008bu, 0x00000078u, 0x00050085u, 0x00000009u, 0x0000008cu, 0x0000008au, - 0x0000008bu, 0x00050041u, 0x00000039u, 0x0000008eu, 0x00000020u, 0x0000008du, 0x0004003du, 0x00000009u, - 0x0000008fu, 0x0000008eu, 0x00050085u, 0x00000009u, 0x00000090u, 0x0000008fu, 0x00000033u, 0x00050088u, - 0x00000009u, 0x00000091u, 0x0000008cu, 0x00000090u, 0x0003003eu, 0x00000087u, 0x00000091u, 0x0004003du, - 0x00000009u, 0x00000092u, 0x0000007cu, 0x00050085u, 0x00000009u, 0x00000094u, 0x00000092u, 0x00000093u, - 0x0004003du, 0x00000009u, 0x00000095u, 0x00000087u, 0x00050085u, 0x00000009u, 0x00000096u, 0x00000095u, - 0x00000093u, 0x00070050u, 0x0000000au, 0x00000097u, 0x00000094u, 0x00000096u, 0x00000037u, 0x00000037u, - 0x000200feu, 0x00000097u, 0x000200f8u, 0x00000077u, 0x0004003du, 0x00000016u, 0x0000009bu, 0x00000053u, - 0x0007004fu, 0x0000009au, 0x0000009cu, 0x0000009bu, 0x0000009bu, 0x00000000u, 0x00000001u, 0x0006000cu, - 0x00000009u, 0x0000009du, 0x00000001u, 0x00000042u, 0x0000009cu, 0x0003003eu, 0x00000099u, 0x0000009du, - 0x00050041u, 0x00000039u, 0x0000009fu, 0x00000053u, 0x0000003bu, 0x0004003du, 0x00000009u, 0x000000a0u, - 0x0000009fu, 0x0004003du, 0x00000009u, 0x000000a1u, 0x00000061u, 0x00050088u, 0x00000009u, 0x000000a2u, - 0x000000a0u, 0x000000a1u, 0x0008000cu, 0x00000009u, 0x000000a4u, 0x00000001u, 0x0000002bu, 0x000000a2u, - 0x000000a3u, 0x00000037u, 0x0003003eu, 0x0000009eu, 0x000000a4u, 0x0004003du, 0x00000009u, 0x000000a6u, - 0x0000009eu, 0x0006000cu, 0x00000009u, 0x000000a7u, 0x00000001u, 0x00000011u, 0x000000a6u, 0x0003003eu, - 0x000000a5u, 0x000000a7u, 0x0004003du, 0x00000009u, 0x000000a9u, 0x000000a5u, 0x0004003du, 0x00000009u, - 0x000000aau, 0x000000a5u, 0x00050085u, 0x00000009u, 0x000000abu, 0x000000a9u, 0x000000aau, 0x0003003eu, - 0x000000a8u, 0x000000abu, 0x0004003du, 0x00000009u, 0x000000adu, 0x000000a8u, 0x0004003du, 0x00000009u, - 0x000000aeu, 0x000000a5u, 0x00050085u, 0x00000009u, 0x000000afu, 0x000000adu, 0x000000aeu, 0x0003003eu, - 0x000000acu, 0x000000afu, 0x0004003du, 0x00000009u, 0x000000b1u, 0x000000a8u, 0x0004003du, 0x00000009u, - 0x000000b2u, 0x000000a8u, 0x00050085u, 0x00000009u, 0x000000b3u, 0x000000b1u, 0x000000b2u, 0x0003003eu, - 0x000000b0u, 0x000000b3u, 0x0004003du, 0x00000009u, 0x000000b5u, 0x000000b0u, 0x0004003du, 0x00000009u, - 0x000000b6u, 0x000000a5u, 0x00050085u, 0x00000009u, 0x000000b7u, 0x000000b5u, 0x000000b6u, 0x0003003eu, - 0x000000b4u, 0x000000b7u, 0x00050041u, 0x00000039u, 0x000000bau, 0x00000020u, 0x000000b9u, 0x0004003du, - 0x00000009u, 0x000000bbu, 0x000000bau, 0x00050041u, 0x00000039u, 0x000000bcu, 0x00000020u, 0x00000079u, - 0x0004003du, 0x00000009u, 0x000000bdu, 0x000000bcu, 0x0004003du, 0x00000009u, 0x000000beu, 0x000000a5u, - 0x00050085u, 0x00000009u, 0x000000bfu, 0x000000bdu, 0x000000beu, 0x00050081u, 0x00000009u, 0x000000c0u, - 0x000000bbu, 0x000000bfu, 0x00050041u, 0x00000039u, 0x000000c1u, 0x00000020u, 0x0000002fu, 0x0004003du, - 0x00000009u, 0x000000c2u, 0x000000c1u, 0x0004003du, 0x00000009u, 0x000000c3u, 0x000000a8u, 0x00050085u, - 0x00000009u, 0x000000c4u, 0x000000c2u, 0x000000c3u, 0x00050081u, 0x00000009u, 0x000000c5u, 0x000000c0u, - 0x000000c4u, 0x00050041u, 0x00000039u, 0x000000c7u, 0x00000020u, 0x000000c6u, 0x0004003du, 0x00000009u, - 0x000000c8u, 0x000000c7u, 0x0004003du, 0x00000009u, 0x000000c9u, 0x000000acu, 0x00050085u, 0x00000009u, - 0x000000cau, 0x000000c8u, 0x000000c9u, 0x00050081u, 0x00000009u, 0x000000cbu, 0x000000c5u, 0x000000cau, - 0x00050041u, 0x00000039u, 0x000000cdu, 0x00000020u, 0x000000ccu, 0x0004003du, 0x00000009u, 0x000000ceu, - 0x000000cdu, 0x0004003du, 0x00000009u, 0x000000cfu, 0x000000b0u, 0x00050085u, 0x00000009u, 0x000000d0u, - 0x000000ceu, 0x000000cfu, 0x00050081u, 0x00000009u, 0x000000d1u, 0x000000cbu, 0x000000d0u, 0x00050041u, - 0x00000039u, 0x000000d3u, 0x00000020u, 0x000000d2u, 0x0004003du, 0x00000009u, 0x000000d4u, 0x000000d3u, - 0x0004003du, 0x00000009u, 0x000000d5u, 0x000000b4u, 0x00050085u, 0x00000009u, 0x000000d6u, 0x000000d4u, - 0x000000d5u, 0x00050081u, 0x00000009u, 0x000000d7u, 0x000000d1u, 0x000000d6u, 0x0003003eu, 0x000000b8u, - 0x000000d7u, 0x0004003du, 0x00000009u, 0x000000d8u, 0x000000a5u, 0x00050041u, 0x00000039u, 0x000000d9u, - 0x00000020u, 0x0000006du, 0x0004003du, 0x00000009u, 0x000000dau, 0x000000d9u, 0x000500bau, 0x00000011u, - 0x000000dbu, 0x000000d8u, 0x000000dau, 0x000300f7u, 0x000000ddu, 0x00000000u, 0x000400fau, 0x000000dbu, - 0x000000dcu, 0x000000ddu, 0x000200f8u, 0x000000dcu, 0x00050041u, 0x00000039u, 0x000000dfu, 0x00000020u, - 0x000000deu, 0x0004003du, 0x00000009u, 0x000000e0u, 0x000000dfu, 0x0004003du, 0x00000009u, 0x000000e1u, - 0x000000a5u, 0x00050041u, 0x00000039u, 0x000000e2u, 0x00000020u, 0x0000006du, 0x0004003du, 0x00000009u, - 0x000000e3u, 0x000000e2u, 0x00050083u, 0x00000009u, 0x000000e4u, 0x000000e1u, 0x000000e3u, 0x00050041u, - 0x00000039u, 0x000000e6u, 0x00000020u, 0x000000e5u, 0x0004003du, 0x00000009u, 0x000000e7u, 0x000000e6u, - 0x00050085u, 0x00000009u, 0x000000e8u, 0x000000e4u, 0x000000e7u, 0x00050081u, 0x00000009u, 0x000000e9u, - 0x000000e0u, 0x000000e8u, 0x0003003eu, 0x000000b8u, 0x000000e9u, 0x000200f9u, 0x000000ddu, 0x000200f8u, - 0x000000ddu, 0x0004003du, 0x00000009u, 0x000000ebu, 0x00000099u, 0x000500bau, 0x00000011u, 0x000000ecu, - 0x000000ebu, 0x00000065u, 0x000300f7u, 0x000000efu, 0x00000000u, 0x000400fau, 0x000000ecu, 0x000000eeu, - 0x000000f3u, 0x000200f8u, 0x000000eeu, 0x0004003du, 0x00000009u, 0x000000f0u, 0x000000b8u, 0x0004003du, - 0x00000009u, 0x000000f1u, 0x00000099u, 0x00050088u, 0x00000009u, 0x000000f2u, 0x000000f0u, 0x000000f1u, - 0x0003003eu, 0x000000edu, 0x000000f2u, 0x000200f9u, 0x000000efu, 0x000200f8u, 0x000000f3u, 0x0003003eu, - 0x000000edu, 0x00000046u, 0x000200f9u, 0x000000efu, 0x000200f8u, 0x000000efu, 0x0004003du, 0x00000009u, - 0x000000f4u, 0x000000edu, 0x0003003eu, 0x000000eau, 0x000000f4u, 0x0004003du, 0x00000009u, 0x000000f7u, - 0x000000eau, 0x0004003du, 0x00000016u, 0x000000f8u, 0x00000053u, 0x0007004fu, 0x0000009au, 0x000000f9u, - 0x000000f8u, 0x000000f8u, 0x00000000u, 0x00000001u, 0x0005008eu, 0x0000009au, 0x000000fau, 0x000000f9u, - 0x000000f7u, 0x0003003eu, 0x000000f6u, 0x000000fau, 0x00050041u, 0x00000039u, 0x000000fdu, 0x00000020u, - 0x000000fcu, 0x0004003du, 0x00000009u, 0x000000feu, 0x000000fdu, 0x00050041u, 0x00000039u, 0x000000ffu, - 0x000000f6u, 0x0000007du, 0x0004003du, 0x00000009u, 0x00000100u, 0x000000ffu, 0x00050085u, 0x00000009u, - 0x00000101u, 0x000000feu, 0x00000100u, 0x00050041u, 0x00000039u, 0x00000103u, 0x00000020u, 0x00000102u, - 0x0004003du, 0x00000009u, 0x00000104u, 0x00000103u, 0x00050041u, 0x00000039u, 0x00000105u, 0x000000f6u, - 0x00000008u, 0x0004003du, 0x00000009u, 0x00000106u, 0x00000105u, 0x00050085u, 0x00000009u, 0x00000107u, - 0x00000104u, 0x00000106u, 0x00050081u, 0x00000009u, 0x00000108u, 0x00000101u, 0x00000107u, 0x00050041u, - 0x00000039u, 0x00000109u, 0x000000fbu, 0x0000007du, 0x0003003eu, 0x00000109u, 0x00000108u, 0x00050041u, - 0x00000039u, 0x0000010bu, 0x00000020u, 0x0000010au, 0x0004003du, 0x00000009u, 0x0000010cu, 0x0000010bu, - 0x00050041u, 0x00000039u, 0x0000010du, 0x000000f6u, 0x0000007du, 0x0004003du, 0x00000009u, 0x0000010eu, - 0x0000010du, 0x00050085u, 0x00000009u, 0x0000010fu, 0x0000010cu, 0x0000010eu, 0x00050041u, 0x00000039u, - 0x00000111u, 0x00000020u, 0x00000110u, 0x0004003du, 0x00000009u, 0x00000112u, 0x00000111u, 0x00050041u, - 0x00000039u, 0x00000113u, 0x000000f6u, 0x00000008u, 0x0004003du, 0x00000009u, 0x00000114u, 0x00000113u, - 0x00050085u, 0x00000009u, 0x00000115u, 0x00000112u, 0x00000114u, 0x00050081u, 0x00000009u, 0x00000116u, - 0x0000010fu, 0x00000115u, 0x00050041u, 0x00000039u, 0x00000117u, 0x000000fbu, 0x00000008u, 0x0003003eu, - 0x00000117u, 0x00000116u, 0x0004003du, 0x0000009au, 0x00000119u, 0x000000fbu, 0x00050041u, 0x00000039u, - 0x0000011au, 0x00000020u, 0x00000054u, 0x0004003du, 0x00000009u, 0x0000011bu, 0x0000011au, 0x00050041u, - 0x00000039u, 0x0000011du, 0x00000020u, 0x0000011cu, 0x0004003du, 0x00000009u, 0x0000011eu, 0x0000011du, - 0x00050050u, 0x0000009au, 0x0000011fu, 0x0000011bu, 0x0000011eu, 0x00050081u, 0x0000009au, 0x00000120u, - 0x00000119u, 0x0000011fu, 0x0003003eu, 0x00000118u, 0x00000120u, 0x00050041u, 0x00000039u, 0x00000123u, - 0x00000118u, 0x0000007du, 0x0004003du, 0x00000009u, 0x00000124u, 0x00000123u, 0x00050085u, 0x00000009u, - 0x00000125u, 0x00000122u, 0x00000124u, 0x00050041u, 0x00000039u, 0x00000126u, 0x00000020u, 0x00000082u, - 0x0004003du, 0x00000009u, 0x00000127u, 0x00000126u, 0x00050088u, 0x00000009u, 0x00000128u, 0x00000125u, - 0x00000127u, 0x00050083u, 0x00000009u, 0x00000129u, 0x00000128u, 0x00000037u, 0x0003003eu, 0x00000121u, - 0x00000129u, 0x00050041u, 0x00000039u, 0x0000012bu, 0x00000118u, 0x00000008u, 0x0004003du, 0x00000009u, - 0x0000012cu, 0x0000012bu, 0x00050085u, 0x00000009u, 0x0000012du, 0x00000122u, 0x0000012cu, 0x00050041u, - 0x00000039u, 0x0000012eu, 0x00000020u, 0x0000008du, 0x0004003du, 0x00000009u, 0x0000012fu, 0x0000012eu, - 0x00050088u, 0x00000009u, 0x00000130u, 0x0000012du, 0x0000012fu, 0x00050083u, 0x00000009u, 0x00000131u, - 0x00000037u, 0x00000130u, 0x0003003eu, 0x0000012au, 0x00000131u, 0x00050041u, 0x00000039u, 0x00000132u, - 0x00000020u, 0x0000006du, 0x0004003du, 0x00000009u, 0x00000133u, 0x00000132u, 0x0004003du, 0x00000009u, - 0x00000134u, 0x0000006bu, 0x000500bau, 0x00000011u, 0x00000135u, 0x00000133u, 0x00000134u, 0x000300f7u, - 0x00000137u, 0x00000000u, 0x000400fau, 0x00000135u, 0x00000136u, 0x00000144u, 0x000200f8u, 0x00000136u, - 0x0004003du, 0x00000009u, 0x00000139u, 0x0000005eu, 0x000500beu, 0x00000011u, 0x0000013au, 0x00000139u, - 0x00000046u, 0x000300f7u, 0x0000013du, 0x00000000u, 0x000400fau, 0x0000013au, 0x0000013cu, 0x0000013fu, - 0x000200f8u, 0x0000013cu, 0x0004003du, 0x00000009u, 0x0000013eu, 0x00000061u, 0x0003003eu, 0x0000013bu, - 0x0000013eu, 0x000200f9u, 0x0000013du, 0x000200f8u, 0x0000013fu, 0x00050041u, 0x00000039u, 0x00000141u, - 0x00000020u, 0x00000140u, 0x0004003du, 0x00000009u, 0x00000142u, 0x00000141u, 0x0003003eu, 0x0000013bu, - 0x00000142u, 0x000200f9u, 0x0000013du, 0x000200f8u, 0x0000013du, 0x0004003du, 0x00000009u, 0x00000143u, - 0x0000013bu, 0x0003003eu, 0x00000138u, 0x00000143u, 0x000200f9u, 0x00000137u, 0x000200f8u, 0x00000144u, - 0x0004003du, 0x00000009u, 0x00000145u, 0x0000005eu, 0x0003003eu, 0x00000138u, 0x00000145u, 0x000200f9u, - 0x00000137u, 0x000200f8u, 0x00000137u, 0x0004003du, 0x00000009u, 0x00000147u, 0x00000138u, 0x00050041u, - 0x00000039u, 0x00000148u, 0x00000020u, 0x00000140u, 0x0004003du, 0x00000009u, 0x00000149u, 0x00000148u, - 0x00050088u, 0x00000009u, 0x0000014au, 0x00000147u, 0x00000149u, 0x0008000cu, 0x00000009u, 0x0000014bu, - 0x00000001u, 0x0000002bu, 0x0000014au, 0x00000046u, 0x00000037u, 0x0003003eu, 0x00000146u, 0x0000014bu, - 0x0004003du, 0x00000009u, 0x0000014cu, 0x00000121u, 0x0004003du, 0x00000009u, 0x0000014du, 0x0000012au, - 0x0004003du, 0x00000009u, 0x0000014eu, 0x00000146u, 0x00070050u, 0x0000000au, 0x0000014fu, 0x0000014cu, - 0x0000014du, 0x0000014eu, 0x00000037u, 0x000200feu, 0x0000014fu, 0x00010038u, 0x00050036u, 0x00000009u, - 0x00000029u, 0x00000000u, 0x00000024u, 0x00030037u, 0x00000017u, 0x00000025u, 0x00030037u, 0x00000017u, - 0x00000026u, 0x00030037u, 0x00000023u, 0x00000027u, 0x00030037u, 0x0000001cu, 0x00000028u, 0x000200f8u, - 0x0000002au, 0x0004003bu, 0x00000017u, 0x00000152u, 0x00000007u, 0x0004003bu, 0x00000017u, 0x0000015bu, - 0x00000007u, 0x0004003bu, 0x00000017u, 0x00000164u, 0x00000007u, 0x0004003bu, 0x00000017u, 0x00000169u, - 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000172u, 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000176u, - 0x00000007u, 0x0004003bu, 0x00000039u, 0x0000017au, 0x00000007u, 0x0004003bu, 0x00000039u, 0x0000017eu, - 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000182u, 0x00000007u, 0x0004003bu, 0x00000039u, 0x0000018cu, - 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000191u, 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000194u, - 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000198u, 0x00000007u, 0x0004003bu, 0x00000039u, 0x000001ccu, - 0x00000007u, 0x0004003bu, 0x00000039u, 0x000001cfu, 0x00000007u, 0x0004003bu, 0x000000f5u, 0x000001d7u, - 0x00000007u, 0x0004003bu, 0x000000f5u, 0x000001dcu, 0x00000007u, 0x0004003bu, 0x000000f5u, 0x000001f4u, - 0x00000007u, 0x0004003bu, 0x00000039u, 0x000001fcu, 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000200u, - 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000209u, 0x00000007u, 0x0004003bu, 0x00000039u, 0x0000020eu, - 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000211u, 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000215u, - 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000249u, 0x00000007u, 0x0004003bu, 0x00000039u, 0x0000024cu, - 0x00000007u, 0x0004003bu, 0x000000f5u, 0x00000254u, 0x00000007u, 0x0004003bu, 0x000000f5u, 0x00000259u, - 0x00000007u, 0x0004003bu, 0x000000f5u, 0x00000271u, 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000279u, - 0x00000007u, 0x0004003bu, 0x00000039u, 0x0000027du, 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000286u, - 0x00000007u, 0x0004003bu, 0x00000039u, 0x0000028bu, 0x00000007u, 0x0004003bu, 0x00000039u, 0x0000028eu, - 0x00000007u, 0x0004003bu, 0x00000039u, 0x00000292u, 0x00000007u, 0x0004003bu, 0x00000039u, 0x000002c6u, - 0x00000007u, 0x0004003bu, 0x00000039u, 0x000002c9u, 0x00000007u, 0x0004003bu, 0x000000f5u, 0x000002d1u, - 0x00000007u, 0x0004003bu, 0x000000f5u, 0x000002d6u, 0x00000007u, 0x0004003bu, 0x000000f5u, 0x000002eeu, - 0x00000007u, 0x0004003bu, 0x000000f5u, 0x000002f6u, 0x00000007u, 0x0004003bu, 0x00000039u, 0x000002fbu, - 0x00000007u, 0x0004003du, 0x00000018u, 0x00000153u, 0x00000027u, 0x0004003du, 0x00000016u, 0x00000154u, - 0x00000025u, 0x00050051u, 0x00000009u, 0x00000155u, 0x00000154u, 0x00000000u, 0x00050051u, 0x00000009u, - 0x00000156u, 0x00000154u, 0x00000001u, 0x00050051u, 0x00000009u, 0x00000157u, 0x00000154u, 0x00000002u, - 0x00070050u, 0x0000000au, 0x00000158u, 0x00000155u, 0x00000156u, 0x00000157u, 0x00000037u, 0x00050091u, - 0x0000000au, 0x00000159u, 0x00000153u, 0x00000158u, 0x0008004fu, 0x00000016u, 0x0000015au, 0x00000159u, - 0x00000159u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000152u, 0x0000015au, 0x0004003du, - 0x00000018u, 0x0000015cu, 0x00000027u, 0x0004003du, 0x00000016u, 0x0000015du, 0x00000026u, 0x00050051u, - 0x00000009u, 0x0000015eu, 0x0000015du, 0x00000000u, 0x00050051u, 0x00000009u, 0x0000015fu, 0x0000015du, - 0x00000001u, 0x00050051u, 0x00000009u, 0x00000160u, 0x0000015du, 0x00000002u, 0x00070050u, 0x0000000au, - 0x00000161u, 0x0000015eu, 0x0000015fu, 0x00000160u, 0x00000037u, 0x00050091u, 0x0000000au, 0x00000162u, - 0x0000015cu, 0x00000161u, 0x0008004fu, 0x00000016u, 0x00000163u, 0x00000162u, 0x00000162u, 0x00000000u, - 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000015bu, 0x00000163u, 0x0004003du, 0x00000016u, 0x00000165u, - 0x00000025u, 0x0004003du, 0x00000016u, 0x00000166u, 0x00000026u, 0x00050081u, 0x00000016u, 0x00000167u, - 0x00000165u, 0x00000166u, 0x0005008eu, 0x00000016u, 0x00000168u, 0x00000167u, 0x00000033u, 0x0003003eu, - 0x00000164u, 0x00000168u, 0x0004003du, 0x00000018u, 0x0000016au, 0x00000027u, 0x0004003du, 0x00000016u, - 0x0000016bu, 0x00000164u, 0x00050051u, 0x00000009u, 0x0000016cu, 0x0000016bu, 0x00000000u, 0x00050051u, - 0x00000009u, 0x0000016du, 0x0000016bu, 0x00000001u, 0x00050051u, 0x00000009u, 0x0000016eu, 0x0000016bu, - 0x00000002u, 0x00070050u, 0x0000000au, 0x0000016fu, 0x0000016cu, 0x0000016du, 0x0000016eu, 0x00000037u, - 0x00050091u, 0x0000000au, 0x00000170u, 0x0000016au, 0x0000016fu, 0x0008004fu, 0x00000016u, 0x00000171u, - 0x00000170u, 0x00000170u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000169u, 0x00000171u, - 0x00050041u, 0x00000039u, 0x00000173u, 0x00000152u, 0x0000003bu, 0x0004003du, 0x00000009u, 0x00000174u, - 0x00000173u, 0x0007000cu, 0x00000009u, 0x00000175u, 0x00000001u, 0x00000028u, 0x00000174u, 0x00000073u, - 0x0003003eu, 0x00000172u, 0x00000175u, 0x00050041u, 0x00000039u, 0x00000177u, 0x0000015bu, 0x0000003bu, - 0x0004003du, 0x00000009u, 0x00000178u, 0x00000177u, 0x0007000cu, 0x00000009u, 0x00000179u, 0x00000001u, - 0x00000028u, 0x00000178u, 0x00000073u, 0x0003003eu, 0x00000176u, 0x00000179u, 0x00050041u, 0x00000039u, - 0x0000017bu, 0x00000169u, 0x0000003bu, 0x0004003du, 0x00000009u, 0x0000017cu, 0x0000017bu, 0x0007000cu, - 0x00000009u, 0x0000017du, 0x00000001u, 0x00000028u, 0x0000017cu, 0x00000073u, 0x0003003eu, 0x0000017au, - 0x0000017du, 0x0004003du, 0x00000016u, 0x0000017fu, 0x00000152u, 0x0007004fu, 0x0000009au, 0x00000180u, - 0x0000017fu, 0x0000017fu, 0x00000000u, 0x00000001u, 0x0006000cu, 0x00000009u, 0x00000181u, 0x00000001u, - 0x00000042u, 0x00000180u, 0x0003003eu, 0x0000017eu, 0x00000181u, 0x0004003du, 0x00000016u, 0x00000183u, - 0x00000152u, 0x0007004fu, 0x0000009au, 0x00000184u, 0x00000183u, 0x00000183u, 0x00000000u, 0x00000001u, - 0x0004003du, 0x00000009u, 0x00000185u, 0x00000172u, 0x00050051u, 0x00000009u, 0x00000186u, 0x00000184u, - 0x00000000u, 0x00050051u, 0x00000009u, 0x00000187u, 0x00000184u, 0x00000001u, 0x00060050u, 0x00000016u, - 0x00000188u, 0x00000186u, 0x00000187u, 0x00000185u, 0x0006000cu, 0x00000009u, 0x00000189u, 0x00000001u, - 0x00000042u, 0x00000188u, 0x00050081u, 0x00000009u, 0x0000018bu, 0x00000189u, 0x0000018au, 0x0003003eu, - 0x00000182u, 0x0000018bu, 0x0004003du, 0x00000009u, 0x0000018du, 0x00000172u, 0x0004003du, 0x00000009u, - 0x0000018eu, 0x00000182u, 0x00050088u, 0x00000009u, 0x0000018fu, 0x0000018du, 0x0000018eu, 0x0008000cu, - 0x00000009u, 0x00000190u, 0x00000001u, 0x0000002bu, 0x0000018fu, 0x000000a3u, 0x00000037u, 0x0003003eu, - 0x0000018cu, 0x00000190u, 0x0004003du, 0x00000009u, 0x00000192u, 0x0000018cu, 0x0006000cu, 0x00000009u, - 0x00000193u, 0x00000001u, 0x00000011u, 0x00000192u, 0x0003003eu, 0x00000191u, 0x00000193u, 0x0004003du, - 0x00000009u, 0x00000195u, 0x00000191u, 0x0004003du, 0x00000009u, 0x00000196u, 0x00000191u, 0x00050085u, - 0x00000009u, 0x00000197u, 0x00000195u, 0x00000196u, 0x0003003eu, 0x00000194u, 0x00000197u, 0x00050041u, - 0x00000039u, 0x00000199u, 0x00000028u, 0x000000b9u, 0x0004003du, 0x00000009u, 0x0000019au, 0x00000199u, - 0x00050041u, 0x00000039u, 0x0000019bu, 0x00000028u, 0x00000079u, 0x0004003du, 0x00000009u, 0x0000019cu, - 0x0000019bu, 0x0004003du, 0x00000009u, 0x0000019du, 0x00000191u, 0x00050085u, 0x00000009u, 0x0000019eu, - 0x0000019cu, 0x0000019du, 0x00050081u, 0x00000009u, 0x0000019fu, 0x0000019au, 0x0000019eu, 0x00050041u, - 0x00000039u, 0x000001a0u, 0x00000028u, 0x0000002fu, 0x0004003du, 0x00000009u, 0x000001a1u, 0x000001a0u, - 0x0004003du, 0x00000009u, 0x000001a2u, 0x00000194u, 0x00050085u, 0x00000009u, 0x000001a3u, 0x000001a1u, - 0x000001a2u, 0x00050081u, 0x00000009u, 0x000001a4u, 0x0000019fu, 0x000001a3u, 0x00050041u, 0x00000039u, - 0x000001a5u, 0x00000028u, 0x000000c6u, 0x0004003du, 0x00000009u, 0x000001a6u, 0x000001a5u, 0x0004003du, - 0x00000009u, 0x000001a7u, 0x00000194u, 0x0004003du, 0x00000009u, 0x000001a8u, 0x00000191u, 0x00050085u, - 0x00000009u, 0x000001a9u, 0x000001a7u, 0x000001a8u, 0x00050085u, 0x00000009u, 0x000001aau, 0x000001a6u, - 0x000001a9u, 0x00050081u, 0x00000009u, 0x000001abu, 0x000001a4u, 0x000001aau, 0x00050041u, 0x00000039u, - 0x000001acu, 0x00000028u, 0x000000ccu, 0x0004003du, 0x00000009u, 0x000001adu, 0x000001acu, 0x0004003du, - 0x00000009u, 0x000001aeu, 0x00000194u, 0x0004003du, 0x00000009u, 0x000001afu, 0x00000194u, 0x00050085u, - 0x00000009u, 0x000001b0u, 0x000001aeu, 0x000001afu, 0x00050085u, 0x00000009u, 0x000001b1u, 0x000001adu, - 0x000001b0u, 0x00050081u, 0x00000009u, 0x000001b2u, 0x000001abu, 0x000001b1u, 0x00050041u, 0x00000039u, - 0x000001b3u, 0x00000028u, 0x000000d2u, 0x0004003du, 0x00000009u, 0x000001b4u, 0x000001b3u, 0x0004003du, - 0x00000009u, 0x000001b5u, 0x00000194u, 0x0004003du, 0x00000009u, 0x000001b6u, 0x00000194u, 0x00050085u, - 0x00000009u, 0x000001b7u, 0x000001b5u, 0x000001b6u, 0x0004003du, 0x00000009u, 0x000001b8u, 0x00000191u, - 0x00050085u, 0x00000009u, 0x000001b9u, 0x000001b7u, 0x000001b8u, 0x00050085u, 0x00000009u, 0x000001bau, - 0x000001b4u, 0x000001b9u, 0x00050081u, 0x00000009u, 0x000001bbu, 0x000001b2u, 0x000001bau, 0x0003003eu, - 0x00000198u, 0x000001bbu, 0x0004003du, 0x00000009u, 0x000001bcu, 0x00000191u, 0x00050041u, 0x00000039u, - 0x000001bdu, 0x00000028u, 0x0000006du, 0x0004003du, 0x00000009u, 0x000001beu, 0x000001bdu, 0x000500bau, - 0x00000011u, 0x000001bfu, 0x000001bcu, 0x000001beu, 0x000300f7u, 0x000001c1u, 0x00000000u, 0x000400fau, - 0x000001bfu, 0x000001c0u, 0x000001c1u, 0x000200f8u, 0x000001c0u, 0x00050041u, 0x00000039u, 0x000001c2u, - 0x00000028u, 0x000000deu, 0x0004003du, 0x00000009u, 0x000001c3u, 0x000001c2u, 0x0004003du, 0x00000009u, - 0x000001c4u, 0x00000191u, 0x00050041u, 0x00000039u, 0x000001c5u, 0x00000028u, 0x0000006du, 0x0004003du, - 0x00000009u, 0x000001c6u, 0x000001c5u, 0x00050083u, 0x00000009u, 0x000001c7u, 0x000001c4u, 0x000001c6u, - 0x00050041u, 0x00000039u, 0x000001c8u, 0x00000028u, 0x000000e5u, 0x0004003du, 0x00000009u, 0x000001c9u, - 0x000001c8u, 0x00050085u, 0x00000009u, 0x000001cau, 0x000001c7u, 0x000001c9u, 0x00050081u, 0x00000009u, - 0x000001cbu, 0x000001c3u, 0x000001cau, 0x0003003eu, 0x00000198u, 0x000001cbu, 0x000200f9u, 0x000001c1u, - 0x000200f8u, 0x000001c1u, 0x0004003du, 0x00000009u, 0x000001cdu, 0x0000017eu, 0x000500bau, 0x00000011u, - 0x000001ceu, 0x000001cdu, 0x00000065u, 0x000300f7u, 0x000001d1u, 0x00000000u, 0x000400fau, 0x000001ceu, - 0x000001d0u, 0x000001d5u, 0x000200f8u, 0x000001d0u, 0x0004003du, 0x00000009u, 0x000001d2u, 0x00000198u, - 0x0004003du, 0x00000009u, 0x000001d3u, 0x0000017eu, 0x00050088u, 0x00000009u, 0x000001d4u, 0x000001d2u, - 0x000001d3u, 0x0003003eu, 0x000001cfu, 0x000001d4u, 0x000200f9u, 0x000001d1u, 0x000200f8u, 0x000001d5u, - 0x0003003eu, 0x000001cfu, 0x00000046u, 0x000200f9u, 0x000001d1u, 0x000200f8u, 0x000001d1u, 0x0004003du, - 0x00000009u, 0x000001d6u, 0x000001cfu, 0x0003003eu, 0x000001ccu, 0x000001d6u, 0x0004003du, 0x00000009u, - 0x000001d8u, 0x000001ccu, 0x0004003du, 0x00000016u, 0x000001d9u, 0x00000152u, 0x0007004fu, 0x0000009au, - 0x000001dau, 0x000001d9u, 0x000001d9u, 0x00000000u, 0x00000001u, 0x0005008eu, 0x0000009au, 0x000001dbu, - 0x000001dau, 0x000001d8u, 0x0003003eu, 0x000001d7u, 0x000001dbu, 0x00050041u, 0x00000039u, 0x000001ddu, - 0x00000028u, 0x000000fcu, 0x0004003du, 0x00000009u, 0x000001deu, 0x000001ddu, 0x00050041u, 0x00000039u, - 0x000001dfu, 0x000001d7u, 0x0000007du, 0x0004003du, 0x00000009u, 0x000001e0u, 0x000001dfu, 0x00050085u, - 0x00000009u, 0x000001e1u, 0x000001deu, 0x000001e0u, 0x00050041u, 0x00000039u, 0x000001e2u, 0x00000028u, - 0x00000102u, 0x0004003du, 0x00000009u, 0x000001e3u, 0x000001e2u, 0x00050041u, 0x00000039u, 0x000001e4u, - 0x000001d7u, 0x00000008u, 0x0004003du, 0x00000009u, 0x000001e5u, 0x000001e4u, 0x00050085u, 0x00000009u, - 0x000001e6u, 0x000001e3u, 0x000001e5u, 0x00050081u, 0x00000009u, 0x000001e7u, 0x000001e1u, 0x000001e6u, - 0x00050041u, 0x00000039u, 0x000001e8u, 0x00000028u, 0x0000010au, 0x0004003du, 0x00000009u, 0x000001e9u, - 0x000001e8u, 0x00050041u, 0x00000039u, 0x000001eau, 0x000001d7u, 0x0000007du, 0x0004003du, 0x00000009u, - 0x000001ebu, 0x000001eau, 0x00050085u, 0x00000009u, 0x000001ecu, 0x000001e9u, 0x000001ebu, 0x00050041u, - 0x00000039u, 0x000001edu, 0x00000028u, 0x00000110u, 0x0004003du, 0x00000009u, 0x000001eeu, 0x000001edu, - 0x00050041u, 0x00000039u, 0x000001efu, 0x000001d7u, 0x00000008u, 0x0004003du, 0x00000009u, 0x000001f0u, - 0x000001efu, 0x00050085u, 0x00000009u, 0x000001f1u, 0x000001eeu, 0x000001f0u, 0x00050081u, 0x00000009u, - 0x000001f2u, 0x000001ecu, 0x000001f1u, 0x00050050u, 0x0000009au, 0x000001f3u, 0x000001e7u, 0x000001f2u, - 0x0003003eu, 0x000001dcu, 0x000001f3u, 0x0004003du, 0x0000009au, 0x000001f5u, 0x000001dcu, 0x00050041u, - 0x00000039u, 0x000001f6u, 0x00000028u, 0x00000054u, 0x0004003du, 0x00000009u, 0x000001f7u, 0x000001f6u, - 0x00050041u, 0x00000039u, 0x000001f8u, 0x00000028u, 0x0000011cu, 0x0004003du, 0x00000009u, 0x000001f9u, - 0x000001f8u, 0x00050050u, 0x0000009au, 0x000001fau, 0x000001f7u, 0x000001f9u, 0x00050081u, 0x0000009au, - 0x000001fbu, 0x000001f5u, 0x000001fau, 0x0003003eu, 0x000001f4u, 0x000001fbu, 0x0004003du, 0x00000016u, - 0x000001fdu, 0x0000015bu, 0x0007004fu, 0x0000009au, 0x000001feu, 0x000001fdu, 0x000001fdu, 0x00000000u, - 0x00000001u, 0x0006000cu, 0x00000009u, 0x000001ffu, 0x00000001u, 0x00000042u, 0x000001feu, 0x0003003eu, - 0x000001fcu, 0x000001ffu, 0x0004003du, 0x00000016u, 0x00000201u, 0x0000015bu, 0x0007004fu, 0x0000009au, - 0x00000202u, 0x00000201u, 0x00000201u, 0x00000000u, 0x00000001u, 0x0004003du, 0x00000009u, 0x00000203u, - 0x00000176u, 0x00050051u, 0x00000009u, 0x00000204u, 0x00000202u, 0x00000000u, 0x00050051u, 0x00000009u, - 0x00000205u, 0x00000202u, 0x00000001u, 0x00060050u, 0x00000016u, 0x00000206u, 0x00000204u, 0x00000205u, - 0x00000203u, 0x0006000cu, 0x00000009u, 0x00000207u, 0x00000001u, 0x00000042u, 0x00000206u, 0x00050081u, - 0x00000009u, 0x00000208u, 0x00000207u, 0x0000018au, 0x0003003eu, 0x00000200u, 0x00000208u, 0x0004003du, - 0x00000009u, 0x0000020au, 0x00000176u, 0x0004003du, 0x00000009u, 0x0000020bu, 0x00000200u, 0x00050088u, - 0x00000009u, 0x0000020cu, 0x0000020au, 0x0000020bu, 0x0008000cu, 0x00000009u, 0x0000020du, 0x00000001u, - 0x0000002bu, 0x0000020cu, 0x000000a3u, 0x00000037u, 0x0003003eu, 0x00000209u, 0x0000020du, 0x0004003du, - 0x00000009u, 0x0000020fu, 0x00000209u, 0x0006000cu, 0x00000009u, 0x00000210u, 0x00000001u, 0x00000011u, - 0x0000020fu, 0x0003003eu, 0x0000020eu, 0x00000210u, 0x0004003du, 0x00000009u, 0x00000212u, 0x0000020eu, - 0x0004003du, 0x00000009u, 0x00000213u, 0x0000020eu, 0x00050085u, 0x00000009u, 0x00000214u, 0x00000212u, - 0x00000213u, 0x0003003eu, 0x00000211u, 0x00000214u, 0x00050041u, 0x00000039u, 0x00000216u, 0x00000028u, - 0x000000b9u, 0x0004003du, 0x00000009u, 0x00000217u, 0x00000216u, 0x00050041u, 0x00000039u, 0x00000218u, - 0x00000028u, 0x00000079u, 0x0004003du, 0x00000009u, 0x00000219u, 0x00000218u, 0x0004003du, 0x00000009u, - 0x0000021au, 0x0000020eu, 0x00050085u, 0x00000009u, 0x0000021bu, 0x00000219u, 0x0000021au, 0x00050081u, - 0x00000009u, 0x0000021cu, 0x00000217u, 0x0000021bu, 0x00050041u, 0x00000039u, 0x0000021du, 0x00000028u, - 0x0000002fu, 0x0004003du, 0x00000009u, 0x0000021eu, 0x0000021du, 0x0004003du, 0x00000009u, 0x0000021fu, - 0x00000211u, 0x00050085u, 0x00000009u, 0x00000220u, 0x0000021eu, 0x0000021fu, 0x00050081u, 0x00000009u, - 0x00000221u, 0x0000021cu, 0x00000220u, 0x00050041u, 0x00000039u, 0x00000222u, 0x00000028u, 0x000000c6u, - 0x0004003du, 0x00000009u, 0x00000223u, 0x00000222u, 0x0004003du, 0x00000009u, 0x00000224u, 0x00000211u, - 0x0004003du, 0x00000009u, 0x00000225u, 0x0000020eu, 0x00050085u, 0x00000009u, 0x00000226u, 0x00000224u, - 0x00000225u, 0x00050085u, 0x00000009u, 0x00000227u, 0x00000223u, 0x00000226u, 0x00050081u, 0x00000009u, - 0x00000228u, 0x00000221u, 0x00000227u, 0x00050041u, 0x00000039u, 0x00000229u, 0x00000028u, 0x000000ccu, - 0x0004003du, 0x00000009u, 0x0000022au, 0x00000229u, 0x0004003du, 0x00000009u, 0x0000022bu, 0x00000211u, - 0x0004003du, 0x00000009u, 0x0000022cu, 0x00000211u, 0x00050085u, 0x00000009u, 0x0000022du, 0x0000022bu, - 0x0000022cu, 0x00050085u, 0x00000009u, 0x0000022eu, 0x0000022au, 0x0000022du, 0x00050081u, 0x00000009u, - 0x0000022fu, 0x00000228u, 0x0000022eu, 0x00050041u, 0x00000039u, 0x00000230u, 0x00000028u, 0x000000d2u, - 0x0004003du, 0x00000009u, 0x00000231u, 0x00000230u, 0x0004003du, 0x00000009u, 0x00000232u, 0x00000211u, - 0x0004003du, 0x00000009u, 0x00000233u, 0x00000211u, 0x00050085u, 0x00000009u, 0x00000234u, 0x00000232u, - 0x00000233u, 0x0004003du, 0x00000009u, 0x00000235u, 0x0000020eu, 0x00050085u, 0x00000009u, 0x00000236u, - 0x00000234u, 0x00000235u, 0x00050085u, 0x00000009u, 0x00000237u, 0x00000231u, 0x00000236u, 0x00050081u, - 0x00000009u, 0x00000238u, 0x0000022fu, 0x00000237u, 0x0003003eu, 0x00000215u, 0x00000238u, 0x0004003du, - 0x00000009u, 0x00000239u, 0x0000020eu, 0x00050041u, 0x00000039u, 0x0000023au, 0x00000028u, 0x0000006du, - 0x0004003du, 0x00000009u, 0x0000023bu, 0x0000023au, 0x000500bau, 0x00000011u, 0x0000023cu, 0x00000239u, - 0x0000023bu, 0x000300f7u, 0x0000023eu, 0x00000000u, 0x000400fau, 0x0000023cu, 0x0000023du, 0x0000023eu, - 0x000200f8u, 0x0000023du, 0x00050041u, 0x00000039u, 0x0000023fu, 0x00000028u, 0x000000deu, 0x0004003du, - 0x00000009u, 0x00000240u, 0x0000023fu, 0x0004003du, 0x00000009u, 0x00000241u, 0x0000020eu, 0x00050041u, - 0x00000039u, 0x00000242u, 0x00000028u, 0x0000006du, 0x0004003du, 0x00000009u, 0x00000243u, 0x00000242u, - 0x00050083u, 0x00000009u, 0x00000244u, 0x00000241u, 0x00000243u, 0x00050041u, 0x00000039u, 0x00000245u, - 0x00000028u, 0x000000e5u, 0x0004003du, 0x00000009u, 0x00000246u, 0x00000245u, 0x00050085u, 0x00000009u, - 0x00000247u, 0x00000244u, 0x00000246u, 0x00050081u, 0x00000009u, 0x00000248u, 0x00000240u, 0x00000247u, - 0x0003003eu, 0x00000215u, 0x00000248u, 0x000200f9u, 0x0000023eu, 0x000200f8u, 0x0000023eu, 0x0004003du, - 0x00000009u, 0x0000024au, 0x000001fcu, 0x000500bau, 0x00000011u, 0x0000024bu, 0x0000024au, 0x00000065u, - 0x000300f7u, 0x0000024eu, 0x00000000u, 0x000400fau, 0x0000024bu, 0x0000024du, 0x00000252u, 0x000200f8u, - 0x0000024du, 0x0004003du, 0x00000009u, 0x0000024fu, 0x00000215u, 0x0004003du, 0x00000009u, 0x00000250u, - 0x000001fcu, 0x00050088u, 0x00000009u, 0x00000251u, 0x0000024fu, 0x00000250u, 0x0003003eu, 0x0000024cu, - 0x00000251u, 0x000200f9u, 0x0000024eu, 0x000200f8u, 0x00000252u, 0x0003003eu, 0x0000024cu, 0x00000046u, - 0x000200f9u, 0x0000024eu, 0x000200f8u, 0x0000024eu, 0x0004003du, 0x00000009u, 0x00000253u, 0x0000024cu, - 0x0003003eu, 0x00000249u, 0x00000253u, 0x0004003du, 0x00000009u, 0x00000255u, 0x00000249u, 0x0004003du, - 0x00000016u, 0x00000256u, 0x0000015bu, 0x0007004fu, 0x0000009au, 0x00000257u, 0x00000256u, 0x00000256u, - 0x00000000u, 0x00000001u, 0x0005008eu, 0x0000009au, 0x00000258u, 0x00000257u, 0x00000255u, 0x0003003eu, - 0x00000254u, 0x00000258u, 0x00050041u, 0x00000039u, 0x0000025au, 0x00000028u, 0x000000fcu, 0x0004003du, - 0x00000009u, 0x0000025bu, 0x0000025au, 0x00050041u, 0x00000039u, 0x0000025cu, 0x00000254u, 0x0000007du, - 0x0004003du, 0x00000009u, 0x0000025du, 0x0000025cu, 0x00050085u, 0x00000009u, 0x0000025eu, 0x0000025bu, - 0x0000025du, 0x00050041u, 0x00000039u, 0x0000025fu, 0x00000028u, 0x00000102u, 0x0004003du, 0x00000009u, - 0x00000260u, 0x0000025fu, 0x00050041u, 0x00000039u, 0x00000261u, 0x00000254u, 0x00000008u, 0x0004003du, - 0x00000009u, 0x00000262u, 0x00000261u, 0x00050085u, 0x00000009u, 0x00000263u, 0x00000260u, 0x00000262u, - 0x00050081u, 0x00000009u, 0x00000264u, 0x0000025eu, 0x00000263u, 0x00050041u, 0x00000039u, 0x00000265u, - 0x00000028u, 0x0000010au, 0x0004003du, 0x00000009u, 0x00000266u, 0x00000265u, 0x00050041u, 0x00000039u, - 0x00000267u, 0x00000254u, 0x0000007du, 0x0004003du, 0x00000009u, 0x00000268u, 0x00000267u, 0x00050085u, - 0x00000009u, 0x00000269u, 0x00000266u, 0x00000268u, 0x00050041u, 0x00000039u, 0x0000026au, 0x00000028u, - 0x00000110u, 0x0004003du, 0x00000009u, 0x0000026bu, 0x0000026au, 0x00050041u, 0x00000039u, 0x0000026cu, - 0x00000254u, 0x00000008u, 0x0004003du, 0x00000009u, 0x0000026du, 0x0000026cu, 0x00050085u, 0x00000009u, - 0x0000026eu, 0x0000026bu, 0x0000026du, 0x00050081u, 0x00000009u, 0x0000026fu, 0x00000269u, 0x0000026eu, - 0x00050050u, 0x0000009au, 0x00000270u, 0x00000264u, 0x0000026fu, 0x0003003eu, 0x00000259u, 0x00000270u, - 0x0004003du, 0x0000009au, 0x00000272u, 0x00000259u, 0x00050041u, 0x00000039u, 0x00000273u, 0x00000028u, - 0x00000054u, 0x0004003du, 0x00000009u, 0x00000274u, 0x00000273u, 0x00050041u, 0x00000039u, 0x00000275u, - 0x00000028u, 0x0000011cu, 0x0004003du, 0x00000009u, 0x00000276u, 0x00000275u, 0x00050050u, 0x0000009au, - 0x00000277u, 0x00000274u, 0x00000276u, 0x00050081u, 0x0000009au, 0x00000278u, 0x00000272u, 0x00000277u, - 0x0003003eu, 0x00000271u, 0x00000278u, 0x0004003du, 0x00000016u, 0x0000027au, 0x00000169u, 0x0007004fu, - 0x0000009au, 0x0000027bu, 0x0000027au, 0x0000027au, 0x00000000u, 0x00000001u, 0x0006000cu, 0x00000009u, - 0x0000027cu, 0x00000001u, 0x00000042u, 0x0000027bu, 0x0003003eu, 0x00000279u, 0x0000027cu, 0x0004003du, - 0x00000016u, 0x0000027eu, 0x00000169u, 0x0007004fu, 0x0000009au, 0x0000027fu, 0x0000027eu, 0x0000027eu, - 0x00000000u, 0x00000001u, 0x0004003du, 0x00000009u, 0x00000280u, 0x0000017au, 0x00050051u, 0x00000009u, - 0x00000281u, 0x0000027fu, 0x00000000u, 0x00050051u, 0x00000009u, 0x00000282u, 0x0000027fu, 0x00000001u, - 0x00060050u, 0x00000016u, 0x00000283u, 0x00000281u, 0x00000282u, 0x00000280u, 0x0006000cu, 0x00000009u, - 0x00000284u, 0x00000001u, 0x00000042u, 0x00000283u, 0x00050081u, 0x00000009u, 0x00000285u, 0x00000284u, - 0x0000018au, 0x0003003eu, 0x0000027du, 0x00000285u, 0x0004003du, 0x00000009u, 0x00000287u, 0x0000017au, - 0x0004003du, 0x00000009u, 0x00000288u, 0x0000027du, 0x00050088u, 0x00000009u, 0x00000289u, 0x00000287u, - 0x00000288u, 0x0008000cu, 0x00000009u, 0x0000028au, 0x00000001u, 0x0000002bu, 0x00000289u, 0x000000a3u, - 0x00000037u, 0x0003003eu, 0x00000286u, 0x0000028au, 0x0004003du, 0x00000009u, 0x0000028cu, 0x00000286u, - 0x0006000cu, 0x00000009u, 0x0000028du, 0x00000001u, 0x00000011u, 0x0000028cu, 0x0003003eu, 0x0000028bu, - 0x0000028du, 0x0004003du, 0x00000009u, 0x0000028fu, 0x0000028bu, 0x0004003du, 0x00000009u, 0x00000290u, - 0x0000028bu, 0x00050085u, 0x00000009u, 0x00000291u, 0x0000028fu, 0x00000290u, 0x0003003eu, 0x0000028eu, - 0x00000291u, 0x00050041u, 0x00000039u, 0x00000293u, 0x00000028u, 0x000000b9u, 0x0004003du, 0x00000009u, - 0x00000294u, 0x00000293u, 0x00050041u, 0x00000039u, 0x00000295u, 0x00000028u, 0x00000079u, 0x0004003du, - 0x00000009u, 0x00000296u, 0x00000295u, 0x0004003du, 0x00000009u, 0x00000297u, 0x0000028bu, 0x00050085u, - 0x00000009u, 0x00000298u, 0x00000296u, 0x00000297u, 0x00050081u, 0x00000009u, 0x00000299u, 0x00000294u, - 0x00000298u, 0x00050041u, 0x00000039u, 0x0000029au, 0x00000028u, 0x0000002fu, 0x0004003du, 0x00000009u, - 0x0000029bu, 0x0000029au, 0x0004003du, 0x00000009u, 0x0000029cu, 0x0000028eu, 0x00050085u, 0x00000009u, - 0x0000029du, 0x0000029bu, 0x0000029cu, 0x00050081u, 0x00000009u, 0x0000029eu, 0x00000299u, 0x0000029du, - 0x00050041u, 0x00000039u, 0x0000029fu, 0x00000028u, 0x000000c6u, 0x0004003du, 0x00000009u, 0x000002a0u, - 0x0000029fu, 0x0004003du, 0x00000009u, 0x000002a1u, 0x0000028eu, 0x0004003du, 0x00000009u, 0x000002a2u, - 0x0000028bu, 0x00050085u, 0x00000009u, 0x000002a3u, 0x000002a1u, 0x000002a2u, 0x00050085u, 0x00000009u, - 0x000002a4u, 0x000002a0u, 0x000002a3u, 0x00050081u, 0x00000009u, 0x000002a5u, 0x0000029eu, 0x000002a4u, - 0x00050041u, 0x00000039u, 0x000002a6u, 0x00000028u, 0x000000ccu, 0x0004003du, 0x00000009u, 0x000002a7u, - 0x000002a6u, 0x0004003du, 0x00000009u, 0x000002a8u, 0x0000028eu, 0x0004003du, 0x00000009u, 0x000002a9u, - 0x0000028eu, 0x00050085u, 0x00000009u, 0x000002aau, 0x000002a8u, 0x000002a9u, 0x00050085u, 0x00000009u, - 0x000002abu, 0x000002a7u, 0x000002aau, 0x00050081u, 0x00000009u, 0x000002acu, 0x000002a5u, 0x000002abu, - 0x00050041u, 0x00000039u, 0x000002adu, 0x00000028u, 0x000000d2u, 0x0004003du, 0x00000009u, 0x000002aeu, - 0x000002adu, 0x0004003du, 0x00000009u, 0x000002afu, 0x0000028eu, 0x0004003du, 0x00000009u, 0x000002b0u, - 0x0000028eu, 0x00050085u, 0x00000009u, 0x000002b1u, 0x000002afu, 0x000002b0u, 0x0004003du, 0x00000009u, - 0x000002b2u, 0x0000028bu, 0x00050085u, 0x00000009u, 0x000002b3u, 0x000002b1u, 0x000002b2u, 0x00050085u, - 0x00000009u, 0x000002b4u, 0x000002aeu, 0x000002b3u, 0x00050081u, 0x00000009u, 0x000002b5u, 0x000002acu, - 0x000002b4u, 0x0003003eu, 0x00000292u, 0x000002b5u, 0x0004003du, 0x00000009u, 0x000002b6u, 0x0000028bu, - 0x00050041u, 0x00000039u, 0x000002b7u, 0x00000028u, 0x0000006du, 0x0004003du, 0x00000009u, 0x000002b8u, - 0x000002b7u, 0x000500bau, 0x00000011u, 0x000002b9u, 0x000002b6u, 0x000002b8u, 0x000300f7u, 0x000002bbu, - 0x00000000u, 0x000400fau, 0x000002b9u, 0x000002bau, 0x000002bbu, 0x000200f8u, 0x000002bau, 0x00050041u, - 0x00000039u, 0x000002bcu, 0x00000028u, 0x000000deu, 0x0004003du, 0x00000009u, 0x000002bdu, 0x000002bcu, - 0x0004003du, 0x00000009u, 0x000002beu, 0x0000028bu, 0x00050041u, 0x00000039u, 0x000002bfu, 0x00000028u, - 0x0000006du, 0x0004003du, 0x00000009u, 0x000002c0u, 0x000002bfu, 0x00050083u, 0x00000009u, 0x000002c1u, - 0x000002beu, 0x000002c0u, 0x00050041u, 0x00000039u, 0x000002c2u, 0x00000028u, 0x000000e5u, 0x0004003du, - 0x00000009u, 0x000002c3u, 0x000002c2u, 0x00050085u, 0x00000009u, 0x000002c4u, 0x000002c1u, 0x000002c3u, - 0x00050081u, 0x00000009u, 0x000002c5u, 0x000002bdu, 0x000002c4u, 0x0003003eu, 0x00000292u, 0x000002c5u, - 0x000200f9u, 0x000002bbu, 0x000200f8u, 0x000002bbu, 0x0004003du, 0x00000009u, 0x000002c7u, 0x00000279u, - 0x000500bau, 0x00000011u, 0x000002c8u, 0x000002c7u, 0x00000065u, 0x000300f7u, 0x000002cbu, 0x00000000u, - 0x000400fau, 0x000002c8u, 0x000002cau, 0x000002cfu, 0x000200f8u, 0x000002cau, 0x0004003du, 0x00000009u, - 0x000002ccu, 0x00000292u, 0x0004003du, 0x00000009u, 0x000002cdu, 0x00000279u, 0x00050088u, 0x00000009u, - 0x000002ceu, 0x000002ccu, 0x000002cdu, 0x0003003eu, 0x000002c9u, 0x000002ceu, 0x000200f9u, 0x000002cbu, - 0x000200f8u, 0x000002cfu, 0x0003003eu, 0x000002c9u, 0x00000046u, 0x000200f9u, 0x000002cbu, 0x000200f8u, - 0x000002cbu, 0x0004003du, 0x00000009u, 0x000002d0u, 0x000002c9u, 0x0003003eu, 0x000002c6u, 0x000002d0u, - 0x0004003du, 0x00000009u, 0x000002d2u, 0x000002c6u, 0x0004003du, 0x00000016u, 0x000002d3u, 0x00000169u, - 0x0007004fu, 0x0000009au, 0x000002d4u, 0x000002d3u, 0x000002d3u, 0x00000000u, 0x00000001u, 0x0005008eu, - 0x0000009au, 0x000002d5u, 0x000002d4u, 0x000002d2u, 0x0003003eu, 0x000002d1u, 0x000002d5u, 0x00050041u, - 0x00000039u, 0x000002d7u, 0x00000028u, 0x000000fcu, 0x0004003du, 0x00000009u, 0x000002d8u, 0x000002d7u, - 0x00050041u, 0x00000039u, 0x000002d9u, 0x000002d1u, 0x0000007du, 0x0004003du, 0x00000009u, 0x000002dau, - 0x000002d9u, 0x00050085u, 0x00000009u, 0x000002dbu, 0x000002d8u, 0x000002dau, 0x00050041u, 0x00000039u, - 0x000002dcu, 0x00000028u, 0x00000102u, 0x0004003du, 0x00000009u, 0x000002ddu, 0x000002dcu, 0x00050041u, - 0x00000039u, 0x000002deu, 0x000002d1u, 0x00000008u, 0x0004003du, 0x00000009u, 0x000002dfu, 0x000002deu, - 0x00050085u, 0x00000009u, 0x000002e0u, 0x000002ddu, 0x000002dfu, 0x00050081u, 0x00000009u, 0x000002e1u, - 0x000002dbu, 0x000002e0u, 0x00050041u, 0x00000039u, 0x000002e2u, 0x00000028u, 0x0000010au, 0x0004003du, - 0x00000009u, 0x000002e3u, 0x000002e2u, 0x00050041u, 0x00000039u, 0x000002e4u, 0x000002d1u, 0x0000007du, - 0x0004003du, 0x00000009u, 0x000002e5u, 0x000002e4u, 0x00050085u, 0x00000009u, 0x000002e6u, 0x000002e3u, - 0x000002e5u, 0x00050041u, 0x00000039u, 0x000002e7u, 0x00000028u, 0x00000110u, 0x0004003du, 0x00000009u, - 0x000002e8u, 0x000002e7u, 0x00050041u, 0x00000039u, 0x000002e9u, 0x000002d1u, 0x00000008u, 0x0004003du, - 0x00000009u, 0x000002eau, 0x000002e9u, 0x00050085u, 0x00000009u, 0x000002ebu, 0x000002e8u, 0x000002eau, - 0x00050081u, 0x00000009u, 0x000002ecu, 0x000002e6u, 0x000002ebu, 0x00050050u, 0x0000009au, 0x000002edu, - 0x000002e1u, 0x000002ecu, 0x0003003eu, 0x000002d6u, 0x000002edu, 0x0004003du, 0x0000009au, 0x000002efu, - 0x000002d6u, 0x00050041u, 0x00000039u, 0x000002f0u, 0x00000028u, 0x00000054u, 0x0004003du, 0x00000009u, - 0x000002f1u, 0x000002f0u, 0x00050041u, 0x00000039u, 0x000002f2u, 0x00000028u, 0x0000011cu, 0x0004003du, - 0x00000009u, 0x000002f3u, 0x000002f2u, 0x00050050u, 0x0000009au, 0x000002f4u, 0x000002f1u, 0x000002f3u, - 0x00050081u, 0x0000009au, 0x000002f5u, 0x000002efu, 0x000002f4u, 0x0003003eu, 0x000002eeu, 0x000002f5u, - 0x0004003du, 0x0000009au, 0x000002f7u, 0x000001f4u, 0x0004003du, 0x0000009au, 0x000002f8u, 0x00000271u, - 0x00050081u, 0x0000009au, 0x000002f9u, 0x000002f7u, 0x000002f8u, 0x0005008eu, 0x0000009au, 0x000002fau, - 0x000002f9u, 0x00000033u, 0x0003003eu, 0x000002f6u, 0x000002fau, 0x0004003du, 0x0000009au, 0x000002fcu, - 0x000002eeu, 0x0004003du, 0x0000009au, 0x000002fdu, 0x000002f6u, 0x00050083u, 0x0000009au, 0x000002feu, - 0x000002fcu, 0x000002fdu, 0x0006000cu, 0x00000009u, 0x000002ffu, 0x00000001u, 0x00000042u, 0x000002feu, - 0x0003003eu, 0x000002fbu, 0x000002ffu, 0x0004003du, 0x00000009u, 0x00000300u, 0x000002fbu, 0x0008000cu, - 0x00000009u, 0x00000302u, 0x00000001u, 0x0000002bu, 0x00000300u, 0x00000046u, 0x00000301u, 0x000200feu, - 0x00000302u, 0x00010038u, -}; - -static const uint32_t kSpv_ts_polyline_frag[] = { - 0x07230203u, 0x00010600u, 0x0008000bu, 0x0000003eu, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, - 0x000014a3u, 0x0006000au, 0x5f565053u, 0x5f545845u, 0x6873656du, 0x6168735fu, 0x00726564u, 0x0006000bu, - 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, - 0x0009000fu, 0x00000004u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x0000000cu, 0x00000016u, 0x0000002cu, - 0x00000038u, 0x00030010u, 0x00000004u, 0x00000007u, 0x00030003u, 0x00000002u, 0x000001ccu, 0x000a0004u, - 0x455f4c47u, 0x665f5458u, 0x6d676172u, 0x5f746e65u, 0x64616873u, 0x625f7265u, 0x63797261u, 0x72746e65u, - 0x00006369u, 0x00060004u, 0x455f4c47u, 0x6d5f5458u, 0x5f687365u, 0x64616873u, 0x00007265u, 0x00040005u, - 0x00000004u, 0x6e69616du, 0x00000000u, 0x00040005u, 0x00000009u, 0x6f6c6f63u, 0x00000072u, 0x00060005u, - 0x0000000au, 0x6d697250u, 0x6f6c6f43u, 0x6f6c4272u, 0x00006b63u, 0x00050006u, 0x0000000au, 0x00000000u, - 0x6f6c6f63u, 0x00000072u, 0x00050006u, 0x0000000au, 0x00000001u, 0x625f7369u, 0x00007665u, 0x00040005u, - 0x0000000cu, 0x6d697270u, 0x006e695fu, 0x00060005u, 0x00000014u, 0x68737550u, 0x736e6f43u, 0x746e6174u, - 0x00000073u, 0x000a0006u, 0x00000014u, 0x00000000u, 0x69775f75u, 0x5f687464u, 0x796c6f70u, 0x656e696cu, - 0x6765725fu, 0x72616c75u, 0x00000000u, 0x00090006u, 0x00000014u, 0x00000001u, 0x69775f75u, 0x5f687464u, - 0x796c6f70u, 0x656e696cu, 0x7665625fu, 0x00000000u, 0x000a0006u, 0x00000014u, 0x00000002u, 0x69775f75u, - 0x5f687464u, 0x5f6f6765u, 0x6a617274u, 0x6765725fu, 0x72616c75u, 0x00000000u, 0x00090006u, 0x00000014u, - 0x00000003u, 0x69775f75u, 0x5f687464u, 0x5f6f6765u, 0x6a617274u, 0x7665625fu, 0x00000000u, 0x00080006u, - 0x00000014u, 0x00000004u, 0x69775f75u, 0x5f687464u, 0x65726977u, 0x6d617266u, 0x00000065u, 0x00080006u, - 0x00000014u, 0x00000005u, 0x65725f75u, 0x756c6f73u, 0x6e6f6974u, 0x6163735fu, 0x0000656cu, 0x00070006u, - 0x00000014u, 0x00000006u, 0x65645f75u, 0x5f687470u, 0x6c616373u, 0x00676e69u, 0x00090006u, 0x00000014u, - 0x00000007u, 0x616d5f75u, 0x78655f78u, 0x70617274u, 0x74616c6fu, 0x5f6e6f69u, 0x00007375u, 0x00090006u, - 0x00000014u, 0x00000008u, 0x6f635f75u, 0x5f726f6cu, 0x656c6170u, 0x5f657474u, 0x657a6973u, 0x00000000u, - 0x00070006u, 0x00000014u, 0x00000009u, 0x756e5f75u, 0x75715f6du, 0x65697265u, 0x00000073u, 0x000a0006u, - 0x00000014u, 0x0000000au, 0x65745f75u, 0x6c657373u, 0x6974616cu, 0x745f6e6fu, 0x73657268u, 0x646c6f68u, - 0x00000000u, 0x000a0006u, 0x00000014u, 0x0000000bu, 0x616d5f75u, 0x65745f78u, 0x6c657373u, 0x6974616cu, - 0x705f6e6fu, 0x6c796c6fu, 0x00656e69u, 0x000a0006u, 0x00000014u, 0x0000000cu, 0x616d5f75u, 0x65745f78u, - 0x6c657373u, 0x6974616cu, 0x705f6e6fu, 0x67796c6fu, 0x00006e6fu, 0x00090006u, 0x00000014u, 0x0000000du, - 0x616d5f75u, 0x65745f78u, 0x6c657373u, 0x6974616cu, 0x635f6e6fu, 0x00656275u, 0x00080006u, 0x00000014u, - 0x0000000eu, 0x75635f75u, 0x725f6c6cu, 0x75696461u, 0x63735f73u, 0x00656c61u, 0x00070006u, 0x00000014u, - 0x0000000fu, 0x6f665f75u, 0x6e655f67u, 0x656c6261u, 0x00000064u, 0x00070006u, 0x00000014u, 0x00000010u, - 0x616d5f75u, 0x626f5f78u, 0x63617473u, 0x0073656cu, 0x00080006u, 0x00000014u, 0x00000011u, 0x75635f75u, - 0x705f6562u, 0x5f6c6f6fu, 0x65646e69u, 0x00000078u, 0x00080006u, 0x00000014u, 0x00000012u, 0x756e5f75u, - 0x6f705f6du, 0x6f67796cu, 0x6f705f6eu, 0x00736c6fu, 0x00090006u, 0x00000014u, 0x00000013u, 0x616d5f75u, - 0x61765f78u, 0x79617272u, 0x65705f73u, 0x6f705f72u, 0x00006c6fu, 0x00090006u, 0x00000014u, 0x00000014u, - 0x756e5f75u, 0x6f705f6du, 0x696c796cu, 0x705f656eu, 0x736c6f6fu, 0x00000000u, 0x00030005u, 0x00000016u, - 0x00006370u, 0x00050005u, 0x00000028u, 0x5f676f66u, 0x74636166u, 0x0000726fu, 0x00060005u, 0x0000002cu, - 0x465f6c67u, 0x43676172u, 0x64726f6fu, 0x00000000u, 0x00050005u, 0x00000038u, 0x5f74756fu, 0x6f6c6f63u, - 0x00000072u, 0x00030047u, 0x0000000au, 0x00000002u, 0x00040048u, 0x0000000au, 0x00000000u, 0x00001497u, - 0x00040048u, 0x0000000au, 0x00000001u, 0x00001497u, 0x00040047u, 0x0000000cu, 0x0000001eu, 0x00000000u, - 0x00030047u, 0x00000014u, 0x00000002u, 0x00050048u, 0x00000014u, 0x00000000u, 0x00000023u, 0x00000000u, - 0x00050048u, 0x00000014u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000014u, 0x00000002u, - 0x00000023u, 0x00000008u, 0x00050048u, 0x00000014u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, - 0x00000014u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000014u, 0x00000005u, 0x00000023u, - 0x00000014u, 0x00050048u, 0x00000014u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000014u, - 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000014u, 0x00000008u, 0x00000023u, 0x00000020u, - 0x00050048u, 0x00000014u, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x00000014u, 0x0000000au, - 0x00000023u, 0x00000028u, 0x00050048u, 0x00000014u, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, - 0x00000014u, 0x0000000cu, 0x00000023u, 0x00000030u, 0x00050048u, 0x00000014u, 0x0000000du, 0x00000023u, - 0x00000034u, 0x00050048u, 0x00000014u, 0x0000000eu, 0x00000023u, 0x00000038u, 0x00050048u, 0x00000014u, - 0x0000000fu, 0x00000023u, 0x0000003cu, 0x00050048u, 0x00000014u, 0x00000010u, 0x00000023u, 0x00000040u, - 0x00050048u, 0x00000014u, 0x00000011u, 0x00000023u, 0x00000044u, 0x00050048u, 0x00000014u, 0x00000012u, - 0x00000023u, 0x00000048u, 0x00050048u, 0x00000014u, 0x00000013u, 0x00000023u, 0x0000004cu, 0x00050048u, - 0x00000014u, 0x00000014u, 0x00000023u, 0x00000050u, 0x00040047u, 0x0000002cu, 0x0000000bu, 0x0000000fu, - 0x00040047u, 0x00000038u, 0x0000001eu, 0x00000000u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, - 0x00000002u, 0x00030016u, 0x00000006u, 0x00000020u, 0x00040017u, 0x00000007u, 0x00000006u, 0x00000003u, - 0x00040020u, 0x00000008u, 0x00000007u, 0x00000007u, 0x0004001eu, 0x0000000au, 0x00000007u, 0x00000006u, - 0x00040020u, 0x0000000bu, 0x00000001u, 0x0000000au, 0x0004003bu, 0x0000000bu, 0x0000000cu, 0x00000001u, - 0x00040015u, 0x0000000du, 0x00000020u, 0x00000001u, 0x0004002bu, 0x0000000du, 0x0000000eu, 0x00000000u, - 0x00040020u, 0x0000000fu, 0x00000001u, 0x00000007u, 0x00020014u, 0x00000012u, 0x00040015u, 0x00000013u, - 0x00000020u, 0x00000000u, 0x0017001eu, 0x00000014u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x0000000du, 0x0000000du, 0x00000013u, 0x00000006u, 0x00000013u, - 0x00000013u, 0x00000013u, 0x00000006u, 0x00000006u, 0x00000013u, 0x00000013u, 0x00000013u, 0x00000013u, - 0x00000013u, 0x00040020u, 0x00000015u, 0x00000009u, 0x00000014u, 0x0004003bu, 0x00000015u, 0x00000016u, - 0x00000009u, 0x0004002bu, 0x0000000du, 0x00000017u, 0x0000000fu, 0x00040020u, 0x00000018u, 0x00000009u, - 0x00000006u, 0x0004002bu, 0x00000006u, 0x0000001bu, 0x3f000000u, 0x0004002bu, 0x0000000du, 0x0000001fu, - 0x00000001u, 0x00040020u, 0x00000020u, 0x00000001u, 0x00000006u, 0x00040020u, 0x00000027u, 0x00000007u, - 0x00000006u, 0x0004002bu, 0x00000006u, 0x00000029u, 0x3f800000u, 0x00040017u, 0x0000002au, 0x00000006u, - 0x00000004u, 0x00040020u, 0x0000002bu, 0x00000001u, 0x0000002au, 0x0004003bu, 0x0000002bu, 0x0000002cu, - 0x00000001u, 0x0004002bu, 0x00000013u, 0x0000002du, 0x00000002u, 0x0004002bu, 0x00000006u, 0x00000032u, - 0x00000000u, 0x00040020u, 0x00000037u, 0x00000003u, 0x0000002au, 0x0004003bu, 0x00000037u, 0x00000038u, - 0x00000003u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, - 0x0004003bu, 0x00000008u, 0x00000009u, 0x00000007u, 0x0004003bu, 0x00000027u, 0x00000028u, 0x00000007u, - 0x00050041u, 0x0000000fu, 0x00000010u, 0x0000000cu, 0x0000000eu, 0x0004003du, 0x00000007u, 0x00000011u, - 0x00000010u, 0x0003003eu, 0x00000009u, 0x00000011u, 0x00050041u, 0x00000018u, 0x00000019u, 0x00000016u, - 0x00000017u, 0x0004003du, 0x00000006u, 0x0000001au, 0x00000019u, 0x000500bau, 0x00000012u, 0x0000001cu, - 0x0000001au, 0x0000001bu, 0x000300f7u, 0x0000001eu, 0x00000000u, 0x000400fau, 0x0000001cu, 0x0000001du, - 0x0000001eu, 0x000200f8u, 0x0000001du, 0x00050041u, 0x00000020u, 0x00000021u, 0x0000000cu, 0x0000001fu, - 0x0004003du, 0x00000006u, 0x00000022u, 0x00000021u, 0x000500b8u, 0x00000012u, 0x00000023u, 0x00000022u, - 0x0000001bu, 0x000200f9u, 0x0000001eu, 0x000200f8u, 0x0000001eu, 0x000700f5u, 0x00000012u, 0x00000024u, - 0x0000001cu, 0x00000005u, 0x00000023u, 0x0000001du, 0x000300f7u, 0x00000026u, 0x00000000u, 0x000400fau, - 0x00000024u, 0x00000025u, 0x00000026u, 0x000200f8u, 0x00000025u, 0x00050041u, 0x00000020u, 0x0000002eu, - 0x0000002cu, 0x0000002du, 0x0004003du, 0x00000006u, 0x0000002fu, 0x0000002eu, 0x00050083u, 0x00000006u, - 0x00000030u, 0x00000029u, 0x0000002fu, 0x0003003eu, 0x00000028u, 0x00000030u, 0x0004003du, 0x00000006u, - 0x00000031u, 0x00000028u, 0x0008000cu, 0x00000006u, 0x00000033u, 0x00000001u, 0x0000002bu, 0x00000031u, - 0x00000032u, 0x00000029u, 0x0003003eu, 0x00000028u, 0x00000033u, 0x0004003du, 0x00000006u, 0x00000034u, - 0x00000028u, 0x0004003du, 0x00000007u, 0x00000035u, 0x00000009u, 0x0005008eu, 0x00000007u, 0x00000036u, - 0x00000035u, 0x00000034u, 0x0003003eu, 0x00000009u, 0x00000036u, 0x000200f9u, 0x00000026u, 0x000200f8u, - 0x00000026u, 0x0004003du, 0x00000007u, 0x00000039u, 0x00000009u, 0x00050051u, 0x00000006u, 0x0000003au, - 0x00000039u, 0x00000000u, 0x00050051u, 0x00000006u, 0x0000003bu, 0x00000039u, 0x00000001u, 0x00050051u, - 0x00000006u, 0x0000003cu, 0x00000039u, 0x00000002u, 0x00070050u, 0x0000002au, 0x0000003du, 0x0000003au, - 0x0000003bu, 0x0000003cu, 0x00000029u, 0x0003003eu, 0x00000038u, 0x0000003du, 0x000100fdu, 0x00010038u, -}; - -static const uint32_t kSpv_ts_polygon_task[] = { - 0x07230203u, 0x00010600u, 0x0008000bu, 0x00000599u, 0x00000000u, 0x00020011u, 0x0000000bu, 0x00020011u, - 0x000014a3u, 0x0006000au, 0x5f565053u, 0x5f545845u, 0x6873656du, 0x6168735fu, 0x00726564u, 0x0006000bu, - 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, - 0x0016000fu, 0x000014f4u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x000000e1u, 0x000000f7u, 0x00000129u, - 0x00000355u, 0x00000380u, 0x0000038fu, 0x000003a6u, 0x000003ccu, 0x00000408u, 0x00000417u, 0x00000439u, - 0x000004d6u, 0x000004e4u, 0x0000056au, 0x0000058du, 0x00000592u, 0x00000597u, 0x0006014bu, 0x00000004u, - 0x00000026u, 0x00000007u, 0x00000007u, 0x00000007u, 0x00030003u, 0x00000002u, 0x000001ccu, 0x00060004u, - 0x455f4c47u, 0x6d5f5458u, 0x5f687365u, 0x64616873u, 0x00007265u, 0x000d0004u, 0x455f4c47u, 0x735f5458u, - 0x65646168u, 0x78655f72u, 0x63696c70u, 0x615f7469u, 0x68746972u, 0x6974656du, 0x79745f63u, 0x5f736570u, - 0x36746e69u, 0x00000034u, 0x00040005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00090005u, 0x0000000du, - 0x5f746567u, 0x61666564u, 0x5f746c75u, 0x6d697270u, 0x6c6f635fu, 0x7528726fu, 0x00003b31u, 0x00060005u, - 0x0000000cu, 0x6d697270u, 0x7079745fu, 0x64695f65u, 0x00000000u, 0x00070005u, 0x00000010u, 0x5f746567u, - 0x6d697270u, 0x6c6f635fu, 0x7528726fu, 0x00003b31u, 0x00060005u, 0x0000000fu, 0x6d697270u, 0x7079745fu, - 0x64695f65u, 0x00000000u, 0x000c0005u, 0x00000019u, 0x616e6962u, 0x735f7972u, 0x63726165u, 0x69745f68u, - 0x7473656du, 0x73706d61u, 0x3b317528u, 0x693b3175u, 0x3b313436u, 0x00000000u, 0x00050005u, 0x00000016u, - 0x65736162u, 0x66666f5fu, 0x00746573u, 0x00040005u, 0x00000017u, 0x6e756f63u, 0x00000074u, 0x00040005u, - 0x00000018u, 0x67726174u, 0x00007465u, 0x000b0005u, 0x00000022u, 0x6c6c7563u, 0x6261615fu, 0x766f5f62u, - 0x616c7265u, 0x66762870u, 0x66763b33u, 0x66763b33u, 0x66763b33u, 0x00003b33u, 0x00040005u, 0x0000001eu, - 0x696d5f61u, 0x0000006eu, 0x00040005u, 0x0000001fu, 0x616d5f61u, 0x00000078u, 0x00040005u, 0x00000020u, - 0x696d5f62u, 0x0000006eu, 0x00040005u, 0x00000021u, 0x616d5f62u, 0x00000078u, 0x00050005u, 0x00000026u, - 0x656d6143u, 0x6f506172u, 0x00006573u, 0x00070006u, 0x00000026u, 0x00000000u, 0x6c726f77u, 0x6f745f64u, - 0x6d61635fu, 0x00617265u, 0x000e0005u, 0x0000002au, 0x5f746567u, 0x656d6163u, 0x775f6172u, 0x646c726fu, - 0x736f705fu, 0x72747328u, 0x2d746375u, 0x656d6143u, 0x6f506172u, 0x6d2d6573u, 0x31343466u, 0x0000003bu, - 0x00040005u, 0x00000029u, 0x65736f70u, 0x00000000u, 0x00060005u, 0x0000002du, 0x65685446u, 0x61436174u, - 0x6172656du, 0x00000000u, 0x00040006u, 0x0000002du, 0x00000000u, 0x00007863u, 0x00040006u, 0x0000002du, - 0x00000001u, 0x00007963u, 0x00050006u, 0x0000002du, 0x00000002u, 0x5f676d69u, 0x00000077u, 0x00050006u, - 0x0000002du, 0x00000003u, 0x5f676d69u, 0x00000068u, 0x00050006u, 0x0000002du, 0x00000004u, 0x796c6f70u, - 0x00000030u, 0x00050006u, 0x0000002du, 0x00000005u, 0x796c6f70u, 0x00000031u, 0x00050006u, 0x0000002du, - 0x00000006u, 0x796c6f70u, 0x00000032u, 0x00050006u, 0x0000002du, 0x00000007u, 0x796c6f70u, 0x00000033u, - 0x00050006u, 0x0000002du, 0x00000008u, 0x796c6f70u, 0x00000034u, 0x00050006u, 0x0000002du, 0x00000009u, - 0x796c6f70u, 0x00000035u, 0x00070006u, 0x0000002du, 0x0000000au, 0x5f78616du, 0x5f796172u, 0x6c676e61u, - 0x00000065u, 0x00080006u, 0x0000002du, 0x0000000bu, 0x5f78616du, 0x74736964u, 0x6974726fu, 0x765f6e6fu, - 0x00006c61u, 0x00080006u, 0x0000002du, 0x0000000cu, 0x5f78616du, 0x74736964u, 0x6974726fu, 0x645f6e6fu, - 0x006c6176u, 0x00060006u, 0x0000002du, 0x0000000du, 0x74706564u, 0x616d5f68u, 0x00000078u, 0x00050006u, - 0x0000002du, 0x0000000eu, 0x635f646cu, 0x00000000u, 0x00050006u, 0x0000002du, 0x0000000fu, 0x645f646cu, - 0x00000000u, 0x00050006u, 0x0000002du, 0x00000010u, 0x655f646cu, 0x00000000u, 0x00050006u, 0x0000002du, - 0x00000011u, 0x665f646cu, 0x00000000u, 0x00220005u, 0x00000034u, 0x69747365u, 0x6574616du, 0x6764655fu, - 0x69645f65u, 0x726f7473u, 0x6e6f6974u, 0x7869705fu, 0x5f736c65u, 0x3474616du, 0x33667628u, 0x3366763bu, - 0x34666d3bu, 0x74733b34u, 0x74637572u, 0x6854462du, 0x43617465u, 0x72656d61u, 0x31662d61u, 0x2d31662du, - 0x662d3166u, 0x31662d31u, 0x2d31662du, 0x662d3166u, 0x31662d31u, 0x2d31662du, 0x662d3166u, 0x31662d31u, - 0x2d31662du, 0x662d3166u, 0x31662d31u, 0x3131662du, 0x0000003bu, 0x00030005u, 0x00000030u, 0x00003076u, - 0x00030005u, 0x00000031u, 0x00003176u, 0x00060005u, 0x00000032u, 0x6c726f77u, 0x6f745f64u, 0x6d61635fu, - 0x00000000u, 0x00030005u, 0x00000033u, 0x006d6163u, 0x00250005u, 0x0000003du, 0x706d6f63u, 0x5f657475u, - 0x64627573u, 0x73697669u, 0x5f6e6f69u, 0x6576656cu, 0x6676286cu, 0x66763b33u, 0x74733b33u, 0x74637572u, - 0x6d61432du, 0x50617265u, 0x2d65736fu, 0x3434666du, 0x74733b31u, 0x74637572u, 0x6854462du, 0x43617465u, - 0x72656d61u, 0x31662d61u, 0x2d31662du, 0x662d3166u, 0x31662d31u, 0x2d31662du, 0x662d3166u, 0x31662d31u, - 0x2d31662du, 0x662d3166u, 0x31662d31u, 0x2d31662du, 0x662d3166u, 0x31662d31u, 0x3131662du, 0x3b31663bu, - 0x00000000u, 0x00030005u, 0x00000038u, 0x00003076u, 0x00030005u, 0x00000039u, 0x00003176u, 0x00040005u, - 0x0000003au, 0x65736f70u, 0x00000000u, 0x00030005u, 0x0000003bu, 0x006d6163u, 0x00070005u, 0x0000003cu, - 0x65726874u, 0x6c6f6873u, 0x69705f64u, 0x736c6578u, 0x00000000u, 0x00060005u, 0x000000dfu, 0x68737550u, - 0x736e6f43u, 0x746e6174u, 0x00000073u, 0x000a0006u, 0x000000dfu, 0x00000000u, 0x69775f75u, 0x5f687464u, - 0x796c6f70u, 0x656e696cu, 0x6765725fu, 0x72616c75u, 0x00000000u, 0x00090006u, 0x000000dfu, 0x00000001u, - 0x69775f75u, 0x5f687464u, 0x796c6f70u, 0x656e696cu, 0x7665625fu, 0x00000000u, 0x000a0006u, 0x000000dfu, - 0x00000002u, 0x69775f75u, 0x5f687464u, 0x5f6f6765u, 0x6a617274u, 0x6765725fu, 0x72616c75u, 0x00000000u, - 0x00090006u, 0x000000dfu, 0x00000003u, 0x69775f75u, 0x5f687464u, 0x5f6f6765u, 0x6a617274u, 0x7665625fu, - 0x00000000u, 0x00080006u, 0x000000dfu, 0x00000004u, 0x69775f75u, 0x5f687464u, 0x65726977u, 0x6d617266u, - 0x00000065u, 0x00080006u, 0x000000dfu, 0x00000005u, 0x65725f75u, 0x756c6f73u, 0x6e6f6974u, 0x6163735fu, - 0x0000656cu, 0x00070006u, 0x000000dfu, 0x00000006u, 0x65645f75u, 0x5f687470u, 0x6c616373u, 0x00676e69u, - 0x00090006u, 0x000000dfu, 0x00000007u, 0x616d5f75u, 0x78655f78u, 0x70617274u, 0x74616c6fu, 0x5f6e6f69u, - 0x00007375u, 0x00090006u, 0x000000dfu, 0x00000008u, 0x6f635f75u, 0x5f726f6cu, 0x656c6170u, 0x5f657474u, - 0x657a6973u, 0x00000000u, 0x00070006u, 0x000000dfu, 0x00000009u, 0x756e5f75u, 0x75715f6du, 0x65697265u, - 0x00000073u, 0x000a0006u, 0x000000dfu, 0x0000000au, 0x65745f75u, 0x6c657373u, 0x6974616cu, 0x745f6e6fu, - 0x73657268u, 0x646c6f68u, 0x00000000u, 0x000a0006u, 0x000000dfu, 0x0000000bu, 0x616d5f75u, 0x65745f78u, - 0x6c657373u, 0x6974616cu, 0x705f6e6fu, 0x6c796c6fu, 0x00656e69u, 0x000a0006u, 0x000000dfu, 0x0000000cu, - 0x616d5f75u, 0x65745f78u, 0x6c657373u, 0x6974616cu, 0x705f6e6fu, 0x67796c6fu, 0x00006e6fu, 0x00090006u, - 0x000000dfu, 0x0000000du, 0x616d5f75u, 0x65745f78u, 0x6c657373u, 0x6974616cu, 0x635f6e6fu, 0x00656275u, - 0x00080006u, 0x000000dfu, 0x0000000eu, 0x75635f75u, 0x725f6c6cu, 0x75696461u, 0x63735f73u, 0x00656c61u, - 0x00070006u, 0x000000dfu, 0x0000000fu, 0x6f665f75u, 0x6e655f67u, 0x656c6261u, 0x00000064u, 0x00070006u, - 0x000000dfu, 0x00000010u, 0x616d5f75u, 0x626f5f78u, 0x63617473u, 0x0073656cu, 0x00080006u, 0x000000dfu, - 0x00000011u, 0x75635f75u, 0x705f6562u, 0x5f6c6f6fu, 0x65646e69u, 0x00000078u, 0x00080006u, 0x000000dfu, - 0x00000012u, 0x756e5f75u, 0x6f705f6du, 0x6f67796cu, 0x6f705f6eu, 0x00736c6fu, 0x00090006u, 0x000000dfu, - 0x00000013u, 0x616d5f75u, 0x61765f78u, 0x79617272u, 0x65705f73u, 0x6f705f72u, 0x00006c6fu, 0x00090006u, - 0x000000dfu, 0x00000014u, 0x756e5f75u, 0x6f705f6du, 0x696c796cu, 0x705f656eu, 0x736c6f6fu, 0x00000000u, - 0x00030005u, 0x000000e1u, 0x00006370u, 0x00060005u, 0x000000f3u, 0x656c6170u, 0x5f657474u, 0x6f6c6f63u, - 0x00000072u, 0x00080005u, 0x000000f5u, 0x6f6c6f43u, 0x6c615072u, 0x65747465u, 0x66667542u, 0x61457265u, - 0x00796c72u, 0x00070006u, 0x000000f5u, 0x00000000u, 0x6f635f67u, 0x5f726f6cu, 0x656c6170u, 0x00657474u, - 0x00030005u, 0x000000f7u, 0x00000000u, 0x00040005u, 0x00000104u, 0x61726170u, 0x0000006du, 0x00040005u, - 0x00000110u, 0x7466656cu, 0x00000000u, 0x00040005u, 0x00000111u, 0x68676972u, 0x00000074u, 0x00040005u, - 0x00000116u, 0x75736572u, 0x0000746cu, 0x00030005u, 0x0000011fu, 0x0064696du, 0x00030005u, 0x00000125u, - 0x006c6176u, 0x00070005u, 0x00000127u, 0x656d6954u, 0x6d617473u, 0x75427370u, 0x72656666u, 0x00000000u, - 0x00070006u, 0x00000127u, 0x00000000u, 0x69745f67u, 0x7473656du, 0x73706d61u, 0x00000000u, 0x00030005u, - 0x00000129u, 0x00000000u, 0x00030005u, 0x0000014fu, 0x00000052u, 0x00040005u, 0x00000169u, 0x5f6d6163u, - 0x00307470u, 0x00040005u, 0x00000172u, 0x5f6d6163u, 0x00317470u, 0x00050005u, 0x0000017bu, 0x5f64696du, - 0x6c726f77u, 0x00000064u, 0x00050005u, 0x00000181u, 0x5f6d6163u, 0x6d5f7470u, 0x00006469u, 0x00040005u, - 0x0000018au, 0x74706564u, 0x00003068u, 0x00040005u, 0x0000018fu, 0x74706564u, 0x00003168u, 0x00050005u, - 0x00000193u, 0x74706564u, 0x696d5f68u, 0x00000064u, 0x00040005u, 0x00000197u, 0x6e5f7978u, 0x006d726fu, - 0x00050005u, 0x0000019cu, 0x5f796172u, 0x6d726f6eu, 0x00000000u, 0x00050005u, 0x000001a6u, 0x5f736f63u, - 0x68706c61u, 0x00000061u, 0x00040005u, 0x000001acu, 0x68706c61u, 0x00000061u, 0x00030005u, 0x000001afu, - 0x00003261u, 0x00040005u, 0x000001b3u, 0x746c6564u, 0x00000061u, 0x00040005u, 0x000001efu, 0x6c616373u, - 0x00000065u, 0x00050005u, 0x000001fcu, 0x65786970u, 0x65725f6cu, 0x0000006cu, 0x00050005u, 0x00000201u, - 0x65786970u, 0x69645f6cu, 0x00007473u, 0x00040005u, 0x0000021du, 0x65786970u, 0x0000306cu, 0x00040005u, - 0x00000225u, 0x6e5f7978u, 0x006d726fu, 0x00050005u, 0x00000229u, 0x5f796172u, 0x6d726f6eu, 0x00000000u, - 0x00050005u, 0x00000232u, 0x5f736f63u, 0x68706c61u, 0x00000061u, 0x00040005u, 0x00000237u, 0x68706c61u, - 0x00000061u, 0x00030005u, 0x0000023au, 0x00003261u, 0x00040005u, 0x0000023eu, 0x746c6564u, 0x00000061u, - 0x00040005u, 0x00000272u, 0x6c616373u, 0x00000065u, 0x00050005u, 0x0000027du, 0x65786970u, 0x65725f6cu, - 0x0000006cu, 0x00050005u, 0x00000282u, 0x65786970u, 0x69645f6cu, 0x00007473u, 0x00040005u, 0x0000029au, - 0x65786970u, 0x0000316cu, 0x00040005u, 0x000002a2u, 0x6e5f7978u, 0x006d726fu, 0x00050005u, 0x000002a6u, - 0x5f796172u, 0x6d726f6eu, 0x00000000u, 0x00050005u, 0x000002afu, 0x5f736f63u, 0x68706c61u, 0x00000061u, - 0x00040005u, 0x000002b4u, 0x68706c61u, 0x00000061u, 0x00030005u, 0x000002b7u, 0x00003261u, 0x00040005u, - 0x000002bbu, 0x746c6564u, 0x00000061u, 0x00040005u, 0x000002efu, 0x6c616373u, 0x00000065u, 0x00050005u, - 0x000002fau, 0x65786970u, 0x65725f6cu, 0x0000006cu, 0x00050005u, 0x000002ffu, 0x65786970u, 0x69645f6cu, - 0x00007473u, 0x00050005u, 0x00000317u, 0x65786970u, 0x696d5f6cu, 0x00000064u, 0x00070005u, 0x0000031fu, - 0x656e696cu, 0x705f7261u, 0x6c657869u, 0x64696d5fu, 0x00000000u, 0x00060005u, 0x00000324u, 0x6f727265u, - 0x69705f72u, 0x736c6578u, 0x00000000u, 0x00040005u, 0x0000032eu, 0x6f727265u, 0x00000072u, 0x00040005u, - 0x0000032fu, 0x61726170u, 0x0000006du, 0x00040005u, 0x00000331u, 0x61726170u, 0x0000006du, 0x00040005u, - 0x00000333u, 0x61726170u, 0x0000006du, 0x00040005u, 0x00000336u, 0x61726170u, 0x0000006du, 0x00050005u, - 0x00000351u, 0x7361745fu, 0x6f635f6bu, 0x00746e75u, 0x00040005u, 0x00000352u, 0x6b726f77u, 0x0064695fu, - 0x00060005u, 0x00000355u, 0x575f6c67u, 0x476b726fu, 0x70756f72u, 0x00004449u, 0x00060005u, 0x00000359u, - 0x72726176u, 0x6f5f7961u, 0x65736666u, 0x00000074u, 0x00040005u, 0x00000360u, 0x706d6574u, 0x00000000u, - 0x00060005u, 0x00000365u, 0x6c6f6f70u, 0x5f64695fu, 0x61636f6cu, 0x0000006cu, 0x00060005u, 0x0000036bu, - 0x72657571u, 0x64695f79u, 0x636f6c5fu, 0x00006c61u, 0x00050005u, 0x00000379u, 0x646e6552u, 0x75517265u, - 0x00797265u, 0x00060006u, 0x00000379u, 0x00000000u, 0x6e656373u, 0x64695f65u, 0x00000000u, 0x00060006u, - 0x00000379u, 0x00000001u, 0x656d6163u, 0x695f6172u, 0x00000064u, 0x00070006u, 0x00000379u, 0x00000002u, - 0x656d6974u, 0x6d617473u, 0x73755f70u, 0x00000000u, 0x00070006u, 0x00000379u, 0x00000003u, 0x656d6163u, - 0x745f6172u, 0x5f657079u, 0x00006469u, 0x00050006u, 0x00000379u, 0x00000004u, 0x6461705fu, 0x00000031u, - 0x00050006u, 0x00000379u, 0x00000005u, 0x6461705fu, 0x00000032u, 0x00050006u, 0x00000379u, 0x00000006u, - 0x6461705fu, 0x00000033u, 0x00040005u, 0x0000037bu, 0x72657571u, 0x00000079u, 0x00050005u, 0x0000037cu, - 0x646e6552u, 0x75517265u, 0x00797265u, 0x00060006u, 0x0000037cu, 0x00000000u, 0x6e656373u, 0x64695f65u, - 0x00000000u, 0x00060006u, 0x0000037cu, 0x00000001u, 0x656d6163u, 0x695f6172u, 0x00000064u, 0x00070006u, - 0x0000037cu, 0x00000002u, 0x656d6974u, 0x6d617473u, 0x73755f70u, 0x00000000u, 0x00070006u, 0x0000037cu, - 0x00000003u, 0x656d6163u, 0x745f6172u, 0x5f657079u, 0x00006469u, 0x00050006u, 0x0000037cu, 0x00000004u, - 0x6461705fu, 0x00000031u, 0x00050006u, 0x0000037cu, 0x00000005u, 0x6461705fu, 0x00000032u, 0x00050006u, - 0x0000037cu, 0x00000006u, 0x6461705fu, 0x00000033u, 0x00050005u, 0x0000037eu, 0x72657551u, 0x66754279u, - 0x00726566u, 0x00060006u, 0x0000037eu, 0x00000000u, 0x75715f67u, 0x65697265u, 0x00000073u, 0x00030005u, - 0x00000380u, 0x00000000u, 0x00070005u, 0x00000387u, 0x656d6954u, 0x6d617473u, 0x53646570u, 0x656e6563u, - 0x00000000u, 0x00080006u, 0x00000387u, 0x00000000u, 0x5f6d756eu, 0x796c6f70u, 0x656e696cu, 0x6f6f705fu, - 0x0000736cu, 0x00090006u, 0x00000387u, 0x00000001u, 0x796c6f70u, 0x656e696cu, 0x6f6f705fu, 0x6f5f736cu, - 0x65736666u, 0x00000074u, 0x00080006u, 0x00000387u, 0x00000002u, 0x5f6d756eu, 0x796c6f70u, 0x5f6e6f67u, - 0x6c6f6f70u, 0x00000073u, 0x00090006u, 0x00000387u, 0x00000003u, 0x796c6f70u, 0x5f6e6f67u, 0x6c6f6f70u, - 0x666f5f73u, 0x74657366u, 0x00000000u, 0x00070006u, 0x00000387u, 0x00000004u, 0x5f6d756eu, 0x65627563u, - 0x6f6f705fu, 0x0000736cu, 0x00080006u, 0x00000387u, 0x00000005u, 0x65627563u, 0x6f6f705fu, 0x6f5f736cu, - 0x65736666u, 0x00000074u, 0x000a0006u, 0x00000387u, 0x00000006u, 0x656d6974u, 0x6d617473u, 0x625f7370u, - 0x65666675u, 0x666f5f72u, 0x74657366u, 0x00000000u, 0x00080006u, 0x00000387u, 0x00000007u, 0x33746e69u, - 0x75625f32u, 0x72656666u, 0x66666f5fu, 0x00746573u, 0x00090006u, 0x00000387u, 0x00000008u, 0x74726576u, - 0x625f7865u, 0x65666675u, 0x666f5f72u, 0x74657366u, 0x00000000u, 0x00090006u, 0x00000387u, 0x00000009u, - 0x61697274u, 0x656c676eu, 0x6675625fu, 0x5f726566u, 0x7366666fu, 0x00007465u, 0x00080006u, 0x00000387u, - 0x0000000au, 0x65736f70u, 0x6675625fu, 0x5f726566u, 0x7366666fu, 0x00007465u, 0x00080006u, 0x00000387u, - 0x0000000bu, 0x616f6c66u, 0x75625f74u, 0x72656666u, 0x66666f5fu, 0x00746573u, 0x00050006u, 0x00000387u, - 0x0000000cu, 0x6461705fu, 0x00000000u, 0x00040005u, 0x00000389u, 0x6e656373u, 0x00000065u, 0x00070005u, - 0x0000038bu, 0x656d6954u, 0x6d617473u, 0x53646570u, 0x656e6563u, 0x00000000u, 0x00080006u, 0x0000038bu, - 0x00000000u, 0x5f6d756eu, 0x796c6f70u, 0x656e696cu, 0x6f6f705fu, 0x0000736cu, 0x00090006u, 0x0000038bu, - 0x00000001u, 0x796c6f70u, 0x656e696cu, 0x6f6f705fu, 0x6f5f736cu, 0x65736666u, 0x00000074u, 0x00080006u, - 0x0000038bu, 0x00000002u, 0x5f6d756eu, 0x796c6f70u, 0x5f6e6f67u, 0x6c6f6f70u, 0x00000073u, 0x00090006u, - 0x0000038bu, 0x00000003u, 0x796c6f70u, 0x5f6e6f67u, 0x6c6f6f70u, 0x666f5f73u, 0x74657366u, 0x00000000u, - 0x00070006u, 0x0000038bu, 0x00000004u, 0x5f6d756eu, 0x65627563u, 0x6f6f705fu, 0x0000736cu, 0x00080006u, - 0x0000038bu, 0x00000005u, 0x65627563u, 0x6f6f705fu, 0x6f5f736cu, 0x65736666u, 0x00000074u, 0x000a0006u, - 0x0000038bu, 0x00000006u, 0x656d6974u, 0x6d617473u, 0x625f7370u, 0x65666675u, 0x666f5f72u, 0x74657366u, - 0x00000000u, 0x00080006u, 0x0000038bu, 0x00000007u, 0x33746e69u, 0x75625f32u, 0x72656666u, 0x66666f5fu, - 0x00746573u, 0x00090006u, 0x0000038bu, 0x00000008u, 0x74726576u, 0x625f7865u, 0x65666675u, 0x666f5f72u, - 0x74657366u, 0x00000000u, 0x00090006u, 0x0000038bu, 0x00000009u, 0x61697274u, 0x656c676eu, 0x6675625fu, - 0x5f726566u, 0x7366666fu, 0x00007465u, 0x00080006u, 0x0000038bu, 0x0000000au, 0x65736f70u, 0x6675625fu, - 0x5f726566u, 0x7366666fu, 0x00007465u, 0x00080006u, 0x0000038bu, 0x0000000bu, 0x616f6c66u, 0x75625f74u, - 0x72656666u, 0x66666f5fu, 0x00746573u, 0x00050006u, 0x0000038bu, 0x0000000cu, 0x6461705fu, 0x00000000u, - 0x00050005u, 0x0000038du, 0x6e656353u, 0x66754265u, 0x00726566u, 0x00060006u, 0x0000038du, 0x00000000u, - 0x63735f67u, 0x73656e65u, 0x00000000u, 0x00030005u, 0x0000038fu, 0x00000000u, 0x00080005u, 0x0000039fu, - 0x656d6954u, 0x6d617473u, 0x50646570u, 0x67796c6fu, 0x6f506e6fu, 0x00006c6fu, 0x00070006u, 0x0000039fu, - 0x00000000u, 0x5f6d756eu, 0x656d6974u, 0x6d617473u, 0x00007370u, 0x00060006u, 0x0000039fu, 0x00000001u, - 0x5f6d756eu, 0x72726176u, 0x00737961u, 0x00070006u, 0x0000039fu, 0x00000002u, 0x5f6d756eu, 0x74726576u, - 0x73656369u, 0x00000000u, 0x00070006u, 0x0000039fu, 0x00000003u, 0x5f6d756eu, 0x61697274u, 0x656c676eu, - 0x00000073u, 0x00070006u, 0x0000039fu, 0x00000004u, 0x6d697270u, 0x7079745fu, 0x64695f65u, 0x00000000u, - 0x00080006u, 0x0000039fu, 0x00000005u, 0x656d6974u, 0x6d617473u, 0x6f5f7370u, 0x65736666u, 0x00000074u, - 0x00090006u, 0x0000039fu, 0x00000006u, 0x765f7374u, 0x61727261u, 0x705f7379u, 0x666f5f73u, 0x74657366u, - 0x00000000u, 0x00080006u, 0x0000039fu, 0x00000007u, 0x72726176u, 0x5f737961u, 0x6f5f7370u, 0x65736666u, - 0x00000074u, 0x00070006u, 0x0000039fu, 0x00000008u, 0x5f697274u, 0x6f5f7370u, 0x65736666u, 0x00000074u, - 0x00070006u, 0x0000039fu, 0x00000009u, 0x74726576u, 0x73656369u, 0x66666f5fu, 0x00746573u, 0x00080006u, - 0x0000039fu, 0x0000000au, 0x61697274u, 0x656c676eu, 0x666f5f73u, 0x74657366u, 0x00000000u, 0x00060006u, - 0x0000039fu, 0x0000000bu, 0x62626161u, 0x66666f5fu, 0x00746573u, 0x00050006u, 0x0000039fu, 0x0000000cu, - 0x6461705fu, 0x00000031u, 0x00050006u, 0x0000039fu, 0x0000000du, 0x6461705fu, 0x00000032u, 0x00050006u, - 0x0000039fu, 0x0000000eu, 0x6461705fu, 0x00000033u, 0x00050006u, 0x0000039fu, 0x0000000fu, 0x6461705fu, - 0x00000034u, 0x00040005u, 0x000003a1u, 0x6c6f6f70u, 0x00000000u, 0x00080005u, 0x000003a2u, 0x656d6954u, - 0x6d617473u, 0x50646570u, 0x67796c6fu, 0x6f506e6fu, 0x00006c6fu, 0x00070006u, 0x000003a2u, 0x00000000u, - 0x5f6d756eu, 0x656d6974u, 0x6d617473u, 0x00007370u, 0x00060006u, 0x000003a2u, 0x00000001u, 0x5f6d756eu, - 0x72726176u, 0x00737961u, 0x00070006u, 0x000003a2u, 0x00000002u, 0x5f6d756eu, 0x74726576u, 0x73656369u, - 0x00000000u, 0x00070006u, 0x000003a2u, 0x00000003u, 0x5f6d756eu, 0x61697274u, 0x656c676eu, 0x00000073u, - 0x00070006u, 0x000003a2u, 0x00000004u, 0x6d697270u, 0x7079745fu, 0x64695f65u, 0x00000000u, 0x00080006u, - 0x000003a2u, 0x00000005u, 0x656d6974u, 0x6d617473u, 0x6f5f7370u, 0x65736666u, 0x00000074u, 0x00090006u, - 0x000003a2u, 0x00000006u, 0x765f7374u, 0x61727261u, 0x705f7379u, 0x666f5f73u, 0x74657366u, 0x00000000u, - 0x00080006u, 0x000003a2u, 0x00000007u, 0x72726176u, 0x5f737961u, 0x6f5f7370u, 0x65736666u, 0x00000074u, - 0x00070006u, 0x000003a2u, 0x00000008u, 0x5f697274u, 0x6f5f7370u, 0x65736666u, 0x00000074u, 0x00070006u, - 0x000003a2u, 0x00000009u, 0x74726576u, 0x73656369u, 0x66666f5fu, 0x00746573u, 0x00080006u, 0x000003a2u, - 0x0000000au, 0x61697274u, 0x656c676eu, 0x666f5f73u, 0x74657366u, 0x00000000u, 0x00060006u, 0x000003a2u, - 0x0000000bu, 0x62626161u, 0x66666f5fu, 0x00746573u, 0x00050006u, 0x000003a2u, 0x0000000cu, 0x6461705fu, - 0x00000031u, 0x00050006u, 0x000003a2u, 0x0000000du, 0x6461705fu, 0x00000032u, 0x00050006u, 0x000003a2u, - 0x0000000eu, 0x6461705fu, 0x00000033u, 0x00050006u, 0x000003a2u, 0x0000000fu, 0x6461705fu, 0x00000034u, - 0x00070005u, 0x000003a4u, 0x796c6f50u, 0x506e6f67u, 0x426c6f6fu, 0x65666675u, 0x00000072u, 0x00070006u, - 0x000003a4u, 0x00000000u, 0x6f705f67u, 0x6f67796cu, 0x6f705f6eu, 0x00736c6fu, 0x00030005u, 0x000003a6u, - 0x00000000u, 0x00040005u, 0x000003afu, 0x695f7374u, 0x00007864u, 0x00040005u, 0x000003b5u, 0x61726170u, - 0x0000006du, 0x00040005u, 0x000003b6u, 0x61726170u, 0x0000006du, 0x00040005u, 0x000003b9u, 0x61726170u, - 0x0000006du, 0x00060005u, 0x000003c4u, 0x72726176u, 0x735f7961u, 0x74726174u, 0x00000000u, 0x00050005u, - 0x000003cau, 0x33746e49u, 0x66754232u, 0x00726566u, 0x00050006u, 0x000003cau, 0x00000000u, 0x6e695f67u, - 0x00323374u, 0x00030005u, 0x000003ccu, 0x00000000u, 0x00050005u, 0x000003dau, 0x72726176u, 0x655f7961u, - 0x0000646eu, 0x00050005u, 0x000003e6u, 0x5f6d756eu, 0x72726176u, 0x00737961u, 0x00070005u, 0x000003ebu, - 0x63726f66u, 0x657a5f65u, 0x745f6f72u, 0x736b7361u, 0x00000000u, 0x00070005u, 0x000003f3u, 0x75746361u, - 0x765f6c61u, 0x61727261u, 0x64695f79u, 0x00000078u, 0x00040005u, 0x00000403u, 0x6c6c7563u, 0x0000725fu, - 0x00060005u, 0x00000404u, 0x65685446u, 0x61436174u, 0x6172656du, 0x00000000u, 0x00040006u, 0x00000404u, - 0x00000000u, 0x00007863u, 0x00040006u, 0x00000404u, 0x00000001u, 0x00007963u, 0x00050006u, 0x00000404u, - 0x00000002u, 0x5f676d69u, 0x00000077u, 0x00050006u, 0x00000404u, 0x00000003u, 0x5f676d69u, 0x00000068u, - 0x00050006u, 0x00000404u, 0x00000004u, 0x796c6f70u, 0x00000030u, 0x00050006u, 0x00000404u, 0x00000005u, - 0x796c6f70u, 0x00000031u, 0x00050006u, 0x00000404u, 0x00000006u, 0x796c6f70u, 0x00000032u, 0x00050006u, - 0x00000404u, 0x00000007u, 0x796c6f70u, 0x00000033u, 0x00050006u, 0x00000404u, 0x00000008u, 0x796c6f70u, - 0x00000034u, 0x00050006u, 0x00000404u, 0x00000009u, 0x796c6f70u, 0x00000035u, 0x00070006u, 0x00000404u, - 0x0000000au, 0x5f78616du, 0x5f796172u, 0x6c676e61u, 0x00000065u, 0x00080006u, 0x00000404u, 0x0000000bu, - 0x5f78616du, 0x74736964u, 0x6974726fu, 0x765f6e6fu, 0x00006c61u, 0x00080006u, 0x00000404u, 0x0000000cu, - 0x5f78616du, 0x74736964u, 0x6974726fu, 0x645f6e6fu, 0x006c6176u, 0x00060006u, 0x00000404u, 0x0000000du, - 0x74706564u, 0x616d5f68u, 0x00000078u, 0x00050006u, 0x00000404u, 0x0000000eu, 0x635f646cu, 0x00000000u, - 0x00050006u, 0x00000404u, 0x0000000fu, 0x645f646cu, 0x00000000u, 0x00050006u, 0x00000404u, 0x00000010u, - 0x655f646cu, 0x00000000u, 0x00050006u, 0x00000404u, 0x00000011u, 0x665f646cu, 0x00000000u, 0x00080005u, - 0x00000406u, 0x656d6143u, 0x6e496172u, 0x6e697274u, 0x73636973u, 0x66667542u, 0x00007265u, 0x00080006u, - 0x00000406u, 0x00000000u, 0x61635f67u, 0x6172656du, 0x746e695fu, 0x736e6972u, 0x00736369u, 0x00030005u, - 0x00000408u, 0x00000000u, 0x00050005u, 0x00000412u, 0x6c6c7563u, 0x736f705fu, 0x00000065u, 0x00050005u, - 0x00000413u, 0x656d6143u, 0x6f506172u, 0x00006573u, 0x00070006u, 0x00000413u, 0x00000000u, 0x6c726f77u, - 0x6f745f64u, 0x6d61635fu, 0x00617265u, 0x00070005u, 0x00000415u, 0x656d6143u, 0x6f506172u, 0x75426573u, - 0x72656666u, 0x00000000u, 0x00070006u, 0x00000415u, 0x00000000u, 0x61635f67u, 0x6172656du, 0x736f705fu, - 0x00007365u, 0x00030005u, 0x00000417u, 0x00000000u, 0x00040005u, 0x0000041du, 0x5f6d6163u, 0x00736f70u, - 0x00040005u, 0x0000041eu, 0x61726170u, 0x0000006du, 0x00050005u, 0x00000421u, 0x77656976u, 0x6e696d5fu, - 0x00000000u, 0x00050005u, 0x00000426u, 0x77656976u, 0x78616d5fu, 0x00000000u, 0x00030005u, 0x0000042bu, - 0x00006261u, 0x00040005u, 0x00000435u, 0x696d5f65u, 0x0000006eu, 0x00050005u, 0x00000437u, 0x616f6c46u, - 0x66754274u, 0x00726566u, 0x00060006u, 0x00000437u, 0x00000000u, 0x6c665f67u, 0x7374616fu, 0x00000000u, - 0x00030005u, 0x00000439u, 0x00000000u, 0x00040005u, 0x00000446u, 0x616d5f65u, 0x00000078u, 0x00040005u, - 0x00000455u, 0x61726170u, 0x0000006du, 0x00040005u, 0x00000457u, 0x61726170u, 0x0000006du, 0x00040005u, - 0x00000459u, 0x61726170u, 0x0000006du, 0x00040005u, 0x0000045bu, 0x61726170u, 0x0000006du, 0x00050005u, - 0x00000461u, 0x5f697274u, 0x72617473u, 0x00000074u, 0x00040005u, 0x00000471u, 0x5f697274u, 0x00646e65u, - 0x00050005u, 0x0000047cu, 0x61746f74u, 0x72745f6cu, 0x00007369u, 0x00040005u, 0x00000484u, 0x74735f76u, - 0x00747261u, 0x00040005u, 0x00000494u, 0x6e655f76u, 0x00000064u, 0x00050005u, 0x0000049fu, 0x61746f74u, - 0x65765f6cu, 0x00737472u, 0x00030005u, 0x000004a3u, 0x006d6163u, 0x00040005u, 0x000004aau, 0x65736f70u, - 0x00000000u, 0x00050005u, 0x000004afu, 0x5f78616du, 0x64627573u, 0x00007669u, 0x00050005u, 0x000004b5u, - 0x65736162u, 0x695f765fu, 0x00007864u, 0x00050005u, 0x000004bdu, 0x65736162u, 0x695f745fu, 0x00007864u, - 0x00060005u, 0x000004c5u, 0x706d6173u, 0x635f656cu, 0x746e756fu, 0x00000000u, 0x00030005u, 0x000004c8u, - 0x00000074u, 0x00030005u, 0x000004d2u, 0x00697274u, 0x00060005u, 0x000004d4u, 0x61697254u, 0x656c676eu, - 0x66667542u, 0x00007265u, 0x00060006u, 0x000004d4u, 0x00000000u, 0x72745f67u, 0x676e6169u, 0x0073656cu, - 0x00030005u, 0x000004d6u, 0x00000000u, 0x00040005u, 0x000004ddu, 0x74726556u, 0x00007865u, 0x00040006u, - 0x000004ddu, 0x00000000u, 0x00000078u, 0x00040006u, 0x000004ddu, 0x00000001u, 0x00000079u, 0x00040006u, - 0x000004ddu, 0x00000002u, 0x0000007au, 0x00050006u, 0x000004ddu, 0x00000003u, 0x6461705fu, 0x00000000u, - 0x00030005u, 0x000004dfu, 0x00003076u, 0x00040005u, 0x000004e0u, 0x74726556u, 0x00007865u, 0x00040006u, - 0x000004e0u, 0x00000000u, 0x00000078u, 0x00040006u, 0x000004e0u, 0x00000001u, 0x00000079u, 0x00040006u, - 0x000004e0u, 0x00000002u, 0x0000007au, 0x00050006u, 0x000004e0u, 0x00000003u, 0x6461705fu, 0x00000000u, - 0x00060005u, 0x000004e2u, 0x74726556u, 0x75427865u, 0x72656666u, 0x00000000u, 0x00060006u, 0x000004e2u, - 0x00000000u, 0x65765f67u, 0x63697472u, 0x00007365u, 0x00030005u, 0x000004e4u, 0x00000000u, 0x00030005u, - 0x000004edu, 0x00003176u, 0x00030005u, 0x000004f5u, 0x00003276u, 0x00030005u, 0x000004fdu, 0x00003070u, - 0x00030005u, 0x00000505u, 0x00003170u, 0x00030005u, 0x0000050du, 0x00003270u, 0x00040005u, 0x00000516u, - 0x61726170u, 0x0000006du, 0x00040005u, 0x00000518u, 0x61726170u, 0x0000006du, 0x00040005u, 0x0000051au, - 0x61726170u, 0x0000006du, 0x00040005u, 0x0000051cu, 0x61726170u, 0x0000006du, 0x00040005u, 0x0000051eu, - 0x61726170u, 0x0000006du, 0x00040005u, 0x00000524u, 0x61726170u, 0x0000006du, 0x00040005u, 0x00000526u, - 0x61726170u, 0x0000006du, 0x00040005u, 0x00000528u, 0x61726170u, 0x0000006du, 0x00040005u, 0x0000052au, - 0x61726170u, 0x0000006du, 0x00040005u, 0x0000052cu, 0x61726170u, 0x0000006du, 0x00040005u, 0x00000532u, - 0x61726170u, 0x0000006du, 0x00040005u, 0x00000534u, 0x61726170u, 0x0000006du, 0x00040005u, 0x00000536u, - 0x61726170u, 0x0000006du, 0x00040005u, 0x00000538u, 0x61726170u, 0x0000006du, 0x00040005u, 0x0000053au, - 0x61726170u, 0x0000006du, 0x00050005u, 0x0000054bu, 0x5f6d756eu, 0x6e756863u, 0x0000736bu, 0x00060005u, - 0x00000551u, 0x73697274u, 0x7265705fu, 0x7568635fu, 0x00006b6eu, 0x00070005u, 0x00000568u, 0x796c6f50u, - 0x546e6f67u, 0x506b7361u, 0x6f6c7961u, 0x00006461u, 0x00060006u, 0x00000568u, 0x00000000u, 0x72657571u, - 0x64695f79u, 0x00000000u, 0x00050006u, 0x00000568u, 0x00000001u, 0x6c6f6f70u, 0x0064695fu, 0x00060006u, - 0x00000568u, 0x00000002u, 0x72726176u, 0x695f7961u, 0x00007864u, 0x00070006u, 0x00000568u, 0x00000003u, - 0x61697274u, 0x656c676eu, 0x756f635fu, 0x0000746eu, 0x00070006u, 0x00000568u, 0x00000004u, 0x74726576u, - 0x635f7865u, 0x746e756fu, 0x00000000u, 0x00080006u, 0x00000568u, 0x00000005u, 0x64627573u, 0x73697669u, - 0x5f6e6f69u, 0x6576656cu, 0x0000006cu, 0x00050006u, 0x00000568u, 0x00000006u, 0x6f6c6f63u, 0x00000072u, - 0x00050006u, 0x00000568u, 0x00000007u, 0x625f7369u, 0x00007665u, 0x00040005u, 0x0000056au, 0x6c796170u, - 0x0064616fu, 0x00040005u, 0x00000578u, 0x61726170u, 0x0000006du, 0x00050005u, 0x0000058bu, 0x65736f50u, - 0x66667542u, 0x00007265u, 0x00050006u, 0x0000058bu, 0x00000000u, 0x6f705f67u, 0x00736573u, 0x00030005u, - 0x0000058du, 0x00000000u, 0x00080005u, 0x0000058eu, 0x656d6954u, 0x6d617473u, 0x50646570u, 0x6c796c6fu, - 0x50656e69u, 0x006c6f6fu, 0x00070006u, 0x0000058eu, 0x00000000u, 0x5f6d756eu, 0x656d6974u, 0x6d617473u, - 0x00007370u, 0x00060006u, 0x0000058eu, 0x00000001u, 0x5f6d756eu, 0x72726176u, 0x00737961u, 0x00070006u, - 0x0000058eu, 0x00000002u, 0x5f6d756eu, 0x74726576u, 0x73656369u, 0x00000000u, 0x00070006u, 0x0000058eu, - 0x00000003u, 0x6d697270u, 0x7079745fu, 0x64695f65u, 0x00000000u, 0x00080006u, 0x0000058eu, 0x00000004u, - 0x656d6974u, 0x6d617473u, 0x6f5f7370u, 0x65736666u, 0x00000074u, 0x00090006u, 0x0000058eu, 0x00000005u, - 0x765f7374u, 0x61727261u, 0x705f7379u, 0x666f5f73u, 0x74657366u, 0x00000000u, 0x00080006u, 0x0000058eu, - 0x00000006u, 0x72726176u, 0x5f737961u, 0x6f5f7370u, 0x65736666u, 0x00000074u, 0x00070006u, 0x0000058eu, - 0x00000007u, 0x74726576u, 0x73656369u, 0x66666f5fu, 0x00746573u, 0x00060006u, 0x0000058eu, 0x00000008u, - 0x62626161u, 0x66666f5fu, 0x00746573u, 0x00050006u, 0x0000058eu, 0x00000009u, 0x6461705fu, 0x00000031u, - 0x00050006u, 0x0000058eu, 0x0000000au, 0x6461705fu, 0x00000032u, 0x00050006u, 0x0000058eu, 0x0000000bu, - 0x6461705fu, 0x00000033u, 0x00050006u, 0x0000058eu, 0x0000000cu, 0x6461705fu, 0x00000034u, 0x00050006u, - 0x0000058eu, 0x0000000du, 0x6461705fu, 0x00000035u, 0x00050006u, 0x0000058eu, 0x0000000eu, 0x6461705fu, - 0x00000036u, 0x00050006u, 0x0000058eu, 0x0000000fu, 0x6461705fu, 0x00000037u, 0x00070005u, 0x00000590u, - 0x796c6f50u, 0x656e696cu, 0x6c6f6f50u, 0x66667542u, 0x00007265u, 0x00080006u, 0x00000590u, 0x00000000u, - 0x6f705f67u, 0x696c796cu, 0x705f656eu, 0x736c6f6fu, 0x00000000u, 0x00030005u, 0x00000592u, 0x00000000u, - 0x00060005u, 0x00000593u, 0x7473624fu, 0x656c6361u, 0x6c6f6f50u, 0x00000000u, 0x00060006u, 0x00000593u, - 0x00000000u, 0x5f6d756eu, 0x65627563u, 0x00000073u, 0x00070006u, 0x00000593u, 0x00000001u, 0x5f6d756eu, - 0x656d6974u, 0x6d617473u, 0x00007370u, 0x00070006u, 0x00000593u, 0x00000002u, 0x5f6d756eu, 0x63617274u, - 0x6f705f6bu, 0x00736573u, 0x00070006u, 0x00000593u, 0x00000003u, 0x6d697270u, 0x7079745fu, 0x64695f65u, - 0x00000000u, 0x00080006u, 0x00000593u, 0x00000004u, 0x656d6974u, 0x6d617473u, 0x6f5f7370u, 0x65736666u, - 0x00000074u, 0x00080006u, 0x00000593u, 0x00000005u, 0x65627563u, 0x5f73745fu, 0x6f5f7370u, 0x65736666u, - 0x00000074u, 0x00090006u, 0x00000593u, 0x00000006u, 0x63617274u, 0x69745f6bu, 0x7473656du, 0x73706d61u, - 0x66666f5fu, 0x00746573u, 0x00080006u, 0x00000593u, 0x00000007u, 0x6e617274u, 0x74616c73u, 0x736e6f69u, - 0x66666f5fu, 0x00746573u, 0x00080006u, 0x00000593u, 0x00000008u, 0x74617571u, 0x696e7265u, 0x5f736e6fu, - 0x7366666fu, 0x00007465u, 0x00070006u, 0x00000593u, 0x00000009u, 0x6c616373u, 0x6f5f7365u, 0x65736666u, - 0x00000074u, 0x00070006u, 0x00000593u, 0x0000000au, 0x6f6c6f63u, 0x6f5f7372u, 0x65736666u, 0x00000074u, - 0x00070006u, 0x00000593u, 0x0000000bu, 0x646e6572u, 0x665f7265u, 0x7367616cu, 0x00000000u, 0x00050006u, - 0x00000593u, 0x0000000cu, 0x6461705fu, 0x00000032u, 0x00050006u, 0x00000593u, 0x0000000du, 0x6461705fu, - 0x00000033u, 0x00050006u, 0x00000593u, 0x0000000eu, 0x6461705fu, 0x00000034u, 0x00050006u, 0x00000593u, - 0x0000000fu, 0x6461705fu, 0x00000035u, 0x00070005u, 0x00000595u, 0x7473624fu, 0x656c6361u, 0x6c6f6f50u, - 0x66667542u, 0x00007265u, 0x00080006u, 0x00000595u, 0x00000000u, 0x626f5f67u, 0x63617473u, 0x705f656cu, - 0x736c6f6fu, 0x00000000u, 0x00030005u, 0x00000597u, 0x00000000u, 0x00030047u, 0x000000dfu, 0x00000002u, - 0x00050048u, 0x000000dfu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000000dfu, 0x00000001u, - 0x00000023u, 0x00000004u, 0x00050048u, 0x000000dfu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, - 0x000000dfu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x000000dfu, 0x00000004u, 0x00000023u, - 0x00000010u, 0x00050048u, 0x000000dfu, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x000000dfu, - 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x000000dfu, 0x00000007u, 0x00000023u, 0x0000001cu, - 0x00050048u, 0x000000dfu, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x000000dfu, 0x00000009u, - 0x00000023u, 0x00000024u, 0x00050048u, 0x000000dfu, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, - 0x000000dfu, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x000000dfu, 0x0000000cu, 0x00000023u, - 0x00000030u, 0x00050048u, 0x000000dfu, 0x0000000du, 0x00000023u, 0x00000034u, 0x00050048u, 0x000000dfu, - 0x0000000eu, 0x00000023u, 0x00000038u, 0x00050048u, 0x000000dfu, 0x0000000fu, 0x00000023u, 0x0000003cu, - 0x00050048u, 0x000000dfu, 0x00000010u, 0x00000023u, 0x00000040u, 0x00050048u, 0x000000dfu, 0x00000011u, - 0x00000023u, 0x00000044u, 0x00050048u, 0x000000dfu, 0x00000012u, 0x00000023u, 0x00000048u, 0x00050048u, - 0x000000dfu, 0x00000013u, 0x00000023u, 0x0000004cu, 0x00050048u, 0x000000dfu, 0x00000014u, 0x00000023u, - 0x00000050u, 0x00040047u, 0x000000f4u, 0x00000006u, 0x00000010u, 0x00030047u, 0x000000f5u, 0x00000002u, - 0x00040048u, 0x000000f5u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000000f5u, 0x00000000u, 0x00000023u, - 0x00000000u, 0x00030047u, 0x000000f7u, 0x00000018u, 0x00040047u, 0x000000f7u, 0x00000021u, 0x0000000au, - 0x00040047u, 0x000000f7u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000126u, 0x00000006u, 0x00000008u, - 0x00030047u, 0x00000127u, 0x00000002u, 0x00040048u, 0x00000127u, 0x00000000u, 0x00000018u, 0x00050048u, - 0x00000127u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000129u, 0x00000018u, 0x00040047u, - 0x00000129u, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000129u, 0x00000022u, 0x00000000u, 0x00040047u, - 0x00000355u, 0x0000000bu, 0x0000001au, 0x00050048u, 0x0000037cu, 0x00000000u, 0x00000023u, 0x00000000u, - 0x00050048u, 0x0000037cu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000037cu, 0x00000002u, - 0x00000023u, 0x00000008u, 0x00050048u, 0x0000037cu, 0x00000003u, 0x00000023u, 0x00000010u, 0x00050048u, - 0x0000037cu, 0x00000004u, 0x00000023u, 0x00000014u, 0x00050048u, 0x0000037cu, 0x00000005u, 0x00000023u, - 0x00000018u, 0x00050048u, 0x0000037cu, 0x00000006u, 0x00000023u, 0x0000001cu, 0x00040047u, 0x0000037du, - 0x00000006u, 0x00000020u, 0x00030047u, 0x0000037eu, 0x00000002u, 0x00040048u, 0x0000037eu, 0x00000000u, - 0x00000018u, 0x00050048u, 0x0000037eu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000380u, - 0x00000018u, 0x00040047u, 0x00000380u, 0x00000021u, 0x0000000du, 0x00040047u, 0x00000380u, 0x00000022u, - 0x00000000u, 0x00040047u, 0x0000038au, 0x00000006u, 0x00000004u, 0x00050048u, 0x0000038bu, 0x00000000u, - 0x00000023u, 0x00000000u, 0x00050048u, 0x0000038bu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, - 0x0000038bu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000038bu, 0x00000003u, 0x00000023u, - 0x0000000cu, 0x00050048u, 0x0000038bu, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x0000038bu, - 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x0000038bu, 0x00000006u, 0x00000023u, 0x00000018u, - 0x00050048u, 0x0000038bu, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x0000038bu, 0x00000008u, - 0x00000023u, 0x00000020u, 0x00050048u, 0x0000038bu, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, - 0x0000038bu, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x0000038bu, 0x0000000bu, 0x00000023u, - 0x0000002cu, 0x00050048u, 0x0000038bu, 0x0000000cu, 0x00000023u, 0x00000030u, 0x00040047u, 0x0000038cu, - 0x00000006u, 0x00000080u, 0x00030047u, 0x0000038du, 0x00000002u, 0x00040048u, 0x0000038du, 0x00000000u, - 0x00000018u, 0x00050048u, 0x0000038du, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000038fu, - 0x00000018u, 0x00040047u, 0x0000038fu, 0x00000021u, 0x00000006u, 0x00040047u, 0x0000038fu, 0x00000022u, - 0x00000000u, 0x00050048u, 0x000003a2u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000003a2u, - 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000003a2u, 0x00000002u, 0x00000023u, 0x00000008u, - 0x00050048u, 0x000003a2u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x000003a2u, 0x00000004u, - 0x00000023u, 0x00000010u, 0x00050048u, 0x000003a2u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, - 0x000003a2u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x000003a2u, 0x00000007u, 0x00000023u, - 0x0000001cu, 0x00050048u, 0x000003a2u, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x000003a2u, - 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x000003a2u, 0x0000000au, 0x00000023u, 0x00000028u, - 0x00050048u, 0x000003a2u, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x000003a2u, 0x0000000cu, - 0x00000023u, 0x00000030u, 0x00050048u, 0x000003a2u, 0x0000000du, 0x00000023u, 0x00000034u, 0x00050048u, - 0x000003a2u, 0x0000000eu, 0x00000023u, 0x00000038u, 0x00050048u, 0x000003a2u, 0x0000000fu, 0x00000023u, - 0x0000003cu, 0x00040047u, 0x000003a3u, 0x00000006u, 0x00000040u, 0x00030047u, 0x000003a4u, 0x00000002u, - 0x00040048u, 0x000003a4u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000003a4u, 0x00000000u, 0x00000023u, - 0x00000000u, 0x00030047u, 0x000003a6u, 0x00000018u, 0x00040047u, 0x000003a6u, 0x00000021u, 0x00000008u, - 0x00040047u, 0x000003a6u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000003c9u, 0x00000006u, 0x00000004u, - 0x00030047u, 0x000003cau, 0x00000002u, 0x00040048u, 0x000003cau, 0x00000000u, 0x00000018u, 0x00050048u, - 0x000003cau, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000003ccu, 0x00000018u, 0x00040047u, - 0x000003ccu, 0x00000021u, 0x00000001u, 0x00040047u, 0x000003ccu, 0x00000022u, 0x00000000u, 0x00050048u, - 0x00000404u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000404u, 0x00000001u, 0x00000023u, - 0x00000004u, 0x00050048u, 0x00000404u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000404u, - 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000404u, 0x00000004u, 0x00000023u, 0x00000010u, - 0x00050048u, 0x00000404u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000404u, 0x00000006u, - 0x00000023u, 0x00000018u, 0x00050048u, 0x00000404u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, - 0x00000404u, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000404u, 0x00000009u, 0x00000023u, - 0x00000024u, 0x00050048u, 0x00000404u, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x00000404u, - 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x00000404u, 0x0000000cu, 0x00000023u, 0x00000030u, - 0x00050048u, 0x00000404u, 0x0000000du, 0x00000023u, 0x00000034u, 0x00050048u, 0x00000404u, 0x0000000eu, - 0x00000023u, 0x00000038u, 0x00050048u, 0x00000404u, 0x0000000fu, 0x00000023u, 0x0000003cu, 0x00050048u, - 0x00000404u, 0x00000010u, 0x00000023u, 0x00000040u, 0x00050048u, 0x00000404u, 0x00000011u, 0x00000023u, - 0x00000044u, 0x00040047u, 0x00000405u, 0x00000006u, 0x00000048u, 0x00030047u, 0x00000406u, 0x00000002u, - 0x00040048u, 0x00000406u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000406u, 0x00000000u, 0x00000023u, - 0x00000000u, 0x00030047u, 0x00000408u, 0x00000018u, 0x00040047u, 0x00000408u, 0x00000021u, 0x0000000bu, - 0x00040047u, 0x00000408u, 0x00000022u, 0x00000000u, 0x00040048u, 0x00000413u, 0x00000000u, 0x00000005u, - 0x00050048u, 0x00000413u, 0x00000000u, 0x00000007u, 0x00000010u, 0x00050048u, 0x00000413u, 0x00000000u, - 0x00000023u, 0x00000000u, 0x00040047u, 0x00000414u, 0x00000006u, 0x00000040u, 0x00030047u, 0x00000415u, - 0x00000002u, 0x00040048u, 0x00000415u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000415u, 0x00000000u, - 0x00000023u, 0x00000000u, 0x00030047u, 0x00000417u, 0x00000018u, 0x00040047u, 0x00000417u, 0x00000021u, - 0x0000000cu, 0x00040047u, 0x00000417u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000436u, 0x00000006u, - 0x00000004u, 0x00030047u, 0x00000437u, 0x00000002u, 0x00040048u, 0x00000437u, 0x00000000u, 0x00000018u, - 0x00050048u, 0x00000437u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000439u, 0x00000018u, - 0x00040047u, 0x00000439u, 0x00000021u, 0x00000005u, 0x00040047u, 0x00000439u, 0x00000022u, 0x00000000u, - 0x00040047u, 0x000004d3u, 0x00000006u, 0x00000010u, 0x00030047u, 0x000004d4u, 0x00000002u, 0x00040048u, - 0x000004d4u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000004d4u, 0x00000000u, 0x00000023u, 0x00000000u, - 0x00030047u, 0x000004d6u, 0x00000018u, 0x00040047u, 0x000004d6u, 0x00000021u, 0x00000003u, 0x00040047u, - 0x000004d6u, 0x00000022u, 0x00000000u, 0x00050048u, 0x000004e0u, 0x00000000u, 0x00000023u, 0x00000000u, - 0x00050048u, 0x000004e0u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000004e0u, 0x00000002u, - 0x00000023u, 0x00000008u, 0x00050048u, 0x000004e0u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00040047u, - 0x000004e1u, 0x00000006u, 0x00000010u, 0x00030047u, 0x000004e2u, 0x00000002u, 0x00040048u, 0x000004e2u, - 0x00000000u, 0x00000018u, 0x00050048u, 0x000004e2u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, - 0x000004e4u, 0x00000018u, 0x00040047u, 0x000004e4u, 0x00000021u, 0x00000002u, 0x00040047u, 0x000004e4u, - 0x00000022u, 0x00000000u, 0x00040047u, 0x0000058au, 0x00000006u, 0x00000040u, 0x00030047u, 0x0000058bu, - 0x00000002u, 0x00040048u, 0x0000058bu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000058bu, 0x00000000u, - 0x00000023u, 0x00000000u, 0x00030047u, 0x0000058du, 0x00000018u, 0x00040047u, 0x0000058du, 0x00000021u, - 0x00000004u, 0x00040047u, 0x0000058du, 0x00000022u, 0x00000000u, 0x00050048u, 0x0000058eu, 0x00000000u, - 0x00000023u, 0x00000000u, 0x00050048u, 0x0000058eu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, - 0x0000058eu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000058eu, 0x00000003u, 0x00000023u, - 0x0000000cu, 0x00050048u, 0x0000058eu, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x0000058eu, - 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x0000058eu, 0x00000006u, 0x00000023u, 0x00000018u, - 0x00050048u, 0x0000058eu, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x0000058eu, 0x00000008u, - 0x00000023u, 0x00000020u, 0x00050048u, 0x0000058eu, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, - 0x0000058eu, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x0000058eu, 0x0000000bu, 0x00000023u, - 0x0000002cu, 0x00050048u, 0x0000058eu, 0x0000000cu, 0x00000023u, 0x00000030u, 0x00050048u, 0x0000058eu, - 0x0000000du, 0x00000023u, 0x00000034u, 0x00050048u, 0x0000058eu, 0x0000000eu, 0x00000023u, 0x00000038u, - 0x00050048u, 0x0000058eu, 0x0000000fu, 0x00000023u, 0x0000003cu, 0x00040047u, 0x0000058fu, 0x00000006u, - 0x00000040u, 0x00030047u, 0x00000590u, 0x00000002u, 0x00040048u, 0x00000590u, 0x00000000u, 0x00000018u, - 0x00050048u, 0x00000590u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000592u, 0x00000018u, - 0x00040047u, 0x00000592u, 0x00000021u, 0x00000007u, 0x00040047u, 0x00000592u, 0x00000022u, 0x00000000u, - 0x00050048u, 0x00000593u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000593u, 0x00000001u, - 0x00000023u, 0x00000004u, 0x00050048u, 0x00000593u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, - 0x00000593u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000593u, 0x00000004u, 0x00000023u, - 0x00000010u, 0x00050048u, 0x00000593u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000593u, - 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000593u, 0x00000007u, 0x00000023u, 0x0000001cu, - 0x00050048u, 0x00000593u, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000593u, 0x00000009u, - 0x00000023u, 0x00000024u, 0x00050048u, 0x00000593u, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, - 0x00000593u, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x00000593u, 0x0000000cu, 0x00000023u, - 0x00000030u, 0x00050048u, 0x00000593u, 0x0000000du, 0x00000023u, 0x00000034u, 0x00050048u, 0x00000593u, - 0x0000000eu, 0x00000023u, 0x00000038u, 0x00050048u, 0x00000593u, 0x0000000fu, 0x00000023u, 0x0000003cu, - 0x00040047u, 0x00000594u, 0x00000006u, 0x00000040u, 0x00030047u, 0x00000595u, 0x00000002u, 0x00040048u, - 0x00000595u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000595u, 0x00000000u, 0x00000023u, 0x00000000u, - 0x00030047u, 0x00000597u, 0x00000018u, 0x00040047u, 0x00000597u, 0x00000021u, 0x00000009u, 0x00040047u, - 0x00000597u, 0x00000022u, 0x00000000u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, - 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x00000007u, 0x00000001u, - 0x00040020u, 0x00000008u, 0x00000007u, 0x00000006u, 0x00030016u, 0x00000009u, 0x00000020u, 0x00040017u, - 0x0000000au, 0x00000009u, 0x00000003u, 0x00040021u, 0x0000000bu, 0x0000000au, 0x00000008u, 0x00040015u, - 0x00000012u, 0x00000040u, 0x00000001u, 0x00040020u, 0x00000013u, 0x00000007u, 0x00000012u, 0x00040015u, - 0x00000014u, 0x00000020u, 0x00000001u, 0x00060021u, 0x00000015u, 0x00000014u, 0x00000008u, 0x00000008u, - 0x00000013u, 0x00040020u, 0x0000001bu, 0x00000007u, 0x0000000au, 0x00020014u, 0x0000001cu, 0x00070021u, - 0x0000001du, 0x0000001cu, 0x0000001bu, 0x0000001bu, 0x0000001bu, 0x0000001bu, 0x00040017u, 0x00000024u, - 0x00000009u, 0x00000004u, 0x00040018u, 0x00000025u, 0x00000024u, 0x00000004u, 0x0003001eu, 0x00000026u, - 0x00000025u, 0x00040020u, 0x00000027u, 0x00000007u, 0x00000026u, 0x00040021u, 0x00000028u, 0x0000000au, - 0x00000027u, 0x00040020u, 0x0000002cu, 0x00000007u, 0x00000025u, 0x0014001eu, 0x0000002du, 0x00000009u, - 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, - 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, - 0x00000009u, 0x00040020u, 0x0000002eu, 0x00000007u, 0x0000002du, 0x00070021u, 0x0000002fu, 0x00000009u, - 0x0000001bu, 0x0000001bu, 0x0000002cu, 0x0000002eu, 0x00040020u, 0x00000036u, 0x00000007u, 0x00000009u, - 0x00080021u, 0x00000037u, 0x00000006u, 0x0000001bu, 0x0000001bu, 0x00000027u, 0x0000002eu, 0x00000036u, - 0x0004002bu, 0x00000006u, 0x00000040u, 0x00000000u, 0x0004002bu, 0x00000009u, 0x00000044u, 0x3f7dfdfeu, - 0x0004002bu, 0x00000009u, 0x00000045u, 0x3b808081u, 0x0004002bu, 0x00000009u, 0x00000046u, 0x3f68e8e9u, - 0x0006002cu, 0x0000000au, 0x00000047u, 0x00000044u, 0x00000045u, 0x00000046u, 0x0004002bu, 0x00000009u, - 0x0000004du, 0x3ec4c4c5u, 0x0004002bu, 0x00000009u, 0x0000004eu, 0x3f37b7b8u, 0x0004002bu, 0x00000009u, - 0x0000004fu, 0x3f79f9fau, 0x0006002cu, 0x0000000au, 0x00000050u, 0x0000004du, 0x0000004eu, 0x0000004fu, - 0x0004002bu, 0x00000006u, 0x00000053u, 0x00000002u, 0x0004002bu, 0x00000009u, 0x00000057u, 0x3f0b8b8cu, - 0x0004002bu, 0x00000009u, 0x00000058u, 0x3ebababbu, 0x0004002bu, 0x00000009u, 0x00000059u, 0x3f800000u, - 0x0006002cu, 0x0000000au, 0x0000005au, 0x00000057u, 0x00000058u, 0x00000059u, 0x0004002bu, 0x00000006u, - 0x0000005du, 0x00000003u, 0x0004002bu, 0x00000009u, 0x00000061u, 0x3ec8c8c9u, 0x0004002bu, 0x00000009u, - 0x00000062u, 0x00000000u, 0x0006002cu, 0x0000000au, 0x00000063u, 0x00000059u, 0x00000061u, 0x00000062u, - 0x0004002bu, 0x00000006u, 0x00000066u, 0x00000004u, 0x0006002cu, 0x0000000au, 0x0000006au, 0x00000062u, - 0x00000059u, 0x00000062u, 0x0004002bu, 0x00000006u, 0x0000006du, 0x00000007u, 0x0004002bu, 0x00000009u, - 0x00000071u, 0x3ed8d8d9u, 0x0004002bu, 0x00000009u, 0x00000072u, 0x3f33b3b4u, 0x0004002bu, 0x00000009u, - 0x00000073u, 0x3e6cecedu, 0x0006002cu, 0x0000000au, 0x00000074u, 0x00000071u, 0x00000072u, 0x00000073u, - 0x0004002bu, 0x00000006u, 0x00000077u, 0x00000008u, 0x0004002bu, 0x00000009u, 0x0000007bu, 0x3e8a8a8bu, - 0x0004002bu, 0x00000009u, 0x0000007cu, 0x3f31b1b2u, 0x0006002cu, 0x0000000au, 0x0000007du, 0x0000004eu, - 0x0000007bu, 0x0000007cu, 0x0004002bu, 0x00000006u, 0x00000080u, 0x00000009u, 0x0004002bu, 0x00000009u, - 0x00000084u, 0x3da0a0a1u, 0x0004002bu, 0x00000009u, 0x00000085u, 0x3f7efeffu, 0x0004002bu, 0x00000009u, - 0x00000086u, 0x3f39b9bau, 0x0006002cu, 0x0000000au, 0x00000087u, 0x00000084u, 0x00000085u, 0x00000086u, - 0x0004002bu, 0x00000006u, 0x0000008au, 0x0000000au, 0x0004002bu, 0x00000006u, 0x00000090u, 0x0000000bu, - 0x0006002cu, 0x0000000au, 0x00000094u, 0x00000061u, 0x00000061u, 0x00000061u, 0x0004002bu, 0x00000006u, - 0x00000097u, 0x0000000cu, 0x0004002bu, 0x00000009u, 0x0000009bu, 0x3d008081u, 0x0004002bu, 0x00000009u, - 0x0000009cu, 0x3c008081u, 0x0006002cu, 0x0000000au, 0x0000009du, 0x0000009bu, 0x0000009cu, 0x00000059u, - 0x0004002bu, 0x00000006u, 0x000000a0u, 0x0000000du, 0x0004002bu, 0x00000009u, 0x000000a4u, 0x3ea0a0a1u, - 0x0004002bu, 0x00000009u, 0x000000a5u, 0x3ef0f0f1u, 0x0006002cu, 0x0000000au, 0x000000a6u, 0x000000a4u, - 0x000000a4u, 0x000000a5u, 0x0004002bu, 0x00000006u, 0x000000a9u, 0x0000000eu, 0x0004002bu, 0x00000009u, - 0x000000adu, 0x3e70f0f1u, 0x0006002cu, 0x0000000au, 0x000000aeu, 0x000000adu, 0x000000a5u, 0x000000adu, - 0x0004002bu, 0x00000006u, 0x000000b1u, 0x0000000fu, 0x0006002cu, 0x0000000au, 0x000000b5u, 0x000000a5u, - 0x000000a4u, 0x000000a4u, 0x0004002bu, 0x00000006u, 0x000000b8u, 0x00000010u, 0x0006002cu, 0x0000000au, - 0x000000bcu, 0x00000059u, 0x00000059u, 0x00000059u, 0x0004002bu, 0x00000006u, 0x000000bfu, 0x00000011u, - 0x0004002bu, 0x00000006u, 0x000000c5u, 0x00000012u, 0x0006002cu, 0x0000000au, 0x000000c9u, 0x00000059u, - 0x00000059u, 0x00000062u, 0x0004002bu, 0x00000006u, 0x000000ccu, 0x00000013u, 0x0004002bu, 0x00000006u, - 0x000000d2u, 0x00000014u, 0x0004002bu, 0x00000006u, 0x000000d8u, 0x00000015u, 0x0017001eu, 0x000000dfu, - 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000014u, - 0x00000014u, 0x00000006u, 0x00000009u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000009u, 0x00000009u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x000000e0u, 0x00000009u, - 0x000000dfu, 0x0004003bu, 0x000000e0u, 0x000000e1u, 0x00000009u, 0x0004002bu, 0x00000014u, 0x000000e2u, - 0x00000008u, 0x00040020u, 0x000000e3u, 0x00000009u, 0x00000014u, 0x0004002bu, 0x00000014u, 0x000000e6u, - 0x00000000u, 0x00040020u, 0x000000f2u, 0x00000007u, 0x00000024u, 0x0003001du, 0x000000f4u, 0x00000024u, - 0x0003001eu, 0x000000f5u, 0x000000f4u, 0x00040020u, 0x000000f6u, 0x0000000cu, 0x000000f5u, 0x0004003bu, - 0x000000f6u, 0x000000f7u, 0x0000000cu, 0x00040020u, 0x000000f9u, 0x0000000cu, 0x00000024u, 0x0004002bu, - 0x00000014u, 0x0000010du, 0xffffffffu, 0x00040020u, 0x0000010fu, 0x00000007u, 0x00000014u, 0x0004002bu, - 0x00000014u, 0x00000114u, 0x00000001u, 0x0004002bu, 0x00000014u, 0x00000123u, 0x00000002u, 0x0003001du, - 0x00000126u, 0x00000012u, 0x0003001eu, 0x00000127u, 0x00000126u, 0x00040020u, 0x00000128u, 0x0000000cu, - 0x00000127u, 0x0004003bu, 0x00000128u, 0x00000129u, 0x0000000cu, 0x00040020u, 0x0000012eu, 0x0000000cu, - 0x00000012u, 0x00040017u, 0x00000141u, 0x0000001cu, 0x00000003u, 0x00040018u, 0x0000014du, 0x0000000au, - 0x00000003u, 0x00040020u, 0x0000014eu, 0x00000007u, 0x0000014du, 0x0004002bu, 0x00000014u, 0x00000162u, - 0x00000003u, 0x0004002bu, 0x00000009u, 0x0000017fu, 0x3f000000u, 0x0004002bu, 0x00000009u, 0x0000018du, - 0x3a83126fu, 0x00040017u, 0x00000198u, 0x00000009u, 0x00000002u, 0x0004002bu, 0x00000009u, 0x000001a4u, - 0x2edbe6ffu, 0x0004002bu, 0x00000009u, 0x000001aau, 0xbf800000u, 0x0004002bu, 0x00000014u, 0x000001b4u, - 0x00000004u, 0x0004002bu, 0x00000014u, 0x000001b7u, 0x00000005u, 0x0004002bu, 0x00000014u, 0x000001bdu, - 0x00000006u, 0x0004002bu, 0x00000014u, 0x000001c3u, 0x00000007u, 0x0004002bu, 0x00000014u, 0x000001d2u, - 0x00000009u, 0x0004002bu, 0x00000014u, 0x000001ddu, 0x0000000au, 0x0004002bu, 0x00000014u, 0x000001e3u, - 0x0000000bu, 0x0004002bu, 0x00000014u, 0x000001eau, 0x0000000cu, 0x0004002bu, 0x00000009u, 0x000001f1u, - 0x358637bdu, 0x00040020u, 0x000001fbu, 0x00000007u, 0x00000198u, 0x0004002bu, 0x00000014u, 0x00000202u, - 0x0000000eu, 0x0004002bu, 0x00000014u, 0x00000208u, 0x0000000fu, 0x0004002bu, 0x00000014u, 0x0000020fu, - 0x00000010u, 0x0004002bu, 0x00000014u, 0x00000215u, 0x00000011u, 0x0004002bu, 0x00000009u, 0x0000032au, - 0x461c4000u, 0x0004002bu, 0x00000009u, 0x00000341u, 0x40000000u, 0x0004002bu, 0x00000009u, 0x00000349u, - 0x40800000u, 0x00040017u, 0x00000353u, 0x00000006u, 0x00000003u, 0x00040020u, 0x00000354u, 0x00000001u, - 0x00000353u, 0x0004003bu, 0x00000354u, 0x00000355u, 0x00000001u, 0x00040020u, 0x00000356u, 0x00000001u, - 0x00000006u, 0x0004002bu, 0x00000014u, 0x0000035bu, 0x00000013u, 0x00040020u, 0x0000035cu, 0x00000009u, - 0x00000006u, 0x0004002bu, 0x00000014u, 0x00000367u, 0x00000012u, 0x0009001eu, 0x00000379u, 0x00000006u, - 0x00000006u, 0x00000012u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x0000037au, - 0x00000007u, 0x00000379u, 0x0009001eu, 0x0000037cu, 0x00000006u, 0x00000006u, 0x00000012u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x0003001du, 0x0000037du, 0x0000037cu, 0x0003001eu, 0x0000037eu, - 0x0000037du, 0x00040020u, 0x0000037fu, 0x0000000cu, 0x0000037eu, 0x0004003bu, 0x0000037fu, 0x00000380u, - 0x0000000cu, 0x00040020u, 0x00000382u, 0x0000000cu, 0x0000037cu, 0x0004001cu, 0x00000386u, 0x00000006u, - 0x000000d2u, 0x000f001eu, 0x00000387u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000386u, - 0x00040020u, 0x00000388u, 0x00000007u, 0x00000387u, 0x0004001cu, 0x0000038au, 0x00000006u, 0x000000d2u, - 0x000f001eu, 0x0000038bu, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0000038au, 0x0003001du, - 0x0000038cu, 0x0000038bu, 0x0003001eu, 0x0000038du, 0x0000038cu, 0x00040020u, 0x0000038eu, 0x0000000cu, - 0x0000038du, 0x0004003bu, 0x0000038eu, 0x0000038fu, 0x0000000cu, 0x00040020u, 0x00000392u, 0x0000000cu, - 0x0000038bu, 0x0012001eu, 0x0000039fu, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x000003a0u, 0x00000007u, 0x0000039fu, 0x0012001eu, - 0x000003a2u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x0003001du, 0x000003a3u, 0x000003a2u, 0x0003001eu, 0x000003a4u, 0x000003a3u, 0x00040020u, - 0x000003a5u, 0x0000000cu, 0x000003a4u, 0x0004003bu, 0x000003a5u, 0x000003a6u, 0x0000000cu, 0x00040020u, - 0x000003abu, 0x0000000cu, 0x000003a2u, 0x0003001du, 0x000003c9u, 0x00000014u, 0x0003001eu, 0x000003cau, - 0x000003c9u, 0x00040020u, 0x000003cbu, 0x0000000cu, 0x000003cau, 0x0004003bu, 0x000003cbu, 0x000003ccu, - 0x0000000cu, 0x00040020u, 0x000003d6u, 0x0000000cu, 0x00000014u, 0x00040020u, 0x000003eau, 0x00000007u, - 0x0000001cu, 0x0003002au, 0x0000001cu, 0x000003ecu, 0x00030029u, 0x0000001cu, 0x000003f2u, 0x00040020u, - 0x000003f7u, 0x00000009u, 0x00000009u, 0x0014001eu, 0x00000404u, 0x00000009u, 0x00000009u, 0x00000009u, - 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, - 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x0003001du, - 0x00000405u, 0x00000404u, 0x0003001eu, 0x00000406u, 0x00000405u, 0x00040020u, 0x00000407u, 0x0000000cu, - 0x00000406u, 0x0004003bu, 0x00000407u, 0x00000408u, 0x0000000cu, 0x0004002bu, 0x00000014u, 0x0000040bu, - 0x0000000du, 0x00040020u, 0x0000040cu, 0x0000000cu, 0x00000009u, 0x0003001eu, 0x00000413u, 0x00000025u, - 0x0003001du, 0x00000414u, 0x00000413u, 0x0003001eu, 0x00000415u, 0x00000414u, 0x00040020u, 0x00000416u, - 0x0000000cu, 0x00000415u, 0x0004003bu, 0x00000416u, 0x00000417u, 0x0000000cu, 0x00040020u, 0x00000419u, - 0x0000000cu, 0x00000413u, 0x0004002bu, 0x00000006u, 0x00000432u, 0x00000006u, 0x0003001du, 0x00000436u, - 0x00000009u, 0x0003001eu, 0x00000437u, 0x00000436u, 0x00040020u, 0x00000438u, 0x0000000cu, 0x00000437u, - 0x0004003bu, 0x00000438u, 0x00000439u, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x00000450u, 0x00000005u, - 0x00040020u, 0x000004a6u, 0x0000000cu, 0x00000404u, 0x00040020u, 0x000004d1u, 0x00000007u, 0x00000353u, - 0x0003001du, 0x000004d3u, 0x00000353u, 0x0003001eu, 0x000004d4u, 0x000004d3u, 0x00040020u, 0x000004d5u, - 0x0000000cu, 0x000004d4u, 0x0004003bu, 0x000004d5u, 0x000004d6u, 0x0000000cu, 0x00040020u, 0x000004dau, - 0x0000000cu, 0x00000353u, 0x0006001eu, 0x000004ddu, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, - 0x00040020u, 0x000004deu, 0x00000007u, 0x000004ddu, 0x0006001eu, 0x000004e0u, 0x00000009u, 0x00000009u, - 0x00000009u, 0x00000009u, 0x0003001du, 0x000004e1u, 0x000004e0u, 0x0003001eu, 0x000004e2u, 0x000004e1u, - 0x00040020u, 0x000004e3u, 0x0000000cu, 0x000004e2u, 0x0004003bu, 0x000004e3u, 0x000004e4u, 0x0000000cu, - 0x00040020u, 0x000004e9u, 0x0000000cu, 0x000004e0u, 0x0004002bu, 0x00000006u, 0x00000546u, 0x0000001eu, - 0x000a001eu, 0x00000568u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x0000000au, 0x00000009u, 0x00040020u, 0x00000569u, 0x0000151au, 0x00000568u, 0x0004003bu, 0x00000569u, - 0x0000056au, 0x0000151au, 0x00040020u, 0x0000056cu, 0x0000151au, 0x00000006u, 0x00040020u, 0x0000057cu, - 0x0000151au, 0x0000000au, 0x00040020u, 0x00000582u, 0x0000151au, 0x00000009u, 0x0004002bu, 0x00000009u, - 0x00000586u, 0x40e00000u, 0x0004002bu, 0x00000009u, 0x00000587u, 0x41400000u, 0x0004002bu, 0x00000009u, - 0x00000588u, 0x40a00000u, 0x0004002bu, 0x00000009u, 0x00000589u, 0x40400000u, 0x0003001du, 0x0000058au, - 0x00000413u, 0x0003001eu, 0x0000058bu, 0x0000058au, 0x00040020u, 0x0000058cu, 0x0000000cu, 0x0000058bu, - 0x0004003bu, 0x0000058cu, 0x0000058du, 0x0000000cu, 0x0012001eu, 0x0000058eu, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0003001du, 0x0000058fu, - 0x0000058eu, 0x0003001eu, 0x00000590u, 0x0000058fu, 0x00040020u, 0x00000591u, 0x0000000cu, 0x00000590u, - 0x0004003bu, 0x00000591u, 0x00000592u, 0x0000000cu, 0x0012001eu, 0x00000593u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0003001du, 0x00000594u, - 0x00000593u, 0x0003001eu, 0x00000595u, 0x00000594u, 0x00040020u, 0x00000596u, 0x0000000cu, 0x00000595u, - 0x0004003bu, 0x00000596u, 0x00000597u, 0x0000000cu, 0x0006002cu, 0x00000353u, 0x00000598u, 0x00000007u, - 0x00000007u, 0x00000007u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, - 0x00000005u, 0x0004003bu, 0x00000008u, 0x00000351u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000352u, - 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000359u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000360u, - 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000365u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000036bu, - 0x00000007u, 0x0004003bu, 0x0000037au, 0x0000037bu, 0x00000007u, 0x0004003bu, 0x00000388u, 0x00000389u, - 0x00000007u, 0x0004003bu, 0x000003a0u, 0x000003a1u, 0x00000007u, 0x0004003bu, 0x0000010fu, 0x000003afu, - 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003b5u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003b6u, - 0x00000007u, 0x0004003bu, 0x00000013u, 0x000003b9u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003c4u, - 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003dau, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003e6u, - 0x00000007u, 0x0004003bu, 0x000003eau, 0x000003ebu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003f3u, - 0x00000007u, 0x0004003bu, 0x00000036u, 0x00000403u, 0x00000007u, 0x0004003bu, 0x00000027u, 0x00000412u, - 0x00000007u, 0x0004003bu, 0x0000001bu, 0x0000041du, 0x00000007u, 0x0004003bu, 0x00000027u, 0x0000041eu, - 0x00000007u, 0x0004003bu, 0x0000001bu, 0x00000421u, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x00000426u, - 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000042bu, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x00000435u, - 0x00000007u, 0x0004003bu, 0x0000001bu, 0x00000446u, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x00000455u, - 0x00000007u, 0x0004003bu, 0x0000001bu, 0x00000457u, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x00000459u, - 0x00000007u, 0x0004003bu, 0x0000001bu, 0x0000045bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000461u, - 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000471u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000047cu, - 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000484u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000494u, - 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000049fu, 0x00000007u, 0x0004003bu, 0x0000002eu, 0x000004a3u, - 0x00000007u, 0x0004003bu, 0x00000027u, 0x000004aau, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004afu, - 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004b5u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004bdu, - 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004c5u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004c8u, - 0x00000007u, 0x0004003bu, 0x000004d1u, 0x000004d2u, 0x00000007u, 0x0004003bu, 0x000004deu, 0x000004dfu, - 0x00000007u, 0x0004003bu, 0x000004deu, 0x000004edu, 0x00000007u, 0x0004003bu, 0x000004deu, 0x000004f5u, - 0x00000007u, 0x0004003bu, 0x0000001bu, 0x000004fdu, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x00000505u, - 0x00000007u, 0x0004003bu, 0x0000001bu, 0x0000050du, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x00000516u, - 0x00000007u, 0x0004003bu, 0x0000001bu, 0x00000518u, 0x00000007u, 0x0004003bu, 0x00000027u, 0x0000051au, - 0x00000007u, 0x0004003bu, 0x0000002eu, 0x0000051cu, 0x00000007u, 0x0004003bu, 0x00000036u, 0x0000051eu, - 0x00000007u, 0x0004003bu, 0x0000001bu, 0x00000524u, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x00000526u, - 0x00000007u, 0x0004003bu, 0x00000027u, 0x00000528u, 0x00000007u, 0x0004003bu, 0x0000002eu, 0x0000052au, - 0x00000007u, 0x0004003bu, 0x00000036u, 0x0000052cu, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x00000532u, - 0x00000007u, 0x0004003bu, 0x0000001bu, 0x00000534u, 0x00000007u, 0x0004003bu, 0x00000027u, 0x00000536u, - 0x00000007u, 0x0004003bu, 0x0000002eu, 0x00000538u, 0x00000007u, 0x0004003bu, 0x00000036u, 0x0000053au, - 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000054bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000551u, - 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000578u, 0x00000007u, 0x0003003eu, 0x00000351u, 0x00000040u, - 0x00050041u, 0x00000356u, 0x00000357u, 0x00000355u, 0x00000040u, 0x0004003du, 0x00000006u, 0x00000358u, - 0x00000357u, 0x0003003eu, 0x00000352u, 0x00000358u, 0x0004003du, 0x00000006u, 0x0000035au, 0x00000352u, - 0x00050041u, 0x0000035cu, 0x0000035du, 0x000000e1u, 0x0000035bu, 0x0004003du, 0x00000006u, 0x0000035eu, - 0x0000035du, 0x00050089u, 0x00000006u, 0x0000035fu, 0x0000035au, 0x0000035eu, 0x0003003eu, 0x00000359u, - 0x0000035fu, 0x0004003du, 0x00000006u, 0x00000361u, 0x00000352u, 0x00050041u, 0x0000035cu, 0x00000362u, - 0x000000e1u, 0x0000035bu, 0x0004003du, 0x00000006u, 0x00000363u, 0x00000362u, 0x00050086u, 0x00000006u, - 0x00000364u, 0x00000361u, 0x00000363u, 0x0003003eu, 0x00000360u, 0x00000364u, 0x0004003du, 0x00000006u, - 0x00000366u, 0x00000360u, 0x00050041u, 0x0000035cu, 0x00000368u, 0x000000e1u, 0x00000367u, 0x0004003du, - 0x00000006u, 0x00000369u, 0x00000368u, 0x00050089u, 0x00000006u, 0x0000036au, 0x00000366u, 0x00000369u, - 0x0003003eu, 0x00000365u, 0x0000036au, 0x0004003du, 0x00000006u, 0x0000036cu, 0x00000360u, 0x00050041u, - 0x0000035cu, 0x0000036du, 0x000000e1u, 0x00000367u, 0x0004003du, 0x00000006u, 0x0000036eu, 0x0000036du, - 0x00050086u, 0x00000006u, 0x0000036fu, 0x0000036cu, 0x0000036eu, 0x0003003eu, 0x0000036bu, 0x0000036fu, - 0x0004003du, 0x00000006u, 0x00000370u, 0x0000036bu, 0x00050041u, 0x0000035cu, 0x00000371u, 0x000000e1u, - 0x000001d2u, 0x0004003du, 0x00000006u, 0x00000372u, 0x00000371u, 0x000500aeu, 0x0000001cu, 0x00000373u, - 0x00000370u, 0x00000372u, 0x000300f7u, 0x00000375u, 0x00000000u, 0x000400fau, 0x00000373u, 0x00000374u, - 0x00000375u, 0x000200f8u, 0x00000374u, 0x0003003eu, 0x00000351u, 0x00000040u, 0x0004003du, 0x00000006u, - 0x00000376u, 0x00000351u, 0x000414aeu, 0x00000376u, 0x00000007u, 0x00000007u, 0x000200f8u, 0x00000375u, - 0x0004003du, 0x00000006u, 0x00000381u, 0x0000036bu, 0x00060041u, 0x00000382u, 0x00000383u, 0x00000380u, - 0x000000e6u, 0x00000381u, 0x0004003du, 0x0000037cu, 0x00000384u, 0x00000383u, 0x00040190u, 0x00000379u, - 0x00000385u, 0x00000384u, 0x0003003eu, 0x0000037bu, 0x00000385u, 0x00050041u, 0x00000008u, 0x00000390u, - 0x0000037bu, 0x000000e6u, 0x0004003du, 0x00000006u, 0x00000391u, 0x00000390u, 0x00060041u, 0x00000392u, - 0x00000393u, 0x0000038fu, 0x000000e6u, 0x00000391u, 0x0004003du, 0x0000038bu, 0x00000394u, 0x00000393u, - 0x00040190u, 0x00000387u, 0x00000395u, 0x00000394u, 0x0003003eu, 0x00000389u, 0x00000395u, 0x0004003du, - 0x00000006u, 0x00000396u, 0x00000365u, 0x00050041u, 0x00000008u, 0x00000397u, 0x00000389u, 0x00000123u, - 0x0004003du, 0x00000006u, 0x00000398u, 0x00000397u, 0x000500aeu, 0x0000001cu, 0x00000399u, 0x00000396u, - 0x00000398u, 0x000300f7u, 0x0000039bu, 0x00000000u, 0x000400fau, 0x00000399u, 0x0000039au, 0x0000039bu, - 0x000200f8u, 0x0000039au, 0x0003003eu, 0x00000351u, 0x00000040u, 0x0004003du, 0x00000006u, 0x0000039cu, - 0x00000351u, 0x000414aeu, 0x0000039cu, 0x00000007u, 0x00000007u, 0x000200f8u, 0x0000039bu, 0x00050041u, - 0x00000008u, 0x000003a7u, 0x00000389u, 0x00000162u, 0x0004003du, 0x00000006u, 0x000003a8u, 0x000003a7u, - 0x0004003du, 0x00000006u, 0x000003a9u, 0x00000365u, 0x00050080u, 0x00000006u, 0x000003aau, 0x000003a8u, - 0x000003a9u, 0x00060041u, 0x000003abu, 0x000003acu, 0x000003a6u, 0x000000e6u, 0x000003aau, 0x0004003du, - 0x000003a2u, 0x000003adu, 0x000003acu, 0x00040190u, 0x0000039fu, 0x000003aeu, 0x000003adu, 0x0003003eu, - 0x000003a1u, 0x000003aeu, 0x00050041u, 0x00000008u, 0x000003b0u, 0x00000389u, 0x000001bdu, 0x0004003du, - 0x00000006u, 0x000003b1u, 0x000003b0u, 0x00050041u, 0x00000008u, 0x000003b2u, 0x000003a1u, 0x000001b7u, - 0x0004003du, 0x00000006u, 0x000003b3u, 0x000003b2u, 0x00050080u, 0x00000006u, 0x000003b4u, 0x000003b1u, - 0x000003b3u, 0x0003003eu, 0x000003b5u, 0x000003b4u, 0x00050041u, 0x00000008u, 0x000003b7u, 0x000003a1u, - 0x000000e6u, 0x0004003du, 0x00000006u, 0x000003b8u, 0x000003b7u, 0x0003003eu, 0x000003b6u, 0x000003b8u, - 0x00050041u, 0x00000013u, 0x000003bau, 0x0000037bu, 0x00000123u, 0x0004003du, 0x00000012u, 0x000003bbu, - 0x000003bau, 0x0003003eu, 0x000003b9u, 0x000003bbu, 0x00070039u, 0x00000014u, 0x000003bcu, 0x00000019u, - 0x000003b5u, 0x000003b6u, 0x000003b9u, 0x0003003eu, 0x000003afu, 0x000003bcu, 0x0004003du, 0x00000014u, - 0x000003bdu, 0x000003afu, 0x000500b1u, 0x0000001cu, 0x000003beu, 0x000003bdu, 0x000000e6u, 0x000300f7u, - 0x000003c0u, 0x00000000u, 0x000400fau, 0x000003beu, 0x000003bfu, 0x000003c0u, 0x000200f8u, 0x000003bfu, - 0x0003003eu, 0x00000351u, 0x00000040u, 0x0004003du, 0x00000006u, 0x000003c1u, 0x00000351u, 0x000414aeu, - 0x000003c1u, 0x00000007u, 0x00000007u, 0x000200f8u, 0x000003c0u, 0x0003003eu, 0x000003c4u, 0x00000040u, - 0x0004003du, 0x00000014u, 0x000003c5u, 0x000003afu, 0x000500adu, 0x0000001cu, 0x000003c6u, 0x000003c5u, - 0x000000e6u, 0x000300f7u, 0x000003c8u, 0x00000000u, 0x000400fau, 0x000003c6u, 0x000003c7u, 0x000003c8u, - 0x000200f8u, 0x000003c7u, 0x00050041u, 0x00000008u, 0x000003cdu, 0x00000389u, 0x000001c3u, 0x0004003du, - 0x00000006u, 0x000003ceu, 0x000003cdu, 0x00050041u, 0x00000008u, 0x000003cfu, 0x000003a1u, 0x000001bdu, - 0x0004003du, 0x00000006u, 0x000003d0u, 0x000003cfu, 0x00050080u, 0x00000006u, 0x000003d1u, 0x000003ceu, - 0x000003d0u, 0x0004003du, 0x00000014u, 0x000003d2u, 0x000003afu, 0x0004007cu, 0x00000006u, 0x000003d3u, - 0x000003d2u, 0x00050080u, 0x00000006u, 0x000003d4u, 0x000003d1u, 0x000003d3u, 0x00050082u, 0x00000006u, - 0x000003d5u, 0x000003d4u, 0x00000007u, 0x00060041u, 0x000003d6u, 0x000003d7u, 0x000003ccu, 0x000000e6u, - 0x000003d5u, 0x0004003du, 0x00000014u, 0x000003d8u, 0x000003d7u, 0x0004007cu, 0x00000006u, 0x000003d9u, - 0x000003d8u, 0x0003003eu, 0x000003c4u, 0x000003d9u, 0x000200f9u, 0x000003c8u, 0x000200f8u, 0x000003c8u, - 0x00050041u, 0x00000008u, 0x000003dbu, 0x00000389u, 0x000001c3u, 0x0004003du, 0x00000006u, 0x000003dcu, - 0x000003dbu, 0x00050041u, 0x00000008u, 0x000003ddu, 0x000003a1u, 0x000001bdu, 0x0004003du, 0x00000006u, - 0x000003deu, 0x000003ddu, 0x00050080u, 0x00000006u, 0x000003dfu, 0x000003dcu, 0x000003deu, 0x0004003du, - 0x00000014u, 0x000003e0u, 0x000003afu, 0x0004007cu, 0x00000006u, 0x000003e1u, 0x000003e0u, 0x00050080u, - 0x00000006u, 0x000003e2u, 0x000003dfu, 0x000003e1u, 0x00060041u, 0x000003d6u, 0x000003e3u, 0x000003ccu, - 0x000000e6u, 0x000003e2u, 0x0004003du, 0x00000014u, 0x000003e4u, 0x000003e3u, 0x0004007cu, 0x00000006u, - 0x000003e5u, 0x000003e4u, 0x0003003eu, 0x000003dau, 0x000003e5u, 0x0004003du, 0x00000006u, 0x000003e7u, - 0x000003dau, 0x0004003du, 0x00000006u, 0x000003e8u, 0x000003c4u, 0x00050082u, 0x00000006u, 0x000003e9u, - 0x000003e7u, 0x000003e8u, 0x0003003eu, 0x000003e6u, 0x000003e9u, 0x0003003eu, 0x000003ebu, 0x000003ecu, - 0x0004003du, 0x00000006u, 0x000003edu, 0x00000359u, 0x0004003du, 0x00000006u, 0x000003eeu, 0x000003e6u, - 0x000500aeu, 0x0000001cu, 0x000003efu, 0x000003edu, 0x000003eeu, 0x000300f7u, 0x000003f1u, 0x00000000u, - 0x000400fau, 0x000003efu, 0x000003f0u, 0x000003f1u, 0x000200f8u, 0x000003f0u, 0x0003003eu, 0x000003ebu, - 0x000003f2u, 0x0003003eu, 0x00000359u, 0x00000040u, 0x000200f9u, 0x000003f1u, 0x000200f8u, 0x000003f1u, - 0x0004003du, 0x00000006u, 0x000003f4u, 0x000003c4u, 0x0004003du, 0x00000006u, 0x000003f5u, 0x00000359u, - 0x00050080u, 0x00000006u, 0x000003f6u, 0x000003f4u, 0x000003f5u, 0x0003003eu, 0x000003f3u, 0x000003f6u, - 0x00050041u, 0x000003f7u, 0x000003f8u, 0x000000e1u, 0x00000202u, 0x0004003du, 0x00000009u, 0x000003f9u, - 0x000003f8u, 0x000500bau, 0x0000001cu, 0x000003fau, 0x000003f9u, 0x00000062u, 0x000300f7u, 0x000003fcu, - 0x00000000u, 0x000400fau, 0x000003fau, 0x000003fbu, 0x000003fcu, 0x000200f8u, 0x000003fbu, 0x00050041u, - 0x00000008u, 0x000003fdu, 0x000003a1u, 0x000001e3u, 0x0004003du, 0x00000006u, 0x000003feu, 0x000003fdu, - 0x000500abu, 0x0000001cu, 0x000003ffu, 0x000003feu, 0x00000040u, 0x000200f9u, 0x000003fcu, 0x000200f8u, - 0x000003fcu, 0x000700f5u, 0x0000001cu, 0x00000400u, 0x000003fau, 0x000003f1u, 0x000003ffu, 0x000003fbu, - 0x000300f7u, 0x00000402u, 0x00000000u, 0x000400fau, 0x00000400u, 0x00000401u, 0x00000402u, 0x000200f8u, - 0x00000401u, 0x00050041u, 0x00000008u, 0x00000409u, 0x0000037bu, 0x00000114u, 0x0004003du, 0x00000006u, - 0x0000040au, 0x00000409u, 0x00070041u, 0x0000040cu, 0x0000040du, 0x00000408u, 0x000000e6u, 0x0000040au, - 0x0000040bu, 0x0004003du, 0x00000009u, 0x0000040eu, 0x0000040du, 0x00050041u, 0x000003f7u, 0x0000040fu, - 0x000000e1u, 0x00000202u, 0x0004003du, 0x00000009u, 0x00000410u, 0x0000040fu, 0x00050085u, 0x00000009u, - 0x00000411u, 0x0000040eu, 0x00000410u, 0x0003003eu, 0x00000403u, 0x00000411u, 0x0004003du, 0x00000006u, - 0x00000418u, 0x0000036bu, 0x00060041u, 0x00000419u, 0x0000041au, 0x00000417u, 0x000000e6u, 0x00000418u, - 0x0004003du, 0x00000413u, 0x0000041bu, 0x0000041au, 0x00040190u, 0x00000026u, 0x0000041cu, 0x0000041bu, - 0x0003003eu, 0x00000412u, 0x0000041cu, 0x0004003du, 0x00000026u, 0x0000041fu, 0x00000412u, 0x0003003eu, - 0x0000041eu, 0x0000041fu, 0x00050039u, 0x0000000au, 0x00000420u, 0x0000002au, 0x0000041eu, 0x0003003eu, - 0x0000041du, 0x00000420u, 0x0004003du, 0x0000000au, 0x00000422u, 0x0000041du, 0x0004003du, 0x00000009u, - 0x00000423u, 0x00000403u, 0x00060050u, 0x0000000au, 0x00000424u, 0x00000423u, 0x00000423u, 0x00000423u, - 0x00050083u, 0x0000000au, 0x00000425u, 0x00000422u, 0x00000424u, 0x0003003eu, 0x00000421u, 0x00000425u, - 0x0004003du, 0x0000000au, 0x00000427u, 0x0000041du, 0x0004003du, 0x00000009u, 0x00000428u, 0x00000403u, - 0x00060050u, 0x0000000au, 0x00000429u, 0x00000428u, 0x00000428u, 0x00000428u, 0x00050081u, 0x0000000au, - 0x0000042au, 0x00000427u, 0x00000429u, 0x0003003eu, 0x00000426u, 0x0000042au, 0x00050041u, 0x00000008u, - 0x0000042cu, 0x00000389u, 0x000001e3u, 0x0004003du, 0x00000006u, 0x0000042du, 0x0000042cu, 0x00050041u, - 0x00000008u, 0x0000042eu, 0x000003a1u, 0x000001e3u, 0x0004003du, 0x00000006u, 0x0000042fu, 0x0000042eu, - 0x00050080u, 0x00000006u, 0x00000430u, 0x0000042du, 0x0000042fu, 0x0004003du, 0x00000006u, 0x00000431u, - 0x000003f3u, 0x00050084u, 0x00000006u, 0x00000433u, 0x00000431u, 0x00000432u, 0x00050080u, 0x00000006u, - 0x00000434u, 0x00000430u, 0x00000433u, 0x0003003eu, 0x0000042bu, 0x00000434u, 0x0004003du, 0x00000006u, - 0x0000043au, 0x0000042bu, 0x00060041u, 0x0000040cu, 0x0000043bu, 0x00000439u, 0x000000e6u, 0x0000043au, - 0x0004003du, 0x00000009u, 0x0000043cu, 0x0000043bu, 0x0004003du, 0x00000006u, 0x0000043du, 0x0000042bu, - 0x00050080u, 0x00000006u, 0x0000043eu, 0x0000043du, 0x00000007u, 0x00060041u, 0x0000040cu, 0x0000043fu, - 0x00000439u, 0x000000e6u, 0x0000043eu, 0x0004003du, 0x00000009u, 0x00000440u, 0x0000043fu, 0x0004003du, - 0x00000006u, 0x00000441u, 0x0000042bu, 0x00050080u, 0x00000006u, 0x00000442u, 0x00000441u, 0x00000053u, - 0x00060041u, 0x0000040cu, 0x00000443u, 0x00000439u, 0x000000e6u, 0x00000442u, 0x0004003du, 0x00000009u, - 0x00000444u, 0x00000443u, 0x00060050u, 0x0000000au, 0x00000445u, 0x0000043cu, 0x00000440u, 0x00000444u, - 0x0003003eu, 0x00000435u, 0x00000445u, 0x0004003du, 0x00000006u, 0x00000447u, 0x0000042bu, 0x00050080u, - 0x00000006u, 0x00000448u, 0x00000447u, 0x0000005du, 0x00060041u, 0x0000040cu, 0x00000449u, 0x00000439u, - 0x000000e6u, 0x00000448u, 0x0004003du, 0x00000009u, 0x0000044au, 0x00000449u, 0x0004003du, 0x00000006u, - 0x0000044bu, 0x0000042bu, 0x00050080u, 0x00000006u, 0x0000044cu, 0x0000044bu, 0x00000066u, 0x00060041u, - 0x0000040cu, 0x0000044du, 0x00000439u, 0x000000e6u, 0x0000044cu, 0x0004003du, 0x00000009u, 0x0000044eu, - 0x0000044du, 0x0004003du, 0x00000006u, 0x0000044fu, 0x0000042bu, 0x00050080u, 0x00000006u, 0x00000451u, - 0x0000044fu, 0x00000450u, 0x00060041u, 0x0000040cu, 0x00000452u, 0x00000439u, 0x000000e6u, 0x00000451u, - 0x0004003du, 0x00000009u, 0x00000453u, 0x00000452u, 0x00060050u, 0x0000000au, 0x00000454u, 0x0000044au, - 0x0000044eu, 0x00000453u, 0x0003003eu, 0x00000446u, 0x00000454u, 0x0004003du, 0x0000000au, 0x00000456u, - 0x00000435u, 0x0003003eu, 0x00000455u, 0x00000456u, 0x0004003du, 0x0000000au, 0x00000458u, 0x00000446u, - 0x0003003eu, 0x00000457u, 0x00000458u, 0x0004003du, 0x0000000au, 0x0000045au, 0x00000421u, 0x0003003eu, - 0x00000459u, 0x0000045au, 0x0004003du, 0x0000000au, 0x0000045cu, 0x00000426u, 0x0003003eu, 0x0000045bu, - 0x0000045cu, 0x00080039u, 0x0000001cu, 0x0000045du, 0x00000022u, 0x00000455u, 0x00000457u, 0x00000459u, - 0x0000045bu, 0x000400a8u, 0x0000001cu, 0x0000045eu, 0x0000045du, 0x000300f7u, 0x00000460u, 0x00000000u, - 0x000400fau, 0x0000045eu, 0x0000045fu, 0x00000460u, 0x000200f8u, 0x0000045fu, 0x0003003eu, 0x000003ebu, - 0x000003f2u, 0x000200f9u, 0x00000460u, 0x000200f8u, 0x00000460u, 0x000200f9u, 0x00000402u, 0x000200f8u, - 0x00000402u, 0x0003003eu, 0x00000461u, 0x00000040u, 0x0004003du, 0x00000006u, 0x00000462u, 0x000003f3u, - 0x000500acu, 0x0000001cu, 0x00000463u, 0x00000462u, 0x00000040u, 0x000300f7u, 0x00000465u, 0x00000000u, - 0x000400fau, 0x00000463u, 0x00000464u, 0x00000465u, 0x000200f8u, 0x00000464u, 0x00050041u, 0x00000008u, - 0x00000466u, 0x00000389u, 0x000001c3u, 0x0004003du, 0x00000006u, 0x00000467u, 0x00000466u, 0x00050041u, - 0x00000008u, 0x00000468u, 0x000003a1u, 0x000000e2u, 0x0004003du, 0x00000006u, 0x00000469u, 0x00000468u, - 0x00050080u, 0x00000006u, 0x0000046au, 0x00000467u, 0x00000469u, 0x0004003du, 0x00000006u, 0x0000046bu, - 0x000003f3u, 0x00050080u, 0x00000006u, 0x0000046cu, 0x0000046au, 0x0000046bu, 0x00050082u, 0x00000006u, - 0x0000046du, 0x0000046cu, 0x00000007u, 0x00060041u, 0x000003d6u, 0x0000046eu, 0x000003ccu, 0x000000e6u, - 0x0000046du, 0x0004003du, 0x00000014u, 0x0000046fu, 0x0000046eu, 0x0004007cu, 0x00000006u, 0x00000470u, - 0x0000046fu, 0x0003003eu, 0x00000461u, 0x00000470u, 0x000200f9u, 0x00000465u, 0x000200f8u, 0x00000465u, - 0x00050041u, 0x00000008u, 0x00000472u, 0x00000389u, 0x000001c3u, 0x0004003du, 0x00000006u, 0x00000473u, - 0x00000472u, 0x00050041u, 0x00000008u, 0x00000474u, 0x000003a1u, 0x000000e2u, 0x0004003du, 0x00000006u, - 0x00000475u, 0x00000474u, 0x00050080u, 0x00000006u, 0x00000476u, 0x00000473u, 0x00000475u, 0x0004003du, - 0x00000006u, 0x00000477u, 0x000003f3u, 0x00050080u, 0x00000006u, 0x00000478u, 0x00000476u, 0x00000477u, - 0x00060041u, 0x000003d6u, 0x00000479u, 0x000003ccu, 0x000000e6u, 0x00000478u, 0x0004003du, 0x00000014u, - 0x0000047au, 0x00000479u, 0x0004007cu, 0x00000006u, 0x0000047bu, 0x0000047au, 0x0003003eu, 0x00000471u, - 0x0000047bu, 0x0004003du, 0x00000006u, 0x0000047du, 0x00000471u, 0x0004003du, 0x00000006u, 0x0000047eu, - 0x00000461u, 0x00050082u, 0x00000006u, 0x0000047fu, 0x0000047du, 0x0000047eu, 0x0003003eu, 0x0000047cu, - 0x0000047fu, 0x0004003du, 0x00000006u, 0x00000480u, 0x0000047cu, 0x000500aau, 0x0000001cu, 0x00000481u, - 0x00000480u, 0x00000040u, 0x000300f7u, 0x00000483u, 0x00000000u, 0x000400fau, 0x00000481u, 0x00000482u, - 0x00000483u, 0x000200f8u, 0x00000482u, 0x0003003eu, 0x000003ebu, 0x000003f2u, 0x000200f9u, 0x00000483u, - 0x000200f8u, 0x00000483u, 0x0003003eu, 0x00000484u, 0x00000040u, 0x0004003du, 0x00000006u, 0x00000485u, - 0x000003f3u, 0x000500acu, 0x0000001cu, 0x00000486u, 0x00000485u, 0x00000040u, 0x000300f7u, 0x00000488u, - 0x00000000u, 0x000400fau, 0x00000486u, 0x00000487u, 0x00000488u, 0x000200f8u, 0x00000487u, 0x00050041u, - 0x00000008u, 0x00000489u, 0x00000389u, 0x000001c3u, 0x0004003du, 0x00000006u, 0x0000048au, 0x00000489u, - 0x00050041u, 0x00000008u, 0x0000048bu, 0x000003a1u, 0x000001c3u, 0x0004003du, 0x00000006u, 0x0000048cu, - 0x0000048bu, 0x00050080u, 0x00000006u, 0x0000048du, 0x0000048au, 0x0000048cu, 0x0004003du, 0x00000006u, - 0x0000048eu, 0x000003f3u, 0x00050080u, 0x00000006u, 0x0000048fu, 0x0000048du, 0x0000048eu, 0x00050082u, - 0x00000006u, 0x00000490u, 0x0000048fu, 0x00000007u, 0x00060041u, 0x000003d6u, 0x00000491u, 0x000003ccu, - 0x000000e6u, 0x00000490u, 0x0004003du, 0x00000014u, 0x00000492u, 0x00000491u, 0x0004007cu, 0x00000006u, - 0x00000493u, 0x00000492u, 0x0003003eu, 0x00000484u, 0x00000493u, 0x000200f9u, 0x00000488u, 0x000200f8u, - 0x00000488u, 0x00050041u, 0x00000008u, 0x00000495u, 0x00000389u, 0x000001c3u, 0x0004003du, 0x00000006u, - 0x00000496u, 0x00000495u, 0x00050041u, 0x00000008u, 0x00000497u, 0x000003a1u, 0x000001c3u, 0x0004003du, - 0x00000006u, 0x00000498u, 0x00000497u, 0x00050080u, 0x00000006u, 0x00000499u, 0x00000496u, 0x00000498u, - 0x0004003du, 0x00000006u, 0x0000049au, 0x000003f3u, 0x00050080u, 0x00000006u, 0x0000049bu, 0x00000499u, - 0x0000049au, 0x00060041u, 0x000003d6u, 0x0000049cu, 0x000003ccu, 0x000000e6u, 0x0000049bu, 0x0004003du, - 0x00000014u, 0x0000049du, 0x0000049cu, 0x0004007cu, 0x00000006u, 0x0000049eu, 0x0000049du, 0x0003003eu, - 0x00000494u, 0x0000049eu, 0x0004003du, 0x00000006u, 0x000004a0u, 0x00000494u, 0x0004003du, 0x00000006u, - 0x000004a1u, 0x00000484u, 0x00050082u, 0x00000006u, 0x000004a2u, 0x000004a0u, 0x000004a1u, 0x0003003eu, - 0x0000049fu, 0x000004a2u, 0x00050041u, 0x00000008u, 0x000004a4u, 0x0000037bu, 0x00000114u, 0x0004003du, - 0x00000006u, 0x000004a5u, 0x000004a4u, 0x00060041u, 0x000004a6u, 0x000004a7u, 0x00000408u, 0x000000e6u, - 0x000004a5u, 0x0004003du, 0x00000404u, 0x000004a8u, 0x000004a7u, 0x00040190u, 0x0000002du, 0x000004a9u, - 0x000004a8u, 0x0003003eu, 0x000004a3u, 0x000004a9u, 0x0004003du, 0x00000006u, 0x000004abu, 0x0000036bu, - 0x00060041u, 0x00000419u, 0x000004acu, 0x00000417u, 0x000000e6u, 0x000004abu, 0x0004003du, 0x00000413u, - 0x000004adu, 0x000004acu, 0x00040190u, 0x00000026u, 0x000004aeu, 0x000004adu, 0x0003003eu, 0x000004aau, - 0x000004aeu, 0x0003003eu, 0x000004afu, 0x00000040u, 0x00050041u, 0x000003f7u, 0x000004b0u, 0x000000e1u, - 0x000001ddu, 0x0004003du, 0x00000009u, 0x000004b1u, 0x000004b0u, 0x000500bau, 0x0000001cu, 0x000004b2u, - 0x000004b1u, 0x00000062u, 0x000300f7u, 0x000004b4u, 0x00000000u, 0x000400fau, 0x000004b2u, 0x000004b3u, - 0x000004b4u, 0x000200f8u, 0x000004b3u, 0x00050041u, 0x00000008u, 0x000004b6u, 0x00000389u, 0x000000e2u, - 0x0004003du, 0x00000006u, 0x000004b7u, 0x000004b6u, 0x00050041u, 0x00000008u, 0x000004b8u, 0x000003a1u, - 0x000001d2u, 0x0004003du, 0x00000006u, 0x000004b9u, 0x000004b8u, 0x00050080u, 0x00000006u, 0x000004bau, - 0x000004b7u, 0x000004b9u, 0x0004003du, 0x00000006u, 0x000004bbu, 0x00000484u, 0x00050080u, 0x00000006u, - 0x000004bcu, 0x000004bau, 0x000004bbu, 0x0003003eu, 0x000004b5u, 0x000004bcu, 0x00050041u, 0x00000008u, - 0x000004beu, 0x00000389u, 0x000001d2u, 0x0004003du, 0x00000006u, 0x000004bfu, 0x000004beu, 0x00050041u, - 0x00000008u, 0x000004c0u, 0x000003a1u, 0x000001ddu, 0x0004003du, 0x00000006u, 0x000004c1u, 0x000004c0u, - 0x00050080u, 0x00000006u, 0x000004c2u, 0x000004bfu, 0x000004c1u, 0x0004003du, 0x00000006u, 0x000004c3u, - 0x00000461u, 0x00050080u, 0x00000006u, 0x000004c4u, 0x000004c2u, 0x000004c3u, 0x0003003eu, 0x000004bdu, - 0x000004c4u, 0x0004003du, 0x00000006u, 0x000004c6u, 0x0000047cu, 0x0007000cu, 0x00000006u, 0x000004c7u, - 0x00000001u, 0x00000026u, 0x000004c6u, 0x00000077u, 0x0003003eu, 0x000004c5u, 0x000004c7u, 0x0003003eu, - 0x000004c8u, 0x00000040u, 0x000200f9u, 0x000004c9u, 0x000200f8u, 0x000004c9u, 0x000400f6u, 0x000004cbu, - 0x000004ccu, 0x00000000u, 0x000200f9u, 0x000004cdu, 0x000200f8u, 0x000004cdu, 0x0004003du, 0x00000006u, - 0x000004ceu, 0x000004c8u, 0x0004003du, 0x00000006u, 0x000004cfu, 0x000004c5u, 0x000500b0u, 0x0000001cu, - 0x000004d0u, 0x000004ceu, 0x000004cfu, 0x000400fau, 0x000004d0u, 0x000004cau, 0x000004cbu, 0x000200f8u, - 0x000004cau, 0x0004003du, 0x00000006u, 0x000004d7u, 0x000004bdu, 0x0004003du, 0x00000006u, 0x000004d8u, - 0x000004c8u, 0x00050080u, 0x00000006u, 0x000004d9u, 0x000004d7u, 0x000004d8u, 0x00060041u, 0x000004dau, - 0x000004dbu, 0x000004d6u, 0x000000e6u, 0x000004d9u, 0x0004003du, 0x00000353u, 0x000004dcu, 0x000004dbu, - 0x0003003eu, 0x000004d2u, 0x000004dcu, 0x0004003du, 0x00000006u, 0x000004e5u, 0x000004b5u, 0x00050041u, - 0x00000008u, 0x000004e6u, 0x000004d2u, 0x00000040u, 0x0004003du, 0x00000006u, 0x000004e7u, 0x000004e6u, - 0x00050080u, 0x00000006u, 0x000004e8u, 0x000004e5u, 0x000004e7u, 0x00060041u, 0x000004e9u, 0x000004eau, - 0x000004e4u, 0x000000e6u, 0x000004e8u, 0x0004003du, 0x000004e0u, 0x000004ebu, 0x000004eau, 0x00040190u, - 0x000004ddu, 0x000004ecu, 0x000004ebu, 0x0003003eu, 0x000004dfu, 0x000004ecu, 0x0004003du, 0x00000006u, - 0x000004eeu, 0x000004b5u, 0x00050041u, 0x00000008u, 0x000004efu, 0x000004d2u, 0x00000007u, 0x0004003du, - 0x00000006u, 0x000004f0u, 0x000004efu, 0x00050080u, 0x00000006u, 0x000004f1u, 0x000004eeu, 0x000004f0u, - 0x00060041u, 0x000004e9u, 0x000004f2u, 0x000004e4u, 0x000000e6u, 0x000004f1u, 0x0004003du, 0x000004e0u, - 0x000004f3u, 0x000004f2u, 0x00040190u, 0x000004ddu, 0x000004f4u, 0x000004f3u, 0x0003003eu, 0x000004edu, - 0x000004f4u, 0x0004003du, 0x00000006u, 0x000004f6u, 0x000004b5u, 0x00050041u, 0x00000008u, 0x000004f7u, - 0x000004d2u, 0x00000053u, 0x0004003du, 0x00000006u, 0x000004f8u, 0x000004f7u, 0x00050080u, 0x00000006u, - 0x000004f9u, 0x000004f6u, 0x000004f8u, 0x00060041u, 0x000004e9u, 0x000004fau, 0x000004e4u, 0x000000e6u, - 0x000004f9u, 0x0004003du, 0x000004e0u, 0x000004fbu, 0x000004fau, 0x00040190u, 0x000004ddu, 0x000004fcu, - 0x000004fbu, 0x0003003eu, 0x000004f5u, 0x000004fcu, 0x00050041u, 0x00000036u, 0x000004feu, 0x000004dfu, - 0x000000e6u, 0x0004003du, 0x00000009u, 0x000004ffu, 0x000004feu, 0x00050041u, 0x00000036u, 0x00000500u, - 0x000004dfu, 0x00000114u, 0x0004003du, 0x00000009u, 0x00000501u, 0x00000500u, 0x00050041u, 0x00000036u, - 0x00000502u, 0x000004dfu, 0x00000123u, 0x0004003du, 0x00000009u, 0x00000503u, 0x00000502u, 0x00060050u, - 0x0000000au, 0x00000504u, 0x000004ffu, 0x00000501u, 0x00000503u, 0x0003003eu, 0x000004fdu, 0x00000504u, - 0x00050041u, 0x00000036u, 0x00000506u, 0x000004edu, 0x000000e6u, 0x0004003du, 0x00000009u, 0x00000507u, - 0x00000506u, 0x00050041u, 0x00000036u, 0x00000508u, 0x000004edu, 0x00000114u, 0x0004003du, 0x00000009u, - 0x00000509u, 0x00000508u, 0x00050041u, 0x00000036u, 0x0000050au, 0x000004edu, 0x00000123u, 0x0004003du, - 0x00000009u, 0x0000050bu, 0x0000050au, 0x00060050u, 0x0000000au, 0x0000050cu, 0x00000507u, 0x00000509u, - 0x0000050bu, 0x0003003eu, 0x00000505u, 0x0000050cu, 0x00050041u, 0x00000036u, 0x0000050eu, 0x000004f5u, - 0x000000e6u, 0x0004003du, 0x00000009u, 0x0000050fu, 0x0000050eu, 0x00050041u, 0x00000036u, 0x00000510u, - 0x000004f5u, 0x00000114u, 0x0004003du, 0x00000009u, 0x00000511u, 0x00000510u, 0x00050041u, 0x00000036u, - 0x00000512u, 0x000004f5u, 0x00000123u, 0x0004003du, 0x00000009u, 0x00000513u, 0x00000512u, 0x00060050u, - 0x0000000au, 0x00000514u, 0x0000050fu, 0x00000511u, 0x00000513u, 0x0003003eu, 0x0000050du, 0x00000514u, - 0x0004003du, 0x00000006u, 0x00000515u, 0x000004afu, 0x0004003du, 0x0000000au, 0x00000517u, 0x000004fdu, - 0x0003003eu, 0x00000516u, 0x00000517u, 0x0004003du, 0x0000000au, 0x00000519u, 0x00000505u, 0x0003003eu, - 0x00000518u, 0x00000519u, 0x0004003du, 0x00000026u, 0x0000051bu, 0x000004aau, 0x0003003eu, 0x0000051au, - 0x0000051bu, 0x0004003du, 0x0000002du, 0x0000051du, 0x000004a3u, 0x0003003eu, 0x0000051cu, 0x0000051du, - 0x00050041u, 0x000003f7u, 0x0000051fu, 0x000000e1u, 0x000001ddu, 0x0004003du, 0x00000009u, 0x00000520u, - 0x0000051fu, 0x0003003eu, 0x0000051eu, 0x00000520u, 0x00090039u, 0x00000006u, 0x00000521u, 0x0000003du, - 0x00000516u, 0x00000518u, 0x0000051au, 0x0000051cu, 0x0000051eu, 0x0007000cu, 0x00000006u, 0x00000522u, - 0x00000001u, 0x00000029u, 0x00000515u, 0x00000521u, 0x0003003eu, 0x000004afu, 0x00000522u, 0x0004003du, - 0x00000006u, 0x00000523u, 0x000004afu, 0x0004003du, 0x0000000au, 0x00000525u, 0x00000505u, 0x0003003eu, - 0x00000524u, 0x00000525u, 0x0004003du, 0x0000000au, 0x00000527u, 0x0000050du, 0x0003003eu, 0x00000526u, - 0x00000527u, 0x0004003du, 0x00000026u, 0x00000529u, 0x000004aau, 0x0003003eu, 0x00000528u, 0x00000529u, - 0x0004003du, 0x0000002du, 0x0000052bu, 0x000004a3u, 0x0003003eu, 0x0000052au, 0x0000052bu, 0x00050041u, - 0x000003f7u, 0x0000052du, 0x000000e1u, 0x000001ddu, 0x0004003du, 0x00000009u, 0x0000052eu, 0x0000052du, - 0x0003003eu, 0x0000052cu, 0x0000052eu, 0x00090039u, 0x00000006u, 0x0000052fu, 0x0000003du, 0x00000524u, - 0x00000526u, 0x00000528u, 0x0000052au, 0x0000052cu, 0x0007000cu, 0x00000006u, 0x00000530u, 0x00000001u, - 0x00000029u, 0x00000523u, 0x0000052fu, 0x0003003eu, 0x000004afu, 0x00000530u, 0x0004003du, 0x00000006u, - 0x00000531u, 0x000004afu, 0x0004003du, 0x0000000au, 0x00000533u, 0x0000050du, 0x0003003eu, 0x00000532u, - 0x00000533u, 0x0004003du, 0x0000000au, 0x00000535u, 0x000004fdu, 0x0003003eu, 0x00000534u, 0x00000535u, - 0x0004003du, 0x00000026u, 0x00000537u, 0x000004aau, 0x0003003eu, 0x00000536u, 0x00000537u, 0x0004003du, - 0x0000002du, 0x00000539u, 0x000004a3u, 0x0003003eu, 0x00000538u, 0x00000539u, 0x00050041u, 0x000003f7u, - 0x0000053bu, 0x000000e1u, 0x000001ddu, 0x0004003du, 0x00000009u, 0x0000053cu, 0x0000053bu, 0x0003003eu, - 0x0000053au, 0x0000053cu, 0x00090039u, 0x00000006u, 0x0000053du, 0x0000003du, 0x00000532u, 0x00000534u, - 0x00000536u, 0x00000538u, 0x0000053au, 0x0007000cu, 0x00000006u, 0x0000053eu, 0x00000001u, 0x00000029u, - 0x00000531u, 0x0000053du, 0x0003003eu, 0x000004afu, 0x0000053eu, 0x000200f9u, 0x000004ccu, 0x000200f8u, - 0x000004ccu, 0x0004003du, 0x00000006u, 0x0000053fu, 0x000004c8u, 0x00050080u, 0x00000006u, 0x00000540u, - 0x0000053fu, 0x00000114u, 0x0003003eu, 0x000004c8u, 0x00000540u, 0x000200f9u, 0x000004c9u, 0x000200f8u, - 0x000004cbu, 0x0004003du, 0x00000006u, 0x00000541u, 0x000004afu, 0x0007000cu, 0x00000006u, 0x00000542u, - 0x00000001u, 0x00000026u, 0x00000541u, 0x0000005du, 0x0003003eu, 0x000004afu, 0x00000542u, 0x000200f9u, - 0x000004b4u, 0x000200f8u, 0x000004b4u, 0x0004003du, 0x00000006u, 0x00000543u, 0x000004afu, 0x000500aau, - 0x0000001cu, 0x00000544u, 0x00000543u, 0x00000040u, 0x0004003du, 0x00000006u, 0x00000545u, 0x0000049fu, - 0x000500b2u, 0x0000001cu, 0x00000547u, 0x00000545u, 0x00000546u, 0x000500a7u, 0x0000001cu, 0x00000548u, - 0x00000544u, 0x00000547u, 0x000300f7u, 0x0000054au, 0x00000000u, 0x000400fau, 0x00000548u, 0x00000549u, - 0x0000054cu, 0x000200f8u, 0x00000549u, 0x0003003eu, 0x0000054bu, 0x00000007u, 0x000200f9u, 0x0000054au, - 0x000200f8u, 0x0000054cu, 0x0004003du, 0x00000006u, 0x0000054du, 0x000004afu, 0x000500aau, 0x0000001cu, - 0x0000054eu, 0x0000054du, 0x00000040u, 0x000300f7u, 0x00000550u, 0x00000000u, 0x000400fau, 0x0000054eu, - 0x0000054fu, 0x00000552u, 0x000200f8u, 0x0000054fu, 0x0003003eu, 0x00000551u, 0x00000077u, 0x000200f9u, - 0x00000550u, 0x000200f8u, 0x00000552u, 0x0004003du, 0x00000006u, 0x00000553u, 0x000004afu, 0x000500aau, - 0x0000001cu, 0x00000554u, 0x00000553u, 0x00000007u, 0x000300f7u, 0x00000556u, 0x00000000u, 0x000400fau, - 0x00000554u, 0x00000555u, 0x00000557u, 0x000200f8u, 0x00000555u, 0x0003003eu, 0x00000551u, 0x00000450u, - 0x000200f9u, 0x00000556u, 0x000200f8u, 0x00000557u, 0x0004003du, 0x00000006u, 0x00000558u, 0x000004afu, - 0x000500aau, 0x0000001cu, 0x00000559u, 0x00000558u, 0x00000053u, 0x000300f7u, 0x0000055bu, 0x00000000u, - 0x000400fau, 0x00000559u, 0x0000055au, 0x0000055cu, 0x000200f8u, 0x0000055au, 0x0003003eu, 0x00000551u, - 0x00000053u, 0x000200f9u, 0x0000055bu, 0x000200f8u, 0x0000055cu, 0x0003003eu, 0x00000551u, 0x00000007u, - 0x000200f9u, 0x0000055bu, 0x000200f8u, 0x0000055bu, 0x000200f9u, 0x00000556u, 0x000200f8u, 0x00000556u, - 0x000200f9u, 0x00000550u, 0x000200f8u, 0x00000550u, 0x0004003du, 0x00000006u, 0x0000055du, 0x0000047cu, - 0x0004003du, 0x00000006u, 0x0000055eu, 0x00000551u, 0x00050080u, 0x00000006u, 0x0000055fu, 0x0000055du, - 0x0000055eu, 0x00050082u, 0x00000006u, 0x00000560u, 0x0000055fu, 0x00000007u, 0x0004003du, 0x00000006u, - 0x00000561u, 0x00000551u, 0x00050086u, 0x00000006u, 0x00000562u, 0x00000560u, 0x00000561u, 0x0003003eu, - 0x0000054bu, 0x00000562u, 0x0004003du, 0x00000006u, 0x00000563u, 0x0000054bu, 0x0007000cu, 0x00000006u, - 0x00000564u, 0x00000001u, 0x00000029u, 0x00000563u, 0x00000007u, 0x0003003eu, 0x0000054bu, 0x00000564u, - 0x000200f9u, 0x0000054au, 0x000200f8u, 0x0000054au, 0x0004003du, 0x0000001cu, 0x00000565u, 0x000003ebu, - 0x0004003du, 0x00000006u, 0x00000566u, 0x0000054bu, 0x000600a9u, 0x00000006u, 0x00000567u, 0x00000565u, - 0x00000040u, 0x00000566u, 0x0003003eu, 0x00000351u, 0x00000567u, 0x0004003du, 0x00000006u, 0x0000056bu, - 0x0000036bu, 0x00050041u, 0x0000056cu, 0x0000056du, 0x0000056au, 0x000000e6u, 0x0003003eu, 0x0000056du, - 0x0000056bu, 0x0004003du, 0x00000006u, 0x0000056eu, 0x00000365u, 0x00050041u, 0x0000056cu, 0x0000056fu, - 0x0000056au, 0x00000114u, 0x0003003eu, 0x0000056fu, 0x0000056eu, 0x0004003du, 0x00000006u, 0x00000570u, - 0x000003f3u, 0x00050041u, 0x0000056cu, 0x00000571u, 0x0000056au, 0x00000123u, 0x0003003eu, 0x00000571u, - 0x00000570u, 0x0004003du, 0x00000006u, 0x00000572u, 0x0000047cu, 0x00050041u, 0x0000056cu, 0x00000573u, - 0x0000056au, 0x00000162u, 0x0003003eu, 0x00000573u, 0x00000572u, 0x0004003du, 0x00000006u, 0x00000574u, - 0x0000049fu, 0x00050041u, 0x0000056cu, 0x00000575u, 0x0000056au, 0x000001b4u, 0x0003003eu, 0x00000575u, - 0x00000574u, 0x0004003du, 0x00000006u, 0x00000576u, 0x000004afu, 0x00050041u, 0x0000056cu, 0x00000577u, - 0x0000056au, 0x000001b7u, 0x0003003eu, 0x00000577u, 0x00000576u, 0x00050041u, 0x00000008u, 0x00000579u, - 0x000003a1u, 0x000001b4u, 0x0004003du, 0x00000006u, 0x0000057au, 0x00000579u, 0x0003003eu, 0x00000578u, - 0x0000057au, 0x00050039u, 0x0000000au, 0x0000057bu, 0x00000010u, 0x00000578u, 0x00050041u, 0x0000057cu, - 0x0000057du, 0x0000056au, 0x000001bdu, 0x0003003eu, 0x0000057du, 0x0000057bu, 0x00050041u, 0x00000008u, - 0x0000057eu, 0x0000037bu, 0x00000162u, 0x0004003du, 0x00000006u, 0x0000057fu, 0x0000057eu, 0x000500aau, - 0x0000001cu, 0x00000580u, 0x0000057fu, 0x00000007u, 0x000600a9u, 0x00000009u, 0x00000581u, 0x00000580u, - 0x00000059u, 0x00000062u, 0x00050041u, 0x00000582u, 0x00000583u, 0x0000056au, 0x000001c3u, 0x0003003eu, - 0x00000583u, 0x00000581u, 0x0004003du, 0x00000006u, 0x00000584u, 0x00000351u, 0x000514aeu, 0x00000584u, - 0x00000007u, 0x00000007u, 0x0000056au, 0x00010038u, 0x00050036u, 0x0000000au, 0x0000000du, 0x00000000u, - 0x0000000bu, 0x00030037u, 0x00000008u, 0x0000000cu, 0x000200f8u, 0x0000000eu, 0x0004003du, 0x00000006u, - 0x0000003fu, 0x0000000cu, 0x000500aau, 0x0000001cu, 0x00000041u, 0x0000003fu, 0x00000040u, 0x000300f7u, - 0x00000043u, 0x00000000u, 0x000400fau, 0x00000041u, 0x00000042u, 0x00000043u, 0x000200f8u, 0x00000042u, - 0x000200feu, 0x00000047u, 0x000200f8u, 0x00000043u, 0x0004003du, 0x00000006u, 0x00000049u, 0x0000000cu, - 0x000500aau, 0x0000001cu, 0x0000004au, 0x00000049u, 0x00000007u, 0x000300f7u, 0x0000004cu, 0x00000000u, - 0x000400fau, 0x0000004au, 0x0000004bu, 0x0000004cu, 0x000200f8u, 0x0000004bu, 0x000200feu, 0x00000050u, - 0x000200f8u, 0x0000004cu, 0x0004003du, 0x00000006u, 0x00000052u, 0x0000000cu, 0x000500aau, 0x0000001cu, - 0x00000054u, 0x00000052u, 0x00000053u, 0x000300f7u, 0x00000056u, 0x00000000u, 0x000400fau, 0x00000054u, - 0x00000055u, 0x00000056u, 0x000200f8u, 0x00000055u, 0x000200feu, 0x0000005au, 0x000200f8u, 0x00000056u, - 0x0004003du, 0x00000006u, 0x0000005cu, 0x0000000cu, 0x000500aau, 0x0000001cu, 0x0000005eu, 0x0000005cu, - 0x0000005du, 0x000300f7u, 0x00000060u, 0x00000000u, 0x000400fau, 0x0000005eu, 0x0000005fu, 0x00000060u, - 0x000200f8u, 0x0000005fu, 0x000200feu, 0x00000063u, 0x000200f8u, 0x00000060u, 0x0004003du, 0x00000006u, - 0x00000065u, 0x0000000cu, 0x000500aau, 0x0000001cu, 0x00000067u, 0x00000065u, 0x00000066u, 0x000300f7u, - 0x00000069u, 0x00000000u, 0x000400fau, 0x00000067u, 0x00000068u, 0x00000069u, 0x000200f8u, 0x00000068u, - 0x000200feu, 0x0000006au, 0x000200f8u, 0x00000069u, 0x0004003du, 0x00000006u, 0x0000006cu, 0x0000000cu, - 0x000500aau, 0x0000001cu, 0x0000006eu, 0x0000006cu, 0x0000006du, 0x000300f7u, 0x00000070u, 0x00000000u, - 0x000400fau, 0x0000006eu, 0x0000006fu, 0x00000070u, 0x000200f8u, 0x0000006fu, 0x000200feu, 0x00000074u, - 0x000200f8u, 0x00000070u, 0x0004003du, 0x00000006u, 0x00000076u, 0x0000000cu, 0x000500aau, 0x0000001cu, - 0x00000078u, 0x00000076u, 0x00000077u, 0x000300f7u, 0x0000007au, 0x00000000u, 0x000400fau, 0x00000078u, - 0x00000079u, 0x0000007au, 0x000200f8u, 0x00000079u, 0x000200feu, 0x0000007du, 0x000200f8u, 0x0000007au, - 0x0004003du, 0x00000006u, 0x0000007fu, 0x0000000cu, 0x000500aau, 0x0000001cu, 0x00000081u, 0x0000007fu, - 0x00000080u, 0x000300f7u, 0x00000083u, 0x00000000u, 0x000400fau, 0x00000081u, 0x00000082u, 0x00000083u, - 0x000200f8u, 0x00000082u, 0x000200feu, 0x00000087u, 0x000200f8u, 0x00000083u, 0x0004003du, 0x00000006u, - 0x00000089u, 0x0000000cu, 0x000500aau, 0x0000001cu, 0x0000008bu, 0x00000089u, 0x0000008au, 0x000300f7u, - 0x0000008du, 0x00000000u, 0x000400fau, 0x0000008bu, 0x0000008cu, 0x0000008du, 0x000200f8u, 0x0000008cu, - 0x000200feu, 0x00000050u, 0x000200f8u, 0x0000008du, 0x0004003du, 0x00000006u, 0x0000008fu, 0x0000000cu, - 0x000500aau, 0x0000001cu, 0x00000091u, 0x0000008fu, 0x00000090u, 0x000300f7u, 0x00000093u, 0x00000000u, - 0x000400fau, 0x00000091u, 0x00000092u, 0x00000093u, 0x000200f8u, 0x00000092u, 0x000200feu, 0x00000094u, - 0x000200f8u, 0x00000093u, 0x0004003du, 0x00000006u, 0x00000096u, 0x0000000cu, 0x000500aau, 0x0000001cu, - 0x00000098u, 0x00000096u, 0x00000097u, 0x000300f7u, 0x0000009au, 0x00000000u, 0x000400fau, 0x00000098u, - 0x00000099u, 0x0000009au, 0x000200f8u, 0x00000099u, 0x000200feu, 0x0000009du, 0x000200f8u, 0x0000009au, - 0x0004003du, 0x00000006u, 0x0000009fu, 0x0000000cu, 0x000500aau, 0x0000001cu, 0x000000a1u, 0x0000009fu, - 0x000000a0u, 0x000300f7u, 0x000000a3u, 0x00000000u, 0x000400fau, 0x000000a1u, 0x000000a2u, 0x000000a3u, - 0x000200f8u, 0x000000a2u, 0x000200feu, 0x000000a6u, 0x000200f8u, 0x000000a3u, 0x0004003du, 0x00000006u, - 0x000000a8u, 0x0000000cu, 0x000500aau, 0x0000001cu, 0x000000aau, 0x000000a8u, 0x000000a9u, 0x000300f7u, - 0x000000acu, 0x00000000u, 0x000400fau, 0x000000aau, 0x000000abu, 0x000000acu, 0x000200f8u, 0x000000abu, - 0x000200feu, 0x000000aeu, 0x000200f8u, 0x000000acu, 0x0004003du, 0x00000006u, 0x000000b0u, 0x0000000cu, - 0x000500aau, 0x0000001cu, 0x000000b2u, 0x000000b0u, 0x000000b1u, 0x000300f7u, 0x000000b4u, 0x00000000u, - 0x000400fau, 0x000000b2u, 0x000000b3u, 0x000000b4u, 0x000200f8u, 0x000000b3u, 0x000200feu, 0x000000b5u, - 0x000200f8u, 0x000000b4u, 0x0004003du, 0x00000006u, 0x000000b7u, 0x0000000cu, 0x000500aau, 0x0000001cu, - 0x000000b9u, 0x000000b7u, 0x000000b8u, 0x000300f7u, 0x000000bbu, 0x00000000u, 0x000400fau, 0x000000b9u, - 0x000000bau, 0x000000bbu, 0x000200f8u, 0x000000bau, 0x000200feu, 0x000000bcu, 0x000200f8u, 0x000000bbu, - 0x0004003du, 0x00000006u, 0x000000beu, 0x0000000cu, 0x000500aau, 0x0000001cu, 0x000000c0u, 0x000000beu, - 0x000000bfu, 0x000300f7u, 0x000000c2u, 0x00000000u, 0x000400fau, 0x000000c0u, 0x000000c1u, 0x000000c2u, - 0x000200f8u, 0x000000c1u, 0x000200feu, 0x000000bcu, 0x000200f8u, 0x000000c2u, 0x0004003du, 0x00000006u, - 0x000000c4u, 0x0000000cu, 0x000500aau, 0x0000001cu, 0x000000c6u, 0x000000c4u, 0x000000c5u, 0x000300f7u, - 0x000000c8u, 0x00000000u, 0x000400fau, 0x000000c6u, 0x000000c7u, 0x000000c8u, 0x000200f8u, 0x000000c7u, - 0x000200feu, 0x000000c9u, 0x000200f8u, 0x000000c8u, 0x0004003du, 0x00000006u, 0x000000cbu, 0x0000000cu, - 0x000500aau, 0x0000001cu, 0x000000cdu, 0x000000cbu, 0x000000ccu, 0x000300f7u, 0x000000cfu, 0x00000000u, - 0x000400fau, 0x000000cdu, 0x000000ceu, 0x000000cfu, 0x000200f8u, 0x000000ceu, 0x000200feu, 0x000000c9u, - 0x000200f8u, 0x000000cfu, 0x0004003du, 0x00000006u, 0x000000d1u, 0x0000000cu, 0x000500aau, 0x0000001cu, - 0x000000d3u, 0x000000d1u, 0x000000d2u, 0x000300f7u, 0x000000d5u, 0x00000000u, 0x000400fau, 0x000000d3u, - 0x000000d4u, 0x000000d5u, 0x000200f8u, 0x000000d4u, 0x000200feu, 0x000000c9u, 0x000200f8u, 0x000000d5u, - 0x0004003du, 0x00000006u, 0x000000d7u, 0x0000000cu, 0x000500aau, 0x0000001cu, 0x000000d9u, 0x000000d7u, - 0x000000d8u, 0x000300f7u, 0x000000dbu, 0x00000000u, 0x000400fau, 0x000000d9u, 0x000000dau, 0x000000dbu, - 0x000200f8u, 0x000000dau, 0x000200feu, 0x000000bcu, 0x000200f8u, 0x000000dbu, 0x000200feu, 0x000000bcu, - 0x00010038u, 0x00050036u, 0x0000000au, 0x00000010u, 0x00000000u, 0x0000000bu, 0x00030037u, 0x00000008u, - 0x0000000fu, 0x000200f8u, 0x00000011u, 0x0004003bu, 0x000000f2u, 0x000000f3u, 0x00000007u, 0x0004003bu, - 0x00000008u, 0x00000104u, 0x00000007u, 0x00050041u, 0x000000e3u, 0x000000e4u, 0x000000e1u, 0x000000e2u, - 0x0004003du, 0x00000014u, 0x000000e5u, 0x000000e4u, 0x000500adu, 0x0000001cu, 0x000000e7u, 0x000000e5u, - 0x000000e6u, 0x000300f7u, 0x000000e9u, 0x00000000u, 0x000400fau, 0x000000e7u, 0x000000e8u, 0x000000e9u, - 0x000200f8u, 0x000000e8u, 0x0004003du, 0x00000006u, 0x000000eau, 0x0000000fu, 0x00050041u, 0x000000e3u, - 0x000000ebu, 0x000000e1u, 0x000000e2u, 0x0004003du, 0x00000014u, 0x000000ecu, 0x000000ebu, 0x0004007cu, - 0x00000006u, 0x000000edu, 0x000000ecu, 0x000500b0u, 0x0000001cu, 0x000000eeu, 0x000000eau, 0x000000edu, - 0x000200f9u, 0x000000e9u, 0x000200f8u, 0x000000e9u, 0x000700f5u, 0x0000001cu, 0x000000efu, 0x000000e7u, - 0x00000011u, 0x000000eeu, 0x000000e8u, 0x000300f7u, 0x000000f1u, 0x00000000u, 0x000400fau, 0x000000efu, - 0x000000f0u, 0x000000f1u, 0x000200f8u, 0x000000f0u, 0x0004003du, 0x00000006u, 0x000000f8u, 0x0000000fu, - 0x00060041u, 0x000000f9u, 0x000000fau, 0x000000f7u, 0x000000e6u, 0x000000f8u, 0x0004003du, 0x00000024u, - 0x000000fbu, 0x000000fau, 0x0003003eu, 0x000000f3u, 0x000000fbu, 0x00050041u, 0x00000036u, 0x000000fcu, - 0x000000f3u, 0x0000005du, 0x0004003du, 0x00000009u, 0x000000fdu, 0x000000fcu, 0x000500beu, 0x0000001cu, - 0x000000feu, 0x000000fdu, 0x00000062u, 0x000300f7u, 0x00000100u, 0x00000000u, 0x000400fau, 0x000000feu, - 0x000000ffu, 0x00000100u, 0x000200f8u, 0x000000ffu, 0x0004003du, 0x00000024u, 0x00000101u, 0x000000f3u, - 0x0008004fu, 0x0000000au, 0x00000102u, 0x00000101u, 0x00000101u, 0x00000000u, 0x00000001u, 0x00000002u, - 0x000200feu, 0x00000102u, 0x000200f8u, 0x00000100u, 0x000200f9u, 0x000000f1u, 0x000200f8u, 0x000000f1u, - 0x0004003du, 0x00000006u, 0x00000105u, 0x0000000fu, 0x0003003eu, 0x00000104u, 0x00000105u, 0x00050039u, - 0x0000000au, 0x00000106u, 0x0000000du, 0x00000104u, 0x000200feu, 0x00000106u, 0x00010038u, 0x00050036u, - 0x00000014u, 0x00000019u, 0x00000000u, 0x00000015u, 0x00030037u, 0x00000008u, 0x00000016u, 0x00030037u, - 0x00000008u, 0x00000017u, 0x00030037u, 0x00000013u, 0x00000018u, 0x000200f8u, 0x0000001au, 0x0004003bu, - 0x0000010fu, 0x00000110u, 0x00000007u, 0x0004003bu, 0x0000010fu, 0x00000111u, 0x00000007u, 0x0004003bu, - 0x0000010fu, 0x00000116u, 0x00000007u, 0x0004003bu, 0x0000010fu, 0x0000011fu, 0x00000007u, 0x0004003bu, - 0x00000013u, 0x00000125u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000109u, 0x00000017u, 0x000500aau, - 0x0000001cu, 0x0000010au, 0x00000109u, 0x00000040u, 0x000300f7u, 0x0000010cu, 0x00000000u, 0x000400fau, - 0x0000010au, 0x0000010bu, 0x0000010cu, 0x000200f8u, 0x0000010bu, 0x000200feu, 0x0000010du, 0x000200f8u, - 0x0000010cu, 0x0003003eu, 0x00000110u, 0x000000e6u, 0x0004003du, 0x00000006u, 0x00000112u, 0x00000017u, - 0x0004007cu, 0x00000014u, 0x00000113u, 0x00000112u, 0x00050082u, 0x00000014u, 0x00000115u, 0x00000113u, - 0x00000114u, 0x0003003eu, 0x00000111u, 0x00000115u, 0x0003003eu, 0x00000116u, 0x0000010du, 0x000200f9u, - 0x00000117u, 0x000200f8u, 0x00000117u, 0x000400f6u, 0x00000119u, 0x0000011au, 0x00000000u, 0x000200f9u, - 0x0000011bu, 0x000200f8u, 0x0000011bu, 0x0004003du, 0x00000014u, 0x0000011cu, 0x00000110u, 0x0004003du, - 0x00000014u, 0x0000011du, 0x00000111u, 0x000500b3u, 0x0000001cu, 0x0000011eu, 0x0000011cu, 0x0000011du, - 0x000400fau, 0x0000011eu, 0x00000118u, 0x00000119u, 0x000200f8u, 0x00000118u, 0x0004003du, 0x00000014u, - 0x00000120u, 0x00000110u, 0x0004003du, 0x00000014u, 0x00000121u, 0x00000111u, 0x00050080u, 0x00000014u, - 0x00000122u, 0x00000120u, 0x00000121u, 0x00050087u, 0x00000014u, 0x00000124u, 0x00000122u, 0x00000123u, - 0x0003003eu, 0x0000011fu, 0x00000124u, 0x0004003du, 0x00000006u, 0x0000012au, 0x00000016u, 0x0004003du, - 0x00000014u, 0x0000012bu, 0x0000011fu, 0x0004007cu, 0x00000006u, 0x0000012cu, 0x0000012bu, 0x00050080u, - 0x00000006u, 0x0000012du, 0x0000012au, 0x0000012cu, 0x00060041u, 0x0000012eu, 0x0000012fu, 0x00000129u, - 0x000000e6u, 0x0000012du, 0x0004003du, 0x00000012u, 0x00000130u, 0x0000012fu, 0x0003003eu, 0x00000125u, - 0x00000130u, 0x0004003du, 0x00000012u, 0x00000131u, 0x00000125u, 0x0004003du, 0x00000012u, 0x00000132u, - 0x00000018u, 0x000500b3u, 0x0000001cu, 0x00000133u, 0x00000131u, 0x00000132u, 0x000300f7u, 0x00000135u, - 0x00000000u, 0x000400fau, 0x00000133u, 0x00000134u, 0x00000139u, 0x000200f8u, 0x00000134u, 0x0004003du, - 0x00000014u, 0x00000136u, 0x0000011fu, 0x0003003eu, 0x00000116u, 0x00000136u, 0x0004003du, 0x00000014u, - 0x00000137u, 0x0000011fu, 0x00050080u, 0x00000014u, 0x00000138u, 0x00000137u, 0x00000114u, 0x0003003eu, - 0x00000110u, 0x00000138u, 0x000200f9u, 0x00000135u, 0x000200f8u, 0x00000139u, 0x0004003du, 0x00000014u, - 0x0000013au, 0x0000011fu, 0x00050082u, 0x00000014u, 0x0000013bu, 0x0000013au, 0x00000114u, 0x0003003eu, - 0x00000111u, 0x0000013bu, 0x000200f9u, 0x00000135u, 0x000200f8u, 0x00000135u, 0x000200f9u, 0x0000011au, - 0x000200f8u, 0x0000011au, 0x000200f9u, 0x00000117u, 0x000200f8u, 0x00000119u, 0x0004003du, 0x00000014u, - 0x0000013cu, 0x00000116u, 0x000200feu, 0x0000013cu, 0x00010038u, 0x00050036u, 0x0000001cu, 0x00000022u, - 0x00000000u, 0x0000001du, 0x00030037u, 0x0000001bu, 0x0000001eu, 0x00030037u, 0x0000001bu, 0x0000001fu, - 0x00030037u, 0x0000001bu, 0x00000020u, 0x00030037u, 0x0000001bu, 0x00000021u, 0x000200f8u, 0x00000023u, - 0x0004003du, 0x0000000au, 0x0000013fu, 0x0000001eu, 0x0004003du, 0x0000000au, 0x00000140u, 0x00000021u, - 0x000500bcu, 0x00000141u, 0x00000142u, 0x0000013fu, 0x00000140u, 0x0004009bu, 0x0000001cu, 0x00000143u, - 0x00000142u, 0x000300f7u, 0x00000145u, 0x00000000u, 0x000400fau, 0x00000143u, 0x00000144u, 0x00000145u, - 0x000200f8u, 0x00000144u, 0x0004003du, 0x0000000au, 0x00000146u, 0x0000001fu, 0x0004003du, 0x0000000au, - 0x00000147u, 0x00000020u, 0x000500beu, 0x00000141u, 0x00000148u, 0x00000146u, 0x00000147u, 0x0004009bu, - 0x0000001cu, 0x00000149u, 0x00000148u, 0x000200f9u, 0x00000145u, 0x000200f8u, 0x00000145u, 0x000700f5u, - 0x0000001cu, 0x0000014au, 0x00000143u, 0x00000023u, 0x00000149u, 0x00000144u, 0x000200feu, 0x0000014au, - 0x00010038u, 0x00050036u, 0x0000000au, 0x0000002au, 0x00000000u, 0x00000028u, 0x00030037u, 0x00000027u, - 0x00000029u, 0x000200f8u, 0x0000002bu, 0x0004003bu, 0x0000014eu, 0x0000014fu, 0x00000007u, 0x00050041u, - 0x0000002cu, 0x00000150u, 0x00000029u, 0x000000e6u, 0x0004003du, 0x00000025u, 0x00000151u, 0x00000150u, - 0x00050051u, 0x00000024u, 0x00000152u, 0x00000151u, 0x00000000u, 0x0008004fu, 0x0000000au, 0x00000153u, - 0x00000152u, 0x00000152u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00050051u, 0x00000024u, 0x00000154u, - 0x00000151u, 0x00000001u, 0x0008004fu, 0x0000000au, 0x00000155u, 0x00000154u, 0x00000154u, 0x00000000u, - 0x00000001u, 0x00000002u, 0x00050051u, 0x00000024u, 0x00000156u, 0x00000151u, 0x00000002u, 0x0008004fu, - 0x0000000au, 0x00000157u, 0x00000156u, 0x00000156u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00060050u, - 0x0000014du, 0x00000158u, 0x00000153u, 0x00000155u, 0x00000157u, 0x0003003eu, 0x0000014fu, 0x00000158u, - 0x0004003du, 0x0000014du, 0x00000159u, 0x0000014fu, 0x00040054u, 0x0000014du, 0x0000015au, 0x00000159u, - 0x00050051u, 0x0000000au, 0x0000015bu, 0x0000015au, 0x00000000u, 0x0004007fu, 0x0000000au, 0x0000015cu, - 0x0000015bu, 0x00050051u, 0x0000000au, 0x0000015du, 0x0000015au, 0x00000001u, 0x0004007fu, 0x0000000au, - 0x0000015eu, 0x0000015du, 0x00050051u, 0x0000000au, 0x0000015fu, 0x0000015au, 0x00000002u, 0x0004007fu, - 0x0000000au, 0x00000160u, 0x0000015fu, 0x00060050u, 0x0000014du, 0x00000161u, 0x0000015cu, 0x0000015eu, - 0x00000160u, 0x00060041u, 0x000000f2u, 0x00000163u, 0x00000029u, 0x000000e6u, 0x00000162u, 0x0004003du, - 0x00000024u, 0x00000164u, 0x00000163u, 0x0008004fu, 0x0000000au, 0x00000165u, 0x00000164u, 0x00000164u, - 0x00000000u, 0x00000001u, 0x00000002u, 0x00050091u, 0x0000000au, 0x00000166u, 0x00000161u, 0x00000165u, - 0x000200feu, 0x00000166u, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000034u, 0x00000000u, 0x0000002fu, - 0x00030037u, 0x0000001bu, 0x00000030u, 0x00030037u, 0x0000001bu, 0x00000031u, 0x00030037u, 0x0000002cu, - 0x00000032u, 0x00030037u, 0x0000002eu, 0x00000033u, 0x000200f8u, 0x00000035u, 0x0004003bu, 0x0000001bu, - 0x00000169u, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x00000172u, 0x00000007u, 0x0004003bu, 0x0000001bu, - 0x0000017bu, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x00000181u, 0x00000007u, 0x0004003bu, 0x00000036u, - 0x0000018au, 0x00000007u, 0x0004003bu, 0x00000036u, 0x0000018fu, 0x00000007u, 0x0004003bu, 0x00000036u, - 0x00000193u, 0x00000007u, 0x0004003bu, 0x00000036u, 0x00000197u, 0x00000007u, 0x0004003bu, 0x00000036u, - 0x0000019cu, 0x00000007u, 0x0004003bu, 0x00000036u, 0x000001a6u, 0x00000007u, 0x0004003bu, 0x00000036u, - 0x000001acu, 0x00000007u, 0x0004003bu, 0x00000036u, 0x000001afu, 0x00000007u, 0x0004003bu, 0x00000036u, - 0x000001b3u, 0x00000007u, 0x0004003bu, 0x00000036u, 0x000001efu, 0x00000007u, 0x0004003bu, 0x00000036u, - 0x000001f3u, 0x00000007u, 0x0004003bu, 0x000001fbu, 0x000001fcu, 0x00000007u, 0x0004003bu, 0x000001fbu, - 0x00000201u, 0x00000007u, 0x0004003bu, 0x000001fbu, 0x0000021du, 0x00000007u, 0x0004003bu, 0x00000036u, - 0x00000225u, 0x00000007u, 0x0004003bu, 0x00000036u, 0x00000229u, 0x00000007u, 0x0004003bu, 0x00000036u, - 0x00000232u, 0x00000007u, 0x0004003bu, 0x00000036u, 0x00000237u, 0x00000007u, 0x0004003bu, 0x00000036u, - 0x0000023au, 0x00000007u, 0x0004003bu, 0x00000036u, 0x0000023eu, 0x00000007u, 0x0004003bu, 0x00000036u, - 0x00000272u, 0x00000007u, 0x0004003bu, 0x00000036u, 0x00000275u, 0x00000007u, 0x0004003bu, 0x000001fbu, - 0x0000027du, 0x00000007u, 0x0004003bu, 0x000001fbu, 0x00000282u, 0x00000007u, 0x0004003bu, 0x000001fbu, - 0x0000029au, 0x00000007u, 0x0004003bu, 0x00000036u, 0x000002a2u, 0x00000007u, 0x0004003bu, 0x00000036u, - 0x000002a6u, 0x00000007u, 0x0004003bu, 0x00000036u, 0x000002afu, 0x00000007u, 0x0004003bu, 0x00000036u, - 0x000002b4u, 0x00000007u, 0x0004003bu, 0x00000036u, 0x000002b7u, 0x00000007u, 0x0004003bu, 0x00000036u, - 0x000002bbu, 0x00000007u, 0x0004003bu, 0x00000036u, 0x000002efu, 0x00000007u, 0x0004003bu, 0x00000036u, - 0x000002f2u, 0x00000007u, 0x0004003bu, 0x000001fbu, 0x000002fau, 0x00000007u, 0x0004003bu, 0x000001fbu, - 0x000002ffu, 0x00000007u, 0x0004003bu, 0x000001fbu, 0x00000317u, 0x00000007u, 0x0004003bu, 0x000001fbu, - 0x0000031fu, 0x00000007u, 0x0004003bu, 0x00000036u, 0x00000324u, 0x00000007u, 0x0004003du, 0x00000025u, - 0x0000016au, 0x00000032u, 0x0004003du, 0x0000000au, 0x0000016bu, 0x00000030u, 0x00050051u, 0x00000009u, - 0x0000016cu, 0x0000016bu, 0x00000000u, 0x00050051u, 0x00000009u, 0x0000016du, 0x0000016bu, 0x00000001u, - 0x00050051u, 0x00000009u, 0x0000016eu, 0x0000016bu, 0x00000002u, 0x00070050u, 0x00000024u, 0x0000016fu, - 0x0000016cu, 0x0000016du, 0x0000016eu, 0x00000059u, 0x00050091u, 0x00000024u, 0x00000170u, 0x0000016au, - 0x0000016fu, 0x0008004fu, 0x0000000au, 0x00000171u, 0x00000170u, 0x00000170u, 0x00000000u, 0x00000001u, - 0x00000002u, 0x0003003eu, 0x00000169u, 0x00000171u, 0x0004003du, 0x00000025u, 0x00000173u, 0x00000032u, - 0x0004003du, 0x0000000au, 0x00000174u, 0x00000031u, 0x00050051u, 0x00000009u, 0x00000175u, 0x00000174u, - 0x00000000u, 0x00050051u, 0x00000009u, 0x00000176u, 0x00000174u, 0x00000001u, 0x00050051u, 0x00000009u, - 0x00000177u, 0x00000174u, 0x00000002u, 0x00070050u, 0x00000024u, 0x00000178u, 0x00000175u, 0x00000176u, - 0x00000177u, 0x00000059u, 0x00050091u, 0x00000024u, 0x00000179u, 0x00000173u, 0x00000178u, 0x0008004fu, - 0x0000000au, 0x0000017au, 0x00000179u, 0x00000179u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, - 0x00000172u, 0x0000017au, 0x0004003du, 0x0000000au, 0x0000017cu, 0x00000030u, 0x0004003du, 0x0000000au, - 0x0000017du, 0x00000031u, 0x00050081u, 0x0000000au, 0x0000017eu, 0x0000017cu, 0x0000017du, 0x0005008eu, - 0x0000000au, 0x00000180u, 0x0000017eu, 0x0000017fu, 0x0003003eu, 0x0000017bu, 0x00000180u, 0x0004003du, - 0x00000025u, 0x00000182u, 0x00000032u, 0x0004003du, 0x0000000au, 0x00000183u, 0x0000017bu, 0x00050051u, - 0x00000009u, 0x00000184u, 0x00000183u, 0x00000000u, 0x00050051u, 0x00000009u, 0x00000185u, 0x00000183u, - 0x00000001u, 0x00050051u, 0x00000009u, 0x00000186u, 0x00000183u, 0x00000002u, 0x00070050u, 0x00000024u, - 0x00000187u, 0x00000184u, 0x00000185u, 0x00000186u, 0x00000059u, 0x00050091u, 0x00000024u, 0x00000188u, - 0x00000182u, 0x00000187u, 0x0008004fu, 0x0000000au, 0x00000189u, 0x00000188u, 0x00000188u, 0x00000000u, - 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000181u, 0x00000189u, 0x00050041u, 0x00000036u, 0x0000018bu, - 0x00000169u, 0x00000053u, 0x0004003du, 0x00000009u, 0x0000018cu, 0x0000018bu, 0x0007000cu, 0x00000009u, - 0x0000018eu, 0x00000001u, 0x00000028u, 0x0000018cu, 0x0000018du, 0x0003003eu, 0x0000018au, 0x0000018eu, - 0x00050041u, 0x00000036u, 0x00000190u, 0x00000172u, 0x00000053u, 0x0004003du, 0x00000009u, 0x00000191u, - 0x00000190u, 0x0007000cu, 0x00000009u, 0x00000192u, 0x00000001u, 0x00000028u, 0x00000191u, 0x0000018du, - 0x0003003eu, 0x0000018fu, 0x00000192u, 0x00050041u, 0x00000036u, 0x00000194u, 0x00000181u, 0x00000053u, - 0x0004003du, 0x00000009u, 0x00000195u, 0x00000194u, 0x0007000cu, 0x00000009u, 0x00000196u, 0x00000001u, - 0x00000028u, 0x00000195u, 0x0000018du, 0x0003003eu, 0x00000193u, 0x00000196u, 0x0004003du, 0x0000000au, - 0x00000199u, 0x00000169u, 0x0007004fu, 0x00000198u, 0x0000019au, 0x00000199u, 0x00000199u, 0x00000000u, - 0x00000001u, 0x0006000cu, 0x00000009u, 0x0000019bu, 0x00000001u, 0x00000042u, 0x0000019au, 0x0003003eu, - 0x00000197u, 0x0000019bu, 0x0004003du, 0x0000000au, 0x0000019du, 0x00000169u, 0x0007004fu, 0x00000198u, - 0x0000019eu, 0x0000019du, 0x0000019du, 0x00000000u, 0x00000001u, 0x0004003du, 0x00000009u, 0x0000019fu, - 0x0000018au, 0x00050051u, 0x00000009u, 0x000001a0u, 0x0000019eu, 0x00000000u, 0x00050051u, 0x00000009u, - 0x000001a1u, 0x0000019eu, 0x00000001u, 0x00060050u, 0x0000000au, 0x000001a2u, 0x000001a0u, 0x000001a1u, - 0x0000019fu, 0x0006000cu, 0x00000009u, 0x000001a3u, 0x00000001u, 0x00000042u, 0x000001a2u, 0x00050081u, - 0x00000009u, 0x000001a5u, 0x000001a3u, 0x000001a4u, 0x0003003eu, 0x0000019cu, 0x000001a5u, 0x0004003du, - 0x00000009u, 0x000001a7u, 0x0000018au, 0x0004003du, 0x00000009u, 0x000001a8u, 0x0000019cu, 0x00050088u, - 0x00000009u, 0x000001a9u, 0x000001a7u, 0x000001a8u, 0x0008000cu, 0x00000009u, 0x000001abu, 0x00000001u, - 0x0000002bu, 0x000001a9u, 0x000001aau, 0x00000059u, 0x0003003eu, 0x000001a6u, 0x000001abu, 0x0004003du, - 0x00000009u, 0x000001adu, 0x000001a6u, 0x0006000cu, 0x00000009u, 0x000001aeu, 0x00000001u, 0x00000011u, - 0x000001adu, 0x0003003eu, 0x000001acu, 0x000001aeu, 0x0004003du, 0x00000009u, 0x000001b0u, 0x000001acu, - 0x0004003du, 0x00000009u, 0x000001b1u, 0x000001acu, 0x00050085u, 0x00000009u, 0x000001b2u, 0x000001b0u, - 0x000001b1u, 0x0003003eu, 0x000001afu, 0x000001b2u, 0x00050041u, 0x00000036u, 0x000001b5u, 0x00000033u, - 0x000001b4u, 0x0004003du, 0x00000009u, 0x000001b6u, 0x000001b5u, 0x00050041u, 0x00000036u, 0x000001b8u, - 0x00000033u, 0x000001b7u, 0x0004003du, 0x00000009u, 0x000001b9u, 0x000001b8u, 0x0004003du, 0x00000009u, - 0x000001bau, 0x000001acu, 0x00050085u, 0x00000009u, 0x000001bbu, 0x000001b9u, 0x000001bau, 0x00050081u, - 0x00000009u, 0x000001bcu, 0x000001b6u, 0x000001bbu, 0x00050041u, 0x00000036u, 0x000001beu, 0x00000033u, - 0x000001bdu, 0x0004003du, 0x00000009u, 0x000001bfu, 0x000001beu, 0x0004003du, 0x00000009u, 0x000001c0u, - 0x000001afu, 0x00050085u, 0x00000009u, 0x000001c1u, 0x000001bfu, 0x000001c0u, 0x00050081u, 0x00000009u, - 0x000001c2u, 0x000001bcu, 0x000001c1u, 0x00050041u, 0x00000036u, 0x000001c4u, 0x00000033u, 0x000001c3u, - 0x0004003du, 0x00000009u, 0x000001c5u, 0x000001c4u, 0x0004003du, 0x00000009u, 0x000001c6u, 0x000001afu, - 0x0004003du, 0x00000009u, 0x000001c7u, 0x000001acu, 0x00050085u, 0x00000009u, 0x000001c8u, 0x000001c6u, - 0x000001c7u, 0x00050085u, 0x00000009u, 0x000001c9u, 0x000001c5u, 0x000001c8u, 0x00050081u, 0x00000009u, - 0x000001cau, 0x000001c2u, 0x000001c9u, 0x00050041u, 0x00000036u, 0x000001cbu, 0x00000033u, 0x000000e2u, - 0x0004003du, 0x00000009u, 0x000001ccu, 0x000001cbu, 0x0004003du, 0x00000009u, 0x000001cdu, 0x000001afu, - 0x0004003du, 0x00000009u, 0x000001ceu, 0x000001afu, 0x00050085u, 0x00000009u, 0x000001cfu, 0x000001cdu, - 0x000001ceu, 0x00050085u, 0x00000009u, 0x000001d0u, 0x000001ccu, 0x000001cfu, 0x00050081u, 0x00000009u, - 0x000001d1u, 0x000001cau, 0x000001d0u, 0x00050041u, 0x00000036u, 0x000001d3u, 0x00000033u, 0x000001d2u, - 0x0004003du, 0x00000009u, 0x000001d4u, 0x000001d3u, 0x0004003du, 0x00000009u, 0x000001d5u, 0x000001afu, - 0x0004003du, 0x00000009u, 0x000001d6u, 0x000001afu, 0x00050085u, 0x00000009u, 0x000001d7u, 0x000001d5u, - 0x000001d6u, 0x0004003du, 0x00000009u, 0x000001d8u, 0x000001acu, 0x00050085u, 0x00000009u, 0x000001d9u, - 0x000001d7u, 0x000001d8u, 0x00050085u, 0x00000009u, 0x000001dau, 0x000001d4u, 0x000001d9u, 0x00050081u, - 0x00000009u, 0x000001dbu, 0x000001d1u, 0x000001dau, 0x0003003eu, 0x000001b3u, 0x000001dbu, 0x0004003du, - 0x00000009u, 0x000001dcu, 0x000001acu, 0x00050041u, 0x00000036u, 0x000001deu, 0x00000033u, 0x000001ddu, - 0x0004003du, 0x00000009u, 0x000001dfu, 0x000001deu, 0x000500bau, 0x0000001cu, 0x000001e0u, 0x000001dcu, - 0x000001dfu, 0x000300f7u, 0x000001e2u, 0x00000000u, 0x000400fau, 0x000001e0u, 0x000001e1u, 0x000001e2u, - 0x000200f8u, 0x000001e1u, 0x00050041u, 0x00000036u, 0x000001e4u, 0x00000033u, 0x000001e3u, 0x0004003du, - 0x00000009u, 0x000001e5u, 0x000001e4u, 0x0004003du, 0x00000009u, 0x000001e6u, 0x000001acu, 0x00050041u, - 0x00000036u, 0x000001e7u, 0x00000033u, 0x000001ddu, 0x0004003du, 0x00000009u, 0x000001e8u, 0x000001e7u, - 0x00050083u, 0x00000009u, 0x000001e9u, 0x000001e6u, 0x000001e8u, 0x00050041u, 0x00000036u, 0x000001ebu, - 0x00000033u, 0x000001eau, 0x0004003du, 0x00000009u, 0x000001ecu, 0x000001ebu, 0x00050085u, 0x00000009u, - 0x000001edu, 0x000001e9u, 0x000001ecu, 0x00050081u, 0x00000009u, 0x000001eeu, 0x000001e5u, 0x000001edu, - 0x0003003eu, 0x000001b3u, 0x000001eeu, 0x000200f9u, 0x000001e2u, 0x000200f8u, 0x000001e2u, 0x0004003du, - 0x00000009u, 0x000001f0u, 0x00000197u, 0x000500bau, 0x0000001cu, 0x000001f2u, 0x000001f0u, 0x000001f1u, - 0x000300f7u, 0x000001f5u, 0x00000000u, 0x000400fau, 0x000001f2u, 0x000001f4u, 0x000001f9u, 0x000200f8u, - 0x000001f4u, 0x0004003du, 0x00000009u, 0x000001f6u, 0x000001b3u, 0x0004003du, 0x00000009u, 0x000001f7u, - 0x00000197u, 0x00050088u, 0x00000009u, 0x000001f8u, 0x000001f6u, 0x000001f7u, 0x0003003eu, 0x000001f3u, - 0x000001f8u, 0x000200f9u, 0x000001f5u, 0x000200f8u, 0x000001f9u, 0x0003003eu, 0x000001f3u, 0x00000062u, - 0x000200f9u, 0x000001f5u, 0x000200f8u, 0x000001f5u, 0x0004003du, 0x00000009u, 0x000001fau, 0x000001f3u, - 0x0003003eu, 0x000001efu, 0x000001fau, 0x0004003du, 0x00000009u, 0x000001fdu, 0x000001efu, 0x0004003du, - 0x0000000au, 0x000001feu, 0x00000169u, 0x0007004fu, 0x00000198u, 0x000001ffu, 0x000001feu, 0x000001feu, - 0x00000000u, 0x00000001u, 0x0005008eu, 0x00000198u, 0x00000200u, 0x000001ffu, 0x000001fdu, 0x0003003eu, - 0x000001fcu, 0x00000200u, 0x00050041u, 0x00000036u, 0x00000203u, 0x00000033u, 0x00000202u, 0x0004003du, - 0x00000009u, 0x00000204u, 0x00000203u, 0x00050041u, 0x00000036u, 0x00000205u, 0x000001fcu, 0x00000040u, - 0x0004003du, 0x00000009u, 0x00000206u, 0x00000205u, 0x00050085u, 0x00000009u, 0x00000207u, 0x00000204u, - 0x00000206u, 0x00050041u, 0x00000036u, 0x00000209u, 0x00000033u, 0x00000208u, 0x0004003du, 0x00000009u, - 0x0000020au, 0x00000209u, 0x00050041u, 0x00000036u, 0x0000020bu, 0x000001fcu, 0x00000007u, 0x0004003du, - 0x00000009u, 0x0000020cu, 0x0000020bu, 0x00050085u, 0x00000009u, 0x0000020du, 0x0000020au, 0x0000020cu, - 0x00050081u, 0x00000009u, 0x0000020eu, 0x00000207u, 0x0000020du, 0x00050041u, 0x00000036u, 0x00000210u, - 0x00000033u, 0x0000020fu, 0x0004003du, 0x00000009u, 0x00000211u, 0x00000210u, 0x00050041u, 0x00000036u, - 0x00000212u, 0x000001fcu, 0x00000040u, 0x0004003du, 0x00000009u, 0x00000213u, 0x00000212u, 0x00050085u, - 0x00000009u, 0x00000214u, 0x00000211u, 0x00000213u, 0x00050041u, 0x00000036u, 0x00000216u, 0x00000033u, - 0x00000215u, 0x0004003du, 0x00000009u, 0x00000217u, 0x00000216u, 0x00050041u, 0x00000036u, 0x00000218u, - 0x000001fcu, 0x00000007u, 0x0004003du, 0x00000009u, 0x00000219u, 0x00000218u, 0x00050085u, 0x00000009u, - 0x0000021au, 0x00000217u, 0x00000219u, 0x00050081u, 0x00000009u, 0x0000021bu, 0x00000214u, 0x0000021au, - 0x00050050u, 0x00000198u, 0x0000021cu, 0x0000020eu, 0x0000021bu, 0x0003003eu, 0x00000201u, 0x0000021cu, - 0x0004003du, 0x00000198u, 0x0000021eu, 0x00000201u, 0x00050041u, 0x00000036u, 0x0000021fu, 0x00000033u, - 0x000000e6u, 0x0004003du, 0x00000009u, 0x00000220u, 0x0000021fu, 0x00050041u, 0x00000036u, 0x00000221u, - 0x00000033u, 0x00000114u, 0x0004003du, 0x00000009u, 0x00000222u, 0x00000221u, 0x00050050u, 0x00000198u, - 0x00000223u, 0x00000220u, 0x00000222u, 0x00050081u, 0x00000198u, 0x00000224u, 0x0000021eu, 0x00000223u, - 0x0003003eu, 0x0000021du, 0x00000224u, 0x0004003du, 0x0000000au, 0x00000226u, 0x00000172u, 0x0007004fu, - 0x00000198u, 0x00000227u, 0x00000226u, 0x00000226u, 0x00000000u, 0x00000001u, 0x0006000cu, 0x00000009u, - 0x00000228u, 0x00000001u, 0x00000042u, 0x00000227u, 0x0003003eu, 0x00000225u, 0x00000228u, 0x0004003du, - 0x0000000au, 0x0000022au, 0x00000172u, 0x0007004fu, 0x00000198u, 0x0000022bu, 0x0000022au, 0x0000022au, - 0x00000000u, 0x00000001u, 0x0004003du, 0x00000009u, 0x0000022cu, 0x0000018fu, 0x00050051u, 0x00000009u, - 0x0000022du, 0x0000022bu, 0x00000000u, 0x00050051u, 0x00000009u, 0x0000022eu, 0x0000022bu, 0x00000001u, - 0x00060050u, 0x0000000au, 0x0000022fu, 0x0000022du, 0x0000022eu, 0x0000022cu, 0x0006000cu, 0x00000009u, - 0x00000230u, 0x00000001u, 0x00000042u, 0x0000022fu, 0x00050081u, 0x00000009u, 0x00000231u, 0x00000230u, - 0x000001a4u, 0x0003003eu, 0x00000229u, 0x00000231u, 0x0004003du, 0x00000009u, 0x00000233u, 0x0000018fu, - 0x0004003du, 0x00000009u, 0x00000234u, 0x00000229u, 0x00050088u, 0x00000009u, 0x00000235u, 0x00000233u, - 0x00000234u, 0x0008000cu, 0x00000009u, 0x00000236u, 0x00000001u, 0x0000002bu, 0x00000235u, 0x000001aau, - 0x00000059u, 0x0003003eu, 0x00000232u, 0x00000236u, 0x0004003du, 0x00000009u, 0x00000238u, 0x00000232u, - 0x0006000cu, 0x00000009u, 0x00000239u, 0x00000001u, 0x00000011u, 0x00000238u, 0x0003003eu, 0x00000237u, - 0x00000239u, 0x0004003du, 0x00000009u, 0x0000023bu, 0x00000237u, 0x0004003du, 0x00000009u, 0x0000023cu, - 0x00000237u, 0x00050085u, 0x00000009u, 0x0000023du, 0x0000023bu, 0x0000023cu, 0x0003003eu, 0x0000023au, - 0x0000023du, 0x00050041u, 0x00000036u, 0x0000023fu, 0x00000033u, 0x000001b4u, 0x0004003du, 0x00000009u, - 0x00000240u, 0x0000023fu, 0x00050041u, 0x00000036u, 0x00000241u, 0x00000033u, 0x000001b7u, 0x0004003du, - 0x00000009u, 0x00000242u, 0x00000241u, 0x0004003du, 0x00000009u, 0x00000243u, 0x00000237u, 0x00050085u, - 0x00000009u, 0x00000244u, 0x00000242u, 0x00000243u, 0x00050081u, 0x00000009u, 0x00000245u, 0x00000240u, - 0x00000244u, 0x00050041u, 0x00000036u, 0x00000246u, 0x00000033u, 0x000001bdu, 0x0004003du, 0x00000009u, - 0x00000247u, 0x00000246u, 0x0004003du, 0x00000009u, 0x00000248u, 0x0000023au, 0x00050085u, 0x00000009u, - 0x00000249u, 0x00000247u, 0x00000248u, 0x00050081u, 0x00000009u, 0x0000024au, 0x00000245u, 0x00000249u, - 0x00050041u, 0x00000036u, 0x0000024bu, 0x00000033u, 0x000001c3u, 0x0004003du, 0x00000009u, 0x0000024cu, - 0x0000024bu, 0x0004003du, 0x00000009u, 0x0000024du, 0x0000023au, 0x0004003du, 0x00000009u, 0x0000024eu, - 0x00000237u, 0x00050085u, 0x00000009u, 0x0000024fu, 0x0000024du, 0x0000024eu, 0x00050085u, 0x00000009u, - 0x00000250u, 0x0000024cu, 0x0000024fu, 0x00050081u, 0x00000009u, 0x00000251u, 0x0000024au, 0x00000250u, - 0x00050041u, 0x00000036u, 0x00000252u, 0x00000033u, 0x000000e2u, 0x0004003du, 0x00000009u, 0x00000253u, - 0x00000252u, 0x0004003du, 0x00000009u, 0x00000254u, 0x0000023au, 0x0004003du, 0x00000009u, 0x00000255u, - 0x0000023au, 0x00050085u, 0x00000009u, 0x00000256u, 0x00000254u, 0x00000255u, 0x00050085u, 0x00000009u, - 0x00000257u, 0x00000253u, 0x00000256u, 0x00050081u, 0x00000009u, 0x00000258u, 0x00000251u, 0x00000257u, - 0x00050041u, 0x00000036u, 0x00000259u, 0x00000033u, 0x000001d2u, 0x0004003du, 0x00000009u, 0x0000025au, - 0x00000259u, 0x0004003du, 0x00000009u, 0x0000025bu, 0x0000023au, 0x0004003du, 0x00000009u, 0x0000025cu, - 0x0000023au, 0x00050085u, 0x00000009u, 0x0000025du, 0x0000025bu, 0x0000025cu, 0x0004003du, 0x00000009u, - 0x0000025eu, 0x00000237u, 0x00050085u, 0x00000009u, 0x0000025fu, 0x0000025du, 0x0000025eu, 0x00050085u, - 0x00000009u, 0x00000260u, 0x0000025au, 0x0000025fu, 0x00050081u, 0x00000009u, 0x00000261u, 0x00000258u, - 0x00000260u, 0x0003003eu, 0x0000023eu, 0x00000261u, 0x0004003du, 0x00000009u, 0x00000262u, 0x00000237u, - 0x00050041u, 0x00000036u, 0x00000263u, 0x00000033u, 0x000001ddu, 0x0004003du, 0x00000009u, 0x00000264u, - 0x00000263u, 0x000500bau, 0x0000001cu, 0x00000265u, 0x00000262u, 0x00000264u, 0x000300f7u, 0x00000267u, - 0x00000000u, 0x000400fau, 0x00000265u, 0x00000266u, 0x00000267u, 0x000200f8u, 0x00000266u, 0x00050041u, - 0x00000036u, 0x00000268u, 0x00000033u, 0x000001e3u, 0x0004003du, 0x00000009u, 0x00000269u, 0x00000268u, - 0x0004003du, 0x00000009u, 0x0000026au, 0x00000237u, 0x00050041u, 0x00000036u, 0x0000026bu, 0x00000033u, - 0x000001ddu, 0x0004003du, 0x00000009u, 0x0000026cu, 0x0000026bu, 0x00050083u, 0x00000009u, 0x0000026du, - 0x0000026au, 0x0000026cu, 0x00050041u, 0x00000036u, 0x0000026eu, 0x00000033u, 0x000001eau, 0x0004003du, - 0x00000009u, 0x0000026fu, 0x0000026eu, 0x00050085u, 0x00000009u, 0x00000270u, 0x0000026du, 0x0000026fu, - 0x00050081u, 0x00000009u, 0x00000271u, 0x00000269u, 0x00000270u, 0x0003003eu, 0x0000023eu, 0x00000271u, - 0x000200f9u, 0x00000267u, 0x000200f8u, 0x00000267u, 0x0004003du, 0x00000009u, 0x00000273u, 0x00000225u, - 0x000500bau, 0x0000001cu, 0x00000274u, 0x00000273u, 0x000001f1u, 0x000300f7u, 0x00000277u, 0x00000000u, - 0x000400fau, 0x00000274u, 0x00000276u, 0x0000027bu, 0x000200f8u, 0x00000276u, 0x0004003du, 0x00000009u, - 0x00000278u, 0x0000023eu, 0x0004003du, 0x00000009u, 0x00000279u, 0x00000225u, 0x00050088u, 0x00000009u, - 0x0000027au, 0x00000278u, 0x00000279u, 0x0003003eu, 0x00000275u, 0x0000027au, 0x000200f9u, 0x00000277u, - 0x000200f8u, 0x0000027bu, 0x0003003eu, 0x00000275u, 0x00000062u, 0x000200f9u, 0x00000277u, 0x000200f8u, - 0x00000277u, 0x0004003du, 0x00000009u, 0x0000027cu, 0x00000275u, 0x0003003eu, 0x00000272u, 0x0000027cu, - 0x0004003du, 0x00000009u, 0x0000027eu, 0x00000272u, 0x0004003du, 0x0000000au, 0x0000027fu, 0x00000172u, - 0x0007004fu, 0x00000198u, 0x00000280u, 0x0000027fu, 0x0000027fu, 0x00000000u, 0x00000001u, 0x0005008eu, - 0x00000198u, 0x00000281u, 0x00000280u, 0x0000027eu, 0x0003003eu, 0x0000027du, 0x00000281u, 0x00050041u, - 0x00000036u, 0x00000283u, 0x00000033u, 0x00000202u, 0x0004003du, 0x00000009u, 0x00000284u, 0x00000283u, - 0x00050041u, 0x00000036u, 0x00000285u, 0x0000027du, 0x00000040u, 0x0004003du, 0x00000009u, 0x00000286u, - 0x00000285u, 0x00050085u, 0x00000009u, 0x00000287u, 0x00000284u, 0x00000286u, 0x00050041u, 0x00000036u, - 0x00000288u, 0x00000033u, 0x00000208u, 0x0004003du, 0x00000009u, 0x00000289u, 0x00000288u, 0x00050041u, - 0x00000036u, 0x0000028au, 0x0000027du, 0x00000007u, 0x0004003du, 0x00000009u, 0x0000028bu, 0x0000028au, - 0x00050085u, 0x00000009u, 0x0000028cu, 0x00000289u, 0x0000028bu, 0x00050081u, 0x00000009u, 0x0000028du, - 0x00000287u, 0x0000028cu, 0x00050041u, 0x00000036u, 0x0000028eu, 0x00000033u, 0x0000020fu, 0x0004003du, - 0x00000009u, 0x0000028fu, 0x0000028eu, 0x00050041u, 0x00000036u, 0x00000290u, 0x0000027du, 0x00000040u, - 0x0004003du, 0x00000009u, 0x00000291u, 0x00000290u, 0x00050085u, 0x00000009u, 0x00000292u, 0x0000028fu, - 0x00000291u, 0x00050041u, 0x00000036u, 0x00000293u, 0x00000033u, 0x00000215u, 0x0004003du, 0x00000009u, - 0x00000294u, 0x00000293u, 0x00050041u, 0x00000036u, 0x00000295u, 0x0000027du, 0x00000007u, 0x0004003du, - 0x00000009u, 0x00000296u, 0x00000295u, 0x00050085u, 0x00000009u, 0x00000297u, 0x00000294u, 0x00000296u, - 0x00050081u, 0x00000009u, 0x00000298u, 0x00000292u, 0x00000297u, 0x00050050u, 0x00000198u, 0x00000299u, - 0x0000028du, 0x00000298u, 0x0003003eu, 0x00000282u, 0x00000299u, 0x0004003du, 0x00000198u, 0x0000029bu, - 0x00000282u, 0x00050041u, 0x00000036u, 0x0000029cu, 0x00000033u, 0x000000e6u, 0x0004003du, 0x00000009u, - 0x0000029du, 0x0000029cu, 0x00050041u, 0x00000036u, 0x0000029eu, 0x00000033u, 0x00000114u, 0x0004003du, - 0x00000009u, 0x0000029fu, 0x0000029eu, 0x00050050u, 0x00000198u, 0x000002a0u, 0x0000029du, 0x0000029fu, - 0x00050081u, 0x00000198u, 0x000002a1u, 0x0000029bu, 0x000002a0u, 0x0003003eu, 0x0000029au, 0x000002a1u, - 0x0004003du, 0x0000000au, 0x000002a3u, 0x00000181u, 0x0007004fu, 0x00000198u, 0x000002a4u, 0x000002a3u, - 0x000002a3u, 0x00000000u, 0x00000001u, 0x0006000cu, 0x00000009u, 0x000002a5u, 0x00000001u, 0x00000042u, - 0x000002a4u, 0x0003003eu, 0x000002a2u, 0x000002a5u, 0x0004003du, 0x0000000au, 0x000002a7u, 0x00000181u, - 0x0007004fu, 0x00000198u, 0x000002a8u, 0x000002a7u, 0x000002a7u, 0x00000000u, 0x00000001u, 0x0004003du, - 0x00000009u, 0x000002a9u, 0x00000193u, 0x00050051u, 0x00000009u, 0x000002aau, 0x000002a8u, 0x00000000u, - 0x00050051u, 0x00000009u, 0x000002abu, 0x000002a8u, 0x00000001u, 0x00060050u, 0x0000000au, 0x000002acu, - 0x000002aau, 0x000002abu, 0x000002a9u, 0x0006000cu, 0x00000009u, 0x000002adu, 0x00000001u, 0x00000042u, - 0x000002acu, 0x00050081u, 0x00000009u, 0x000002aeu, 0x000002adu, 0x000001a4u, 0x0003003eu, 0x000002a6u, - 0x000002aeu, 0x0004003du, 0x00000009u, 0x000002b0u, 0x00000193u, 0x0004003du, 0x00000009u, 0x000002b1u, - 0x000002a6u, 0x00050088u, 0x00000009u, 0x000002b2u, 0x000002b0u, 0x000002b1u, 0x0008000cu, 0x00000009u, - 0x000002b3u, 0x00000001u, 0x0000002bu, 0x000002b2u, 0x000001aau, 0x00000059u, 0x0003003eu, 0x000002afu, - 0x000002b3u, 0x0004003du, 0x00000009u, 0x000002b5u, 0x000002afu, 0x0006000cu, 0x00000009u, 0x000002b6u, - 0x00000001u, 0x00000011u, 0x000002b5u, 0x0003003eu, 0x000002b4u, 0x000002b6u, 0x0004003du, 0x00000009u, - 0x000002b8u, 0x000002b4u, 0x0004003du, 0x00000009u, 0x000002b9u, 0x000002b4u, 0x00050085u, 0x00000009u, - 0x000002bau, 0x000002b8u, 0x000002b9u, 0x0003003eu, 0x000002b7u, 0x000002bau, 0x00050041u, 0x00000036u, - 0x000002bcu, 0x00000033u, 0x000001b4u, 0x0004003du, 0x00000009u, 0x000002bdu, 0x000002bcu, 0x00050041u, - 0x00000036u, 0x000002beu, 0x00000033u, 0x000001b7u, 0x0004003du, 0x00000009u, 0x000002bfu, 0x000002beu, - 0x0004003du, 0x00000009u, 0x000002c0u, 0x000002b4u, 0x00050085u, 0x00000009u, 0x000002c1u, 0x000002bfu, - 0x000002c0u, 0x00050081u, 0x00000009u, 0x000002c2u, 0x000002bdu, 0x000002c1u, 0x00050041u, 0x00000036u, - 0x000002c3u, 0x00000033u, 0x000001bdu, 0x0004003du, 0x00000009u, 0x000002c4u, 0x000002c3u, 0x0004003du, - 0x00000009u, 0x000002c5u, 0x000002b7u, 0x00050085u, 0x00000009u, 0x000002c6u, 0x000002c4u, 0x000002c5u, - 0x00050081u, 0x00000009u, 0x000002c7u, 0x000002c2u, 0x000002c6u, 0x00050041u, 0x00000036u, 0x000002c8u, - 0x00000033u, 0x000001c3u, 0x0004003du, 0x00000009u, 0x000002c9u, 0x000002c8u, 0x0004003du, 0x00000009u, - 0x000002cau, 0x000002b7u, 0x0004003du, 0x00000009u, 0x000002cbu, 0x000002b4u, 0x00050085u, 0x00000009u, - 0x000002ccu, 0x000002cau, 0x000002cbu, 0x00050085u, 0x00000009u, 0x000002cdu, 0x000002c9u, 0x000002ccu, - 0x00050081u, 0x00000009u, 0x000002ceu, 0x000002c7u, 0x000002cdu, 0x00050041u, 0x00000036u, 0x000002cfu, - 0x00000033u, 0x000000e2u, 0x0004003du, 0x00000009u, 0x000002d0u, 0x000002cfu, 0x0004003du, 0x00000009u, - 0x000002d1u, 0x000002b7u, 0x0004003du, 0x00000009u, 0x000002d2u, 0x000002b7u, 0x00050085u, 0x00000009u, - 0x000002d3u, 0x000002d1u, 0x000002d2u, 0x00050085u, 0x00000009u, 0x000002d4u, 0x000002d0u, 0x000002d3u, - 0x00050081u, 0x00000009u, 0x000002d5u, 0x000002ceu, 0x000002d4u, 0x00050041u, 0x00000036u, 0x000002d6u, - 0x00000033u, 0x000001d2u, 0x0004003du, 0x00000009u, 0x000002d7u, 0x000002d6u, 0x0004003du, 0x00000009u, - 0x000002d8u, 0x000002b7u, 0x0004003du, 0x00000009u, 0x000002d9u, 0x000002b7u, 0x00050085u, 0x00000009u, - 0x000002dau, 0x000002d8u, 0x000002d9u, 0x0004003du, 0x00000009u, 0x000002dbu, 0x000002b4u, 0x00050085u, - 0x00000009u, 0x000002dcu, 0x000002dau, 0x000002dbu, 0x00050085u, 0x00000009u, 0x000002ddu, 0x000002d7u, - 0x000002dcu, 0x00050081u, 0x00000009u, 0x000002deu, 0x000002d5u, 0x000002ddu, 0x0003003eu, 0x000002bbu, - 0x000002deu, 0x0004003du, 0x00000009u, 0x000002dfu, 0x000002b4u, 0x00050041u, 0x00000036u, 0x000002e0u, - 0x00000033u, 0x000001ddu, 0x0004003du, 0x00000009u, 0x000002e1u, 0x000002e0u, 0x000500bau, 0x0000001cu, - 0x000002e2u, 0x000002dfu, 0x000002e1u, 0x000300f7u, 0x000002e4u, 0x00000000u, 0x000400fau, 0x000002e2u, - 0x000002e3u, 0x000002e4u, 0x000200f8u, 0x000002e3u, 0x00050041u, 0x00000036u, 0x000002e5u, 0x00000033u, - 0x000001e3u, 0x0004003du, 0x00000009u, 0x000002e6u, 0x000002e5u, 0x0004003du, 0x00000009u, 0x000002e7u, - 0x000002b4u, 0x00050041u, 0x00000036u, 0x000002e8u, 0x00000033u, 0x000001ddu, 0x0004003du, 0x00000009u, - 0x000002e9u, 0x000002e8u, 0x00050083u, 0x00000009u, 0x000002eau, 0x000002e7u, 0x000002e9u, 0x00050041u, - 0x00000036u, 0x000002ebu, 0x00000033u, 0x000001eau, 0x0004003du, 0x00000009u, 0x000002ecu, 0x000002ebu, - 0x00050085u, 0x00000009u, 0x000002edu, 0x000002eau, 0x000002ecu, 0x00050081u, 0x00000009u, 0x000002eeu, - 0x000002e6u, 0x000002edu, 0x0003003eu, 0x000002bbu, 0x000002eeu, 0x000200f9u, 0x000002e4u, 0x000200f8u, - 0x000002e4u, 0x0004003du, 0x00000009u, 0x000002f0u, 0x000002a2u, 0x000500bau, 0x0000001cu, 0x000002f1u, - 0x000002f0u, 0x000001f1u, 0x000300f7u, 0x000002f4u, 0x00000000u, 0x000400fau, 0x000002f1u, 0x000002f3u, - 0x000002f8u, 0x000200f8u, 0x000002f3u, 0x0004003du, 0x00000009u, 0x000002f5u, 0x000002bbu, 0x0004003du, - 0x00000009u, 0x000002f6u, 0x000002a2u, 0x00050088u, 0x00000009u, 0x000002f7u, 0x000002f5u, 0x000002f6u, - 0x0003003eu, 0x000002f2u, 0x000002f7u, 0x000200f9u, 0x000002f4u, 0x000200f8u, 0x000002f8u, 0x0003003eu, - 0x000002f2u, 0x00000062u, 0x000200f9u, 0x000002f4u, 0x000200f8u, 0x000002f4u, 0x0004003du, 0x00000009u, - 0x000002f9u, 0x000002f2u, 0x0003003eu, 0x000002efu, 0x000002f9u, 0x0004003du, 0x00000009u, 0x000002fbu, - 0x000002efu, 0x0004003du, 0x0000000au, 0x000002fcu, 0x00000181u, 0x0007004fu, 0x00000198u, 0x000002fdu, - 0x000002fcu, 0x000002fcu, 0x00000000u, 0x00000001u, 0x0005008eu, 0x00000198u, 0x000002feu, 0x000002fdu, - 0x000002fbu, 0x0003003eu, 0x000002fau, 0x000002feu, 0x00050041u, 0x00000036u, 0x00000300u, 0x00000033u, - 0x00000202u, 0x0004003du, 0x00000009u, 0x00000301u, 0x00000300u, 0x00050041u, 0x00000036u, 0x00000302u, - 0x000002fau, 0x00000040u, 0x0004003du, 0x00000009u, 0x00000303u, 0x00000302u, 0x00050085u, 0x00000009u, - 0x00000304u, 0x00000301u, 0x00000303u, 0x00050041u, 0x00000036u, 0x00000305u, 0x00000033u, 0x00000208u, - 0x0004003du, 0x00000009u, 0x00000306u, 0x00000305u, 0x00050041u, 0x00000036u, 0x00000307u, 0x000002fau, - 0x00000007u, 0x0004003du, 0x00000009u, 0x00000308u, 0x00000307u, 0x00050085u, 0x00000009u, 0x00000309u, - 0x00000306u, 0x00000308u, 0x00050081u, 0x00000009u, 0x0000030au, 0x00000304u, 0x00000309u, 0x00050041u, - 0x00000036u, 0x0000030bu, 0x00000033u, 0x0000020fu, 0x0004003du, 0x00000009u, 0x0000030cu, 0x0000030bu, - 0x00050041u, 0x00000036u, 0x0000030du, 0x000002fau, 0x00000040u, 0x0004003du, 0x00000009u, 0x0000030eu, - 0x0000030du, 0x00050085u, 0x00000009u, 0x0000030fu, 0x0000030cu, 0x0000030eu, 0x00050041u, 0x00000036u, - 0x00000310u, 0x00000033u, 0x00000215u, 0x0004003du, 0x00000009u, 0x00000311u, 0x00000310u, 0x00050041u, - 0x00000036u, 0x00000312u, 0x000002fau, 0x00000007u, 0x0004003du, 0x00000009u, 0x00000313u, 0x00000312u, - 0x00050085u, 0x00000009u, 0x00000314u, 0x00000311u, 0x00000313u, 0x00050081u, 0x00000009u, 0x00000315u, - 0x0000030fu, 0x00000314u, 0x00050050u, 0x00000198u, 0x00000316u, 0x0000030au, 0x00000315u, 0x0003003eu, - 0x000002ffu, 0x00000316u, 0x0004003du, 0x00000198u, 0x00000318u, 0x000002ffu, 0x00050041u, 0x00000036u, - 0x00000319u, 0x00000033u, 0x000000e6u, 0x0004003du, 0x00000009u, 0x0000031au, 0x00000319u, 0x00050041u, - 0x00000036u, 0x0000031bu, 0x00000033u, 0x00000114u, 0x0004003du, 0x00000009u, 0x0000031cu, 0x0000031bu, - 0x00050050u, 0x00000198u, 0x0000031du, 0x0000031au, 0x0000031cu, 0x00050081u, 0x00000198u, 0x0000031eu, - 0x00000318u, 0x0000031du, 0x0003003eu, 0x00000317u, 0x0000031eu, 0x0004003du, 0x00000198u, 0x00000320u, - 0x0000021du, 0x0004003du, 0x00000198u, 0x00000321u, 0x0000029au, 0x00050081u, 0x00000198u, 0x00000322u, - 0x00000320u, 0x00000321u, 0x0005008eu, 0x00000198u, 0x00000323u, 0x00000322u, 0x0000017fu, 0x0003003eu, - 0x0000031fu, 0x00000323u, 0x0004003du, 0x00000198u, 0x00000325u, 0x00000317u, 0x0004003du, 0x00000198u, - 0x00000326u, 0x0000031fu, 0x00050083u, 0x00000198u, 0x00000327u, 0x00000325u, 0x00000326u, 0x0006000cu, - 0x00000009u, 0x00000328u, 0x00000001u, 0x00000042u, 0x00000327u, 0x0003003eu, 0x00000324u, 0x00000328u, - 0x0004003du, 0x00000009u, 0x00000329u, 0x00000324u, 0x0008000cu, 0x00000009u, 0x0000032bu, 0x00000001u, - 0x0000002bu, 0x00000329u, 0x00000062u, 0x0000032au, 0x000200feu, 0x0000032bu, 0x00010038u, 0x00050036u, - 0x00000006u, 0x0000003du, 0x00000000u, 0x00000037u, 0x00030037u, 0x0000001bu, 0x00000038u, 0x00030037u, - 0x0000001bu, 0x00000039u, 0x00030037u, 0x00000027u, 0x0000003au, 0x00030037u, 0x0000002eu, 0x0000003bu, - 0x00030037u, 0x00000036u, 0x0000003cu, 0x000200f8u, 0x0000003eu, 0x0004003bu, 0x00000036u, 0x0000032eu, - 0x00000007u, 0x0004003bu, 0x0000001bu, 0x0000032fu, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x00000331u, - 0x00000007u, 0x0004003bu, 0x0000002cu, 0x00000333u, 0x00000007u, 0x0004003bu, 0x0000002eu, 0x00000336u, - 0x00000007u, 0x0004003du, 0x0000000au, 0x00000330u, 0x00000038u, 0x0003003eu, 0x0000032fu, 0x00000330u, - 0x0004003du, 0x0000000au, 0x00000332u, 0x00000039u, 0x0003003eu, 0x00000331u, 0x00000332u, 0x00050041u, - 0x0000002cu, 0x00000334u, 0x0000003au, 0x000000e6u, 0x0004003du, 0x00000025u, 0x00000335u, 0x00000334u, - 0x0003003eu, 0x00000333u, 0x00000335u, 0x0004003du, 0x0000002du, 0x00000337u, 0x0000003bu, 0x0003003eu, - 0x00000336u, 0x00000337u, 0x00080039u, 0x00000009u, 0x00000338u, 0x00000034u, 0x0000032fu, 0x00000331u, - 0x00000333u, 0x00000336u, 0x0003003eu, 0x0000032eu, 0x00000338u, 0x0004003du, 0x00000009u, 0x00000339u, - 0x0000032eu, 0x0004003du, 0x00000009u, 0x0000033au, 0x0000003cu, 0x000500b8u, 0x0000001cu, 0x0000033bu, - 0x00000339u, 0x0000033au, 0x000300f7u, 0x0000033du, 0x00000000u, 0x000400fau, 0x0000033bu, 0x0000033cu, - 0x0000033du, 0x000200f8u, 0x0000033cu, 0x000200feu, 0x00000040u, 0x000200f8u, 0x0000033du, 0x0004003du, - 0x00000009u, 0x0000033fu, 0x0000032eu, 0x0004003du, 0x00000009u, 0x00000340u, 0x0000003cu, 0x00050085u, - 0x00000009u, 0x00000342u, 0x00000340u, 0x00000341u, 0x000500b8u, 0x0000001cu, 0x00000343u, 0x0000033fu, - 0x00000342u, 0x000300f7u, 0x00000345u, 0x00000000u, 0x000400fau, 0x00000343u, 0x00000344u, 0x00000345u, - 0x000200f8u, 0x00000344u, 0x000200feu, 0x00000007u, 0x000200f8u, 0x00000345u, 0x0004003du, 0x00000009u, - 0x00000347u, 0x0000032eu, 0x0004003du, 0x00000009u, 0x00000348u, 0x0000003cu, 0x00050085u, 0x00000009u, - 0x0000034au, 0x00000348u, 0x00000349u, 0x000500b8u, 0x0000001cu, 0x0000034bu, 0x00000347u, 0x0000034au, - 0x000300f7u, 0x0000034du, 0x00000000u, 0x000400fau, 0x0000034bu, 0x0000034cu, 0x0000034du, 0x000200f8u, - 0x0000034cu, 0x000200feu, 0x00000053u, 0x000200f8u, 0x0000034du, 0x000200feu, 0x0000005du, 0x00010038u, -}; - -static const uint32_t kSpv_ts_polygon_mesh[] = { - 0x07230203u, 0x00010600u, 0x0008000bu, 0x00000781u, 0x00000000u, 0x00020011u, 0x0000000bu, 0x00020011u, - 0x000014a3u, 0x0006000au, 0x5f565053u, 0x5f545845u, 0x6873656du, 0x6168735fu, 0x00726564u, 0x0006000bu, - 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, - 0x001b000fu, 0x000014f5u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000357u, 0x0000035eu, 0x00000363u, - 0x0000036eu, 0x0000037fu, 0x0000038du, 0x0000039cu, 0x000003a8u, 0x000003b8u, 0x0000041bu, 0x00000437u, - 0x00000446u, 0x00000452u, 0x00000461u, 0x0000046bu, 0x00000736u, 0x00000769u, 0x0000076du, 0x00000771u, - 0x00000775u, 0x0000077au, 0x0000077fu, 0x0006014bu, 0x00000004u, 0x00000026u, 0x00000007u, 0x00000008u, - 0x00000008u, 0x00040010u, 0x00000004u, 0x0000001au, 0x00000040u, 0x00040010u, 0x00000004u, 0x00001496u, - 0x00000040u, 0x00030010u, 0x00000004u, 0x000014b2u, 0x00030003u, 0x00000002u, 0x000001ccu, 0x00060004u, - 0x455f4c47u, 0x6d5f5458u, 0x5f687365u, 0x64616873u, 0x00007265u, 0x000d0004u, 0x455f4c47u, 0x735f5458u, - 0x65646168u, 0x78655f72u, 0x63696c70u, 0x615f7469u, 0x68746972u, 0x6974656du, 0x79745f63u, 0x5f736570u, - 0x36746e69u, 0x00000034u, 0x00040005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00050005u, 0x0000000eu, - 0x656d6143u, 0x6f506172u, 0x00006573u, 0x00070006u, 0x0000000eu, 0x00000000u, 0x6c726f77u, 0x6f745f64u, - 0x6d61635fu, 0x00617265u, 0x00060005u, 0x00000010u, 0x65685446u, 0x61436174u, 0x6172656du, 0x00000000u, - 0x00040006u, 0x00000010u, 0x00000000u, 0x00007863u, 0x00040006u, 0x00000010u, 0x00000001u, 0x00007963u, - 0x00050006u, 0x00000010u, 0x00000002u, 0x5f676d69u, 0x00000077u, 0x00050006u, 0x00000010u, 0x00000003u, - 0x5f676d69u, 0x00000068u, 0x00050006u, 0x00000010u, 0x00000004u, 0x796c6f70u, 0x00000030u, 0x00050006u, - 0x00000010u, 0x00000005u, 0x796c6f70u, 0x00000031u, 0x00050006u, 0x00000010u, 0x00000006u, 0x796c6f70u, - 0x00000032u, 0x00050006u, 0x00000010u, 0x00000007u, 0x796c6f70u, 0x00000033u, 0x00050006u, 0x00000010u, - 0x00000008u, 0x796c6f70u, 0x00000034u, 0x00050006u, 0x00000010u, 0x00000009u, 0x796c6f70u, 0x00000035u, - 0x00070006u, 0x00000010u, 0x0000000au, 0x5f78616du, 0x5f796172u, 0x6c676e61u, 0x00000065u, 0x00080006u, - 0x00000010u, 0x0000000bu, 0x5f78616du, 0x74736964u, 0x6974726fu, 0x765f6e6fu, 0x00006c61u, 0x00080006u, - 0x00000010u, 0x0000000cu, 0x5f78616du, 0x74736964u, 0x6974726fu, 0x645f6e6fu, 0x006c6176u, 0x00060006u, - 0x00000010u, 0x0000000du, 0x74706564u, 0x616d5f68u, 0x00000078u, 0x00050006u, 0x00000010u, 0x0000000eu, - 0x635f646cu, 0x00000000u, 0x00050006u, 0x00000010u, 0x0000000fu, 0x645f646cu, 0x00000000u, 0x00050006u, - 0x00000010u, 0x00000010u, 0x655f646cu, 0x00000000u, 0x00050006u, 0x00000010u, 0x00000011u, 0x665f646cu, - 0x00000000u, 0x00200005u, 0x00000016u, 0x65687466u, 0x705f6174u, 0x656a6f72u, 0x76287463u, 0x733b3366u, - 0x63757274u, 0x61432d74u, 0x6172656du, 0x65736f50u, 0x34666d2du, 0x733b3134u, 0x63757274u, 0x54462d74u, - 0x61746568u, 0x656d6143u, 0x662d6172u, 0x31662d31u, 0x2d31662du, 0x662d3166u, 0x31662d31u, 0x2d31662du, - 0x662d3166u, 0x31662d31u, 0x2d31662du, 0x662d3166u, 0x31662d31u, 0x2d31662du, 0x662d3166u, 0x31662d31u, - 0x00003b31u, 0x00050005u, 0x00000013u, 0x6c726f77u, 0x6f705f64u, 0x00000073u, 0x00040005u, 0x00000014u, - 0x65736f70u, 0x00000000u, 0x00030005u, 0x00000015u, 0x006d6163u, 0x00080005u, 0x0000001bu, 0x79726162u, - 0x7265765fu, 0x5f786574u, 0x6e756f63u, 0x31752874u, 0x0000003bu, 0x00040005u, 0x0000001au, 0x6576656cu, - 0x0000006cu, 0x00080005u, 0x0000001eu, 0x79726162u, 0x6972745fu, 0x6c676e61u, 0x6f635f65u, 0x28746e75u, - 0x003b3175u, 0x00040005u, 0x0000001du, 0x6576656cu, 0x0000006cu, 0x00080005u, 0x00000024u, 0x79726162u, - 0x7265765fu, 0x5f786574u, 0x75287675u, 0x31753b31u, 0x0000003bu, 0x00050005u, 0x00000022u, 0x74726576u, - 0x695f7865u, 0x00007864u, 0x00040005u, 0x00000023u, 0x6576656cu, 0x0000006cu, 0x000b0005u, 0x0000002cu, - 0x79726162u, 0x746e695fu, 0x6f707265u, 0x6574616cu, 0x33667628u, 0x3366763bu, 0x3366763bu, 0x3266763bu, - 0x0000003bu, 0x00030005u, 0x00000028u, 0x00003076u, 0x00030005u, 0x00000029u, 0x00003176u, 0x00030005u, - 0x0000002au, 0x00003276u, 0x00030005u, 0x0000002bu, 0x00007675u, 0x000a0005u, 0x00000032u, 0x79726162u, - 0x6972745fu, 0x6c676e61u, 0x6e695f65u, 0x65636964u, 0x31752873u, 0x3b31753bu, 0x00000000u, 0x00040005u, - 0x00000030u, 0x5f697274u, 0x00786469u, 0x00040005u, 0x00000031u, 0x6576656cu, 0x0000006cu, 0x00040005u, - 0x00000034u, 0x5f6d6163u, 0x00007470u, 0x00040005u, 0x00000043u, 0x74706564u, 0x00000068u, 0x00050005u, - 0x00000047u, 0x5f796172u, 0x6d726f6eu, 0x00000000u, 0x00040005u, 0x00000053u, 0x666c6168u, 0x0069705fu, - 0x00060005u, 0x00000060u, 0x75657370u, 0x665f6f64u, 0x6c61636fu, 0x00000000u, 0x00040005u, 0x00000064u, - 0x6c635f78u, 0x00007069u, 0x00040005u, 0x00000070u, 0x6c635f79u, 0x00007069u, 0x00040005u, 0x00000082u, - 0x6e5f7978u, 0x006d726fu, 0x00050005u, 0x00000086u, 0x5f736f63u, 0x68706c61u, 0x00000061u, 0x00040005u, - 0x0000008du, 0x68706c61u, 0x00000061u, 0x00030005u, 0x00000090u, 0x00003261u, 0x00030005u, 0x00000094u, - 0x00003361u, 0x00030005u, 0x00000098u, 0x00003461u, 0x00030005u, 0x0000009cu, 0x00003561u, 0x00040005u, - 0x000000a0u, 0x746c6564u, 0x00000061u, 0x00040005u, 0x000000d3u, 0x6c616373u, 0x00000065u, 0x00050005u, - 0x000000deu, 0x65786970u, 0x65725f6cu, 0x0000006cu, 0x00050005u, 0x000000e3u, 0x65786970u, 0x69645f6cu, - 0x00007473u, 0x00040005u, 0x00000100u, 0x65786970u, 0x0000006cu, 0x00040005u, 0x00000109u, 0x646e5f78u, - 0x00000063u, 0x00040005u, 0x00000112u, 0x646e5f79u, 0x00000063u, 0x00040005u, 0x00000120u, 0x61765f7au, - 0x0065756cu, 0x00040005u, 0x0000012eu, 0x646e5f7au, 0x00000063u, 0x00030005u, 0x0000017cu, 0x00737675u, - 0x00030005u, 0x00000194u, 0x00776f72u, 0x00030005u, 0x00000195u, 0x006c6f63u, 0x00030005u, 0x000001beu, - 0x00776f72u, 0x00030005u, 0x000001bfu, 0x006c6f63u, 0x00030005u, 0x00000206u, 0x00000077u, 0x00040005u, - 0x00000229u, 0x73697274u, 0x00000000u, 0x00050005u, 0x0000023eu, 0x5f776f72u, 0x72617473u, 0x00000074u, - 0x00030005u, 0x00000240u, 0x00000074u, 0x00030005u, 0x00000242u, 0x00776f72u, 0x00030005u, 0x00000243u, - 0x006c6f63u, 0x00040005u, 0x00000245u, 0x645f7369u, 0x006e776fu, 0x00030005u, 0x00000259u, 0x0000746cu, - 0x00030005u, 0x00000269u, 0x0000746cu, 0x00030005u, 0x00000279u, 0x00003069u, 0x00030005u, 0x0000027fu, - 0x00003169u, 0x00030005u, 0x00000286u, 0x00003269u, 0x00050005u, 0x000002a9u, 0x5f776f72u, 0x72617473u, - 0x00000074u, 0x00030005u, 0x000002abu, 0x00000074u, 0x00030005u, 0x000002adu, 0x00776f72u, 0x00030005u, - 0x000002aeu, 0x006c6f63u, 0x00040005u, 0x000002afu, 0x645f7369u, 0x006e776fu, 0x00030005u, 0x000002c2u, - 0x0000746cu, 0x00030005u, 0x000002d2u, 0x0000746cu, 0x00030005u, 0x000002e3u, 0x0000746cu, 0x00030005u, - 0x000002f4u, 0x0000746cu, 0x00030005u, 0x00000305u, 0x0000746cu, 0x00030005u, 0x00000316u, 0x0000746cu, - 0x00030005u, 0x00000326u, 0x00003069u, 0x00030005u, 0x0000032cu, 0x00003169u, 0x00030005u, 0x00000333u, - 0x00003269u, 0x00050005u, 0x00000354u, 0x6972705fu, 0x6f635f6du, 0x00746e75u, 0x00050005u, 0x00000355u, - 0x6e756863u, 0x64695f6bu, 0x00000000u, 0x00060005u, 0x00000357u, 0x575f6c67u, 0x476b726fu, 0x70756f72u, - 0x00004449u, 0x00040005u, 0x0000035bu, 0x64627573u, 0x00007669u, 0x00070005u, 0x0000035cu, 0x796c6f50u, - 0x546e6f67u, 0x506b7361u, 0x6f6c7961u, 0x00006461u, 0x00060006u, 0x0000035cu, 0x00000000u, 0x72657571u, - 0x64695f79u, 0x00000000u, 0x00050006u, 0x0000035cu, 0x00000001u, 0x6c6f6f70u, 0x0064695fu, 0x00060006u, - 0x0000035cu, 0x00000002u, 0x72726176u, 0x695f7961u, 0x00007864u, 0x00070006u, 0x0000035cu, 0x00000003u, - 0x61697274u, 0x656c676eu, 0x756f635fu, 0x0000746eu, 0x00070006u, 0x0000035cu, 0x00000004u, 0x74726576u, - 0x635f7865u, 0x746e756fu, 0x00000000u, 0x00080006u, 0x0000035cu, 0x00000005u, 0x64627573u, 0x73697669u, - 0x5f6e6f69u, 0x6576656cu, 0x0000006cu, 0x00050006u, 0x0000035cu, 0x00000006u, 0x6f6c6f63u, 0x00000072u, - 0x00050006u, 0x0000035cu, 0x00000007u, 0x625f7369u, 0x00007665u, 0x00040005u, 0x0000035eu, 0x6c796170u, - 0x0064616fu, 0x00030005u, 0x00000362u, 0x00646974u, 0x00080005u, 0x00000363u, 0x4c5f6c67u, 0x6c61636fu, - 0x6f766e49u, 0x69746163u, 0x44496e6fu, 0x00000000u, 0x00050005u, 0x00000367u, 0x646e6552u, 0x75517265u, - 0x00797265u, 0x00060006u, 0x00000367u, 0x00000000u, 0x6e656373u, 0x64695f65u, 0x00000000u, 0x00060006u, - 0x00000367u, 0x00000001u, 0x656d6163u, 0x695f6172u, 0x00000064u, 0x00070006u, 0x00000367u, 0x00000002u, - 0x656d6974u, 0x6d617473u, 0x73755f70u, 0x00000000u, 0x00070006u, 0x00000367u, 0x00000003u, 0x656d6163u, - 0x745f6172u, 0x5f657079u, 0x00006469u, 0x00050006u, 0x00000367u, 0x00000004u, 0x6461705fu, 0x00000031u, - 0x00050006u, 0x00000367u, 0x00000005u, 0x6461705fu, 0x00000032u, 0x00050006u, 0x00000367u, 0x00000006u, - 0x6461705fu, 0x00000033u, 0x00040005u, 0x00000369u, 0x72657571u, 0x00000079u, 0x00050005u, 0x0000036au, - 0x646e6552u, 0x75517265u, 0x00797265u, 0x00060006u, 0x0000036au, 0x00000000u, 0x6e656373u, 0x64695f65u, - 0x00000000u, 0x00060006u, 0x0000036au, 0x00000001u, 0x656d6163u, 0x695f6172u, 0x00000064u, 0x00070006u, - 0x0000036au, 0x00000002u, 0x656d6974u, 0x6d617473u, 0x73755f70u, 0x00000000u, 0x00070006u, 0x0000036au, - 0x00000003u, 0x656d6163u, 0x745f6172u, 0x5f657079u, 0x00006469u, 0x00050006u, 0x0000036au, 0x00000004u, - 0x6461705fu, 0x00000031u, 0x00050006u, 0x0000036au, 0x00000005u, 0x6461705fu, 0x00000032u, 0x00050006u, - 0x0000036au, 0x00000006u, 0x6461705fu, 0x00000033u, 0x00050005u, 0x0000036cu, 0x72657551u, 0x66754279u, - 0x00726566u, 0x00060006u, 0x0000036cu, 0x00000000u, 0x75715f67u, 0x65697265u, 0x00000073u, 0x00030005u, - 0x0000036eu, 0x00000000u, 0x00070005u, 0x00000377u, 0x656d6954u, 0x6d617473u, 0x53646570u, 0x656e6563u, - 0x00000000u, 0x00080006u, 0x00000377u, 0x00000000u, 0x5f6d756eu, 0x796c6f70u, 0x656e696cu, 0x6f6f705fu, - 0x0000736cu, 0x00090006u, 0x00000377u, 0x00000001u, 0x796c6f70u, 0x656e696cu, 0x6f6f705fu, 0x6f5f736cu, - 0x65736666u, 0x00000074u, 0x00080006u, 0x00000377u, 0x00000002u, 0x5f6d756eu, 0x796c6f70u, 0x5f6e6f67u, - 0x6c6f6f70u, 0x00000073u, 0x00090006u, 0x00000377u, 0x00000003u, 0x796c6f70u, 0x5f6e6f67u, 0x6c6f6f70u, - 0x666f5f73u, 0x74657366u, 0x00000000u, 0x00070006u, 0x00000377u, 0x00000004u, 0x5f6d756eu, 0x65627563u, - 0x6f6f705fu, 0x0000736cu, 0x00080006u, 0x00000377u, 0x00000005u, 0x65627563u, 0x6f6f705fu, 0x6f5f736cu, - 0x65736666u, 0x00000074u, 0x000a0006u, 0x00000377u, 0x00000006u, 0x656d6974u, 0x6d617473u, 0x625f7370u, - 0x65666675u, 0x666f5f72u, 0x74657366u, 0x00000000u, 0x00080006u, 0x00000377u, 0x00000007u, 0x33746e69u, - 0x75625f32u, 0x72656666u, 0x66666f5fu, 0x00746573u, 0x00090006u, 0x00000377u, 0x00000008u, 0x74726576u, - 0x625f7865u, 0x65666675u, 0x666f5f72u, 0x74657366u, 0x00000000u, 0x00090006u, 0x00000377u, 0x00000009u, - 0x61697274u, 0x656c676eu, 0x6675625fu, 0x5f726566u, 0x7366666fu, 0x00007465u, 0x00080006u, 0x00000377u, - 0x0000000au, 0x65736f70u, 0x6675625fu, 0x5f726566u, 0x7366666fu, 0x00007465u, 0x00080006u, 0x00000377u, - 0x0000000bu, 0x616f6c66u, 0x75625f74u, 0x72656666u, 0x66666f5fu, 0x00746573u, 0x00050006u, 0x00000377u, - 0x0000000cu, 0x6461705fu, 0x00000000u, 0x00040005u, 0x00000379u, 0x6e656373u, 0x00000065u, 0x00070005u, - 0x0000037bu, 0x656d6954u, 0x6d617473u, 0x53646570u, 0x656e6563u, 0x00000000u, 0x00080006u, 0x0000037bu, - 0x00000000u, 0x5f6d756eu, 0x796c6f70u, 0x656e696cu, 0x6f6f705fu, 0x0000736cu, 0x00090006u, 0x0000037bu, - 0x00000001u, 0x796c6f70u, 0x656e696cu, 0x6f6f705fu, 0x6f5f736cu, 0x65736666u, 0x00000074u, 0x00080006u, - 0x0000037bu, 0x00000002u, 0x5f6d756eu, 0x796c6f70u, 0x5f6e6f67u, 0x6c6f6f70u, 0x00000073u, 0x00090006u, - 0x0000037bu, 0x00000003u, 0x796c6f70u, 0x5f6e6f67u, 0x6c6f6f70u, 0x666f5f73u, 0x74657366u, 0x00000000u, - 0x00070006u, 0x0000037bu, 0x00000004u, 0x5f6d756eu, 0x65627563u, 0x6f6f705fu, 0x0000736cu, 0x00080006u, - 0x0000037bu, 0x00000005u, 0x65627563u, 0x6f6f705fu, 0x6f5f736cu, 0x65736666u, 0x00000074u, 0x000a0006u, - 0x0000037bu, 0x00000006u, 0x656d6974u, 0x6d617473u, 0x625f7370u, 0x65666675u, 0x666f5f72u, 0x74657366u, - 0x00000000u, 0x00080006u, 0x0000037bu, 0x00000007u, 0x33746e69u, 0x75625f32u, 0x72656666u, 0x66666f5fu, - 0x00746573u, 0x00090006u, 0x0000037bu, 0x00000008u, 0x74726576u, 0x625f7865u, 0x65666675u, 0x666f5f72u, - 0x74657366u, 0x00000000u, 0x00090006u, 0x0000037bu, 0x00000009u, 0x61697274u, 0x656c676eu, 0x6675625fu, - 0x5f726566u, 0x7366666fu, 0x00007465u, 0x00080006u, 0x0000037bu, 0x0000000au, 0x65736f70u, 0x6675625fu, - 0x5f726566u, 0x7366666fu, 0x00007465u, 0x00080006u, 0x0000037bu, 0x0000000bu, 0x616f6c66u, 0x75625f74u, - 0x72656666u, 0x66666f5fu, 0x00746573u, 0x00050006u, 0x0000037bu, 0x0000000cu, 0x6461705fu, 0x00000000u, - 0x00050005u, 0x0000037du, 0x6e656353u, 0x66754265u, 0x00726566u, 0x00060006u, 0x0000037du, 0x00000000u, - 0x63735f67u, 0x73656e65u, 0x00000000u, 0x00030005u, 0x0000037fu, 0x00000000u, 0x00080005u, 0x00000386u, - 0x656d6954u, 0x6d617473u, 0x50646570u, 0x67796c6fu, 0x6f506e6fu, 0x00006c6fu, 0x00070006u, 0x00000386u, - 0x00000000u, 0x5f6d756eu, 0x656d6974u, 0x6d617473u, 0x00007370u, 0x00060006u, 0x00000386u, 0x00000001u, - 0x5f6d756eu, 0x72726176u, 0x00737961u, 0x00070006u, 0x00000386u, 0x00000002u, 0x5f6d756eu, 0x74726576u, - 0x73656369u, 0x00000000u, 0x00070006u, 0x00000386u, 0x00000003u, 0x5f6d756eu, 0x61697274u, 0x656c676eu, - 0x00000073u, 0x00070006u, 0x00000386u, 0x00000004u, 0x6d697270u, 0x7079745fu, 0x64695f65u, 0x00000000u, - 0x00080006u, 0x00000386u, 0x00000005u, 0x656d6974u, 0x6d617473u, 0x6f5f7370u, 0x65736666u, 0x00000074u, - 0x00090006u, 0x00000386u, 0x00000006u, 0x765f7374u, 0x61727261u, 0x705f7379u, 0x666f5f73u, 0x74657366u, - 0x00000000u, 0x00080006u, 0x00000386u, 0x00000007u, 0x72726176u, 0x5f737961u, 0x6f5f7370u, 0x65736666u, - 0x00000074u, 0x00070006u, 0x00000386u, 0x00000008u, 0x5f697274u, 0x6f5f7370u, 0x65736666u, 0x00000074u, - 0x00070006u, 0x00000386u, 0x00000009u, 0x74726576u, 0x73656369u, 0x66666f5fu, 0x00746573u, 0x00080006u, - 0x00000386u, 0x0000000au, 0x61697274u, 0x656c676eu, 0x666f5f73u, 0x74657366u, 0x00000000u, 0x00060006u, - 0x00000386u, 0x0000000bu, 0x62626161u, 0x66666f5fu, 0x00746573u, 0x00050006u, 0x00000386u, 0x0000000cu, - 0x6461705fu, 0x00000031u, 0x00050006u, 0x00000386u, 0x0000000du, 0x6461705fu, 0x00000032u, 0x00050006u, - 0x00000386u, 0x0000000eu, 0x6461705fu, 0x00000033u, 0x00050006u, 0x00000386u, 0x0000000fu, 0x6461705fu, - 0x00000034u, 0x00040005u, 0x00000388u, 0x6c6f6f70u, 0x00000000u, 0x00080005u, 0x00000389u, 0x656d6954u, - 0x6d617473u, 0x50646570u, 0x67796c6fu, 0x6f506e6fu, 0x00006c6fu, 0x00070006u, 0x00000389u, 0x00000000u, - 0x5f6d756eu, 0x656d6974u, 0x6d617473u, 0x00007370u, 0x00060006u, 0x00000389u, 0x00000001u, 0x5f6d756eu, - 0x72726176u, 0x00737961u, 0x00070006u, 0x00000389u, 0x00000002u, 0x5f6d756eu, 0x74726576u, 0x73656369u, - 0x00000000u, 0x00070006u, 0x00000389u, 0x00000003u, 0x5f6d756eu, 0x61697274u, 0x656c676eu, 0x00000073u, - 0x00070006u, 0x00000389u, 0x00000004u, 0x6d697270u, 0x7079745fu, 0x64695f65u, 0x00000000u, 0x00080006u, - 0x00000389u, 0x00000005u, 0x656d6974u, 0x6d617473u, 0x6f5f7370u, 0x65736666u, 0x00000074u, 0x00090006u, - 0x00000389u, 0x00000006u, 0x765f7374u, 0x61727261u, 0x705f7379u, 0x666f5f73u, 0x74657366u, 0x00000000u, - 0x00080006u, 0x00000389u, 0x00000007u, 0x72726176u, 0x5f737961u, 0x6f5f7370u, 0x65736666u, 0x00000074u, - 0x00070006u, 0x00000389u, 0x00000008u, 0x5f697274u, 0x6f5f7370u, 0x65736666u, 0x00000074u, 0x00070006u, - 0x00000389u, 0x00000009u, 0x74726576u, 0x73656369u, 0x66666f5fu, 0x00746573u, 0x00080006u, 0x00000389u, - 0x0000000au, 0x61697274u, 0x656c676eu, 0x666f5f73u, 0x74657366u, 0x00000000u, 0x00060006u, 0x00000389u, - 0x0000000bu, 0x62626161u, 0x66666f5fu, 0x00746573u, 0x00050006u, 0x00000389u, 0x0000000cu, 0x6461705fu, - 0x00000031u, 0x00050006u, 0x00000389u, 0x0000000du, 0x6461705fu, 0x00000032u, 0x00050006u, 0x00000389u, - 0x0000000eu, 0x6461705fu, 0x00000033u, 0x00050006u, 0x00000389u, 0x0000000fu, 0x6461705fu, 0x00000034u, - 0x00070005u, 0x0000038bu, 0x796c6f50u, 0x506e6f67u, 0x426c6f6fu, 0x65666675u, 0x00000072u, 0x00070006u, - 0x0000038bu, 0x00000000u, 0x6f705f67u, 0x6f67796cu, 0x6f705f6eu, 0x00736c6fu, 0x00030005u, 0x0000038du, - 0x00000000u, 0x00030005u, 0x00000397u, 0x006d6163u, 0x00060005u, 0x00000398u, 0x65685446u, 0x61436174u, - 0x6172656du, 0x00000000u, 0x00040006u, 0x00000398u, 0x00000000u, 0x00007863u, 0x00040006u, 0x00000398u, - 0x00000001u, 0x00007963u, 0x00050006u, 0x00000398u, 0x00000002u, 0x5f676d69u, 0x00000077u, 0x00050006u, - 0x00000398u, 0x00000003u, 0x5f676d69u, 0x00000068u, 0x00050006u, 0x00000398u, 0x00000004u, 0x796c6f70u, - 0x00000030u, 0x00050006u, 0x00000398u, 0x00000005u, 0x796c6f70u, 0x00000031u, 0x00050006u, 0x00000398u, - 0x00000006u, 0x796c6f70u, 0x00000032u, 0x00050006u, 0x00000398u, 0x00000007u, 0x796c6f70u, 0x00000033u, - 0x00050006u, 0x00000398u, 0x00000008u, 0x796c6f70u, 0x00000034u, 0x00050006u, 0x00000398u, 0x00000009u, - 0x796c6f70u, 0x00000035u, 0x00070006u, 0x00000398u, 0x0000000au, 0x5f78616du, 0x5f796172u, 0x6c676e61u, - 0x00000065u, 0x00080006u, 0x00000398u, 0x0000000bu, 0x5f78616du, 0x74736964u, 0x6974726fu, 0x765f6e6fu, - 0x00006c61u, 0x00080006u, 0x00000398u, 0x0000000cu, 0x5f78616du, 0x74736964u, 0x6974726fu, 0x645f6e6fu, - 0x006c6176u, 0x00060006u, 0x00000398u, 0x0000000du, 0x74706564u, 0x616d5f68u, 0x00000078u, 0x00050006u, - 0x00000398u, 0x0000000eu, 0x635f646cu, 0x00000000u, 0x00050006u, 0x00000398u, 0x0000000fu, 0x645f646cu, - 0x00000000u, 0x00050006u, 0x00000398u, 0x00000010u, 0x655f646cu, 0x00000000u, 0x00050006u, 0x00000398u, - 0x00000011u, 0x665f646cu, 0x00000000u, 0x00080005u, 0x0000039au, 0x656d6143u, 0x6e496172u, 0x6e697274u, - 0x73636973u, 0x66667542u, 0x00007265u, 0x00080006u, 0x0000039au, 0x00000000u, 0x61635f67u, 0x6172656du, - 0x746e695fu, 0x736e6972u, 0x00736369u, 0x00030005u, 0x0000039cu, 0x00000000u, 0x00040005u, 0x000003a3u, - 0x65736f70u, 0x00000000u, 0x00050005u, 0x000003a4u, 0x656d6143u, 0x6f506172u, 0x00006573u, 0x00070006u, - 0x000003a4u, 0x00000000u, 0x6c726f77u, 0x6f745f64u, 0x6d61635fu, 0x00617265u, 0x00070005u, 0x000003a6u, - 0x656d6143u, 0x6f506172u, 0x75426573u, 0x72656666u, 0x00000000u, 0x00070006u, 0x000003a6u, 0x00000000u, - 0x61635f67u, 0x6172656du, 0x736f705fu, 0x00007365u, 0x00030005u, 0x000003a8u, 0x00000000u, 0x00050005u, - 0x000003afu, 0x5f697274u, 0x72617473u, 0x00000074u, 0x00050005u, 0x000003b6u, 0x33746e49u, 0x66754232u, - 0x00726566u, 0x00050006u, 0x000003b6u, 0x00000000u, 0x6e695f67u, 0x00323374u, 0x00030005u, 0x000003b8u, - 0x00000000u, 0x00040005u, 0x000003c6u, 0x5f697274u, 0x00646e65u, 0x00050005u, 0x000003d2u, 0x61746f74u, - 0x72745f6cu, 0x00007369u, 0x00040005u, 0x000003d6u, 0x74735f76u, 0x00747261u, 0x00050005u, 0x000003e8u, - 0x65736162u, 0x695f765fu, 0x00007864u, 0x00050005u, 0x000003f0u, 0x65736162u, 0x695f745fu, 0x00007864u, - 0x00050005u, 0x00000405u, 0x5f6d756eu, 0x74726576u, 0x00000073u, 0x00050005u, 0x00000409u, 0x5f6d756eu, - 0x73697274u, 0x00000000u, 0x00040005u, 0x00000414u, 0x74726556u, 0x00007865u, 0x00040006u, 0x00000414u, - 0x00000000u, 0x00000078u, 0x00040006u, 0x00000414u, 0x00000001u, 0x00000079u, 0x00040006u, 0x00000414u, - 0x00000002u, 0x0000007au, 0x00050006u, 0x00000414u, 0x00000003u, 0x6461705fu, 0x00000000u, 0x00030005u, - 0x00000416u, 0x00787476u, 0x00040005u, 0x00000417u, 0x74726556u, 0x00007865u, 0x00040006u, 0x00000417u, - 0x00000000u, 0x00000078u, 0x00040006u, 0x00000417u, 0x00000001u, 0x00000079u, 0x00040006u, 0x00000417u, - 0x00000002u, 0x0000007au, 0x00050006u, 0x00000417u, 0x00000003u, 0x6461705fu, 0x00000000u, 0x00060005u, - 0x00000419u, 0x74726556u, 0x75427865u, 0x72656666u, 0x00000000u, 0x00060006u, 0x00000419u, 0x00000000u, - 0x65765f67u, 0x63697472u, 0x00007365u, 0x00030005u, 0x0000041bu, 0x00000000u, 0x00050005u, 0x00000423u, - 0x6c726f77u, 0x6f705f64u, 0x00000073u, 0x00040005u, 0x0000042cu, 0x70696c63u, 0x00000000u, 0x00040005u, - 0x0000042du, 0x61726170u, 0x0000006du, 0x00040005u, 0x0000042fu, 0x61726170u, 0x0000006du, 0x00040005u, - 0x00000431u, 0x61726170u, 0x0000006du, 0x00070005u, 0x00000434u, 0x4d5f6c67u, 0x50687365u, 0x65567265u, - 0x78657472u, 0x00545845u, 0x00060006u, 0x00000434u, 0x00000000u, 0x505f6c67u, 0x7469736fu, 0x006e6f69u, - 0x00070005u, 0x00000437u, 0x4d5f6c67u, 0x56687365u, 0x69747265u, 0x45736563u, 0x00005458u, 0x00030005u, - 0x00000442u, 0x00697274u, 0x00060005u, 0x00000444u, 0x61697254u, 0x656c676eu, 0x66667542u, 0x00007265u, - 0x00060006u, 0x00000444u, 0x00000000u, 0x72745f67u, 0x676e6169u, 0x0073656cu, 0x00030005u, 0x00000446u, - 0x00000000u, 0x00040005u, 0x0000044du, 0x65736162u, 0x00000000u, 0x000a0005u, 0x00000452u, 0x505f6c67u, - 0x696d6972u, 0x65766974u, 0x61697254u, 0x656c676eu, 0x69646e49u, 0x45736563u, 0x00005458u, 0x00080005u, - 0x0000045eu, 0x4d5f6c67u, 0x50687365u, 0x72507265u, 0x74696d69u, 0x45657669u, 0x00005458u, 0x00060006u, - 0x0000045eu, 0x00000000u, 0x4c5f6c67u, 0x72657961u, 0x00000000u, 0x00080005u, 0x00000461u, 0x4d5f6c67u, - 0x50687365u, 0x696d6972u, 0x65766974u, 0x54584573u, 0x00000000u, 0x00060005u, 0x00000468u, 0x6d697250u, - 0x6f6c6f43u, 0x6f6c4272u, 0x00006b63u, 0x00050006u, 0x00000468u, 0x00000000u, 0x6f6c6f63u, 0x00000072u, - 0x00050006u, 0x00000468u, 0x00000001u, 0x625f7369u, 0x00007665u, 0x00050005u, 0x0000046bu, 0x6d697270u, - 0x74756f5fu, 0x00000000u, 0x00060005u, 0x0000047du, 0x74726576u, 0x65705f73u, 0x72745f72u, 0x00000069u, - 0x00040005u, 0x0000047eu, 0x61726170u, 0x0000006du, 0x00060005u, 0x00000480u, 0x73697274u, 0x7265705fu, - 0x6972745fu, 0x00000000u, 0x00040005u, 0x00000481u, 0x61726170u, 0x0000006du, 0x00060005u, 0x00000483u, - 0x73697274u, 0x7265705fu, 0x7568635fu, 0x00006b6eu, 0x00050005u, 0x00000484u, 0x6e756863u, 0x74735f6bu, - 0x00747261u, 0x00050005u, 0x00000488u, 0x6e756863u, 0x6e655f6bu, 0x00000064u, 0x00060005u, 0x0000048eu, - 0x5f6d756eu, 0x6769726fu, 0x6972745fu, 0x00000073u, 0x00060005u, 0x00000498u, 0x5f6d756eu, 0x5f74756fu, - 0x74726576u, 0x00000073u, 0x00060005u, 0x0000049cu, 0x5f6d756eu, 0x5f74756fu, 0x73697274u, 0x00000000u, - 0x00030005u, 0x000004a8u, 0x00697274u, 0x00040005u, 0x000004b0u, 0x645f3076u, 0x00617461u, 0x00040005u, - 0x000004b8u, 0x645f3176u, 0x00617461u, 0x00040005u, 0x000004c0u, 0x645f3276u, 0x00617461u, 0x00030005u, - 0x000004c8u, 0x00003076u, 0x00030005u, 0x000004d0u, 0x00003176u, 0x00030005u, 0x000004d8u, 0x00003276u, - 0x00050005u, 0x000004e0u, 0x74726576u, 0x7361625fu, 0x00000065u, 0x00030005u, 0x000004e4u, 0x00000069u, - 0x00030005u, 0x000004edu, 0x00007675u, 0x00040005u, 0x000004eeu, 0x61726170u, 0x0000006du, 0x00040005u, - 0x000004f0u, 0x61726170u, 0x0000006du, 0x00030005u, 0x000004f2u, 0x00007470u, 0x00040005u, 0x000004f3u, - 0x61726170u, 0x0000006du, 0x00040005u, 0x000004f5u, 0x61726170u, 0x0000006du, 0x00040005u, 0x000004f7u, - 0x61726170u, 0x0000006du, 0x00040005u, 0x000004f9u, 0x61726170u, 0x0000006du, 0x00040005u, 0x000004fcu, - 0x70696c63u, 0x00000000u, 0x00040005u, 0x000004fdu, 0x61726170u, 0x0000006du, 0x00040005u, 0x000004ffu, - 0x61726170u, 0x0000006du, 0x00040005u, 0x00000501u, 0x61726170u, 0x0000006du, 0x00050005u, 0x00000510u, - 0x74726576u, 0x7361625fu, 0x00000065u, 0x00050005u, 0x00000514u, 0x5f697274u, 0x65736162u, 0x00000000u, - 0x00030005u, 0x00000518u, 0x00000074u, 0x00030005u, 0x00000521u, 0x00786469u, 0x00040005u, 0x00000522u, - 0x61726170u, 0x0000006du, 0x00040005u, 0x00000524u, 0x61726170u, 0x0000006du, 0x00050005u, 0x00000526u, - 0x5f786469u, 0x65736162u, 0x00000000u, 0x00050005u, 0x00000555u, 0x6e756863u, 0x74735f6bu, 0x00747261u, - 0x00050005u, 0x00000558u, 0x6e756863u, 0x6e655f6bu, 0x00000064u, 0x00060005u, 0x0000055du, 0x5f6d756eu, - 0x6769726fu, 0x6972745fu, 0x00000073u, 0x00060005u, 0x00000567u, 0x5f6d756eu, 0x5f74756fu, 0x74726576u, - 0x00000073u, 0x00050005u, 0x0000056eu, 0x5f697274u, 0x61636f6cu, 0x0000006cu, 0x00050005u, 0x00000571u, - 0x74726576u, 0x636f6c5fu, 0x00006c61u, 0x00030005u, 0x0000057cu, 0x00697274u, 0x00040005u, 0x00000584u, - 0x645f3076u, 0x00617461u, 0x00040005u, 0x0000058cu, 0x645f3176u, 0x00617461u, 0x00040005u, 0x00000594u, - 0x645f3276u, 0x00617461u, 0x00030005u, 0x0000059cu, 0x00003076u, 0x00030005u, 0x000005a4u, 0x00003176u, - 0x00030005u, 0x000005acu, 0x00003276u, 0x00030005u, 0x000005b4u, 0x00007675u, 0x00040005u, 0x000005b5u, - 0x61726170u, 0x0000006du, 0x00040005u, 0x000005b7u, 0x61726170u, 0x0000006du, 0x00030005u, 0x000005b9u, - 0x00007470u, 0x00040005u, 0x000005bau, 0x61726170u, 0x0000006du, 0x00040005u, 0x000005bcu, 0x61726170u, - 0x0000006du, 0x00040005u, 0x000005beu, 0x61726170u, 0x0000006du, 0x00040005u, 0x000005c0u, 0x61726170u, - 0x0000006du, 0x00040005u, 0x000005c3u, 0x70696c63u, 0x00000000u, 0x00040005u, 0x000005c4u, 0x61726170u, - 0x0000006du, 0x00040005u, 0x000005c6u, 0x61726170u, 0x0000006du, 0x00040005u, 0x000005c8u, 0x61726170u, - 0x0000006du, 0x00050005u, 0x000005cbu, 0x74726576u, 0x7864695fu, 0x00000000u, 0x00050005u, 0x000005dbu, - 0x74726576u, 0x7361625fu, 0x00000065u, 0x00050005u, 0x000005deu, 0x5f697274u, 0x5f74756fu, 0x00786469u, - 0x00030005u, 0x000005e3u, 0x00786469u, 0x00040005u, 0x000005e4u, 0x61726170u, 0x0000006du, 0x00040005u, - 0x000005e6u, 0x61726170u, 0x0000006du, 0x00050005u, 0x000005e8u, 0x5f786469u, 0x65736162u, 0x00000000u, - 0x00050005u, 0x0000060du, 0x6e756863u, 0x74735f6bu, 0x00747261u, 0x00030005u, 0x00000618u, 0x00697274u, - 0x00040005u, 0x0000061eu, 0x645f3076u, 0x00617461u, 0x00040005u, 0x00000626u, 0x645f3176u, 0x00617461u, - 0x00040005u, 0x0000062eu, 0x645f3276u, 0x00617461u, 0x00030005u, 0x00000636u, 0x00003076u, 0x00030005u, - 0x0000063eu, 0x00003176u, 0x00030005u, 0x00000646u, 0x00003276u, 0x00030005u, 0x0000064eu, 0x00000076u, - 0x00030005u, 0x00000657u, 0x00007675u, 0x00040005u, 0x00000658u, 0x61726170u, 0x0000006du, 0x00040005u, - 0x0000065au, 0x61726170u, 0x0000006du, 0x00030005u, 0x0000065cu, 0x00007470u, 0x00040005u, 0x0000065du, - 0x61726170u, 0x0000006du, 0x00040005u, 0x0000065fu, 0x61726170u, 0x0000006du, 0x00040005u, 0x00000661u, - 0x61726170u, 0x0000006du, 0x00040005u, 0x00000663u, 0x61726170u, 0x0000006du, 0x00040005u, 0x00000666u, - 0x70696c63u, 0x00000000u, 0x00040005u, 0x00000667u, 0x61726170u, 0x0000006du, 0x00040005u, 0x00000669u, - 0x61726170u, 0x0000006du, 0x00040005u, 0x0000066bu, 0x61726170u, 0x0000006du, 0x00030005u, 0x00000673u, - 0x00000074u, 0x00030005u, 0x0000067cu, 0x00786469u, 0x00040005u, 0x0000067du, 0x61726170u, 0x0000006du, - 0x00040005u, 0x0000067fu, 0x61726170u, 0x0000006du, 0x00050005u, 0x00000681u, 0x5f786469u, 0x65736162u, - 0x00000000u, 0x00050005u, 0x0000069eu, 0x6e756863u, 0x74735f6bu, 0x00747261u, 0x00050005u, 0x000006a1u, - 0x6e756863u, 0x6e655f6bu, 0x00000064u, 0x00060005u, 0x000006a6u, 0x5f6d756eu, 0x6769726fu, 0x6972745fu, - 0x00000073u, 0x00060005u, 0x000006b0u, 0x5f6d756eu, 0x5f74756fu, 0x74726576u, 0x00000073u, 0x00030005u, - 0x000006bbu, 0x00697274u, 0x00040005u, 0x000006c3u, 0x645f3076u, 0x00617461u, 0x00040005u, 0x000006cbu, - 0x645f3176u, 0x00617461u, 0x00040005u, 0x000006d3u, 0x645f3276u, 0x00617461u, 0x00030005u, 0x000006dbu, - 0x00003076u, 0x00030005u, 0x000006e3u, 0x00003176u, 0x00030005u, 0x000006ebu, 0x00003276u, 0x00050005u, - 0x000006f3u, 0x74726576u, 0x7361625fu, 0x00000065u, 0x00040005u, 0x000006f6u, 0x70696c63u, 0x00000030u, - 0x00040005u, 0x000006f7u, 0x61726170u, 0x0000006du, 0x00040005u, 0x000006f9u, 0x61726170u, 0x0000006du, - 0x00040005u, 0x000006fbu, 0x61726170u, 0x0000006du, 0x00040005u, 0x000006feu, 0x70696c63u, 0x00000031u, - 0x00040005u, 0x000006ffu, 0x61726170u, 0x0000006du, 0x00040005u, 0x00000701u, 0x61726170u, 0x0000006du, - 0x00040005u, 0x00000703u, 0x61726170u, 0x0000006du, 0x00040005u, 0x00000706u, 0x70696c63u, 0x00000032u, - 0x00040005u, 0x00000707u, 0x61726170u, 0x0000006du, 0x00040005u, 0x00000709u, 0x61726170u, 0x0000006du, - 0x00040005u, 0x0000070bu, 0x61726170u, 0x0000006du, 0x00050005u, 0x0000071au, 0x5f786469u, 0x65736162u, - 0x00000000u, 0x00060005u, 0x00000734u, 0x68737550u, 0x736e6f43u, 0x746e6174u, 0x00000073u, 0x000a0006u, - 0x00000734u, 0x00000000u, 0x69775f75u, 0x5f687464u, 0x796c6f70u, 0x656e696cu, 0x6765725fu, 0x72616c75u, - 0x00000000u, 0x00090006u, 0x00000734u, 0x00000001u, 0x69775f75u, 0x5f687464u, 0x796c6f70u, 0x656e696cu, - 0x7665625fu, 0x00000000u, 0x000a0006u, 0x00000734u, 0x00000002u, 0x69775f75u, 0x5f687464u, 0x5f6f6765u, - 0x6a617274u, 0x6765725fu, 0x72616c75u, 0x00000000u, 0x00090006u, 0x00000734u, 0x00000003u, 0x69775f75u, - 0x5f687464u, 0x5f6f6765u, 0x6a617274u, 0x7665625fu, 0x00000000u, 0x00080006u, 0x00000734u, 0x00000004u, - 0x69775f75u, 0x5f687464u, 0x65726977u, 0x6d617266u, 0x00000065u, 0x00080006u, 0x00000734u, 0x00000005u, - 0x65725f75u, 0x756c6f73u, 0x6e6f6974u, 0x6163735fu, 0x0000656cu, 0x00070006u, 0x00000734u, 0x00000006u, - 0x65645f75u, 0x5f687470u, 0x6c616373u, 0x00676e69u, 0x00090006u, 0x00000734u, 0x00000007u, 0x616d5f75u, - 0x78655f78u, 0x70617274u, 0x74616c6fu, 0x5f6e6f69u, 0x00007375u, 0x00090006u, 0x00000734u, 0x00000008u, - 0x6f635f75u, 0x5f726f6cu, 0x656c6170u, 0x5f657474u, 0x657a6973u, 0x00000000u, 0x00070006u, 0x00000734u, - 0x00000009u, 0x756e5f75u, 0x75715f6du, 0x65697265u, 0x00000073u, 0x000a0006u, 0x00000734u, 0x0000000au, - 0x65745f75u, 0x6c657373u, 0x6974616cu, 0x745f6e6fu, 0x73657268u, 0x646c6f68u, 0x00000000u, 0x000a0006u, - 0x00000734u, 0x0000000bu, 0x616d5f75u, 0x65745f78u, 0x6c657373u, 0x6974616cu, 0x705f6e6fu, 0x6c796c6fu, - 0x00656e69u, 0x000a0006u, 0x00000734u, 0x0000000cu, 0x616d5f75u, 0x65745f78u, 0x6c657373u, 0x6974616cu, - 0x705f6e6fu, 0x67796c6fu, 0x00006e6fu, 0x00090006u, 0x00000734u, 0x0000000du, 0x616d5f75u, 0x65745f78u, - 0x6c657373u, 0x6974616cu, 0x635f6e6fu, 0x00656275u, 0x00080006u, 0x00000734u, 0x0000000eu, 0x75635f75u, - 0x725f6c6cu, 0x75696461u, 0x63735f73u, 0x00656c61u, 0x00070006u, 0x00000734u, 0x0000000fu, 0x6f665f75u, - 0x6e655f67u, 0x656c6261u, 0x00000064u, 0x00070006u, 0x00000734u, 0x00000010u, 0x616d5f75u, 0x626f5f78u, - 0x63617473u, 0x0073656cu, 0x00080006u, 0x00000734u, 0x00000011u, 0x75635f75u, 0x705f6562u, 0x5f6c6f6fu, - 0x65646e69u, 0x00000078u, 0x00080006u, 0x00000734u, 0x00000012u, 0x756e5f75u, 0x6f705f6du, 0x6f67796cu, - 0x6f705f6eu, 0x00736c6fu, 0x00090006u, 0x00000734u, 0x00000013u, 0x616d5f75u, 0x61765f78u, 0x79617272u, - 0x65705f73u, 0x6f705f72u, 0x00006c6fu, 0x00090006u, 0x00000734u, 0x00000014u, 0x756e5f75u, 0x6f705f6du, - 0x696c796cu, 0x705f656eu, 0x736c6f6fu, 0x00000000u, 0x00030005u, 0x00000736u, 0x00006370u, 0x00080005u, - 0x00000767u, 0x6f6c6f43u, 0x6c615072u, 0x65747465u, 0x66667542u, 0x61457265u, 0x00796c72u, 0x00070006u, - 0x00000767u, 0x00000000u, 0x6f635f67u, 0x5f726f6cu, 0x656c6170u, 0x00657474u, 0x00030005u, 0x00000769u, - 0x00000000u, 0x00070005u, 0x0000076bu, 0x656d6954u, 0x6d617473u, 0x75427370u, 0x72656666u, 0x00000000u, - 0x00070006u, 0x0000076bu, 0x00000000u, 0x69745f67u, 0x7473656du, 0x73706d61u, 0x00000000u, 0x00030005u, - 0x0000076du, 0x00000000u, 0x00050005u, 0x0000076fu, 0x65736f50u, 0x66667542u, 0x00007265u, 0x00050006u, - 0x0000076fu, 0x00000000u, 0x6f705f67u, 0x00736573u, 0x00030005u, 0x00000771u, 0x00000000u, 0x00050005u, - 0x00000773u, 0x616f6c46u, 0x66754274u, 0x00726566u, 0x00060006u, 0x00000773u, 0x00000000u, 0x6c665f67u, - 0x7374616fu, 0x00000000u, 0x00030005u, 0x00000775u, 0x00000000u, 0x00080005u, 0x00000776u, 0x656d6954u, - 0x6d617473u, 0x50646570u, 0x6c796c6fu, 0x50656e69u, 0x006c6f6fu, 0x00070006u, 0x00000776u, 0x00000000u, - 0x5f6d756eu, 0x656d6974u, 0x6d617473u, 0x00007370u, 0x00060006u, 0x00000776u, 0x00000001u, 0x5f6d756eu, - 0x72726176u, 0x00737961u, 0x00070006u, 0x00000776u, 0x00000002u, 0x5f6d756eu, 0x74726576u, 0x73656369u, - 0x00000000u, 0x00070006u, 0x00000776u, 0x00000003u, 0x6d697270u, 0x7079745fu, 0x64695f65u, 0x00000000u, - 0x00080006u, 0x00000776u, 0x00000004u, 0x656d6974u, 0x6d617473u, 0x6f5f7370u, 0x65736666u, 0x00000074u, - 0x00090006u, 0x00000776u, 0x00000005u, 0x765f7374u, 0x61727261u, 0x705f7379u, 0x666f5f73u, 0x74657366u, - 0x00000000u, 0x00080006u, 0x00000776u, 0x00000006u, 0x72726176u, 0x5f737961u, 0x6f5f7370u, 0x65736666u, - 0x00000074u, 0x00070006u, 0x00000776u, 0x00000007u, 0x74726576u, 0x73656369u, 0x66666f5fu, 0x00746573u, - 0x00060006u, 0x00000776u, 0x00000008u, 0x62626161u, 0x66666f5fu, 0x00746573u, 0x00050006u, 0x00000776u, - 0x00000009u, 0x6461705fu, 0x00000031u, 0x00050006u, 0x00000776u, 0x0000000au, 0x6461705fu, 0x00000032u, - 0x00050006u, 0x00000776u, 0x0000000bu, 0x6461705fu, 0x00000033u, 0x00050006u, 0x00000776u, 0x0000000cu, - 0x6461705fu, 0x00000034u, 0x00050006u, 0x00000776u, 0x0000000du, 0x6461705fu, 0x00000035u, 0x00050006u, - 0x00000776u, 0x0000000eu, 0x6461705fu, 0x00000036u, 0x00050006u, 0x00000776u, 0x0000000fu, 0x6461705fu, - 0x00000037u, 0x00070005u, 0x00000778u, 0x796c6f50u, 0x656e696cu, 0x6c6f6f50u, 0x66667542u, 0x00007265u, - 0x00080006u, 0x00000778u, 0x00000000u, 0x6f705f67u, 0x696c796cu, 0x705f656eu, 0x736c6f6fu, 0x00000000u, - 0x00030005u, 0x0000077au, 0x00000000u, 0x00060005u, 0x0000077bu, 0x7473624fu, 0x656c6361u, 0x6c6f6f50u, - 0x00000000u, 0x00060006u, 0x0000077bu, 0x00000000u, 0x5f6d756eu, 0x65627563u, 0x00000073u, 0x00070006u, - 0x0000077bu, 0x00000001u, 0x5f6d756eu, 0x656d6974u, 0x6d617473u, 0x00007370u, 0x00070006u, 0x0000077bu, - 0x00000002u, 0x5f6d756eu, 0x63617274u, 0x6f705f6bu, 0x00736573u, 0x00070006u, 0x0000077bu, 0x00000003u, - 0x6d697270u, 0x7079745fu, 0x64695f65u, 0x00000000u, 0x00080006u, 0x0000077bu, 0x00000004u, 0x656d6974u, - 0x6d617473u, 0x6f5f7370u, 0x65736666u, 0x00000074u, 0x00080006u, 0x0000077bu, 0x00000005u, 0x65627563u, - 0x5f73745fu, 0x6f5f7370u, 0x65736666u, 0x00000074u, 0x00090006u, 0x0000077bu, 0x00000006u, 0x63617274u, - 0x69745f6bu, 0x7473656du, 0x73706d61u, 0x66666f5fu, 0x00746573u, 0x00080006u, 0x0000077bu, 0x00000007u, - 0x6e617274u, 0x74616c73u, 0x736e6f69u, 0x66666f5fu, 0x00746573u, 0x00080006u, 0x0000077bu, 0x00000008u, - 0x74617571u, 0x696e7265u, 0x5f736e6fu, 0x7366666fu, 0x00007465u, 0x00070006u, 0x0000077bu, 0x00000009u, - 0x6c616373u, 0x6f5f7365u, 0x65736666u, 0x00000074u, 0x00070006u, 0x0000077bu, 0x0000000au, 0x6f6c6f63u, - 0x6f5f7372u, 0x65736666u, 0x00000074u, 0x00070006u, 0x0000077bu, 0x0000000bu, 0x646e6572u, 0x665f7265u, - 0x7367616cu, 0x00000000u, 0x00050006u, 0x0000077bu, 0x0000000cu, 0x6461705fu, 0x00000032u, 0x00050006u, - 0x0000077bu, 0x0000000du, 0x6461705fu, 0x00000033u, 0x00050006u, 0x0000077bu, 0x0000000eu, 0x6461705fu, - 0x00000034u, 0x00050006u, 0x0000077bu, 0x0000000fu, 0x6461705fu, 0x00000035u, 0x00070005u, 0x0000077du, - 0x7473624fu, 0x656c6361u, 0x6c6f6f50u, 0x66667542u, 0x00007265u, 0x00080006u, 0x0000077du, 0x00000000u, - 0x626f5f67u, 0x63617473u, 0x705f656cu, 0x736c6f6fu, 0x00000000u, 0x00030005u, 0x0000077fu, 0x00000000u, - 0x00040047u, 0x00000357u, 0x0000000bu, 0x0000001au, 0x00040047u, 0x00000363u, 0x0000000bu, 0x0000001bu, - 0x00050048u, 0x0000036au, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000036au, 0x00000001u, - 0x00000023u, 0x00000004u, 0x00050048u, 0x0000036au, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, - 0x0000036au, 0x00000003u, 0x00000023u, 0x00000010u, 0x00050048u, 0x0000036au, 0x00000004u, 0x00000023u, - 0x00000014u, 0x00050048u, 0x0000036au, 0x00000005u, 0x00000023u, 0x00000018u, 0x00050048u, 0x0000036au, - 0x00000006u, 0x00000023u, 0x0000001cu, 0x00040047u, 0x0000036bu, 0x00000006u, 0x00000020u, 0x00030047u, - 0x0000036cu, 0x00000002u, 0x00040048u, 0x0000036cu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000036cu, - 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000036eu, 0x00000018u, 0x00040047u, 0x0000036eu, - 0x00000021u, 0x0000000du, 0x00040047u, 0x0000036eu, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000037au, - 0x00000006u, 0x00000004u, 0x00050048u, 0x0000037bu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, - 0x0000037bu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000037bu, 0x00000002u, 0x00000023u, - 0x00000008u, 0x00050048u, 0x0000037bu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x0000037bu, - 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x0000037bu, 0x00000005u, 0x00000023u, 0x00000014u, - 0x00050048u, 0x0000037bu, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x0000037bu, 0x00000007u, - 0x00000023u, 0x0000001cu, 0x00050048u, 0x0000037bu, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, - 0x0000037bu, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x0000037bu, 0x0000000au, 0x00000023u, - 0x00000028u, 0x00050048u, 0x0000037bu, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x0000037bu, - 0x0000000cu, 0x00000023u, 0x00000030u, 0x00040047u, 0x0000037cu, 0x00000006u, 0x00000080u, 0x00030047u, - 0x0000037du, 0x00000002u, 0x00040048u, 0x0000037du, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000037du, - 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000037fu, 0x00000018u, 0x00040047u, 0x0000037fu, - 0x00000021u, 0x00000006u, 0x00040047u, 0x0000037fu, 0x00000022u, 0x00000000u, 0x00050048u, 0x00000389u, - 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000389u, 0x00000001u, 0x00000023u, 0x00000004u, - 0x00050048u, 0x00000389u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000389u, 0x00000003u, - 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000389u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, - 0x00000389u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000389u, 0x00000006u, 0x00000023u, - 0x00000018u, 0x00050048u, 0x00000389u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000389u, - 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000389u, 0x00000009u, 0x00000023u, 0x00000024u, - 0x00050048u, 0x00000389u, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x00000389u, 0x0000000bu, - 0x00000023u, 0x0000002cu, 0x00050048u, 0x00000389u, 0x0000000cu, 0x00000023u, 0x00000030u, 0x00050048u, - 0x00000389u, 0x0000000du, 0x00000023u, 0x00000034u, 0x00050048u, 0x00000389u, 0x0000000eu, 0x00000023u, - 0x00000038u, 0x00050048u, 0x00000389u, 0x0000000fu, 0x00000023u, 0x0000003cu, 0x00040047u, 0x0000038au, - 0x00000006u, 0x00000040u, 0x00030047u, 0x0000038bu, 0x00000002u, 0x00040048u, 0x0000038bu, 0x00000000u, - 0x00000018u, 0x00050048u, 0x0000038bu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000038du, - 0x00000018u, 0x00040047u, 0x0000038du, 0x00000021u, 0x00000008u, 0x00040047u, 0x0000038du, 0x00000022u, - 0x00000000u, 0x00050048u, 0x00000398u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000398u, - 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000398u, 0x00000002u, 0x00000023u, 0x00000008u, - 0x00050048u, 0x00000398u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000398u, 0x00000004u, - 0x00000023u, 0x00000010u, 0x00050048u, 0x00000398u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, - 0x00000398u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000398u, 0x00000007u, 0x00000023u, - 0x0000001cu, 0x00050048u, 0x00000398u, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000398u, - 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x00000398u, 0x0000000au, 0x00000023u, 0x00000028u, - 0x00050048u, 0x00000398u, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x00000398u, 0x0000000cu, - 0x00000023u, 0x00000030u, 0x00050048u, 0x00000398u, 0x0000000du, 0x00000023u, 0x00000034u, 0x00050048u, - 0x00000398u, 0x0000000eu, 0x00000023u, 0x00000038u, 0x00050048u, 0x00000398u, 0x0000000fu, 0x00000023u, - 0x0000003cu, 0x00050048u, 0x00000398u, 0x00000010u, 0x00000023u, 0x00000040u, 0x00050048u, 0x00000398u, - 0x00000011u, 0x00000023u, 0x00000044u, 0x00040047u, 0x00000399u, 0x00000006u, 0x00000048u, 0x00030047u, - 0x0000039au, 0x00000002u, 0x00040048u, 0x0000039au, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000039au, - 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000039cu, 0x00000018u, 0x00040047u, 0x0000039cu, - 0x00000021u, 0x0000000bu, 0x00040047u, 0x0000039cu, 0x00000022u, 0x00000000u, 0x00040048u, 0x000003a4u, - 0x00000000u, 0x00000005u, 0x00050048u, 0x000003a4u, 0x00000000u, 0x00000007u, 0x00000010u, 0x00050048u, - 0x000003a4u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x000003a5u, 0x00000006u, 0x00000040u, - 0x00030047u, 0x000003a6u, 0x00000002u, 0x00040048u, 0x000003a6u, 0x00000000u, 0x00000018u, 0x00050048u, - 0x000003a6u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000003a8u, 0x00000018u, 0x00040047u, - 0x000003a8u, 0x00000021u, 0x0000000cu, 0x00040047u, 0x000003a8u, 0x00000022u, 0x00000000u, 0x00040047u, - 0x000003b5u, 0x00000006u, 0x00000004u, 0x00030047u, 0x000003b6u, 0x00000002u, 0x00040048u, 0x000003b6u, - 0x00000000u, 0x00000018u, 0x00050048u, 0x000003b6u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, - 0x000003b8u, 0x00000018u, 0x00040047u, 0x000003b8u, 0x00000021u, 0x00000001u, 0x00040047u, 0x000003b8u, - 0x00000022u, 0x00000000u, 0x00050048u, 0x00000417u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, - 0x00000417u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000417u, 0x00000002u, 0x00000023u, - 0x00000008u, 0x00050048u, 0x00000417u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00040047u, 0x00000418u, - 0x00000006u, 0x00000010u, 0x00030047u, 0x00000419u, 0x00000002u, 0x00040048u, 0x00000419u, 0x00000000u, - 0x00000018u, 0x00050048u, 0x00000419u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000041bu, - 0x00000018u, 0x00040047u, 0x0000041bu, 0x00000021u, 0x00000002u, 0x00040047u, 0x0000041bu, 0x00000022u, - 0x00000000u, 0x00030047u, 0x00000434u, 0x00000002u, 0x00050048u, 0x00000434u, 0x00000000u, 0x0000000bu, - 0x00000000u, 0x00040047u, 0x00000443u, 0x00000006u, 0x00000010u, 0x00030047u, 0x00000444u, 0x00000002u, - 0x00040048u, 0x00000444u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000444u, 0x00000000u, 0x00000023u, - 0x00000000u, 0x00030047u, 0x00000446u, 0x00000018u, 0x00040047u, 0x00000446u, 0x00000021u, 0x00000003u, - 0x00040047u, 0x00000446u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000452u, 0x0000000bu, 0x000014b0u, - 0x00030047u, 0x0000045eu, 0x00000002u, 0x00050048u, 0x0000045eu, 0x00000000u, 0x0000000bu, 0x00000009u, - 0x00040048u, 0x0000045eu, 0x00000000u, 0x00001497u, 0x00030047u, 0x00000468u, 0x00000002u, 0x00040048u, - 0x00000468u, 0x00000000u, 0x00001497u, 0x00040048u, 0x00000468u, 0x00000001u, 0x00001497u, 0x00040047u, - 0x0000046bu, 0x0000001eu, 0x00000000u, 0x00030047u, 0x00000734u, 0x00000002u, 0x00050048u, 0x00000734u, - 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000734u, 0x00000001u, 0x00000023u, 0x00000004u, - 0x00050048u, 0x00000734u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000734u, 0x00000003u, - 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000734u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, - 0x00000734u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000734u, 0x00000006u, 0x00000023u, - 0x00000018u, 0x00050048u, 0x00000734u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000734u, - 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000734u, 0x00000009u, 0x00000023u, 0x00000024u, - 0x00050048u, 0x00000734u, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x00000734u, 0x0000000bu, - 0x00000023u, 0x0000002cu, 0x00050048u, 0x00000734u, 0x0000000cu, 0x00000023u, 0x00000030u, 0x00050048u, - 0x00000734u, 0x0000000du, 0x00000023u, 0x00000034u, 0x00050048u, 0x00000734u, 0x0000000eu, 0x00000023u, - 0x00000038u, 0x00050048u, 0x00000734u, 0x0000000fu, 0x00000023u, 0x0000003cu, 0x00050048u, 0x00000734u, - 0x00000010u, 0x00000023u, 0x00000040u, 0x00050048u, 0x00000734u, 0x00000011u, 0x00000023u, 0x00000044u, - 0x00050048u, 0x00000734u, 0x00000012u, 0x00000023u, 0x00000048u, 0x00050048u, 0x00000734u, 0x00000013u, - 0x00000023u, 0x0000004cu, 0x00050048u, 0x00000734u, 0x00000014u, 0x00000023u, 0x00000050u, 0x00040047u, - 0x00000766u, 0x00000006u, 0x00000010u, 0x00030047u, 0x00000767u, 0x00000002u, 0x00040048u, 0x00000767u, - 0x00000000u, 0x00000018u, 0x00050048u, 0x00000767u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, - 0x00000769u, 0x00000018u, 0x00040047u, 0x00000769u, 0x00000021u, 0x0000000au, 0x00040047u, 0x00000769u, - 0x00000022u, 0x00000000u, 0x00040047u, 0x0000076au, 0x00000006u, 0x00000008u, 0x00030047u, 0x0000076bu, - 0x00000002u, 0x00040048u, 0x0000076bu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000076bu, 0x00000000u, - 0x00000023u, 0x00000000u, 0x00030047u, 0x0000076du, 0x00000018u, 0x00040047u, 0x0000076du, 0x00000021u, - 0x00000000u, 0x00040047u, 0x0000076du, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000076eu, 0x00000006u, - 0x00000040u, 0x00030047u, 0x0000076fu, 0x00000002u, 0x00040048u, 0x0000076fu, 0x00000000u, 0x00000018u, - 0x00050048u, 0x0000076fu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000771u, 0x00000018u, - 0x00040047u, 0x00000771u, 0x00000021u, 0x00000004u, 0x00040047u, 0x00000771u, 0x00000022u, 0x00000000u, - 0x00040047u, 0x00000772u, 0x00000006u, 0x00000004u, 0x00030047u, 0x00000773u, 0x00000002u, 0x00040048u, - 0x00000773u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000773u, 0x00000000u, 0x00000023u, 0x00000000u, - 0x00030047u, 0x00000775u, 0x00000018u, 0x00040047u, 0x00000775u, 0x00000021u, 0x00000005u, 0x00040047u, - 0x00000775u, 0x00000022u, 0x00000000u, 0x00050048u, 0x00000776u, 0x00000000u, 0x00000023u, 0x00000000u, - 0x00050048u, 0x00000776u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000776u, 0x00000002u, - 0x00000023u, 0x00000008u, 0x00050048u, 0x00000776u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, - 0x00000776u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000776u, 0x00000005u, 0x00000023u, - 0x00000014u, 0x00050048u, 0x00000776u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000776u, - 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000776u, 0x00000008u, 0x00000023u, 0x00000020u, - 0x00050048u, 0x00000776u, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x00000776u, 0x0000000au, - 0x00000023u, 0x00000028u, 0x00050048u, 0x00000776u, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, - 0x00000776u, 0x0000000cu, 0x00000023u, 0x00000030u, 0x00050048u, 0x00000776u, 0x0000000du, 0x00000023u, - 0x00000034u, 0x00050048u, 0x00000776u, 0x0000000eu, 0x00000023u, 0x00000038u, 0x00050048u, 0x00000776u, - 0x0000000fu, 0x00000023u, 0x0000003cu, 0x00040047u, 0x00000777u, 0x00000006u, 0x00000040u, 0x00030047u, - 0x00000778u, 0x00000002u, 0x00040048u, 0x00000778u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000778u, - 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000077au, 0x00000018u, 0x00040047u, 0x0000077au, - 0x00000021u, 0x00000007u, 0x00040047u, 0x0000077au, 0x00000022u, 0x00000000u, 0x00050048u, 0x0000077bu, - 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000077bu, 0x00000001u, 0x00000023u, 0x00000004u, - 0x00050048u, 0x0000077bu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000077bu, 0x00000003u, - 0x00000023u, 0x0000000cu, 0x00050048u, 0x0000077bu, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, - 0x0000077bu, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x0000077bu, 0x00000006u, 0x00000023u, - 0x00000018u, 0x00050048u, 0x0000077bu, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x0000077bu, - 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x0000077bu, 0x00000009u, 0x00000023u, 0x00000024u, - 0x00050048u, 0x0000077bu, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x0000077bu, 0x0000000bu, - 0x00000023u, 0x0000002cu, 0x00050048u, 0x0000077bu, 0x0000000cu, 0x00000023u, 0x00000030u, 0x00050048u, - 0x0000077bu, 0x0000000du, 0x00000023u, 0x00000034u, 0x00050048u, 0x0000077bu, 0x0000000eu, 0x00000023u, - 0x00000038u, 0x00050048u, 0x0000077bu, 0x0000000fu, 0x00000023u, 0x0000003cu, 0x00040047u, 0x0000077cu, - 0x00000006u, 0x00000040u, 0x00030047u, 0x0000077du, 0x00000002u, 0x00040048u, 0x0000077du, 0x00000000u, - 0x00000018u, 0x00050048u, 0x0000077du, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000077fu, - 0x00000018u, 0x00040047u, 0x0000077fu, 0x00000021u, 0x00000009u, 0x00040047u, 0x0000077fu, 0x00000022u, - 0x00000000u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, - 0x00000020u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x00000007u, 0x00000020u, 0x0004002bu, 0x00000006u, - 0x00000008u, 0x00000001u, 0x00030016u, 0x00000009u, 0x00000020u, 0x00040017u, 0x0000000au, 0x00000009u, - 0x00000003u, 0x00040020u, 0x0000000bu, 0x00000007u, 0x0000000au, 0x00040017u, 0x0000000cu, 0x00000009u, - 0x00000004u, 0x00040018u, 0x0000000du, 0x0000000cu, 0x00000004u, 0x0003001eu, 0x0000000eu, 0x0000000du, - 0x00040020u, 0x0000000fu, 0x00000007u, 0x0000000eu, 0x0014001eu, 0x00000010u, 0x00000009u, 0x00000009u, - 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, - 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, - 0x00040020u, 0x00000011u, 0x00000007u, 0x00000010u, 0x00060021u, 0x00000012u, 0x0000000cu, 0x0000000bu, - 0x0000000fu, 0x00000011u, 0x00040020u, 0x00000018u, 0x00000007u, 0x00000006u, 0x00040021u, 0x00000019u, - 0x00000006u, 0x00000018u, 0x00040017u, 0x00000020u, 0x00000009u, 0x00000002u, 0x00050021u, 0x00000021u, - 0x00000020u, 0x00000018u, 0x00000018u, 0x00040020u, 0x00000026u, 0x00000007u, 0x00000020u, 0x00070021u, - 0x00000027u, 0x0000000au, 0x0000000bu, 0x0000000bu, 0x0000000bu, 0x00000026u, 0x00040017u, 0x0000002eu, - 0x00000006u, 0x00000003u, 0x00050021u, 0x0000002fu, 0x0000002eu, 0x00000018u, 0x00000018u, 0x00040015u, - 0x00000035u, 0x00000020u, 0x00000001u, 0x0004002bu, 0x00000035u, 0x00000036u, 0x00000000u, 0x00040020u, - 0x00000037u, 0x00000007u, 0x0000000du, 0x0004002bu, 0x00000009u, 0x0000003bu, 0x3f800000u, 0x00040020u, - 0x00000042u, 0x00000007u, 0x00000009u, 0x0004002bu, 0x00000006u, 0x00000044u, 0x00000002u, 0x0004002bu, - 0x00000009u, 0x0000004bu, 0x358637bdu, 0x00020014u, 0x0000004cu, 0x0004002bu, 0x00000009u, 0x00000050u, - 0x00000000u, 0x0007002cu, 0x0000000cu, 0x00000051u, 0x00000050u, 0x00000050u, 0x00000050u, 0x0000003bu, - 0x0004002bu, 0x00000009u, 0x00000054u, 0x3fc90fdau, 0x0004002bu, 0x00000035u, 0x00000055u, 0x0000000au, - 0x0004002bu, 0x00000009u, 0x0000005bu, 0x3a83126fu, 0x0004002bu, 0x00000035u, 0x00000061u, 0x00000005u, - 0x0004002bu, 0x00000006u, 0x00000065u, 0x00000000u, 0x0004002bu, 0x00000035u, 0x0000006au, 0x00000002u, - 0x0004002bu, 0x00000009u, 0x0000006du, 0x3f000000u, 0x0004002bu, 0x00000035u, 0x00000076u, 0x00000003u, - 0x0004002bu, 0x00000009u, 0x0000007cu, 0x41200000u, 0x0004002bu, 0x00000009u, 0x0000008bu, 0xbf800000u, - 0x0004002bu, 0x00000035u, 0x000000a1u, 0x00000004u, 0x0004002bu, 0x00000035u, 0x000000a9u, 0x00000006u, - 0x0004002bu, 0x00000035u, 0x000000afu, 0x00000007u, 0x0004002bu, 0x00000035u, 0x000000b5u, 0x00000008u, - 0x0004002bu, 0x00000035u, 0x000000bbu, 0x00000009u, 0x0004002bu, 0x00000035u, 0x000000c7u, 0x0000000bu, - 0x0004002bu, 0x00000035u, 0x000000ceu, 0x0000000cu, 0x0004002bu, 0x00000035u, 0x000000e4u, 0x0000000eu, - 0x0004002bu, 0x00000035u, 0x000000eau, 0x0000000fu, 0x0004002bu, 0x00000035u, 0x000000f2u, 0x00000010u, - 0x0004002bu, 0x00000035u, 0x000000f8u, 0x00000011u, 0x0004002bu, 0x00000035u, 0x00000104u, 0x00000001u, - 0x0004002bu, 0x00000009u, 0x0000010au, 0x40000000u, 0x0004002bu, 0x00000035u, 0x00000128u, 0x0000000du, - 0x0004002bu, 0x00000006u, 0x0000013eu, 0x00000003u, 0x0004002bu, 0x00000006u, 0x00000144u, 0x00000006u, - 0x0004002bu, 0x00000006u, 0x0000014au, 0x0000000fu, 0x0004002bu, 0x00000006u, 0x0000014cu, 0x0000002du, - 0x0004002bu, 0x00000006u, 0x00000158u, 0x00000004u, 0x0004002bu, 0x00000006u, 0x0000015eu, 0x00000010u, - 0x0004002bu, 0x00000006u, 0x00000160u, 0x00000040u, 0x0005002cu, 0x00000020u, 0x0000016bu, 0x00000050u, - 0x00000050u, 0x0005002cu, 0x00000020u, 0x00000171u, 0x0000003bu, 0x00000050u, 0x0005002cu, 0x00000020u, - 0x00000173u, 0x00000050u, 0x0000003bu, 0x0004001cu, 0x0000017au, 0x00000020u, 0x00000144u, 0x00040020u, - 0x0000017bu, 0x00000007u, 0x0000017au, 0x0005002cu, 0x00000020u, 0x00000180u, 0x0000006du, 0x00000050u, - 0x0005002cu, 0x00000020u, 0x00000182u, 0x0000006du, 0x0000006du, 0x0005002cu, 0x00000020u, 0x00000184u, - 0x00000050u, 0x0000006du, 0x0004002bu, 0x00000006u, 0x00000190u, 0x00000005u, 0x0004002bu, 0x00000006u, - 0x00000199u, 0x00000009u, 0x0004002bu, 0x00000006u, 0x000001a1u, 0x0000000cu, 0x0004002bu, 0x00000006u, - 0x000001a9u, 0x0000000eu, 0x0004002bu, 0x00000009u, 0x000001b2u, 0x40800000u, 0x0004002bu, 0x00000006u, - 0x000001c3u, 0x00000011u, 0x0004002bu, 0x00000006u, 0x000001cbu, 0x00000018u, 0x0004002bu, 0x00000006u, - 0x000001d3u, 0x0000001eu, 0x0004002bu, 0x00000006u, 0x000001dbu, 0x00000023u, 0x0004002bu, 0x00000006u, - 0x000001e3u, 0x00000027u, 0x0004002bu, 0x00000006u, 0x000001ebu, 0x0000002au, 0x0004002bu, 0x00000006u, - 0x000001f3u, 0x0000002cu, 0x0004002bu, 0x00000006u, 0x000001f7u, 0x00000007u, 0x0004002bu, 0x00000006u, - 0x000001fbu, 0x00000008u, 0x0004002bu, 0x00000009u, 0x000001feu, 0x41000000u, 0x0006002cu, 0x0000002eu, - 0x00000220u, 0x00000065u, 0x00000008u, 0x00000044u, 0x0004001cu, 0x00000227u, 0x0000002eu, 0x00000158u, - 0x00040020u, 0x00000228u, 0x00000007u, 0x00000227u, 0x0006002cu, 0x0000002eu, 0x0000022au, 0x00000065u, - 0x0000013eu, 0x00000190u, 0x00040020u, 0x0000022bu, 0x00000007u, 0x0000002eu, 0x0006002cu, 0x0000002eu, - 0x0000022du, 0x0000013eu, 0x00000008u, 0x00000158u, 0x0006002cu, 0x0000002eu, 0x0000022fu, 0x00000190u, - 0x00000158u, 0x00000044u, 0x0006002cu, 0x0000002eu, 0x00000231u, 0x0000013eu, 0x00000158u, 0x00000190u, - 0x0004001cu, 0x0000023cu, 0x00000006u, 0x00000190u, 0x00040020u, 0x0000023du, 0x00000007u, 0x0000023cu, - 0x0008002cu, 0x0000023cu, 0x0000023fu, 0x00000065u, 0x00000190u, 0x00000199u, 0x000001a1u, 0x000001a9u, - 0x00040020u, 0x00000244u, 0x00000007u, 0x0000004cu, 0x0003002au, 0x0000004cu, 0x00000246u, 0x00030029u, - 0x0000004cu, 0x00000253u, 0x0004001cu, 0x000002a7u, 0x00000006u, 0x00000199u, 0x00040020u, 0x000002a8u, - 0x00000007u, 0x000002a7u, 0x000c002cu, 0x000002a7u, 0x000002aau, 0x00000065u, 0x00000199u, 0x000001c3u, - 0x000001cbu, 0x000001d3u, 0x000001dbu, 0x000001e3u, 0x000001ebu, 0x000001f3u, 0x0004002bu, 0x00000006u, - 0x000002beu, 0x0000001cu, 0x0004002bu, 0x00000006u, 0x000002dfu, 0x00000030u, 0x0004002bu, 0x00000006u, - 0x000002f0u, 0x00000037u, 0x0004002bu, 0x00000006u, 0x00000301u, 0x0000003cu, 0x0004002bu, 0x00000006u, - 0x00000312u, 0x0000003fu, 0x00040020u, 0x00000356u, 0x00000001u, 0x0000002eu, 0x0004003bu, 0x00000356u, - 0x00000357u, 0x00000001u, 0x00040020u, 0x00000358u, 0x00000001u, 0x00000006u, 0x000a001eu, 0x0000035cu, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0000000au, 0x00000009u, - 0x00040020u, 0x0000035du, 0x0000151au, 0x0000035cu, 0x0004003bu, 0x0000035du, 0x0000035eu, 0x0000151au, - 0x00040020u, 0x0000035fu, 0x0000151au, 0x00000006u, 0x0004003bu, 0x00000356u, 0x00000363u, 0x00000001u, - 0x00040015u, 0x00000366u, 0x00000040u, 0x00000001u, 0x0009001eu, 0x00000367u, 0x00000006u, 0x00000006u, - 0x00000366u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x00000368u, 0x00000007u, - 0x00000367u, 0x0009001eu, 0x0000036au, 0x00000006u, 0x00000006u, 0x00000366u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x0003001du, 0x0000036bu, 0x0000036au, 0x0003001eu, 0x0000036cu, 0x0000036bu, - 0x00040020u, 0x0000036du, 0x0000000cu, 0x0000036cu, 0x0004003bu, 0x0000036du, 0x0000036eu, 0x0000000cu, - 0x00040020u, 0x00000371u, 0x0000000cu, 0x0000036au, 0x0004002bu, 0x00000006u, 0x00000375u, 0x00000014u, - 0x0004001cu, 0x00000376u, 0x00000006u, 0x00000375u, 0x000f001eu, 0x00000377u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000376u, 0x00040020u, 0x00000378u, 0x00000007u, 0x00000377u, 0x0004001cu, - 0x0000037au, 0x00000006u, 0x00000375u, 0x000f001eu, 0x0000037bu, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x0000037au, 0x0003001du, 0x0000037cu, 0x0000037bu, 0x0003001eu, 0x0000037du, 0x0000037cu, - 0x00040020u, 0x0000037eu, 0x0000000cu, 0x0000037du, 0x0004003bu, 0x0000037eu, 0x0000037fu, 0x0000000cu, - 0x00040020u, 0x00000382u, 0x0000000cu, 0x0000037bu, 0x0012001eu, 0x00000386u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x00000387u, - 0x00000007u, 0x00000386u, 0x0012001eu, 0x00000389u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0003001du, 0x0000038au, 0x00000389u, 0x0003001eu, - 0x0000038bu, 0x0000038au, 0x00040020u, 0x0000038cu, 0x0000000cu, 0x0000038bu, 0x0004003bu, 0x0000038cu, - 0x0000038du, 0x0000000cu, 0x00040020u, 0x00000393u, 0x0000000cu, 0x00000389u, 0x0014001eu, 0x00000398u, - 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, - 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, - 0x00000009u, 0x00000009u, 0x0003001du, 0x00000399u, 0x00000398u, 0x0003001eu, 0x0000039au, 0x00000399u, - 0x00040020u, 0x0000039bu, 0x0000000cu, 0x0000039au, 0x0004003bu, 0x0000039bu, 0x0000039cu, 0x0000000cu, - 0x00040020u, 0x0000039fu, 0x0000000cu, 0x00000398u, 0x0003001eu, 0x000003a4u, 0x0000000du, 0x0003001du, - 0x000003a5u, 0x000003a4u, 0x0003001eu, 0x000003a6u, 0x000003a5u, 0x00040020u, 0x000003a7u, 0x0000000cu, - 0x000003a6u, 0x0004003bu, 0x000003a7u, 0x000003a8u, 0x0000000cu, 0x00040020u, 0x000003abu, 0x0000000cu, - 0x000003a4u, 0x0003001du, 0x000003b5u, 0x00000035u, 0x0003001eu, 0x000003b6u, 0x000003b5u, 0x00040020u, - 0x000003b7u, 0x0000000cu, 0x000003b6u, 0x0004003bu, 0x000003b7u, 0x000003b8u, 0x0000000cu, 0x00040020u, - 0x000003c2u, 0x0000000cu, 0x00000035u, 0x0006001eu, 0x00000414u, 0x00000009u, 0x00000009u, 0x00000009u, - 0x00000009u, 0x00040020u, 0x00000415u, 0x00000007u, 0x00000414u, 0x0006001eu, 0x00000417u, 0x00000009u, - 0x00000009u, 0x00000009u, 0x00000009u, 0x0003001du, 0x00000418u, 0x00000417u, 0x0003001eu, 0x00000419u, - 0x00000418u, 0x00040020u, 0x0000041au, 0x0000000cu, 0x00000419u, 0x0004003bu, 0x0000041au, 0x0000041bu, - 0x0000000cu, 0x00040020u, 0x0000041fu, 0x0000000cu, 0x00000417u, 0x00040020u, 0x0000042bu, 0x00000007u, - 0x0000000cu, 0x0003001eu, 0x00000434u, 0x0000000cu, 0x0004001cu, 0x00000435u, 0x00000434u, 0x00000160u, - 0x00040020u, 0x00000436u, 0x00000003u, 0x00000435u, 0x0004003bu, 0x00000436u, 0x00000437u, 0x00000003u, - 0x00040020u, 0x0000043au, 0x00000003u, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x0000043cu, 0x00000108u, - 0x0003001du, 0x00000443u, 0x0000002eu, 0x0003001eu, 0x00000444u, 0x00000443u, 0x00040020u, 0x00000445u, - 0x0000000cu, 0x00000444u, 0x0004003bu, 0x00000445u, 0x00000446u, 0x0000000cu, 0x00040020u, 0x0000044au, - 0x0000000cu, 0x0000002eu, 0x0004001cu, 0x00000450u, 0x0000002eu, 0x00000160u, 0x00040020u, 0x00000451u, - 0x00000003u, 0x00000450u, 0x0004003bu, 0x00000451u, 0x00000452u, 0x00000003u, 0x00040020u, 0x0000045cu, - 0x00000003u, 0x0000002eu, 0x0003001eu, 0x0000045eu, 0x00000035u, 0x0004001cu, 0x0000045fu, 0x0000045eu, - 0x00000160u, 0x00040020u, 0x00000460u, 0x00000003u, 0x0000045fu, 0x0004003bu, 0x00000460u, 0x00000461u, - 0x00000003u, 0x00040020u, 0x00000466u, 0x00000003u, 0x00000035u, 0x0004001eu, 0x00000468u, 0x0000000au, - 0x00000009u, 0x0004001cu, 0x00000469u, 0x00000468u, 0x00000160u, 0x00040020u, 0x0000046au, 0x00000003u, - 0x00000469u, 0x0004003bu, 0x0000046au, 0x0000046bu, 0x00000003u, 0x00040020u, 0x0000046du, 0x0000151au, - 0x0000000au, 0x00040020u, 0x00000470u, 0x00000003u, 0x0000000au, 0x00040020u, 0x00000473u, 0x0000151au, - 0x00000009u, 0x00040020u, 0x00000476u, 0x00000003u, 0x00000009u, 0x0017001eu, 0x00000734u, 0x00000009u, - 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000035u, 0x00000035u, - 0x00000006u, 0x00000009u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000009u, 0x00000009u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x00000735u, 0x00000009u, 0x00000734u, - 0x0004003bu, 0x00000735u, 0x00000736u, 0x00000009u, 0x0004002bu, 0x00000006u, 0x00000737u, 0x0000000au, - 0x0004002bu, 0x00000006u, 0x00000738u, 0x0000000bu, 0x0004002bu, 0x00000006u, 0x00000739u, 0x0000000du, - 0x0004002bu, 0x00000006u, 0x0000073au, 0x00000012u, 0x0004002bu, 0x00000006u, 0x0000073bu, 0x00000013u, - 0x0004002bu, 0x00000006u, 0x0000073cu, 0x00000015u, 0x0004002bu, 0x00000009u, 0x0000073du, 0x3f7dfdfeu, - 0x0004002bu, 0x00000009u, 0x0000073eu, 0x3b808081u, 0x0004002bu, 0x00000009u, 0x0000073fu, 0x3f68e8e9u, - 0x0006002cu, 0x0000000au, 0x00000740u, 0x0000073du, 0x0000073eu, 0x0000073fu, 0x0004002bu, 0x00000009u, - 0x00000741u, 0x3ec4c4c5u, 0x0004002bu, 0x00000009u, 0x00000742u, 0x3f37b7b8u, 0x0004002bu, 0x00000009u, - 0x00000743u, 0x3f79f9fau, 0x0006002cu, 0x0000000au, 0x00000744u, 0x00000741u, 0x00000742u, 0x00000743u, - 0x0004002bu, 0x00000009u, 0x00000745u, 0x3f0b8b8cu, 0x0004002bu, 0x00000009u, 0x00000746u, 0x3ebababbu, - 0x0006002cu, 0x0000000au, 0x00000747u, 0x00000745u, 0x00000746u, 0x0000003bu, 0x0004002bu, 0x00000009u, - 0x00000748u, 0x3ec8c8c9u, 0x0006002cu, 0x0000000au, 0x00000749u, 0x0000003bu, 0x00000748u, 0x00000050u, - 0x0006002cu, 0x0000000au, 0x0000074au, 0x00000050u, 0x0000003bu, 0x00000050u, 0x0004002bu, 0x00000009u, - 0x0000074bu, 0x3ed8d8d9u, 0x0004002bu, 0x00000009u, 0x0000074cu, 0x3f33b3b4u, 0x0004002bu, 0x00000009u, - 0x0000074du, 0x3e6cecedu, 0x0006002cu, 0x0000000au, 0x0000074eu, 0x0000074bu, 0x0000074cu, 0x0000074du, - 0x0004002bu, 0x00000009u, 0x0000074fu, 0x3e8a8a8bu, 0x0004002bu, 0x00000009u, 0x00000750u, 0x3f31b1b2u, - 0x0006002cu, 0x0000000au, 0x00000751u, 0x00000742u, 0x0000074fu, 0x00000750u, 0x0004002bu, 0x00000009u, - 0x00000752u, 0x3da0a0a1u, 0x0004002bu, 0x00000009u, 0x00000753u, 0x3f7efeffu, 0x0004002bu, 0x00000009u, - 0x00000754u, 0x3f39b9bau, 0x0006002cu, 0x0000000au, 0x00000755u, 0x00000752u, 0x00000753u, 0x00000754u, - 0x0006002cu, 0x0000000au, 0x00000756u, 0x00000748u, 0x00000748u, 0x00000748u, 0x0004002bu, 0x00000009u, - 0x00000757u, 0x3d008081u, 0x0004002bu, 0x00000009u, 0x00000758u, 0x3c008081u, 0x0006002cu, 0x0000000au, - 0x00000759u, 0x00000757u, 0x00000758u, 0x0000003bu, 0x0004002bu, 0x00000009u, 0x0000075au, 0x3ea0a0a1u, - 0x0004002bu, 0x00000009u, 0x0000075bu, 0x3ef0f0f1u, 0x0006002cu, 0x0000000au, 0x0000075cu, 0x0000075au, - 0x0000075au, 0x0000075bu, 0x0004002bu, 0x00000009u, 0x0000075du, 0x3e70f0f1u, 0x0006002cu, 0x0000000au, - 0x0000075eu, 0x0000075du, 0x0000075bu, 0x0000075du, 0x0006002cu, 0x0000000au, 0x0000075fu, 0x0000075bu, - 0x0000075au, 0x0000075au, 0x0006002cu, 0x0000000au, 0x00000760u, 0x0000003bu, 0x0000003bu, 0x0000003bu, - 0x0006002cu, 0x0000000au, 0x00000761u, 0x0000003bu, 0x0000003bu, 0x00000050u, 0x0004002bu, 0x00000009u, - 0x00000762u, 0x40e00000u, 0x0004002bu, 0x00000009u, 0x00000763u, 0x41400000u, 0x0004002bu, 0x00000009u, - 0x00000764u, 0x40a00000u, 0x0004002bu, 0x00000009u, 0x00000765u, 0x40400000u, 0x0003001du, 0x00000766u, - 0x0000000cu, 0x0003001eu, 0x00000767u, 0x00000766u, 0x00040020u, 0x00000768u, 0x0000000cu, 0x00000767u, - 0x0004003bu, 0x00000768u, 0x00000769u, 0x0000000cu, 0x0003001du, 0x0000076au, 0x00000366u, 0x0003001eu, - 0x0000076bu, 0x0000076au, 0x00040020u, 0x0000076cu, 0x0000000cu, 0x0000076bu, 0x0004003bu, 0x0000076cu, - 0x0000076du, 0x0000000cu, 0x0003001du, 0x0000076eu, 0x000003a4u, 0x0003001eu, 0x0000076fu, 0x0000076eu, - 0x00040020u, 0x00000770u, 0x0000000cu, 0x0000076fu, 0x0004003bu, 0x00000770u, 0x00000771u, 0x0000000cu, - 0x0003001du, 0x00000772u, 0x00000009u, 0x0003001eu, 0x00000773u, 0x00000772u, 0x00040020u, 0x00000774u, - 0x0000000cu, 0x00000773u, 0x0004003bu, 0x00000774u, 0x00000775u, 0x0000000cu, 0x0012001eu, 0x00000776u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x0003001du, 0x00000777u, 0x00000776u, 0x0003001eu, 0x00000778u, 0x00000777u, 0x00040020u, 0x00000779u, - 0x0000000cu, 0x00000778u, 0x0004003bu, 0x00000779u, 0x0000077au, 0x0000000cu, 0x0012001eu, 0x0000077bu, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x0003001du, 0x0000077cu, 0x0000077bu, 0x0003001eu, 0x0000077du, 0x0000077cu, 0x00040020u, 0x0000077eu, - 0x0000000cu, 0x0000077du, 0x0004003bu, 0x0000077eu, 0x0000077fu, 0x0000000cu, 0x0006002cu, 0x0000002eu, - 0x00000780u, 0x00000007u, 0x00000008u, 0x00000008u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, - 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000018u, 0x00000354u, 0x00000007u, 0x0004003bu, - 0x00000018u, 0x00000355u, 0x00000007u, 0x0004003bu, 0x00000018u, 0x0000035bu, 0x00000007u, 0x0004003bu, - 0x00000018u, 0x00000362u, 0x00000007u, 0x0004003bu, 0x00000368u, 0x00000369u, 0x00000007u, 0x0004003bu, - 0x00000378u, 0x00000379u, 0x00000007u, 0x0004003bu, 0x00000387u, 0x00000388u, 0x00000007u, 0x0004003bu, - 0x00000011u, 0x00000397u, 0x00000007u, 0x0004003bu, 0x0000000fu, 0x000003a3u, 0x00000007u, 0x0004003bu, - 0x00000018u, 0x000003afu, 0x00000007u, 0x0004003bu, 0x00000018u, 0x000003c6u, 0x00000007u, 0x0004003bu, - 0x00000018u, 0x000003d2u, 0x00000007u, 0x0004003bu, 0x00000018u, 0x000003d6u, 0x00000007u, 0x0004003bu, - 0x00000018u, 0x000003e8u, 0x00000007u, 0x0004003bu, 0x00000018u, 0x000003f0u, 0x00000007u, 0x0004003bu, - 0x00000018u, 0x00000405u, 0x00000007u, 0x0004003bu, 0x00000018u, 0x00000409u, 0x00000007u, 0x0004003bu, - 0x00000415u, 0x00000416u, 0x00000007u, 0x0004003bu, 0x0000000bu, 0x00000423u, 0x00000007u, 0x0004003bu, - 0x0000042bu, 0x0000042cu, 0x00000007u, 0x0004003bu, 0x0000000bu, 0x0000042du, 0x00000007u, 0x0004003bu, - 0x0000000fu, 0x0000042fu, 0x00000007u, 0x0004003bu, 0x00000011u, 0x00000431u, 0x00000007u, 0x0004003bu, - 0x0000022bu, 0x00000442u, 0x00000007u, 0x0004003bu, 0x00000018u, 0x0000044du, 0x00000007u, 0x0004003bu, - 0x00000018u, 0x0000047du, 0x00000007u, 0x0004003bu, 0x00000018u, 0x0000047eu, 0x00000007u, 0x0004003bu, - 0x00000018u, 0x00000480u, 0x00000007u, 0x0004003bu, 0x00000018u, 0x00000481u, 0x00000007u, 0x0004003bu, - 0x00000018u, 0x00000483u, 0x00000007u, 0x0004003bu, 0x00000018u, 0x00000484u, 0x00000007u, 0x0004003bu, - 0x00000018u, 0x00000488u, 0x00000007u, 0x0004003bu, 0x00000018u, 0x0000048eu, 0x00000007u, 0x0004003bu, - 0x00000018u, 0x00000498u, 0x00000007u, 0x0004003bu, 0x00000018u, 0x0000049cu, 0x00000007u, 0x0004003bu, - 0x0000022bu, 0x000004a8u, 0x00000007u, 0x0004003bu, 0x00000415u, 0x000004b0u, 0x00000007u, 0x0004003bu, - 0x00000415u, 0x000004b8u, 0x00000007u, 0x0004003bu, 0x00000415u, 0x000004c0u, 0x00000007u, 0x0004003bu, - 0x0000000bu, 0x000004c8u, 0x00000007u, 0x0004003bu, 0x0000000bu, 0x000004d0u, 0x00000007u, 0x0004003bu, - 0x0000000bu, 0x000004d8u, 0x00000007u, 0x0004003bu, 0x00000018u, 0x000004e0u, 0x00000007u, 0x0004003bu, - 0x00000018u, 0x000004e4u, 0x00000007u, 0x0004003bu, 0x00000026u, 0x000004edu, 0x00000007u, 0x0004003bu, - 0x00000018u, 0x000004eeu, 0x00000007u, 0x0004003bu, 0x00000018u, 0x000004f0u, 0x00000007u, 0x0004003bu, - 0x0000000bu, 0x000004f2u, 0x00000007u, 0x0004003bu, 0x0000000bu, 0x000004f3u, 0x00000007u, 0x0004003bu, - 0x0000000bu, 0x000004f5u, 0x00000007u, 0x0004003bu, 0x0000000bu, 0x000004f7u, 0x00000007u, 0x0004003bu, - 0x00000026u, 0x000004f9u, 0x00000007u, 0x0004003bu, 0x0000042bu, 0x000004fcu, 0x00000007u, 0x0004003bu, - 0x0000000bu, 0x000004fdu, 0x00000007u, 0x0004003bu, 0x0000000fu, 0x000004ffu, 0x00000007u, 0x0004003bu, - 0x00000011u, 0x00000501u, 0x00000007u, 0x0004003bu, 0x00000018u, 0x00000510u, 0x00000007u, 0x0004003bu, - 0x00000018u, 0x00000514u, 0x00000007u, 0x0004003bu, 0x00000018u, 0x00000518u, 0x00000007u, 0x0004003bu, - 0x0000022bu, 0x00000521u, 0x00000007u, 0x0004003bu, 0x00000018u, 0x00000522u, 0x00000007u, 0x0004003bu, - 0x00000018u, 0x00000524u, 0x00000007u, 0x0004003bu, 0x00000018u, 0x00000526u, 0x00000007u, 0x0004003bu, - 0x00000018u, 0x00000555u, 0x00000007u, 0x0004003bu, 0x00000018u, 0x00000558u, 0x00000007u, 0x0004003bu, - 0x00000018u, 0x0000055du, 0x00000007u, 0x0004003bu, 0x00000018u, 0x00000567u, 0x00000007u, 0x0004003bu, - 0x00000018u, 0x0000056eu, 0x00000007u, 0x0004003bu, 0x00000018u, 0x00000571u, 0x00000007u, 0x0004003bu, - 0x0000022bu, 0x0000057cu, 0x00000007u, 0x0004003bu, 0x00000415u, 0x00000584u, 0x00000007u, 0x0004003bu, - 0x00000415u, 0x0000058cu, 0x00000007u, 0x0004003bu, 0x00000415u, 0x00000594u, 0x00000007u, 0x0004003bu, - 0x0000000bu, 0x0000059cu, 0x00000007u, 0x0004003bu, 0x0000000bu, 0x000005a4u, 0x00000007u, 0x0004003bu, - 0x0000000bu, 0x000005acu, 0x00000007u, 0x0004003bu, 0x00000026u, 0x000005b4u, 0x00000007u, 0x0004003bu, - 0x00000018u, 0x000005b5u, 0x00000007u, 0x0004003bu, 0x00000018u, 0x000005b7u, 0x00000007u, 0x0004003bu, - 0x0000000bu, 0x000005b9u, 0x00000007u, 0x0004003bu, 0x0000000bu, 0x000005bau, 0x00000007u, 0x0004003bu, - 0x0000000bu, 0x000005bcu, 0x00000007u, 0x0004003bu, 0x0000000bu, 0x000005beu, 0x00000007u, 0x0004003bu, - 0x00000026u, 0x000005c0u, 0x00000007u, 0x0004003bu, 0x0000042bu, 0x000005c3u, 0x00000007u, 0x0004003bu, - 0x0000000bu, 0x000005c4u, 0x00000007u, 0x0004003bu, 0x0000000fu, 0x000005c6u, 0x00000007u, 0x0004003bu, - 0x00000011u, 0x000005c8u, 0x00000007u, 0x0004003bu, 0x00000018u, 0x000005cbu, 0x00000007u, 0x0004003bu, - 0x00000018u, 0x000005dbu, 0x00000007u, 0x0004003bu, 0x00000018u, 0x000005deu, 0x00000007u, 0x0004003bu, - 0x0000022bu, 0x000005e3u, 0x00000007u, 0x0004003bu, 0x00000018u, 0x000005e4u, 0x00000007u, 0x0004003bu, - 0x00000018u, 0x000005e6u, 0x00000007u, 0x0004003bu, 0x00000018u, 0x000005e8u, 0x00000007u, 0x0004003bu, - 0x00000018u, 0x0000060du, 0x00000007u, 0x0004003bu, 0x0000022bu, 0x00000618u, 0x00000007u, 0x0004003bu, - 0x00000415u, 0x0000061eu, 0x00000007u, 0x0004003bu, 0x00000415u, 0x00000626u, 0x00000007u, 0x0004003bu, - 0x00000415u, 0x0000062eu, 0x00000007u, 0x0004003bu, 0x0000000bu, 0x00000636u, 0x00000007u, 0x0004003bu, - 0x0000000bu, 0x0000063eu, 0x00000007u, 0x0004003bu, 0x0000000bu, 0x00000646u, 0x00000007u, 0x0004003bu, - 0x00000018u, 0x0000064eu, 0x00000007u, 0x0004003bu, 0x00000026u, 0x00000657u, 0x00000007u, 0x0004003bu, - 0x00000018u, 0x00000658u, 0x00000007u, 0x0004003bu, 0x00000018u, 0x0000065au, 0x00000007u, 0x0004003bu, - 0x0000000bu, 0x0000065cu, 0x00000007u, 0x0004003bu, 0x0000000bu, 0x0000065du, 0x00000007u, 0x0004003bu, - 0x0000000bu, 0x0000065fu, 0x00000007u, 0x0004003bu, 0x0000000bu, 0x00000661u, 0x00000007u, 0x0004003bu, - 0x00000026u, 0x00000663u, 0x00000007u, 0x0004003bu, 0x0000042bu, 0x00000666u, 0x00000007u, 0x0004003bu, - 0x0000000bu, 0x00000667u, 0x00000007u, 0x0004003bu, 0x0000000fu, 0x00000669u, 0x00000007u, 0x0004003bu, - 0x00000011u, 0x0000066bu, 0x00000007u, 0x0004003bu, 0x00000018u, 0x00000673u, 0x00000007u, 0x0004003bu, - 0x0000022bu, 0x0000067cu, 0x00000007u, 0x0004003bu, 0x00000018u, 0x0000067du, 0x00000007u, 0x0004003bu, - 0x00000018u, 0x0000067fu, 0x00000007u, 0x0004003bu, 0x00000018u, 0x00000681u, 0x00000007u, 0x0004003bu, - 0x00000018u, 0x0000069eu, 0x00000007u, 0x0004003bu, 0x00000018u, 0x000006a1u, 0x00000007u, 0x0004003bu, - 0x00000018u, 0x000006a6u, 0x00000007u, 0x0004003bu, 0x00000018u, 0x000006b0u, 0x00000007u, 0x0004003bu, - 0x0000022bu, 0x000006bbu, 0x00000007u, 0x0004003bu, 0x00000415u, 0x000006c3u, 0x00000007u, 0x0004003bu, - 0x00000415u, 0x000006cbu, 0x00000007u, 0x0004003bu, 0x00000415u, 0x000006d3u, 0x00000007u, 0x0004003bu, - 0x0000000bu, 0x000006dbu, 0x00000007u, 0x0004003bu, 0x0000000bu, 0x000006e3u, 0x00000007u, 0x0004003bu, - 0x0000000bu, 0x000006ebu, 0x00000007u, 0x0004003bu, 0x00000018u, 0x000006f3u, 0x00000007u, 0x0004003bu, - 0x0000042bu, 0x000006f6u, 0x00000007u, 0x0004003bu, 0x0000000bu, 0x000006f7u, 0x00000007u, 0x0004003bu, - 0x0000000fu, 0x000006f9u, 0x00000007u, 0x0004003bu, 0x00000011u, 0x000006fbu, 0x00000007u, 0x0004003bu, - 0x0000042bu, 0x000006feu, 0x00000007u, 0x0004003bu, 0x0000000bu, 0x000006ffu, 0x00000007u, 0x0004003bu, - 0x0000000fu, 0x00000701u, 0x00000007u, 0x0004003bu, 0x00000011u, 0x00000703u, 0x00000007u, 0x0004003bu, - 0x0000042bu, 0x00000706u, 0x00000007u, 0x0004003bu, 0x0000000bu, 0x00000707u, 0x00000007u, 0x0004003bu, - 0x0000000fu, 0x00000709u, 0x00000007u, 0x0004003bu, 0x00000011u, 0x0000070bu, 0x00000007u, 0x0004003bu, - 0x00000018u, 0x0000071au, 0x00000007u, 0x0003003eu, 0x00000354u, 0x00000065u, 0x00050041u, 0x00000358u, - 0x00000359u, 0x00000357u, 0x00000065u, 0x0004003du, 0x00000006u, 0x0000035au, 0x00000359u, 0x0003003eu, - 0x00000355u, 0x0000035au, 0x00050041u, 0x0000035fu, 0x00000360u, 0x0000035eu, 0x00000061u, 0x0004003du, - 0x00000006u, 0x00000361u, 0x00000360u, 0x0003003eu, 0x0000035bu, 0x00000361u, 0x00050041u, 0x00000358u, - 0x00000364u, 0x00000363u, 0x00000065u, 0x0004003du, 0x00000006u, 0x00000365u, 0x00000364u, 0x0003003eu, - 0x00000362u, 0x00000365u, 0x00050041u, 0x0000035fu, 0x0000036fu, 0x0000035eu, 0x00000036u, 0x0004003du, - 0x00000006u, 0x00000370u, 0x0000036fu, 0x00060041u, 0x00000371u, 0x00000372u, 0x0000036eu, 0x00000036u, - 0x00000370u, 0x0004003du, 0x0000036au, 0x00000373u, 0x00000372u, 0x00040190u, 0x00000367u, 0x00000374u, - 0x00000373u, 0x0003003eu, 0x00000369u, 0x00000374u, 0x00050041u, 0x00000018u, 0x00000380u, 0x00000369u, - 0x00000036u, 0x0004003du, 0x00000006u, 0x00000381u, 0x00000380u, 0x00060041u, 0x00000382u, 0x00000383u, - 0x0000037fu, 0x00000036u, 0x00000381u, 0x0004003du, 0x0000037bu, 0x00000384u, 0x00000383u, 0x00040190u, - 0x00000377u, 0x00000385u, 0x00000384u, 0x0003003eu, 0x00000379u, 0x00000385u, 0x00050041u, 0x00000018u, - 0x0000038eu, 0x00000379u, 0x00000076u, 0x0004003du, 0x00000006u, 0x0000038fu, 0x0000038eu, 0x00050041u, - 0x0000035fu, 0x00000390u, 0x0000035eu, 0x00000104u, 0x0004003du, 0x00000006u, 0x00000391u, 0x00000390u, - 0x00050080u, 0x00000006u, 0x00000392u, 0x0000038fu, 0x00000391u, 0x00060041u, 0x00000393u, 0x00000394u, - 0x0000038du, 0x00000036u, 0x00000392u, 0x0004003du, 0x00000389u, 0x00000395u, 0x00000394u, 0x00040190u, - 0x00000386u, 0x00000396u, 0x00000395u, 0x0003003eu, 0x00000388u, 0x00000396u, 0x00050041u, 0x00000018u, - 0x0000039du, 0x00000369u, 0x00000104u, 0x0004003du, 0x00000006u, 0x0000039eu, 0x0000039du, 0x00060041u, - 0x0000039fu, 0x000003a0u, 0x0000039cu, 0x00000036u, 0x0000039eu, 0x0004003du, 0x00000398u, 0x000003a1u, - 0x000003a0u, 0x00040190u, 0x00000010u, 0x000003a2u, 0x000003a1u, 0x0003003eu, 0x00000397u, 0x000003a2u, - 0x00050041u, 0x0000035fu, 0x000003a9u, 0x0000035eu, 0x00000036u, 0x0004003du, 0x00000006u, 0x000003aau, - 0x000003a9u, 0x00060041u, 0x000003abu, 0x000003acu, 0x000003a8u, 0x00000036u, 0x000003aau, 0x0004003du, - 0x000003a4u, 0x000003adu, 0x000003acu, 0x00040190u, 0x0000000eu, 0x000003aeu, 0x000003adu, 0x0003003eu, - 0x000003a3u, 0x000003aeu, 0x0003003eu, 0x000003afu, 0x00000065u, 0x00050041u, 0x0000035fu, 0x000003b0u, - 0x0000035eu, 0x0000006au, 0x0004003du, 0x00000006u, 0x000003b1u, 0x000003b0u, 0x000500acu, 0x0000004cu, - 0x000003b2u, 0x000003b1u, 0x00000065u, 0x000300f7u, 0x000003b4u, 0x00000000u, 0x000400fau, 0x000003b2u, - 0x000003b3u, 0x000003b4u, 0x000200f8u, 0x000003b3u, 0x00050041u, 0x00000018u, 0x000003b9u, 0x00000379u, - 0x000000afu, 0x0004003du, 0x00000006u, 0x000003bau, 0x000003b9u, 0x00050041u, 0x00000018u, 0x000003bbu, - 0x00000388u, 0x000000b5u, 0x0004003du, 0x00000006u, 0x000003bcu, 0x000003bbu, 0x00050080u, 0x00000006u, - 0x000003bdu, 0x000003bau, 0x000003bcu, 0x00050041u, 0x0000035fu, 0x000003beu, 0x0000035eu, 0x0000006au, - 0x0004003du, 0x00000006u, 0x000003bfu, 0x000003beu, 0x00050080u, 0x00000006u, 0x000003c0u, 0x000003bdu, - 0x000003bfu, 0x00050082u, 0x00000006u, 0x000003c1u, 0x000003c0u, 0x00000008u, 0x00060041u, 0x000003c2u, - 0x000003c3u, 0x000003b8u, 0x00000036u, 0x000003c1u, 0x0004003du, 0x00000035u, 0x000003c4u, 0x000003c3u, - 0x0004007cu, 0x00000006u, 0x000003c5u, 0x000003c4u, 0x0003003eu, 0x000003afu, 0x000003c5u, 0x000200f9u, - 0x000003b4u, 0x000200f8u, 0x000003b4u, 0x00050041u, 0x00000018u, 0x000003c7u, 0x00000379u, 0x000000afu, - 0x0004003du, 0x00000006u, 0x000003c8u, 0x000003c7u, 0x00050041u, 0x00000018u, 0x000003c9u, 0x00000388u, - 0x000000b5u, 0x0004003du, 0x00000006u, 0x000003cau, 0x000003c9u, 0x00050080u, 0x00000006u, 0x000003cbu, - 0x000003c8u, 0x000003cau, 0x00050041u, 0x0000035fu, 0x000003ccu, 0x0000035eu, 0x0000006au, 0x0004003du, - 0x00000006u, 0x000003cdu, 0x000003ccu, 0x00050080u, 0x00000006u, 0x000003ceu, 0x000003cbu, 0x000003cdu, - 0x00060041u, 0x000003c2u, 0x000003cfu, 0x000003b8u, 0x00000036u, 0x000003ceu, 0x0004003du, 0x00000035u, - 0x000003d0u, 0x000003cfu, 0x0004007cu, 0x00000006u, 0x000003d1u, 0x000003d0u, 0x0003003eu, 0x000003c6u, - 0x000003d1u, 0x0004003du, 0x00000006u, 0x000003d3u, 0x000003c6u, 0x0004003du, 0x00000006u, 0x000003d4u, - 0x000003afu, 0x00050082u, 0x00000006u, 0x000003d5u, 0x000003d3u, 0x000003d4u, 0x0003003eu, 0x000003d2u, - 0x000003d5u, 0x0003003eu, 0x000003d6u, 0x00000065u, 0x00050041u, 0x0000035fu, 0x000003d7u, 0x0000035eu, - 0x0000006au, 0x0004003du, 0x00000006u, 0x000003d8u, 0x000003d7u, 0x000500acu, 0x0000004cu, 0x000003d9u, - 0x000003d8u, 0x00000065u, 0x000300f7u, 0x000003dbu, 0x00000000u, 0x000400fau, 0x000003d9u, 0x000003dau, - 0x000003dbu, 0x000200f8u, 0x000003dau, 0x00050041u, 0x00000018u, 0x000003dcu, 0x00000379u, 0x000000afu, - 0x0004003du, 0x00000006u, 0x000003ddu, 0x000003dcu, 0x00050041u, 0x00000018u, 0x000003deu, 0x00000388u, - 0x000000afu, 0x0004003du, 0x00000006u, 0x000003dfu, 0x000003deu, 0x00050080u, 0x00000006u, 0x000003e0u, - 0x000003ddu, 0x000003dfu, 0x00050041u, 0x0000035fu, 0x000003e1u, 0x0000035eu, 0x0000006au, 0x0004003du, - 0x00000006u, 0x000003e2u, 0x000003e1u, 0x00050080u, 0x00000006u, 0x000003e3u, 0x000003e0u, 0x000003e2u, - 0x00050082u, 0x00000006u, 0x000003e4u, 0x000003e3u, 0x00000008u, 0x00060041u, 0x000003c2u, 0x000003e5u, - 0x000003b8u, 0x00000036u, 0x000003e4u, 0x0004003du, 0x00000035u, 0x000003e6u, 0x000003e5u, 0x0004007cu, - 0x00000006u, 0x000003e7u, 0x000003e6u, 0x0003003eu, 0x000003d6u, 0x000003e7u, 0x000200f9u, 0x000003dbu, - 0x000200f8u, 0x000003dbu, 0x00050041u, 0x00000018u, 0x000003e9u, 0x00000379u, 0x000000b5u, 0x0004003du, - 0x00000006u, 0x000003eau, 0x000003e9u, 0x00050041u, 0x00000018u, 0x000003ebu, 0x00000388u, 0x000000bbu, - 0x0004003du, 0x00000006u, 0x000003ecu, 0x000003ebu, 0x00050080u, 0x00000006u, 0x000003edu, 0x000003eau, - 0x000003ecu, 0x0004003du, 0x00000006u, 0x000003eeu, 0x000003d6u, 0x00050080u, 0x00000006u, 0x000003efu, - 0x000003edu, 0x000003eeu, 0x0003003eu, 0x000003e8u, 0x000003efu, 0x00050041u, 0x00000018u, 0x000003f1u, - 0x00000379u, 0x000000bbu, 0x0004003du, 0x00000006u, 0x000003f2u, 0x000003f1u, 0x00050041u, 0x00000018u, - 0x000003f3u, 0x00000388u, 0x00000055u, 0x0004003du, 0x00000006u, 0x000003f4u, 0x000003f3u, 0x00050080u, - 0x00000006u, 0x000003f5u, 0x000003f2u, 0x000003f4u, 0x0004003du, 0x00000006u, 0x000003f6u, 0x000003afu, - 0x00050080u, 0x00000006u, 0x000003f7u, 0x000003f5u, 0x000003f6u, 0x0003003eu, 0x000003f0u, 0x000003f7u, - 0x0004003du, 0x00000006u, 0x000003f8u, 0x0000035bu, 0x000500aau, 0x0000004cu, 0x000003f9u, 0x000003f8u, - 0x00000065u, 0x000300f7u, 0x000003fbu, 0x00000000u, 0x000400fau, 0x000003f9u, 0x000003fau, 0x000003fbu, - 0x000200f8u, 0x000003fau, 0x00050041u, 0x0000035fu, 0x000003fcu, 0x0000035eu, 0x000000a1u, 0x0004003du, - 0x00000006u, 0x000003fdu, 0x000003fcu, 0x000500b2u, 0x0000004cu, 0x000003feu, 0x000003fdu, 0x000001d3u, - 0x000200f9u, 0x000003fbu, 0x000200f8u, 0x000003fbu, 0x000700f5u, 0x0000004cu, 0x000003ffu, 0x000003f9u, - 0x000003dbu, 0x000003feu, 0x000003fau, 0x0004003du, 0x00000006u, 0x00000400u, 0x00000355u, 0x000500aau, - 0x0000004cu, 0x00000401u, 0x00000400u, 0x00000065u, 0x000500a7u, 0x0000004cu, 0x00000402u, 0x000003ffu, - 0x00000401u, 0x000300f7u, 0x00000404u, 0x00000000u, 0x000400fau, 0x00000402u, 0x00000403u, 0x00000478u, - 0x000200f8u, 0x00000403u, 0x00050041u, 0x0000035fu, 0x00000406u, 0x0000035eu, 0x000000a1u, 0x0004003du, - 0x00000006u, 0x00000407u, 0x00000406u, 0x0007000cu, 0x00000006u, 0x00000408u, 0x00000001u, 0x00000026u, - 0x00000407u, 0x000001d3u, 0x0003003eu, 0x00000405u, 0x00000408u, 0x0004003du, 0x00000006u, 0x0000040au, - 0x000003d2u, 0x0007000cu, 0x00000006u, 0x0000040bu, 0x00000001u, 0x00000026u, 0x0000040au, 0x000002beu, - 0x0003003eu, 0x00000409u, 0x0000040bu, 0x0004003du, 0x00000006u, 0x0000040cu, 0x00000409u, 0x0003003eu, - 0x00000354u, 0x0000040cu, 0x0004003du, 0x00000006u, 0x0000040du, 0x00000405u, 0x0004003du, 0x00000006u, - 0x0000040eu, 0x00000354u, 0x000314afu, 0x0000040du, 0x0000040eu, 0x0004003du, 0x00000006u, 0x0000040fu, - 0x00000362u, 0x0004003du, 0x00000006u, 0x00000410u, 0x00000405u, 0x000500b0u, 0x0000004cu, 0x00000411u, - 0x0000040fu, 0x00000410u, 0x000300f7u, 0x00000413u, 0x00000000u, 0x000400fau, 0x00000411u, 0x00000412u, - 0x00000413u, 0x000200f8u, 0x00000412u, 0x0004003du, 0x00000006u, 0x0000041cu, 0x000003e8u, 0x0004003du, - 0x00000006u, 0x0000041du, 0x00000362u, 0x00050080u, 0x00000006u, 0x0000041eu, 0x0000041cu, 0x0000041du, - 0x00060041u, 0x0000041fu, 0x00000420u, 0x0000041bu, 0x00000036u, 0x0000041eu, 0x0004003du, 0x00000417u, - 0x00000421u, 0x00000420u, 0x00040190u, 0x00000414u, 0x00000422u, 0x00000421u, 0x0003003eu, 0x00000416u, - 0x00000422u, 0x00050041u, 0x00000042u, 0x00000424u, 0x00000416u, 0x00000036u, 0x0004003du, 0x00000009u, - 0x00000425u, 0x00000424u, 0x00050041u, 0x00000042u, 0x00000426u, 0x00000416u, 0x00000104u, 0x0004003du, - 0x00000009u, 0x00000427u, 0x00000426u, 0x00050041u, 0x00000042u, 0x00000428u, 0x00000416u, 0x0000006au, - 0x0004003du, 0x00000009u, 0x00000429u, 0x00000428u, 0x00060050u, 0x0000000au, 0x0000042au, 0x00000425u, - 0x00000427u, 0x00000429u, 0x0003003eu, 0x00000423u, 0x0000042au, 0x0004003du, 0x0000000au, 0x0000042eu, - 0x00000423u, 0x0003003eu, 0x0000042du, 0x0000042eu, 0x0004003du, 0x0000000eu, 0x00000430u, 0x000003a3u, - 0x0003003eu, 0x0000042fu, 0x00000430u, 0x0004003du, 0x00000010u, 0x00000432u, 0x00000397u, 0x0003003eu, - 0x00000431u, 0x00000432u, 0x00070039u, 0x0000000cu, 0x00000433u, 0x00000016u, 0x0000042du, 0x0000042fu, - 0x00000431u, 0x0003003eu, 0x0000042cu, 0x00000433u, 0x0004003du, 0x00000006u, 0x00000438u, 0x00000362u, - 0x0004003du, 0x0000000cu, 0x00000439u, 0x0000042cu, 0x00060041u, 0x0000043au, 0x0000043bu, 0x00000437u, - 0x00000438u, 0x00000036u, 0x0003003eu, 0x0000043bu, 0x00000439u, 0x000200f9u, 0x00000413u, 0x000200f8u, - 0x00000413u, 0x000400e0u, 0x00000044u, 0x00000044u, 0x0000043cu, 0x0004003du, 0x00000006u, 0x0000043du, - 0x00000362u, 0x0004003du, 0x00000006u, 0x0000043eu, 0x00000409u, 0x000500b0u, 0x0000004cu, 0x0000043fu, - 0x0000043du, 0x0000043eu, 0x000300f7u, 0x00000441u, 0x00000000u, 0x000400fau, 0x0000043fu, 0x00000440u, - 0x00000441u, 0x000200f8u, 0x00000440u, 0x0004003du, 0x00000006u, 0x00000447u, 0x000003f0u, 0x0004003du, - 0x00000006u, 0x00000448u, 0x00000362u, 0x00050080u, 0x00000006u, 0x00000449u, 0x00000447u, 0x00000448u, - 0x00060041u, 0x0000044au, 0x0000044bu, 0x00000446u, 0x00000036u, 0x00000449u, 0x0004003du, 0x0000002eu, - 0x0000044cu, 0x0000044bu, 0x0003003eu, 0x00000442u, 0x0000044cu, 0x0004003du, 0x00000006u, 0x0000044eu, - 0x00000362u, 0x00050084u, 0x00000006u, 0x0000044fu, 0x0000044eu, 0x0000013eu, 0x0003003eu, 0x0000044du, - 0x0000044fu, 0x0004003du, 0x00000006u, 0x00000453u, 0x0000044du, 0x00050086u, 0x00000006u, 0x00000454u, - 0x00000453u, 0x0000013eu, 0x00050041u, 0x00000018u, 0x00000455u, 0x00000442u, 0x00000065u, 0x0004003du, - 0x00000006u, 0x00000456u, 0x00000455u, 0x00050041u, 0x00000018u, 0x00000457u, 0x00000442u, 0x00000008u, - 0x0004003du, 0x00000006u, 0x00000458u, 0x00000457u, 0x00050041u, 0x00000018u, 0x00000459u, 0x00000442u, - 0x00000044u, 0x0004003du, 0x00000006u, 0x0000045au, 0x00000459u, 0x00060050u, 0x0000002eu, 0x0000045bu, - 0x00000456u, 0x00000458u, 0x0000045au, 0x00050041u, 0x0000045cu, 0x0000045du, 0x00000452u, 0x00000454u, - 0x0003003eu, 0x0000045du, 0x0000045bu, 0x0004003du, 0x00000006u, 0x00000462u, 0x00000362u, 0x00050041u, - 0x0000035fu, 0x00000463u, 0x0000035eu, 0x00000036u, 0x0004003du, 0x00000006u, 0x00000464u, 0x00000463u, - 0x0004007cu, 0x00000035u, 0x00000465u, 0x00000464u, 0x00060041u, 0x00000466u, 0x00000467u, 0x00000461u, - 0x00000462u, 0x00000036u, 0x0003003eu, 0x00000467u, 0x00000465u, 0x0004003du, 0x00000006u, 0x0000046cu, - 0x00000362u, 0x00050041u, 0x0000046du, 0x0000046eu, 0x0000035eu, 0x000000a9u, 0x0004003du, 0x0000000au, - 0x0000046fu, 0x0000046eu, 0x00060041u, 0x00000470u, 0x00000471u, 0x0000046bu, 0x0000046cu, 0x00000036u, - 0x0003003eu, 0x00000471u, 0x0000046fu, 0x0004003du, 0x00000006u, 0x00000472u, 0x00000362u, 0x00050041u, - 0x00000473u, 0x00000474u, 0x0000035eu, 0x000000afu, 0x0004003du, 0x00000009u, 0x00000475u, 0x00000474u, - 0x00060041u, 0x00000476u, 0x00000477u, 0x0000046bu, 0x00000472u, 0x00000104u, 0x0003003eu, 0x00000477u, - 0x00000475u, 0x000200f9u, 0x00000441u, 0x000200f8u, 0x00000441u, 0x000200f9u, 0x00000404u, 0x000200f8u, - 0x00000478u, 0x0004003du, 0x00000006u, 0x00000479u, 0x0000035bu, 0x000500aau, 0x0000004cu, 0x0000047au, - 0x00000479u, 0x00000008u, 0x000300f7u, 0x0000047cu, 0x00000000u, 0x000400fau, 0x0000047au, 0x0000047bu, - 0x00000550u, 0x000200f8u, 0x0000047bu, 0x0003003eu, 0x0000047eu, 0x00000008u, 0x00050039u, 0x00000006u, - 0x0000047fu, 0x0000001bu, 0x0000047eu, 0x0003003eu, 0x0000047du, 0x0000047fu, 0x0003003eu, 0x00000481u, - 0x00000008u, 0x00050039u, 0x00000006u, 0x00000482u, 0x0000001eu, 0x00000481u, 0x0003003eu, 0x00000480u, - 0x00000482u, 0x0003003eu, 0x00000483u, 0x00000190u, 0x0004003du, 0x00000006u, 0x00000485u, 0x00000355u, - 0x0004003du, 0x00000006u, 0x00000486u, 0x00000483u, 0x00050084u, 0x00000006u, 0x00000487u, 0x00000485u, - 0x00000486u, 0x0003003eu, 0x00000484u, 0x00000487u, 0x0004003du, 0x00000006u, 0x00000489u, 0x00000484u, - 0x0004003du, 0x00000006u, 0x0000048au, 0x00000483u, 0x00050080u, 0x00000006u, 0x0000048bu, 0x00000489u, - 0x0000048au, 0x0004003du, 0x00000006u, 0x0000048cu, 0x000003d2u, 0x0007000cu, 0x00000006u, 0x0000048du, - 0x00000001u, 0x00000026u, 0x0000048bu, 0x0000048cu, 0x0003003eu, 0x00000488u, 0x0000048du, 0x0004003du, - 0x00000006u, 0x0000048fu, 0x00000488u, 0x0004003du, 0x00000006u, 0x00000490u, 0x00000484u, 0x00050082u, - 0x00000006u, 0x00000491u, 0x0000048fu, 0x00000490u, 0x0003003eu, 0x0000048eu, 0x00000491u, 0x0004003du, - 0x00000006u, 0x00000492u, 0x0000048eu, 0x000500aau, 0x0000004cu, 0x00000493u, 0x00000492u, 0x00000065u, - 0x000300f7u, 0x00000495u, 0x00000000u, 0x000400fau, 0x00000493u, 0x00000494u, 0x00000495u, 0x000200f8u, - 0x00000494u, 0x0003003eu, 0x00000354u, 0x00000065u, 0x0004003du, 0x00000006u, 0x00000496u, 0x00000354u, - 0x000314afu, 0x00000065u, 0x00000496u, 0x000100fdu, 0x000200f8u, 0x00000495u, 0x0004003du, 0x00000006u, - 0x00000499u, 0x0000048eu, 0x0004003du, 0x00000006u, 0x0000049au, 0x0000047du, 0x00050084u, 0x00000006u, - 0x0000049bu, 0x00000499u, 0x0000049au, 0x0003003eu, 0x00000498u, 0x0000049bu, 0x0004003du, 0x00000006u, - 0x0000049du, 0x0000048eu, 0x0004003du, 0x00000006u, 0x0000049eu, 0x00000480u, 0x00050084u, 0x00000006u, - 0x0000049fu, 0x0000049du, 0x0000049eu, 0x0003003eu, 0x0000049cu, 0x0000049fu, 0x0004003du, 0x00000006u, - 0x000004a0u, 0x0000049cu, 0x0003003eu, 0x00000354u, 0x000004a0u, 0x0004003du, 0x00000006u, 0x000004a1u, - 0x00000498u, 0x0004003du, 0x00000006u, 0x000004a2u, 0x00000354u, 0x000314afu, 0x000004a1u, 0x000004a2u, - 0x0004003du, 0x00000006u, 0x000004a3u, 0x00000362u, 0x0004003du, 0x00000006u, 0x000004a4u, 0x0000048eu, - 0x000500b0u, 0x0000004cu, 0x000004a5u, 0x000004a3u, 0x000004a4u, 0x000300f7u, 0x000004a7u, 0x00000000u, - 0x000400fau, 0x000004a5u, 0x000004a6u, 0x000004a7u, 0x000200f8u, 0x000004a6u, 0x0004003du, 0x00000006u, - 0x000004a9u, 0x000003f0u, 0x0004003du, 0x00000006u, 0x000004aau, 0x00000484u, 0x00050080u, 0x00000006u, - 0x000004abu, 0x000004a9u, 0x000004aau, 0x0004003du, 0x00000006u, 0x000004acu, 0x00000362u, 0x00050080u, - 0x00000006u, 0x000004adu, 0x000004abu, 0x000004acu, 0x00060041u, 0x0000044au, 0x000004aeu, 0x00000446u, - 0x00000036u, 0x000004adu, 0x0004003du, 0x0000002eu, 0x000004afu, 0x000004aeu, 0x0003003eu, 0x000004a8u, - 0x000004afu, 0x0004003du, 0x00000006u, 0x000004b1u, 0x000003e8u, 0x00050041u, 0x00000018u, 0x000004b2u, - 0x000004a8u, 0x00000065u, 0x0004003du, 0x00000006u, 0x000004b3u, 0x000004b2u, 0x00050080u, 0x00000006u, - 0x000004b4u, 0x000004b1u, 0x000004b3u, 0x00060041u, 0x0000041fu, 0x000004b5u, 0x0000041bu, 0x00000036u, - 0x000004b4u, 0x0004003du, 0x00000417u, 0x000004b6u, 0x000004b5u, 0x00040190u, 0x00000414u, 0x000004b7u, - 0x000004b6u, 0x0003003eu, 0x000004b0u, 0x000004b7u, 0x0004003du, 0x00000006u, 0x000004b9u, 0x000003e8u, - 0x00050041u, 0x00000018u, 0x000004bau, 0x000004a8u, 0x00000008u, 0x0004003du, 0x00000006u, 0x000004bbu, - 0x000004bau, 0x00050080u, 0x00000006u, 0x000004bcu, 0x000004b9u, 0x000004bbu, 0x00060041u, 0x0000041fu, - 0x000004bdu, 0x0000041bu, 0x00000036u, 0x000004bcu, 0x0004003du, 0x00000417u, 0x000004beu, 0x000004bdu, - 0x00040190u, 0x00000414u, 0x000004bfu, 0x000004beu, 0x0003003eu, 0x000004b8u, 0x000004bfu, 0x0004003du, - 0x00000006u, 0x000004c1u, 0x000003e8u, 0x00050041u, 0x00000018u, 0x000004c2u, 0x000004a8u, 0x00000044u, - 0x0004003du, 0x00000006u, 0x000004c3u, 0x000004c2u, 0x00050080u, 0x00000006u, 0x000004c4u, 0x000004c1u, - 0x000004c3u, 0x00060041u, 0x0000041fu, 0x000004c5u, 0x0000041bu, 0x00000036u, 0x000004c4u, 0x0004003du, - 0x00000417u, 0x000004c6u, 0x000004c5u, 0x00040190u, 0x00000414u, 0x000004c7u, 0x000004c6u, 0x0003003eu, - 0x000004c0u, 0x000004c7u, 0x00050041u, 0x00000042u, 0x000004c9u, 0x000004b0u, 0x00000036u, 0x0004003du, - 0x00000009u, 0x000004cau, 0x000004c9u, 0x00050041u, 0x00000042u, 0x000004cbu, 0x000004b0u, 0x00000104u, - 0x0004003du, 0x00000009u, 0x000004ccu, 0x000004cbu, 0x00050041u, 0x00000042u, 0x000004cdu, 0x000004b0u, - 0x0000006au, 0x0004003du, 0x00000009u, 0x000004ceu, 0x000004cdu, 0x00060050u, 0x0000000au, 0x000004cfu, - 0x000004cau, 0x000004ccu, 0x000004ceu, 0x0003003eu, 0x000004c8u, 0x000004cfu, 0x00050041u, 0x00000042u, - 0x000004d1u, 0x000004b8u, 0x00000036u, 0x0004003du, 0x00000009u, 0x000004d2u, 0x000004d1u, 0x00050041u, - 0x00000042u, 0x000004d3u, 0x000004b8u, 0x00000104u, 0x0004003du, 0x00000009u, 0x000004d4u, 0x000004d3u, - 0x00050041u, 0x00000042u, 0x000004d5u, 0x000004b8u, 0x0000006au, 0x0004003du, 0x00000009u, 0x000004d6u, - 0x000004d5u, 0x00060050u, 0x0000000au, 0x000004d7u, 0x000004d2u, 0x000004d4u, 0x000004d6u, 0x0003003eu, - 0x000004d0u, 0x000004d7u, 0x00050041u, 0x00000042u, 0x000004d9u, 0x000004c0u, 0x00000036u, 0x0004003du, - 0x00000009u, 0x000004dau, 0x000004d9u, 0x00050041u, 0x00000042u, 0x000004dbu, 0x000004c0u, 0x00000104u, - 0x0004003du, 0x00000009u, 0x000004dcu, 0x000004dbu, 0x00050041u, 0x00000042u, 0x000004ddu, 0x000004c0u, - 0x0000006au, 0x0004003du, 0x00000009u, 0x000004deu, 0x000004ddu, 0x00060050u, 0x0000000au, 0x000004dfu, - 0x000004dau, 0x000004dcu, 0x000004deu, 0x0003003eu, 0x000004d8u, 0x000004dfu, 0x0004003du, 0x00000006u, - 0x000004e1u, 0x00000362u, 0x0004003du, 0x00000006u, 0x000004e2u, 0x0000047du, 0x00050084u, 0x00000006u, - 0x000004e3u, 0x000004e1u, 0x000004e2u, 0x0003003eu, 0x000004e0u, 0x000004e3u, 0x0003003eu, 0x000004e4u, - 0x00000065u, 0x000200f9u, 0x000004e5u, 0x000200f8u, 0x000004e5u, 0x000400f6u, 0x000004e7u, 0x000004e8u, - 0x00000000u, 0x000200f9u, 0x000004e9u, 0x000200f8u, 0x000004e9u, 0x0004003du, 0x00000006u, 0x000004eau, - 0x000004e4u, 0x0004003du, 0x00000006u, 0x000004ebu, 0x0000047du, 0x000500b0u, 0x0000004cu, 0x000004ecu, - 0x000004eau, 0x000004ebu, 0x000400fau, 0x000004ecu, 0x000004e6u, 0x000004e7u, 0x000200f8u, 0x000004e6u, - 0x0004003du, 0x00000006u, 0x000004efu, 0x000004e4u, 0x0003003eu, 0x000004eeu, 0x000004efu, 0x0003003eu, - 0x000004f0u, 0x00000008u, 0x00060039u, 0x00000020u, 0x000004f1u, 0x00000024u, 0x000004eeu, 0x000004f0u, - 0x0003003eu, 0x000004edu, 0x000004f1u, 0x0004003du, 0x0000000au, 0x000004f4u, 0x000004c8u, 0x0003003eu, - 0x000004f3u, 0x000004f4u, 0x0004003du, 0x0000000au, 0x000004f6u, 0x000004d0u, 0x0003003eu, 0x000004f5u, - 0x000004f6u, 0x0004003du, 0x0000000au, 0x000004f8u, 0x000004d8u, 0x0003003eu, 0x000004f7u, 0x000004f8u, - 0x0004003du, 0x00000020u, 0x000004fau, 0x000004edu, 0x0003003eu, 0x000004f9u, 0x000004fau, 0x00080039u, - 0x0000000au, 0x000004fbu, 0x0000002cu, 0x000004f3u, 0x000004f5u, 0x000004f7u, 0x000004f9u, 0x0003003eu, - 0x000004f2u, 0x000004fbu, 0x0004003du, 0x0000000au, 0x000004feu, 0x000004f2u, 0x0003003eu, 0x000004fdu, - 0x000004feu, 0x0004003du, 0x0000000eu, 0x00000500u, 0x000003a3u, 0x0003003eu, 0x000004ffu, 0x00000500u, - 0x0004003du, 0x00000010u, 0x00000502u, 0x00000397u, 0x0003003eu, 0x00000501u, 0x00000502u, 0x00070039u, - 0x0000000cu, 0x00000503u, 0x00000016u, 0x000004fdu, 0x000004ffu, 0x00000501u, 0x0003003eu, 0x000004fcu, - 0x00000503u, 0x0004003du, 0x00000006u, 0x00000504u, 0x000004e0u, 0x0004003du, 0x00000006u, 0x00000505u, - 0x000004e4u, 0x00050080u, 0x00000006u, 0x00000506u, 0x00000504u, 0x00000505u, 0x0004003du, 0x0000000cu, - 0x00000507u, 0x000004fcu, 0x00060041u, 0x0000043au, 0x00000508u, 0x00000437u, 0x00000506u, 0x00000036u, - 0x0003003eu, 0x00000508u, 0x00000507u, 0x000200f9u, 0x000004e8u, 0x000200f8u, 0x000004e8u, 0x0004003du, - 0x00000006u, 0x00000509u, 0x000004e4u, 0x00050080u, 0x00000006u, 0x0000050au, 0x00000509u, 0x00000104u, - 0x0003003eu, 0x000004e4u, 0x0000050au, 0x000200f9u, 0x000004e5u, 0x000200f8u, 0x000004e7u, 0x000200f9u, - 0x000004a7u, 0x000200f8u, 0x000004a7u, 0x000400e0u, 0x00000044u, 0x00000044u, 0x0000043cu, 0x0004003du, - 0x00000006u, 0x0000050bu, 0x00000362u, 0x0004003du, 0x00000006u, 0x0000050cu, 0x0000048eu, 0x000500b0u, - 0x0000004cu, 0x0000050du, 0x0000050bu, 0x0000050cu, 0x000300f7u, 0x0000050fu, 0x00000000u, 0x000400fau, - 0x0000050du, 0x0000050eu, 0x0000050fu, 0x000200f8u, 0x0000050eu, 0x0004003du, 0x00000006u, 0x00000511u, - 0x00000362u, 0x0004003du, 0x00000006u, 0x00000512u, 0x0000047du, 0x00050084u, 0x00000006u, 0x00000513u, - 0x00000511u, 0x00000512u, 0x0003003eu, 0x00000510u, 0x00000513u, 0x0004003du, 0x00000006u, 0x00000515u, - 0x00000362u, 0x0004003du, 0x00000006u, 0x00000516u, 0x00000480u, 0x00050084u, 0x00000006u, 0x00000517u, - 0x00000515u, 0x00000516u, 0x0003003eu, 0x00000514u, 0x00000517u, 0x0003003eu, 0x00000518u, 0x00000065u, - 0x000200f9u, 0x00000519u, 0x000200f8u, 0x00000519u, 0x000400f6u, 0x0000051bu, 0x0000051cu, 0x00000000u, - 0x000200f9u, 0x0000051du, 0x000200f8u, 0x0000051du, 0x0004003du, 0x00000006u, 0x0000051eu, 0x00000518u, - 0x0004003du, 0x00000006u, 0x0000051fu, 0x00000480u, 0x000500b0u, 0x0000004cu, 0x00000520u, 0x0000051eu, - 0x0000051fu, 0x000400fau, 0x00000520u, 0x0000051au, 0x0000051bu, 0x000200f8u, 0x0000051au, 0x0004003du, - 0x00000006u, 0x00000523u, 0x00000518u, 0x0003003eu, 0x00000522u, 0x00000523u, 0x0003003eu, 0x00000524u, - 0x00000008u, 0x00060039u, 0x0000002eu, 0x00000525u, 0x00000032u, 0x00000522u, 0x00000524u, 0x0003003eu, - 0x00000521u, 0x00000525u, 0x0004003du, 0x00000006u, 0x00000527u, 0x00000514u, 0x0004003du, 0x00000006u, - 0x00000528u, 0x00000518u, 0x00050080u, 0x00000006u, 0x00000529u, 0x00000527u, 0x00000528u, 0x00050084u, - 0x00000006u, 0x0000052au, 0x00000529u, 0x0000013eu, 0x0003003eu, 0x00000526u, 0x0000052au, 0x0004003du, - 0x00000006u, 0x0000052bu, 0x00000526u, 0x00050086u, 0x00000006u, 0x0000052cu, 0x0000052bu, 0x0000013eu, - 0x0004003du, 0x00000006u, 0x0000052du, 0x00000510u, 0x00050041u, 0x00000018u, 0x0000052eu, 0x00000521u, - 0x00000065u, 0x0004003du, 0x00000006u, 0x0000052fu, 0x0000052eu, 0x00050080u, 0x00000006u, 0x00000530u, - 0x0000052du, 0x0000052fu, 0x0004003du, 0x00000006u, 0x00000531u, 0x00000510u, 0x00050041u, 0x00000018u, - 0x00000532u, 0x00000521u, 0x00000008u, 0x0004003du, 0x00000006u, 0x00000533u, 0x00000532u, 0x00050080u, - 0x00000006u, 0x00000534u, 0x00000531u, 0x00000533u, 0x0004003du, 0x00000006u, 0x00000535u, 0x00000510u, - 0x00050041u, 0x00000018u, 0x00000536u, 0x00000521u, 0x00000044u, 0x0004003du, 0x00000006u, 0x00000537u, - 0x00000536u, 0x00050080u, 0x00000006u, 0x00000538u, 0x00000535u, 0x00000537u, 0x00060050u, 0x0000002eu, - 0x00000539u, 0x00000530u, 0x00000534u, 0x00000538u, 0x00050041u, 0x0000045cu, 0x0000053au, 0x00000452u, - 0x0000052cu, 0x0003003eu, 0x0000053au, 0x00000539u, 0x0004003du, 0x00000006u, 0x0000053bu, 0x00000514u, - 0x0004003du, 0x00000006u, 0x0000053cu, 0x00000518u, 0x00050080u, 0x00000006u, 0x0000053du, 0x0000053bu, - 0x0000053cu, 0x00050041u, 0x0000035fu, 0x0000053eu, 0x0000035eu, 0x00000036u, 0x0004003du, 0x00000006u, - 0x0000053fu, 0x0000053eu, 0x0004007cu, 0x00000035u, 0x00000540u, 0x0000053fu, 0x00060041u, 0x00000466u, - 0x00000541u, 0x00000461u, 0x0000053du, 0x00000036u, 0x0003003eu, 0x00000541u, 0x00000540u, 0x0004003du, - 0x00000006u, 0x00000542u, 0x00000514u, 0x0004003du, 0x00000006u, 0x00000543u, 0x00000518u, 0x00050080u, - 0x00000006u, 0x00000544u, 0x00000542u, 0x00000543u, 0x00050041u, 0x0000046du, 0x00000545u, 0x0000035eu, - 0x000000a9u, 0x0004003du, 0x0000000au, 0x00000546u, 0x00000545u, 0x00060041u, 0x00000470u, 0x00000547u, - 0x0000046bu, 0x00000544u, 0x00000036u, 0x0003003eu, 0x00000547u, 0x00000546u, 0x0004003du, 0x00000006u, - 0x00000548u, 0x00000514u, 0x0004003du, 0x00000006u, 0x00000549u, 0x00000518u, 0x00050080u, 0x00000006u, - 0x0000054au, 0x00000548u, 0x00000549u, 0x00050041u, 0x00000473u, 0x0000054bu, 0x0000035eu, 0x000000afu, - 0x0004003du, 0x00000009u, 0x0000054cu, 0x0000054bu, 0x00060041u, 0x00000476u, 0x0000054du, 0x0000046bu, - 0x0000054au, 0x00000104u, 0x0003003eu, 0x0000054du, 0x0000054cu, 0x000200f9u, 0x0000051cu, 0x000200f8u, - 0x0000051cu, 0x0004003du, 0x00000006u, 0x0000054eu, 0x00000518u, 0x00050080u, 0x00000006u, 0x0000054fu, - 0x0000054eu, 0x00000104u, 0x0003003eu, 0x00000518u, 0x0000054fu, 0x000200f9u, 0x00000519u, 0x000200f8u, - 0x0000051bu, 0x000200f9u, 0x0000050fu, 0x000200f8u, 0x0000050fu, 0x000200f9u, 0x0000047cu, 0x000200f8u, - 0x00000550u, 0x0004003du, 0x00000006u, 0x00000551u, 0x0000035bu, 0x000500aau, 0x0000004cu, 0x00000552u, - 0x00000551u, 0x00000044u, 0x000300f7u, 0x00000554u, 0x00000000u, 0x000400fau, 0x00000552u, 0x00000553u, - 0x00000608u, 0x000200f8u, 0x00000553u, 0x0004003du, 0x00000006u, 0x00000556u, 0x00000355u, 0x00050084u, - 0x00000006u, 0x00000557u, 0x00000556u, 0x00000044u, 0x0003003eu, 0x00000555u, 0x00000557u, 0x0004003du, - 0x00000006u, 0x00000559u, 0x00000555u, 0x00050080u, 0x00000006u, 0x0000055au, 0x00000559u, 0x00000044u, - 0x0004003du, 0x00000006u, 0x0000055bu, 0x000003d2u, 0x0007000cu, 0x00000006u, 0x0000055cu, 0x00000001u, - 0x00000026u, 0x0000055au, 0x0000055bu, 0x0003003eu, 0x00000558u, 0x0000055cu, 0x0004003du, 0x00000006u, - 0x0000055eu, 0x00000558u, 0x0004003du, 0x00000006u, 0x0000055fu, 0x00000555u, 0x00050082u, 0x00000006u, - 0x00000560u, 0x0000055eu, 0x0000055fu, 0x0003003eu, 0x0000055du, 0x00000560u, 0x0004003du, 0x00000006u, - 0x00000561u, 0x0000055du, 0x000500aau, 0x0000004cu, 0x00000562u, 0x00000561u, 0x00000065u, 0x000300f7u, - 0x00000564u, 0x00000000u, 0x000400fau, 0x00000562u, 0x00000563u, 0x00000564u, 0x000200f8u, 0x00000563u, - 0x0003003eu, 0x00000354u, 0x00000065u, 0x0004003du, 0x00000006u, 0x00000565u, 0x00000354u, 0x000314afu, - 0x00000065u, 0x00000565u, 0x000100fdu, 0x000200f8u, 0x00000564u, 0x0004003du, 0x00000006u, 0x00000568u, - 0x0000055du, 0x00050084u, 0x00000006u, 0x00000569u, 0x00000568u, 0x0000014au, 0x0003003eu, 0x00000567u, - 0x00000569u, 0x0004003du, 0x00000006u, 0x0000056au, 0x0000055du, 0x00050084u, 0x00000006u, 0x0000056bu, - 0x0000056au, 0x0000015eu, 0x0003003eu, 0x00000354u, 0x0000056bu, 0x0004003du, 0x00000006u, 0x0000056cu, - 0x00000567u, 0x0004003du, 0x00000006u, 0x0000056du, 0x00000354u, 0x000314afu, 0x0000056cu, 0x0000056du, - 0x0004003du, 0x00000006u, 0x0000056fu, 0x00000362u, 0x00050086u, 0x00000006u, 0x00000570u, 0x0000056fu, - 0x0000015eu, 0x0003003eu, 0x0000056eu, 0x00000570u, 0x0004003du, 0x00000006u, 0x00000572u, 0x00000362u, - 0x00050089u, 0x00000006u, 0x00000573u, 0x00000572u, 0x0000015eu, 0x0003003eu, 0x00000571u, 0x00000573u, - 0x0004003du, 0x00000006u, 0x00000574u, 0x0000056eu, 0x0004003du, 0x00000006u, 0x00000575u, 0x0000055du, - 0x000500b0u, 0x0000004cu, 0x00000576u, 0x00000574u, 0x00000575u, 0x0004003du, 0x00000006u, 0x00000577u, - 0x00000571u, 0x000500b0u, 0x0000004cu, 0x00000578u, 0x00000577u, 0x0000014au, 0x000500a7u, 0x0000004cu, - 0x00000579u, 0x00000576u, 0x00000578u, 0x000300f7u, 0x0000057bu, 0x00000000u, 0x000400fau, 0x00000579u, - 0x0000057au, 0x0000057bu, 0x000200f8u, 0x0000057au, 0x0004003du, 0x00000006u, 0x0000057du, 0x000003f0u, - 0x0004003du, 0x00000006u, 0x0000057eu, 0x00000555u, 0x00050080u, 0x00000006u, 0x0000057fu, 0x0000057du, - 0x0000057eu, 0x0004003du, 0x00000006u, 0x00000580u, 0x0000056eu, 0x00050080u, 0x00000006u, 0x00000581u, - 0x0000057fu, 0x00000580u, 0x00060041u, 0x0000044au, 0x00000582u, 0x00000446u, 0x00000036u, 0x00000581u, - 0x0004003du, 0x0000002eu, 0x00000583u, 0x00000582u, 0x0003003eu, 0x0000057cu, 0x00000583u, 0x0004003du, - 0x00000006u, 0x00000585u, 0x000003e8u, 0x00050041u, 0x00000018u, 0x00000586u, 0x0000057cu, 0x00000065u, - 0x0004003du, 0x00000006u, 0x00000587u, 0x00000586u, 0x00050080u, 0x00000006u, 0x00000588u, 0x00000585u, - 0x00000587u, 0x00060041u, 0x0000041fu, 0x00000589u, 0x0000041bu, 0x00000036u, 0x00000588u, 0x0004003du, - 0x00000417u, 0x0000058au, 0x00000589u, 0x00040190u, 0x00000414u, 0x0000058bu, 0x0000058au, 0x0003003eu, - 0x00000584u, 0x0000058bu, 0x0004003du, 0x00000006u, 0x0000058du, 0x000003e8u, 0x00050041u, 0x00000018u, - 0x0000058eu, 0x0000057cu, 0x00000008u, 0x0004003du, 0x00000006u, 0x0000058fu, 0x0000058eu, 0x00050080u, - 0x00000006u, 0x00000590u, 0x0000058du, 0x0000058fu, 0x00060041u, 0x0000041fu, 0x00000591u, 0x0000041bu, - 0x00000036u, 0x00000590u, 0x0004003du, 0x00000417u, 0x00000592u, 0x00000591u, 0x00040190u, 0x00000414u, - 0x00000593u, 0x00000592u, 0x0003003eu, 0x0000058cu, 0x00000593u, 0x0004003du, 0x00000006u, 0x00000595u, - 0x000003e8u, 0x00050041u, 0x00000018u, 0x00000596u, 0x0000057cu, 0x00000044u, 0x0004003du, 0x00000006u, - 0x00000597u, 0x00000596u, 0x00050080u, 0x00000006u, 0x00000598u, 0x00000595u, 0x00000597u, 0x00060041u, - 0x0000041fu, 0x00000599u, 0x0000041bu, 0x00000036u, 0x00000598u, 0x0004003du, 0x00000417u, 0x0000059au, - 0x00000599u, 0x00040190u, 0x00000414u, 0x0000059bu, 0x0000059au, 0x0003003eu, 0x00000594u, 0x0000059bu, - 0x00050041u, 0x00000042u, 0x0000059du, 0x00000584u, 0x00000036u, 0x0004003du, 0x00000009u, 0x0000059eu, - 0x0000059du, 0x00050041u, 0x00000042u, 0x0000059fu, 0x00000584u, 0x00000104u, 0x0004003du, 0x00000009u, - 0x000005a0u, 0x0000059fu, 0x00050041u, 0x00000042u, 0x000005a1u, 0x00000584u, 0x0000006au, 0x0004003du, - 0x00000009u, 0x000005a2u, 0x000005a1u, 0x00060050u, 0x0000000au, 0x000005a3u, 0x0000059eu, 0x000005a0u, - 0x000005a2u, 0x0003003eu, 0x0000059cu, 0x000005a3u, 0x00050041u, 0x00000042u, 0x000005a5u, 0x0000058cu, - 0x00000036u, 0x0004003du, 0x00000009u, 0x000005a6u, 0x000005a5u, 0x00050041u, 0x00000042u, 0x000005a7u, - 0x0000058cu, 0x00000104u, 0x0004003du, 0x00000009u, 0x000005a8u, 0x000005a7u, 0x00050041u, 0x00000042u, - 0x000005a9u, 0x0000058cu, 0x0000006au, 0x0004003du, 0x00000009u, 0x000005aau, 0x000005a9u, 0x00060050u, - 0x0000000au, 0x000005abu, 0x000005a6u, 0x000005a8u, 0x000005aau, 0x0003003eu, 0x000005a4u, 0x000005abu, - 0x00050041u, 0x00000042u, 0x000005adu, 0x00000594u, 0x00000036u, 0x0004003du, 0x00000009u, 0x000005aeu, - 0x000005adu, 0x00050041u, 0x00000042u, 0x000005afu, 0x00000594u, 0x00000104u, 0x0004003du, 0x00000009u, - 0x000005b0u, 0x000005afu, 0x00050041u, 0x00000042u, 0x000005b1u, 0x00000594u, 0x0000006au, 0x0004003du, - 0x00000009u, 0x000005b2u, 0x000005b1u, 0x00060050u, 0x0000000au, 0x000005b3u, 0x000005aeu, 0x000005b0u, - 0x000005b2u, 0x0003003eu, 0x000005acu, 0x000005b3u, 0x0004003du, 0x00000006u, 0x000005b6u, 0x00000571u, - 0x0003003eu, 0x000005b5u, 0x000005b6u, 0x0003003eu, 0x000005b7u, 0x00000044u, 0x00060039u, 0x00000020u, - 0x000005b8u, 0x00000024u, 0x000005b5u, 0x000005b7u, 0x0003003eu, 0x000005b4u, 0x000005b8u, 0x0004003du, - 0x0000000au, 0x000005bbu, 0x0000059cu, 0x0003003eu, 0x000005bau, 0x000005bbu, 0x0004003du, 0x0000000au, - 0x000005bdu, 0x000005a4u, 0x0003003eu, 0x000005bcu, 0x000005bdu, 0x0004003du, 0x0000000au, 0x000005bfu, - 0x000005acu, 0x0003003eu, 0x000005beu, 0x000005bfu, 0x0004003du, 0x00000020u, 0x000005c1u, 0x000005b4u, - 0x0003003eu, 0x000005c0u, 0x000005c1u, 0x00080039u, 0x0000000au, 0x000005c2u, 0x0000002cu, 0x000005bau, - 0x000005bcu, 0x000005beu, 0x000005c0u, 0x0003003eu, 0x000005b9u, 0x000005c2u, 0x0004003du, 0x0000000au, - 0x000005c5u, 0x000005b9u, 0x0003003eu, 0x000005c4u, 0x000005c5u, 0x0004003du, 0x0000000eu, 0x000005c7u, - 0x000003a3u, 0x0003003eu, 0x000005c6u, 0x000005c7u, 0x0004003du, 0x00000010u, 0x000005c9u, 0x00000397u, - 0x0003003eu, 0x000005c8u, 0x000005c9u, 0x00070039u, 0x0000000cu, 0x000005cau, 0x00000016u, 0x000005c4u, - 0x000005c6u, 0x000005c8u, 0x0003003eu, 0x000005c3u, 0x000005cau, 0x0004003du, 0x00000006u, 0x000005ccu, - 0x0000056eu, 0x00050084u, 0x00000006u, 0x000005cdu, 0x000005ccu, 0x0000014au, 0x0004003du, 0x00000006u, - 0x000005ceu, 0x00000571u, 0x00050080u, 0x00000006u, 0x000005cfu, 0x000005cdu, 0x000005ceu, 0x0003003eu, - 0x000005cbu, 0x000005cfu, 0x0004003du, 0x00000006u, 0x000005d0u, 0x000005cbu, 0x0004003du, 0x0000000cu, - 0x000005d1u, 0x000005c3u, 0x00060041u, 0x0000043au, 0x000005d2u, 0x00000437u, 0x000005d0u, 0x00000036u, - 0x0003003eu, 0x000005d2u, 0x000005d1u, 0x000200f9u, 0x0000057bu, 0x000200f8u, 0x0000057bu, 0x000400e0u, - 0x00000044u, 0x00000044u, 0x0000043cu, 0x0004003du, 0x00000006u, 0x000005d3u, 0x0000056eu, 0x0004003du, - 0x00000006u, 0x000005d4u, 0x0000055du, 0x000500b0u, 0x0000004cu, 0x000005d5u, 0x000005d3u, 0x000005d4u, - 0x0004003du, 0x00000006u, 0x000005d6u, 0x00000571u, 0x000500b0u, 0x0000004cu, 0x000005d7u, 0x000005d6u, - 0x0000015eu, 0x000500a7u, 0x0000004cu, 0x000005d8u, 0x000005d5u, 0x000005d7u, 0x000300f7u, 0x000005dau, - 0x00000000u, 0x000400fau, 0x000005d8u, 0x000005d9u, 0x000005dau, 0x000200f8u, 0x000005d9u, 0x0004003du, - 0x00000006u, 0x000005dcu, 0x0000056eu, 0x00050084u, 0x00000006u, 0x000005ddu, 0x000005dcu, 0x0000014au, - 0x0003003eu, 0x000005dbu, 0x000005ddu, 0x0004003du, 0x00000006u, 0x000005dfu, 0x0000056eu, 0x00050084u, - 0x00000006u, 0x000005e0u, 0x000005dfu, 0x0000015eu, 0x0004003du, 0x00000006u, 0x000005e1u, 0x00000571u, - 0x00050080u, 0x00000006u, 0x000005e2u, 0x000005e0u, 0x000005e1u, 0x0003003eu, 0x000005deu, 0x000005e2u, - 0x0004003du, 0x00000006u, 0x000005e5u, 0x00000571u, 0x0003003eu, 0x000005e4u, 0x000005e5u, 0x0003003eu, - 0x000005e6u, 0x00000044u, 0x00060039u, 0x0000002eu, 0x000005e7u, 0x00000032u, 0x000005e4u, 0x000005e6u, - 0x0003003eu, 0x000005e3u, 0x000005e7u, 0x0004003du, 0x00000006u, 0x000005e9u, 0x000005deu, 0x00050084u, - 0x00000006u, 0x000005eau, 0x000005e9u, 0x0000013eu, 0x0003003eu, 0x000005e8u, 0x000005eau, 0x0004003du, - 0x00000006u, 0x000005ebu, 0x000005e8u, 0x00050086u, 0x00000006u, 0x000005ecu, 0x000005ebu, 0x0000013eu, - 0x0004003du, 0x00000006u, 0x000005edu, 0x000005dbu, 0x00050041u, 0x00000018u, 0x000005eeu, 0x000005e3u, - 0x00000065u, 0x0004003du, 0x00000006u, 0x000005efu, 0x000005eeu, 0x00050080u, 0x00000006u, 0x000005f0u, - 0x000005edu, 0x000005efu, 0x0004003du, 0x00000006u, 0x000005f1u, 0x000005dbu, 0x00050041u, 0x00000018u, - 0x000005f2u, 0x000005e3u, 0x00000008u, 0x0004003du, 0x00000006u, 0x000005f3u, 0x000005f2u, 0x00050080u, - 0x00000006u, 0x000005f4u, 0x000005f1u, 0x000005f3u, 0x0004003du, 0x00000006u, 0x000005f5u, 0x000005dbu, - 0x00050041u, 0x00000018u, 0x000005f6u, 0x000005e3u, 0x00000044u, 0x0004003du, 0x00000006u, 0x000005f7u, - 0x000005f6u, 0x00050080u, 0x00000006u, 0x000005f8u, 0x000005f5u, 0x000005f7u, 0x00060050u, 0x0000002eu, - 0x000005f9u, 0x000005f0u, 0x000005f4u, 0x000005f8u, 0x00050041u, 0x0000045cu, 0x000005fau, 0x00000452u, - 0x000005ecu, 0x0003003eu, 0x000005fau, 0x000005f9u, 0x0004003du, 0x00000006u, 0x000005fbu, 0x000005deu, - 0x00050041u, 0x0000035fu, 0x000005fcu, 0x0000035eu, 0x00000036u, 0x0004003du, 0x00000006u, 0x000005fdu, - 0x000005fcu, 0x0004007cu, 0x00000035u, 0x000005feu, 0x000005fdu, 0x00060041u, 0x00000466u, 0x000005ffu, - 0x00000461u, 0x000005fbu, 0x00000036u, 0x0003003eu, 0x000005ffu, 0x000005feu, 0x0004003du, 0x00000006u, - 0x00000600u, 0x000005deu, 0x00050041u, 0x0000046du, 0x00000601u, 0x0000035eu, 0x000000a9u, 0x0004003du, - 0x0000000au, 0x00000602u, 0x00000601u, 0x00060041u, 0x00000470u, 0x00000603u, 0x0000046bu, 0x00000600u, - 0x00000036u, 0x0003003eu, 0x00000603u, 0x00000602u, 0x0004003du, 0x00000006u, 0x00000604u, 0x000005deu, - 0x00050041u, 0x00000473u, 0x00000605u, 0x0000035eu, 0x000000afu, 0x0004003du, 0x00000009u, 0x00000606u, - 0x00000605u, 0x00060041u, 0x00000476u, 0x00000607u, 0x0000046bu, 0x00000604u, 0x00000104u, 0x0003003eu, - 0x00000607u, 0x00000606u, 0x000200f9u, 0x000005dau, 0x000200f8u, 0x000005dau, 0x000200f9u, 0x00000554u, - 0x000200f8u, 0x00000608u, 0x0004003du, 0x00000006u, 0x00000609u, 0x0000035bu, 0x000500aau, 0x0000004cu, - 0x0000060au, 0x00000609u, 0x0000013eu, 0x000300f7u, 0x0000060cu, 0x00000000u, 0x000400fau, 0x0000060au, - 0x0000060bu, 0x0000069du, 0x000200f8u, 0x0000060bu, 0x0004003du, 0x00000006u, 0x0000060eu, 0x00000355u, - 0x00050084u, 0x00000006u, 0x0000060fu, 0x0000060eu, 0x00000008u, 0x0003003eu, 0x0000060du, 0x0000060fu, - 0x0004003du, 0x00000006u, 0x00000610u, 0x0000060du, 0x0004003du, 0x00000006u, 0x00000611u, 0x000003d2u, - 0x000500aeu, 0x0000004cu, 0x00000612u, 0x00000610u, 0x00000611u, 0x000300f7u, 0x00000614u, 0x00000000u, - 0x000400fau, 0x00000612u, 0x00000613u, 0x00000614u, 0x000200f8u, 0x00000613u, 0x0003003eu, 0x00000354u, - 0x00000065u, 0x0004003du, 0x00000006u, 0x00000615u, 0x00000354u, 0x000314afu, 0x00000065u, 0x00000615u, - 0x000100fdu, 0x000200f8u, 0x00000614u, 0x0003003eu, 0x00000354u, 0x00000160u, 0x0004003du, 0x00000006u, - 0x00000617u, 0x00000354u, 0x000314afu, 0x0000014cu, 0x00000617u, 0x0004003du, 0x00000006u, 0x00000619u, - 0x000003f0u, 0x0004003du, 0x00000006u, 0x0000061au, 0x0000060du, 0x00050080u, 0x00000006u, 0x0000061bu, - 0x00000619u, 0x0000061au, 0x00060041u, 0x0000044au, 0x0000061cu, 0x00000446u, 0x00000036u, 0x0000061bu, - 0x0004003du, 0x0000002eu, 0x0000061du, 0x0000061cu, 0x0003003eu, 0x00000618u, 0x0000061du, 0x0004003du, - 0x00000006u, 0x0000061fu, 0x000003e8u, 0x00050041u, 0x00000018u, 0x00000620u, 0x00000618u, 0x00000065u, - 0x0004003du, 0x00000006u, 0x00000621u, 0x00000620u, 0x00050080u, 0x00000006u, 0x00000622u, 0x0000061fu, - 0x00000621u, 0x00060041u, 0x0000041fu, 0x00000623u, 0x0000041bu, 0x00000036u, 0x00000622u, 0x0004003du, - 0x00000417u, 0x00000624u, 0x00000623u, 0x00040190u, 0x00000414u, 0x00000625u, 0x00000624u, 0x0003003eu, - 0x0000061eu, 0x00000625u, 0x0004003du, 0x00000006u, 0x00000627u, 0x000003e8u, 0x00050041u, 0x00000018u, - 0x00000628u, 0x00000618u, 0x00000008u, 0x0004003du, 0x00000006u, 0x00000629u, 0x00000628u, 0x00050080u, - 0x00000006u, 0x0000062au, 0x00000627u, 0x00000629u, 0x00060041u, 0x0000041fu, 0x0000062bu, 0x0000041bu, - 0x00000036u, 0x0000062au, 0x0004003du, 0x00000417u, 0x0000062cu, 0x0000062bu, 0x00040190u, 0x00000414u, - 0x0000062du, 0x0000062cu, 0x0003003eu, 0x00000626u, 0x0000062du, 0x0004003du, 0x00000006u, 0x0000062fu, - 0x000003e8u, 0x00050041u, 0x00000018u, 0x00000630u, 0x00000618u, 0x00000044u, 0x0004003du, 0x00000006u, - 0x00000631u, 0x00000630u, 0x00050080u, 0x00000006u, 0x00000632u, 0x0000062fu, 0x00000631u, 0x00060041u, - 0x0000041fu, 0x00000633u, 0x0000041bu, 0x00000036u, 0x00000632u, 0x0004003du, 0x00000417u, 0x00000634u, - 0x00000633u, 0x00040190u, 0x00000414u, 0x00000635u, 0x00000634u, 0x0003003eu, 0x0000062eu, 0x00000635u, - 0x00050041u, 0x00000042u, 0x00000637u, 0x0000061eu, 0x00000036u, 0x0004003du, 0x00000009u, 0x00000638u, - 0x00000637u, 0x00050041u, 0x00000042u, 0x00000639u, 0x0000061eu, 0x00000104u, 0x0004003du, 0x00000009u, - 0x0000063au, 0x00000639u, 0x00050041u, 0x00000042u, 0x0000063bu, 0x0000061eu, 0x0000006au, 0x0004003du, - 0x00000009u, 0x0000063cu, 0x0000063bu, 0x00060050u, 0x0000000au, 0x0000063du, 0x00000638u, 0x0000063au, - 0x0000063cu, 0x0003003eu, 0x00000636u, 0x0000063du, 0x00050041u, 0x00000042u, 0x0000063fu, 0x00000626u, - 0x00000036u, 0x0004003du, 0x00000009u, 0x00000640u, 0x0000063fu, 0x00050041u, 0x00000042u, 0x00000641u, - 0x00000626u, 0x00000104u, 0x0004003du, 0x00000009u, 0x00000642u, 0x00000641u, 0x00050041u, 0x00000042u, - 0x00000643u, 0x00000626u, 0x0000006au, 0x0004003du, 0x00000009u, 0x00000644u, 0x00000643u, 0x00060050u, - 0x0000000au, 0x00000645u, 0x00000640u, 0x00000642u, 0x00000644u, 0x0003003eu, 0x0000063eu, 0x00000645u, - 0x00050041u, 0x00000042u, 0x00000647u, 0x0000062eu, 0x00000036u, 0x0004003du, 0x00000009u, 0x00000648u, - 0x00000647u, 0x00050041u, 0x00000042u, 0x00000649u, 0x0000062eu, 0x00000104u, 0x0004003du, 0x00000009u, - 0x0000064au, 0x00000649u, 0x00050041u, 0x00000042u, 0x0000064bu, 0x0000062eu, 0x0000006au, 0x0004003du, - 0x00000009u, 0x0000064cu, 0x0000064bu, 0x00060050u, 0x0000000au, 0x0000064du, 0x00000648u, 0x0000064au, - 0x0000064cu, 0x0003003eu, 0x00000646u, 0x0000064du, 0x0004003du, 0x00000006u, 0x0000064fu, 0x00000362u, - 0x0003003eu, 0x0000064eu, 0x0000064fu, 0x000200f9u, 0x00000650u, 0x000200f8u, 0x00000650u, 0x000400f6u, - 0x00000652u, 0x00000653u, 0x00000000u, 0x000200f9u, 0x00000654u, 0x000200f8u, 0x00000654u, 0x0004003du, - 0x00000006u, 0x00000655u, 0x0000064eu, 0x000500b0u, 0x0000004cu, 0x00000656u, 0x00000655u, 0x0000014cu, - 0x000400fau, 0x00000656u, 0x00000651u, 0x00000652u, 0x000200f8u, 0x00000651u, 0x0004003du, 0x00000006u, - 0x00000659u, 0x0000064eu, 0x0003003eu, 0x00000658u, 0x00000659u, 0x0003003eu, 0x0000065au, 0x0000013eu, - 0x00060039u, 0x00000020u, 0x0000065bu, 0x00000024u, 0x00000658u, 0x0000065au, 0x0003003eu, 0x00000657u, - 0x0000065bu, 0x0004003du, 0x0000000au, 0x0000065eu, 0x00000636u, 0x0003003eu, 0x0000065du, 0x0000065eu, - 0x0004003du, 0x0000000au, 0x00000660u, 0x0000063eu, 0x0003003eu, 0x0000065fu, 0x00000660u, 0x0004003du, - 0x0000000au, 0x00000662u, 0x00000646u, 0x0003003eu, 0x00000661u, 0x00000662u, 0x0004003du, 0x00000020u, - 0x00000664u, 0x00000657u, 0x0003003eu, 0x00000663u, 0x00000664u, 0x00080039u, 0x0000000au, 0x00000665u, - 0x0000002cu, 0x0000065du, 0x0000065fu, 0x00000661u, 0x00000663u, 0x0003003eu, 0x0000065cu, 0x00000665u, - 0x0004003du, 0x0000000au, 0x00000668u, 0x0000065cu, 0x0003003eu, 0x00000667u, 0x00000668u, 0x0004003du, - 0x0000000eu, 0x0000066au, 0x000003a3u, 0x0003003eu, 0x00000669u, 0x0000066au, 0x0004003du, 0x00000010u, - 0x0000066cu, 0x00000397u, 0x0003003eu, 0x0000066bu, 0x0000066cu, 0x00070039u, 0x0000000cu, 0x0000066du, - 0x00000016u, 0x00000667u, 0x00000669u, 0x0000066bu, 0x0003003eu, 0x00000666u, 0x0000066du, 0x0004003du, - 0x00000006u, 0x0000066eu, 0x0000064eu, 0x0004003du, 0x0000000cu, 0x0000066fu, 0x00000666u, 0x00060041u, - 0x0000043au, 0x00000670u, 0x00000437u, 0x0000066eu, 0x00000036u, 0x0003003eu, 0x00000670u, 0x0000066fu, - 0x000200f9u, 0x00000653u, 0x000200f8u, 0x00000653u, 0x0004003du, 0x00000006u, 0x00000671u, 0x0000064eu, - 0x00050080u, 0x00000006u, 0x00000672u, 0x00000671u, 0x00000007u, 0x0003003eu, 0x0000064eu, 0x00000672u, - 0x000200f9u, 0x00000650u, 0x000200f8u, 0x00000652u, 0x000400e0u, 0x00000044u, 0x00000044u, 0x0000043cu, - 0x0004003du, 0x00000006u, 0x00000674u, 0x00000362u, 0x0003003eu, 0x00000673u, 0x00000674u, 0x000200f9u, - 0x00000675u, 0x000200f8u, 0x00000675u, 0x000400f6u, 0x00000677u, 0x00000678u, 0x00000000u, 0x000200f9u, - 0x00000679u, 0x000200f8u, 0x00000679u, 0x0004003du, 0x00000006u, 0x0000067au, 0x00000673u, 0x000500b0u, - 0x0000004cu, 0x0000067bu, 0x0000067au, 0x00000160u, 0x000400fau, 0x0000067bu, 0x00000676u, 0x00000677u, - 0x000200f8u, 0x00000676u, 0x0004003du, 0x00000006u, 0x0000067eu, 0x00000673u, 0x0003003eu, 0x0000067du, - 0x0000067eu, 0x0003003eu, 0x0000067fu, 0x0000013eu, 0x00060039u, 0x0000002eu, 0x00000680u, 0x00000032u, - 0x0000067du, 0x0000067fu, 0x0003003eu, 0x0000067cu, 0x00000680u, 0x0004003du, 0x00000006u, 0x00000682u, - 0x00000673u, 0x00050084u, 0x00000006u, 0x00000683u, 0x00000682u, 0x0000013eu, 0x0003003eu, 0x00000681u, - 0x00000683u, 0x0004003du, 0x00000006u, 0x00000684u, 0x00000681u, 0x00050086u, 0x00000006u, 0x00000685u, - 0x00000684u, 0x0000013eu, 0x00050041u, 0x00000018u, 0x00000686u, 0x0000067cu, 0x00000065u, 0x0004003du, - 0x00000006u, 0x00000687u, 0x00000686u, 0x00050041u, 0x00000018u, 0x00000688u, 0x0000067cu, 0x00000008u, - 0x0004003du, 0x00000006u, 0x00000689u, 0x00000688u, 0x00050041u, 0x00000018u, 0x0000068au, 0x0000067cu, - 0x00000044u, 0x0004003du, 0x00000006u, 0x0000068bu, 0x0000068au, 0x00060050u, 0x0000002eu, 0x0000068cu, - 0x00000687u, 0x00000689u, 0x0000068bu, 0x00050041u, 0x0000045cu, 0x0000068du, 0x00000452u, 0x00000685u, - 0x0003003eu, 0x0000068du, 0x0000068cu, 0x0004003du, 0x00000006u, 0x0000068eu, 0x00000673u, 0x00050041u, - 0x0000035fu, 0x0000068fu, 0x0000035eu, 0x00000036u, 0x0004003du, 0x00000006u, 0x00000690u, 0x0000068fu, - 0x0004007cu, 0x00000035u, 0x00000691u, 0x00000690u, 0x00060041u, 0x00000466u, 0x00000692u, 0x00000461u, - 0x0000068eu, 0x00000036u, 0x0003003eu, 0x00000692u, 0x00000691u, 0x0004003du, 0x00000006u, 0x00000693u, - 0x00000673u, 0x00050041u, 0x0000046du, 0x00000694u, 0x0000035eu, 0x000000a9u, 0x0004003du, 0x0000000au, - 0x00000695u, 0x00000694u, 0x00060041u, 0x00000470u, 0x00000696u, 0x0000046bu, 0x00000693u, 0x00000036u, - 0x0003003eu, 0x00000696u, 0x00000695u, 0x0004003du, 0x00000006u, 0x00000697u, 0x00000673u, 0x00050041u, - 0x00000473u, 0x00000698u, 0x0000035eu, 0x000000afu, 0x0004003du, 0x00000009u, 0x00000699u, 0x00000698u, - 0x00060041u, 0x00000476u, 0x0000069au, 0x0000046bu, 0x00000697u, 0x00000104u, 0x0003003eu, 0x0000069au, - 0x00000699u, 0x000200f9u, 0x00000678u, 0x000200f8u, 0x00000678u, 0x0004003du, 0x00000006u, 0x0000069bu, - 0x00000673u, 0x00050080u, 0x00000006u, 0x0000069cu, 0x0000069bu, 0x00000007u, 0x0003003eu, 0x00000673u, - 0x0000069cu, 0x000200f9u, 0x00000675u, 0x000200f8u, 0x00000677u, 0x000200f9u, 0x0000060cu, 0x000200f8u, - 0x0000069du, 0x0004003du, 0x00000006u, 0x0000069fu, 0x00000355u, 0x00050084u, 0x00000006u, 0x000006a0u, - 0x0000069fu, 0x000001fbu, 0x0003003eu, 0x0000069eu, 0x000006a0u, 0x0004003du, 0x00000006u, 0x000006a2u, - 0x0000069eu, 0x00050080u, 0x00000006u, 0x000006a3u, 0x000006a2u, 0x000001fbu, 0x0004003du, 0x00000006u, - 0x000006a4u, 0x000003d2u, 0x0007000cu, 0x00000006u, 0x000006a5u, 0x00000001u, 0x00000026u, 0x000006a3u, - 0x000006a4u, 0x0003003eu, 0x000006a1u, 0x000006a5u, 0x0004003du, 0x00000006u, 0x000006a7u, 0x000006a1u, - 0x0004003du, 0x00000006u, 0x000006a8u, 0x0000069eu, 0x00050082u, 0x00000006u, 0x000006a9u, 0x000006a7u, - 0x000006a8u, 0x0003003eu, 0x000006a6u, 0x000006a9u, 0x0004003du, 0x00000006u, 0x000006aau, 0x000006a6u, - 0x000500aau, 0x0000004cu, 0x000006abu, 0x000006aau, 0x00000065u, 0x000300f7u, 0x000006adu, 0x00000000u, - 0x000400fau, 0x000006abu, 0x000006acu, 0x000006adu, 0x000200f8u, 0x000006acu, 0x0003003eu, 0x00000354u, - 0x00000065u, 0x0004003du, 0x00000006u, 0x000006aeu, 0x00000354u, 0x000314afu, 0x00000065u, 0x000006aeu, - 0x000100fdu, 0x000200f8u, 0x000006adu, 0x0004003du, 0x00000006u, 0x000006b1u, 0x000006a6u, 0x00050084u, - 0x00000006u, 0x000006b2u, 0x000006b1u, 0x0000013eu, 0x0003003eu, 0x000006b0u, 0x000006b2u, 0x0004003du, - 0x00000006u, 0x000006b3u, 0x000006a6u, 0x0003003eu, 0x00000354u, 0x000006b3u, 0x0004003du, 0x00000006u, - 0x000006b4u, 0x000006b0u, 0x0004003du, 0x00000006u, 0x000006b5u, 0x00000354u, 0x000314afu, 0x000006b4u, - 0x000006b5u, 0x0004003du, 0x00000006u, 0x000006b6u, 0x00000362u, 0x0004003du, 0x00000006u, 0x000006b7u, - 0x000006a6u, 0x000500b0u, 0x0000004cu, 0x000006b8u, 0x000006b6u, 0x000006b7u, 0x000300f7u, 0x000006bau, - 0x00000000u, 0x000400fau, 0x000006b8u, 0x000006b9u, 0x000006bau, 0x000200f8u, 0x000006b9u, 0x0004003du, - 0x00000006u, 0x000006bcu, 0x000003f0u, 0x0004003du, 0x00000006u, 0x000006bdu, 0x0000069eu, 0x00050080u, - 0x00000006u, 0x000006beu, 0x000006bcu, 0x000006bdu, 0x0004003du, 0x00000006u, 0x000006bfu, 0x00000362u, - 0x00050080u, 0x00000006u, 0x000006c0u, 0x000006beu, 0x000006bfu, 0x00060041u, 0x0000044au, 0x000006c1u, - 0x00000446u, 0x00000036u, 0x000006c0u, 0x0004003du, 0x0000002eu, 0x000006c2u, 0x000006c1u, 0x0003003eu, - 0x000006bbu, 0x000006c2u, 0x0004003du, 0x00000006u, 0x000006c4u, 0x000003e8u, 0x00050041u, 0x00000018u, - 0x000006c5u, 0x000006bbu, 0x00000065u, 0x0004003du, 0x00000006u, 0x000006c6u, 0x000006c5u, 0x00050080u, - 0x00000006u, 0x000006c7u, 0x000006c4u, 0x000006c6u, 0x00060041u, 0x0000041fu, 0x000006c8u, 0x0000041bu, - 0x00000036u, 0x000006c7u, 0x0004003du, 0x00000417u, 0x000006c9u, 0x000006c8u, 0x00040190u, 0x00000414u, - 0x000006cau, 0x000006c9u, 0x0003003eu, 0x000006c3u, 0x000006cau, 0x0004003du, 0x00000006u, 0x000006ccu, - 0x000003e8u, 0x00050041u, 0x00000018u, 0x000006cdu, 0x000006bbu, 0x00000008u, 0x0004003du, 0x00000006u, - 0x000006ceu, 0x000006cdu, 0x00050080u, 0x00000006u, 0x000006cfu, 0x000006ccu, 0x000006ceu, 0x00060041u, - 0x0000041fu, 0x000006d0u, 0x0000041bu, 0x00000036u, 0x000006cfu, 0x0004003du, 0x00000417u, 0x000006d1u, - 0x000006d0u, 0x00040190u, 0x00000414u, 0x000006d2u, 0x000006d1u, 0x0003003eu, 0x000006cbu, 0x000006d2u, - 0x0004003du, 0x00000006u, 0x000006d4u, 0x000003e8u, 0x00050041u, 0x00000018u, 0x000006d5u, 0x000006bbu, - 0x00000044u, 0x0004003du, 0x00000006u, 0x000006d6u, 0x000006d5u, 0x00050080u, 0x00000006u, 0x000006d7u, - 0x000006d4u, 0x000006d6u, 0x00060041u, 0x0000041fu, 0x000006d8u, 0x0000041bu, 0x00000036u, 0x000006d7u, - 0x0004003du, 0x00000417u, 0x000006d9u, 0x000006d8u, 0x00040190u, 0x00000414u, 0x000006dau, 0x000006d9u, - 0x0003003eu, 0x000006d3u, 0x000006dau, 0x00050041u, 0x00000042u, 0x000006dcu, 0x000006c3u, 0x00000036u, - 0x0004003du, 0x00000009u, 0x000006ddu, 0x000006dcu, 0x00050041u, 0x00000042u, 0x000006deu, 0x000006c3u, - 0x00000104u, 0x0004003du, 0x00000009u, 0x000006dfu, 0x000006deu, 0x00050041u, 0x00000042u, 0x000006e0u, - 0x000006c3u, 0x0000006au, 0x0004003du, 0x00000009u, 0x000006e1u, 0x000006e0u, 0x00060050u, 0x0000000au, - 0x000006e2u, 0x000006ddu, 0x000006dfu, 0x000006e1u, 0x0003003eu, 0x000006dbu, 0x000006e2u, 0x00050041u, - 0x00000042u, 0x000006e4u, 0x000006cbu, 0x00000036u, 0x0004003du, 0x00000009u, 0x000006e5u, 0x000006e4u, - 0x00050041u, 0x00000042u, 0x000006e6u, 0x000006cbu, 0x00000104u, 0x0004003du, 0x00000009u, 0x000006e7u, - 0x000006e6u, 0x00050041u, 0x00000042u, 0x000006e8u, 0x000006cbu, 0x0000006au, 0x0004003du, 0x00000009u, - 0x000006e9u, 0x000006e8u, 0x00060050u, 0x0000000au, 0x000006eau, 0x000006e5u, 0x000006e7u, 0x000006e9u, - 0x0003003eu, 0x000006e3u, 0x000006eau, 0x00050041u, 0x00000042u, 0x000006ecu, 0x000006d3u, 0x00000036u, - 0x0004003du, 0x00000009u, 0x000006edu, 0x000006ecu, 0x00050041u, 0x00000042u, 0x000006eeu, 0x000006d3u, - 0x00000104u, 0x0004003du, 0x00000009u, 0x000006efu, 0x000006eeu, 0x00050041u, 0x00000042u, 0x000006f0u, - 0x000006d3u, 0x0000006au, 0x0004003du, 0x00000009u, 0x000006f1u, 0x000006f0u, 0x00060050u, 0x0000000au, - 0x000006f2u, 0x000006edu, 0x000006efu, 0x000006f1u, 0x0003003eu, 0x000006ebu, 0x000006f2u, 0x0004003du, - 0x00000006u, 0x000006f4u, 0x00000362u, 0x00050084u, 0x00000006u, 0x000006f5u, 0x000006f4u, 0x0000013eu, - 0x0003003eu, 0x000006f3u, 0x000006f5u, 0x0004003du, 0x0000000au, 0x000006f8u, 0x000006dbu, 0x0003003eu, - 0x000006f7u, 0x000006f8u, 0x0004003du, 0x0000000eu, 0x000006fau, 0x000003a3u, 0x0003003eu, 0x000006f9u, - 0x000006fau, 0x0004003du, 0x00000010u, 0x000006fcu, 0x00000397u, 0x0003003eu, 0x000006fbu, 0x000006fcu, - 0x00070039u, 0x0000000cu, 0x000006fdu, 0x00000016u, 0x000006f7u, 0x000006f9u, 0x000006fbu, 0x0003003eu, - 0x000006f6u, 0x000006fdu, 0x0004003du, 0x0000000au, 0x00000700u, 0x000006e3u, 0x0003003eu, 0x000006ffu, - 0x00000700u, 0x0004003du, 0x0000000eu, 0x00000702u, 0x000003a3u, 0x0003003eu, 0x00000701u, 0x00000702u, - 0x0004003du, 0x00000010u, 0x00000704u, 0x00000397u, 0x0003003eu, 0x00000703u, 0x00000704u, 0x00070039u, - 0x0000000cu, 0x00000705u, 0x00000016u, 0x000006ffu, 0x00000701u, 0x00000703u, 0x0003003eu, 0x000006feu, - 0x00000705u, 0x0004003du, 0x0000000au, 0x00000708u, 0x000006ebu, 0x0003003eu, 0x00000707u, 0x00000708u, - 0x0004003du, 0x0000000eu, 0x0000070au, 0x000003a3u, 0x0003003eu, 0x00000709u, 0x0000070au, 0x0004003du, - 0x00000010u, 0x0000070cu, 0x00000397u, 0x0003003eu, 0x0000070bu, 0x0000070cu, 0x00070039u, 0x0000000cu, - 0x0000070du, 0x00000016u, 0x00000707u, 0x00000709u, 0x0000070bu, 0x0003003eu, 0x00000706u, 0x0000070du, - 0x0004003du, 0x00000006u, 0x0000070eu, 0x000006f3u, 0x00050080u, 0x00000006u, 0x0000070fu, 0x0000070eu, - 0x00000065u, 0x0004003du, 0x0000000cu, 0x00000710u, 0x000006f6u, 0x00060041u, 0x0000043au, 0x00000711u, - 0x00000437u, 0x0000070fu, 0x00000036u, 0x0003003eu, 0x00000711u, 0x00000710u, 0x0004003du, 0x00000006u, - 0x00000712u, 0x000006f3u, 0x00050080u, 0x00000006u, 0x00000713u, 0x00000712u, 0x00000008u, 0x0004003du, - 0x0000000cu, 0x00000714u, 0x000006feu, 0x00060041u, 0x0000043au, 0x00000715u, 0x00000437u, 0x00000713u, - 0x00000036u, 0x0003003eu, 0x00000715u, 0x00000714u, 0x0004003du, 0x00000006u, 0x00000716u, 0x000006f3u, - 0x00050080u, 0x00000006u, 0x00000717u, 0x00000716u, 0x00000044u, 0x0004003du, 0x0000000cu, 0x00000718u, - 0x00000706u, 0x00060041u, 0x0000043au, 0x00000719u, 0x00000437u, 0x00000717u, 0x00000036u, 0x0003003eu, - 0x00000719u, 0x00000718u, 0x0004003du, 0x00000006u, 0x0000071bu, 0x00000362u, 0x00050084u, 0x00000006u, - 0x0000071cu, 0x0000071bu, 0x0000013eu, 0x0003003eu, 0x0000071au, 0x0000071cu, 0x0004003du, 0x00000006u, - 0x0000071du, 0x0000071au, 0x00050086u, 0x00000006u, 0x0000071eu, 0x0000071du, 0x0000013eu, 0x0004003du, - 0x00000006u, 0x0000071fu, 0x000006f3u, 0x00050080u, 0x00000006u, 0x00000720u, 0x0000071fu, 0x00000065u, - 0x0004003du, 0x00000006u, 0x00000721u, 0x000006f3u, 0x00050080u, 0x00000006u, 0x00000722u, 0x00000721u, - 0x00000008u, 0x0004003du, 0x00000006u, 0x00000723u, 0x000006f3u, 0x00050080u, 0x00000006u, 0x00000724u, - 0x00000723u, 0x00000044u, 0x00060050u, 0x0000002eu, 0x00000725u, 0x00000720u, 0x00000722u, 0x00000724u, - 0x00050041u, 0x0000045cu, 0x00000726u, 0x00000452u, 0x0000071eu, 0x0003003eu, 0x00000726u, 0x00000725u, - 0x0004003du, 0x00000006u, 0x00000727u, 0x00000362u, 0x00050041u, 0x0000035fu, 0x00000728u, 0x0000035eu, - 0x00000036u, 0x0004003du, 0x00000006u, 0x00000729u, 0x00000728u, 0x0004007cu, 0x00000035u, 0x0000072au, - 0x00000729u, 0x00060041u, 0x00000466u, 0x0000072bu, 0x00000461u, 0x00000727u, 0x00000036u, 0x0003003eu, - 0x0000072bu, 0x0000072au, 0x0004003du, 0x00000006u, 0x0000072cu, 0x00000362u, 0x00050041u, 0x0000046du, - 0x0000072du, 0x0000035eu, 0x000000a9u, 0x0004003du, 0x0000000au, 0x0000072eu, 0x0000072du, 0x00060041u, - 0x00000470u, 0x0000072fu, 0x0000046bu, 0x0000072cu, 0x00000036u, 0x0003003eu, 0x0000072fu, 0x0000072eu, - 0x0004003du, 0x00000006u, 0x00000730u, 0x00000362u, 0x00050041u, 0x00000473u, 0x00000731u, 0x0000035eu, - 0x000000afu, 0x0004003du, 0x00000009u, 0x00000732u, 0x00000731u, 0x00060041u, 0x00000476u, 0x00000733u, - 0x0000046bu, 0x00000730u, 0x00000104u, 0x0003003eu, 0x00000733u, 0x00000732u, 0x000200f9u, 0x000006bau, - 0x000200f8u, 0x000006bau, 0x000200f9u, 0x0000060cu, 0x000200f8u, 0x0000060cu, 0x000200f9u, 0x00000554u, - 0x000200f8u, 0x00000554u, 0x000200f9u, 0x0000047cu, 0x000200f8u, 0x0000047cu, 0x000200f9u, 0x00000404u, - 0x000200f8u, 0x00000404u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x0000000cu, 0x00000016u, 0x00000000u, - 0x00000012u, 0x00030037u, 0x0000000bu, 0x00000013u, 0x00030037u, 0x0000000fu, 0x00000014u, 0x00030037u, - 0x00000011u, 0x00000015u, 0x000200f8u, 0x00000017u, 0x0004003bu, 0x0000000bu, 0x00000034u, 0x00000007u, - 0x0004003bu, 0x00000042u, 0x00000043u, 0x00000007u, 0x0004003bu, 0x00000042u, 0x00000047u, 0x00000007u, - 0x0004003bu, 0x00000042u, 0x00000053u, 0x00000007u, 0x0004003bu, 0x00000042u, 0x00000060u, 0x00000007u, - 0x0004003bu, 0x00000042u, 0x00000064u, 0x00000007u, 0x0004003bu, 0x00000042u, 0x00000070u, 0x00000007u, - 0x0004003bu, 0x00000042u, 0x00000082u, 0x00000007u, 0x0004003bu, 0x00000042u, 0x00000086u, 0x00000007u, - 0x0004003bu, 0x00000042u, 0x0000008du, 0x00000007u, 0x0004003bu, 0x00000042u, 0x00000090u, 0x00000007u, - 0x0004003bu, 0x00000042u, 0x00000094u, 0x00000007u, 0x0004003bu, 0x00000042u, 0x00000098u, 0x00000007u, - 0x0004003bu, 0x00000042u, 0x0000009cu, 0x00000007u, 0x0004003bu, 0x00000042u, 0x000000a0u, 0x00000007u, - 0x0004003bu, 0x00000042u, 0x000000d3u, 0x00000007u, 0x0004003bu, 0x00000042u, 0x000000d6u, 0x00000007u, - 0x0004003bu, 0x00000026u, 0x000000deu, 0x00000007u, 0x0004003bu, 0x00000026u, 0x000000e3u, 0x00000007u, - 0x0004003bu, 0x00000026u, 0x00000100u, 0x00000007u, 0x0004003bu, 0x00000042u, 0x00000109u, 0x00000007u, - 0x0004003bu, 0x00000042u, 0x00000112u, 0x00000007u, 0x0004003bu, 0x00000042u, 0x00000120u, 0x00000007u, - 0x0004003bu, 0x00000042u, 0x00000123u, 0x00000007u, 0x0004003bu, 0x00000042u, 0x0000012eu, 0x00000007u, - 0x00050041u, 0x00000037u, 0x00000038u, 0x00000014u, 0x00000036u, 0x0004003du, 0x0000000du, 0x00000039u, - 0x00000038u, 0x0004003du, 0x0000000au, 0x0000003au, 0x00000013u, 0x00050051u, 0x00000009u, 0x0000003cu, - 0x0000003au, 0x00000000u, 0x00050051u, 0x00000009u, 0x0000003du, 0x0000003au, 0x00000001u, 0x00050051u, - 0x00000009u, 0x0000003eu, 0x0000003au, 0x00000002u, 0x00070050u, 0x0000000cu, 0x0000003fu, 0x0000003cu, - 0x0000003du, 0x0000003eu, 0x0000003bu, 0x00050091u, 0x0000000cu, 0x00000040u, 0x00000039u, 0x0000003fu, - 0x0008004fu, 0x0000000au, 0x00000041u, 0x00000040u, 0x00000040u, 0x00000000u, 0x00000001u, 0x00000002u, - 0x0003003eu, 0x00000034u, 0x00000041u, 0x00050041u, 0x00000042u, 0x00000045u, 0x00000034u, 0x00000044u, - 0x0004003du, 0x00000009u, 0x00000046u, 0x00000045u, 0x0003003eu, 0x00000043u, 0x00000046u, 0x0004003du, - 0x0000000au, 0x00000048u, 0x00000034u, 0x0006000cu, 0x00000009u, 0x00000049u, 0x00000001u, 0x00000042u, - 0x00000048u, 0x0003003eu, 0x00000047u, 0x00000049u, 0x0004003du, 0x00000009u, 0x0000004au, 0x00000047u, - 0x000500b8u, 0x0000004cu, 0x0000004du, 0x0000004au, 0x0000004bu, 0x000300f7u, 0x0000004fu, 0x00000000u, - 0x000400fau, 0x0000004du, 0x0000004eu, 0x0000004fu, 0x000200f8u, 0x0000004eu, 0x000200feu, 0x00000051u, - 0x000200f8u, 0x0000004fu, 0x0003003eu, 0x00000053u, 0x00000054u, 0x00050041u, 0x00000042u, 0x00000056u, - 0x00000015u, 0x00000055u, 0x0004003du, 0x00000009u, 0x00000057u, 0x00000056u, 0x0004003du, 0x00000009u, - 0x00000058u, 0x00000053u, 0x000500bcu, 0x0000004cu, 0x00000059u, 0x00000057u, 0x00000058u, 0x0004003du, - 0x00000009u, 0x0000005au, 0x00000043u, 0x000500b8u, 0x0000004cu, 0x0000005cu, 0x0000005au, 0x0000005bu, - 0x000500a7u, 0x0000004cu, 0x0000005du, 0x00000059u, 0x0000005cu, 0x000300f7u, 0x0000005fu, 0x00000000u, - 0x000400fau, 0x0000005du, 0x0000005eu, 0x0000005fu, 0x000200f8u, 0x0000005eu, 0x00050041u, 0x00000042u, - 0x00000062u, 0x00000015u, 0x00000061u, 0x0004003du, 0x00000009u, 0x00000063u, 0x00000062u, 0x0003003eu, - 0x00000060u, 0x00000063u, 0x00050041u, 0x00000042u, 0x00000066u, 0x00000034u, 0x00000065u, 0x0004003du, - 0x00000009u, 0x00000067u, 0x00000066u, 0x0004003du, 0x00000009u, 0x00000068u, 0x00000060u, 0x00050085u, - 0x00000009u, 0x00000069u, 0x00000067u, 0x00000068u, 0x00050041u, 0x00000042u, 0x0000006bu, 0x00000015u, - 0x0000006au, 0x0004003du, 0x00000009u, 0x0000006cu, 0x0000006bu, 0x00050085u, 0x00000009u, 0x0000006eu, - 0x0000006cu, 0x0000006du, 0x00050088u, 0x00000009u, 0x0000006fu, 0x00000069u, 0x0000006eu, 0x0003003eu, - 0x00000064u, 0x0000006fu, 0x00050041u, 0x00000042u, 0x00000071u, 0x00000034u, 0x00000008u, 0x0004003du, - 0x00000009u, 0x00000072u, 0x00000071u, 0x0004007fu, 0x00000009u, 0x00000073u, 0x00000072u, 0x0004003du, - 0x00000009u, 0x00000074u, 0x00000060u, 0x00050085u, 0x00000009u, 0x00000075u, 0x00000073u, 0x00000074u, - 0x00050041u, 0x00000042u, 0x00000077u, 0x00000015u, 0x00000076u, 0x0004003du, 0x00000009u, 0x00000078u, - 0x00000077u, 0x00050085u, 0x00000009u, 0x00000079u, 0x00000078u, 0x0000006du, 0x00050088u, 0x00000009u, - 0x0000007au, 0x00000075u, 0x00000079u, 0x0003003eu, 0x00000070u, 0x0000007au, 0x0004003du, 0x00000009u, - 0x0000007bu, 0x00000064u, 0x00050085u, 0x00000009u, 0x0000007du, 0x0000007bu, 0x0000007cu, 0x0004003du, - 0x00000009u, 0x0000007eu, 0x00000070u, 0x00050085u, 0x00000009u, 0x0000007fu, 0x0000007eu, 0x0000007cu, - 0x00070050u, 0x0000000cu, 0x00000080u, 0x0000007du, 0x0000007fu, 0x0000003bu, 0x0000003bu, 0x000200feu, - 0x00000080u, 0x000200f8u, 0x0000005fu, 0x0004003du, 0x0000000au, 0x00000083u, 0x00000034u, 0x0007004fu, - 0x00000020u, 0x00000084u, 0x00000083u, 0x00000083u, 0x00000000u, 0x00000001u, 0x0006000cu, 0x00000009u, - 0x00000085u, 0x00000001u, 0x00000042u, 0x00000084u, 0x0003003eu, 0x00000082u, 0x00000085u, 0x00050041u, - 0x00000042u, 0x00000087u, 0x00000034u, 0x00000044u, 0x0004003du, 0x00000009u, 0x00000088u, 0x00000087u, - 0x0004003du, 0x00000009u, 0x00000089u, 0x00000047u, 0x00050088u, 0x00000009u, 0x0000008au, 0x00000088u, - 0x00000089u, 0x0008000cu, 0x00000009u, 0x0000008cu, 0x00000001u, 0x0000002bu, 0x0000008au, 0x0000008bu, - 0x0000003bu, 0x0003003eu, 0x00000086u, 0x0000008cu, 0x0004003du, 0x00000009u, 0x0000008eu, 0x00000086u, - 0x0006000cu, 0x00000009u, 0x0000008fu, 0x00000001u, 0x00000011u, 0x0000008eu, 0x0003003eu, 0x0000008du, - 0x0000008fu, 0x0004003du, 0x00000009u, 0x00000091u, 0x0000008du, 0x0004003du, 0x00000009u, 0x00000092u, - 0x0000008du, 0x00050085u, 0x00000009u, 0x00000093u, 0x00000091u, 0x00000092u, 0x0003003eu, 0x00000090u, - 0x00000093u, 0x0004003du, 0x00000009u, 0x00000095u, 0x00000090u, 0x0004003du, 0x00000009u, 0x00000096u, - 0x0000008du, 0x00050085u, 0x00000009u, 0x00000097u, 0x00000095u, 0x00000096u, 0x0003003eu, 0x00000094u, - 0x00000097u, 0x0004003du, 0x00000009u, 0x00000099u, 0x00000090u, 0x0004003du, 0x00000009u, 0x0000009au, - 0x00000090u, 0x00050085u, 0x00000009u, 0x0000009bu, 0x00000099u, 0x0000009au, 0x0003003eu, 0x00000098u, - 0x0000009bu, 0x0004003du, 0x00000009u, 0x0000009du, 0x00000098u, 0x0004003du, 0x00000009u, 0x0000009eu, - 0x0000008du, 0x00050085u, 0x00000009u, 0x0000009fu, 0x0000009du, 0x0000009eu, 0x0003003eu, 0x0000009cu, - 0x0000009fu, 0x00050041u, 0x00000042u, 0x000000a2u, 0x00000015u, 0x000000a1u, 0x0004003du, 0x00000009u, - 0x000000a3u, 0x000000a2u, 0x00050041u, 0x00000042u, 0x000000a4u, 0x00000015u, 0x00000061u, 0x0004003du, - 0x00000009u, 0x000000a5u, 0x000000a4u, 0x0004003du, 0x00000009u, 0x000000a6u, 0x0000008du, 0x00050085u, - 0x00000009u, 0x000000a7u, 0x000000a5u, 0x000000a6u, 0x00050081u, 0x00000009u, 0x000000a8u, 0x000000a3u, - 0x000000a7u, 0x00050041u, 0x00000042u, 0x000000aau, 0x00000015u, 0x000000a9u, 0x0004003du, 0x00000009u, - 0x000000abu, 0x000000aau, 0x0004003du, 0x00000009u, 0x000000acu, 0x00000090u, 0x00050085u, 0x00000009u, - 0x000000adu, 0x000000abu, 0x000000acu, 0x00050081u, 0x00000009u, 0x000000aeu, 0x000000a8u, 0x000000adu, - 0x00050041u, 0x00000042u, 0x000000b0u, 0x00000015u, 0x000000afu, 0x0004003du, 0x00000009u, 0x000000b1u, - 0x000000b0u, 0x0004003du, 0x00000009u, 0x000000b2u, 0x00000094u, 0x00050085u, 0x00000009u, 0x000000b3u, - 0x000000b1u, 0x000000b2u, 0x00050081u, 0x00000009u, 0x000000b4u, 0x000000aeu, 0x000000b3u, 0x00050041u, - 0x00000042u, 0x000000b6u, 0x00000015u, 0x000000b5u, 0x0004003du, 0x00000009u, 0x000000b7u, 0x000000b6u, - 0x0004003du, 0x00000009u, 0x000000b8u, 0x00000098u, 0x00050085u, 0x00000009u, 0x000000b9u, 0x000000b7u, - 0x000000b8u, 0x00050081u, 0x00000009u, 0x000000bau, 0x000000b4u, 0x000000b9u, 0x00050041u, 0x00000042u, - 0x000000bcu, 0x00000015u, 0x000000bbu, 0x0004003du, 0x00000009u, 0x000000bdu, 0x000000bcu, 0x0004003du, - 0x00000009u, 0x000000beu, 0x0000009cu, 0x00050085u, 0x00000009u, 0x000000bfu, 0x000000bdu, 0x000000beu, - 0x00050081u, 0x00000009u, 0x000000c0u, 0x000000bau, 0x000000bfu, 0x0003003eu, 0x000000a0u, 0x000000c0u, - 0x0004003du, 0x00000009u, 0x000000c1u, 0x0000008du, 0x00050041u, 0x00000042u, 0x000000c2u, 0x00000015u, - 0x00000055u, 0x0004003du, 0x00000009u, 0x000000c3u, 0x000000c2u, 0x000500bau, 0x0000004cu, 0x000000c4u, - 0x000000c1u, 0x000000c3u, 0x000300f7u, 0x000000c6u, 0x00000000u, 0x000400fau, 0x000000c4u, 0x000000c5u, - 0x000000c6u, 0x000200f8u, 0x000000c5u, 0x00050041u, 0x00000042u, 0x000000c8u, 0x00000015u, 0x000000c7u, - 0x0004003du, 0x00000009u, 0x000000c9u, 0x000000c8u, 0x0004003du, 0x00000009u, 0x000000cau, 0x0000008du, - 0x00050041u, 0x00000042u, 0x000000cbu, 0x00000015u, 0x00000055u, 0x0004003du, 0x00000009u, 0x000000ccu, - 0x000000cbu, 0x00050083u, 0x00000009u, 0x000000cdu, 0x000000cau, 0x000000ccu, 0x00050041u, 0x00000042u, - 0x000000cfu, 0x00000015u, 0x000000ceu, 0x0004003du, 0x00000009u, 0x000000d0u, 0x000000cfu, 0x00050085u, - 0x00000009u, 0x000000d1u, 0x000000cdu, 0x000000d0u, 0x00050081u, 0x00000009u, 0x000000d2u, 0x000000c9u, - 0x000000d1u, 0x0003003eu, 0x000000a0u, 0x000000d2u, 0x000200f9u, 0x000000c6u, 0x000200f8u, 0x000000c6u, - 0x0004003du, 0x00000009u, 0x000000d4u, 0x00000082u, 0x000500bau, 0x0000004cu, 0x000000d5u, 0x000000d4u, - 0x0000004bu, 0x000300f7u, 0x000000d8u, 0x00000000u, 0x000400fau, 0x000000d5u, 0x000000d7u, 0x000000dcu, - 0x000200f8u, 0x000000d7u, 0x0004003du, 0x00000009u, 0x000000d9u, 0x000000a0u, 0x0004003du, 0x00000009u, - 0x000000dau, 0x00000082u, 0x00050088u, 0x00000009u, 0x000000dbu, 0x000000d9u, 0x000000dau, 0x0003003eu, - 0x000000d6u, 0x000000dbu, 0x000200f9u, 0x000000d8u, 0x000200f8u, 0x000000dcu, 0x0003003eu, 0x000000d6u, - 0x00000050u, 0x000200f9u, 0x000000d8u, 0x000200f8u, 0x000000d8u, 0x0004003du, 0x00000009u, 0x000000ddu, - 0x000000d6u, 0x0003003eu, 0x000000d3u, 0x000000ddu, 0x0004003du, 0x00000009u, 0x000000dfu, 0x000000d3u, - 0x0004003du, 0x0000000au, 0x000000e0u, 0x00000034u, 0x0007004fu, 0x00000020u, 0x000000e1u, 0x000000e0u, - 0x000000e0u, 0x00000000u, 0x00000001u, 0x0005008eu, 0x00000020u, 0x000000e2u, 0x000000e1u, 0x000000dfu, - 0x0003003eu, 0x000000deu, 0x000000e2u, 0x00050041u, 0x00000042u, 0x000000e5u, 0x00000015u, 0x000000e4u, - 0x0004003du, 0x00000009u, 0x000000e6u, 0x000000e5u, 0x00050041u, 0x00000042u, 0x000000e7u, 0x000000deu, - 0x00000065u, 0x0004003du, 0x00000009u, 0x000000e8u, 0x000000e7u, 0x00050085u, 0x00000009u, 0x000000e9u, - 0x000000e6u, 0x000000e8u, 0x00050041u, 0x00000042u, 0x000000ebu, 0x00000015u, 0x000000eau, 0x0004003du, - 0x00000009u, 0x000000ecu, 0x000000ebu, 0x00050041u, 0x00000042u, 0x000000edu, 0x000000deu, 0x00000008u, - 0x0004003du, 0x00000009u, 0x000000eeu, 0x000000edu, 0x00050085u, 0x00000009u, 0x000000efu, 0x000000ecu, - 0x000000eeu, 0x00050081u, 0x00000009u, 0x000000f0u, 0x000000e9u, 0x000000efu, 0x00050041u, 0x00000042u, - 0x000000f1u, 0x000000e3u, 0x00000065u, 0x0003003eu, 0x000000f1u, 0x000000f0u, 0x00050041u, 0x00000042u, - 0x000000f3u, 0x00000015u, 0x000000f2u, 0x0004003du, 0x00000009u, 0x000000f4u, 0x000000f3u, 0x00050041u, - 0x00000042u, 0x000000f5u, 0x000000deu, 0x00000065u, 0x0004003du, 0x00000009u, 0x000000f6u, 0x000000f5u, - 0x00050085u, 0x00000009u, 0x000000f7u, 0x000000f4u, 0x000000f6u, 0x00050041u, 0x00000042u, 0x000000f9u, - 0x00000015u, 0x000000f8u, 0x0004003du, 0x00000009u, 0x000000fau, 0x000000f9u, 0x00050041u, 0x00000042u, - 0x000000fbu, 0x000000deu, 0x00000008u, 0x0004003du, 0x00000009u, 0x000000fcu, 0x000000fbu, 0x00050085u, - 0x00000009u, 0x000000fdu, 0x000000fau, 0x000000fcu, 0x00050081u, 0x00000009u, 0x000000feu, 0x000000f7u, - 0x000000fdu, 0x00050041u, 0x00000042u, 0x000000ffu, 0x000000e3u, 0x00000008u, 0x0003003eu, 0x000000ffu, - 0x000000feu, 0x0004003du, 0x00000020u, 0x00000101u, 0x000000e3u, 0x00050041u, 0x00000042u, 0x00000102u, - 0x00000015u, 0x00000036u, 0x0004003du, 0x00000009u, 0x00000103u, 0x00000102u, 0x00050041u, 0x00000042u, - 0x00000105u, 0x00000015u, 0x00000104u, 0x0004003du, 0x00000009u, 0x00000106u, 0x00000105u, 0x00050050u, - 0x00000020u, 0x00000107u, 0x00000103u, 0x00000106u, 0x00050081u, 0x00000020u, 0x00000108u, 0x00000101u, - 0x00000107u, 0x0003003eu, 0x00000100u, 0x00000108u, 0x00050041u, 0x00000042u, 0x0000010bu, 0x00000100u, - 0x00000065u, 0x0004003du, 0x00000009u, 0x0000010cu, 0x0000010bu, 0x00050085u, 0x00000009u, 0x0000010du, - 0x0000010au, 0x0000010cu, 0x00050041u, 0x00000042u, 0x0000010eu, 0x00000015u, 0x0000006au, 0x0004003du, - 0x00000009u, 0x0000010fu, 0x0000010eu, 0x00050088u, 0x00000009u, 0x00000110u, 0x0000010du, 0x0000010fu, - 0x00050083u, 0x00000009u, 0x00000111u, 0x00000110u, 0x0000003bu, 0x0003003eu, 0x00000109u, 0x00000111u, - 0x00050041u, 0x00000042u, 0x00000113u, 0x00000100u, 0x00000008u, 0x0004003du, 0x00000009u, 0x00000114u, - 0x00000113u, 0x00050085u, 0x00000009u, 0x00000115u, 0x0000010au, 0x00000114u, 0x00050041u, 0x00000042u, - 0x00000116u, 0x00000015u, 0x00000076u, 0x0004003du, 0x00000009u, 0x00000117u, 0x00000116u, 0x00050088u, - 0x00000009u, 0x00000118u, 0x00000115u, 0x00000117u, 0x00050083u, 0x00000009u, 0x00000119u, 0x0000003bu, - 0x00000118u, 0x0003003eu, 0x00000112u, 0x00000119u, 0x00050041u, 0x00000042u, 0x0000011au, 0x00000015u, - 0x00000055u, 0x0004003du, 0x00000009u, 0x0000011bu, 0x0000011au, 0x0004003du, 0x00000009u, 0x0000011cu, - 0x00000053u, 0x000500bau, 0x0000004cu, 0x0000011du, 0x0000011bu, 0x0000011cu, 0x000300f7u, 0x0000011fu, - 0x00000000u, 0x000400fau, 0x0000011du, 0x0000011eu, 0x0000012cu, 0x000200f8u, 0x0000011eu, 0x0004003du, - 0x00000009u, 0x00000121u, 0x00000043u, 0x000500beu, 0x0000004cu, 0x00000122u, 0x00000121u, 0x00000050u, - 0x000300f7u, 0x00000125u, 0x00000000u, 0x000400fau, 0x00000122u, 0x00000124u, 0x00000127u, 0x000200f8u, - 0x00000124u, 0x0004003du, 0x00000009u, 0x00000126u, 0x00000047u, 0x0003003eu, 0x00000123u, 0x00000126u, - 0x000200f9u, 0x00000125u, 0x000200f8u, 0x00000127u, 0x00050041u, 0x00000042u, 0x00000129u, 0x00000015u, - 0x00000128u, 0x0004003du, 0x00000009u, 0x0000012au, 0x00000129u, 0x0003003eu, 0x00000123u, 0x0000012au, - 0x000200f9u, 0x00000125u, 0x000200f8u, 0x00000125u, 0x0004003du, 0x00000009u, 0x0000012bu, 0x00000123u, - 0x0003003eu, 0x00000120u, 0x0000012bu, 0x000200f9u, 0x0000011fu, 0x000200f8u, 0x0000012cu, 0x0004003du, - 0x00000009u, 0x0000012du, 0x00000043u, 0x0003003eu, 0x00000120u, 0x0000012du, 0x000200f9u, 0x0000011fu, - 0x000200f8u, 0x0000011fu, 0x0004003du, 0x00000009u, 0x0000012fu, 0x00000120u, 0x00050041u, 0x00000042u, - 0x00000130u, 0x00000015u, 0x00000128u, 0x0004003du, 0x00000009u, 0x00000131u, 0x00000130u, 0x00050088u, - 0x00000009u, 0x00000132u, 0x0000012fu, 0x00000131u, 0x0008000cu, 0x00000009u, 0x00000133u, 0x00000001u, - 0x0000002bu, 0x00000132u, 0x00000050u, 0x0000003bu, 0x0003003eu, 0x0000012eu, 0x00000133u, 0x0004003du, - 0x00000009u, 0x00000134u, 0x00000109u, 0x0004003du, 0x00000009u, 0x00000135u, 0x00000112u, 0x0004003du, - 0x00000009u, 0x00000136u, 0x0000012eu, 0x00070050u, 0x0000000cu, 0x00000137u, 0x00000134u, 0x00000135u, - 0x00000136u, 0x0000003bu, 0x000200feu, 0x00000137u, 0x00010038u, 0x00050036u, 0x00000006u, 0x0000001bu, - 0x00000000u, 0x00000019u, 0x00030037u, 0x00000018u, 0x0000001au, 0x000200f8u, 0x0000001cu, 0x0004003du, - 0x00000006u, 0x0000013au, 0x0000001au, 0x000500aau, 0x0000004cu, 0x0000013bu, 0x0000013au, 0x00000065u, - 0x000300f7u, 0x0000013du, 0x00000000u, 0x000400fau, 0x0000013bu, 0x0000013cu, 0x0000013du, 0x000200f8u, - 0x0000013cu, 0x000200feu, 0x0000013eu, 0x000200f8u, 0x0000013du, 0x0004003du, 0x00000006u, 0x00000140u, - 0x0000001au, 0x000500aau, 0x0000004cu, 0x00000141u, 0x00000140u, 0x00000008u, 0x000300f7u, 0x00000143u, - 0x00000000u, 0x000400fau, 0x00000141u, 0x00000142u, 0x00000143u, 0x000200f8u, 0x00000142u, 0x000200feu, - 0x00000144u, 0x000200f8u, 0x00000143u, 0x0004003du, 0x00000006u, 0x00000146u, 0x0000001au, 0x000500aau, - 0x0000004cu, 0x00000147u, 0x00000146u, 0x00000044u, 0x000300f7u, 0x00000149u, 0x00000000u, 0x000400fau, - 0x00000147u, 0x00000148u, 0x00000149u, 0x000200f8u, 0x00000148u, 0x000200feu, 0x0000014au, 0x000200f8u, - 0x00000149u, 0x000200feu, 0x0000014cu, 0x00010038u, 0x00050036u, 0x00000006u, 0x0000001eu, 0x00000000u, - 0x00000019u, 0x00030037u, 0x00000018u, 0x0000001du, 0x000200f8u, 0x0000001fu, 0x0004003du, 0x00000006u, - 0x0000014fu, 0x0000001du, 0x000500aau, 0x0000004cu, 0x00000150u, 0x0000014fu, 0x00000065u, 0x000300f7u, - 0x00000152u, 0x00000000u, 0x000400fau, 0x00000150u, 0x00000151u, 0x00000152u, 0x000200f8u, 0x00000151u, - 0x000200feu, 0x00000008u, 0x000200f8u, 0x00000152u, 0x0004003du, 0x00000006u, 0x00000154u, 0x0000001du, - 0x000500aau, 0x0000004cu, 0x00000155u, 0x00000154u, 0x00000008u, 0x000300f7u, 0x00000157u, 0x00000000u, - 0x000400fau, 0x00000155u, 0x00000156u, 0x00000157u, 0x000200f8u, 0x00000156u, 0x000200feu, 0x00000158u, - 0x000200f8u, 0x00000157u, 0x0004003du, 0x00000006u, 0x0000015au, 0x0000001du, 0x000500aau, 0x0000004cu, - 0x0000015bu, 0x0000015au, 0x00000044u, 0x000300f7u, 0x0000015du, 0x00000000u, 0x000400fau, 0x0000015bu, - 0x0000015cu, 0x0000015du, 0x000200f8u, 0x0000015cu, 0x000200feu, 0x0000015eu, 0x000200f8u, 0x0000015du, - 0x000200feu, 0x00000160u, 0x00010038u, 0x00050036u, 0x00000020u, 0x00000024u, 0x00000000u, 0x00000021u, - 0x00030037u, 0x00000018u, 0x00000022u, 0x00030037u, 0x00000018u, 0x00000023u, 0x000200f8u, 0x00000025u, - 0x0004003bu, 0x0000017bu, 0x0000017cu, 0x00000007u, 0x0004003bu, 0x00000018u, 0x00000194u, 0x00000007u, - 0x0004003bu, 0x00000018u, 0x00000195u, 0x00000007u, 0x0004003bu, 0x00000018u, 0x000001beu, 0x00000007u, - 0x0004003bu, 0x00000018u, 0x000001bfu, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000163u, 0x00000023u, - 0x000500aau, 0x0000004cu, 0x00000164u, 0x00000163u, 0x00000065u, 0x000300f7u, 0x00000166u, 0x00000000u, - 0x000400fau, 0x00000164u, 0x00000165u, 0x00000175u, 0x000200f8u, 0x00000165u, 0x0004003du, 0x00000006u, - 0x00000167u, 0x00000022u, 0x000500aau, 0x0000004cu, 0x00000168u, 0x00000167u, 0x00000065u, 0x000300f7u, - 0x0000016au, 0x00000000u, 0x000400fau, 0x00000168u, 0x00000169u, 0x0000016au, 0x000200f8u, 0x00000169u, - 0x000200feu, 0x0000016bu, 0x000200f8u, 0x0000016au, 0x0004003du, 0x00000006u, 0x0000016du, 0x00000022u, - 0x000500aau, 0x0000004cu, 0x0000016eu, 0x0000016du, 0x00000008u, 0x000300f7u, 0x00000170u, 0x00000000u, - 0x000400fau, 0x0000016eu, 0x0000016fu, 0x00000170u, 0x000200f8u, 0x0000016fu, 0x000200feu, 0x00000171u, - 0x000200f8u, 0x00000170u, 0x000200feu, 0x00000173u, 0x000200f8u, 0x00000175u, 0x0004003du, 0x00000006u, - 0x00000176u, 0x00000023u, 0x000500aau, 0x0000004cu, 0x00000177u, 0x00000176u, 0x00000008u, 0x000300f7u, - 0x00000179u, 0x00000000u, 0x000400fau, 0x00000177u, 0x00000178u, 0x0000018au, 0x000200f8u, 0x00000178u, - 0x00050041u, 0x00000026u, 0x0000017du, 0x0000017cu, 0x00000036u, 0x0003003eu, 0x0000017du, 0x0000016bu, - 0x00050041u, 0x00000026u, 0x0000017eu, 0x0000017cu, 0x00000104u, 0x0003003eu, 0x0000017eu, 0x00000171u, - 0x00050041u, 0x00000026u, 0x0000017fu, 0x0000017cu, 0x0000006au, 0x0003003eu, 0x0000017fu, 0x00000173u, - 0x00050041u, 0x00000026u, 0x00000181u, 0x0000017cu, 0x00000076u, 0x0003003eu, 0x00000181u, 0x00000180u, - 0x00050041u, 0x00000026u, 0x00000183u, 0x0000017cu, 0x000000a1u, 0x0003003eu, 0x00000183u, 0x00000182u, - 0x00050041u, 0x00000026u, 0x00000185u, 0x0000017cu, 0x00000061u, 0x0003003eu, 0x00000185u, 0x00000184u, - 0x0004003du, 0x00000006u, 0x00000186u, 0x00000022u, 0x00050041u, 0x00000026u, 0x00000187u, 0x0000017cu, - 0x00000186u, 0x0004003du, 0x00000020u, 0x00000188u, 0x00000187u, 0x000200feu, 0x00000188u, 0x000200f8u, - 0x0000018au, 0x0004003du, 0x00000006u, 0x0000018bu, 0x00000023u, 0x000500aau, 0x0000004cu, 0x0000018cu, - 0x0000018bu, 0x00000044u, 0x000300f7u, 0x0000018eu, 0x00000000u, 0x000400fau, 0x0000018cu, 0x0000018du, - 0x000001b9u, 0x000200f8u, 0x0000018du, 0x0004003du, 0x00000006u, 0x0000018fu, 0x00000022u, 0x000500b0u, - 0x0000004cu, 0x00000191u, 0x0000018fu, 0x00000190u, 0x000300f7u, 0x00000193u, 0x00000000u, 0x000400fau, - 0x00000191u, 0x00000192u, 0x00000197u, 0x000200f8u, 0x00000192u, 0x0003003eu, 0x00000194u, 0x00000065u, - 0x0004003du, 0x00000006u, 0x00000196u, 0x00000022u, 0x0003003eu, 0x00000195u, 0x00000196u, 0x000200f9u, - 0x00000193u, 0x000200f8u, 0x00000197u, 0x0004003du, 0x00000006u, 0x00000198u, 0x00000022u, 0x000500b0u, - 0x0000004cu, 0x0000019au, 0x00000198u, 0x00000199u, 0x000300f7u, 0x0000019cu, 0x00000000u, 0x000400fau, - 0x0000019au, 0x0000019bu, 0x0000019fu, 0x000200f8u, 0x0000019bu, 0x0003003eu, 0x00000194u, 0x00000008u, - 0x0004003du, 0x00000006u, 0x0000019du, 0x00000022u, 0x00050082u, 0x00000006u, 0x0000019eu, 0x0000019du, - 0x00000190u, 0x0003003eu, 0x00000195u, 0x0000019eu, 0x000200f9u, 0x0000019cu, 0x000200f8u, 0x0000019fu, - 0x0004003du, 0x00000006u, 0x000001a0u, 0x00000022u, 0x000500b0u, 0x0000004cu, 0x000001a2u, 0x000001a0u, - 0x000001a1u, 0x000300f7u, 0x000001a4u, 0x00000000u, 0x000400fau, 0x000001a2u, 0x000001a3u, 0x000001a7u, - 0x000200f8u, 0x000001a3u, 0x0003003eu, 0x00000194u, 0x00000044u, 0x0004003du, 0x00000006u, 0x000001a5u, - 0x00000022u, 0x00050082u, 0x00000006u, 0x000001a6u, 0x000001a5u, 0x00000199u, 0x0003003eu, 0x00000195u, - 0x000001a6u, 0x000200f9u, 0x000001a4u, 0x000200f8u, 0x000001a7u, 0x0004003du, 0x00000006u, 0x000001a8u, - 0x00000022u, 0x000500b0u, 0x0000004cu, 0x000001aau, 0x000001a8u, 0x000001a9u, 0x000300f7u, 0x000001acu, - 0x00000000u, 0x000400fau, 0x000001aau, 0x000001abu, 0x000001afu, 0x000200f8u, 0x000001abu, 0x0003003eu, - 0x00000194u, 0x0000013eu, 0x0004003du, 0x00000006u, 0x000001adu, 0x00000022u, 0x00050082u, 0x00000006u, - 0x000001aeu, 0x000001adu, 0x000001a1u, 0x0003003eu, 0x00000195u, 0x000001aeu, 0x000200f9u, 0x000001acu, - 0x000200f8u, 0x000001afu, 0x0003003eu, 0x00000194u, 0x00000158u, 0x0003003eu, 0x00000195u, 0x00000065u, - 0x000200f9u, 0x000001acu, 0x000200f8u, 0x000001acu, 0x000200f9u, 0x000001a4u, 0x000200f8u, 0x000001a4u, - 0x000200f9u, 0x0000019cu, 0x000200f8u, 0x0000019cu, 0x000200f9u, 0x00000193u, 0x000200f8u, 0x00000193u, - 0x0004003du, 0x00000006u, 0x000001b0u, 0x00000195u, 0x00040070u, 0x00000009u, 0x000001b1u, 0x000001b0u, - 0x00050088u, 0x00000009u, 0x000001b3u, 0x000001b1u, 0x000001b2u, 0x0004003du, 0x00000006u, 0x000001b4u, - 0x00000194u, 0x00040070u, 0x00000009u, 0x000001b5u, 0x000001b4u, 0x00050088u, 0x00000009u, 0x000001b6u, - 0x000001b5u, 0x000001b2u, 0x00050050u, 0x00000020u, 0x000001b7u, 0x000001b3u, 0x000001b6u, 0x000200feu, - 0x000001b7u, 0x000200f8u, 0x000001b9u, 0x0004003du, 0x00000006u, 0x000001bau, 0x00000022u, 0x000500b0u, - 0x0000004cu, 0x000001bbu, 0x000001bau, 0x00000199u, 0x000300f7u, 0x000001bdu, 0x00000000u, 0x000400fau, - 0x000001bbu, 0x000001bcu, 0x000001c1u, 0x000200f8u, 0x000001bcu, 0x0003003eu, 0x000001beu, 0x00000065u, - 0x0004003du, 0x00000006u, 0x000001c0u, 0x00000022u, 0x0003003eu, 0x000001bfu, 0x000001c0u, 0x000200f9u, - 0x000001bdu, 0x000200f8u, 0x000001c1u, 0x0004003du, 0x00000006u, 0x000001c2u, 0x00000022u, 0x000500b0u, - 0x0000004cu, 0x000001c4u, 0x000001c2u, 0x000001c3u, 0x000300f7u, 0x000001c6u, 0x00000000u, 0x000400fau, - 0x000001c4u, 0x000001c5u, 0x000001c9u, 0x000200f8u, 0x000001c5u, 0x0003003eu, 0x000001beu, 0x00000008u, - 0x0004003du, 0x00000006u, 0x000001c7u, 0x00000022u, 0x00050082u, 0x00000006u, 0x000001c8u, 0x000001c7u, - 0x00000199u, 0x0003003eu, 0x000001bfu, 0x000001c8u, 0x000200f9u, 0x000001c6u, 0x000200f8u, 0x000001c9u, - 0x0004003du, 0x00000006u, 0x000001cau, 0x00000022u, 0x000500b0u, 0x0000004cu, 0x000001ccu, 0x000001cau, - 0x000001cbu, 0x000300f7u, 0x000001ceu, 0x00000000u, 0x000400fau, 0x000001ccu, 0x000001cdu, 0x000001d1u, - 0x000200f8u, 0x000001cdu, 0x0003003eu, 0x000001beu, 0x00000044u, 0x0004003du, 0x00000006u, 0x000001cfu, - 0x00000022u, 0x00050082u, 0x00000006u, 0x000001d0u, 0x000001cfu, 0x000001c3u, 0x0003003eu, 0x000001bfu, - 0x000001d0u, 0x000200f9u, 0x000001ceu, 0x000200f8u, 0x000001d1u, 0x0004003du, 0x00000006u, 0x000001d2u, - 0x00000022u, 0x000500b0u, 0x0000004cu, 0x000001d4u, 0x000001d2u, 0x000001d3u, 0x000300f7u, 0x000001d6u, - 0x00000000u, 0x000400fau, 0x000001d4u, 0x000001d5u, 0x000001d9u, 0x000200f8u, 0x000001d5u, 0x0003003eu, - 0x000001beu, 0x0000013eu, 0x0004003du, 0x00000006u, 0x000001d7u, 0x00000022u, 0x00050082u, 0x00000006u, - 0x000001d8u, 0x000001d7u, 0x000001cbu, 0x0003003eu, 0x000001bfu, 0x000001d8u, 0x000200f9u, 0x000001d6u, - 0x000200f8u, 0x000001d9u, 0x0004003du, 0x00000006u, 0x000001dau, 0x00000022u, 0x000500b0u, 0x0000004cu, - 0x000001dcu, 0x000001dau, 0x000001dbu, 0x000300f7u, 0x000001deu, 0x00000000u, 0x000400fau, 0x000001dcu, - 0x000001ddu, 0x000001e1u, 0x000200f8u, 0x000001ddu, 0x0003003eu, 0x000001beu, 0x00000158u, 0x0004003du, - 0x00000006u, 0x000001dfu, 0x00000022u, 0x00050082u, 0x00000006u, 0x000001e0u, 0x000001dfu, 0x000001d3u, - 0x0003003eu, 0x000001bfu, 0x000001e0u, 0x000200f9u, 0x000001deu, 0x000200f8u, 0x000001e1u, 0x0004003du, - 0x00000006u, 0x000001e2u, 0x00000022u, 0x000500b0u, 0x0000004cu, 0x000001e4u, 0x000001e2u, 0x000001e3u, - 0x000300f7u, 0x000001e6u, 0x00000000u, 0x000400fau, 0x000001e4u, 0x000001e5u, 0x000001e9u, 0x000200f8u, - 0x000001e5u, 0x0003003eu, 0x000001beu, 0x00000190u, 0x0004003du, 0x00000006u, 0x000001e7u, 0x00000022u, - 0x00050082u, 0x00000006u, 0x000001e8u, 0x000001e7u, 0x000001dbu, 0x0003003eu, 0x000001bfu, 0x000001e8u, - 0x000200f9u, 0x000001e6u, 0x000200f8u, 0x000001e9u, 0x0004003du, 0x00000006u, 0x000001eau, 0x00000022u, - 0x000500b0u, 0x0000004cu, 0x000001ecu, 0x000001eau, 0x000001ebu, 0x000300f7u, 0x000001eeu, 0x00000000u, - 0x000400fau, 0x000001ecu, 0x000001edu, 0x000001f1u, 0x000200f8u, 0x000001edu, 0x0003003eu, 0x000001beu, - 0x00000144u, 0x0004003du, 0x00000006u, 0x000001efu, 0x00000022u, 0x00050082u, 0x00000006u, 0x000001f0u, - 0x000001efu, 0x000001e3u, 0x0003003eu, 0x000001bfu, 0x000001f0u, 0x000200f9u, 0x000001eeu, 0x000200f8u, - 0x000001f1u, 0x0004003du, 0x00000006u, 0x000001f2u, 0x00000022u, 0x000500b0u, 0x0000004cu, 0x000001f4u, - 0x000001f2u, 0x000001f3u, 0x000300f7u, 0x000001f6u, 0x00000000u, 0x000400fau, 0x000001f4u, 0x000001f5u, - 0x000001fau, 0x000200f8u, 0x000001f5u, 0x0003003eu, 0x000001beu, 0x000001f7u, 0x0004003du, 0x00000006u, - 0x000001f8u, 0x00000022u, 0x00050082u, 0x00000006u, 0x000001f9u, 0x000001f8u, 0x000001ebu, 0x0003003eu, - 0x000001bfu, 0x000001f9u, 0x000200f9u, 0x000001f6u, 0x000200f8u, 0x000001fau, 0x0003003eu, 0x000001beu, - 0x000001fbu, 0x0003003eu, 0x000001bfu, 0x00000065u, 0x000200f9u, 0x000001f6u, 0x000200f8u, 0x000001f6u, - 0x000200f9u, 0x000001eeu, 0x000200f8u, 0x000001eeu, 0x000200f9u, 0x000001e6u, 0x000200f8u, 0x000001e6u, - 0x000200f9u, 0x000001deu, 0x000200f8u, 0x000001deu, 0x000200f9u, 0x000001d6u, 0x000200f8u, 0x000001d6u, - 0x000200f9u, 0x000001ceu, 0x000200f8u, 0x000001ceu, 0x000200f9u, 0x000001c6u, 0x000200f8u, 0x000001c6u, - 0x000200f9u, 0x000001bdu, 0x000200f8u, 0x000001bdu, 0x0004003du, 0x00000006u, 0x000001fcu, 0x000001bfu, - 0x00040070u, 0x00000009u, 0x000001fdu, 0x000001fcu, 0x00050088u, 0x00000009u, 0x000001ffu, 0x000001fdu, - 0x000001feu, 0x0004003du, 0x00000006u, 0x00000200u, 0x000001beu, 0x00040070u, 0x00000009u, 0x00000201u, - 0x00000200u, 0x00050088u, 0x00000009u, 0x00000202u, 0x00000201u, 0x000001feu, 0x00050050u, 0x00000020u, - 0x00000203u, 0x000001ffu, 0x00000202u, 0x000200feu, 0x00000203u, 0x000200f8u, 0x0000018eu, 0x000100ffu, - 0x000200f8u, 0x00000179u, 0x000100ffu, 0x000200f8u, 0x00000166u, 0x000100ffu, 0x00010038u, 0x00050036u, - 0x0000000au, 0x0000002cu, 0x00000000u, 0x00000027u, 0x00030037u, 0x0000000bu, 0x00000028u, 0x00030037u, - 0x0000000bu, 0x00000029u, 0x00030037u, 0x0000000bu, 0x0000002au, 0x00030037u, 0x00000026u, 0x0000002bu, - 0x000200f8u, 0x0000002du, 0x0004003bu, 0x00000042u, 0x00000206u, 0x00000007u, 0x00050041u, 0x00000042u, - 0x00000207u, 0x0000002bu, 0x00000065u, 0x0004003du, 0x00000009u, 0x00000208u, 0x00000207u, 0x00050083u, - 0x00000009u, 0x00000209u, 0x0000003bu, 0x00000208u, 0x00050041u, 0x00000042u, 0x0000020au, 0x0000002bu, - 0x00000008u, 0x0004003du, 0x00000009u, 0x0000020bu, 0x0000020au, 0x00050083u, 0x00000009u, 0x0000020cu, - 0x00000209u, 0x0000020bu, 0x0003003eu, 0x00000206u, 0x0000020cu, 0x0004003du, 0x0000000au, 0x0000020du, - 0x00000028u, 0x0004003du, 0x00000009u, 0x0000020eu, 0x00000206u, 0x0005008eu, 0x0000000au, 0x0000020fu, - 0x0000020du, 0x0000020eu, 0x0004003du, 0x0000000au, 0x00000210u, 0x00000029u, 0x00050041u, 0x00000042u, - 0x00000211u, 0x0000002bu, 0x00000065u, 0x0004003du, 0x00000009u, 0x00000212u, 0x00000211u, 0x0005008eu, - 0x0000000au, 0x00000213u, 0x00000210u, 0x00000212u, 0x00050081u, 0x0000000au, 0x00000214u, 0x0000020fu, - 0x00000213u, 0x0004003du, 0x0000000au, 0x00000215u, 0x0000002au, 0x00050041u, 0x00000042u, 0x00000216u, - 0x0000002bu, 0x00000008u, 0x0004003du, 0x00000009u, 0x00000217u, 0x00000216u, 0x0005008eu, 0x0000000au, - 0x00000218u, 0x00000215u, 0x00000217u, 0x00050081u, 0x0000000au, 0x00000219u, 0x00000214u, 0x00000218u, - 0x000200feu, 0x00000219u, 0x00010038u, 0x00050036u, 0x0000002eu, 0x00000032u, 0x00000000u, 0x0000002fu, - 0x00030037u, 0x00000018u, 0x00000030u, 0x00030037u, 0x00000018u, 0x00000031u, 0x000200f8u, 0x00000033u, - 0x0004003bu, 0x00000228u, 0x00000229u, 0x00000007u, 0x0004003bu, 0x0000023du, 0x0000023eu, 0x00000007u, - 0x0004003bu, 0x00000018u, 0x00000240u, 0x00000007u, 0x0004003bu, 0x00000018u, 0x00000242u, 0x00000007u, - 0x0004003bu, 0x00000018u, 0x00000243u, 0x00000007u, 0x0004003bu, 0x00000244u, 0x00000245u, 0x00000007u, - 0x0004003bu, 0x00000018u, 0x00000259u, 0x00000007u, 0x0004003bu, 0x00000018u, 0x00000269u, 0x00000007u, - 0x0004003bu, 0x00000018u, 0x00000279u, 0x00000007u, 0x0004003bu, 0x00000018u, 0x0000027fu, 0x00000007u, - 0x0004003bu, 0x00000018u, 0x00000286u, 0x00000007u, 0x0004003bu, 0x000002a8u, 0x000002a9u, 0x00000007u, - 0x0004003bu, 0x00000018u, 0x000002abu, 0x00000007u, 0x0004003bu, 0x00000018u, 0x000002adu, 0x00000007u, - 0x0004003bu, 0x00000018u, 0x000002aeu, 0x00000007u, 0x0004003bu, 0x00000244u, 0x000002afu, 0x00000007u, - 0x0004003bu, 0x00000018u, 0x000002c2u, 0x00000007u, 0x0004003bu, 0x00000018u, 0x000002d2u, 0x00000007u, - 0x0004003bu, 0x00000018u, 0x000002e3u, 0x00000007u, 0x0004003bu, 0x00000018u, 0x000002f4u, 0x00000007u, - 0x0004003bu, 0x00000018u, 0x00000305u, 0x00000007u, 0x0004003bu, 0x00000018u, 0x00000316u, 0x00000007u, - 0x0004003bu, 0x00000018u, 0x00000326u, 0x00000007u, 0x0004003bu, 0x00000018u, 0x0000032cu, 0x00000007u, - 0x0004003bu, 0x00000018u, 0x00000333u, 0x00000007u, 0x0004003du, 0x00000006u, 0x0000021cu, 0x00000031u, - 0x000500aau, 0x0000004cu, 0x0000021du, 0x0000021cu, 0x00000065u, 0x000300f7u, 0x0000021fu, 0x00000000u, - 0x000400fau, 0x0000021du, 0x0000021eu, 0x00000222u, 0x000200f8u, 0x0000021eu, 0x000200feu, 0x00000220u, - 0x000200f8u, 0x00000222u, 0x0004003du, 0x00000006u, 0x00000223u, 0x00000031u, 0x000500aau, 0x0000004cu, - 0x00000224u, 0x00000223u, 0x00000008u, 0x000300f7u, 0x00000226u, 0x00000000u, 0x000400fau, 0x00000224u, - 0x00000225u, 0x00000237u, 0x000200f8u, 0x00000225u, 0x00050041u, 0x0000022bu, 0x0000022cu, 0x00000229u, - 0x00000036u, 0x0003003eu, 0x0000022cu, 0x0000022au, 0x00050041u, 0x0000022bu, 0x0000022eu, 0x00000229u, - 0x00000104u, 0x0003003eu, 0x0000022eu, 0x0000022du, 0x00050041u, 0x0000022bu, 0x00000230u, 0x00000229u, - 0x0000006au, 0x0003003eu, 0x00000230u, 0x0000022fu, 0x00050041u, 0x0000022bu, 0x00000232u, 0x00000229u, - 0x00000076u, 0x0003003eu, 0x00000232u, 0x00000231u, 0x0004003du, 0x00000006u, 0x00000233u, 0x00000030u, - 0x00050041u, 0x0000022bu, 0x00000234u, 0x00000229u, 0x00000233u, 0x0004003du, 0x0000002eu, 0x00000235u, - 0x00000234u, 0x000200feu, 0x00000235u, 0x000200f8u, 0x00000237u, 0x0004003du, 0x00000006u, 0x00000238u, - 0x00000031u, 0x000500aau, 0x0000004cu, 0x00000239u, 0x00000238u, 0x00000044u, 0x000300f7u, 0x0000023bu, - 0x00000000u, 0x000400fau, 0x00000239u, 0x0000023au, 0x000002a6u, 0x000200f8u, 0x0000023au, 0x0003003eu, - 0x0000023eu, 0x0000023fu, 0x0004003du, 0x00000006u, 0x00000241u, 0x00000030u, 0x0003003eu, 0x00000240u, - 0x00000241u, 0x0003003eu, 0x00000242u, 0x00000065u, 0x0003003eu, 0x00000243u, 0x00000065u, 0x0003003eu, - 0x00000245u, 0x00000246u, 0x0004003du, 0x00000006u, 0x00000247u, 0x00000240u, 0x000500b0u, 0x0000004cu, - 0x00000248u, 0x00000247u, 0x000001f7u, 0x000300f7u, 0x0000024au, 0x00000000u, 0x000400fau, 0x00000248u, - 0x00000249u, 0x00000254u, 0x000200f8u, 0x00000249u, 0x0003003eu, 0x00000242u, 0x00000065u, 0x0004003du, - 0x00000006u, 0x0000024bu, 0x00000240u, 0x000500b0u, 0x0000004cu, 0x0000024cu, 0x0000024bu, 0x00000158u, - 0x000300f7u, 0x0000024eu, 0x00000000u, 0x000400fau, 0x0000024cu, 0x0000024du, 0x00000250u, 0x000200f8u, - 0x0000024du, 0x0004003du, 0x00000006u, 0x0000024fu, 0x00000240u, 0x0003003eu, 0x00000243u, 0x0000024fu, - 0x0003003eu, 0x00000245u, 0x00000246u, 0x000200f9u, 0x0000024eu, 0x000200f8u, 0x00000250u, 0x0004003du, - 0x00000006u, 0x00000251u, 0x00000240u, 0x00050082u, 0x00000006u, 0x00000252u, 0x00000251u, 0x00000158u, - 0x0003003eu, 0x00000243u, 0x00000252u, 0x0003003eu, 0x00000245u, 0x00000253u, 0x000200f9u, 0x0000024eu, - 0x000200f8u, 0x0000024eu, 0x000200f9u, 0x0000024au, 0x000200f8u, 0x00000254u, 0x0004003du, 0x00000006u, - 0x00000255u, 0x00000240u, 0x000500b0u, 0x0000004cu, 0x00000256u, 0x00000255u, 0x000001a1u, 0x000300f7u, - 0x00000258u, 0x00000000u, 0x000400fau, 0x00000256u, 0x00000257u, 0x00000264u, 0x000200f8u, 0x00000257u, - 0x0003003eu, 0x00000242u, 0x00000008u, 0x0004003du, 0x00000006u, 0x0000025au, 0x00000240u, 0x00050082u, - 0x00000006u, 0x0000025bu, 0x0000025au, 0x000001f7u, 0x0003003eu, 0x00000259u, 0x0000025bu, 0x0004003du, - 0x00000006u, 0x0000025cu, 0x00000259u, 0x000500b0u, 0x0000004cu, 0x0000025du, 0x0000025cu, 0x0000013eu, - 0x000300f7u, 0x0000025fu, 0x00000000u, 0x000400fau, 0x0000025du, 0x0000025eu, 0x00000261u, 0x000200f8u, - 0x0000025eu, 0x0004003du, 0x00000006u, 0x00000260u, 0x00000259u, 0x0003003eu, 0x00000243u, 0x00000260u, - 0x0003003eu, 0x00000245u, 0x00000246u, 0x000200f9u, 0x0000025fu, 0x000200f8u, 0x00000261u, 0x0004003du, - 0x00000006u, 0x00000262u, 0x00000259u, 0x00050082u, 0x00000006u, 0x00000263u, 0x00000262u, 0x0000013eu, - 0x0003003eu, 0x00000243u, 0x00000263u, 0x0003003eu, 0x00000245u, 0x00000253u, 0x000200f9u, 0x0000025fu, - 0x000200f8u, 0x0000025fu, 0x000200f9u, 0x00000258u, 0x000200f8u, 0x00000264u, 0x0004003du, 0x00000006u, - 0x00000265u, 0x00000240u, 0x000500b0u, 0x0000004cu, 0x00000266u, 0x00000265u, 0x0000014au, 0x000300f7u, - 0x00000268u, 0x00000000u, 0x000400fau, 0x00000266u, 0x00000267u, 0x00000274u, 0x000200f8u, 0x00000267u, - 0x0003003eu, 0x00000242u, 0x00000044u, 0x0004003du, 0x00000006u, 0x0000026au, 0x00000240u, 0x00050082u, - 0x00000006u, 0x0000026bu, 0x0000026au, 0x000001a1u, 0x0003003eu, 0x00000269u, 0x0000026bu, 0x0004003du, - 0x00000006u, 0x0000026cu, 0x00000269u, 0x000500b0u, 0x0000004cu, 0x0000026du, 0x0000026cu, 0x00000044u, - 0x000300f7u, 0x0000026fu, 0x00000000u, 0x000400fau, 0x0000026du, 0x0000026eu, 0x00000271u, 0x000200f8u, - 0x0000026eu, 0x0004003du, 0x00000006u, 0x00000270u, 0x00000269u, 0x0003003eu, 0x00000243u, 0x00000270u, - 0x0003003eu, 0x00000245u, 0x00000246u, 0x000200f9u, 0x0000026fu, 0x000200f8u, 0x00000271u, 0x0004003du, - 0x00000006u, 0x00000272u, 0x00000269u, 0x00050082u, 0x00000006u, 0x00000273u, 0x00000272u, 0x00000044u, - 0x0003003eu, 0x00000243u, 0x00000273u, 0x0003003eu, 0x00000245u, 0x00000253u, 0x000200f9u, 0x0000026fu, - 0x000200f8u, 0x0000026fu, 0x000200f9u, 0x00000268u, 0x000200f8u, 0x00000274u, 0x0003003eu, 0x00000242u, - 0x0000013eu, 0x0003003eu, 0x00000243u, 0x00000065u, 0x0003003eu, 0x00000245u, 0x00000246u, 0x000200f9u, - 0x00000268u, 0x000200f8u, 0x00000268u, 0x000200f9u, 0x00000258u, 0x000200f8u, 0x00000258u, 0x000200f9u, - 0x0000024au, 0x000200f8u, 0x0000024au, 0x0004003du, 0x0000004cu, 0x00000275u, 0x00000245u, 0x000400a8u, - 0x0000004cu, 0x00000276u, 0x00000275u, 0x000300f7u, 0x00000278u, 0x00000000u, 0x000400fau, 0x00000276u, - 0x00000277u, 0x0000028du, 0x000200f8u, 0x00000277u, 0x0004003du, 0x00000006u, 0x0000027au, 0x00000242u, - 0x00050041u, 0x00000018u, 0x0000027bu, 0x0000023eu, 0x0000027au, 0x0004003du, 0x00000006u, 0x0000027cu, - 0x0000027bu, 0x0004003du, 0x00000006u, 0x0000027du, 0x00000243u, 0x00050080u, 0x00000006u, 0x0000027eu, - 0x0000027cu, 0x0000027du, 0x0003003eu, 0x00000279u, 0x0000027eu, 0x0004003du, 0x00000006u, 0x00000280u, - 0x00000242u, 0x00050041u, 0x00000018u, 0x00000281u, 0x0000023eu, 0x00000280u, 0x0004003du, 0x00000006u, - 0x00000282u, 0x00000281u, 0x0004003du, 0x00000006u, 0x00000283u, 0x00000243u, 0x00050080u, 0x00000006u, - 0x00000284u, 0x00000282u, 0x00000283u, 0x00050080u, 0x00000006u, 0x00000285u, 0x00000284u, 0x00000008u, - 0x0003003eu, 0x0000027fu, 0x00000285u, 0x0004003du, 0x00000006u, 0x00000287u, 0x00000242u, 0x00050080u, - 0x00000006u, 0x00000288u, 0x00000287u, 0x00000008u, 0x00050041u, 0x00000018u, 0x00000289u, 0x0000023eu, - 0x00000288u, 0x0004003du, 0x00000006u, 0x0000028au, 0x00000289u, 0x0004003du, 0x00000006u, 0x0000028bu, - 0x00000243u, 0x00050080u, 0x00000006u, 0x0000028cu, 0x0000028au, 0x0000028bu, 0x0003003eu, 0x00000286u, - 0x0000028cu, 0x000200f9u, 0x00000278u, 0x000200f8u, 0x0000028du, 0x0004003du, 0x00000006u, 0x0000028eu, - 0x00000242u, 0x00050041u, 0x00000018u, 0x0000028fu, 0x0000023eu, 0x0000028eu, 0x0004003du, 0x00000006u, - 0x00000290u, 0x0000028fu, 0x0004003du, 0x00000006u, 0x00000291u, 0x00000243u, 0x00050080u, 0x00000006u, - 0x00000292u, 0x00000290u, 0x00000291u, 0x00050080u, 0x00000006u, 0x00000293u, 0x00000292u, 0x00000008u, - 0x0003003eu, 0x00000279u, 0x00000293u, 0x0004003du, 0x00000006u, 0x00000294u, 0x00000242u, 0x00050080u, - 0x00000006u, 0x00000295u, 0x00000294u, 0x00000008u, 0x00050041u, 0x00000018u, 0x00000296u, 0x0000023eu, - 0x00000295u, 0x0004003du, 0x00000006u, 0x00000297u, 0x00000296u, 0x0004003du, 0x00000006u, 0x00000298u, - 0x00000243u, 0x00050080u, 0x00000006u, 0x00000299u, 0x00000297u, 0x00000298u, 0x00050080u, 0x00000006u, - 0x0000029au, 0x00000299u, 0x00000008u, 0x0003003eu, 0x0000027fu, 0x0000029au, 0x0004003du, 0x00000006u, - 0x0000029bu, 0x00000242u, 0x00050080u, 0x00000006u, 0x0000029cu, 0x0000029bu, 0x00000008u, 0x00050041u, - 0x00000018u, 0x0000029du, 0x0000023eu, 0x0000029cu, 0x0004003du, 0x00000006u, 0x0000029eu, 0x0000029du, - 0x0004003du, 0x00000006u, 0x0000029fu, 0x00000243u, 0x00050080u, 0x00000006u, 0x000002a0u, 0x0000029eu, - 0x0000029fu, 0x0003003eu, 0x00000286u, 0x000002a0u, 0x000200f9u, 0x00000278u, 0x000200f8u, 0x00000278u, - 0x0004003du, 0x00000006u, 0x000002a1u, 0x00000279u, 0x0004003du, 0x00000006u, 0x000002a2u, 0x0000027fu, - 0x0004003du, 0x00000006u, 0x000002a3u, 0x00000286u, 0x00060050u, 0x0000002eu, 0x000002a4u, 0x000002a1u, - 0x000002a2u, 0x000002a3u, 0x000200feu, 0x000002a4u, 0x000200f8u, 0x000002a6u, 0x0003003eu, 0x000002a9u, - 0x000002aau, 0x0004003du, 0x00000006u, 0x000002acu, 0x00000030u, 0x0003003eu, 0x000002abu, 0x000002acu, - 0x0003003eu, 0x000002adu, 0x00000065u, 0x0003003eu, 0x000002aeu, 0x00000065u, 0x0003003eu, 0x000002afu, - 0x00000246u, 0x0004003du, 0x00000006u, 0x000002b0u, 0x000002abu, 0x000500b0u, 0x0000004cu, 0x000002b1u, - 0x000002b0u, 0x0000014au, 0x000300f7u, 0x000002b3u, 0x00000000u, 0x000400fau, 0x000002b1u, 0x000002b2u, - 0x000002bcu, 0x000200f8u, 0x000002b2u, 0x0003003eu, 0x000002adu, 0x00000065u, 0x0004003du, 0x00000006u, - 0x000002b4u, 0x000002abu, 0x000500b0u, 0x0000004cu, 0x000002b5u, 0x000002b4u, 0x000001fbu, 0x000300f7u, - 0x000002b7u, 0x00000000u, 0x000400fau, 0x000002b5u, 0x000002b6u, 0x000002b9u, 0x000200f8u, 0x000002b6u, - 0x0004003du, 0x00000006u, 0x000002b8u, 0x000002abu, 0x0003003eu, 0x000002aeu, 0x000002b8u, 0x0003003eu, - 0x000002afu, 0x00000246u, 0x000200f9u, 0x000002b7u, 0x000200f8u, 0x000002b9u, 0x0004003du, 0x00000006u, - 0x000002bau, 0x000002abu, 0x00050082u, 0x00000006u, 0x000002bbu, 0x000002bau, 0x000001fbu, 0x0003003eu, - 0x000002aeu, 0x000002bbu, 0x0003003eu, 0x000002afu, 0x00000253u, 0x000200f9u, 0x000002b7u, 0x000200f8u, - 0x000002b7u, 0x000200f9u, 0x000002b3u, 0x000200f8u, 0x000002bcu, 0x0004003du, 0x00000006u, 0x000002bdu, - 0x000002abu, 0x000500b0u, 0x0000004cu, 0x000002bfu, 0x000002bdu, 0x000002beu, 0x000300f7u, 0x000002c1u, - 0x00000000u, 0x000400fau, 0x000002bfu, 0x000002c0u, 0x000002cdu, 0x000200f8u, 0x000002c0u, 0x0003003eu, - 0x000002adu, 0x00000008u, 0x0004003du, 0x00000006u, 0x000002c3u, 0x000002abu, 0x00050082u, 0x00000006u, - 0x000002c4u, 0x000002c3u, 0x0000014au, 0x0003003eu, 0x000002c2u, 0x000002c4u, 0x0004003du, 0x00000006u, - 0x000002c5u, 0x000002c2u, 0x000500b0u, 0x0000004cu, 0x000002c6u, 0x000002c5u, 0x000001f7u, 0x000300f7u, - 0x000002c8u, 0x00000000u, 0x000400fau, 0x000002c6u, 0x000002c7u, 0x000002cau, 0x000200f8u, 0x000002c7u, - 0x0004003du, 0x00000006u, 0x000002c9u, 0x000002c2u, 0x0003003eu, 0x000002aeu, 0x000002c9u, 0x0003003eu, - 0x000002afu, 0x00000246u, 0x000200f9u, 0x000002c8u, 0x000200f8u, 0x000002cau, 0x0004003du, 0x00000006u, - 0x000002cbu, 0x000002c2u, 0x00050082u, 0x00000006u, 0x000002ccu, 0x000002cbu, 0x000001f7u, 0x0003003eu, - 0x000002aeu, 0x000002ccu, 0x0003003eu, 0x000002afu, 0x00000253u, 0x000200f9u, 0x000002c8u, 0x000200f8u, - 0x000002c8u, 0x000200f9u, 0x000002c1u, 0x000200f8u, 0x000002cdu, 0x0004003du, 0x00000006u, 0x000002ceu, - 0x000002abu, 0x000500b0u, 0x0000004cu, 0x000002cfu, 0x000002ceu, 0x000001e3u, 0x000300f7u, 0x000002d1u, - 0x00000000u, 0x000400fau, 0x000002cfu, 0x000002d0u, 0x000002ddu, 0x000200f8u, 0x000002d0u, 0x0003003eu, - 0x000002adu, 0x00000044u, 0x0004003du, 0x00000006u, 0x000002d3u, 0x000002abu, 0x00050082u, 0x00000006u, - 0x000002d4u, 0x000002d3u, 0x000002beu, 0x0003003eu, 0x000002d2u, 0x000002d4u, 0x0004003du, 0x00000006u, - 0x000002d5u, 0x000002d2u, 0x000500b0u, 0x0000004cu, 0x000002d6u, 0x000002d5u, 0x00000144u, 0x000300f7u, - 0x000002d8u, 0x00000000u, 0x000400fau, 0x000002d6u, 0x000002d7u, 0x000002dau, 0x000200f8u, 0x000002d7u, - 0x0004003du, 0x00000006u, 0x000002d9u, 0x000002d2u, 0x0003003eu, 0x000002aeu, 0x000002d9u, 0x0003003eu, - 0x000002afu, 0x00000246u, 0x000200f9u, 0x000002d8u, 0x000200f8u, 0x000002dau, 0x0004003du, 0x00000006u, - 0x000002dbu, 0x000002d2u, 0x00050082u, 0x00000006u, 0x000002dcu, 0x000002dbu, 0x00000144u, 0x0003003eu, - 0x000002aeu, 0x000002dcu, 0x0003003eu, 0x000002afu, 0x00000253u, 0x000200f9u, 0x000002d8u, 0x000200f8u, - 0x000002d8u, 0x000200f9u, 0x000002d1u, 0x000200f8u, 0x000002ddu, 0x0004003du, 0x00000006u, 0x000002deu, - 0x000002abu, 0x000500b0u, 0x0000004cu, 0x000002e0u, 0x000002deu, 0x000002dfu, 0x000300f7u, 0x000002e2u, - 0x00000000u, 0x000400fau, 0x000002e0u, 0x000002e1u, 0x000002eeu, 0x000200f8u, 0x000002e1u, 0x0003003eu, - 0x000002adu, 0x0000013eu, 0x0004003du, 0x00000006u, 0x000002e4u, 0x000002abu, 0x00050082u, 0x00000006u, - 0x000002e5u, 0x000002e4u, 0x000001e3u, 0x0003003eu, 0x000002e3u, 0x000002e5u, 0x0004003du, 0x00000006u, - 0x000002e6u, 0x000002e3u, 0x000500b0u, 0x0000004cu, 0x000002e7u, 0x000002e6u, 0x00000190u, 0x000300f7u, - 0x000002e9u, 0x00000000u, 0x000400fau, 0x000002e7u, 0x000002e8u, 0x000002ebu, 0x000200f8u, 0x000002e8u, - 0x0004003du, 0x00000006u, 0x000002eau, 0x000002e3u, 0x0003003eu, 0x000002aeu, 0x000002eau, 0x0003003eu, - 0x000002afu, 0x00000246u, 0x000200f9u, 0x000002e9u, 0x000200f8u, 0x000002ebu, 0x0004003du, 0x00000006u, - 0x000002ecu, 0x000002e3u, 0x00050082u, 0x00000006u, 0x000002edu, 0x000002ecu, 0x00000190u, 0x0003003eu, - 0x000002aeu, 0x000002edu, 0x0003003eu, 0x000002afu, 0x00000253u, 0x000200f9u, 0x000002e9u, 0x000200f8u, - 0x000002e9u, 0x000200f9u, 0x000002e2u, 0x000200f8u, 0x000002eeu, 0x0004003du, 0x00000006u, 0x000002efu, - 0x000002abu, 0x000500b0u, 0x0000004cu, 0x000002f1u, 0x000002efu, 0x000002f0u, 0x000300f7u, 0x000002f3u, - 0x00000000u, 0x000400fau, 0x000002f1u, 0x000002f2u, 0x000002ffu, 0x000200f8u, 0x000002f2u, 0x0003003eu, - 0x000002adu, 0x00000158u, 0x0004003du, 0x00000006u, 0x000002f5u, 0x000002abu, 0x00050082u, 0x00000006u, - 0x000002f6u, 0x000002f5u, 0x000002dfu, 0x0003003eu, 0x000002f4u, 0x000002f6u, 0x0004003du, 0x00000006u, - 0x000002f7u, 0x000002f4u, 0x000500b0u, 0x0000004cu, 0x000002f8u, 0x000002f7u, 0x00000158u, 0x000300f7u, - 0x000002fau, 0x00000000u, 0x000400fau, 0x000002f8u, 0x000002f9u, 0x000002fcu, 0x000200f8u, 0x000002f9u, - 0x0004003du, 0x00000006u, 0x000002fbu, 0x000002f4u, 0x0003003eu, 0x000002aeu, 0x000002fbu, 0x0003003eu, - 0x000002afu, 0x00000246u, 0x000200f9u, 0x000002fau, 0x000200f8u, 0x000002fcu, 0x0004003du, 0x00000006u, - 0x000002fdu, 0x000002f4u, 0x00050082u, 0x00000006u, 0x000002feu, 0x000002fdu, 0x00000158u, 0x0003003eu, - 0x000002aeu, 0x000002feu, 0x0003003eu, 0x000002afu, 0x00000253u, 0x000200f9u, 0x000002fau, 0x000200f8u, - 0x000002fau, 0x000200f9u, 0x000002f3u, 0x000200f8u, 0x000002ffu, 0x0004003du, 0x00000006u, 0x00000300u, - 0x000002abu, 0x000500b0u, 0x0000004cu, 0x00000302u, 0x00000300u, 0x00000301u, 0x000300f7u, 0x00000304u, - 0x00000000u, 0x000400fau, 0x00000302u, 0x00000303u, 0x00000310u, 0x000200f8u, 0x00000303u, 0x0003003eu, - 0x000002adu, 0x00000190u, 0x0004003du, 0x00000006u, 0x00000306u, 0x000002abu, 0x00050082u, 0x00000006u, - 0x00000307u, 0x00000306u, 0x000002f0u, 0x0003003eu, 0x00000305u, 0x00000307u, 0x0004003du, 0x00000006u, - 0x00000308u, 0x00000305u, 0x000500b0u, 0x0000004cu, 0x00000309u, 0x00000308u, 0x0000013eu, 0x000300f7u, - 0x0000030bu, 0x00000000u, 0x000400fau, 0x00000309u, 0x0000030au, 0x0000030du, 0x000200f8u, 0x0000030au, - 0x0004003du, 0x00000006u, 0x0000030cu, 0x00000305u, 0x0003003eu, 0x000002aeu, 0x0000030cu, 0x0003003eu, - 0x000002afu, 0x00000246u, 0x000200f9u, 0x0000030bu, 0x000200f8u, 0x0000030du, 0x0004003du, 0x00000006u, - 0x0000030eu, 0x00000305u, 0x00050082u, 0x00000006u, 0x0000030fu, 0x0000030eu, 0x0000013eu, 0x0003003eu, - 0x000002aeu, 0x0000030fu, 0x0003003eu, 0x000002afu, 0x00000253u, 0x000200f9u, 0x0000030bu, 0x000200f8u, - 0x0000030bu, 0x000200f9u, 0x00000304u, 0x000200f8u, 0x00000310u, 0x0004003du, 0x00000006u, 0x00000311u, - 0x000002abu, 0x000500b0u, 0x0000004cu, 0x00000313u, 0x00000311u, 0x00000312u, 0x000300f7u, 0x00000315u, - 0x00000000u, 0x000400fau, 0x00000313u, 0x00000314u, 0x00000321u, 0x000200f8u, 0x00000314u, 0x0003003eu, - 0x000002adu, 0x00000144u, 0x0004003du, 0x00000006u, 0x00000317u, 0x000002abu, 0x00050082u, 0x00000006u, - 0x00000318u, 0x00000317u, 0x00000301u, 0x0003003eu, 0x00000316u, 0x00000318u, 0x0004003du, 0x00000006u, - 0x00000319u, 0x00000316u, 0x000500b0u, 0x0000004cu, 0x0000031au, 0x00000319u, 0x00000044u, 0x000300f7u, - 0x0000031cu, 0x00000000u, 0x000400fau, 0x0000031au, 0x0000031bu, 0x0000031eu, 0x000200f8u, 0x0000031bu, - 0x0004003du, 0x00000006u, 0x0000031du, 0x00000316u, 0x0003003eu, 0x000002aeu, 0x0000031du, 0x0003003eu, - 0x000002afu, 0x00000246u, 0x000200f9u, 0x0000031cu, 0x000200f8u, 0x0000031eu, 0x0004003du, 0x00000006u, - 0x0000031fu, 0x00000316u, 0x00050082u, 0x00000006u, 0x00000320u, 0x0000031fu, 0x00000044u, 0x0003003eu, - 0x000002aeu, 0x00000320u, 0x0003003eu, 0x000002afu, 0x00000253u, 0x000200f9u, 0x0000031cu, 0x000200f8u, - 0x0000031cu, 0x000200f9u, 0x00000315u, 0x000200f8u, 0x00000321u, 0x0003003eu, 0x000002adu, 0x000001f7u, - 0x0003003eu, 0x000002aeu, 0x00000065u, 0x0003003eu, 0x000002afu, 0x00000246u, 0x000200f9u, 0x00000315u, - 0x000200f8u, 0x00000315u, 0x000200f9u, 0x00000304u, 0x000200f8u, 0x00000304u, 0x000200f9u, 0x000002f3u, - 0x000200f8u, 0x000002f3u, 0x000200f9u, 0x000002e2u, 0x000200f8u, 0x000002e2u, 0x000200f9u, 0x000002d1u, - 0x000200f8u, 0x000002d1u, 0x000200f9u, 0x000002c1u, 0x000200f8u, 0x000002c1u, 0x000200f9u, 0x000002b3u, - 0x000200f8u, 0x000002b3u, 0x0004003du, 0x0000004cu, 0x00000322u, 0x000002afu, 0x000400a8u, 0x0000004cu, - 0x00000323u, 0x00000322u, 0x000300f7u, 0x00000325u, 0x00000000u, 0x000400fau, 0x00000323u, 0x00000324u, - 0x0000033au, 0x000200f8u, 0x00000324u, 0x0004003du, 0x00000006u, 0x00000327u, 0x000002adu, 0x00050041u, - 0x00000018u, 0x00000328u, 0x000002a9u, 0x00000327u, 0x0004003du, 0x00000006u, 0x00000329u, 0x00000328u, - 0x0004003du, 0x00000006u, 0x0000032au, 0x000002aeu, 0x00050080u, 0x00000006u, 0x0000032bu, 0x00000329u, - 0x0000032au, 0x0003003eu, 0x00000326u, 0x0000032bu, 0x0004003du, 0x00000006u, 0x0000032du, 0x000002adu, - 0x00050041u, 0x00000018u, 0x0000032eu, 0x000002a9u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000032fu, - 0x0000032eu, 0x0004003du, 0x00000006u, 0x00000330u, 0x000002aeu, 0x00050080u, 0x00000006u, 0x00000331u, - 0x0000032fu, 0x00000330u, 0x00050080u, 0x00000006u, 0x00000332u, 0x00000331u, 0x00000008u, 0x0003003eu, - 0x0000032cu, 0x00000332u, 0x0004003du, 0x00000006u, 0x00000334u, 0x000002adu, 0x00050080u, 0x00000006u, - 0x00000335u, 0x00000334u, 0x00000008u, 0x00050041u, 0x00000018u, 0x00000336u, 0x000002a9u, 0x00000335u, - 0x0004003du, 0x00000006u, 0x00000337u, 0x00000336u, 0x0004003du, 0x00000006u, 0x00000338u, 0x000002aeu, - 0x00050080u, 0x00000006u, 0x00000339u, 0x00000337u, 0x00000338u, 0x0003003eu, 0x00000333u, 0x00000339u, - 0x000200f9u, 0x00000325u, 0x000200f8u, 0x0000033au, 0x0004003du, 0x00000006u, 0x0000033bu, 0x000002adu, - 0x00050041u, 0x00000018u, 0x0000033cu, 0x000002a9u, 0x0000033bu, 0x0004003du, 0x00000006u, 0x0000033du, - 0x0000033cu, 0x0004003du, 0x00000006u, 0x0000033eu, 0x000002aeu, 0x00050080u, 0x00000006u, 0x0000033fu, - 0x0000033du, 0x0000033eu, 0x00050080u, 0x00000006u, 0x00000340u, 0x0000033fu, 0x00000008u, 0x0003003eu, - 0x00000326u, 0x00000340u, 0x0004003du, 0x00000006u, 0x00000341u, 0x000002adu, 0x00050080u, 0x00000006u, - 0x00000342u, 0x00000341u, 0x00000008u, 0x00050041u, 0x00000018u, 0x00000343u, 0x000002a9u, 0x00000342u, - 0x0004003du, 0x00000006u, 0x00000344u, 0x00000343u, 0x0004003du, 0x00000006u, 0x00000345u, 0x000002aeu, - 0x00050080u, 0x00000006u, 0x00000346u, 0x00000344u, 0x00000345u, 0x00050080u, 0x00000006u, 0x00000347u, - 0x00000346u, 0x00000008u, 0x0003003eu, 0x0000032cu, 0x00000347u, 0x0004003du, 0x00000006u, 0x00000348u, - 0x000002adu, 0x00050080u, 0x00000006u, 0x00000349u, 0x00000348u, 0x00000008u, 0x00050041u, 0x00000018u, - 0x0000034au, 0x000002a9u, 0x00000349u, 0x0004003du, 0x00000006u, 0x0000034bu, 0x0000034au, 0x0004003du, - 0x00000006u, 0x0000034cu, 0x000002aeu, 0x00050080u, 0x00000006u, 0x0000034du, 0x0000034bu, 0x0000034cu, - 0x0003003eu, 0x00000333u, 0x0000034du, 0x000200f9u, 0x00000325u, 0x000200f8u, 0x00000325u, 0x0004003du, - 0x00000006u, 0x0000034eu, 0x00000326u, 0x0004003du, 0x00000006u, 0x0000034fu, 0x0000032cu, 0x0004003du, - 0x00000006u, 0x00000350u, 0x00000333u, 0x00060050u, 0x0000002eu, 0x00000351u, 0x0000034eu, 0x0000034fu, - 0x00000350u, 0x000200feu, 0x00000351u, 0x000200f8u, 0x0000023bu, 0x000100ffu, 0x000200f8u, 0x00000226u, - 0x000100ffu, 0x000200f8u, 0x0000021fu, 0x000100ffu, 0x00010038u, -}; - -static const uint32_t kSpv_ts_polygon_frag[] = { - 0x07230203u, 0x00010600u, 0x0008000bu, 0x0000003eu, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, - 0x000014a3u, 0x0006000au, 0x5f565053u, 0x5f545845u, 0x6873656du, 0x6168735fu, 0x00726564u, 0x0006000bu, - 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, - 0x0009000fu, 0x00000004u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x0000000cu, 0x00000016u, 0x0000002cu, - 0x00000038u, 0x00030010u, 0x00000004u, 0x00000007u, 0x00030003u, 0x00000002u, 0x000001ccu, 0x000a0004u, - 0x455f4c47u, 0x665f5458u, 0x6d676172u, 0x5f746e65u, 0x64616873u, 0x625f7265u, 0x63797261u, 0x72746e65u, - 0x00006369u, 0x00060004u, 0x455f4c47u, 0x6d5f5458u, 0x5f687365u, 0x64616873u, 0x00007265u, 0x00040005u, - 0x00000004u, 0x6e69616du, 0x00000000u, 0x00040005u, 0x00000009u, 0x6f6c6f63u, 0x00000072u, 0x00060005u, - 0x0000000au, 0x6d697250u, 0x6f6c6f43u, 0x6f6c4272u, 0x00006b63u, 0x00050006u, 0x0000000au, 0x00000000u, - 0x6f6c6f63u, 0x00000072u, 0x00050006u, 0x0000000au, 0x00000001u, 0x625f7369u, 0x00007665u, 0x00040005u, - 0x0000000cu, 0x6d697270u, 0x006e695fu, 0x00060005u, 0x00000014u, 0x68737550u, 0x736e6f43u, 0x746e6174u, - 0x00000073u, 0x000a0006u, 0x00000014u, 0x00000000u, 0x69775f75u, 0x5f687464u, 0x796c6f70u, 0x656e696cu, - 0x6765725fu, 0x72616c75u, 0x00000000u, 0x00090006u, 0x00000014u, 0x00000001u, 0x69775f75u, 0x5f687464u, - 0x796c6f70u, 0x656e696cu, 0x7665625fu, 0x00000000u, 0x000a0006u, 0x00000014u, 0x00000002u, 0x69775f75u, - 0x5f687464u, 0x5f6f6765u, 0x6a617274u, 0x6765725fu, 0x72616c75u, 0x00000000u, 0x00090006u, 0x00000014u, - 0x00000003u, 0x69775f75u, 0x5f687464u, 0x5f6f6765u, 0x6a617274u, 0x7665625fu, 0x00000000u, 0x00080006u, - 0x00000014u, 0x00000004u, 0x69775f75u, 0x5f687464u, 0x65726977u, 0x6d617266u, 0x00000065u, 0x00080006u, - 0x00000014u, 0x00000005u, 0x65725f75u, 0x756c6f73u, 0x6e6f6974u, 0x6163735fu, 0x0000656cu, 0x00070006u, - 0x00000014u, 0x00000006u, 0x65645f75u, 0x5f687470u, 0x6c616373u, 0x00676e69u, 0x00090006u, 0x00000014u, - 0x00000007u, 0x616d5f75u, 0x78655f78u, 0x70617274u, 0x74616c6fu, 0x5f6e6f69u, 0x00007375u, 0x00090006u, - 0x00000014u, 0x00000008u, 0x6f635f75u, 0x5f726f6cu, 0x656c6170u, 0x5f657474u, 0x657a6973u, 0x00000000u, - 0x00070006u, 0x00000014u, 0x00000009u, 0x756e5f75u, 0x75715f6du, 0x65697265u, 0x00000073u, 0x000a0006u, - 0x00000014u, 0x0000000au, 0x65745f75u, 0x6c657373u, 0x6974616cu, 0x745f6e6fu, 0x73657268u, 0x646c6f68u, - 0x00000000u, 0x000a0006u, 0x00000014u, 0x0000000bu, 0x616d5f75u, 0x65745f78u, 0x6c657373u, 0x6974616cu, - 0x705f6e6fu, 0x6c796c6fu, 0x00656e69u, 0x000a0006u, 0x00000014u, 0x0000000cu, 0x616d5f75u, 0x65745f78u, - 0x6c657373u, 0x6974616cu, 0x705f6e6fu, 0x67796c6fu, 0x00006e6fu, 0x00090006u, 0x00000014u, 0x0000000du, - 0x616d5f75u, 0x65745f78u, 0x6c657373u, 0x6974616cu, 0x635f6e6fu, 0x00656275u, 0x00080006u, 0x00000014u, - 0x0000000eu, 0x75635f75u, 0x725f6c6cu, 0x75696461u, 0x63735f73u, 0x00656c61u, 0x00070006u, 0x00000014u, - 0x0000000fu, 0x6f665f75u, 0x6e655f67u, 0x656c6261u, 0x00000064u, 0x00070006u, 0x00000014u, 0x00000010u, - 0x616d5f75u, 0x626f5f78u, 0x63617473u, 0x0073656cu, 0x00080006u, 0x00000014u, 0x00000011u, 0x75635f75u, - 0x705f6562u, 0x5f6c6f6fu, 0x65646e69u, 0x00000078u, 0x00080006u, 0x00000014u, 0x00000012u, 0x756e5f75u, - 0x6f705f6du, 0x6f67796cu, 0x6f705f6eu, 0x00736c6fu, 0x00090006u, 0x00000014u, 0x00000013u, 0x616d5f75u, - 0x61765f78u, 0x79617272u, 0x65705f73u, 0x6f705f72u, 0x00006c6fu, 0x00090006u, 0x00000014u, 0x00000014u, - 0x756e5f75u, 0x6f705f6du, 0x696c796cu, 0x705f656eu, 0x736c6f6fu, 0x00000000u, 0x00030005u, 0x00000016u, - 0x00006370u, 0x00050005u, 0x00000028u, 0x5f676f66u, 0x74636166u, 0x0000726fu, 0x00060005u, 0x0000002cu, - 0x465f6c67u, 0x43676172u, 0x64726f6fu, 0x00000000u, 0x00050005u, 0x00000038u, 0x5f74756fu, 0x6f6c6f63u, - 0x00000072u, 0x00030047u, 0x0000000au, 0x00000002u, 0x00040048u, 0x0000000au, 0x00000000u, 0x00001497u, - 0x00040048u, 0x0000000au, 0x00000001u, 0x00001497u, 0x00040047u, 0x0000000cu, 0x0000001eu, 0x00000000u, - 0x00030047u, 0x00000014u, 0x00000002u, 0x00050048u, 0x00000014u, 0x00000000u, 0x00000023u, 0x00000000u, - 0x00050048u, 0x00000014u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000014u, 0x00000002u, - 0x00000023u, 0x00000008u, 0x00050048u, 0x00000014u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, - 0x00000014u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000014u, 0x00000005u, 0x00000023u, - 0x00000014u, 0x00050048u, 0x00000014u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000014u, - 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000014u, 0x00000008u, 0x00000023u, 0x00000020u, - 0x00050048u, 0x00000014u, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x00000014u, 0x0000000au, - 0x00000023u, 0x00000028u, 0x00050048u, 0x00000014u, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, - 0x00000014u, 0x0000000cu, 0x00000023u, 0x00000030u, 0x00050048u, 0x00000014u, 0x0000000du, 0x00000023u, - 0x00000034u, 0x00050048u, 0x00000014u, 0x0000000eu, 0x00000023u, 0x00000038u, 0x00050048u, 0x00000014u, - 0x0000000fu, 0x00000023u, 0x0000003cu, 0x00050048u, 0x00000014u, 0x00000010u, 0x00000023u, 0x00000040u, - 0x00050048u, 0x00000014u, 0x00000011u, 0x00000023u, 0x00000044u, 0x00050048u, 0x00000014u, 0x00000012u, - 0x00000023u, 0x00000048u, 0x00050048u, 0x00000014u, 0x00000013u, 0x00000023u, 0x0000004cu, 0x00050048u, - 0x00000014u, 0x00000014u, 0x00000023u, 0x00000050u, 0x00040047u, 0x0000002cu, 0x0000000bu, 0x0000000fu, - 0x00040047u, 0x00000038u, 0x0000001eu, 0x00000000u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, - 0x00000002u, 0x00030016u, 0x00000006u, 0x00000020u, 0x00040017u, 0x00000007u, 0x00000006u, 0x00000003u, - 0x00040020u, 0x00000008u, 0x00000007u, 0x00000007u, 0x0004001eu, 0x0000000au, 0x00000007u, 0x00000006u, - 0x00040020u, 0x0000000bu, 0x00000001u, 0x0000000au, 0x0004003bu, 0x0000000bu, 0x0000000cu, 0x00000001u, - 0x00040015u, 0x0000000du, 0x00000020u, 0x00000001u, 0x0004002bu, 0x0000000du, 0x0000000eu, 0x00000000u, - 0x00040020u, 0x0000000fu, 0x00000001u, 0x00000007u, 0x00020014u, 0x00000012u, 0x00040015u, 0x00000013u, - 0x00000020u, 0x00000000u, 0x0017001eu, 0x00000014u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x0000000du, 0x0000000du, 0x00000013u, 0x00000006u, 0x00000013u, - 0x00000013u, 0x00000013u, 0x00000006u, 0x00000006u, 0x00000013u, 0x00000013u, 0x00000013u, 0x00000013u, - 0x00000013u, 0x00040020u, 0x00000015u, 0x00000009u, 0x00000014u, 0x0004003bu, 0x00000015u, 0x00000016u, - 0x00000009u, 0x0004002bu, 0x0000000du, 0x00000017u, 0x0000000fu, 0x00040020u, 0x00000018u, 0x00000009u, - 0x00000006u, 0x0004002bu, 0x00000006u, 0x0000001bu, 0x3f000000u, 0x0004002bu, 0x0000000du, 0x0000001fu, - 0x00000001u, 0x00040020u, 0x00000020u, 0x00000001u, 0x00000006u, 0x00040020u, 0x00000027u, 0x00000007u, - 0x00000006u, 0x0004002bu, 0x00000006u, 0x00000029u, 0x3f800000u, 0x00040017u, 0x0000002au, 0x00000006u, - 0x00000004u, 0x00040020u, 0x0000002bu, 0x00000001u, 0x0000002au, 0x0004003bu, 0x0000002bu, 0x0000002cu, - 0x00000001u, 0x0004002bu, 0x00000013u, 0x0000002du, 0x00000002u, 0x0004002bu, 0x00000006u, 0x00000032u, - 0x00000000u, 0x00040020u, 0x00000037u, 0x00000003u, 0x0000002au, 0x0004003bu, 0x00000037u, 0x00000038u, - 0x00000003u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, - 0x0004003bu, 0x00000008u, 0x00000009u, 0x00000007u, 0x0004003bu, 0x00000027u, 0x00000028u, 0x00000007u, - 0x00050041u, 0x0000000fu, 0x00000010u, 0x0000000cu, 0x0000000eu, 0x0004003du, 0x00000007u, 0x00000011u, - 0x00000010u, 0x0003003eu, 0x00000009u, 0x00000011u, 0x00050041u, 0x00000018u, 0x00000019u, 0x00000016u, - 0x00000017u, 0x0004003du, 0x00000006u, 0x0000001au, 0x00000019u, 0x000500bau, 0x00000012u, 0x0000001cu, - 0x0000001au, 0x0000001bu, 0x000300f7u, 0x0000001eu, 0x00000000u, 0x000400fau, 0x0000001cu, 0x0000001du, - 0x0000001eu, 0x000200f8u, 0x0000001du, 0x00050041u, 0x00000020u, 0x00000021u, 0x0000000cu, 0x0000001fu, - 0x0004003du, 0x00000006u, 0x00000022u, 0x00000021u, 0x000500b8u, 0x00000012u, 0x00000023u, 0x00000022u, - 0x0000001bu, 0x000200f9u, 0x0000001eu, 0x000200f8u, 0x0000001eu, 0x000700f5u, 0x00000012u, 0x00000024u, - 0x0000001cu, 0x00000005u, 0x00000023u, 0x0000001du, 0x000300f7u, 0x00000026u, 0x00000000u, 0x000400fau, - 0x00000024u, 0x00000025u, 0x00000026u, 0x000200f8u, 0x00000025u, 0x00050041u, 0x00000020u, 0x0000002eu, - 0x0000002cu, 0x0000002du, 0x0004003du, 0x00000006u, 0x0000002fu, 0x0000002eu, 0x00050083u, 0x00000006u, - 0x00000030u, 0x00000029u, 0x0000002fu, 0x0003003eu, 0x00000028u, 0x00000030u, 0x0004003du, 0x00000006u, - 0x00000031u, 0x00000028u, 0x0008000cu, 0x00000006u, 0x00000033u, 0x00000001u, 0x0000002bu, 0x00000031u, - 0x00000032u, 0x00000029u, 0x0003003eu, 0x00000028u, 0x00000033u, 0x0004003du, 0x00000006u, 0x00000034u, - 0x00000028u, 0x0004003du, 0x00000007u, 0x00000035u, 0x00000009u, 0x0005008eu, 0x00000007u, 0x00000036u, - 0x00000035u, 0x00000034u, 0x0003003eu, 0x00000009u, 0x00000036u, 0x000200f9u, 0x00000026u, 0x000200f8u, - 0x00000026u, 0x0004003du, 0x00000007u, 0x00000039u, 0x00000009u, 0x00050051u, 0x00000006u, 0x0000003au, - 0x00000039u, 0x00000000u, 0x00050051u, 0x00000006u, 0x0000003bu, 0x00000039u, 0x00000001u, 0x00050051u, - 0x00000006u, 0x0000003cu, 0x00000039u, 0x00000002u, 0x00070050u, 0x0000002au, 0x0000003du, 0x0000003au, - 0x0000003bu, 0x0000003cu, 0x00000029u, 0x0003003eu, 0x00000038u, 0x0000003du, 0x000100fdu, 0x00010038u, -}; - -static const uint32_t kSpv_ts_obstacle_task[] = { - 0x07230203u, 0x00010600u, 0x0008000bu, 0x0000076au, 0x00000000u, 0x00020011u, 0x0000000bu, 0x00020011u, - 0x000014a3u, 0x0006000au, 0x5f565053u, 0x5f545845u, 0x6873656du, 0x6168735fu, 0x00726564u, 0x0006000bu, - 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, - 0x0016000fu, 0x000014f4u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000375u, 0x0000037du, 0x00000398u, - 0x000003a8u, 0x000003c7u, 0x000003efu, 0x0000041fu, 0x00000516u, 0x000005bdu, 0x000005cbu, 0x000006fdu, - 0x00000751u, 0x00000756u, 0x0000075au, 0x0000075eu, 0x00000763u, 0x00000768u, 0x0006014bu, 0x00000004u, - 0x00000026u, 0x00000007u, 0x00000007u, 0x00000007u, 0x00030003u, 0x00000002u, 0x000001ccu, 0x00060004u, - 0x455f4c47u, 0x6d5f5458u, 0x5f687365u, 0x64616873u, 0x00007265u, 0x000d0004u, 0x455f4c47u, 0x735f5458u, - 0x65646168u, 0x78655f72u, 0x63696c70u, 0x615f7469u, 0x68746972u, 0x6974656du, 0x79745f63u, 0x5f736570u, - 0x36746e69u, 0x00000034u, 0x00040005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00070005u, 0x0000000eu, - 0x74617571u, 0x746f645fu, 0x34667628u, 0x3466763bu, 0x0000003bu, 0x00030005u, 0x0000000cu, 0x00000061u, - 0x00030005u, 0x0000000du, 0x00000062u, 0x00070005u, 0x00000012u, 0x74617571u, 0x726f6e5fu, 0x696c616du, - 0x7628657au, 0x003b3466u, 0x00030005u, 0x00000011u, 0x00000071u, 0x00080005u, 0x00000019u, 0x74617571u, - 0x656c735fu, 0x76287072u, 0x763b3466u, 0x663b3466u, 0x00003b31u, 0x00030005u, 0x00000016u, 0x00003071u, - 0x00030005u, 0x00000017u, 0x00003171u, 0x00030005u, 0x00000018u, 0x00000074u, 0x00070005u, 0x0000001fu, - 0x74617571u, 0x5f6f745fu, 0x7274616du, 0x76287869u, 0x003b3466u, 0x00030005u, 0x0000001eu, 0x00000071u, - 0x000a0005u, 0x00000027u, 0x6c697562u, 0x72745f64u, 0x66736e61u, 0x286d726fu, 0x3b336676u, 0x3b346676u, - 0x3b336676u, 0x00000000u, 0x00050005u, 0x00000024u, 0x6e617274u, 0x74616c73u, 0x006e6f69u, 0x00050005u, - 0x00000025u, 0x74617571u, 0x696e7265u, 0x00006e6fu, 0x00040005u, 0x00000026u, 0x6c616373u, 0x00000065u, - 0x000d0005u, 0x0000002fu, 0x6c6c7563u, 0x6870735fu, 0x5f657265u, 0x62626161u, 0x65766f5fu, 0x70616c72u, - 0x33667628u, 0x3b31663bu, 0x3b336676u, 0x3b336676u, 0x00000000u, 0x00040005u, 0x0000002bu, 0x746e6563u, - 0x00007265u, 0x00040005u, 0x0000002cu, 0x69646172u, 0x00007375u, 0x00040005u, 0x0000002du, 0x696d5f62u, - 0x0000006eu, 0x00040005u, 0x0000002eu, 0x616d5f62u, 0x00000078u, 0x00050005u, 0x00000031u, 0x656d6143u, - 0x6f506172u, 0x00006573u, 0x00070006u, 0x00000031u, 0x00000000u, 0x6c726f77u, 0x6f745f64u, 0x6d61635fu, - 0x00617265u, 0x000e0005u, 0x00000035u, 0x5f746567u, 0x656d6163u, 0x775f6172u, 0x646c726fu, 0x736f705fu, - 0x72747328u, 0x2d746375u, 0x656d6143u, 0x6f506172u, 0x6d2d6573u, 0x31343466u, 0x0000003bu, 0x00040005u, - 0x00000034u, 0x65736f70u, 0x00000000u, 0x00060005u, 0x00000038u, 0x65685446u, 0x61436174u, 0x6172656du, - 0x00000000u, 0x00040006u, 0x00000038u, 0x00000000u, 0x00007863u, 0x00040006u, 0x00000038u, 0x00000001u, - 0x00007963u, 0x00050006u, 0x00000038u, 0x00000002u, 0x5f676d69u, 0x00000077u, 0x00050006u, 0x00000038u, - 0x00000003u, 0x5f676d69u, 0x00000068u, 0x00050006u, 0x00000038u, 0x00000004u, 0x796c6f70u, 0x00000030u, - 0x00050006u, 0x00000038u, 0x00000005u, 0x796c6f70u, 0x00000031u, 0x00050006u, 0x00000038u, 0x00000006u, - 0x796c6f70u, 0x00000032u, 0x00050006u, 0x00000038u, 0x00000007u, 0x796c6f70u, 0x00000033u, 0x00050006u, - 0x00000038u, 0x00000008u, 0x796c6f70u, 0x00000034u, 0x00050006u, 0x00000038u, 0x00000009u, 0x796c6f70u, - 0x00000035u, 0x00070006u, 0x00000038u, 0x0000000au, 0x5f78616du, 0x5f796172u, 0x6c676e61u, 0x00000065u, - 0x00080006u, 0x00000038u, 0x0000000bu, 0x5f78616du, 0x74736964u, 0x6974726fu, 0x765f6e6fu, 0x00006c61u, - 0x00080006u, 0x00000038u, 0x0000000cu, 0x5f78616du, 0x74736964u, 0x6974726fu, 0x645f6e6fu, 0x006c6176u, - 0x00060006u, 0x00000038u, 0x0000000du, 0x74706564u, 0x616d5f68u, 0x00000078u, 0x00050006u, 0x00000038u, - 0x0000000eu, 0x635f646cu, 0x00000000u, 0x00050006u, 0x00000038u, 0x0000000fu, 0x645f646cu, 0x00000000u, - 0x00050006u, 0x00000038u, 0x00000010u, 0x655f646cu, 0x00000000u, 0x00050006u, 0x00000038u, 0x00000011u, - 0x665f646cu, 0x00000000u, 0x00220005u, 0x0000003fu, 0x69747365u, 0x6574616du, 0x6764655fu, 0x69645f65u, - 0x726f7473u, 0x6e6f6974u, 0x7869705fu, 0x5f736c65u, 0x3474616du, 0x33667628u, 0x3366763bu, 0x34666d3bu, - 0x74733b34u, 0x74637572u, 0x6854462du, 0x43617465u, 0x72656d61u, 0x31662d61u, 0x2d31662du, 0x662d3166u, - 0x31662d31u, 0x2d31662du, 0x662d3166u, 0x31662d31u, 0x2d31662du, 0x662d3166u, 0x31662d31u, 0x2d31662du, - 0x662d3166u, 0x31662d31u, 0x3131662du, 0x0000003bu, 0x00030005u, 0x0000003bu, 0x00003076u, 0x00030005u, - 0x0000003cu, 0x00003176u, 0x00060005u, 0x0000003du, 0x6c726f77u, 0x6f745f64u, 0x6d61635fu, 0x00000000u, - 0x00030005u, 0x0000003eu, 0x006d6163u, 0x00250005u, 0x00000047u, 0x706d6f63u, 0x5f657475u, 0x64627573u, - 0x73697669u, 0x5f6e6f69u, 0x6576656cu, 0x6676286cu, 0x66763b33u, 0x74733b33u, 0x74637572u, 0x6d61432du, - 0x50617265u, 0x2d65736fu, 0x3434666du, 0x74733b31u, 0x74637572u, 0x6854462du, 0x43617465u, 0x72656d61u, - 0x31662d61u, 0x2d31662du, 0x662d3166u, 0x31662d31u, 0x2d31662du, 0x662d3166u, 0x31662d31u, 0x2d31662du, - 0x662d3166u, 0x31662d31u, 0x2d31662du, 0x662d3166u, 0x31662d31u, 0x3131662du, 0x3b31663bu, 0x00000000u, - 0x00030005u, 0x00000042u, 0x00003076u, 0x00030005u, 0x00000043u, 0x00003176u, 0x00040005u, 0x00000044u, - 0x65736f70u, 0x00000000u, 0x00030005u, 0x00000045u, 0x006d6163u, 0x00070005u, 0x00000046u, 0x65726874u, - 0x6c6f6873u, 0x69705f64u, 0x736c6578u, 0x00000000u, 0x00030005u, 0x00000065u, 0x006e656cu, 0x00030005u, - 0x00000079u, 0x00000064u, 0x00040005u, 0x0000007au, 0x61726170u, 0x0000006du, 0x00040005u, 0x0000007cu, - 0x61726170u, 0x0000006du, 0x00040005u, 0x00000091u, 0x61726170u, 0x0000006du, 0x00040005u, 0x00000094u, - 0x74656874u, 0x00305f61u, 0x00040005u, 0x00000099u, 0x74656874u, 0x00000061u, 0x00050005u, 0x0000009du, - 0x5f6e6973u, 0x74656874u, 0x00000061u, 0x00050005u, 0x000000a0u, 0x5f6e6973u, 0x74656874u, 0x00305f61u, - 0x00030005u, 0x000000a3u, 0x00003073u, 0x00030005u, 0x000000acu, 0x00003173u, 0x00040005u, 0x000000b7u, - 0x61726170u, 0x0000006du, 0x00030005u, 0x000000bbu, 0x00000078u, 0x00030005u, 0x000000beu, 0x00000079u, - 0x00030005u, 0x000000c1u, 0x0000007au, 0x00030005u, 0x000000c4u, 0x00000077u, 0x00030005u, 0x000000c7u, - 0x00003278u, 0x00030005u, 0x000000cbu, 0x00003279u, 0x00030005u, 0x000000cfu, 0x0000327au, 0x00030005u, - 0x000000d3u, 0x00007878u, 0x00030005u, 0x000000d7u, 0x00007978u, 0x00030005u, 0x000000dbu, 0x00007a78u, - 0x00030005u, 0x000000dfu, 0x00007979u, 0x00030005u, 0x000000e3u, 0x00007a79u, 0x00030005u, 0x000000e7u, - 0x00007a7au, 0x00030005u, 0x000000ebu, 0x00007877u, 0x00030005u, 0x000000efu, 0x00007977u, 0x00030005u, - 0x000000f3u, 0x00007a77u, 0x00030005u, 0x0000011cu, 0x00746f72u, 0x00040005u, 0x0000011du, 0x61726170u, - 0x0000006du, 0x00040005u, 0x00000120u, 0x75736572u, 0x0000746cu, 0x00040005u, 0x0000015du, 0x7261656eu, - 0x00747365u, 0x00030005u, 0x00000162u, 0x00000064u, 0x00030005u, 0x0000016fu, 0x00000052u, 0x00040005u, - 0x00000189u, 0x5f6d6163u, 0x00307470u, 0x00040005u, 0x00000192u, 0x5f6d6163u, 0x00317470u, 0x00050005u, - 0x0000019bu, 0x5f64696du, 0x6c726f77u, 0x00000064u, 0x00050005u, 0x000001a1u, 0x5f6d6163u, 0x6d5f7470u, - 0x00006469u, 0x00040005u, 0x000001aau, 0x74706564u, 0x00003068u, 0x00040005u, 0x000001afu, 0x74706564u, - 0x00003168u, 0x00050005u, 0x000001b3u, 0x74706564u, 0x696d5f68u, 0x00000064u, 0x00040005u, 0x000001b7u, - 0x6e5f7978u, 0x006d726fu, 0x00050005u, 0x000001bcu, 0x5f796172u, 0x6d726f6eu, 0x00000000u, 0x00050005u, - 0x000001c5u, 0x5f736f63u, 0x68706c61u, 0x00000061u, 0x00040005u, 0x000001cau, 0x68706c61u, 0x00000061u, - 0x00030005u, 0x000001cdu, 0x00003261u, 0x00040005u, 0x000001d1u, 0x746c6564u, 0x00000061u, 0x00040005u, - 0x0000020eu, 0x6c616373u, 0x00000065u, 0x00050005u, 0x0000021bu, 0x65786970u, 0x65725f6cu, 0x0000006cu, - 0x00050005u, 0x00000220u, 0x65786970u, 0x69645f6cu, 0x00007473u, 0x00040005u, 0x0000023cu, 0x65786970u, - 0x0000306cu, 0x00040005u, 0x00000244u, 0x6e5f7978u, 0x006d726fu, 0x00050005u, 0x00000248u, 0x5f796172u, - 0x6d726f6eu, 0x00000000u, 0x00050005u, 0x00000251u, 0x5f736f63u, 0x68706c61u, 0x00000061u, 0x00040005u, - 0x00000256u, 0x68706c61u, 0x00000061u, 0x00030005u, 0x00000259u, 0x00003261u, 0x00040005u, 0x0000025du, - 0x746c6564u, 0x00000061u, 0x00040005u, 0x00000291u, 0x6c616373u, 0x00000065u, 0x00050005u, 0x0000029cu, - 0x65786970u, 0x65725f6cu, 0x0000006cu, 0x00050005u, 0x000002a1u, 0x65786970u, 0x69645f6cu, 0x00007473u, - 0x00040005u, 0x000002b9u, 0x65786970u, 0x0000316cu, 0x00040005u, 0x000002c1u, 0x6e5f7978u, 0x006d726fu, - 0x00050005u, 0x000002c5u, 0x5f796172u, 0x6d726f6eu, 0x00000000u, 0x00050005u, 0x000002ceu, 0x5f736f63u, - 0x68706c61u, 0x00000061u, 0x00040005u, 0x000002d3u, 0x68706c61u, 0x00000061u, 0x00030005u, 0x000002d6u, - 0x00003261u, 0x00040005u, 0x000002dau, 0x746c6564u, 0x00000061u, 0x00040005u, 0x0000030eu, 0x6c616373u, - 0x00000065u, 0x00050005u, 0x00000319u, 0x65786970u, 0x65725f6cu, 0x0000006cu, 0x00050005u, 0x0000031eu, - 0x65786970u, 0x69645f6cu, 0x00007473u, 0x00050005u, 0x00000336u, 0x65786970u, 0x696d5f6cu, 0x00000064u, - 0x00070005u, 0x0000033eu, 0x656e696cu, 0x705f7261u, 0x6c657869u, 0x64696d5fu, 0x00000000u, 0x00060005u, - 0x00000343u, 0x6f727265u, 0x69705f72u, 0x736c6578u, 0x00000000u, 0x00040005u, 0x0000034du, 0x6f727265u, - 0x00000072u, 0x00040005u, 0x0000034eu, 0x61726170u, 0x0000006du, 0x00040005u, 0x00000350u, 0x61726170u, - 0x0000006du, 0x00040005u, 0x00000352u, 0x61726170u, 0x0000006du, 0x00040005u, 0x00000355u, 0x61726170u, - 0x0000006du, 0x00050005u, 0x00000371u, 0x7361745fu, 0x6f635f6bu, 0x00746e75u, 0x00040005u, 0x00000372u, - 0x6b726f77u, 0x0064695fu, 0x00060005u, 0x00000375u, 0x575f6c67u, 0x476b726fu, 0x70756f72u, 0x00004449u, - 0x00060005u, 0x00000379u, 0x72657571u, 0x64695f79u, 0x636f6c5fu, 0x00006c61u, 0x00060005u, 0x0000037bu, - 0x68737550u, 0x736e6f43u, 0x746e6174u, 0x00000073u, 0x000a0006u, 0x0000037bu, 0x00000000u, 0x69775f75u, - 0x5f687464u, 0x796c6f70u, 0x656e696cu, 0x6765725fu, 0x72616c75u, 0x00000000u, 0x00090006u, 0x0000037bu, - 0x00000001u, 0x69775f75u, 0x5f687464u, 0x796c6f70u, 0x656e696cu, 0x7665625fu, 0x00000000u, 0x000a0006u, - 0x0000037bu, 0x00000002u, 0x69775f75u, 0x5f687464u, 0x5f6f6765u, 0x6a617274u, 0x6765725fu, 0x72616c75u, - 0x00000000u, 0x00090006u, 0x0000037bu, 0x00000003u, 0x69775f75u, 0x5f687464u, 0x5f6f6765u, 0x6a617274u, - 0x7665625fu, 0x00000000u, 0x00080006u, 0x0000037bu, 0x00000004u, 0x69775f75u, 0x5f687464u, 0x65726977u, - 0x6d617266u, 0x00000065u, 0x00080006u, 0x0000037bu, 0x00000005u, 0x65725f75u, 0x756c6f73u, 0x6e6f6974u, - 0x6163735fu, 0x0000656cu, 0x00070006u, 0x0000037bu, 0x00000006u, 0x65645f75u, 0x5f687470u, 0x6c616373u, - 0x00676e69u, 0x00090006u, 0x0000037bu, 0x00000007u, 0x616d5f75u, 0x78655f78u, 0x70617274u, 0x74616c6fu, - 0x5f6e6f69u, 0x00007375u, 0x00090006u, 0x0000037bu, 0x00000008u, 0x6f635f75u, 0x5f726f6cu, 0x656c6170u, - 0x5f657474u, 0x657a6973u, 0x00000000u, 0x00070006u, 0x0000037bu, 0x00000009u, 0x756e5f75u, 0x75715f6du, - 0x65697265u, 0x00000073u, 0x000a0006u, 0x0000037bu, 0x0000000au, 0x65745f75u, 0x6c657373u, 0x6974616cu, - 0x745f6e6fu, 0x73657268u, 0x646c6f68u, 0x00000000u, 0x000a0006u, 0x0000037bu, 0x0000000bu, 0x616d5f75u, - 0x65745f78u, 0x6c657373u, 0x6974616cu, 0x705f6e6fu, 0x6c796c6fu, 0x00656e69u, 0x000a0006u, 0x0000037bu, - 0x0000000cu, 0x616d5f75u, 0x65745f78u, 0x6c657373u, 0x6974616cu, 0x705f6e6fu, 0x67796c6fu, 0x00006e6fu, - 0x00090006u, 0x0000037bu, 0x0000000du, 0x616d5f75u, 0x65745f78u, 0x6c657373u, 0x6974616cu, 0x635f6e6fu, - 0x00656275u, 0x00080006u, 0x0000037bu, 0x0000000eu, 0x75635f75u, 0x725f6c6cu, 0x75696461u, 0x63735f73u, - 0x00656c61u, 0x00070006u, 0x0000037bu, 0x0000000fu, 0x6f665f75u, 0x6e655f67u, 0x656c6261u, 0x00000064u, - 0x00070006u, 0x0000037bu, 0x00000010u, 0x616d5f75u, 0x626f5f78u, 0x63617473u, 0x0073656cu, 0x00080006u, - 0x0000037bu, 0x00000011u, 0x75635f75u, 0x705f6562u, 0x5f6c6f6fu, 0x65646e69u, 0x00000078u, 0x00080006u, - 0x0000037bu, 0x00000012u, 0x756e5f75u, 0x6f705f6du, 0x6f67796cu, 0x6f705f6eu, 0x00736c6fu, 0x00090006u, - 0x0000037bu, 0x00000013u, 0x616d5f75u, 0x61765f78u, 0x79617272u, 0x65705f73u, 0x6f705f72u, 0x00006c6fu, - 0x00090006u, 0x0000037bu, 0x00000014u, 0x756e5f75u, 0x6f705f6du, 0x696c796cu, 0x705f656eu, 0x736c6f6fu, - 0x00000000u, 0x00030005u, 0x0000037du, 0x00006370u, 0x00070005u, 0x00000382u, 0x7473626fu, 0x656c6361u, - 0x5f64695fu, 0x61636f6cu, 0x0000006cu, 0x00050005u, 0x00000391u, 0x646e6552u, 0x75517265u, 0x00797265u, - 0x00060006u, 0x00000391u, 0x00000000u, 0x6e656373u, 0x64695f65u, 0x00000000u, 0x00060006u, 0x00000391u, - 0x00000001u, 0x656d6163u, 0x695f6172u, 0x00000064u, 0x00070006u, 0x00000391u, 0x00000002u, 0x656d6974u, - 0x6d617473u, 0x73755f70u, 0x00000000u, 0x00070006u, 0x00000391u, 0x00000003u, 0x656d6163u, 0x745f6172u, - 0x5f657079u, 0x00006469u, 0x00050006u, 0x00000391u, 0x00000004u, 0x6461705fu, 0x00000031u, 0x00050006u, - 0x00000391u, 0x00000005u, 0x6461705fu, 0x00000032u, 0x00050006u, 0x00000391u, 0x00000006u, 0x6461705fu, - 0x00000033u, 0x00040005u, 0x00000393u, 0x72657571u, 0x00000079u, 0x00050005u, 0x00000394u, 0x646e6552u, - 0x75517265u, 0x00797265u, 0x00060006u, 0x00000394u, 0x00000000u, 0x6e656373u, 0x64695f65u, 0x00000000u, - 0x00060006u, 0x00000394u, 0x00000001u, 0x656d6163u, 0x695f6172u, 0x00000064u, 0x00070006u, 0x00000394u, - 0x00000002u, 0x656d6974u, 0x6d617473u, 0x73755f70u, 0x00000000u, 0x00070006u, 0x00000394u, 0x00000003u, - 0x656d6163u, 0x745f6172u, 0x5f657079u, 0x00006469u, 0x00050006u, 0x00000394u, 0x00000004u, 0x6461705fu, - 0x00000031u, 0x00050006u, 0x00000394u, 0x00000005u, 0x6461705fu, 0x00000032u, 0x00050006u, 0x00000394u, - 0x00000006u, 0x6461705fu, 0x00000033u, 0x00050005u, 0x00000396u, 0x72657551u, 0x66754279u, 0x00726566u, - 0x00060006u, 0x00000396u, 0x00000000u, 0x75715f67u, 0x65697265u, 0x00000073u, 0x00030005u, 0x00000398u, - 0x00000000u, 0x00070005u, 0x000003a0u, 0x656d6954u, 0x6d617473u, 0x53646570u, 0x656e6563u, 0x00000000u, - 0x00080006u, 0x000003a0u, 0x00000000u, 0x5f6d756eu, 0x796c6f70u, 0x656e696cu, 0x6f6f705fu, 0x0000736cu, - 0x00090006u, 0x000003a0u, 0x00000001u, 0x796c6f70u, 0x656e696cu, 0x6f6f705fu, 0x6f5f736cu, 0x65736666u, - 0x00000074u, 0x00080006u, 0x000003a0u, 0x00000002u, 0x5f6d756eu, 0x796c6f70u, 0x5f6e6f67u, 0x6c6f6f70u, - 0x00000073u, 0x00090006u, 0x000003a0u, 0x00000003u, 0x796c6f70u, 0x5f6e6f67u, 0x6c6f6f70u, 0x666f5f73u, - 0x74657366u, 0x00000000u, 0x00070006u, 0x000003a0u, 0x00000004u, 0x5f6d756eu, 0x65627563u, 0x6f6f705fu, - 0x0000736cu, 0x00080006u, 0x000003a0u, 0x00000005u, 0x65627563u, 0x6f6f705fu, 0x6f5f736cu, 0x65736666u, - 0x00000074u, 0x000a0006u, 0x000003a0u, 0x00000006u, 0x656d6974u, 0x6d617473u, 0x625f7370u, 0x65666675u, - 0x666f5f72u, 0x74657366u, 0x00000000u, 0x00080006u, 0x000003a0u, 0x00000007u, 0x33746e69u, 0x75625f32u, - 0x72656666u, 0x66666f5fu, 0x00746573u, 0x00090006u, 0x000003a0u, 0x00000008u, 0x74726576u, 0x625f7865u, - 0x65666675u, 0x666f5f72u, 0x74657366u, 0x00000000u, 0x00090006u, 0x000003a0u, 0x00000009u, 0x61697274u, - 0x656c676eu, 0x6675625fu, 0x5f726566u, 0x7366666fu, 0x00007465u, 0x00080006u, 0x000003a0u, 0x0000000au, - 0x65736f70u, 0x6675625fu, 0x5f726566u, 0x7366666fu, 0x00007465u, 0x00080006u, 0x000003a0u, 0x0000000bu, - 0x616f6c66u, 0x75625f74u, 0x72656666u, 0x66666f5fu, 0x00746573u, 0x00050006u, 0x000003a0u, 0x0000000cu, - 0x6461705fu, 0x00000000u, 0x00040005u, 0x000003a2u, 0x6e656373u, 0x00000065u, 0x00070005u, 0x000003a4u, - 0x656d6954u, 0x6d617473u, 0x53646570u, 0x656e6563u, 0x00000000u, 0x00080006u, 0x000003a4u, 0x00000000u, - 0x5f6d756eu, 0x796c6f70u, 0x656e696cu, 0x6f6f705fu, 0x0000736cu, 0x00090006u, 0x000003a4u, 0x00000001u, - 0x796c6f70u, 0x656e696cu, 0x6f6f705fu, 0x6f5f736cu, 0x65736666u, 0x00000074u, 0x00080006u, 0x000003a4u, - 0x00000002u, 0x5f6d756eu, 0x796c6f70u, 0x5f6e6f67u, 0x6c6f6f70u, 0x00000073u, 0x00090006u, 0x000003a4u, - 0x00000003u, 0x796c6f70u, 0x5f6e6f67u, 0x6c6f6f70u, 0x666f5f73u, 0x74657366u, 0x00000000u, 0x00070006u, - 0x000003a4u, 0x00000004u, 0x5f6d756eu, 0x65627563u, 0x6f6f705fu, 0x0000736cu, 0x00080006u, 0x000003a4u, - 0x00000005u, 0x65627563u, 0x6f6f705fu, 0x6f5f736cu, 0x65736666u, 0x00000074u, 0x000a0006u, 0x000003a4u, - 0x00000006u, 0x656d6974u, 0x6d617473u, 0x625f7370u, 0x65666675u, 0x666f5f72u, 0x74657366u, 0x00000000u, - 0x00080006u, 0x000003a4u, 0x00000007u, 0x33746e69u, 0x75625f32u, 0x72656666u, 0x66666f5fu, 0x00746573u, - 0x00090006u, 0x000003a4u, 0x00000008u, 0x74726576u, 0x625f7865u, 0x65666675u, 0x666f5f72u, 0x74657366u, - 0x00000000u, 0x00090006u, 0x000003a4u, 0x00000009u, 0x61697274u, 0x656c676eu, 0x6675625fu, 0x5f726566u, - 0x7366666fu, 0x00007465u, 0x00080006u, 0x000003a4u, 0x0000000au, 0x65736f70u, 0x6675625fu, 0x5f726566u, - 0x7366666fu, 0x00007465u, 0x00080006u, 0x000003a4u, 0x0000000bu, 0x616f6c66u, 0x75625f74u, 0x72656666u, - 0x66666f5fu, 0x00746573u, 0x00050006u, 0x000003a4u, 0x0000000cu, 0x6461705fu, 0x00000000u, 0x00050005u, - 0x000003a6u, 0x6e656353u, 0x66754265u, 0x00726566u, 0x00060006u, 0x000003a6u, 0x00000000u, 0x63735f67u, - 0x73656e65u, 0x00000000u, 0x00030005u, 0x000003a8u, 0x00000000u, 0x00060005u, 0x000003c0u, 0x7473624fu, - 0x656c6361u, 0x6c6f6f50u, 0x00000000u, 0x00060006u, 0x000003c0u, 0x00000000u, 0x5f6d756eu, 0x65627563u, - 0x00000073u, 0x00070006u, 0x000003c0u, 0x00000001u, 0x5f6d756eu, 0x656d6974u, 0x6d617473u, 0x00007370u, - 0x00070006u, 0x000003c0u, 0x00000002u, 0x5f6d756eu, 0x63617274u, 0x6f705f6bu, 0x00736573u, 0x00070006u, - 0x000003c0u, 0x00000003u, 0x6d697270u, 0x7079745fu, 0x64695f65u, 0x00000000u, 0x00080006u, 0x000003c0u, - 0x00000004u, 0x656d6974u, 0x6d617473u, 0x6f5f7370u, 0x65736666u, 0x00000074u, 0x00080006u, 0x000003c0u, - 0x00000005u, 0x65627563u, 0x5f73745fu, 0x6f5f7370u, 0x65736666u, 0x00000074u, 0x00090006u, 0x000003c0u, - 0x00000006u, 0x63617274u, 0x69745f6bu, 0x7473656du, 0x73706d61u, 0x66666f5fu, 0x00746573u, 0x00080006u, - 0x000003c0u, 0x00000007u, 0x6e617274u, 0x74616c73u, 0x736e6f69u, 0x66666f5fu, 0x00746573u, 0x00080006u, - 0x000003c0u, 0x00000008u, 0x74617571u, 0x696e7265u, 0x5f736e6fu, 0x7366666fu, 0x00007465u, 0x00070006u, - 0x000003c0u, 0x00000009u, 0x6c616373u, 0x6f5f7365u, 0x65736666u, 0x00000074u, 0x00070006u, 0x000003c0u, - 0x0000000au, 0x6f6c6f63u, 0x6f5f7372u, 0x65736666u, 0x00000074u, 0x00070006u, 0x000003c0u, 0x0000000bu, - 0x646e6572u, 0x665f7265u, 0x7367616cu, 0x00000000u, 0x00050006u, 0x000003c0u, 0x0000000cu, 0x6461705fu, - 0x00000032u, 0x00050006u, 0x000003c0u, 0x0000000du, 0x6461705fu, 0x00000033u, 0x00050006u, 0x000003c0u, - 0x0000000eu, 0x6461705fu, 0x00000034u, 0x00050006u, 0x000003c0u, 0x0000000fu, 0x6461705fu, 0x00000035u, - 0x00040005u, 0x000003c2u, 0x6c6f6f70u, 0x00000000u, 0x00060005u, 0x000003c3u, 0x7473624fu, 0x656c6361u, - 0x6c6f6f50u, 0x00000000u, 0x00060006u, 0x000003c3u, 0x00000000u, 0x5f6d756eu, 0x65627563u, 0x00000073u, - 0x00070006u, 0x000003c3u, 0x00000001u, 0x5f6d756eu, 0x656d6974u, 0x6d617473u, 0x00007370u, 0x00070006u, - 0x000003c3u, 0x00000002u, 0x5f6d756eu, 0x63617274u, 0x6f705f6bu, 0x00736573u, 0x00070006u, 0x000003c3u, - 0x00000003u, 0x6d697270u, 0x7079745fu, 0x64695f65u, 0x00000000u, 0x00080006u, 0x000003c3u, 0x00000004u, - 0x656d6974u, 0x6d617473u, 0x6f5f7370u, 0x65736666u, 0x00000074u, 0x00080006u, 0x000003c3u, 0x00000005u, - 0x65627563u, 0x5f73745fu, 0x6f5f7370u, 0x65736666u, 0x00000074u, 0x00090006u, 0x000003c3u, 0x00000006u, - 0x63617274u, 0x69745f6bu, 0x7473656du, 0x73706d61u, 0x66666f5fu, 0x00746573u, 0x00080006u, 0x000003c3u, - 0x00000007u, 0x6e617274u, 0x74616c73u, 0x736e6f69u, 0x66666f5fu, 0x00746573u, 0x00080006u, 0x000003c3u, - 0x00000008u, 0x74617571u, 0x696e7265u, 0x5f736e6fu, 0x7366666fu, 0x00007465u, 0x00070006u, 0x000003c3u, - 0x00000009u, 0x6c616373u, 0x6f5f7365u, 0x65736666u, 0x00000074u, 0x00070006u, 0x000003c3u, 0x0000000au, - 0x6f6c6f63u, 0x6f5f7372u, 0x65736666u, 0x00000074u, 0x00070006u, 0x000003c3u, 0x0000000bu, 0x646e6572u, - 0x665f7265u, 0x7367616cu, 0x00000000u, 0x00050006u, 0x000003c3u, 0x0000000cu, 0x6461705fu, 0x00000032u, - 0x00050006u, 0x000003c3u, 0x0000000du, 0x6461705fu, 0x00000033u, 0x00050006u, 0x000003c3u, 0x0000000eu, - 0x6461705fu, 0x00000034u, 0x00050006u, 0x000003c3u, 0x0000000fu, 0x6461705fu, 0x00000035u, 0x00070005u, - 0x000003c5u, 0x7473624fu, 0x656c6361u, 0x6c6f6f50u, 0x66667542u, 0x00007265u, 0x00080006u, 0x000003c5u, - 0x00000000u, 0x626f5f67u, 0x63617473u, 0x705f656cu, 0x736c6f6fu, 0x00000000u, 0x00030005u, 0x000003c7u, - 0x00000000u, 0x00070005u, 0x000003d2u, 0x63726f66u, 0x657a5f65u, 0x745f6f72u, 0x736b7361u, 0x00000000u, - 0x00050005u, 0x000003e7u, 0x63617274u, 0x74735f6bu, 0x00747261u, 0x00050005u, 0x000003edu, 0x33746e49u, - 0x66754232u, 0x00726566u, 0x00050006u, 0x000003edu, 0x00000000u, 0x6e695f67u, 0x00323374u, 0x00030005u, - 0x000003efu, 0x00000000u, 0x00050005u, 0x000003fcu, 0x63617274u, 0x6e655f6bu, 0x00000064u, 0x00050005u, - 0x00000407u, 0x63617274u, 0x656c5f6bu, 0x0000006eu, 0x00060005u, 0x0000040fu, 0x63617274u, 0x73745f6bu, - 0x7361625fu, 0x00000065u, 0x00050005u, 0x00000418u, 0x67726174u, 0x745f7465u, 0x00000073u, 0x00050005u, - 0x0000041bu, 0x73726966u, 0x73745f74u, 0x00000000u, 0x00070005u, 0x0000041du, 0x656d6954u, 0x6d617473u, - 0x75427370u, 0x72656666u, 0x00000000u, 0x00070006u, 0x0000041du, 0x00000000u, 0x69745f67u, 0x7473656du, - 0x73706d61u, 0x00000000u, 0x00030005u, 0x0000041fu, 0x00000000u, 0x00040005u, 0x00000424u, 0x7473616cu, - 0x0073745fu, 0x00070005u, 0x0000042bu, 0x72747865u, 0x6c6f7061u, 0x5f657461u, 0x6f666562u, 0x00006572u, - 0x00070005u, 0x0000042fu, 0x72747865u, 0x6c6f7061u, 0x5f657461u, 0x65746661u, 0x00000072u, 0x00030005u, - 0x00000436u, 0x00007464u, 0x00030005u, 0x00000449u, 0x00007464u, 0x00040005u, 0x00000458u, 0x30786469u, - 0x00000000u, 0x00040005u, 0x00000459u, 0x31786469u, 0x00000000u, 0x00040005u, 0x0000045au, 0x68706c61u, - 0x00000061u, 0x00030005u, 0x00000463u, 0x00003074u, 0x00030005u, 0x00000467u, 0x00003174u, 0x00030005u, - 0x00000485u, 0x00003074u, 0x00030005u, 0x0000048cu, 0x00003174u, 0x00040005u, 0x000004a3u, 0x7466656cu, - 0x00000000u, 0x00040005u, 0x000004a4u, 0x68676972u, 0x00000074u, 0x00030005u, 0x000004b0u, 0x0064696du, - 0x00030005u, 0x000004b5u, 0x00003074u, 0x00030005u, 0x000004bcu, 0x00003174u, 0x00030005u, 0x000004e2u, - 0x00003074u, 0x00030005u, 0x000004e9u, 0x00003174u, 0x00050005u, 0x000004ffu, 0x6e617274u, 0x61625f73u, - 0x00006573u, 0x00050005u, 0x00000508u, 0x74617571u, 0x7361625fu, 0x00000065u, 0x00040005u, 0x00000512u, - 0x6e617274u, 0x00003073u, 0x00050005u, 0x00000514u, 0x616f6c46u, 0x66754274u, 0x00726566u, 0x00060006u, - 0x00000514u, 0x00000000u, 0x6c665f67u, 0x7374616fu, 0x00000000u, 0x00030005u, 0x00000516u, 0x00000000u, - 0x00040005u, 0x00000530u, 0x6e617274u, 0x00003173u, 0x00040005u, 0x00000549u, 0x74617571u, 0x00000030u, - 0x00040005u, 0x0000056au, 0x74617571u, 0x00000031u, 0x00060005u, 0x0000058bu, 0x6e617274u, 0x6e695f73u, - 0x70726574u, 0x00000000u, 0x00060005u, 0x00000591u, 0x68706c61u, 0x6c635f61u, 0x65706d61u, 0x00000064u, - 0x00050005u, 0x00000594u, 0x74617571u, 0x746e695fu, 0x00707265u, 0x00040005u, 0x00000595u, 0x61726170u, - 0x0000006du, 0x00040005u, 0x00000597u, 0x61726170u, 0x0000006du, 0x00040005u, 0x00000599u, 0x61726170u, - 0x0000006du, 0x00060005u, 0x0000059cu, 0x6c616373u, 0x666f5f65u, 0x74657366u, 0x00000000u, 0x00050005u, - 0x000005a5u, 0x6c616373u, 0x6f6c5f65u, 0x006c6163u, 0x00040005u, 0x000005b8u, 0x6c6c7563u, 0x0000725fu, - 0x00060005u, 0x000005b9u, 0x65685446u, 0x61436174u, 0x6172656du, 0x00000000u, 0x00040006u, 0x000005b9u, - 0x00000000u, 0x00007863u, 0x00040006u, 0x000005b9u, 0x00000001u, 0x00007963u, 0x00050006u, 0x000005b9u, - 0x00000002u, 0x5f676d69u, 0x00000077u, 0x00050006u, 0x000005b9u, 0x00000003u, 0x5f676d69u, 0x00000068u, - 0x00050006u, 0x000005b9u, 0x00000004u, 0x796c6f70u, 0x00000030u, 0x00050006u, 0x000005b9u, 0x00000005u, - 0x796c6f70u, 0x00000031u, 0x00050006u, 0x000005b9u, 0x00000006u, 0x796c6f70u, 0x00000032u, 0x00050006u, - 0x000005b9u, 0x00000007u, 0x796c6f70u, 0x00000033u, 0x00050006u, 0x000005b9u, 0x00000008u, 0x796c6f70u, - 0x00000034u, 0x00050006u, 0x000005b9u, 0x00000009u, 0x796c6f70u, 0x00000035u, 0x00070006u, 0x000005b9u, - 0x0000000au, 0x5f78616du, 0x5f796172u, 0x6c676e61u, 0x00000065u, 0x00080006u, 0x000005b9u, 0x0000000bu, - 0x5f78616du, 0x74736964u, 0x6974726fu, 0x765f6e6fu, 0x00006c61u, 0x00080006u, 0x000005b9u, 0x0000000cu, - 0x5f78616du, 0x74736964u, 0x6974726fu, 0x645f6e6fu, 0x006c6176u, 0x00060006u, 0x000005b9u, 0x0000000du, - 0x74706564u, 0x616d5f68u, 0x00000078u, 0x00050006u, 0x000005b9u, 0x0000000eu, 0x635f646cu, 0x00000000u, - 0x00050006u, 0x000005b9u, 0x0000000fu, 0x645f646cu, 0x00000000u, 0x00050006u, 0x000005b9u, 0x00000010u, - 0x655f646cu, 0x00000000u, 0x00050006u, 0x000005b9u, 0x00000011u, 0x665f646cu, 0x00000000u, 0x00080005u, - 0x000005bbu, 0x656d6143u, 0x6e496172u, 0x6e697274u, 0x73636973u, 0x66667542u, 0x00007265u, 0x00080006u, - 0x000005bbu, 0x00000000u, 0x61635f67u, 0x6172656du, 0x746e695fu, 0x736e6972u, 0x00736369u, 0x00030005u, - 0x000005bdu, 0x00000000u, 0x00050005u, 0x000005c6u, 0x6c6c7563u, 0x736f705fu, 0x00000065u, 0x00050005u, - 0x000005c7u, 0x656d6143u, 0x6f506172u, 0x00006573u, 0x00070006u, 0x000005c7u, 0x00000000u, 0x6c726f77u, - 0x6f745f64u, 0x6d61635fu, 0x00617265u, 0x00070005u, 0x000005c9u, 0x656d6143u, 0x6f506172u, 0x75426573u, - 0x72656666u, 0x00000000u, 0x00070006u, 0x000005c9u, 0x00000000u, 0x61635f67u, 0x6172656du, 0x736f705fu, - 0x00007365u, 0x00030005u, 0x000005cbu, 0x00000000u, 0x00040005u, 0x000005d1u, 0x5f6d6163u, 0x00736f70u, - 0x00040005u, 0x000005d2u, 0x61726170u, 0x0000006du, 0x00050005u, 0x000005d5u, 0x77656976u, 0x6e696d5fu, - 0x00000000u, 0x00050005u, 0x000005dau, 0x77656976u, 0x78616d5fu, 0x00000000u, 0x00040005u, 0x000005dfu, - 0x69646172u, 0x00007375u, 0x00040005u, 0x000005e2u, 0x61726170u, 0x0000006du, 0x00040005u, 0x000005e4u, - 0x61726170u, 0x0000006du, 0x00040005u, 0x000005e6u, 0x61726170u, 0x0000006du, 0x00040005u, 0x000005e8u, - 0x61726170u, 0x0000006du, 0x00060005u, 0x000005eeu, 0x5f6a626fu, 0x775f6f74u, 0x646c726fu, 0x00000000u, - 0x00040005u, 0x000005f0u, 0x61726170u, 0x0000006du, 0x00040005u, 0x000005f2u, 0x61726170u, 0x0000006du, - 0x00040005u, 0x000005f4u, 0x61726170u, 0x0000006du, 0x00060005u, 0x000005f6u, 0x6f6c6f63u, 0x666f5f72u, - 0x74657366u, 0x00000000u, 0x00040005u, 0x000005ffu, 0x6e6f7266u, 0x00000074u, 0x00040005u, 0x0000060cu, - 0x6b636162u, 0x00000000u, 0x00030005u, 0x0000061bu, 0x006d6163u, 0x00050005u, 0x00000622u, 0x77656976u, - 0x736f705fu, 0x00000065u, 0x00040005u, 0x00000627u, 0x69765f52u, 0x00007765u, 0x00050005u, 0x00000631u, - 0x5f6d6163u, 0x6c726f77u, 0x00000064u, 0x00040005u, 0x0000063fu, 0x626f5f52u, 0x0000006au, 0x00040005u, - 0x00000648u, 0x73616d66u, 0x0000006bu, 0x00030005u, 0x00000649u, 0x00000066u, 0x00040005u, 0x00000651u, - 0x6f775f6eu, 0x00646c72u, 0x00050005u, 0x0000065du, 0x65646e69u, 0x6c626178u, 0x00000065u, 0x00060005u, - 0x00000661u, 0x746e6563u, 0x6c5f7265u, 0x6c61636fu, 0x00000000u, 0x00050005u, 0x00000663u, 0x65646e69u, - 0x6c626178u, 0x00000065u, 0x00060005u, 0x00000669u, 0x746e6563u, 0x775f7265u, 0x646c726fu, 0x00000000u, - 0x00050005u, 0x00000684u, 0x5f78616du, 0x64627573u, 0x00007669u, 0x00030005u, 0x0000068au, 0x00000065u, - 0x00050005u, 0x00000693u, 0x6c5f3076u, 0x6c61636fu, 0x00000000u, 0x00050005u, 0x000006b2u, 0x65646e69u, - 0x6c626178u, 0x00000065u, 0x00050005u, 0x000006b6u, 0x65646e69u, 0x6c626178u, 0x00000065u, 0x00050005u, - 0x000006bbu, 0x6c5f3176u, 0x6c61636fu, 0x00000000u, 0x00050005u, 0x000006bdu, 0x65646e69u, 0x6c626178u, - 0x00000065u, 0x00050005u, 0x000006c0u, 0x65646e69u, 0x6c626178u, 0x00000065u, 0x00050005u, 0x000006c5u, - 0x775f3076u, 0x646c726fu, 0x00000000u, 0x00050005u, 0x000006ceu, 0x775f3176u, 0x646c726fu, 0x00000000u, - 0x00040005u, 0x000006d7u, 0x64627573u, 0x00007669u, 0x00040005u, 0x000006d8u, 0x61726170u, 0x0000006du, - 0x00040005u, 0x000006dau, 0x61726170u, 0x0000006du, 0x00040005u, 0x000006dcu, 0x61726170u, 0x0000006du, - 0x00040005u, 0x000006deu, 0x61726170u, 0x0000006du, 0x00040005u, 0x000006e0u, 0x61726170u, 0x0000006du, - 0x00050005u, 0x000006edu, 0x65726977u, 0x6d617266u, 0x00000065u, 0x00070005u, 0x000006fbu, 0x7473624fu, - 0x656c6361u, 0x6b736154u, 0x6c796150u, 0x0064616fu, 0x00060006u, 0x000006fbu, 0x00000000u, 0x72657571u, - 0x64695f79u, 0x00000000u, 0x00060006u, 0x000006fbu, 0x00000001u, 0x7473626fu, 0x656c6361u, 0x0064695fu, - 0x00070006u, 0x000006fbu, 0x00000002u, 0x656a626fu, 0x745f7463u, 0x6f775f6fu, 0x00646c72u, 0x00050006u, - 0x000006fbu, 0x00000003u, 0x6c616373u, 0x00000065u, 0x00060006u, 0x000006fbu, 0x00000004u, 0x6e6f7266u, - 0x6f635f74u, 0x00726f6cu, 0x00060006u, 0x000006fbu, 0x00000005u, 0x6b636162u, 0x6c6f635fu, 0x0000726fu, - 0x00080006u, 0x000006fbu, 0x00000006u, 0x64627573u, 0x73697669u, 0x5f6e6f69u, 0x6576656cu, 0x0000006cu, - 0x00070006u, 0x000006fbu, 0x00000007u, 0x646e6572u, 0x665f7265u, 0x7367616cu, 0x00000000u, 0x00050006u, - 0x000006fbu, 0x00000008u, 0x625f7369u, 0x00007665u, 0x00060006u, 0x000006fbu, 0x00000009u, 0x65636166u, - 0x73616d5fu, 0x0000006bu, 0x00040005u, 0x000006fdu, 0x6c796170u, 0x0064616fu, 0x00080005u, 0x0000074fu, - 0x6f6c6f43u, 0x6c615072u, 0x65747465u, 0x66667542u, 0x61457265u, 0x00796c72u, 0x00070006u, 0x0000074fu, - 0x00000000u, 0x6f635f67u, 0x5f726f6cu, 0x656c6170u, 0x00657474u, 0x00030005u, 0x00000751u, 0x00000000u, - 0x00040005u, 0x00000752u, 0x74726556u, 0x00007865u, 0x00040006u, 0x00000752u, 0x00000000u, 0x00000078u, - 0x00040006u, 0x00000752u, 0x00000001u, 0x00000079u, 0x00040006u, 0x00000752u, 0x00000002u, 0x0000007au, - 0x00050006u, 0x00000752u, 0x00000003u, 0x6461705fu, 0x00000000u, 0x00060005u, 0x00000754u, 0x74726556u, - 0x75427865u, 0x72656666u, 0x00000000u, 0x00060006u, 0x00000754u, 0x00000000u, 0x65765f67u, 0x63697472u, - 0x00007365u, 0x00030005u, 0x00000756u, 0x00000000u, 0x00060005u, 0x00000758u, 0x61697254u, 0x656c676eu, - 0x66667542u, 0x00007265u, 0x00060006u, 0x00000758u, 0x00000000u, 0x72745f67u, 0x676e6169u, 0x0073656cu, - 0x00030005u, 0x0000075au, 0x00000000u, 0x00050005u, 0x0000075cu, 0x65736f50u, 0x66667542u, 0x00007265u, - 0x00050006u, 0x0000075cu, 0x00000000u, 0x6f705f67u, 0x00736573u, 0x00030005u, 0x0000075eu, 0x00000000u, - 0x00080005u, 0x0000075fu, 0x656d6954u, 0x6d617473u, 0x50646570u, 0x6c796c6fu, 0x50656e69u, 0x006c6f6fu, - 0x00070006u, 0x0000075fu, 0x00000000u, 0x5f6d756eu, 0x656d6974u, 0x6d617473u, 0x00007370u, 0x00060006u, - 0x0000075fu, 0x00000001u, 0x5f6d756eu, 0x72726176u, 0x00737961u, 0x00070006u, 0x0000075fu, 0x00000002u, - 0x5f6d756eu, 0x74726576u, 0x73656369u, 0x00000000u, 0x00070006u, 0x0000075fu, 0x00000003u, 0x6d697270u, - 0x7079745fu, 0x64695f65u, 0x00000000u, 0x00080006u, 0x0000075fu, 0x00000004u, 0x656d6974u, 0x6d617473u, - 0x6f5f7370u, 0x65736666u, 0x00000074u, 0x00090006u, 0x0000075fu, 0x00000005u, 0x765f7374u, 0x61727261u, - 0x705f7379u, 0x666f5f73u, 0x74657366u, 0x00000000u, 0x00080006u, 0x0000075fu, 0x00000006u, 0x72726176u, - 0x5f737961u, 0x6f5f7370u, 0x65736666u, 0x00000074u, 0x00070006u, 0x0000075fu, 0x00000007u, 0x74726576u, - 0x73656369u, 0x66666f5fu, 0x00746573u, 0x00060006u, 0x0000075fu, 0x00000008u, 0x62626161u, 0x66666f5fu, - 0x00746573u, 0x00050006u, 0x0000075fu, 0x00000009u, 0x6461705fu, 0x00000031u, 0x00050006u, 0x0000075fu, - 0x0000000au, 0x6461705fu, 0x00000032u, 0x00050006u, 0x0000075fu, 0x0000000bu, 0x6461705fu, 0x00000033u, - 0x00050006u, 0x0000075fu, 0x0000000cu, 0x6461705fu, 0x00000034u, 0x00050006u, 0x0000075fu, 0x0000000du, - 0x6461705fu, 0x00000035u, 0x00050006u, 0x0000075fu, 0x0000000eu, 0x6461705fu, 0x00000036u, 0x00050006u, - 0x0000075fu, 0x0000000fu, 0x6461705fu, 0x00000037u, 0x00070005u, 0x00000761u, 0x796c6f50u, 0x656e696cu, - 0x6c6f6f50u, 0x66667542u, 0x00007265u, 0x00080006u, 0x00000761u, 0x00000000u, 0x6f705f67u, 0x696c796cu, - 0x705f656eu, 0x736c6f6fu, 0x00000000u, 0x00030005u, 0x00000763u, 0x00000000u, 0x00080005u, 0x00000764u, - 0x656d6954u, 0x6d617473u, 0x50646570u, 0x67796c6fu, 0x6f506e6fu, 0x00006c6fu, 0x00070006u, 0x00000764u, - 0x00000000u, 0x5f6d756eu, 0x656d6974u, 0x6d617473u, 0x00007370u, 0x00060006u, 0x00000764u, 0x00000001u, - 0x5f6d756eu, 0x72726176u, 0x00737961u, 0x00070006u, 0x00000764u, 0x00000002u, 0x5f6d756eu, 0x74726576u, - 0x73656369u, 0x00000000u, 0x00070006u, 0x00000764u, 0x00000003u, 0x5f6d756eu, 0x61697274u, 0x656c676eu, - 0x00000073u, 0x00070006u, 0x00000764u, 0x00000004u, 0x6d697270u, 0x7079745fu, 0x64695f65u, 0x00000000u, - 0x00080006u, 0x00000764u, 0x00000005u, 0x656d6974u, 0x6d617473u, 0x6f5f7370u, 0x65736666u, 0x00000074u, - 0x00090006u, 0x00000764u, 0x00000006u, 0x765f7374u, 0x61727261u, 0x705f7379u, 0x666f5f73u, 0x74657366u, - 0x00000000u, 0x00080006u, 0x00000764u, 0x00000007u, 0x72726176u, 0x5f737961u, 0x6f5f7370u, 0x65736666u, - 0x00000074u, 0x00070006u, 0x00000764u, 0x00000008u, 0x5f697274u, 0x6f5f7370u, 0x65736666u, 0x00000074u, - 0x00070006u, 0x00000764u, 0x00000009u, 0x74726576u, 0x73656369u, 0x66666f5fu, 0x00746573u, 0x00080006u, - 0x00000764u, 0x0000000au, 0x61697274u, 0x656c676eu, 0x666f5f73u, 0x74657366u, 0x00000000u, 0x00060006u, - 0x00000764u, 0x0000000bu, 0x62626161u, 0x66666f5fu, 0x00746573u, 0x00050006u, 0x00000764u, 0x0000000cu, - 0x6461705fu, 0x00000031u, 0x00050006u, 0x00000764u, 0x0000000du, 0x6461705fu, 0x00000032u, 0x00050006u, - 0x00000764u, 0x0000000eu, 0x6461705fu, 0x00000033u, 0x00050006u, 0x00000764u, 0x0000000fu, 0x6461705fu, - 0x00000034u, 0x00070005u, 0x00000766u, 0x796c6f50u, 0x506e6f67u, 0x426c6f6fu, 0x65666675u, 0x00000072u, - 0x00070006u, 0x00000766u, 0x00000000u, 0x6f705f67u, 0x6f67796cu, 0x6f705f6eu, 0x00736c6fu, 0x00030005u, - 0x00000768u, 0x00000000u, 0x00040047u, 0x00000375u, 0x0000000bu, 0x0000001au, 0x00030047u, 0x0000037bu, - 0x00000002u, 0x00050048u, 0x0000037bu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000037bu, - 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000037bu, 0x00000002u, 0x00000023u, 0x00000008u, - 0x00050048u, 0x0000037bu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x0000037bu, 0x00000004u, - 0x00000023u, 0x00000010u, 0x00050048u, 0x0000037bu, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, - 0x0000037bu, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x0000037bu, 0x00000007u, 0x00000023u, - 0x0000001cu, 0x00050048u, 0x0000037bu, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x0000037bu, - 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x0000037bu, 0x0000000au, 0x00000023u, 0x00000028u, - 0x00050048u, 0x0000037bu, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x0000037bu, 0x0000000cu, - 0x00000023u, 0x00000030u, 0x00050048u, 0x0000037bu, 0x0000000du, 0x00000023u, 0x00000034u, 0x00050048u, - 0x0000037bu, 0x0000000eu, 0x00000023u, 0x00000038u, 0x00050048u, 0x0000037bu, 0x0000000fu, 0x00000023u, - 0x0000003cu, 0x00050048u, 0x0000037bu, 0x00000010u, 0x00000023u, 0x00000040u, 0x00050048u, 0x0000037bu, - 0x00000011u, 0x00000023u, 0x00000044u, 0x00050048u, 0x0000037bu, 0x00000012u, 0x00000023u, 0x00000048u, - 0x00050048u, 0x0000037bu, 0x00000013u, 0x00000023u, 0x0000004cu, 0x00050048u, 0x0000037bu, 0x00000014u, - 0x00000023u, 0x00000050u, 0x00050048u, 0x00000394u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, - 0x00000394u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000394u, 0x00000002u, 0x00000023u, - 0x00000008u, 0x00050048u, 0x00000394u, 0x00000003u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000394u, - 0x00000004u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000394u, 0x00000005u, 0x00000023u, 0x00000018u, - 0x00050048u, 0x00000394u, 0x00000006u, 0x00000023u, 0x0000001cu, 0x00040047u, 0x00000395u, 0x00000006u, - 0x00000020u, 0x00030047u, 0x00000396u, 0x00000002u, 0x00040048u, 0x00000396u, 0x00000000u, 0x00000018u, - 0x00050048u, 0x00000396u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000398u, 0x00000018u, - 0x00040047u, 0x00000398u, 0x00000021u, 0x0000000du, 0x00040047u, 0x00000398u, 0x00000022u, 0x00000000u, - 0x00040047u, 0x000003a3u, 0x00000006u, 0x00000004u, 0x00050048u, 0x000003a4u, 0x00000000u, 0x00000023u, - 0x00000000u, 0x00050048u, 0x000003a4u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000003a4u, - 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x000003a4u, 0x00000003u, 0x00000023u, 0x0000000cu, - 0x00050048u, 0x000003a4u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x000003a4u, 0x00000005u, - 0x00000023u, 0x00000014u, 0x00050048u, 0x000003a4u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, - 0x000003a4u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x000003a4u, 0x00000008u, 0x00000023u, - 0x00000020u, 0x00050048u, 0x000003a4u, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x000003a4u, - 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x000003a4u, 0x0000000bu, 0x00000023u, 0x0000002cu, - 0x00050048u, 0x000003a4u, 0x0000000cu, 0x00000023u, 0x00000030u, 0x00040047u, 0x000003a5u, 0x00000006u, - 0x00000080u, 0x00030047u, 0x000003a6u, 0x00000002u, 0x00040048u, 0x000003a6u, 0x00000000u, 0x00000018u, - 0x00050048u, 0x000003a6u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000003a8u, 0x00000018u, - 0x00040047u, 0x000003a8u, 0x00000021u, 0x00000006u, 0x00040047u, 0x000003a8u, 0x00000022u, 0x00000000u, - 0x00050048u, 0x000003c3u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000003c3u, 0x00000001u, - 0x00000023u, 0x00000004u, 0x00050048u, 0x000003c3u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, - 0x000003c3u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x000003c3u, 0x00000004u, 0x00000023u, - 0x00000010u, 0x00050048u, 0x000003c3u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x000003c3u, - 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x000003c3u, 0x00000007u, 0x00000023u, 0x0000001cu, - 0x00050048u, 0x000003c3u, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x000003c3u, 0x00000009u, - 0x00000023u, 0x00000024u, 0x00050048u, 0x000003c3u, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, - 0x000003c3u, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x000003c3u, 0x0000000cu, 0x00000023u, - 0x00000030u, 0x00050048u, 0x000003c3u, 0x0000000du, 0x00000023u, 0x00000034u, 0x00050048u, 0x000003c3u, - 0x0000000eu, 0x00000023u, 0x00000038u, 0x00050048u, 0x000003c3u, 0x0000000fu, 0x00000023u, 0x0000003cu, - 0x00040047u, 0x000003c4u, 0x00000006u, 0x00000040u, 0x00030047u, 0x000003c5u, 0x00000002u, 0x00040048u, - 0x000003c5u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000003c5u, 0x00000000u, 0x00000023u, 0x00000000u, - 0x00030047u, 0x000003c7u, 0x00000018u, 0x00040047u, 0x000003c7u, 0x00000021u, 0x00000009u, 0x00040047u, - 0x000003c7u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000003ecu, 0x00000006u, 0x00000004u, 0x00030047u, - 0x000003edu, 0x00000002u, 0x00040048u, 0x000003edu, 0x00000000u, 0x00000018u, 0x00050048u, 0x000003edu, - 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000003efu, 0x00000018u, 0x00040047u, 0x000003efu, - 0x00000021u, 0x00000001u, 0x00040047u, 0x000003efu, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000041cu, - 0x00000006u, 0x00000008u, 0x00030047u, 0x0000041du, 0x00000002u, 0x00040048u, 0x0000041du, 0x00000000u, - 0x00000018u, 0x00050048u, 0x0000041du, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000041fu, - 0x00000018u, 0x00040047u, 0x0000041fu, 0x00000021u, 0x00000000u, 0x00040047u, 0x0000041fu, 0x00000022u, - 0x00000000u, 0x00040047u, 0x00000513u, 0x00000006u, 0x00000004u, 0x00030047u, 0x00000514u, 0x00000002u, - 0x00040048u, 0x00000514u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000514u, 0x00000000u, 0x00000023u, - 0x00000000u, 0x00030047u, 0x00000516u, 0x00000018u, 0x00040047u, 0x00000516u, 0x00000021u, 0x00000005u, - 0x00040047u, 0x00000516u, 0x00000022u, 0x00000000u, 0x00050048u, 0x000005b9u, 0x00000000u, 0x00000023u, - 0x00000000u, 0x00050048u, 0x000005b9u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000005b9u, - 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x000005b9u, 0x00000003u, 0x00000023u, 0x0000000cu, - 0x00050048u, 0x000005b9u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x000005b9u, 0x00000005u, - 0x00000023u, 0x00000014u, 0x00050048u, 0x000005b9u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, - 0x000005b9u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x000005b9u, 0x00000008u, 0x00000023u, - 0x00000020u, 0x00050048u, 0x000005b9u, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x000005b9u, - 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x000005b9u, 0x0000000bu, 0x00000023u, 0x0000002cu, - 0x00050048u, 0x000005b9u, 0x0000000cu, 0x00000023u, 0x00000030u, 0x00050048u, 0x000005b9u, 0x0000000du, - 0x00000023u, 0x00000034u, 0x00050048u, 0x000005b9u, 0x0000000eu, 0x00000023u, 0x00000038u, 0x00050048u, - 0x000005b9u, 0x0000000fu, 0x00000023u, 0x0000003cu, 0x00050048u, 0x000005b9u, 0x00000010u, 0x00000023u, - 0x00000040u, 0x00050048u, 0x000005b9u, 0x00000011u, 0x00000023u, 0x00000044u, 0x00040047u, 0x000005bau, - 0x00000006u, 0x00000048u, 0x00030047u, 0x000005bbu, 0x00000002u, 0x00040048u, 0x000005bbu, 0x00000000u, - 0x00000018u, 0x00050048u, 0x000005bbu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000005bdu, - 0x00000018u, 0x00040047u, 0x000005bdu, 0x00000021u, 0x0000000bu, 0x00040047u, 0x000005bdu, 0x00000022u, - 0x00000000u, 0x00040048u, 0x000005c7u, 0x00000000u, 0x00000005u, 0x00050048u, 0x000005c7u, 0x00000000u, - 0x00000007u, 0x00000010u, 0x00050048u, 0x000005c7u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, - 0x000005c8u, 0x00000006u, 0x00000040u, 0x00030047u, 0x000005c9u, 0x00000002u, 0x00040048u, 0x000005c9u, - 0x00000000u, 0x00000018u, 0x00050048u, 0x000005c9u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, - 0x000005cbu, 0x00000018u, 0x00040047u, 0x000005cbu, 0x00000021u, 0x0000000cu, 0x00040047u, 0x000005cbu, - 0x00000022u, 0x00000000u, 0x00030047u, 0x0000065du, 0x00000018u, 0x00030047u, 0x00000663u, 0x00000018u, - 0x00030047u, 0x000006b2u, 0x00000018u, 0x00030047u, 0x000006b6u, 0x00000018u, 0x00030047u, 0x000006bdu, - 0x00000018u, 0x00030047u, 0x000006c0u, 0x00000018u, 0x00040047u, 0x0000074eu, 0x00000006u, 0x00000010u, - 0x00030047u, 0x0000074fu, 0x00000002u, 0x00040048u, 0x0000074fu, 0x00000000u, 0x00000018u, 0x00050048u, - 0x0000074fu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000751u, 0x00000018u, 0x00040047u, - 0x00000751u, 0x00000021u, 0x0000000au, 0x00040047u, 0x00000751u, 0x00000022u, 0x00000000u, 0x00050048u, - 0x00000752u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000752u, 0x00000001u, 0x00000023u, - 0x00000004u, 0x00050048u, 0x00000752u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000752u, - 0x00000003u, 0x00000023u, 0x0000000cu, 0x00040047u, 0x00000753u, 0x00000006u, 0x00000010u, 0x00030047u, - 0x00000754u, 0x00000002u, 0x00040048u, 0x00000754u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000754u, - 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000756u, 0x00000018u, 0x00040047u, 0x00000756u, - 0x00000021u, 0x00000002u, 0x00040047u, 0x00000756u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000757u, - 0x00000006u, 0x00000010u, 0x00030047u, 0x00000758u, 0x00000002u, 0x00040048u, 0x00000758u, 0x00000000u, - 0x00000018u, 0x00050048u, 0x00000758u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000075au, - 0x00000018u, 0x00040047u, 0x0000075au, 0x00000021u, 0x00000003u, 0x00040047u, 0x0000075au, 0x00000022u, - 0x00000000u, 0x00040047u, 0x0000075bu, 0x00000006u, 0x00000040u, 0x00030047u, 0x0000075cu, 0x00000002u, - 0x00040048u, 0x0000075cu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000075cu, 0x00000000u, 0x00000023u, - 0x00000000u, 0x00030047u, 0x0000075eu, 0x00000018u, 0x00040047u, 0x0000075eu, 0x00000021u, 0x00000004u, - 0x00040047u, 0x0000075eu, 0x00000022u, 0x00000000u, 0x00050048u, 0x0000075fu, 0x00000000u, 0x00000023u, - 0x00000000u, 0x00050048u, 0x0000075fu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000075fu, - 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000075fu, 0x00000003u, 0x00000023u, 0x0000000cu, - 0x00050048u, 0x0000075fu, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x0000075fu, 0x00000005u, - 0x00000023u, 0x00000014u, 0x00050048u, 0x0000075fu, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, - 0x0000075fu, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x0000075fu, 0x00000008u, 0x00000023u, - 0x00000020u, 0x00050048u, 0x0000075fu, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x0000075fu, - 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x0000075fu, 0x0000000bu, 0x00000023u, 0x0000002cu, - 0x00050048u, 0x0000075fu, 0x0000000cu, 0x00000023u, 0x00000030u, 0x00050048u, 0x0000075fu, 0x0000000du, - 0x00000023u, 0x00000034u, 0x00050048u, 0x0000075fu, 0x0000000eu, 0x00000023u, 0x00000038u, 0x00050048u, - 0x0000075fu, 0x0000000fu, 0x00000023u, 0x0000003cu, 0x00040047u, 0x00000760u, 0x00000006u, 0x00000040u, - 0x00030047u, 0x00000761u, 0x00000002u, 0x00040048u, 0x00000761u, 0x00000000u, 0x00000018u, 0x00050048u, - 0x00000761u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000763u, 0x00000018u, 0x00040047u, - 0x00000763u, 0x00000021u, 0x00000007u, 0x00040047u, 0x00000763u, 0x00000022u, 0x00000000u, 0x00050048u, - 0x00000764u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000764u, 0x00000001u, 0x00000023u, - 0x00000004u, 0x00050048u, 0x00000764u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000764u, - 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000764u, 0x00000004u, 0x00000023u, 0x00000010u, - 0x00050048u, 0x00000764u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000764u, 0x00000006u, - 0x00000023u, 0x00000018u, 0x00050048u, 0x00000764u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, - 0x00000764u, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000764u, 0x00000009u, 0x00000023u, - 0x00000024u, 0x00050048u, 0x00000764u, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x00000764u, - 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x00000764u, 0x0000000cu, 0x00000023u, 0x00000030u, - 0x00050048u, 0x00000764u, 0x0000000du, 0x00000023u, 0x00000034u, 0x00050048u, 0x00000764u, 0x0000000eu, - 0x00000023u, 0x00000038u, 0x00050048u, 0x00000764u, 0x0000000fu, 0x00000023u, 0x0000003cu, 0x00040047u, - 0x00000765u, 0x00000006u, 0x00000040u, 0x00030047u, 0x00000766u, 0x00000002u, 0x00040048u, 0x00000766u, - 0x00000000u, 0x00000018u, 0x00050048u, 0x00000766u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, - 0x00000768u, 0x00000018u, 0x00040047u, 0x00000768u, 0x00000021u, 0x00000008u, 0x00040047u, 0x00000768u, - 0x00000022u, 0x00000000u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, - 0x00000006u, 0x00000020u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x00000007u, 0x00000001u, 0x00030016u, - 0x00000008u, 0x00000020u, 0x00040017u, 0x00000009u, 0x00000008u, 0x00000004u, 0x00040020u, 0x0000000au, - 0x00000007u, 0x00000009u, 0x00050021u, 0x0000000bu, 0x00000008u, 0x0000000au, 0x0000000au, 0x00040021u, - 0x00000010u, 0x00000009u, 0x0000000au, 0x00040020u, 0x00000014u, 0x00000007u, 0x00000008u, 0x00060021u, - 0x00000015u, 0x00000009u, 0x0000000au, 0x0000000au, 0x00000014u, 0x00040017u, 0x0000001bu, 0x00000008u, - 0x00000003u, 0x00040018u, 0x0000001cu, 0x0000001bu, 0x00000003u, 0x00040021u, 0x0000001du, 0x0000001cu, - 0x0000000au, 0x00040020u, 0x00000021u, 0x00000007u, 0x0000001bu, 0x00040018u, 0x00000022u, 0x00000009u, - 0x00000004u, 0x00060021u, 0x00000023u, 0x00000022u, 0x00000021u, 0x0000000au, 0x00000021u, 0x00020014u, - 0x00000029u, 0x00070021u, 0x0000002au, 0x00000029u, 0x00000021u, 0x00000014u, 0x00000021u, 0x00000021u, - 0x0003001eu, 0x00000031u, 0x00000022u, 0x00040020u, 0x00000032u, 0x00000007u, 0x00000031u, 0x00040021u, - 0x00000033u, 0x0000001bu, 0x00000032u, 0x00040020u, 0x00000037u, 0x00000007u, 0x00000022u, 0x0014001eu, - 0x00000038u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, - 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, - 0x00000008u, 0x00000008u, 0x00000008u, 0x00040020u, 0x00000039u, 0x00000007u, 0x00000038u, 0x00070021u, - 0x0000003au, 0x00000008u, 0x00000021u, 0x00000021u, 0x00000037u, 0x00000039u, 0x00080021u, 0x00000041u, - 0x00000006u, 0x00000021u, 0x00000021u, 0x00000032u, 0x00000039u, 0x00000014u, 0x0004002bu, 0x00000006u, - 0x00000049u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x00000055u, 0x00000002u, 0x0004002bu, 0x00000006u, - 0x0000005cu, 0x00000003u, 0x0004002bu, 0x00000008u, 0x00000069u, 0x2edbe6ffu, 0x0004002bu, 0x00000008u, - 0x00000073u, 0x00000000u, 0x0004002bu, 0x00000008u, 0x00000074u, 0x3f800000u, 0x0007002cu, 0x00000009u, - 0x00000075u, 0x00000073u, 0x00000073u, 0x00000073u, 0x00000074u, 0x0004002bu, 0x00000008u, 0x00000088u, - 0x3f7fdf3bu, 0x0004002bu, 0x00000008u, 0x00000096u, 0xbf800000u, 0x00040020u, 0x0000011bu, 0x00000007u, - 0x0000001cu, 0x00040015u, 0x00000121u, 0x00000020u, 0x00000001u, 0x0004002bu, 0x00000121u, 0x00000122u, - 0x00000000u, 0x0004002bu, 0x00000121u, 0x0000012cu, 0x00000001u, 0x0004002bu, 0x00000121u, 0x00000136u, - 0x00000002u, 0x0004002bu, 0x00000121u, 0x00000182u, 0x00000003u, 0x0004002bu, 0x00000008u, 0x0000019fu, - 0x3f000000u, 0x0004002bu, 0x00000008u, 0x000001adu, 0x3a83126fu, 0x00040017u, 0x000001b8u, 0x00000008u, - 0x00000002u, 0x0004002bu, 0x00000121u, 0x000001d2u, 0x00000004u, 0x0004002bu, 0x00000121u, 0x000001d5u, - 0x00000005u, 0x0004002bu, 0x00000121u, 0x000001dbu, 0x00000006u, 0x0004002bu, 0x00000121u, 0x000001e1u, - 0x00000007u, 0x0004002bu, 0x00000121u, 0x000001e9u, 0x00000008u, 0x0004002bu, 0x00000121u, 0x000001f1u, - 0x00000009u, 0x0004002bu, 0x00000121u, 0x000001fcu, 0x0000000au, 0x0004002bu, 0x00000121u, 0x00000202u, - 0x0000000bu, 0x0004002bu, 0x00000121u, 0x00000209u, 0x0000000cu, 0x0004002bu, 0x00000008u, 0x00000210u, - 0x358637bdu, 0x00040020u, 0x0000021au, 0x00000007u, 0x000001b8u, 0x0004002bu, 0x00000121u, 0x00000221u, - 0x0000000eu, 0x0004002bu, 0x00000121u, 0x00000227u, 0x0000000fu, 0x0004002bu, 0x00000121u, 0x0000022eu, - 0x00000010u, 0x0004002bu, 0x00000121u, 0x00000234u, 0x00000011u, 0x0004002bu, 0x00000008u, 0x00000349u, - 0x461c4000u, 0x0004002bu, 0x00000008u, 0x00000360u, 0x40000000u, 0x0004002bu, 0x00000008u, 0x00000368u, - 0x40800000u, 0x00040020u, 0x00000370u, 0x00000007u, 0x00000006u, 0x00040017u, 0x00000373u, 0x00000006u, - 0x00000003u, 0x00040020u, 0x00000374u, 0x00000001u, 0x00000373u, 0x0004003bu, 0x00000374u, 0x00000375u, - 0x00000001u, 0x00040020u, 0x00000376u, 0x00000001u, 0x00000006u, 0x0017001eu, 0x0000037bu, 0x00000008u, - 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000121u, 0x00000121u, - 0x00000006u, 0x00000008u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x0000037cu, 0x00000009u, 0x0000037bu, - 0x0004003bu, 0x0000037cu, 0x0000037du, 0x00000009u, 0x00040020u, 0x0000037eu, 0x00000009u, 0x00000006u, - 0x00040015u, 0x00000390u, 0x00000040u, 0x00000001u, 0x0009001eu, 0x00000391u, 0x00000006u, 0x00000006u, - 0x00000390u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x00000392u, 0x00000007u, - 0x00000391u, 0x0009001eu, 0x00000394u, 0x00000006u, 0x00000006u, 0x00000390u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x0003001du, 0x00000395u, 0x00000394u, 0x0003001eu, 0x00000396u, 0x00000395u, - 0x00040020u, 0x00000397u, 0x0000000cu, 0x00000396u, 0x0004003bu, 0x00000397u, 0x00000398u, 0x0000000cu, - 0x00040020u, 0x0000039au, 0x0000000cu, 0x00000394u, 0x0004002bu, 0x00000006u, 0x0000039eu, 0x00000014u, - 0x0004001cu, 0x0000039fu, 0x00000006u, 0x0000039eu, 0x000f001eu, 0x000003a0u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x0000039fu, 0x00040020u, 0x000003a1u, 0x00000007u, 0x000003a0u, 0x0004001cu, - 0x000003a3u, 0x00000006u, 0x0000039eu, 0x000f001eu, 0x000003a4u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x000003a3u, 0x0003001du, 0x000003a5u, 0x000003a4u, 0x0003001eu, 0x000003a6u, 0x000003a5u, - 0x00040020u, 0x000003a7u, 0x0000000cu, 0x000003a6u, 0x0004003bu, 0x000003a7u, 0x000003a8u, 0x0000000cu, - 0x00040020u, 0x000003abu, 0x0000000cu, 0x000003a4u, 0x0012001eu, 0x000003c0u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x000003c1u, - 0x00000007u, 0x000003c0u, 0x0012001eu, 0x000003c3u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0003001du, 0x000003c4u, 0x000003c3u, 0x0003001eu, - 0x000003c5u, 0x000003c4u, 0x00040020u, 0x000003c6u, 0x0000000cu, 0x000003c5u, 0x0004003bu, 0x000003c6u, - 0x000003c7u, 0x0000000cu, 0x00040020u, 0x000003cdu, 0x0000000cu, 0x000003c3u, 0x00040020u, 0x000003d1u, - 0x00000007u, 0x00000029u, 0x0003002au, 0x00000029u, 0x000003d3u, 0x00030029u, 0x00000029u, 0x000003dau, - 0x0004002bu, 0x00000006u, 0x000003ddu, 0x00000006u, 0x0003001du, 0x000003ecu, 0x00000121u, 0x0003001eu, - 0x000003edu, 0x000003ecu, 0x00040020u, 0x000003eeu, 0x0000000cu, 0x000003edu, 0x0004003bu, 0x000003eeu, - 0x000003efu, 0x0000000cu, 0x00040020u, 0x000003f8u, 0x0000000cu, 0x00000121u, 0x00040020u, 0x00000417u, - 0x00000007u, 0x00000390u, 0x0003001du, 0x0000041cu, 0x00000390u, 0x0003001eu, 0x0000041du, 0x0000041cu, - 0x00040020u, 0x0000041eu, 0x0000000cu, 0x0000041du, 0x0004003bu, 0x0000041eu, 0x0000041fu, 0x0000000cu, - 0x00040020u, 0x00000421u, 0x0000000cu, 0x00000390u, 0x00040020u, 0x0000043bu, 0x00000009u, 0x00000121u, - 0x00040020u, 0x00000457u, 0x00000007u, 0x00000121u, 0x0004002bu, 0x00000006u, 0x0000050fu, 0x00000004u, - 0x0003001du, 0x00000513u, 0x00000008u, 0x0003001eu, 0x00000514u, 0x00000513u, 0x00040020u, 0x00000515u, - 0x0000000cu, 0x00000514u, 0x0004003bu, 0x00000515u, 0x00000516u, 0x0000000cu, 0x00040020u, 0x0000051cu, - 0x0000000cu, 0x00000008u, 0x00040020u, 0x000005b2u, 0x00000009u, 0x00000008u, 0x0014001eu, 0x000005b9u, - 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, - 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, - 0x00000008u, 0x00000008u, 0x0003001du, 0x000005bau, 0x000005b9u, 0x0003001eu, 0x000005bbu, 0x000005bau, - 0x00040020u, 0x000005bcu, 0x0000000cu, 0x000005bbu, 0x0004003bu, 0x000005bcu, 0x000005bdu, 0x0000000cu, - 0x0004002bu, 0x00000121u, 0x000005c0u, 0x0000000du, 0x0003001eu, 0x000005c7u, 0x00000022u, 0x0003001du, - 0x000005c8u, 0x000005c7u, 0x0003001eu, 0x000005c9u, 0x000005c8u, 0x00040020u, 0x000005cau, 0x0000000cu, - 0x000005c9u, 0x0004003bu, 0x000005cau, 0x000005cbu, 0x0000000cu, 0x00040020u, 0x000005cdu, 0x0000000cu, - 0x000005c7u, 0x0006002cu, 0x0000001bu, 0x000005efu, 0x00000074u, 0x00000074u, 0x00000074u, 0x0004002bu, - 0x00000006u, 0x00000616u, 0x00000005u, 0x00040020u, 0x0000061eu, 0x0000000cu, 0x000005b9u, 0x0004001cu, - 0x00000653u, 0x0000001bu, 0x000003ddu, 0x0006002cu, 0x0000001bu, 0x00000654u, 0x00000073u, 0x00000073u, - 0x00000096u, 0x0006002cu, 0x0000001bu, 0x00000655u, 0x00000073u, 0x00000073u, 0x00000074u, 0x0006002cu, - 0x0000001bu, 0x00000656u, 0x00000096u, 0x00000073u, 0x00000073u, 0x0006002cu, 0x0000001bu, 0x00000657u, - 0x00000074u, 0x00000073u, 0x00000073u, 0x0006002cu, 0x0000001bu, 0x00000658u, 0x00000073u, 0x00000096u, - 0x00000073u, 0x0006002cu, 0x0000001bu, 0x00000659u, 0x00000073u, 0x00000074u, 0x00000073u, 0x0009002cu, - 0x00000653u, 0x0000065au, 0x00000654u, 0x00000655u, 0x00000656u, 0x00000657u, 0x00000658u, 0x00000659u, - 0x00040020u, 0x0000065cu, 0x00000007u, 0x00000653u, 0x0004002bu, 0x00000006u, 0x00000691u, 0x0000000cu, - 0x0004002bu, 0x00000006u, 0x00000694u, 0x00000008u, 0x0004001cu, 0x00000695u, 0x0000001bu, 0x00000694u, - 0x0004002bu, 0x00000008u, 0x00000696u, 0xbf000000u, 0x0006002cu, 0x0000001bu, 0x00000697u, 0x00000696u, - 0x00000696u, 0x00000696u, 0x0006002cu, 0x0000001bu, 0x00000698u, 0x0000019fu, 0x00000696u, 0x00000696u, - 0x0006002cu, 0x0000001bu, 0x00000699u, 0x0000019fu, 0x0000019fu, 0x00000696u, 0x0006002cu, 0x0000001bu, - 0x0000069au, 0x00000696u, 0x0000019fu, 0x00000696u, 0x0006002cu, 0x0000001bu, 0x0000069bu, 0x00000696u, - 0x00000696u, 0x0000019fu, 0x0006002cu, 0x0000001bu, 0x0000069cu, 0x0000019fu, 0x00000696u, 0x0000019fu, - 0x0006002cu, 0x0000001bu, 0x0000069du, 0x0000019fu, 0x0000019fu, 0x0000019fu, 0x0006002cu, 0x0000001bu, - 0x0000069eu, 0x00000696u, 0x0000019fu, 0x0000019fu, 0x000b002cu, 0x00000695u, 0x0000069fu, 0x00000697u, - 0x00000698u, 0x00000699u, 0x0000069au, 0x0000069bu, 0x0000069cu, 0x0000069du, 0x0000069eu, 0x00040017u, - 0x000006a0u, 0x00000006u, 0x00000002u, 0x0004001cu, 0x000006a1u, 0x000006a0u, 0x00000691u, 0x0005002cu, - 0x000006a0u, 0x000006a2u, 0x00000049u, 0x00000007u, 0x0005002cu, 0x000006a0u, 0x000006a3u, 0x00000007u, - 0x00000055u, 0x0005002cu, 0x000006a0u, 0x000006a4u, 0x00000055u, 0x0000005cu, 0x0005002cu, 0x000006a0u, - 0x000006a5u, 0x0000005cu, 0x00000049u, 0x0005002cu, 0x000006a0u, 0x000006a6u, 0x0000050fu, 0x00000616u, - 0x0005002cu, 0x000006a0u, 0x000006a7u, 0x00000616u, 0x000003ddu, 0x0004002bu, 0x00000006u, 0x000006a8u, - 0x00000007u, 0x0005002cu, 0x000006a0u, 0x000006a9u, 0x000003ddu, 0x000006a8u, 0x0005002cu, 0x000006a0u, - 0x000006aau, 0x000006a8u, 0x0000050fu, 0x0005002cu, 0x000006a0u, 0x000006abu, 0x00000049u, 0x0000050fu, - 0x0005002cu, 0x000006a0u, 0x000006acu, 0x00000007u, 0x00000616u, 0x0005002cu, 0x000006a0u, 0x000006adu, - 0x00000055u, 0x000003ddu, 0x0005002cu, 0x000006a0u, 0x000006aeu, 0x0000005cu, 0x000006a8u, 0x000f002cu, - 0x000006a1u, 0x000006afu, 0x000006a2u, 0x000006a3u, 0x000006a4u, 0x000006a5u, 0x000006a6u, 0x000006a7u, - 0x000006a9u, 0x000006aau, 0x000006abu, 0x000006acu, 0x000006adu, 0x000006aeu, 0x00040020u, 0x000006b1u, - 0x00000007u, 0x000006a1u, 0x00040020u, 0x000006b5u, 0x00000007u, 0x00000695u, 0x000c001eu, 0x000006fbu, - 0x00000006u, 0x00000006u, 0x00000022u, 0x0000001bu, 0x0000001bu, 0x0000001bu, 0x00000006u, 0x00000006u, - 0x00000008u, 0x00000006u, 0x00040020u, 0x000006fcu, 0x0000151au, 0x000006fbu, 0x0004003bu, 0x000006fcu, - 0x000006fdu, 0x0000151au, 0x00040020u, 0x000006ffu, 0x0000151au, 0x00000006u, 0x00040020u, 0x00000704u, - 0x0000151au, 0x00000022u, 0x00040020u, 0x00000707u, 0x0000151au, 0x0000001bu, 0x00040020u, 0x00000716u, - 0x0000151au, 0x00000008u, 0x0004002bu, 0x00000006u, 0x0000071cu, 0x00000009u, 0x0004002bu, 0x00000006u, - 0x0000071du, 0x0000000au, 0x0004002bu, 0x00000006u, 0x0000071eu, 0x0000000bu, 0x0004002bu, 0x00000006u, - 0x0000071fu, 0x0000000du, 0x0004002bu, 0x00000006u, 0x00000720u, 0x0000000eu, 0x0004002bu, 0x00000006u, - 0x00000721u, 0x0000000fu, 0x0004002bu, 0x00000006u, 0x00000722u, 0x00000010u, 0x0004002bu, 0x00000006u, - 0x00000723u, 0x00000011u, 0x0004002bu, 0x00000006u, 0x00000724u, 0x00000012u, 0x0004002bu, 0x00000006u, - 0x00000725u, 0x00000013u, 0x0004002bu, 0x00000006u, 0x00000726u, 0x00000015u, 0x0004002bu, 0x00000008u, - 0x00000727u, 0x3f7dfdfeu, 0x0004002bu, 0x00000008u, 0x00000728u, 0x3b808081u, 0x0004002bu, 0x00000008u, - 0x00000729u, 0x3f68e8e9u, 0x0006002cu, 0x0000001bu, 0x0000072au, 0x00000727u, 0x00000728u, 0x00000729u, - 0x0004002bu, 0x00000008u, 0x0000072bu, 0x3ec4c4c5u, 0x0004002bu, 0x00000008u, 0x0000072cu, 0x3f37b7b8u, - 0x0004002bu, 0x00000008u, 0x0000072du, 0x3f79f9fau, 0x0006002cu, 0x0000001bu, 0x0000072eu, 0x0000072bu, - 0x0000072cu, 0x0000072du, 0x0004002bu, 0x00000008u, 0x0000072fu, 0x3f0b8b8cu, 0x0004002bu, 0x00000008u, - 0x00000730u, 0x3ebababbu, 0x0006002cu, 0x0000001bu, 0x00000731u, 0x0000072fu, 0x00000730u, 0x00000074u, - 0x0004002bu, 0x00000008u, 0x00000732u, 0x3ec8c8c9u, 0x0006002cu, 0x0000001bu, 0x00000733u, 0x00000074u, - 0x00000732u, 0x00000073u, 0x0004002bu, 0x00000008u, 0x00000734u, 0x3ed8d8d9u, 0x0004002bu, 0x00000008u, - 0x00000735u, 0x3f33b3b4u, 0x0004002bu, 0x00000008u, 0x00000736u, 0x3e6cecedu, 0x0006002cu, 0x0000001bu, - 0x00000737u, 0x00000734u, 0x00000735u, 0x00000736u, 0x0004002bu, 0x00000008u, 0x00000738u, 0x3e8a8a8bu, - 0x0004002bu, 0x00000008u, 0x00000739u, 0x3f31b1b2u, 0x0006002cu, 0x0000001bu, 0x0000073au, 0x0000072cu, - 0x00000738u, 0x00000739u, 0x0004002bu, 0x00000008u, 0x0000073bu, 0x3da0a0a1u, 0x0004002bu, 0x00000008u, - 0x0000073cu, 0x3f7efeffu, 0x0004002bu, 0x00000008u, 0x0000073du, 0x3f39b9bau, 0x0006002cu, 0x0000001bu, - 0x0000073eu, 0x0000073bu, 0x0000073cu, 0x0000073du, 0x0006002cu, 0x0000001bu, 0x0000073fu, 0x00000732u, - 0x00000732u, 0x00000732u, 0x0004002bu, 0x00000008u, 0x00000740u, 0x3d008081u, 0x0004002bu, 0x00000008u, - 0x00000741u, 0x3c008081u, 0x0006002cu, 0x0000001bu, 0x00000742u, 0x00000740u, 0x00000741u, 0x00000074u, - 0x0004002bu, 0x00000008u, 0x00000743u, 0x3ea0a0a1u, 0x0004002bu, 0x00000008u, 0x00000744u, 0x3ef0f0f1u, - 0x0006002cu, 0x0000001bu, 0x00000745u, 0x00000743u, 0x00000743u, 0x00000744u, 0x0004002bu, 0x00000008u, - 0x00000746u, 0x3e70f0f1u, 0x0006002cu, 0x0000001bu, 0x00000747u, 0x00000746u, 0x00000744u, 0x00000746u, - 0x0006002cu, 0x0000001bu, 0x00000748u, 0x00000744u, 0x00000743u, 0x00000743u, 0x0006002cu, 0x0000001bu, - 0x00000749u, 0x00000074u, 0x00000074u, 0x00000073u, 0x0004002bu, 0x00000008u, 0x0000074au, 0x40e00000u, - 0x0004002bu, 0x00000008u, 0x0000074bu, 0x41400000u, 0x0004002bu, 0x00000008u, 0x0000074cu, 0x40a00000u, - 0x0004002bu, 0x00000008u, 0x0000074du, 0x40400000u, 0x0003001du, 0x0000074eu, 0x00000009u, 0x0003001eu, - 0x0000074fu, 0x0000074eu, 0x00040020u, 0x00000750u, 0x0000000cu, 0x0000074fu, 0x0004003bu, 0x00000750u, - 0x00000751u, 0x0000000cu, 0x0006001eu, 0x00000752u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, - 0x0003001du, 0x00000753u, 0x00000752u, 0x0003001eu, 0x00000754u, 0x00000753u, 0x00040020u, 0x00000755u, - 0x0000000cu, 0x00000754u, 0x0004003bu, 0x00000755u, 0x00000756u, 0x0000000cu, 0x0003001du, 0x00000757u, - 0x00000373u, 0x0003001eu, 0x00000758u, 0x00000757u, 0x00040020u, 0x00000759u, 0x0000000cu, 0x00000758u, - 0x0004003bu, 0x00000759u, 0x0000075au, 0x0000000cu, 0x0003001du, 0x0000075bu, 0x000005c7u, 0x0003001eu, - 0x0000075cu, 0x0000075bu, 0x00040020u, 0x0000075du, 0x0000000cu, 0x0000075cu, 0x0004003bu, 0x0000075du, - 0x0000075eu, 0x0000000cu, 0x0012001eu, 0x0000075fu, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0003001du, 0x00000760u, 0x0000075fu, 0x0003001eu, - 0x00000761u, 0x00000760u, 0x00040020u, 0x00000762u, 0x0000000cu, 0x00000761u, 0x0004003bu, 0x00000762u, - 0x00000763u, 0x0000000cu, 0x0012001eu, 0x00000764u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0003001du, 0x00000765u, 0x00000764u, 0x0003001eu, - 0x00000766u, 0x00000765u, 0x00040020u, 0x00000767u, 0x0000000cu, 0x00000766u, 0x0004003bu, 0x00000767u, - 0x00000768u, 0x0000000cu, 0x0006002cu, 0x00000373u, 0x00000769u, 0x00000007u, 0x00000007u, 0x00000007u, - 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, - 0x00000370u, 0x00000371u, 0x00000007u, 0x0004003bu, 0x00000370u, 0x00000372u, 0x00000007u, 0x0004003bu, - 0x00000370u, 0x00000379u, 0x00000007u, 0x0004003bu, 0x00000370u, 0x00000382u, 0x00000007u, 0x0004003bu, - 0x00000392u, 0x00000393u, 0x00000007u, 0x0004003bu, 0x000003a1u, 0x000003a2u, 0x00000007u, 0x0004003bu, - 0x000003c1u, 0x000003c2u, 0x00000007u, 0x0004003bu, 0x000003d1u, 0x000003d2u, 0x00000007u, 0x0004003bu, - 0x00000370u, 0x000003e7u, 0x00000007u, 0x0004003bu, 0x00000370u, 0x000003fcu, 0x00000007u, 0x0004003bu, - 0x00000370u, 0x00000407u, 0x00000007u, 0x0004003bu, 0x00000370u, 0x0000040fu, 0x00000007u, 0x0004003bu, - 0x00000417u, 0x00000418u, 0x00000007u, 0x0004003bu, 0x00000417u, 0x0000041bu, 0x00000007u, 0x0004003bu, - 0x00000417u, 0x00000424u, 0x00000007u, 0x0004003bu, 0x000003d1u, 0x0000042bu, 0x00000007u, 0x0004003bu, - 0x000003d1u, 0x0000042fu, 0x00000007u, 0x0004003bu, 0x00000417u, 0x00000436u, 0x00000007u, 0x0004003bu, - 0x00000417u, 0x00000449u, 0x00000007u, 0x0004003bu, 0x00000457u, 0x00000458u, 0x00000007u, 0x0004003bu, - 0x00000457u, 0x00000459u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000045au, 0x00000007u, 0x0004003bu, - 0x00000417u, 0x00000463u, 0x00000007u, 0x0004003bu, 0x00000417u, 0x00000467u, 0x00000007u, 0x0004003bu, - 0x00000417u, 0x00000485u, 0x00000007u, 0x0004003bu, 0x00000417u, 0x0000048cu, 0x00000007u, 0x0004003bu, - 0x00000457u, 0x000004a3u, 0x00000007u, 0x0004003bu, 0x00000457u, 0x000004a4u, 0x00000007u, 0x0004003bu, - 0x00000457u, 0x000004b0u, 0x00000007u, 0x0004003bu, 0x00000417u, 0x000004b5u, 0x00000007u, 0x0004003bu, - 0x00000417u, 0x000004bcu, 0x00000007u, 0x0004003bu, 0x00000417u, 0x000004e2u, 0x00000007u, 0x0004003bu, - 0x00000417u, 0x000004e9u, 0x00000007u, 0x0004003bu, 0x00000370u, 0x000004ffu, 0x00000007u, 0x0004003bu, - 0x00000370u, 0x00000508u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000512u, 0x00000007u, 0x0004003bu, - 0x00000021u, 0x00000530u, 0x00000007u, 0x0004003bu, 0x0000000au, 0x00000549u, 0x00000007u, 0x0004003bu, - 0x0000000au, 0x0000056au, 0x00000007u, 0x0004003bu, 0x00000021u, 0x0000058bu, 0x00000007u, 0x0004003bu, - 0x00000014u, 0x00000591u, 0x00000007u, 0x0004003bu, 0x0000000au, 0x00000594u, 0x00000007u, 0x0004003bu, - 0x0000000au, 0x00000595u, 0x00000007u, 0x0004003bu, 0x0000000au, 0x00000597u, 0x00000007u, 0x0004003bu, - 0x00000014u, 0x00000599u, 0x00000007u, 0x0004003bu, 0x00000370u, 0x0000059cu, 0x00000007u, 0x0004003bu, - 0x00000021u, 0x000005a5u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000005b8u, 0x00000007u, 0x0004003bu, - 0x00000032u, 0x000005c6u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x000005d1u, 0x00000007u, 0x0004003bu, - 0x00000032u, 0x000005d2u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x000005d5u, 0x00000007u, 0x0004003bu, - 0x00000021u, 0x000005dau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000005dfu, 0x00000007u, 0x0004003bu, - 0x00000021u, 0x000005e2u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000005e4u, 0x00000007u, 0x0004003bu, - 0x00000021u, 0x000005e6u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x000005e8u, 0x00000007u, 0x0004003bu, - 0x00000037u, 0x000005eeu, 0x00000007u, 0x0004003bu, 0x00000021u, 0x000005f0u, 0x00000007u, 0x0004003bu, - 0x0000000au, 0x000005f2u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x000005f4u, 0x00000007u, 0x0004003bu, - 0x00000370u, 0x000005f6u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x000005ffu, 0x00000007u, 0x0004003bu, - 0x00000021u, 0x0000060cu, 0x00000007u, 0x0004003bu, 0x00000039u, 0x0000061bu, 0x00000007u, 0x0004003bu, - 0x00000032u, 0x00000622u, 0x00000007u, 0x0004003bu, 0x0000011bu, 0x00000627u, 0x00000007u, 0x0004003bu, - 0x00000021u, 0x00000631u, 0x00000007u, 0x0004003bu, 0x0000011bu, 0x0000063fu, 0x00000007u, 0x0004003bu, - 0x00000370u, 0x00000648u, 0x00000007u, 0x0004003bu, 0x00000370u, 0x00000649u, 0x00000007u, 0x0004003bu, - 0x00000021u, 0x00000651u, 0x00000007u, 0x0005003bu, 0x0000065cu, 0x0000065du, 0x00000007u, 0x0000065au, - 0x0004003bu, 0x00000021u, 0x00000661u, 0x00000007u, 0x0005003bu, 0x0000065cu, 0x00000663u, 0x00000007u, - 0x0000065au, 0x0004003bu, 0x00000021u, 0x00000669u, 0x00000007u, 0x0004003bu, 0x00000370u, 0x00000684u, - 0x00000007u, 0x0004003bu, 0x00000370u, 0x0000068au, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000693u, - 0x00000007u, 0x0005003bu, 0x000006b1u, 0x000006b2u, 0x00000007u, 0x000006afu, 0x0005003bu, 0x000006b5u, - 0x000006b6u, 0x00000007u, 0x0000069fu, 0x0004003bu, 0x00000021u, 0x000006bbu, 0x00000007u, 0x0005003bu, - 0x000006b1u, 0x000006bdu, 0x00000007u, 0x000006afu, 0x0005003bu, 0x000006b5u, 0x000006c0u, 0x00000007u, - 0x0000069fu, 0x0004003bu, 0x00000021u, 0x000006c5u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x000006ceu, - 0x00000007u, 0x0004003bu, 0x00000370u, 0x000006d7u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x000006d8u, - 0x00000007u, 0x0004003bu, 0x00000021u, 0x000006dau, 0x00000007u, 0x0004003bu, 0x00000032u, 0x000006dcu, - 0x00000007u, 0x0004003bu, 0x00000039u, 0x000006deu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006e0u, - 0x00000007u, 0x0004003bu, 0x00000370u, 0x000006edu, 0x00000007u, 0x0004003bu, 0x00000370u, 0x000006f4u, - 0x00000007u, 0x0003003eu, 0x00000371u, 0x00000049u, 0x00050041u, 0x00000376u, 0x00000377u, 0x00000375u, - 0x00000049u, 0x0004003du, 0x00000006u, 0x00000378u, 0x00000377u, 0x0003003eu, 0x00000372u, 0x00000378u, - 0x0004003du, 0x00000006u, 0x0000037au, 0x00000372u, 0x00050041u, 0x0000037eu, 0x0000037fu, 0x0000037du, - 0x0000022eu, 0x0004003du, 0x00000006u, 0x00000380u, 0x0000037fu, 0x00050086u, 0x00000006u, 0x00000381u, - 0x0000037au, 0x00000380u, 0x0003003eu, 0x00000379u, 0x00000381u, 0x0004003du, 0x00000006u, 0x00000383u, - 0x00000372u, 0x00050041u, 0x0000037eu, 0x00000384u, 0x0000037du, 0x0000022eu, 0x0004003du, 0x00000006u, - 0x00000385u, 0x00000384u, 0x00050089u, 0x00000006u, 0x00000386u, 0x00000383u, 0x00000385u, 0x0003003eu, - 0x00000382u, 0x00000386u, 0x0004003du, 0x00000006u, 0x00000387u, 0x00000379u, 0x00050041u, 0x0000037eu, - 0x00000388u, 0x0000037du, 0x000001f1u, 0x0004003du, 0x00000006u, 0x00000389u, 0x00000388u, 0x000500aeu, - 0x00000029u, 0x0000038au, 0x00000387u, 0x00000389u, 0x000300f7u, 0x0000038cu, 0x00000000u, 0x000400fau, - 0x0000038au, 0x0000038bu, 0x0000038cu, 0x000200f8u, 0x0000038bu, 0x0003003eu, 0x00000371u, 0x00000049u, - 0x0004003du, 0x00000006u, 0x0000038du, 0x00000371u, 0x000414aeu, 0x0000038du, 0x00000007u, 0x00000007u, - 0x000200f8u, 0x0000038cu, 0x0004003du, 0x00000006u, 0x00000399u, 0x00000379u, 0x00060041u, 0x0000039au, - 0x0000039bu, 0x00000398u, 0x00000122u, 0x00000399u, 0x0004003du, 0x00000394u, 0x0000039cu, 0x0000039bu, - 0x00040190u, 0x00000391u, 0x0000039du, 0x0000039cu, 0x0003003eu, 0x00000393u, 0x0000039du, 0x00050041u, - 0x00000370u, 0x000003a9u, 0x00000393u, 0x00000122u, 0x0004003du, 0x00000006u, 0x000003aau, 0x000003a9u, - 0x00060041u, 0x000003abu, 0x000003acu, 0x000003a8u, 0x00000122u, 0x000003aau, 0x0004003du, 0x000003a4u, - 0x000003adu, 0x000003acu, 0x00040190u, 0x000003a0u, 0x000003aeu, 0x000003adu, 0x0003003eu, 0x000003a2u, - 0x000003aeu, 0x00050041u, 0x00000370u, 0x000003afu, 0x000003a2u, 0x000001d2u, 0x0004003du, 0x00000006u, - 0x000003b0u, 0x000003afu, 0x000500aau, 0x00000029u, 0x000003b1u, 0x000003b0u, 0x00000049u, 0x000400a8u, - 0x00000029u, 0x000003b2u, 0x000003b1u, 0x000300f7u, 0x000003b4u, 0x00000000u, 0x000400fau, 0x000003b2u, - 0x000003b3u, 0x000003b4u, 0x000200f8u, 0x000003b3u, 0x00050041u, 0x0000037eu, 0x000003b5u, 0x0000037du, - 0x00000234u, 0x0004003du, 0x00000006u, 0x000003b6u, 0x000003b5u, 0x00050041u, 0x00000370u, 0x000003b7u, - 0x000003a2u, 0x000001d2u, 0x0004003du, 0x00000006u, 0x000003b8u, 0x000003b7u, 0x000500aeu, 0x00000029u, - 0x000003b9u, 0x000003b6u, 0x000003b8u, 0x000200f9u, 0x000003b4u, 0x000200f8u, 0x000003b4u, 0x000700f5u, - 0x00000029u, 0x000003bau, 0x000003b1u, 0x0000038cu, 0x000003b9u, 0x000003b3u, 0x000300f7u, 0x000003bcu, - 0x00000000u, 0x000400fau, 0x000003bau, 0x000003bbu, 0x000003bcu, 0x000200f8u, 0x000003bbu, 0x0003003eu, - 0x00000371u, 0x00000049u, 0x0004003du, 0x00000006u, 0x000003bdu, 0x00000371u, 0x000414aeu, 0x000003bdu, - 0x00000007u, 0x00000007u, 0x000200f8u, 0x000003bcu, 0x00050041u, 0x00000370u, 0x000003c8u, 0x000003a2u, - 0x000001d5u, 0x0004003du, 0x00000006u, 0x000003c9u, 0x000003c8u, 0x00050041u, 0x0000037eu, 0x000003cau, - 0x0000037du, 0x00000234u, 0x0004003du, 0x00000006u, 0x000003cbu, 0x000003cau, 0x00050080u, 0x00000006u, - 0x000003ccu, 0x000003c9u, 0x000003cbu, 0x00060041u, 0x000003cdu, 0x000003ceu, 0x000003c7u, 0x00000122u, - 0x000003ccu, 0x0004003du, 0x000003c3u, 0x000003cfu, 0x000003ceu, 0x00040190u, 0x000003c0u, 0x000003d0u, - 0x000003cfu, 0x0003003eu, 0x000003c2u, 0x000003d0u, 0x0003003eu, 0x000003d2u, 0x000003d3u, 0x0004003du, - 0x00000006u, 0x000003d4u, 0x00000382u, 0x00050041u, 0x00000370u, 0x000003d5u, 0x000003c2u, 0x00000122u, - 0x0004003du, 0x00000006u, 0x000003d6u, 0x000003d5u, 0x000500aeu, 0x00000029u, 0x000003d7u, 0x000003d4u, - 0x000003d6u, 0x000300f7u, 0x000003d9u, 0x00000000u, 0x000400fau, 0x000003d7u, 0x000003d8u, 0x000003d9u, - 0x000200f8u, 0x000003d8u, 0x0003003eu, 0x000003d2u, 0x000003dau, 0x0003003eu, 0x00000382u, 0x00000049u, - 0x000200f9u, 0x000003d9u, 0x000200f8u, 0x000003d9u, 0x00050041u, 0x00000370u, 0x000003dbu, 0x000003c2u, - 0x00000182u, 0x0004003du, 0x00000006u, 0x000003dcu, 0x000003dbu, 0x000500aau, 0x00000029u, 0x000003deu, - 0x000003dcu, 0x000003ddu, 0x000300f7u, 0x000003e0u, 0x00000000u, 0x000400fau, 0x000003deu, 0x000003dfu, - 0x000003e0u, 0x000200f8u, 0x000003dfu, 0x00050041u, 0x00000370u, 0x000003e1u, 0x00000393u, 0x00000182u, - 0x0004003du, 0x00000006u, 0x000003e2u, 0x000003e1u, 0x000500abu, 0x00000029u, 0x000003e3u, 0x000003e2u, - 0x00000007u, 0x000200f9u, 0x000003e0u, 0x000200f8u, 0x000003e0u, 0x000700f5u, 0x00000029u, 0x000003e4u, - 0x000003deu, 0x000003d9u, 0x000003e3u, 0x000003dfu, 0x000300f7u, 0x000003e6u, 0x00000000u, 0x000400fau, - 0x000003e4u, 0x000003e5u, 0x000003e6u, 0x000200f8u, 0x000003e5u, 0x0003003eu, 0x000003d2u, 0x000003dau, - 0x000200f9u, 0x000003e6u, 0x000200f8u, 0x000003e6u, 0x0003003eu, 0x000003e7u, 0x00000049u, 0x0004003du, - 0x00000006u, 0x000003e8u, 0x00000382u, 0x000500acu, 0x00000029u, 0x000003e9u, 0x000003e8u, 0x00000049u, - 0x000300f7u, 0x000003ebu, 0x00000000u, 0x000400fau, 0x000003e9u, 0x000003eau, 0x000003ebu, 0x000200f8u, - 0x000003eau, 0x00050041u, 0x00000370u, 0x000003f0u, 0x000003a2u, 0x000001e1u, 0x0004003du, 0x00000006u, - 0x000003f1u, 0x000003f0u, 0x00050041u, 0x00000370u, 0x000003f2u, 0x000003c2u, 0x000001d5u, 0x0004003du, - 0x00000006u, 0x000003f3u, 0x000003f2u, 0x00050080u, 0x00000006u, 0x000003f4u, 0x000003f1u, 0x000003f3u, - 0x0004003du, 0x00000006u, 0x000003f5u, 0x00000382u, 0x00050080u, 0x00000006u, 0x000003f6u, 0x000003f4u, - 0x000003f5u, 0x00050082u, 0x00000006u, 0x000003f7u, 0x000003f6u, 0x00000007u, 0x00060041u, 0x000003f8u, - 0x000003f9u, 0x000003efu, 0x00000122u, 0x000003f7u, 0x0004003du, 0x00000121u, 0x000003fau, 0x000003f9u, - 0x0004007cu, 0x00000006u, 0x000003fbu, 0x000003fau, 0x0003003eu, 0x000003e7u, 0x000003fbu, 0x000200f9u, - 0x000003ebu, 0x000200f8u, 0x000003ebu, 0x00050041u, 0x00000370u, 0x000003fdu, 0x000003a2u, 0x000001e1u, - 0x0004003du, 0x00000006u, 0x000003feu, 0x000003fdu, 0x00050041u, 0x00000370u, 0x000003ffu, 0x000003c2u, - 0x000001d5u, 0x0004003du, 0x00000006u, 0x00000400u, 0x000003ffu, 0x00050080u, 0x00000006u, 0x00000401u, - 0x000003feu, 0x00000400u, 0x0004003du, 0x00000006u, 0x00000402u, 0x00000382u, 0x00050080u, 0x00000006u, - 0x00000403u, 0x00000401u, 0x00000402u, 0x00060041u, 0x000003f8u, 0x00000404u, 0x000003efu, 0x00000122u, - 0x00000403u, 0x0004003du, 0x00000121u, 0x00000405u, 0x00000404u, 0x0004007cu, 0x00000006u, 0x00000406u, - 0x00000405u, 0x0003003eu, 0x000003fcu, 0x00000406u, 0x0004003du, 0x00000006u, 0x00000408u, 0x000003fcu, - 0x0004003du, 0x00000006u, 0x00000409u, 0x000003e7u, 0x00050082u, 0x00000006u, 0x0000040au, 0x00000408u, - 0x00000409u, 0x0003003eu, 0x00000407u, 0x0000040au, 0x0004003du, 0x00000006u, 0x0000040bu, 0x00000407u, - 0x000500b0u, 0x00000029u, 0x0000040cu, 0x0000040bu, 0x00000007u, 0x000300f7u, 0x0000040eu, 0x00000000u, - 0x000400fau, 0x0000040cu, 0x0000040du, 0x0000040eu, 0x000200f8u, 0x0000040du, 0x0003003eu, 0x000003d2u, - 0x000003dau, 0x0003003eu, 0x00000407u, 0x00000007u, 0x000200f9u, 0x0000040eu, 0x000200f8u, 0x0000040eu, - 0x00050041u, 0x00000370u, 0x00000410u, 0x000003a2u, 0x000001dbu, 0x0004003du, 0x00000006u, 0x00000411u, - 0x00000410u, 0x00050041u, 0x00000370u, 0x00000412u, 0x000003c2u, 0x000001dbu, 0x0004003du, 0x00000006u, - 0x00000413u, 0x00000412u, 0x00050080u, 0x00000006u, 0x00000414u, 0x00000411u, 0x00000413u, 0x0004003du, - 0x00000006u, 0x00000415u, 0x000003e7u, 0x00050080u, 0x00000006u, 0x00000416u, 0x00000414u, 0x00000415u, - 0x0003003eu, 0x0000040fu, 0x00000416u, 0x00050041u, 0x00000417u, 0x00000419u, 0x00000393u, 0x00000136u, - 0x0004003du, 0x00000390u, 0x0000041au, 0x00000419u, 0x0003003eu, 0x00000418u, 0x0000041au, 0x0004003du, - 0x00000006u, 0x00000420u, 0x0000040fu, 0x00060041u, 0x00000421u, 0x00000422u, 0x0000041fu, 0x00000122u, - 0x00000420u, 0x0004003du, 0x00000390u, 0x00000423u, 0x00000422u, 0x0003003eu, 0x0000041bu, 0x00000423u, - 0x0004003du, 0x00000006u, 0x00000425u, 0x0000040fu, 0x0004003du, 0x00000006u, 0x00000426u, 0x00000407u, - 0x00050080u, 0x00000006u, 0x00000427u, 0x00000425u, 0x00000426u, 0x00050082u, 0x00000006u, 0x00000428u, - 0x00000427u, 0x00000007u, 0x00060041u, 0x00000421u, 0x00000429u, 0x0000041fu, 0x00000122u, 0x00000428u, - 0x0004003du, 0x00000390u, 0x0000042au, 0x00000429u, 0x0003003eu, 0x00000424u, 0x0000042au, 0x0004003du, - 0x00000390u, 0x0000042cu, 0x00000418u, 0x0004003du, 0x00000390u, 0x0000042du, 0x0000041bu, 0x000500b1u, - 0x00000029u, 0x0000042eu, 0x0000042cu, 0x0000042du, 0x0003003eu, 0x0000042bu, 0x0000042eu, 0x0004003du, - 0x00000390u, 0x00000430u, 0x00000418u, 0x0004003du, 0x00000390u, 0x00000431u, 0x00000424u, 0x000500adu, - 0x00000029u, 0x00000432u, 0x00000430u, 0x00000431u, 0x0003003eu, 0x0000042fu, 0x00000432u, 0x0004003du, - 0x00000029u, 0x00000433u, 0x0000042bu, 0x000300f7u, 0x00000435u, 0x00000000u, 0x000400fau, 0x00000433u, - 0x00000434u, 0x00000445u, 0x000200f8u, 0x00000434u, 0x0004003du, 0x00000390u, 0x00000437u, 0x0000041bu, - 0x0004003du, 0x00000390u, 0x00000438u, 0x00000418u, 0x00050082u, 0x00000390u, 0x00000439u, 0x00000437u, - 0x00000438u, 0x0003003eu, 0x00000436u, 0x00000439u, 0x0004003du, 0x00000390u, 0x0000043au, 0x00000436u, - 0x00050041u, 0x0000043bu, 0x0000043cu, 0x0000037du, 0x000001e1u, 0x0004003du, 0x00000121u, 0x0000043du, - 0x0000043cu, 0x00040072u, 0x00000390u, 0x0000043eu, 0x0000043du, 0x000500adu, 0x00000029u, 0x0000043fu, - 0x0000043au, 0x0000043eu, 0x0004003du, 0x00000006u, 0x00000440u, 0x00000407u, 0x000500b0u, 0x00000029u, - 0x00000441u, 0x00000440u, 0x00000055u, 0x000500a6u, 0x00000029u, 0x00000442u, 0x0000043fu, 0x00000441u, - 0x000300f7u, 0x00000444u, 0x00000000u, 0x000400fau, 0x00000442u, 0x00000443u, 0x00000444u, 0x000200f8u, - 0x00000443u, 0x0003003eu, 0x000003d2u, 0x000003dau, 0x000200f9u, 0x00000444u, 0x000200f8u, 0x00000444u, - 0x000200f9u, 0x00000435u, 0x000200f8u, 0x00000445u, 0x0004003du, 0x00000029u, 0x00000446u, 0x0000042fu, - 0x000300f7u, 0x00000448u, 0x00000000u, 0x000400fau, 0x00000446u, 0x00000447u, 0x00000448u, 0x000200f8u, - 0x00000447u, 0x0004003du, 0x00000390u, 0x0000044au, 0x00000418u, 0x0004003du, 0x00000390u, 0x0000044bu, - 0x00000424u, 0x00050082u, 0x00000390u, 0x0000044cu, 0x0000044au, 0x0000044bu, 0x0003003eu, 0x00000449u, - 0x0000044cu, 0x0004003du, 0x00000390u, 0x0000044du, 0x00000449u, 0x00050041u, 0x0000043bu, 0x0000044eu, - 0x0000037du, 0x000001e1u, 0x0004003du, 0x00000121u, 0x0000044fu, 0x0000044eu, 0x00040072u, 0x00000390u, - 0x00000450u, 0x0000044fu, 0x000500adu, 0x00000029u, 0x00000451u, 0x0000044du, 0x00000450u, 0x0004003du, - 0x00000006u, 0x00000452u, 0x00000407u, 0x000500b0u, 0x00000029u, 0x00000453u, 0x00000452u, 0x00000055u, - 0x000500a6u, 0x00000029u, 0x00000454u, 0x00000451u, 0x00000453u, 0x000300f7u, 0x00000456u, 0x00000000u, - 0x000400fau, 0x00000454u, 0x00000455u, 0x00000456u, 0x000200f8u, 0x00000455u, 0x0003003eu, 0x000003d2u, - 0x000003dau, 0x000200f9u, 0x00000456u, 0x000200f8u, 0x00000456u, 0x000200f9u, 0x00000448u, 0x000200f8u, - 0x00000448u, 0x000200f9u, 0x00000435u, 0x000200f8u, 0x00000435u, 0x0003003eu, 0x00000458u, 0x00000122u, - 0x0003003eu, 0x00000459u, 0x00000122u, 0x0003003eu, 0x0000045au, 0x00000073u, 0x0004003du, 0x00000006u, - 0x0000045bu, 0x00000407u, 0x000500aau, 0x00000029u, 0x0000045cu, 0x0000045bu, 0x00000007u, 0x000300f7u, - 0x0000045eu, 0x00000000u, 0x000400fau, 0x0000045cu, 0x0000045du, 0x0000045fu, 0x000200f8u, 0x0000045du, - 0x0003003eu, 0x00000458u, 0x00000122u, 0x0003003eu, 0x00000459u, 0x00000122u, 0x0003003eu, 0x0000045au, - 0x00000073u, 0x000200f9u, 0x0000045eu, 0x000200f8u, 0x0000045fu, 0x0004003du, 0x00000029u, 0x00000460u, - 0x0000042bu, 0x000300f7u, 0x00000462u, 0x00000000u, 0x000400fau, 0x00000460u, 0x00000461u, 0x0000047bu, - 0x000200f8u, 0x00000461u, 0x0003003eu, 0x00000458u, 0x00000122u, 0x0003003eu, 0x00000459u, 0x0000012cu, - 0x0004003du, 0x00000006u, 0x00000464u, 0x0000040fu, 0x00060041u, 0x00000421u, 0x00000465u, 0x0000041fu, - 0x00000122u, 0x00000464u, 0x0004003du, 0x00000390u, 0x00000466u, 0x00000465u, 0x0003003eu, 0x00000463u, - 0x00000466u, 0x0004003du, 0x00000006u, 0x00000468u, 0x0000040fu, 0x00050080u, 0x00000006u, 0x00000469u, - 0x00000468u, 0x00000007u, 0x00060041u, 0x00000421u, 0x0000046au, 0x0000041fu, 0x00000122u, 0x00000469u, - 0x0004003du, 0x00000390u, 0x0000046bu, 0x0000046au, 0x0003003eu, 0x00000467u, 0x0000046bu, 0x0004003du, - 0x00000390u, 0x0000046cu, 0x00000467u, 0x0004003du, 0x00000390u, 0x0000046du, 0x00000463u, 0x000500adu, - 0x00000029u, 0x0000046eu, 0x0000046cu, 0x0000046du, 0x000300f7u, 0x00000470u, 0x00000000u, 0x000400fau, - 0x0000046eu, 0x0000046fu, 0x0000047au, 0x000200f8u, 0x0000046fu, 0x0004003du, 0x00000390u, 0x00000471u, - 0x00000418u, 0x0004003du, 0x00000390u, 0x00000472u, 0x00000463u, 0x00050082u, 0x00000390u, 0x00000473u, - 0x00000471u, 0x00000472u, 0x0004006fu, 0x00000008u, 0x00000474u, 0x00000473u, 0x0004003du, 0x00000390u, - 0x00000475u, 0x00000467u, 0x0004003du, 0x00000390u, 0x00000476u, 0x00000463u, 0x00050082u, 0x00000390u, - 0x00000477u, 0x00000475u, 0x00000476u, 0x0004006fu, 0x00000008u, 0x00000478u, 0x00000477u, 0x00050088u, - 0x00000008u, 0x00000479u, 0x00000474u, 0x00000478u, 0x0003003eu, 0x0000045au, 0x00000479u, 0x000200f9u, - 0x00000470u, 0x000200f8u, 0x0000047au, 0x0003003eu, 0x0000045au, 0x00000073u, 0x000200f9u, 0x00000470u, - 0x000200f8u, 0x00000470u, 0x000200f9u, 0x00000462u, 0x000200f8u, 0x0000047bu, 0x0004003du, 0x00000029u, - 0x0000047cu, 0x0000042fu, 0x000300f7u, 0x0000047eu, 0x00000000u, 0x000400fau, 0x0000047cu, 0x0000047du, - 0x000004a2u, 0x000200f8u, 0x0000047du, 0x0004003du, 0x00000006u, 0x0000047fu, 0x00000407u, 0x0004007cu, - 0x00000121u, 0x00000480u, 0x0000047fu, 0x00050082u, 0x00000121u, 0x00000481u, 0x00000480u, 0x00000136u, - 0x0003003eu, 0x00000458u, 0x00000481u, 0x0004003du, 0x00000006u, 0x00000482u, 0x00000407u, 0x0004007cu, - 0x00000121u, 0x00000483u, 0x00000482u, 0x00050082u, 0x00000121u, 0x00000484u, 0x00000483u, 0x0000012cu, - 0x0003003eu, 0x00000459u, 0x00000484u, 0x0004003du, 0x00000006u, 0x00000486u, 0x0000040fu, 0x0004003du, - 0x00000121u, 0x00000487u, 0x00000458u, 0x0004007cu, 0x00000006u, 0x00000488u, 0x00000487u, 0x00050080u, - 0x00000006u, 0x00000489u, 0x00000486u, 0x00000488u, 0x00060041u, 0x00000421u, 0x0000048au, 0x0000041fu, - 0x00000122u, 0x00000489u, 0x0004003du, 0x00000390u, 0x0000048bu, 0x0000048au, 0x0003003eu, 0x00000485u, - 0x0000048bu, 0x0004003du, 0x00000006u, 0x0000048du, 0x0000040fu, 0x0004003du, 0x00000121u, 0x0000048eu, - 0x00000459u, 0x0004007cu, 0x00000006u, 0x0000048fu, 0x0000048eu, 0x00050080u, 0x00000006u, 0x00000490u, - 0x0000048du, 0x0000048fu, 0x00060041u, 0x00000421u, 0x00000491u, 0x0000041fu, 0x00000122u, 0x00000490u, - 0x0004003du, 0x00000390u, 0x00000492u, 0x00000491u, 0x0003003eu, 0x0000048cu, 0x00000492u, 0x0004003du, - 0x00000390u, 0x00000493u, 0x0000048cu, 0x0004003du, 0x00000390u, 0x00000494u, 0x00000485u, 0x000500adu, - 0x00000029u, 0x00000495u, 0x00000493u, 0x00000494u, 0x000300f7u, 0x00000497u, 0x00000000u, 0x000400fau, - 0x00000495u, 0x00000496u, 0x000004a1u, 0x000200f8u, 0x00000496u, 0x0004003du, 0x00000390u, 0x00000498u, - 0x00000418u, 0x0004003du, 0x00000390u, 0x00000499u, 0x00000485u, 0x00050082u, 0x00000390u, 0x0000049au, - 0x00000498u, 0x00000499u, 0x0004006fu, 0x00000008u, 0x0000049bu, 0x0000049au, 0x0004003du, 0x00000390u, - 0x0000049cu, 0x0000048cu, 0x0004003du, 0x00000390u, 0x0000049du, 0x00000485u, 0x00050082u, 0x00000390u, - 0x0000049eu, 0x0000049cu, 0x0000049du, 0x0004006fu, 0x00000008u, 0x0000049fu, 0x0000049eu, 0x00050088u, - 0x00000008u, 0x000004a0u, 0x0000049bu, 0x0000049fu, 0x0003003eu, 0x0000045au, 0x000004a0u, 0x000200f9u, - 0x00000497u, 0x000200f8u, 0x000004a1u, 0x0003003eu, 0x0000045au, 0x00000074u, 0x000200f9u, 0x00000497u, - 0x000200f8u, 0x00000497u, 0x000200f9u, 0x0000047eu, 0x000200f8u, 0x000004a2u, 0x0003003eu, 0x000004a3u, - 0x00000122u, 0x0004003du, 0x00000006u, 0x000004a5u, 0x00000407u, 0x0004007cu, 0x00000121u, 0x000004a6u, - 0x000004a5u, 0x00050082u, 0x00000121u, 0x000004a7u, 0x000004a6u, 0x00000136u, 0x0003003eu, 0x000004a4u, - 0x000004a7u, 0x0003003eu, 0x00000458u, 0x00000122u, 0x000200f9u, 0x000004a8u, 0x000200f8u, 0x000004a8u, - 0x000400f6u, 0x000004aau, 0x000004abu, 0x00000000u, 0x000200f9u, 0x000004acu, 0x000200f8u, 0x000004acu, - 0x0004003du, 0x00000121u, 0x000004adu, 0x000004a3u, 0x0004003du, 0x00000121u, 0x000004aeu, 0x000004a4u, - 0x000500b3u, 0x00000029u, 0x000004afu, 0x000004adu, 0x000004aeu, 0x000400fau, 0x000004afu, 0x000004a9u, - 0x000004aau, 0x000200f8u, 0x000004a9u, 0x0004003du, 0x00000121u, 0x000004b1u, 0x000004a3u, 0x0004003du, - 0x00000121u, 0x000004b2u, 0x000004a4u, 0x00050080u, 0x00000121u, 0x000004b3u, 0x000004b1u, 0x000004b2u, - 0x00050087u, 0x00000121u, 0x000004b4u, 0x000004b3u, 0x00000136u, 0x0003003eu, 0x000004b0u, 0x000004b4u, - 0x0004003du, 0x00000006u, 0x000004b6u, 0x0000040fu, 0x0004003du, 0x00000121u, 0x000004b7u, 0x000004b0u, - 0x0004007cu, 0x00000006u, 0x000004b8u, 0x000004b7u, 0x00050080u, 0x00000006u, 0x000004b9u, 0x000004b6u, - 0x000004b8u, 0x00060041u, 0x00000421u, 0x000004bau, 0x0000041fu, 0x00000122u, 0x000004b9u, 0x0004003du, - 0x00000390u, 0x000004bbu, 0x000004bau, 0x0003003eu, 0x000004b5u, 0x000004bbu, 0x0004003du, 0x00000006u, - 0x000004bdu, 0x0000040fu, 0x0004003du, 0x00000121u, 0x000004beu, 0x000004b0u, 0x0004007cu, 0x00000006u, - 0x000004bfu, 0x000004beu, 0x00050080u, 0x00000006u, 0x000004c0u, 0x000004bdu, 0x000004bfu, 0x00050080u, - 0x00000006u, 0x000004c1u, 0x000004c0u, 0x00000007u, 0x00060041u, 0x00000421u, 0x000004c2u, 0x0000041fu, - 0x00000122u, 0x000004c1u, 0x0004003du, 0x00000390u, 0x000004c3u, 0x000004c2u, 0x0003003eu, 0x000004bcu, - 0x000004c3u, 0x0004003du, 0x00000390u, 0x000004c4u, 0x000004b5u, 0x0004003du, 0x00000390u, 0x000004c5u, - 0x00000418u, 0x000500b3u, 0x00000029u, 0x000004c6u, 0x000004c4u, 0x000004c5u, 0x0004003du, 0x00000390u, - 0x000004c7u, 0x00000418u, 0x0004003du, 0x00000390u, 0x000004c8u, 0x000004bcu, 0x000500b3u, 0x00000029u, - 0x000004c9u, 0x000004c7u, 0x000004c8u, 0x000500a7u, 0x00000029u, 0x000004cau, 0x000004c6u, 0x000004c9u, - 0x000300f7u, 0x000004ccu, 0x00000000u, 0x000400fau, 0x000004cau, 0x000004cbu, 0x000004cfu, 0x000200f8u, - 0x000004cbu, 0x0004003du, 0x00000121u, 0x000004cdu, 0x000004b0u, 0x0003003eu, 0x00000458u, 0x000004cdu, - 0x000200f9u, 0x000004aau, 0x000200f8u, 0x000004cfu, 0x0004003du, 0x00000390u, 0x000004d0u, 0x00000418u, - 0x0004003du, 0x00000390u, 0x000004d1u, 0x000004b5u, 0x000500b1u, 0x00000029u, 0x000004d2u, 0x000004d0u, - 0x000004d1u, 0x000300f7u, 0x000004d4u, 0x00000000u, 0x000400fau, 0x000004d2u, 0x000004d3u, 0x000004d7u, - 0x000200f8u, 0x000004d3u, 0x0004003du, 0x00000121u, 0x000004d5u, 0x000004b0u, 0x00050082u, 0x00000121u, - 0x000004d6u, 0x000004d5u, 0x0000012cu, 0x0003003eu, 0x000004a4u, 0x000004d6u, 0x000200f9u, 0x000004d4u, - 0x000200f8u, 0x000004d7u, 0x0004003du, 0x00000121u, 0x000004d8u, 0x000004b0u, 0x00050080u, 0x00000121u, - 0x000004d9u, 0x000004d8u, 0x0000012cu, 0x0003003eu, 0x000004a3u, 0x000004d9u, 0x0004003du, 0x00000121u, - 0x000004dau, 0x000004b0u, 0x00050080u, 0x00000121u, 0x000004dbu, 0x000004dau, 0x0000012cu, 0x0003003eu, - 0x00000458u, 0x000004dbu, 0x000200f9u, 0x000004d4u, 0x000200f8u, 0x000004d4u, 0x000200f9u, 0x000004ccu, - 0x000200f8u, 0x000004ccu, 0x000200f9u, 0x000004abu, 0x000200f8u, 0x000004abu, 0x000200f9u, 0x000004a8u, - 0x000200f8u, 0x000004aau, 0x0004003du, 0x00000121u, 0x000004dcu, 0x00000458u, 0x00050080u, 0x00000121u, - 0x000004ddu, 0x000004dcu, 0x0000012cu, 0x0004003du, 0x00000006u, 0x000004deu, 0x00000407u, 0x0004007cu, - 0x00000121u, 0x000004dfu, 0x000004deu, 0x00050082u, 0x00000121u, 0x000004e0u, 0x000004dfu, 0x0000012cu, - 0x0007000cu, 0x00000121u, 0x000004e1u, 0x00000001u, 0x00000027u, 0x000004ddu, 0x000004e0u, 0x0003003eu, - 0x00000459u, 0x000004e1u, 0x0004003du, 0x00000006u, 0x000004e3u, 0x0000040fu, 0x0004003du, 0x00000121u, - 0x000004e4u, 0x00000458u, 0x0004007cu, 0x00000006u, 0x000004e5u, 0x000004e4u, 0x00050080u, 0x00000006u, - 0x000004e6u, 0x000004e3u, 0x000004e5u, 0x00060041u, 0x00000421u, 0x000004e7u, 0x0000041fu, 0x00000122u, - 0x000004e6u, 0x0004003du, 0x00000390u, 0x000004e8u, 0x000004e7u, 0x0003003eu, 0x000004e2u, 0x000004e8u, - 0x0004003du, 0x00000006u, 0x000004eau, 0x0000040fu, 0x0004003du, 0x00000121u, 0x000004ebu, 0x00000459u, - 0x0004007cu, 0x00000006u, 0x000004ecu, 0x000004ebu, 0x00050080u, 0x00000006u, 0x000004edu, 0x000004eau, - 0x000004ecu, 0x00060041u, 0x00000421u, 0x000004eeu, 0x0000041fu, 0x00000122u, 0x000004edu, 0x0004003du, - 0x00000390u, 0x000004efu, 0x000004eeu, 0x0003003eu, 0x000004e9u, 0x000004efu, 0x0004003du, 0x00000390u, - 0x000004f0u, 0x000004e9u, 0x0004003du, 0x00000390u, 0x000004f1u, 0x000004e2u, 0x000500adu, 0x00000029u, - 0x000004f2u, 0x000004f0u, 0x000004f1u, 0x000300f7u, 0x000004f4u, 0x00000000u, 0x000400fau, 0x000004f2u, - 0x000004f3u, 0x000004feu, 0x000200f8u, 0x000004f3u, 0x0004003du, 0x00000390u, 0x000004f5u, 0x00000418u, - 0x0004003du, 0x00000390u, 0x000004f6u, 0x000004e2u, 0x00050082u, 0x00000390u, 0x000004f7u, 0x000004f5u, - 0x000004f6u, 0x0004006fu, 0x00000008u, 0x000004f8u, 0x000004f7u, 0x0004003du, 0x00000390u, 0x000004f9u, - 0x000004e9u, 0x0004003du, 0x00000390u, 0x000004fau, 0x000004e2u, 0x00050082u, 0x00000390u, 0x000004fbu, - 0x000004f9u, 0x000004fau, 0x0004006fu, 0x00000008u, 0x000004fcu, 0x000004fbu, 0x00050088u, 0x00000008u, - 0x000004fdu, 0x000004f8u, 0x000004fcu, 0x0003003eu, 0x0000045au, 0x000004fdu, 0x000200f9u, 0x000004f4u, - 0x000200f8u, 0x000004feu, 0x0003003eu, 0x0000045au, 0x00000073u, 0x000200f9u, 0x000004f4u, 0x000200f8u, - 0x000004f4u, 0x000200f9u, 0x0000047eu, 0x000200f8u, 0x0000047eu, 0x000200f9u, 0x00000462u, 0x000200f8u, - 0x00000462u, 0x000200f9u, 0x0000045eu, 0x000200f8u, 0x0000045eu, 0x00050041u, 0x00000370u, 0x00000500u, - 0x000003a2u, 0x00000202u, 0x0004003du, 0x00000006u, 0x00000501u, 0x00000500u, 0x00050041u, 0x00000370u, - 0x00000502u, 0x000003c2u, 0x000001e1u, 0x0004003du, 0x00000006u, 0x00000503u, 0x00000502u, 0x00050080u, - 0x00000006u, 0x00000504u, 0x00000501u, 0x00000503u, 0x0004003du, 0x00000006u, 0x00000505u, 0x000003e7u, - 0x00050084u, 0x00000006u, 0x00000506u, 0x00000505u, 0x0000005cu, 0x00050080u, 0x00000006u, 0x00000507u, - 0x00000504u, 0x00000506u, 0x0003003eu, 0x000004ffu, 0x00000507u, 0x00050041u, 0x00000370u, 0x00000509u, - 0x000003a2u, 0x00000202u, 0x0004003du, 0x00000006u, 0x0000050au, 0x00000509u, 0x00050041u, 0x00000370u, - 0x0000050bu, 0x000003c2u, 0x000001e9u, 0x0004003du, 0x00000006u, 0x0000050cu, 0x0000050bu, 0x00050080u, - 0x00000006u, 0x0000050du, 0x0000050au, 0x0000050cu, 0x0004003du, 0x00000006u, 0x0000050eu, 0x000003e7u, - 0x00050084u, 0x00000006u, 0x00000510u, 0x0000050eu, 0x0000050fu, 0x00050080u, 0x00000006u, 0x00000511u, - 0x0000050du, 0x00000510u, 0x0003003eu, 0x00000508u, 0x00000511u, 0x0004003du, 0x00000006u, 0x00000517u, - 0x000004ffu, 0x0004003du, 0x00000121u, 0x00000518u, 0x00000458u, 0x0004007cu, 0x00000006u, 0x00000519u, - 0x00000518u, 0x00050084u, 0x00000006u, 0x0000051au, 0x00000519u, 0x0000005cu, 0x00050080u, 0x00000006u, - 0x0000051bu, 0x00000517u, 0x0000051au, 0x00060041u, 0x0000051cu, 0x0000051du, 0x00000516u, 0x00000122u, - 0x0000051bu, 0x0004003du, 0x00000008u, 0x0000051eu, 0x0000051du, 0x0004003du, 0x00000006u, 0x0000051fu, - 0x000004ffu, 0x0004003du, 0x00000121u, 0x00000520u, 0x00000458u, 0x0004007cu, 0x00000006u, 0x00000521u, - 0x00000520u, 0x00050084u, 0x00000006u, 0x00000522u, 0x00000521u, 0x0000005cu, 0x00050080u, 0x00000006u, - 0x00000523u, 0x0000051fu, 0x00000522u, 0x00050080u, 0x00000006u, 0x00000524u, 0x00000523u, 0x00000007u, - 0x00060041u, 0x0000051cu, 0x00000525u, 0x00000516u, 0x00000122u, 0x00000524u, 0x0004003du, 0x00000008u, - 0x00000526u, 0x00000525u, 0x0004003du, 0x00000006u, 0x00000527u, 0x000004ffu, 0x0004003du, 0x00000121u, - 0x00000528u, 0x00000458u, 0x0004007cu, 0x00000006u, 0x00000529u, 0x00000528u, 0x00050084u, 0x00000006u, - 0x0000052au, 0x00000529u, 0x0000005cu, 0x00050080u, 0x00000006u, 0x0000052bu, 0x00000527u, 0x0000052au, - 0x00050080u, 0x00000006u, 0x0000052cu, 0x0000052bu, 0x00000055u, 0x00060041u, 0x0000051cu, 0x0000052du, - 0x00000516u, 0x00000122u, 0x0000052cu, 0x0004003du, 0x00000008u, 0x0000052eu, 0x0000052du, 0x00060050u, - 0x0000001bu, 0x0000052fu, 0x0000051eu, 0x00000526u, 0x0000052eu, 0x0003003eu, 0x00000512u, 0x0000052fu, - 0x0004003du, 0x00000006u, 0x00000531u, 0x000004ffu, 0x0004003du, 0x00000121u, 0x00000532u, 0x00000459u, - 0x0004007cu, 0x00000006u, 0x00000533u, 0x00000532u, 0x00050084u, 0x00000006u, 0x00000534u, 0x00000533u, - 0x0000005cu, 0x00050080u, 0x00000006u, 0x00000535u, 0x00000531u, 0x00000534u, 0x00060041u, 0x0000051cu, - 0x00000536u, 0x00000516u, 0x00000122u, 0x00000535u, 0x0004003du, 0x00000008u, 0x00000537u, 0x00000536u, - 0x0004003du, 0x00000006u, 0x00000538u, 0x000004ffu, 0x0004003du, 0x00000121u, 0x00000539u, 0x00000459u, - 0x0004007cu, 0x00000006u, 0x0000053au, 0x00000539u, 0x00050084u, 0x00000006u, 0x0000053bu, 0x0000053au, - 0x0000005cu, 0x00050080u, 0x00000006u, 0x0000053cu, 0x00000538u, 0x0000053bu, 0x00050080u, 0x00000006u, - 0x0000053du, 0x0000053cu, 0x00000007u, 0x00060041u, 0x0000051cu, 0x0000053eu, 0x00000516u, 0x00000122u, - 0x0000053du, 0x0004003du, 0x00000008u, 0x0000053fu, 0x0000053eu, 0x0004003du, 0x00000006u, 0x00000540u, - 0x000004ffu, 0x0004003du, 0x00000121u, 0x00000541u, 0x00000459u, 0x0004007cu, 0x00000006u, 0x00000542u, - 0x00000541u, 0x00050084u, 0x00000006u, 0x00000543u, 0x00000542u, 0x0000005cu, 0x00050080u, 0x00000006u, - 0x00000544u, 0x00000540u, 0x00000543u, 0x00050080u, 0x00000006u, 0x00000545u, 0x00000544u, 0x00000055u, - 0x00060041u, 0x0000051cu, 0x00000546u, 0x00000516u, 0x00000122u, 0x00000545u, 0x0004003du, 0x00000008u, - 0x00000547u, 0x00000546u, 0x00060050u, 0x0000001bu, 0x00000548u, 0x00000537u, 0x0000053fu, 0x00000547u, - 0x0003003eu, 0x00000530u, 0x00000548u, 0x0004003du, 0x00000006u, 0x0000054au, 0x00000508u, 0x0004003du, - 0x00000121u, 0x0000054bu, 0x00000458u, 0x0004007cu, 0x00000006u, 0x0000054cu, 0x0000054bu, 0x00050084u, - 0x00000006u, 0x0000054du, 0x0000054cu, 0x0000050fu, 0x00050080u, 0x00000006u, 0x0000054eu, 0x0000054au, - 0x0000054du, 0x00060041u, 0x0000051cu, 0x0000054fu, 0x00000516u, 0x00000122u, 0x0000054eu, 0x0004003du, - 0x00000008u, 0x00000550u, 0x0000054fu, 0x0004003du, 0x00000006u, 0x00000551u, 0x00000508u, 0x0004003du, - 0x00000121u, 0x00000552u, 0x00000458u, 0x0004007cu, 0x00000006u, 0x00000553u, 0x00000552u, 0x00050084u, - 0x00000006u, 0x00000554u, 0x00000553u, 0x0000050fu, 0x00050080u, 0x00000006u, 0x00000555u, 0x00000551u, - 0x00000554u, 0x00050080u, 0x00000006u, 0x00000556u, 0x00000555u, 0x00000007u, 0x00060041u, 0x0000051cu, - 0x00000557u, 0x00000516u, 0x00000122u, 0x00000556u, 0x0004003du, 0x00000008u, 0x00000558u, 0x00000557u, - 0x0004003du, 0x00000006u, 0x00000559u, 0x00000508u, 0x0004003du, 0x00000121u, 0x0000055au, 0x00000458u, - 0x0004007cu, 0x00000006u, 0x0000055bu, 0x0000055au, 0x00050084u, 0x00000006u, 0x0000055cu, 0x0000055bu, - 0x0000050fu, 0x00050080u, 0x00000006u, 0x0000055du, 0x00000559u, 0x0000055cu, 0x00050080u, 0x00000006u, - 0x0000055eu, 0x0000055du, 0x00000055u, 0x00060041u, 0x0000051cu, 0x0000055fu, 0x00000516u, 0x00000122u, - 0x0000055eu, 0x0004003du, 0x00000008u, 0x00000560u, 0x0000055fu, 0x0004003du, 0x00000006u, 0x00000561u, - 0x00000508u, 0x0004003du, 0x00000121u, 0x00000562u, 0x00000458u, 0x0004007cu, 0x00000006u, 0x00000563u, - 0x00000562u, 0x00050084u, 0x00000006u, 0x00000564u, 0x00000563u, 0x0000050fu, 0x00050080u, 0x00000006u, - 0x00000565u, 0x00000561u, 0x00000564u, 0x00050080u, 0x00000006u, 0x00000566u, 0x00000565u, 0x0000005cu, - 0x00060041u, 0x0000051cu, 0x00000567u, 0x00000516u, 0x00000122u, 0x00000566u, 0x0004003du, 0x00000008u, - 0x00000568u, 0x00000567u, 0x00070050u, 0x00000009u, 0x00000569u, 0x00000550u, 0x00000558u, 0x00000560u, - 0x00000568u, 0x0003003eu, 0x00000549u, 0x00000569u, 0x0004003du, 0x00000006u, 0x0000056bu, 0x00000508u, - 0x0004003du, 0x00000121u, 0x0000056cu, 0x00000459u, 0x0004007cu, 0x00000006u, 0x0000056du, 0x0000056cu, - 0x00050084u, 0x00000006u, 0x0000056eu, 0x0000056du, 0x0000050fu, 0x00050080u, 0x00000006u, 0x0000056fu, - 0x0000056bu, 0x0000056eu, 0x00060041u, 0x0000051cu, 0x00000570u, 0x00000516u, 0x00000122u, 0x0000056fu, - 0x0004003du, 0x00000008u, 0x00000571u, 0x00000570u, 0x0004003du, 0x00000006u, 0x00000572u, 0x00000508u, - 0x0004003du, 0x00000121u, 0x00000573u, 0x00000459u, 0x0004007cu, 0x00000006u, 0x00000574u, 0x00000573u, - 0x00050084u, 0x00000006u, 0x00000575u, 0x00000574u, 0x0000050fu, 0x00050080u, 0x00000006u, 0x00000576u, - 0x00000572u, 0x00000575u, 0x00050080u, 0x00000006u, 0x00000577u, 0x00000576u, 0x00000007u, 0x00060041u, - 0x0000051cu, 0x00000578u, 0x00000516u, 0x00000122u, 0x00000577u, 0x0004003du, 0x00000008u, 0x00000579u, - 0x00000578u, 0x0004003du, 0x00000006u, 0x0000057au, 0x00000508u, 0x0004003du, 0x00000121u, 0x0000057bu, - 0x00000459u, 0x0004007cu, 0x00000006u, 0x0000057cu, 0x0000057bu, 0x00050084u, 0x00000006u, 0x0000057du, - 0x0000057cu, 0x0000050fu, 0x00050080u, 0x00000006u, 0x0000057eu, 0x0000057au, 0x0000057du, 0x00050080u, - 0x00000006u, 0x0000057fu, 0x0000057eu, 0x00000055u, 0x00060041u, 0x0000051cu, 0x00000580u, 0x00000516u, - 0x00000122u, 0x0000057fu, 0x0004003du, 0x00000008u, 0x00000581u, 0x00000580u, 0x0004003du, 0x00000006u, - 0x00000582u, 0x00000508u, 0x0004003du, 0x00000121u, 0x00000583u, 0x00000459u, 0x0004007cu, 0x00000006u, - 0x00000584u, 0x00000583u, 0x00050084u, 0x00000006u, 0x00000585u, 0x00000584u, 0x0000050fu, 0x00050080u, - 0x00000006u, 0x00000586u, 0x00000582u, 0x00000585u, 0x00050080u, 0x00000006u, 0x00000587u, 0x00000586u, - 0x0000005cu, 0x00060041u, 0x0000051cu, 0x00000588u, 0x00000516u, 0x00000122u, 0x00000587u, 0x0004003du, - 0x00000008u, 0x00000589u, 0x00000588u, 0x00070050u, 0x00000009u, 0x0000058au, 0x00000571u, 0x00000579u, - 0x00000581u, 0x00000589u, 0x0003003eu, 0x0000056au, 0x0000058au, 0x0004003du, 0x0000001bu, 0x0000058cu, - 0x00000512u, 0x0004003du, 0x0000001bu, 0x0000058du, 0x00000530u, 0x0004003du, 0x00000008u, 0x0000058eu, - 0x0000045au, 0x00060050u, 0x0000001bu, 0x0000058fu, 0x0000058eu, 0x0000058eu, 0x0000058eu, 0x0008000cu, - 0x0000001bu, 0x00000590u, 0x00000001u, 0x0000002eu, 0x0000058cu, 0x0000058du, 0x0000058fu, 0x0003003eu, - 0x0000058bu, 0x00000590u, 0x0004003du, 0x00000008u, 0x00000592u, 0x0000045au, 0x0008000cu, 0x00000008u, - 0x00000593u, 0x00000001u, 0x0000002bu, 0x00000592u, 0x00000073u, 0x00000074u, 0x0003003eu, 0x00000591u, - 0x00000593u, 0x0004003du, 0x00000009u, 0x00000596u, 0x00000549u, 0x0003003eu, 0x00000595u, 0x00000596u, - 0x0004003du, 0x00000009u, 0x00000598u, 0x0000056au, 0x0003003eu, 0x00000597u, 0x00000598u, 0x0004003du, - 0x00000008u, 0x0000059au, 0x00000591u, 0x0003003eu, 0x00000599u, 0x0000059au, 0x00070039u, 0x00000009u, - 0x0000059bu, 0x00000019u, 0x00000595u, 0x00000597u, 0x00000599u, 0x0003003eu, 0x00000594u, 0x0000059bu, - 0x00050041u, 0x00000370u, 0x0000059du, 0x000003a2u, 0x00000202u, 0x0004003du, 0x00000006u, 0x0000059eu, - 0x0000059du, 0x00050041u, 0x00000370u, 0x0000059fu, 0x000003c2u, 0x000001f1u, 0x0004003du, 0x00000006u, - 0x000005a0u, 0x0000059fu, 0x00050080u, 0x00000006u, 0x000005a1u, 0x0000059eu, 0x000005a0u, 0x0004003du, - 0x00000006u, 0x000005a2u, 0x00000382u, 0x00050084u, 0x00000006u, 0x000005a3u, 0x000005a2u, 0x0000005cu, - 0x00050080u, 0x00000006u, 0x000005a4u, 0x000005a1u, 0x000005a3u, 0x0003003eu, 0x0000059cu, 0x000005a4u, - 0x0004003du, 0x00000006u, 0x000005a6u, 0x0000059cu, 0x00060041u, 0x0000051cu, 0x000005a7u, 0x00000516u, - 0x00000122u, 0x000005a6u, 0x0004003du, 0x00000008u, 0x000005a8u, 0x000005a7u, 0x0004003du, 0x00000006u, - 0x000005a9u, 0x0000059cu, 0x00050080u, 0x00000006u, 0x000005aau, 0x000005a9u, 0x00000007u, 0x00060041u, - 0x0000051cu, 0x000005abu, 0x00000516u, 0x00000122u, 0x000005aau, 0x0004003du, 0x00000008u, 0x000005acu, - 0x000005abu, 0x0004003du, 0x00000006u, 0x000005adu, 0x0000059cu, 0x00050080u, 0x00000006u, 0x000005aeu, - 0x000005adu, 0x00000055u, 0x00060041u, 0x0000051cu, 0x000005afu, 0x00000516u, 0x00000122u, 0x000005aeu, - 0x0004003du, 0x00000008u, 0x000005b0u, 0x000005afu, 0x00060050u, 0x0000001bu, 0x000005b1u, 0x000005a8u, - 0x000005acu, 0x000005b0u, 0x0003003eu, 0x000005a5u, 0x000005b1u, 0x00050041u, 0x000005b2u, 0x000005b3u, - 0x0000037du, 0x00000221u, 0x0004003du, 0x00000008u, 0x000005b4u, 0x000005b3u, 0x000500bau, 0x00000029u, - 0x000005b5u, 0x000005b4u, 0x00000073u, 0x000300f7u, 0x000005b7u, 0x00000000u, 0x000400fau, 0x000005b5u, - 0x000005b6u, 0x000005b7u, 0x000200f8u, 0x000005b6u, 0x00050041u, 0x00000370u, 0x000005beu, 0x00000393u, - 0x0000012cu, 0x0004003du, 0x00000006u, 0x000005bfu, 0x000005beu, 0x00070041u, 0x0000051cu, 0x000005c1u, - 0x000005bdu, 0x00000122u, 0x000005bfu, 0x000005c0u, 0x0004003du, 0x00000008u, 0x000005c2u, 0x000005c1u, - 0x00050041u, 0x000005b2u, 0x000005c3u, 0x0000037du, 0x00000221u, 0x0004003du, 0x00000008u, 0x000005c4u, - 0x000005c3u, 0x00050085u, 0x00000008u, 0x000005c5u, 0x000005c2u, 0x000005c4u, 0x0003003eu, 0x000005b8u, - 0x000005c5u, 0x0004003du, 0x00000006u, 0x000005ccu, 0x00000379u, 0x00060041u, 0x000005cdu, 0x000005ceu, - 0x000005cbu, 0x00000122u, 0x000005ccu, 0x0004003du, 0x000005c7u, 0x000005cfu, 0x000005ceu, 0x00040190u, - 0x00000031u, 0x000005d0u, 0x000005cfu, 0x0003003eu, 0x000005c6u, 0x000005d0u, 0x0004003du, 0x00000031u, - 0x000005d3u, 0x000005c6u, 0x0003003eu, 0x000005d2u, 0x000005d3u, 0x00050039u, 0x0000001bu, 0x000005d4u, - 0x00000035u, 0x000005d2u, 0x0003003eu, 0x000005d1u, 0x000005d4u, 0x0004003du, 0x0000001bu, 0x000005d6u, - 0x000005d1u, 0x0004003du, 0x00000008u, 0x000005d7u, 0x000005b8u, 0x00060050u, 0x0000001bu, 0x000005d8u, - 0x000005d7u, 0x000005d7u, 0x000005d7u, 0x00050083u, 0x0000001bu, 0x000005d9u, 0x000005d6u, 0x000005d8u, - 0x0003003eu, 0x000005d5u, 0x000005d9u, 0x0004003du, 0x0000001bu, 0x000005dbu, 0x000005d1u, 0x0004003du, - 0x00000008u, 0x000005dcu, 0x000005b8u, 0x00060050u, 0x0000001bu, 0x000005ddu, 0x000005dcu, 0x000005dcu, - 0x000005dcu, 0x00050081u, 0x0000001bu, 0x000005deu, 0x000005dbu, 0x000005ddu, 0x0003003eu, 0x000005dau, - 0x000005deu, 0x0004003du, 0x0000001bu, 0x000005e0u, 0x000005a5u, 0x0006000cu, 0x00000008u, 0x000005e1u, - 0x00000001u, 0x00000042u, 0x000005e0u, 0x0003003eu, 0x000005dfu, 0x000005e1u, 0x0004003du, 0x0000001bu, - 0x000005e3u, 0x0000058bu, 0x0003003eu, 0x000005e2u, 0x000005e3u, 0x0004003du, 0x00000008u, 0x000005e5u, - 0x000005dfu, 0x0003003eu, 0x000005e4u, 0x000005e5u, 0x0004003du, 0x0000001bu, 0x000005e7u, 0x000005d5u, - 0x0003003eu, 0x000005e6u, 0x000005e7u, 0x0004003du, 0x0000001bu, 0x000005e9u, 0x000005dau, 0x0003003eu, - 0x000005e8u, 0x000005e9u, 0x00080039u, 0x00000029u, 0x000005eau, 0x0000002fu, 0x000005e2u, 0x000005e4u, - 0x000005e6u, 0x000005e8u, 0x000400a8u, 0x00000029u, 0x000005ebu, 0x000005eau, 0x000300f7u, 0x000005edu, - 0x00000000u, 0x000400fau, 0x000005ebu, 0x000005ecu, 0x000005edu, 0x000200f8u, 0x000005ecu, 0x0003003eu, - 0x000003d2u, 0x000003dau, 0x000200f9u, 0x000005edu, 0x000200f8u, 0x000005edu, 0x000200f9u, 0x000005b7u, - 0x000200f8u, 0x000005b7u, 0x0004003du, 0x0000001bu, 0x000005f1u, 0x0000058bu, 0x0003003eu, 0x000005f0u, - 0x000005f1u, 0x0004003du, 0x00000009u, 0x000005f3u, 0x00000594u, 0x0003003eu, 0x000005f2u, 0x000005f3u, - 0x0003003eu, 0x000005f4u, 0x000005efu, 0x00070039u, 0x00000022u, 0x000005f5u, 0x00000027u, 0x000005f0u, - 0x000005f2u, 0x000005f4u, 0x0003003eu, 0x000005eeu, 0x000005f5u, 0x00050041u, 0x00000370u, 0x000005f7u, - 0x000003a2u, 0x00000202u, 0x0004003du, 0x00000006u, 0x000005f8u, 0x000005f7u, 0x00050041u, 0x00000370u, - 0x000005f9u, 0x000003c2u, 0x000001fcu, 0x0004003du, 0x00000006u, 0x000005fau, 0x000005f9u, 0x00050080u, - 0x00000006u, 0x000005fbu, 0x000005f8u, 0x000005fau, 0x0004003du, 0x00000006u, 0x000005fcu, 0x00000382u, - 0x00050084u, 0x00000006u, 0x000005fdu, 0x000005fcu, 0x000003ddu, 0x00050080u, 0x00000006u, 0x000005feu, - 0x000005fbu, 0x000005fdu, 0x0003003eu, 0x000005f6u, 0x000005feu, 0x0004003du, 0x00000006u, 0x00000600u, - 0x000005f6u, 0x00060041u, 0x0000051cu, 0x00000601u, 0x00000516u, 0x00000122u, 0x00000600u, 0x0004003du, - 0x00000008u, 0x00000602u, 0x00000601u, 0x0004003du, 0x00000006u, 0x00000603u, 0x000005f6u, 0x00050080u, - 0x00000006u, 0x00000604u, 0x00000603u, 0x00000007u, 0x00060041u, 0x0000051cu, 0x00000605u, 0x00000516u, - 0x00000122u, 0x00000604u, 0x0004003du, 0x00000008u, 0x00000606u, 0x00000605u, 0x0004003du, 0x00000006u, - 0x00000607u, 0x000005f6u, 0x00050080u, 0x00000006u, 0x00000608u, 0x00000607u, 0x00000055u, 0x00060041u, - 0x0000051cu, 0x00000609u, 0x00000516u, 0x00000122u, 0x00000608u, 0x0004003du, 0x00000008u, 0x0000060au, - 0x00000609u, 0x00060050u, 0x0000001bu, 0x0000060bu, 0x00000602u, 0x00000606u, 0x0000060au, 0x0003003eu, - 0x000005ffu, 0x0000060bu, 0x0004003du, 0x00000006u, 0x0000060du, 0x000005f6u, 0x00050080u, 0x00000006u, - 0x0000060eu, 0x0000060du, 0x0000005cu, 0x00060041u, 0x0000051cu, 0x0000060fu, 0x00000516u, 0x00000122u, - 0x0000060eu, 0x0004003du, 0x00000008u, 0x00000610u, 0x0000060fu, 0x0004003du, 0x00000006u, 0x00000611u, - 0x000005f6u, 0x00050080u, 0x00000006u, 0x00000612u, 0x00000611u, 0x0000050fu, 0x00060041u, 0x0000051cu, - 0x00000613u, 0x00000516u, 0x00000122u, 0x00000612u, 0x0004003du, 0x00000008u, 0x00000614u, 0x00000613u, - 0x0004003du, 0x00000006u, 0x00000615u, 0x000005f6u, 0x00050080u, 0x00000006u, 0x00000617u, 0x00000615u, - 0x00000616u, 0x00060041u, 0x0000051cu, 0x00000618u, 0x00000516u, 0x00000122u, 0x00000617u, 0x0004003du, - 0x00000008u, 0x00000619u, 0x00000618u, 0x00060050u, 0x0000001bu, 0x0000061au, 0x00000610u, 0x00000614u, - 0x00000619u, 0x0003003eu, 0x0000060cu, 0x0000061au, 0x00050041u, 0x00000370u, 0x0000061cu, 0x00000393u, - 0x0000012cu, 0x0004003du, 0x00000006u, 0x0000061du, 0x0000061cu, 0x00060041u, 0x0000061eu, 0x0000061fu, - 0x000005bdu, 0x00000122u, 0x0000061du, 0x0004003du, 0x000005b9u, 0x00000620u, 0x0000061fu, 0x00040190u, - 0x00000038u, 0x00000621u, 0x00000620u, 0x0003003eu, 0x0000061bu, 0x00000621u, 0x0004003du, 0x00000006u, - 0x00000623u, 0x00000379u, 0x00060041u, 0x000005cdu, 0x00000624u, 0x000005cbu, 0x00000122u, 0x00000623u, - 0x0004003du, 0x000005c7u, 0x00000625u, 0x00000624u, 0x00040190u, 0x00000031u, 0x00000626u, 0x00000625u, - 0x0003003eu, 0x00000622u, 0x00000626u, 0x00050041u, 0x00000037u, 0x00000628u, 0x00000622u, 0x00000122u, - 0x0004003du, 0x00000022u, 0x00000629u, 0x00000628u, 0x00050051u, 0x00000009u, 0x0000062au, 0x00000629u, - 0x00000000u, 0x0008004fu, 0x0000001bu, 0x0000062bu, 0x0000062au, 0x0000062au, 0x00000000u, 0x00000001u, - 0x00000002u, 0x00050051u, 0x00000009u, 0x0000062cu, 0x00000629u, 0x00000001u, 0x0008004fu, 0x0000001bu, - 0x0000062du, 0x0000062cu, 0x0000062cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00050051u, 0x00000009u, - 0x0000062eu, 0x00000629u, 0x00000002u, 0x0008004fu, 0x0000001bu, 0x0000062fu, 0x0000062eu, 0x0000062eu, - 0x00000000u, 0x00000001u, 0x00000002u, 0x00060050u, 0x0000001cu, 0x00000630u, 0x0000062bu, 0x0000062du, - 0x0000062fu, 0x0003003eu, 0x00000627u, 0x00000630u, 0x0004003du, 0x0000001cu, 0x00000632u, 0x00000627u, - 0x00040054u, 0x0000001cu, 0x00000633u, 0x00000632u, 0x00050051u, 0x0000001bu, 0x00000634u, 0x00000633u, - 0x00000000u, 0x0004007fu, 0x0000001bu, 0x00000635u, 0x00000634u, 0x00050051u, 0x0000001bu, 0x00000636u, - 0x00000633u, 0x00000001u, 0x0004007fu, 0x0000001bu, 0x00000637u, 0x00000636u, 0x00050051u, 0x0000001bu, - 0x00000638u, 0x00000633u, 0x00000002u, 0x0004007fu, 0x0000001bu, 0x00000639u, 0x00000638u, 0x00060050u, - 0x0000001cu, 0x0000063au, 0x00000635u, 0x00000637u, 0x00000639u, 0x00060041u, 0x0000000au, 0x0000063bu, - 0x00000622u, 0x00000122u, 0x00000182u, 0x0004003du, 0x00000009u, 0x0000063cu, 0x0000063bu, 0x0008004fu, - 0x0000001bu, 0x0000063du, 0x0000063cu, 0x0000063cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00050091u, - 0x0000001bu, 0x0000063eu, 0x0000063au, 0x0000063du, 0x0003003eu, 0x00000631u, 0x0000063eu, 0x0004003du, - 0x00000022u, 0x00000640u, 0x000005eeu, 0x00050051u, 0x00000009u, 0x00000641u, 0x00000640u, 0x00000000u, - 0x0008004fu, 0x0000001bu, 0x00000642u, 0x00000641u, 0x00000641u, 0x00000000u, 0x00000001u, 0x00000002u, - 0x00050051u, 0x00000009u, 0x00000643u, 0x00000640u, 0x00000001u, 0x0008004fu, 0x0000001bu, 0x00000644u, - 0x00000643u, 0x00000643u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00050051u, 0x00000009u, 0x00000645u, - 0x00000640u, 0x00000002u, 0x0008004fu, 0x0000001bu, 0x00000646u, 0x00000645u, 0x00000645u, 0x00000000u, - 0x00000001u, 0x00000002u, 0x00060050u, 0x0000001cu, 0x00000647u, 0x00000642u, 0x00000644u, 0x00000646u, - 0x0003003eu, 0x0000063fu, 0x00000647u, 0x0003003eu, 0x00000648u, 0x00000049u, 0x0003003eu, 0x00000649u, - 0x00000049u, 0x000200f9u, 0x0000064au, 0x000200f8u, 0x0000064au, 0x000400f6u, 0x0000064cu, 0x0000064du, - 0x00000000u, 0x000200f9u, 0x0000064eu, 0x000200f8u, 0x0000064eu, 0x0004003du, 0x00000006u, 0x0000064fu, - 0x00000649u, 0x000500b0u, 0x00000029u, 0x00000650u, 0x0000064fu, 0x000003ddu, 0x000400fau, 0x00000650u, - 0x0000064bu, 0x0000064cu, 0x000200f8u, 0x0000064bu, 0x0004003du, 0x0000001cu, 0x00000652u, 0x0000063fu, - 0x0004003du, 0x00000006u, 0x0000065bu, 0x00000649u, 0x00050041u, 0x00000021u, 0x0000065eu, 0x0000065du, - 0x0000065bu, 0x0004003du, 0x0000001bu, 0x0000065fu, 0x0000065eu, 0x00050091u, 0x0000001bu, 0x00000660u, - 0x00000652u, 0x0000065fu, 0x0003003eu, 0x00000651u, 0x00000660u, 0x0004003du, 0x00000006u, 0x00000662u, - 0x00000649u, 0x00050041u, 0x00000021u, 0x00000664u, 0x00000663u, 0x00000662u, 0x0004003du, 0x0000001bu, - 0x00000665u, 0x00000664u, 0x0005008eu, 0x0000001bu, 0x00000666u, 0x00000665u, 0x0000019fu, 0x0004003du, - 0x0000001bu, 0x00000667u, 0x000005a5u, 0x00050085u, 0x0000001bu, 0x00000668u, 0x00000666u, 0x00000667u, - 0x0003003eu, 0x00000661u, 0x00000668u, 0x0004003du, 0x00000022u, 0x0000066au, 0x000005eeu, 0x0004003du, - 0x0000001bu, 0x0000066bu, 0x00000661u, 0x00050051u, 0x00000008u, 0x0000066cu, 0x0000066bu, 0x00000000u, - 0x00050051u, 0x00000008u, 0x0000066du, 0x0000066bu, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000066eu, - 0x0000066bu, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000066fu, 0x0000066cu, 0x0000066du, 0x0000066eu, - 0x00000074u, 0x00050091u, 0x00000009u, 0x00000670u, 0x0000066au, 0x0000066fu, 0x0008004fu, 0x0000001bu, - 0x00000671u, 0x00000670u, 0x00000670u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000669u, - 0x00000671u, 0x0004003du, 0x0000001bu, 0x00000672u, 0x00000651u, 0x0004003du, 0x0000001bu, 0x00000673u, - 0x00000631u, 0x0004003du, 0x0000001bu, 0x00000674u, 0x00000669u, 0x00050083u, 0x0000001bu, 0x00000675u, - 0x00000673u, 0x00000674u, 0x00050094u, 0x00000008u, 0x00000676u, 0x00000672u, 0x00000675u, 0x000500bau, - 0x00000029u, 0x00000677u, 0x00000676u, 0x00000073u, 0x000300f7u, 0x00000679u, 0x00000000u, 0x000400fau, - 0x00000677u, 0x00000678u, 0x00000679u, 0x000200f8u, 0x00000678u, 0x0004003du, 0x00000006u, 0x0000067au, - 0x00000649u, 0x000500c4u, 0x00000006u, 0x0000067bu, 0x00000007u, 0x0000067au, 0x0004003du, 0x00000006u, - 0x0000067cu, 0x00000648u, 0x000500c5u, 0x00000006u, 0x0000067du, 0x0000067cu, 0x0000067bu, 0x0003003eu, - 0x00000648u, 0x0000067du, 0x000200f9u, 0x00000679u, 0x000200f8u, 0x00000679u, 0x000200f9u, 0x0000064du, - 0x000200f8u, 0x0000064du, 0x0004003du, 0x00000006u, 0x0000067eu, 0x00000649u, 0x00050080u, 0x00000006u, - 0x0000067fu, 0x0000067eu, 0x0000012cu, 0x0003003eu, 0x00000649u, 0x0000067fu, 0x000200f9u, 0x0000064au, - 0x000200f8u, 0x0000064cu, 0x0004003du, 0x00000006u, 0x00000680u, 0x00000648u, 0x000500aau, 0x00000029u, - 0x00000681u, 0x00000680u, 0x00000049u, 0x000300f7u, 0x00000683u, 0x00000000u, 0x000400fau, 0x00000681u, - 0x00000682u, 0x00000683u, 0x000200f8u, 0x00000682u, 0x0003003eu, 0x000003d2u, 0x000003dau, 0x000200f9u, - 0x00000683u, 0x000200f8u, 0x00000683u, 0x0003003eu, 0x00000684u, 0x00000049u, 0x00050041u, 0x000005b2u, - 0x00000685u, 0x0000037du, 0x000001fcu, 0x0004003du, 0x00000008u, 0x00000686u, 0x00000685u, 0x000500bau, - 0x00000029u, 0x00000687u, 0x00000686u, 0x00000073u, 0x000300f7u, 0x00000689u, 0x00000000u, 0x000400fau, - 0x00000687u, 0x00000688u, 0x00000689u, 0x000200f8u, 0x00000688u, 0x0003003eu, 0x0000068au, 0x00000049u, - 0x000200f9u, 0x0000068bu, 0x000200f8u, 0x0000068bu, 0x000400f6u, 0x0000068du, 0x0000068eu, 0x00000000u, - 0x000200f9u, 0x0000068fu, 0x000200f8u, 0x0000068fu, 0x0004003du, 0x00000006u, 0x00000690u, 0x0000068au, - 0x000500b0u, 0x00000029u, 0x00000692u, 0x00000690u, 0x00000691u, 0x000400fau, 0x00000692u, 0x0000068cu, - 0x0000068du, 0x000200f8u, 0x0000068cu, 0x0004003du, 0x00000006u, 0x000006b0u, 0x0000068au, 0x00060041u, - 0x00000370u, 0x000006b3u, 0x000006b2u, 0x000006b0u, 0x00000049u, 0x0004003du, 0x00000006u, 0x000006b4u, - 0x000006b3u, 0x00050041u, 0x00000021u, 0x000006b7u, 0x000006b6u, 0x000006b4u, 0x0004003du, 0x0000001bu, - 0x000006b8u, 0x000006b7u, 0x0004003du, 0x0000001bu, 0x000006b9u, 0x000005a5u, 0x00050085u, 0x0000001bu, - 0x000006bau, 0x000006b8u, 0x000006b9u, 0x0003003eu, 0x00000693u, 0x000006bau, 0x0004003du, 0x00000006u, - 0x000006bcu, 0x0000068au, 0x00060041u, 0x00000370u, 0x000006beu, 0x000006bdu, 0x000006bcu, 0x00000007u, - 0x0004003du, 0x00000006u, 0x000006bfu, 0x000006beu, 0x00050041u, 0x00000021u, 0x000006c1u, 0x000006c0u, - 0x000006bfu, 0x0004003du, 0x0000001bu, 0x000006c2u, 0x000006c1u, 0x0004003du, 0x0000001bu, 0x000006c3u, - 0x000005a5u, 0x00050085u, 0x0000001bu, 0x000006c4u, 0x000006c2u, 0x000006c3u, 0x0003003eu, 0x000006bbu, - 0x000006c4u, 0x0004003du, 0x00000022u, 0x000006c6u, 0x000005eeu, 0x0004003du, 0x0000001bu, 0x000006c7u, - 0x00000693u, 0x00050051u, 0x00000008u, 0x000006c8u, 0x000006c7u, 0x00000000u, 0x00050051u, 0x00000008u, - 0x000006c9u, 0x000006c7u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000006cau, 0x000006c7u, 0x00000002u, - 0x00070050u, 0x00000009u, 0x000006cbu, 0x000006c8u, 0x000006c9u, 0x000006cau, 0x00000074u, 0x00050091u, - 0x00000009u, 0x000006ccu, 0x000006c6u, 0x000006cbu, 0x0008004fu, 0x0000001bu, 0x000006cdu, 0x000006ccu, - 0x000006ccu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000006c5u, 0x000006cdu, 0x0004003du, - 0x00000022u, 0x000006cfu, 0x000005eeu, 0x0004003du, 0x0000001bu, 0x000006d0u, 0x000006bbu, 0x00050051u, - 0x00000008u, 0x000006d1u, 0x000006d0u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000006d2u, 0x000006d0u, - 0x00000001u, 0x00050051u, 0x00000008u, 0x000006d3u, 0x000006d0u, 0x00000002u, 0x00070050u, 0x00000009u, - 0x000006d4u, 0x000006d1u, 0x000006d2u, 0x000006d3u, 0x00000074u, 0x00050091u, 0x00000009u, 0x000006d5u, - 0x000006cfu, 0x000006d4u, 0x0008004fu, 0x0000001bu, 0x000006d6u, 0x000006d5u, 0x000006d5u, 0x00000000u, - 0x00000001u, 0x00000002u, 0x0003003eu, 0x000006ceu, 0x000006d6u, 0x0004003du, 0x0000001bu, 0x000006d9u, - 0x000006c5u, 0x0003003eu, 0x000006d8u, 0x000006d9u, 0x0004003du, 0x0000001bu, 0x000006dbu, 0x000006ceu, - 0x0003003eu, 0x000006dau, 0x000006dbu, 0x0004003du, 0x00000031u, 0x000006ddu, 0x00000622u, 0x0003003eu, - 0x000006dcu, 0x000006ddu, 0x0004003du, 0x00000038u, 0x000006dfu, 0x0000061bu, 0x0003003eu, 0x000006deu, - 0x000006dfu, 0x00050041u, 0x000005b2u, 0x000006e1u, 0x0000037du, 0x000001fcu, 0x0004003du, 0x00000008u, - 0x000006e2u, 0x000006e1u, 0x0003003eu, 0x000006e0u, 0x000006e2u, 0x00090039u, 0x00000006u, 0x000006e3u, - 0x00000047u, 0x000006d8u, 0x000006dau, 0x000006dcu, 0x000006deu, 0x000006e0u, 0x0003003eu, 0x000006d7u, - 0x000006e3u, 0x0004003du, 0x00000006u, 0x000006e4u, 0x00000684u, 0x0004003du, 0x00000006u, 0x000006e5u, - 0x000006d7u, 0x0007000cu, 0x00000006u, 0x000006e6u, 0x00000001u, 0x00000029u, 0x000006e4u, 0x000006e5u, - 0x0003003eu, 0x00000684u, 0x000006e6u, 0x000200f9u, 0x0000068eu, 0x000200f8u, 0x0000068eu, 0x0004003du, - 0x00000006u, 0x000006e7u, 0x0000068au, 0x00050080u, 0x00000006u, 0x000006e8u, 0x000006e7u, 0x0000012cu, - 0x0003003eu, 0x0000068au, 0x000006e8u, 0x000200f9u, 0x0000068bu, 0x000200f8u, 0x0000068du, 0x0004003du, - 0x00000006u, 0x000006e9u, 0x00000684u, 0x00050041u, 0x0000037eu, 0x000006eau, 0x0000037du, 0x000005c0u, - 0x0004003du, 0x00000006u, 0x000006ebu, 0x000006eau, 0x0007000cu, 0x00000006u, 0x000006ecu, 0x00000001u, - 0x00000026u, 0x000006e9u, 0x000006ebu, 0x0003003eu, 0x00000684u, 0x000006ecu, 0x000200f9u, 0x00000689u, - 0x000200f8u, 0x00000689u, 0x00050041u, 0x00000370u, 0x000006eeu, 0x000003c2u, 0x00000202u, 0x0004003du, - 0x00000006u, 0x000006efu, 0x000006eeu, 0x000500c7u, 0x00000006u, 0x000006f0u, 0x000006efu, 0x00000007u, - 0x000500abu, 0x00000029u, 0x000006f1u, 0x000006f0u, 0x00000049u, 0x000600a9u, 0x00000006u, 0x000006f2u, - 0x000006f1u, 0x000003ddu, 0x00000049u, 0x0003003eu, 0x000006edu, 0x000006f2u, 0x0004003du, 0x00000029u, - 0x000006f3u, 0x000003d2u, 0x000300f7u, 0x000006f6u, 0x00000000u, 0x000400fau, 0x000006f3u, 0x000006f5u, - 0x000006f7u, 0x000200f8u, 0x000006f5u, 0x0003003eu, 0x000006f4u, 0x00000049u, 0x000200f9u, 0x000006f6u, - 0x000200f8u, 0x000006f7u, 0x0004003du, 0x00000006u, 0x000006f8u, 0x000006edu, 0x00050080u, 0x00000006u, - 0x000006f9u, 0x000003ddu, 0x000006f8u, 0x0003003eu, 0x000006f4u, 0x000006f9u, 0x000200f9u, 0x000006f6u, - 0x000200f8u, 0x000006f6u, 0x0004003du, 0x00000006u, 0x000006fau, 0x000006f4u, 0x0003003eu, 0x00000371u, - 0x000006fau, 0x0004003du, 0x00000006u, 0x000006feu, 0x00000379u, 0x00050041u, 0x000006ffu, 0x00000700u, - 0x000006fdu, 0x00000122u, 0x0003003eu, 0x00000700u, 0x000006feu, 0x0004003du, 0x00000006u, 0x00000701u, - 0x00000382u, 0x00050041u, 0x000006ffu, 0x00000702u, 0x000006fdu, 0x0000012cu, 0x0003003eu, 0x00000702u, - 0x00000701u, 0x0004003du, 0x00000022u, 0x00000703u, 0x000005eeu, 0x00050041u, 0x00000704u, 0x00000705u, - 0x000006fdu, 0x00000136u, 0x0003003eu, 0x00000705u, 0x00000703u, 0x0004003du, 0x0000001bu, 0x00000706u, - 0x000005a5u, 0x00050041u, 0x00000707u, 0x00000708u, 0x000006fdu, 0x00000182u, 0x0003003eu, 0x00000708u, - 0x00000706u, 0x0004003du, 0x0000001bu, 0x00000709u, 0x000005ffu, 0x00050041u, 0x00000707u, 0x0000070au, - 0x000006fdu, 0x000001d2u, 0x0003003eu, 0x0000070au, 0x00000709u, 0x0004003du, 0x0000001bu, 0x0000070bu, - 0x0000060cu, 0x00050041u, 0x00000707u, 0x0000070cu, 0x000006fdu, 0x000001d5u, 0x0003003eu, 0x0000070cu, - 0x0000070bu, 0x0004003du, 0x00000006u, 0x0000070du, 0x00000684u, 0x00050041u, 0x000006ffu, 0x0000070eu, - 0x000006fdu, 0x000001dbu, 0x0003003eu, 0x0000070eu, 0x0000070du, 0x00050041u, 0x00000370u, 0x0000070fu, - 0x000003c2u, 0x00000202u, 0x0004003du, 0x00000006u, 0x00000710u, 0x0000070fu, 0x00050041u, 0x000006ffu, - 0x00000711u, 0x000006fdu, 0x000001e1u, 0x0003003eu, 0x00000711u, 0x00000710u, 0x00050041u, 0x00000370u, - 0x00000712u, 0x00000393u, 0x00000182u, 0x0004003du, 0x00000006u, 0x00000713u, 0x00000712u, 0x000500aau, - 0x00000029u, 0x00000714u, 0x00000713u, 0x00000007u, 0x000600a9u, 0x00000008u, 0x00000715u, 0x00000714u, - 0x00000074u, 0x00000073u, 0x00050041u, 0x00000716u, 0x00000717u, 0x000006fdu, 0x000001e9u, 0x0003003eu, - 0x00000717u, 0x00000715u, 0x0004003du, 0x00000006u, 0x00000718u, 0x00000648u, 0x00050041u, 0x000006ffu, - 0x00000719u, 0x000006fdu, 0x000001f1u, 0x0003003eu, 0x00000719u, 0x00000718u, 0x0004003du, 0x00000006u, - 0x0000071au, 0x00000371u, 0x000514aeu, 0x0000071au, 0x00000007u, 0x00000007u, 0x000006fdu, 0x00010038u, - 0x00050036u, 0x00000008u, 0x0000000eu, 0x00000000u, 0x0000000bu, 0x00030037u, 0x0000000au, 0x0000000cu, - 0x00030037u, 0x0000000au, 0x0000000du, 0x000200f8u, 0x0000000fu, 0x00050041u, 0x00000014u, 0x0000004au, - 0x0000000cu, 0x00000049u, 0x0004003du, 0x00000008u, 0x0000004bu, 0x0000004au, 0x00050041u, 0x00000014u, - 0x0000004cu, 0x0000000du, 0x00000049u, 0x0004003du, 0x00000008u, 0x0000004du, 0x0000004cu, 0x00050085u, - 0x00000008u, 0x0000004eu, 0x0000004bu, 0x0000004du, 0x00050041u, 0x00000014u, 0x0000004fu, 0x0000000cu, - 0x00000007u, 0x0004003du, 0x00000008u, 0x00000050u, 0x0000004fu, 0x00050041u, 0x00000014u, 0x00000051u, - 0x0000000du, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000052u, 0x00000051u, 0x00050085u, 0x00000008u, - 0x00000053u, 0x00000050u, 0x00000052u, 0x00050081u, 0x00000008u, 0x00000054u, 0x0000004eu, 0x00000053u, - 0x00050041u, 0x00000014u, 0x00000056u, 0x0000000cu, 0x00000055u, 0x0004003du, 0x00000008u, 0x00000057u, - 0x00000056u, 0x00050041u, 0x00000014u, 0x00000058u, 0x0000000du, 0x00000055u, 0x0004003du, 0x00000008u, - 0x00000059u, 0x00000058u, 0x00050085u, 0x00000008u, 0x0000005au, 0x00000057u, 0x00000059u, 0x00050081u, - 0x00000008u, 0x0000005bu, 0x00000054u, 0x0000005au, 0x00050041u, 0x00000014u, 0x0000005du, 0x0000000cu, - 0x0000005cu, 0x0004003du, 0x00000008u, 0x0000005eu, 0x0000005du, 0x00050041u, 0x00000014u, 0x0000005fu, - 0x0000000du, 0x0000005cu, 0x0004003du, 0x00000008u, 0x00000060u, 0x0000005fu, 0x00050085u, 0x00000008u, - 0x00000061u, 0x0000005eu, 0x00000060u, 0x00050081u, 0x00000008u, 0x00000062u, 0x0000005bu, 0x00000061u, - 0x000200feu, 0x00000062u, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000012u, 0x00000000u, 0x00000010u, - 0x00030037u, 0x0000000au, 0x00000011u, 0x000200f8u, 0x00000013u, 0x0004003bu, 0x00000014u, 0x00000065u, - 0x00000007u, 0x0004003bu, 0x0000000au, 0x0000006bu, 0x00000007u, 0x0004003du, 0x00000009u, 0x00000066u, - 0x00000011u, 0x0006000cu, 0x00000008u, 0x00000067u, 0x00000001u, 0x00000042u, 0x00000066u, 0x0003003eu, - 0x00000065u, 0x00000067u, 0x0004003du, 0x00000008u, 0x00000068u, 0x00000065u, 0x000500bau, 0x00000029u, - 0x0000006au, 0x00000068u, 0x00000069u, 0x000300f7u, 0x0000006du, 0x00000000u, 0x000400fau, 0x0000006au, - 0x0000006cu, 0x00000072u, 0x000200f8u, 0x0000006cu, 0x0004003du, 0x00000009u, 0x0000006eu, 0x00000011u, - 0x0004003du, 0x00000008u, 0x0000006fu, 0x00000065u, 0x00070050u, 0x00000009u, 0x00000070u, 0x0000006fu, - 0x0000006fu, 0x0000006fu, 0x0000006fu, 0x00050088u, 0x00000009u, 0x00000071u, 0x0000006eu, 0x00000070u, - 0x0003003eu, 0x0000006bu, 0x00000071u, 0x000200f9u, 0x0000006du, 0x000200f8u, 0x00000072u, 0x0003003eu, - 0x0000006bu, 0x00000075u, 0x000200f9u, 0x0000006du, 0x000200f8u, 0x0000006du, 0x0004003du, 0x00000009u, - 0x00000076u, 0x0000006bu, 0x000200feu, 0x00000076u, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000019u, - 0x00000000u, 0x00000015u, 0x00030037u, 0x0000000au, 0x00000016u, 0x00030037u, 0x0000000au, 0x00000017u, - 0x00030037u, 0x00000014u, 0x00000018u, 0x000200f8u, 0x0000001au, 0x0004003bu, 0x00000014u, 0x00000079u, - 0x00000007u, 0x0004003bu, 0x0000000au, 0x0000007au, 0x00000007u, 0x0004003bu, 0x0000000au, 0x0000007cu, - 0x00000007u, 0x0004003bu, 0x0000000au, 0x00000091u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000094u, - 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000099u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000009du, - 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000a0u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000a3u, - 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000acu, 0x00000007u, 0x0004003bu, 0x0000000au, 0x000000b7u, - 0x00000007u, 0x0004003du, 0x00000009u, 0x0000007bu, 0x00000016u, 0x0003003eu, 0x0000007au, 0x0000007bu, - 0x0004003du, 0x00000009u, 0x0000007du, 0x00000017u, 0x0003003eu, 0x0000007cu, 0x0000007du, 0x00060039u, - 0x00000008u, 0x0000007eu, 0x0000000eu, 0x0000007au, 0x0000007cu, 0x0003003eu, 0x00000079u, 0x0000007eu, - 0x0004003du, 0x00000008u, 0x0000007fu, 0x00000079u, 0x000500b8u, 0x00000029u, 0x00000080u, 0x0000007fu, - 0x00000073u, 0x000300f7u, 0x00000082u, 0x00000000u, 0x000400fau, 0x00000080u, 0x00000081u, 0x00000082u, - 0x000200f8u, 0x00000081u, 0x0004003du, 0x00000009u, 0x00000083u, 0x00000017u, 0x0004007fu, 0x00000009u, - 0x00000084u, 0x00000083u, 0x0003003eu, 0x00000017u, 0x00000084u, 0x0004003du, 0x00000008u, 0x00000085u, - 0x00000079u, 0x0004007fu, 0x00000008u, 0x00000086u, 0x00000085u, 0x0003003eu, 0x00000079u, 0x00000086u, - 0x000200f9u, 0x00000082u, 0x000200f8u, 0x00000082u, 0x0004003du, 0x00000008u, 0x00000087u, 0x00000079u, - 0x000500bau, 0x00000029u, 0x00000089u, 0x00000087u, 0x00000088u, 0x000300f7u, 0x0000008bu, 0x00000000u, - 0x000400fau, 0x00000089u, 0x0000008au, 0x0000008bu, 0x000200f8u, 0x0000008au, 0x0004003du, 0x00000009u, - 0x0000008cu, 0x00000016u, 0x0004003du, 0x00000009u, 0x0000008du, 0x00000017u, 0x0004003du, 0x00000008u, - 0x0000008eu, 0x00000018u, 0x00070050u, 0x00000009u, 0x0000008fu, 0x0000008eu, 0x0000008eu, 0x0000008eu, - 0x0000008eu, 0x0008000cu, 0x00000009u, 0x00000090u, 0x00000001u, 0x0000002eu, 0x0000008cu, 0x0000008du, - 0x0000008fu, 0x0003003eu, 0x00000091u, 0x00000090u, 0x00050039u, 0x00000009u, 0x00000092u, 0x00000012u, - 0x00000091u, 0x000200feu, 0x00000092u, 0x000200f8u, 0x0000008bu, 0x0004003du, 0x00000008u, 0x00000095u, - 0x00000079u, 0x0008000cu, 0x00000008u, 0x00000097u, 0x00000001u, 0x0000002bu, 0x00000095u, 0x00000096u, - 0x00000074u, 0x0006000cu, 0x00000008u, 0x00000098u, 0x00000001u, 0x00000011u, 0x00000097u, 0x0003003eu, - 0x00000094u, 0x00000098u, 0x0004003du, 0x00000008u, 0x0000009au, 0x00000094u, 0x0004003du, 0x00000008u, - 0x0000009bu, 0x00000018u, 0x00050085u, 0x00000008u, 0x0000009cu, 0x0000009au, 0x0000009bu, 0x0003003eu, - 0x00000099u, 0x0000009cu, 0x0004003du, 0x00000008u, 0x0000009eu, 0x00000099u, 0x0006000cu, 0x00000008u, - 0x0000009fu, 0x00000001u, 0x0000000du, 0x0000009eu, 0x0003003eu, 0x0000009du, 0x0000009fu, 0x0004003du, - 0x00000008u, 0x000000a1u, 0x00000094u, 0x0006000cu, 0x00000008u, 0x000000a2u, 0x00000001u, 0x0000000du, - 0x000000a1u, 0x0003003eu, 0x000000a0u, 0x000000a2u, 0x0004003du, 0x00000008u, 0x000000a4u, 0x00000099u, - 0x0006000cu, 0x00000008u, 0x000000a5u, 0x00000001u, 0x0000000eu, 0x000000a4u, 0x0004003du, 0x00000008u, - 0x000000a6u, 0x00000079u, 0x0004003du, 0x00000008u, 0x000000a7u, 0x0000009du, 0x00050085u, 0x00000008u, - 0x000000a8u, 0x000000a6u, 0x000000a7u, 0x0004003du, 0x00000008u, 0x000000a9u, 0x000000a0u, 0x00050088u, - 0x00000008u, 0x000000aau, 0x000000a8u, 0x000000a9u, 0x00050083u, 0x00000008u, 0x000000abu, 0x000000a5u, - 0x000000aau, 0x0003003eu, 0x000000a3u, 0x000000abu, 0x0004003du, 0x00000008u, 0x000000adu, 0x0000009du, - 0x0004003du, 0x00000008u, 0x000000aeu, 0x000000a0u, 0x00050088u, 0x00000008u, 0x000000afu, 0x000000adu, - 0x000000aeu, 0x0003003eu, 0x000000acu, 0x000000afu, 0x0004003du, 0x00000008u, 0x000000b0u, 0x000000a3u, - 0x0004003du, 0x00000009u, 0x000000b1u, 0x00000016u, 0x0005008eu, 0x00000009u, 0x000000b2u, 0x000000b1u, - 0x000000b0u, 0x0004003du, 0x00000008u, 0x000000b3u, 0x000000acu, 0x0004003du, 0x00000009u, 0x000000b4u, - 0x00000017u, 0x0005008eu, 0x00000009u, 0x000000b5u, 0x000000b4u, 0x000000b3u, 0x00050081u, 0x00000009u, - 0x000000b6u, 0x000000b2u, 0x000000b5u, 0x0003003eu, 0x000000b7u, 0x000000b6u, 0x00050039u, 0x00000009u, - 0x000000b8u, 0x00000012u, 0x000000b7u, 0x000200feu, 0x000000b8u, 0x00010038u, 0x00050036u, 0x0000001cu, - 0x0000001fu, 0x00000000u, 0x0000001du, 0x00030037u, 0x0000000au, 0x0000001eu, 0x000200f8u, 0x00000020u, - 0x0004003bu, 0x00000014u, 0x000000bbu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000beu, 0x00000007u, - 0x0004003bu, 0x00000014u, 0x000000c1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000c4u, 0x00000007u, - 0x0004003bu, 0x00000014u, 0x000000c7u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000cbu, 0x00000007u, - 0x0004003bu, 0x00000014u, 0x000000cfu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000d3u, 0x00000007u, - 0x0004003bu, 0x00000014u, 0x000000d7u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000dbu, 0x00000007u, - 0x0004003bu, 0x00000014u, 0x000000dfu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000e3u, 0x00000007u, - 0x0004003bu, 0x00000014u, 0x000000e7u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000ebu, 0x00000007u, - 0x0004003bu, 0x00000014u, 0x000000efu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000f3u, 0x00000007u, - 0x00050041u, 0x00000014u, 0x000000bcu, 0x0000001eu, 0x00000049u, 0x0004003du, 0x00000008u, 0x000000bdu, - 0x000000bcu, 0x0003003eu, 0x000000bbu, 0x000000bdu, 0x00050041u, 0x00000014u, 0x000000bfu, 0x0000001eu, - 0x00000007u, 0x0004003du, 0x00000008u, 0x000000c0u, 0x000000bfu, 0x0003003eu, 0x000000beu, 0x000000c0u, - 0x00050041u, 0x00000014u, 0x000000c2u, 0x0000001eu, 0x00000055u, 0x0004003du, 0x00000008u, 0x000000c3u, - 0x000000c2u, 0x0003003eu, 0x000000c1u, 0x000000c3u, 0x00050041u, 0x00000014u, 0x000000c5u, 0x0000001eu, - 0x0000005cu, 0x0004003du, 0x00000008u, 0x000000c6u, 0x000000c5u, 0x0003003eu, 0x000000c4u, 0x000000c6u, - 0x0004003du, 0x00000008u, 0x000000c8u, 0x000000bbu, 0x0004003du, 0x00000008u, 0x000000c9u, 0x000000bbu, - 0x00050081u, 0x00000008u, 0x000000cau, 0x000000c8u, 0x000000c9u, 0x0003003eu, 0x000000c7u, 0x000000cau, - 0x0004003du, 0x00000008u, 0x000000ccu, 0x000000beu, 0x0004003du, 0x00000008u, 0x000000cdu, 0x000000beu, - 0x00050081u, 0x00000008u, 0x000000ceu, 0x000000ccu, 0x000000cdu, 0x0003003eu, 0x000000cbu, 0x000000ceu, - 0x0004003du, 0x00000008u, 0x000000d0u, 0x000000c1u, 0x0004003du, 0x00000008u, 0x000000d1u, 0x000000c1u, - 0x00050081u, 0x00000008u, 0x000000d2u, 0x000000d0u, 0x000000d1u, 0x0003003eu, 0x000000cfu, 0x000000d2u, - 0x0004003du, 0x00000008u, 0x000000d4u, 0x000000bbu, 0x0004003du, 0x00000008u, 0x000000d5u, 0x000000c7u, - 0x00050085u, 0x00000008u, 0x000000d6u, 0x000000d4u, 0x000000d5u, 0x0003003eu, 0x000000d3u, 0x000000d6u, - 0x0004003du, 0x00000008u, 0x000000d8u, 0x000000bbu, 0x0004003du, 0x00000008u, 0x000000d9u, 0x000000cbu, - 0x00050085u, 0x00000008u, 0x000000dau, 0x000000d8u, 0x000000d9u, 0x0003003eu, 0x000000d7u, 0x000000dau, - 0x0004003du, 0x00000008u, 0x000000dcu, 0x000000bbu, 0x0004003du, 0x00000008u, 0x000000ddu, 0x000000cfu, - 0x00050085u, 0x00000008u, 0x000000deu, 0x000000dcu, 0x000000ddu, 0x0003003eu, 0x000000dbu, 0x000000deu, - 0x0004003du, 0x00000008u, 0x000000e0u, 0x000000beu, 0x0004003du, 0x00000008u, 0x000000e1u, 0x000000cbu, - 0x00050085u, 0x00000008u, 0x000000e2u, 0x000000e0u, 0x000000e1u, 0x0003003eu, 0x000000dfu, 0x000000e2u, - 0x0004003du, 0x00000008u, 0x000000e4u, 0x000000beu, 0x0004003du, 0x00000008u, 0x000000e5u, 0x000000cfu, - 0x00050085u, 0x00000008u, 0x000000e6u, 0x000000e4u, 0x000000e5u, 0x0003003eu, 0x000000e3u, 0x000000e6u, - 0x0004003du, 0x00000008u, 0x000000e8u, 0x000000c1u, 0x0004003du, 0x00000008u, 0x000000e9u, 0x000000cfu, - 0x00050085u, 0x00000008u, 0x000000eau, 0x000000e8u, 0x000000e9u, 0x0003003eu, 0x000000e7u, 0x000000eau, - 0x0004003du, 0x00000008u, 0x000000ecu, 0x000000c4u, 0x0004003du, 0x00000008u, 0x000000edu, 0x000000c7u, - 0x00050085u, 0x00000008u, 0x000000eeu, 0x000000ecu, 0x000000edu, 0x0003003eu, 0x000000ebu, 0x000000eeu, - 0x0004003du, 0x00000008u, 0x000000f0u, 0x000000c4u, 0x0004003du, 0x00000008u, 0x000000f1u, 0x000000cbu, - 0x00050085u, 0x00000008u, 0x000000f2u, 0x000000f0u, 0x000000f1u, 0x0003003eu, 0x000000efu, 0x000000f2u, - 0x0004003du, 0x00000008u, 0x000000f4u, 0x000000c4u, 0x0004003du, 0x00000008u, 0x000000f5u, 0x000000cfu, - 0x00050085u, 0x00000008u, 0x000000f6u, 0x000000f4u, 0x000000f5u, 0x0003003eu, 0x000000f3u, 0x000000f6u, - 0x0004003du, 0x00000008u, 0x000000f7u, 0x000000dfu, 0x0004003du, 0x00000008u, 0x000000f8u, 0x000000e7u, - 0x00050081u, 0x00000008u, 0x000000f9u, 0x000000f7u, 0x000000f8u, 0x00050083u, 0x00000008u, 0x000000fau, - 0x00000074u, 0x000000f9u, 0x0004003du, 0x00000008u, 0x000000fbu, 0x000000d7u, 0x0004003du, 0x00000008u, - 0x000000fcu, 0x000000f3u, 0x00050081u, 0x00000008u, 0x000000fdu, 0x000000fbu, 0x000000fcu, 0x0004003du, - 0x00000008u, 0x000000feu, 0x000000dbu, 0x0004003du, 0x00000008u, 0x000000ffu, 0x000000efu, 0x00050083u, - 0x00000008u, 0x00000100u, 0x000000feu, 0x000000ffu, 0x0004003du, 0x00000008u, 0x00000101u, 0x000000d7u, - 0x0004003du, 0x00000008u, 0x00000102u, 0x000000f3u, 0x00050083u, 0x00000008u, 0x00000103u, 0x00000101u, - 0x00000102u, 0x0004003du, 0x00000008u, 0x00000104u, 0x000000d3u, 0x0004003du, 0x00000008u, 0x00000105u, - 0x000000e7u, 0x00050081u, 0x00000008u, 0x00000106u, 0x00000104u, 0x00000105u, 0x00050083u, 0x00000008u, - 0x00000107u, 0x00000074u, 0x00000106u, 0x0004003du, 0x00000008u, 0x00000108u, 0x000000e3u, 0x0004003du, - 0x00000008u, 0x00000109u, 0x000000ebu, 0x00050081u, 0x00000008u, 0x0000010au, 0x00000108u, 0x00000109u, - 0x0004003du, 0x00000008u, 0x0000010bu, 0x000000dbu, 0x0004003du, 0x00000008u, 0x0000010cu, 0x000000efu, - 0x00050081u, 0x00000008u, 0x0000010du, 0x0000010bu, 0x0000010cu, 0x0004003du, 0x00000008u, 0x0000010eu, - 0x000000e3u, 0x0004003du, 0x00000008u, 0x0000010fu, 0x000000ebu, 0x00050083u, 0x00000008u, 0x00000110u, - 0x0000010eu, 0x0000010fu, 0x0004003du, 0x00000008u, 0x00000111u, 0x000000d3u, 0x0004003du, 0x00000008u, - 0x00000112u, 0x000000dfu, 0x00050081u, 0x00000008u, 0x00000113u, 0x00000111u, 0x00000112u, 0x00050083u, - 0x00000008u, 0x00000114u, 0x00000074u, 0x00000113u, 0x00060050u, 0x0000001bu, 0x00000115u, 0x000000fau, - 0x000000fdu, 0x00000100u, 0x00060050u, 0x0000001bu, 0x00000116u, 0x00000103u, 0x00000107u, 0x0000010au, - 0x00060050u, 0x0000001bu, 0x00000117u, 0x0000010du, 0x00000110u, 0x00000114u, 0x00060050u, 0x0000001cu, - 0x00000118u, 0x00000115u, 0x00000116u, 0x00000117u, 0x000200feu, 0x00000118u, 0x00010038u, 0x00050036u, - 0x00000022u, 0x00000027u, 0x00000000u, 0x00000023u, 0x00030037u, 0x00000021u, 0x00000024u, 0x00030037u, - 0x0000000au, 0x00000025u, 0x00030037u, 0x00000021u, 0x00000026u, 0x000200f8u, 0x00000028u, 0x0004003bu, - 0x0000011bu, 0x0000011cu, 0x00000007u, 0x0004003bu, 0x0000000au, 0x0000011du, 0x00000007u, 0x0004003bu, - 0x00000037u, 0x00000120u, 0x00000007u, 0x0004003du, 0x00000009u, 0x0000011eu, 0x00000025u, 0x0003003eu, - 0x0000011du, 0x0000011eu, 0x00050039u, 0x0000001cu, 0x0000011fu, 0x0000001fu, 0x0000011du, 0x0003003eu, - 0x0000011cu, 0x0000011fu, 0x00050041u, 0x00000021u, 0x00000123u, 0x0000011cu, 0x00000122u, 0x0004003du, - 0x0000001bu, 0x00000124u, 0x00000123u, 0x00050041u, 0x00000014u, 0x00000125u, 0x00000026u, 0x00000049u, - 0x0004003du, 0x00000008u, 0x00000126u, 0x00000125u, 0x0005008eu, 0x0000001bu, 0x00000127u, 0x00000124u, - 0x00000126u, 0x00050051u, 0x00000008u, 0x00000128u, 0x00000127u, 0x00000000u, 0x00050051u, 0x00000008u, - 0x00000129u, 0x00000127u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000012au, 0x00000127u, 0x00000002u, - 0x00070050u, 0x00000009u, 0x0000012bu, 0x00000128u, 0x00000129u, 0x0000012au, 0x00000073u, 0x00050041u, - 0x00000021u, 0x0000012du, 0x0000011cu, 0x0000012cu, 0x0004003du, 0x0000001bu, 0x0000012eu, 0x0000012du, - 0x00050041u, 0x00000014u, 0x0000012fu, 0x00000026u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000130u, - 0x0000012fu, 0x0005008eu, 0x0000001bu, 0x00000131u, 0x0000012eu, 0x00000130u, 0x00050051u, 0x00000008u, - 0x00000132u, 0x00000131u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000133u, 0x00000131u, 0x00000001u, - 0x00050051u, 0x00000008u, 0x00000134u, 0x00000131u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00000135u, - 0x00000132u, 0x00000133u, 0x00000134u, 0x00000073u, 0x00050041u, 0x00000021u, 0x00000137u, 0x0000011cu, - 0x00000136u, 0x0004003du, 0x0000001bu, 0x00000138u, 0x00000137u, 0x00050041u, 0x00000014u, 0x00000139u, - 0x00000026u, 0x00000055u, 0x0004003du, 0x00000008u, 0x0000013au, 0x00000139u, 0x0005008eu, 0x0000001bu, - 0x0000013bu, 0x00000138u, 0x0000013au, 0x00050051u, 0x00000008u, 0x0000013cu, 0x0000013bu, 0x00000000u, - 0x00050051u, 0x00000008u, 0x0000013du, 0x0000013bu, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000013eu, - 0x0000013bu, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000013fu, 0x0000013cu, 0x0000013du, 0x0000013eu, - 0x00000073u, 0x0004003du, 0x0000001bu, 0x00000140u, 0x00000024u, 0x00050051u, 0x00000008u, 0x00000141u, - 0x00000140u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000142u, 0x00000140u, 0x00000001u, 0x00050051u, - 0x00000008u, 0x00000143u, 0x00000140u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00000144u, 0x00000141u, - 0x00000142u, 0x00000143u, 0x00000074u, 0x00050051u, 0x00000008u, 0x00000145u, 0x0000012bu, 0x00000000u, - 0x00050051u, 0x00000008u, 0x00000146u, 0x0000012bu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000147u, - 0x0000012bu, 0x00000002u, 0x00050051u, 0x00000008u, 0x00000148u, 0x0000012bu, 0x00000003u, 0x00050051u, - 0x00000008u, 0x00000149u, 0x00000135u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000014au, 0x00000135u, - 0x00000001u, 0x00050051u, 0x00000008u, 0x0000014bu, 0x00000135u, 0x00000002u, 0x00050051u, 0x00000008u, - 0x0000014cu, 0x00000135u, 0x00000003u, 0x00050051u, 0x00000008u, 0x0000014du, 0x0000013fu, 0x00000000u, - 0x00050051u, 0x00000008u, 0x0000014eu, 0x0000013fu, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000014fu, - 0x0000013fu, 0x00000002u, 0x00050051u, 0x00000008u, 0x00000150u, 0x0000013fu, 0x00000003u, 0x00050051u, - 0x00000008u, 0x00000151u, 0x00000144u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000152u, 0x00000144u, - 0x00000001u, 0x00050051u, 0x00000008u, 0x00000153u, 0x00000144u, 0x00000002u, 0x00050051u, 0x00000008u, - 0x00000154u, 0x00000144u, 0x00000003u, 0x00070050u, 0x00000009u, 0x00000155u, 0x00000145u, 0x00000146u, - 0x00000147u, 0x00000148u, 0x00070050u, 0x00000009u, 0x00000156u, 0x00000149u, 0x0000014au, 0x0000014bu, - 0x0000014cu, 0x00070050u, 0x00000009u, 0x00000157u, 0x0000014du, 0x0000014eu, 0x0000014fu, 0x00000150u, - 0x00070050u, 0x00000009u, 0x00000158u, 0x00000151u, 0x00000152u, 0x00000153u, 0x00000154u, 0x00070050u, - 0x00000022u, 0x00000159u, 0x00000155u, 0x00000156u, 0x00000157u, 0x00000158u, 0x0003003eu, 0x00000120u, - 0x00000159u, 0x0004003du, 0x00000022u, 0x0000015au, 0x00000120u, 0x000200feu, 0x0000015au, 0x00010038u, - 0x00050036u, 0x00000029u, 0x0000002fu, 0x00000000u, 0x0000002au, 0x00030037u, 0x00000021u, 0x0000002bu, - 0x00030037u, 0x00000014u, 0x0000002cu, 0x00030037u, 0x00000021u, 0x0000002du, 0x00030037u, 0x00000021u, - 0x0000002eu, 0x000200f8u, 0x00000030u, 0x0004003bu, 0x00000021u, 0x0000015du, 0x00000007u, 0x0004003bu, - 0x00000021u, 0x00000162u, 0x00000007u, 0x0004003du, 0x0000001bu, 0x0000015eu, 0x0000002bu, 0x0004003du, - 0x0000001bu, 0x0000015fu, 0x0000002du, 0x0004003du, 0x0000001bu, 0x00000160u, 0x0000002eu, 0x0008000cu, - 0x0000001bu, 0x00000161u, 0x00000001u, 0x0000002bu, 0x0000015eu, 0x0000015fu, 0x00000160u, 0x0003003eu, - 0x0000015du, 0x00000161u, 0x0004003du, 0x0000001bu, 0x00000163u, 0x0000002bu, 0x0004003du, 0x0000001bu, - 0x00000164u, 0x0000015du, 0x00050083u, 0x0000001bu, 0x00000165u, 0x00000163u, 0x00000164u, 0x0003003eu, - 0x00000162u, 0x00000165u, 0x0004003du, 0x0000001bu, 0x00000166u, 0x00000162u, 0x0004003du, 0x0000001bu, - 0x00000167u, 0x00000162u, 0x00050094u, 0x00000008u, 0x00000168u, 0x00000166u, 0x00000167u, 0x0004003du, - 0x00000008u, 0x00000169u, 0x0000002cu, 0x0004003du, 0x00000008u, 0x0000016au, 0x0000002cu, 0x00050085u, - 0x00000008u, 0x0000016bu, 0x00000169u, 0x0000016au, 0x000500bcu, 0x00000029u, 0x0000016cu, 0x00000168u, - 0x0000016bu, 0x000200feu, 0x0000016cu, 0x00010038u, 0x00050036u, 0x0000001bu, 0x00000035u, 0x00000000u, - 0x00000033u, 0x00030037u, 0x00000032u, 0x00000034u, 0x000200f8u, 0x00000036u, 0x0004003bu, 0x0000011bu, - 0x0000016fu, 0x00000007u, 0x00050041u, 0x00000037u, 0x00000170u, 0x00000034u, 0x00000122u, 0x0004003du, - 0x00000022u, 0x00000171u, 0x00000170u, 0x00050051u, 0x00000009u, 0x00000172u, 0x00000171u, 0x00000000u, - 0x0008004fu, 0x0000001bu, 0x00000173u, 0x00000172u, 0x00000172u, 0x00000000u, 0x00000001u, 0x00000002u, - 0x00050051u, 0x00000009u, 0x00000174u, 0x00000171u, 0x00000001u, 0x0008004fu, 0x0000001bu, 0x00000175u, - 0x00000174u, 0x00000174u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00050051u, 0x00000009u, 0x00000176u, - 0x00000171u, 0x00000002u, 0x0008004fu, 0x0000001bu, 0x00000177u, 0x00000176u, 0x00000176u, 0x00000000u, - 0x00000001u, 0x00000002u, 0x00060050u, 0x0000001cu, 0x00000178u, 0x00000173u, 0x00000175u, 0x00000177u, - 0x0003003eu, 0x0000016fu, 0x00000178u, 0x0004003du, 0x0000001cu, 0x00000179u, 0x0000016fu, 0x00040054u, - 0x0000001cu, 0x0000017au, 0x00000179u, 0x00050051u, 0x0000001bu, 0x0000017bu, 0x0000017au, 0x00000000u, - 0x0004007fu, 0x0000001bu, 0x0000017cu, 0x0000017bu, 0x00050051u, 0x0000001bu, 0x0000017du, 0x0000017au, - 0x00000001u, 0x0004007fu, 0x0000001bu, 0x0000017eu, 0x0000017du, 0x00050051u, 0x0000001bu, 0x0000017fu, - 0x0000017au, 0x00000002u, 0x0004007fu, 0x0000001bu, 0x00000180u, 0x0000017fu, 0x00060050u, 0x0000001cu, - 0x00000181u, 0x0000017cu, 0x0000017eu, 0x00000180u, 0x00060041u, 0x0000000au, 0x00000183u, 0x00000034u, - 0x00000122u, 0x00000182u, 0x0004003du, 0x00000009u, 0x00000184u, 0x00000183u, 0x0008004fu, 0x0000001bu, - 0x00000185u, 0x00000184u, 0x00000184u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00050091u, 0x0000001bu, - 0x00000186u, 0x00000181u, 0x00000185u, 0x000200feu, 0x00000186u, 0x00010038u, 0x00050036u, 0x00000008u, - 0x0000003fu, 0x00000000u, 0x0000003au, 0x00030037u, 0x00000021u, 0x0000003bu, 0x00030037u, 0x00000021u, - 0x0000003cu, 0x00030037u, 0x00000037u, 0x0000003du, 0x00030037u, 0x00000039u, 0x0000003eu, 0x000200f8u, - 0x00000040u, 0x0004003bu, 0x00000021u, 0x00000189u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000192u, - 0x00000007u, 0x0004003bu, 0x00000021u, 0x0000019bu, 0x00000007u, 0x0004003bu, 0x00000021u, 0x000001a1u, - 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001aau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001afu, - 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001b3u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001b7u, - 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001bcu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001c5u, - 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001cau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001cdu, - 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001d1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000020eu, - 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000212u, 0x00000007u, 0x0004003bu, 0x0000021au, 0x0000021bu, - 0x00000007u, 0x0004003bu, 0x0000021au, 0x00000220u, 0x00000007u, 0x0004003bu, 0x0000021au, 0x0000023cu, - 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000244u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000248u, - 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000251u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000256u, - 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000259u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000025du, - 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000291u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000294u, - 0x00000007u, 0x0004003bu, 0x0000021au, 0x0000029cu, 0x00000007u, 0x0004003bu, 0x0000021au, 0x000002a1u, - 0x00000007u, 0x0004003bu, 0x0000021au, 0x000002b9u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000002c1u, - 0x00000007u, 0x0004003bu, 0x00000014u, 0x000002c5u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000002ceu, - 0x00000007u, 0x0004003bu, 0x00000014u, 0x000002d3u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000002d6u, - 0x00000007u, 0x0004003bu, 0x00000014u, 0x000002dau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000030eu, - 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000311u, 0x00000007u, 0x0004003bu, 0x0000021au, 0x00000319u, - 0x00000007u, 0x0004003bu, 0x0000021au, 0x0000031eu, 0x00000007u, 0x0004003bu, 0x0000021au, 0x00000336u, - 0x00000007u, 0x0004003bu, 0x0000021au, 0x0000033eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000343u, - 0x00000007u, 0x0004003du, 0x00000022u, 0x0000018au, 0x0000003du, 0x0004003du, 0x0000001bu, 0x0000018bu, - 0x0000003bu, 0x00050051u, 0x00000008u, 0x0000018cu, 0x0000018bu, 0x00000000u, 0x00050051u, 0x00000008u, - 0x0000018du, 0x0000018bu, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000018eu, 0x0000018bu, 0x00000002u, - 0x00070050u, 0x00000009u, 0x0000018fu, 0x0000018cu, 0x0000018du, 0x0000018eu, 0x00000074u, 0x00050091u, - 0x00000009u, 0x00000190u, 0x0000018au, 0x0000018fu, 0x0008004fu, 0x0000001bu, 0x00000191u, 0x00000190u, - 0x00000190u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000189u, 0x00000191u, 0x0004003du, - 0x00000022u, 0x00000193u, 0x0000003du, 0x0004003du, 0x0000001bu, 0x00000194u, 0x0000003cu, 0x00050051u, - 0x00000008u, 0x00000195u, 0x00000194u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000196u, 0x00000194u, - 0x00000001u, 0x00050051u, 0x00000008u, 0x00000197u, 0x00000194u, 0x00000002u, 0x00070050u, 0x00000009u, - 0x00000198u, 0x00000195u, 0x00000196u, 0x00000197u, 0x00000074u, 0x00050091u, 0x00000009u, 0x00000199u, - 0x00000193u, 0x00000198u, 0x0008004fu, 0x0000001bu, 0x0000019au, 0x00000199u, 0x00000199u, 0x00000000u, - 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000192u, 0x0000019au, 0x0004003du, 0x0000001bu, 0x0000019cu, - 0x0000003bu, 0x0004003du, 0x0000001bu, 0x0000019du, 0x0000003cu, 0x00050081u, 0x0000001bu, 0x0000019eu, - 0x0000019cu, 0x0000019du, 0x0005008eu, 0x0000001bu, 0x000001a0u, 0x0000019eu, 0x0000019fu, 0x0003003eu, - 0x0000019bu, 0x000001a0u, 0x0004003du, 0x00000022u, 0x000001a2u, 0x0000003du, 0x0004003du, 0x0000001bu, - 0x000001a3u, 0x0000019bu, 0x00050051u, 0x00000008u, 0x000001a4u, 0x000001a3u, 0x00000000u, 0x00050051u, - 0x00000008u, 0x000001a5u, 0x000001a3u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000001a6u, 0x000001a3u, - 0x00000002u, 0x00070050u, 0x00000009u, 0x000001a7u, 0x000001a4u, 0x000001a5u, 0x000001a6u, 0x00000074u, - 0x00050091u, 0x00000009u, 0x000001a8u, 0x000001a2u, 0x000001a7u, 0x0008004fu, 0x0000001bu, 0x000001a9u, - 0x000001a8u, 0x000001a8u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000001a1u, 0x000001a9u, - 0x00050041u, 0x00000014u, 0x000001abu, 0x00000189u, 0x00000055u, 0x0004003du, 0x00000008u, 0x000001acu, - 0x000001abu, 0x0007000cu, 0x00000008u, 0x000001aeu, 0x00000001u, 0x00000028u, 0x000001acu, 0x000001adu, - 0x0003003eu, 0x000001aau, 0x000001aeu, 0x00050041u, 0x00000014u, 0x000001b0u, 0x00000192u, 0x00000055u, - 0x0004003du, 0x00000008u, 0x000001b1u, 0x000001b0u, 0x0007000cu, 0x00000008u, 0x000001b2u, 0x00000001u, - 0x00000028u, 0x000001b1u, 0x000001adu, 0x0003003eu, 0x000001afu, 0x000001b2u, 0x00050041u, 0x00000014u, - 0x000001b4u, 0x000001a1u, 0x00000055u, 0x0004003du, 0x00000008u, 0x000001b5u, 0x000001b4u, 0x0007000cu, - 0x00000008u, 0x000001b6u, 0x00000001u, 0x00000028u, 0x000001b5u, 0x000001adu, 0x0003003eu, 0x000001b3u, - 0x000001b6u, 0x0004003du, 0x0000001bu, 0x000001b9u, 0x00000189u, 0x0007004fu, 0x000001b8u, 0x000001bau, - 0x000001b9u, 0x000001b9u, 0x00000000u, 0x00000001u, 0x0006000cu, 0x00000008u, 0x000001bbu, 0x00000001u, - 0x00000042u, 0x000001bau, 0x0003003eu, 0x000001b7u, 0x000001bbu, 0x0004003du, 0x0000001bu, 0x000001bdu, - 0x00000189u, 0x0007004fu, 0x000001b8u, 0x000001beu, 0x000001bdu, 0x000001bdu, 0x00000000u, 0x00000001u, - 0x0004003du, 0x00000008u, 0x000001bfu, 0x000001aau, 0x00050051u, 0x00000008u, 0x000001c0u, 0x000001beu, - 0x00000000u, 0x00050051u, 0x00000008u, 0x000001c1u, 0x000001beu, 0x00000001u, 0x00060050u, 0x0000001bu, - 0x000001c2u, 0x000001c0u, 0x000001c1u, 0x000001bfu, 0x0006000cu, 0x00000008u, 0x000001c3u, 0x00000001u, - 0x00000042u, 0x000001c2u, 0x00050081u, 0x00000008u, 0x000001c4u, 0x000001c3u, 0x00000069u, 0x0003003eu, - 0x000001bcu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x000001c6u, 0x000001aau, 0x0004003du, 0x00000008u, - 0x000001c7u, 0x000001bcu, 0x00050088u, 0x00000008u, 0x000001c8u, 0x000001c6u, 0x000001c7u, 0x0008000cu, - 0x00000008u, 0x000001c9u, 0x00000001u, 0x0000002bu, 0x000001c8u, 0x00000096u, 0x00000074u, 0x0003003eu, - 0x000001c5u, 0x000001c9u, 0x0004003du, 0x00000008u, 0x000001cbu, 0x000001c5u, 0x0006000cu, 0x00000008u, - 0x000001ccu, 0x00000001u, 0x00000011u, 0x000001cbu, 0x0003003eu, 0x000001cau, 0x000001ccu, 0x0004003du, - 0x00000008u, 0x000001ceu, 0x000001cau, 0x0004003du, 0x00000008u, 0x000001cfu, 0x000001cau, 0x00050085u, - 0x00000008u, 0x000001d0u, 0x000001ceu, 0x000001cfu, 0x0003003eu, 0x000001cdu, 0x000001d0u, 0x00050041u, - 0x00000014u, 0x000001d3u, 0x0000003eu, 0x000001d2u, 0x0004003du, 0x00000008u, 0x000001d4u, 0x000001d3u, - 0x00050041u, 0x00000014u, 0x000001d6u, 0x0000003eu, 0x000001d5u, 0x0004003du, 0x00000008u, 0x000001d7u, - 0x000001d6u, 0x0004003du, 0x00000008u, 0x000001d8u, 0x000001cau, 0x00050085u, 0x00000008u, 0x000001d9u, - 0x000001d7u, 0x000001d8u, 0x00050081u, 0x00000008u, 0x000001dau, 0x000001d4u, 0x000001d9u, 0x00050041u, - 0x00000014u, 0x000001dcu, 0x0000003eu, 0x000001dbu, 0x0004003du, 0x00000008u, 0x000001ddu, 0x000001dcu, - 0x0004003du, 0x00000008u, 0x000001deu, 0x000001cdu, 0x00050085u, 0x00000008u, 0x000001dfu, 0x000001ddu, - 0x000001deu, 0x00050081u, 0x00000008u, 0x000001e0u, 0x000001dau, 0x000001dfu, 0x00050041u, 0x00000014u, - 0x000001e2u, 0x0000003eu, 0x000001e1u, 0x0004003du, 0x00000008u, 0x000001e3u, 0x000001e2u, 0x0004003du, - 0x00000008u, 0x000001e4u, 0x000001cdu, 0x0004003du, 0x00000008u, 0x000001e5u, 0x000001cau, 0x00050085u, - 0x00000008u, 0x000001e6u, 0x000001e4u, 0x000001e5u, 0x00050085u, 0x00000008u, 0x000001e7u, 0x000001e3u, - 0x000001e6u, 0x00050081u, 0x00000008u, 0x000001e8u, 0x000001e0u, 0x000001e7u, 0x00050041u, 0x00000014u, - 0x000001eau, 0x0000003eu, 0x000001e9u, 0x0004003du, 0x00000008u, 0x000001ebu, 0x000001eau, 0x0004003du, - 0x00000008u, 0x000001ecu, 0x000001cdu, 0x0004003du, 0x00000008u, 0x000001edu, 0x000001cdu, 0x00050085u, - 0x00000008u, 0x000001eeu, 0x000001ecu, 0x000001edu, 0x00050085u, 0x00000008u, 0x000001efu, 0x000001ebu, - 0x000001eeu, 0x00050081u, 0x00000008u, 0x000001f0u, 0x000001e8u, 0x000001efu, 0x00050041u, 0x00000014u, - 0x000001f2u, 0x0000003eu, 0x000001f1u, 0x0004003du, 0x00000008u, 0x000001f3u, 0x000001f2u, 0x0004003du, - 0x00000008u, 0x000001f4u, 0x000001cdu, 0x0004003du, 0x00000008u, 0x000001f5u, 0x000001cdu, 0x00050085u, - 0x00000008u, 0x000001f6u, 0x000001f4u, 0x000001f5u, 0x0004003du, 0x00000008u, 0x000001f7u, 0x000001cau, - 0x00050085u, 0x00000008u, 0x000001f8u, 0x000001f6u, 0x000001f7u, 0x00050085u, 0x00000008u, 0x000001f9u, - 0x000001f3u, 0x000001f8u, 0x00050081u, 0x00000008u, 0x000001fau, 0x000001f0u, 0x000001f9u, 0x0003003eu, - 0x000001d1u, 0x000001fau, 0x0004003du, 0x00000008u, 0x000001fbu, 0x000001cau, 0x00050041u, 0x00000014u, - 0x000001fdu, 0x0000003eu, 0x000001fcu, 0x0004003du, 0x00000008u, 0x000001feu, 0x000001fdu, 0x000500bau, - 0x00000029u, 0x000001ffu, 0x000001fbu, 0x000001feu, 0x000300f7u, 0x00000201u, 0x00000000u, 0x000400fau, - 0x000001ffu, 0x00000200u, 0x00000201u, 0x000200f8u, 0x00000200u, 0x00050041u, 0x00000014u, 0x00000203u, - 0x0000003eu, 0x00000202u, 0x0004003du, 0x00000008u, 0x00000204u, 0x00000203u, 0x0004003du, 0x00000008u, - 0x00000205u, 0x000001cau, 0x00050041u, 0x00000014u, 0x00000206u, 0x0000003eu, 0x000001fcu, 0x0004003du, - 0x00000008u, 0x00000207u, 0x00000206u, 0x00050083u, 0x00000008u, 0x00000208u, 0x00000205u, 0x00000207u, - 0x00050041u, 0x00000014u, 0x0000020au, 0x0000003eu, 0x00000209u, 0x0004003du, 0x00000008u, 0x0000020bu, - 0x0000020au, 0x00050085u, 0x00000008u, 0x0000020cu, 0x00000208u, 0x0000020bu, 0x00050081u, 0x00000008u, - 0x0000020du, 0x00000204u, 0x0000020cu, 0x0003003eu, 0x000001d1u, 0x0000020du, 0x000200f9u, 0x00000201u, - 0x000200f8u, 0x00000201u, 0x0004003du, 0x00000008u, 0x0000020fu, 0x000001b7u, 0x000500bau, 0x00000029u, - 0x00000211u, 0x0000020fu, 0x00000210u, 0x000300f7u, 0x00000214u, 0x00000000u, 0x000400fau, 0x00000211u, - 0x00000213u, 0x00000218u, 0x000200f8u, 0x00000213u, 0x0004003du, 0x00000008u, 0x00000215u, 0x000001d1u, - 0x0004003du, 0x00000008u, 0x00000216u, 0x000001b7u, 0x00050088u, 0x00000008u, 0x00000217u, 0x00000215u, - 0x00000216u, 0x0003003eu, 0x00000212u, 0x00000217u, 0x000200f9u, 0x00000214u, 0x000200f8u, 0x00000218u, - 0x0003003eu, 0x00000212u, 0x00000073u, 0x000200f9u, 0x00000214u, 0x000200f8u, 0x00000214u, 0x0004003du, - 0x00000008u, 0x00000219u, 0x00000212u, 0x0003003eu, 0x0000020eu, 0x00000219u, 0x0004003du, 0x00000008u, - 0x0000021cu, 0x0000020eu, 0x0004003du, 0x0000001bu, 0x0000021du, 0x00000189u, 0x0007004fu, 0x000001b8u, - 0x0000021eu, 0x0000021du, 0x0000021du, 0x00000000u, 0x00000001u, 0x0005008eu, 0x000001b8u, 0x0000021fu, - 0x0000021eu, 0x0000021cu, 0x0003003eu, 0x0000021bu, 0x0000021fu, 0x00050041u, 0x00000014u, 0x00000222u, - 0x0000003eu, 0x00000221u, 0x0004003du, 0x00000008u, 0x00000223u, 0x00000222u, 0x00050041u, 0x00000014u, - 0x00000224u, 0x0000021bu, 0x00000049u, 0x0004003du, 0x00000008u, 0x00000225u, 0x00000224u, 0x00050085u, - 0x00000008u, 0x00000226u, 0x00000223u, 0x00000225u, 0x00050041u, 0x00000014u, 0x00000228u, 0x0000003eu, - 0x00000227u, 0x0004003du, 0x00000008u, 0x00000229u, 0x00000228u, 0x00050041u, 0x00000014u, 0x0000022au, - 0x0000021bu, 0x00000007u, 0x0004003du, 0x00000008u, 0x0000022bu, 0x0000022au, 0x00050085u, 0x00000008u, - 0x0000022cu, 0x00000229u, 0x0000022bu, 0x00050081u, 0x00000008u, 0x0000022du, 0x00000226u, 0x0000022cu, - 0x00050041u, 0x00000014u, 0x0000022fu, 0x0000003eu, 0x0000022eu, 0x0004003du, 0x00000008u, 0x00000230u, - 0x0000022fu, 0x00050041u, 0x00000014u, 0x00000231u, 0x0000021bu, 0x00000049u, 0x0004003du, 0x00000008u, - 0x00000232u, 0x00000231u, 0x00050085u, 0x00000008u, 0x00000233u, 0x00000230u, 0x00000232u, 0x00050041u, - 0x00000014u, 0x00000235u, 0x0000003eu, 0x00000234u, 0x0004003du, 0x00000008u, 0x00000236u, 0x00000235u, - 0x00050041u, 0x00000014u, 0x00000237u, 0x0000021bu, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000238u, - 0x00000237u, 0x00050085u, 0x00000008u, 0x00000239u, 0x00000236u, 0x00000238u, 0x00050081u, 0x00000008u, - 0x0000023au, 0x00000233u, 0x00000239u, 0x00050050u, 0x000001b8u, 0x0000023bu, 0x0000022du, 0x0000023au, - 0x0003003eu, 0x00000220u, 0x0000023bu, 0x0004003du, 0x000001b8u, 0x0000023du, 0x00000220u, 0x00050041u, - 0x00000014u, 0x0000023eu, 0x0000003eu, 0x00000122u, 0x0004003du, 0x00000008u, 0x0000023fu, 0x0000023eu, - 0x00050041u, 0x00000014u, 0x00000240u, 0x0000003eu, 0x0000012cu, 0x0004003du, 0x00000008u, 0x00000241u, - 0x00000240u, 0x00050050u, 0x000001b8u, 0x00000242u, 0x0000023fu, 0x00000241u, 0x00050081u, 0x000001b8u, - 0x00000243u, 0x0000023du, 0x00000242u, 0x0003003eu, 0x0000023cu, 0x00000243u, 0x0004003du, 0x0000001bu, - 0x00000245u, 0x00000192u, 0x0007004fu, 0x000001b8u, 0x00000246u, 0x00000245u, 0x00000245u, 0x00000000u, - 0x00000001u, 0x0006000cu, 0x00000008u, 0x00000247u, 0x00000001u, 0x00000042u, 0x00000246u, 0x0003003eu, - 0x00000244u, 0x00000247u, 0x0004003du, 0x0000001bu, 0x00000249u, 0x00000192u, 0x0007004fu, 0x000001b8u, - 0x0000024au, 0x00000249u, 0x00000249u, 0x00000000u, 0x00000001u, 0x0004003du, 0x00000008u, 0x0000024bu, - 0x000001afu, 0x00050051u, 0x00000008u, 0x0000024cu, 0x0000024au, 0x00000000u, 0x00050051u, 0x00000008u, - 0x0000024du, 0x0000024au, 0x00000001u, 0x00060050u, 0x0000001bu, 0x0000024eu, 0x0000024cu, 0x0000024du, - 0x0000024bu, 0x0006000cu, 0x00000008u, 0x0000024fu, 0x00000001u, 0x00000042u, 0x0000024eu, 0x00050081u, - 0x00000008u, 0x00000250u, 0x0000024fu, 0x00000069u, 0x0003003eu, 0x00000248u, 0x00000250u, 0x0004003du, - 0x00000008u, 0x00000252u, 0x000001afu, 0x0004003du, 0x00000008u, 0x00000253u, 0x00000248u, 0x00050088u, - 0x00000008u, 0x00000254u, 0x00000252u, 0x00000253u, 0x0008000cu, 0x00000008u, 0x00000255u, 0x00000001u, - 0x0000002bu, 0x00000254u, 0x00000096u, 0x00000074u, 0x0003003eu, 0x00000251u, 0x00000255u, 0x0004003du, - 0x00000008u, 0x00000257u, 0x00000251u, 0x0006000cu, 0x00000008u, 0x00000258u, 0x00000001u, 0x00000011u, - 0x00000257u, 0x0003003eu, 0x00000256u, 0x00000258u, 0x0004003du, 0x00000008u, 0x0000025au, 0x00000256u, - 0x0004003du, 0x00000008u, 0x0000025bu, 0x00000256u, 0x00050085u, 0x00000008u, 0x0000025cu, 0x0000025au, - 0x0000025bu, 0x0003003eu, 0x00000259u, 0x0000025cu, 0x00050041u, 0x00000014u, 0x0000025eu, 0x0000003eu, - 0x000001d2u, 0x0004003du, 0x00000008u, 0x0000025fu, 0x0000025eu, 0x00050041u, 0x00000014u, 0x00000260u, - 0x0000003eu, 0x000001d5u, 0x0004003du, 0x00000008u, 0x00000261u, 0x00000260u, 0x0004003du, 0x00000008u, - 0x00000262u, 0x00000256u, 0x00050085u, 0x00000008u, 0x00000263u, 0x00000261u, 0x00000262u, 0x00050081u, - 0x00000008u, 0x00000264u, 0x0000025fu, 0x00000263u, 0x00050041u, 0x00000014u, 0x00000265u, 0x0000003eu, - 0x000001dbu, 0x0004003du, 0x00000008u, 0x00000266u, 0x00000265u, 0x0004003du, 0x00000008u, 0x00000267u, - 0x00000259u, 0x00050085u, 0x00000008u, 0x00000268u, 0x00000266u, 0x00000267u, 0x00050081u, 0x00000008u, - 0x00000269u, 0x00000264u, 0x00000268u, 0x00050041u, 0x00000014u, 0x0000026au, 0x0000003eu, 0x000001e1u, - 0x0004003du, 0x00000008u, 0x0000026bu, 0x0000026au, 0x0004003du, 0x00000008u, 0x0000026cu, 0x00000259u, - 0x0004003du, 0x00000008u, 0x0000026du, 0x00000256u, 0x00050085u, 0x00000008u, 0x0000026eu, 0x0000026cu, - 0x0000026du, 0x00050085u, 0x00000008u, 0x0000026fu, 0x0000026bu, 0x0000026eu, 0x00050081u, 0x00000008u, - 0x00000270u, 0x00000269u, 0x0000026fu, 0x00050041u, 0x00000014u, 0x00000271u, 0x0000003eu, 0x000001e9u, - 0x0004003du, 0x00000008u, 0x00000272u, 0x00000271u, 0x0004003du, 0x00000008u, 0x00000273u, 0x00000259u, - 0x0004003du, 0x00000008u, 0x00000274u, 0x00000259u, 0x00050085u, 0x00000008u, 0x00000275u, 0x00000273u, - 0x00000274u, 0x00050085u, 0x00000008u, 0x00000276u, 0x00000272u, 0x00000275u, 0x00050081u, 0x00000008u, - 0x00000277u, 0x00000270u, 0x00000276u, 0x00050041u, 0x00000014u, 0x00000278u, 0x0000003eu, 0x000001f1u, - 0x0004003du, 0x00000008u, 0x00000279u, 0x00000278u, 0x0004003du, 0x00000008u, 0x0000027au, 0x00000259u, - 0x0004003du, 0x00000008u, 0x0000027bu, 0x00000259u, 0x00050085u, 0x00000008u, 0x0000027cu, 0x0000027au, - 0x0000027bu, 0x0004003du, 0x00000008u, 0x0000027du, 0x00000256u, 0x00050085u, 0x00000008u, 0x0000027eu, - 0x0000027cu, 0x0000027du, 0x00050085u, 0x00000008u, 0x0000027fu, 0x00000279u, 0x0000027eu, 0x00050081u, - 0x00000008u, 0x00000280u, 0x00000277u, 0x0000027fu, 0x0003003eu, 0x0000025du, 0x00000280u, 0x0004003du, - 0x00000008u, 0x00000281u, 0x00000256u, 0x00050041u, 0x00000014u, 0x00000282u, 0x0000003eu, 0x000001fcu, - 0x0004003du, 0x00000008u, 0x00000283u, 0x00000282u, 0x000500bau, 0x00000029u, 0x00000284u, 0x00000281u, - 0x00000283u, 0x000300f7u, 0x00000286u, 0x00000000u, 0x000400fau, 0x00000284u, 0x00000285u, 0x00000286u, - 0x000200f8u, 0x00000285u, 0x00050041u, 0x00000014u, 0x00000287u, 0x0000003eu, 0x00000202u, 0x0004003du, - 0x00000008u, 0x00000288u, 0x00000287u, 0x0004003du, 0x00000008u, 0x00000289u, 0x00000256u, 0x00050041u, - 0x00000014u, 0x0000028au, 0x0000003eu, 0x000001fcu, 0x0004003du, 0x00000008u, 0x0000028bu, 0x0000028au, - 0x00050083u, 0x00000008u, 0x0000028cu, 0x00000289u, 0x0000028bu, 0x00050041u, 0x00000014u, 0x0000028du, - 0x0000003eu, 0x00000209u, 0x0004003du, 0x00000008u, 0x0000028eu, 0x0000028du, 0x00050085u, 0x00000008u, - 0x0000028fu, 0x0000028cu, 0x0000028eu, 0x00050081u, 0x00000008u, 0x00000290u, 0x00000288u, 0x0000028fu, - 0x0003003eu, 0x0000025du, 0x00000290u, 0x000200f9u, 0x00000286u, 0x000200f8u, 0x00000286u, 0x0004003du, - 0x00000008u, 0x00000292u, 0x00000244u, 0x000500bau, 0x00000029u, 0x00000293u, 0x00000292u, 0x00000210u, - 0x000300f7u, 0x00000296u, 0x00000000u, 0x000400fau, 0x00000293u, 0x00000295u, 0x0000029au, 0x000200f8u, - 0x00000295u, 0x0004003du, 0x00000008u, 0x00000297u, 0x0000025du, 0x0004003du, 0x00000008u, 0x00000298u, - 0x00000244u, 0x00050088u, 0x00000008u, 0x00000299u, 0x00000297u, 0x00000298u, 0x0003003eu, 0x00000294u, - 0x00000299u, 0x000200f9u, 0x00000296u, 0x000200f8u, 0x0000029au, 0x0003003eu, 0x00000294u, 0x00000073u, - 0x000200f9u, 0x00000296u, 0x000200f8u, 0x00000296u, 0x0004003du, 0x00000008u, 0x0000029bu, 0x00000294u, - 0x0003003eu, 0x00000291u, 0x0000029bu, 0x0004003du, 0x00000008u, 0x0000029du, 0x00000291u, 0x0004003du, - 0x0000001bu, 0x0000029eu, 0x00000192u, 0x0007004fu, 0x000001b8u, 0x0000029fu, 0x0000029eu, 0x0000029eu, - 0x00000000u, 0x00000001u, 0x0005008eu, 0x000001b8u, 0x000002a0u, 0x0000029fu, 0x0000029du, 0x0003003eu, - 0x0000029cu, 0x000002a0u, 0x00050041u, 0x00000014u, 0x000002a2u, 0x0000003eu, 0x00000221u, 0x0004003du, - 0x00000008u, 0x000002a3u, 0x000002a2u, 0x00050041u, 0x00000014u, 0x000002a4u, 0x0000029cu, 0x00000049u, - 0x0004003du, 0x00000008u, 0x000002a5u, 0x000002a4u, 0x00050085u, 0x00000008u, 0x000002a6u, 0x000002a3u, - 0x000002a5u, 0x00050041u, 0x00000014u, 0x000002a7u, 0x0000003eu, 0x00000227u, 0x0004003du, 0x00000008u, - 0x000002a8u, 0x000002a7u, 0x00050041u, 0x00000014u, 0x000002a9u, 0x0000029cu, 0x00000007u, 0x0004003du, - 0x00000008u, 0x000002aau, 0x000002a9u, 0x00050085u, 0x00000008u, 0x000002abu, 0x000002a8u, 0x000002aau, - 0x00050081u, 0x00000008u, 0x000002acu, 0x000002a6u, 0x000002abu, 0x00050041u, 0x00000014u, 0x000002adu, - 0x0000003eu, 0x0000022eu, 0x0004003du, 0x00000008u, 0x000002aeu, 0x000002adu, 0x00050041u, 0x00000014u, - 0x000002afu, 0x0000029cu, 0x00000049u, 0x0004003du, 0x00000008u, 0x000002b0u, 0x000002afu, 0x00050085u, - 0x00000008u, 0x000002b1u, 0x000002aeu, 0x000002b0u, 0x00050041u, 0x00000014u, 0x000002b2u, 0x0000003eu, - 0x00000234u, 0x0004003du, 0x00000008u, 0x000002b3u, 0x000002b2u, 0x00050041u, 0x00000014u, 0x000002b4u, - 0x0000029cu, 0x00000007u, 0x0004003du, 0x00000008u, 0x000002b5u, 0x000002b4u, 0x00050085u, 0x00000008u, - 0x000002b6u, 0x000002b3u, 0x000002b5u, 0x00050081u, 0x00000008u, 0x000002b7u, 0x000002b1u, 0x000002b6u, - 0x00050050u, 0x000001b8u, 0x000002b8u, 0x000002acu, 0x000002b7u, 0x0003003eu, 0x000002a1u, 0x000002b8u, - 0x0004003du, 0x000001b8u, 0x000002bau, 0x000002a1u, 0x00050041u, 0x00000014u, 0x000002bbu, 0x0000003eu, - 0x00000122u, 0x0004003du, 0x00000008u, 0x000002bcu, 0x000002bbu, 0x00050041u, 0x00000014u, 0x000002bdu, - 0x0000003eu, 0x0000012cu, 0x0004003du, 0x00000008u, 0x000002beu, 0x000002bdu, 0x00050050u, 0x000001b8u, - 0x000002bfu, 0x000002bcu, 0x000002beu, 0x00050081u, 0x000001b8u, 0x000002c0u, 0x000002bau, 0x000002bfu, - 0x0003003eu, 0x000002b9u, 0x000002c0u, 0x0004003du, 0x0000001bu, 0x000002c2u, 0x000001a1u, 0x0007004fu, - 0x000001b8u, 0x000002c3u, 0x000002c2u, 0x000002c2u, 0x00000000u, 0x00000001u, 0x0006000cu, 0x00000008u, - 0x000002c4u, 0x00000001u, 0x00000042u, 0x000002c3u, 0x0003003eu, 0x000002c1u, 0x000002c4u, 0x0004003du, - 0x0000001bu, 0x000002c6u, 0x000001a1u, 0x0007004fu, 0x000001b8u, 0x000002c7u, 0x000002c6u, 0x000002c6u, - 0x00000000u, 0x00000001u, 0x0004003du, 0x00000008u, 0x000002c8u, 0x000001b3u, 0x00050051u, 0x00000008u, - 0x000002c9u, 0x000002c7u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000002cau, 0x000002c7u, 0x00000001u, - 0x00060050u, 0x0000001bu, 0x000002cbu, 0x000002c9u, 0x000002cau, 0x000002c8u, 0x0006000cu, 0x00000008u, - 0x000002ccu, 0x00000001u, 0x00000042u, 0x000002cbu, 0x00050081u, 0x00000008u, 0x000002cdu, 0x000002ccu, - 0x00000069u, 0x0003003eu, 0x000002c5u, 0x000002cdu, 0x0004003du, 0x00000008u, 0x000002cfu, 0x000001b3u, - 0x0004003du, 0x00000008u, 0x000002d0u, 0x000002c5u, 0x00050088u, 0x00000008u, 0x000002d1u, 0x000002cfu, - 0x000002d0u, 0x0008000cu, 0x00000008u, 0x000002d2u, 0x00000001u, 0x0000002bu, 0x000002d1u, 0x00000096u, - 0x00000074u, 0x0003003eu, 0x000002ceu, 0x000002d2u, 0x0004003du, 0x00000008u, 0x000002d4u, 0x000002ceu, - 0x0006000cu, 0x00000008u, 0x000002d5u, 0x00000001u, 0x00000011u, 0x000002d4u, 0x0003003eu, 0x000002d3u, - 0x000002d5u, 0x0004003du, 0x00000008u, 0x000002d7u, 0x000002d3u, 0x0004003du, 0x00000008u, 0x000002d8u, - 0x000002d3u, 0x00050085u, 0x00000008u, 0x000002d9u, 0x000002d7u, 0x000002d8u, 0x0003003eu, 0x000002d6u, - 0x000002d9u, 0x00050041u, 0x00000014u, 0x000002dbu, 0x0000003eu, 0x000001d2u, 0x0004003du, 0x00000008u, - 0x000002dcu, 0x000002dbu, 0x00050041u, 0x00000014u, 0x000002ddu, 0x0000003eu, 0x000001d5u, 0x0004003du, - 0x00000008u, 0x000002deu, 0x000002ddu, 0x0004003du, 0x00000008u, 0x000002dfu, 0x000002d3u, 0x00050085u, - 0x00000008u, 0x000002e0u, 0x000002deu, 0x000002dfu, 0x00050081u, 0x00000008u, 0x000002e1u, 0x000002dcu, - 0x000002e0u, 0x00050041u, 0x00000014u, 0x000002e2u, 0x0000003eu, 0x000001dbu, 0x0004003du, 0x00000008u, - 0x000002e3u, 0x000002e2u, 0x0004003du, 0x00000008u, 0x000002e4u, 0x000002d6u, 0x00050085u, 0x00000008u, - 0x000002e5u, 0x000002e3u, 0x000002e4u, 0x00050081u, 0x00000008u, 0x000002e6u, 0x000002e1u, 0x000002e5u, - 0x00050041u, 0x00000014u, 0x000002e7u, 0x0000003eu, 0x000001e1u, 0x0004003du, 0x00000008u, 0x000002e8u, - 0x000002e7u, 0x0004003du, 0x00000008u, 0x000002e9u, 0x000002d6u, 0x0004003du, 0x00000008u, 0x000002eau, - 0x000002d3u, 0x00050085u, 0x00000008u, 0x000002ebu, 0x000002e9u, 0x000002eau, 0x00050085u, 0x00000008u, - 0x000002ecu, 0x000002e8u, 0x000002ebu, 0x00050081u, 0x00000008u, 0x000002edu, 0x000002e6u, 0x000002ecu, - 0x00050041u, 0x00000014u, 0x000002eeu, 0x0000003eu, 0x000001e9u, 0x0004003du, 0x00000008u, 0x000002efu, - 0x000002eeu, 0x0004003du, 0x00000008u, 0x000002f0u, 0x000002d6u, 0x0004003du, 0x00000008u, 0x000002f1u, - 0x000002d6u, 0x00050085u, 0x00000008u, 0x000002f2u, 0x000002f0u, 0x000002f1u, 0x00050085u, 0x00000008u, - 0x000002f3u, 0x000002efu, 0x000002f2u, 0x00050081u, 0x00000008u, 0x000002f4u, 0x000002edu, 0x000002f3u, - 0x00050041u, 0x00000014u, 0x000002f5u, 0x0000003eu, 0x000001f1u, 0x0004003du, 0x00000008u, 0x000002f6u, - 0x000002f5u, 0x0004003du, 0x00000008u, 0x000002f7u, 0x000002d6u, 0x0004003du, 0x00000008u, 0x000002f8u, - 0x000002d6u, 0x00050085u, 0x00000008u, 0x000002f9u, 0x000002f7u, 0x000002f8u, 0x0004003du, 0x00000008u, - 0x000002fau, 0x000002d3u, 0x00050085u, 0x00000008u, 0x000002fbu, 0x000002f9u, 0x000002fau, 0x00050085u, - 0x00000008u, 0x000002fcu, 0x000002f6u, 0x000002fbu, 0x00050081u, 0x00000008u, 0x000002fdu, 0x000002f4u, - 0x000002fcu, 0x0003003eu, 0x000002dau, 0x000002fdu, 0x0004003du, 0x00000008u, 0x000002feu, 0x000002d3u, - 0x00050041u, 0x00000014u, 0x000002ffu, 0x0000003eu, 0x000001fcu, 0x0004003du, 0x00000008u, 0x00000300u, - 0x000002ffu, 0x000500bau, 0x00000029u, 0x00000301u, 0x000002feu, 0x00000300u, 0x000300f7u, 0x00000303u, - 0x00000000u, 0x000400fau, 0x00000301u, 0x00000302u, 0x00000303u, 0x000200f8u, 0x00000302u, 0x00050041u, - 0x00000014u, 0x00000304u, 0x0000003eu, 0x00000202u, 0x0004003du, 0x00000008u, 0x00000305u, 0x00000304u, - 0x0004003du, 0x00000008u, 0x00000306u, 0x000002d3u, 0x00050041u, 0x00000014u, 0x00000307u, 0x0000003eu, - 0x000001fcu, 0x0004003du, 0x00000008u, 0x00000308u, 0x00000307u, 0x00050083u, 0x00000008u, 0x00000309u, - 0x00000306u, 0x00000308u, 0x00050041u, 0x00000014u, 0x0000030au, 0x0000003eu, 0x00000209u, 0x0004003du, - 0x00000008u, 0x0000030bu, 0x0000030au, 0x00050085u, 0x00000008u, 0x0000030cu, 0x00000309u, 0x0000030bu, - 0x00050081u, 0x00000008u, 0x0000030du, 0x00000305u, 0x0000030cu, 0x0003003eu, 0x000002dau, 0x0000030du, - 0x000200f9u, 0x00000303u, 0x000200f8u, 0x00000303u, 0x0004003du, 0x00000008u, 0x0000030fu, 0x000002c1u, - 0x000500bau, 0x00000029u, 0x00000310u, 0x0000030fu, 0x00000210u, 0x000300f7u, 0x00000313u, 0x00000000u, - 0x000400fau, 0x00000310u, 0x00000312u, 0x00000317u, 0x000200f8u, 0x00000312u, 0x0004003du, 0x00000008u, - 0x00000314u, 0x000002dau, 0x0004003du, 0x00000008u, 0x00000315u, 0x000002c1u, 0x00050088u, 0x00000008u, - 0x00000316u, 0x00000314u, 0x00000315u, 0x0003003eu, 0x00000311u, 0x00000316u, 0x000200f9u, 0x00000313u, - 0x000200f8u, 0x00000317u, 0x0003003eu, 0x00000311u, 0x00000073u, 0x000200f9u, 0x00000313u, 0x000200f8u, - 0x00000313u, 0x0004003du, 0x00000008u, 0x00000318u, 0x00000311u, 0x0003003eu, 0x0000030eu, 0x00000318u, - 0x0004003du, 0x00000008u, 0x0000031au, 0x0000030eu, 0x0004003du, 0x0000001bu, 0x0000031bu, 0x000001a1u, - 0x0007004fu, 0x000001b8u, 0x0000031cu, 0x0000031bu, 0x0000031bu, 0x00000000u, 0x00000001u, 0x0005008eu, - 0x000001b8u, 0x0000031du, 0x0000031cu, 0x0000031au, 0x0003003eu, 0x00000319u, 0x0000031du, 0x00050041u, - 0x00000014u, 0x0000031fu, 0x0000003eu, 0x00000221u, 0x0004003du, 0x00000008u, 0x00000320u, 0x0000031fu, - 0x00050041u, 0x00000014u, 0x00000321u, 0x00000319u, 0x00000049u, 0x0004003du, 0x00000008u, 0x00000322u, - 0x00000321u, 0x00050085u, 0x00000008u, 0x00000323u, 0x00000320u, 0x00000322u, 0x00050041u, 0x00000014u, - 0x00000324u, 0x0000003eu, 0x00000227u, 0x0004003du, 0x00000008u, 0x00000325u, 0x00000324u, 0x00050041u, - 0x00000014u, 0x00000326u, 0x00000319u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000327u, 0x00000326u, - 0x00050085u, 0x00000008u, 0x00000328u, 0x00000325u, 0x00000327u, 0x00050081u, 0x00000008u, 0x00000329u, - 0x00000323u, 0x00000328u, 0x00050041u, 0x00000014u, 0x0000032au, 0x0000003eu, 0x0000022eu, 0x0004003du, - 0x00000008u, 0x0000032bu, 0x0000032au, 0x00050041u, 0x00000014u, 0x0000032cu, 0x00000319u, 0x00000049u, - 0x0004003du, 0x00000008u, 0x0000032du, 0x0000032cu, 0x00050085u, 0x00000008u, 0x0000032eu, 0x0000032bu, - 0x0000032du, 0x00050041u, 0x00000014u, 0x0000032fu, 0x0000003eu, 0x00000234u, 0x0004003du, 0x00000008u, - 0x00000330u, 0x0000032fu, 0x00050041u, 0x00000014u, 0x00000331u, 0x00000319u, 0x00000007u, 0x0004003du, - 0x00000008u, 0x00000332u, 0x00000331u, 0x00050085u, 0x00000008u, 0x00000333u, 0x00000330u, 0x00000332u, - 0x00050081u, 0x00000008u, 0x00000334u, 0x0000032eu, 0x00000333u, 0x00050050u, 0x000001b8u, 0x00000335u, - 0x00000329u, 0x00000334u, 0x0003003eu, 0x0000031eu, 0x00000335u, 0x0004003du, 0x000001b8u, 0x00000337u, - 0x0000031eu, 0x00050041u, 0x00000014u, 0x00000338u, 0x0000003eu, 0x00000122u, 0x0004003du, 0x00000008u, - 0x00000339u, 0x00000338u, 0x00050041u, 0x00000014u, 0x0000033au, 0x0000003eu, 0x0000012cu, 0x0004003du, - 0x00000008u, 0x0000033bu, 0x0000033au, 0x00050050u, 0x000001b8u, 0x0000033cu, 0x00000339u, 0x0000033bu, - 0x00050081u, 0x000001b8u, 0x0000033du, 0x00000337u, 0x0000033cu, 0x0003003eu, 0x00000336u, 0x0000033du, - 0x0004003du, 0x000001b8u, 0x0000033fu, 0x0000023cu, 0x0004003du, 0x000001b8u, 0x00000340u, 0x000002b9u, - 0x00050081u, 0x000001b8u, 0x00000341u, 0x0000033fu, 0x00000340u, 0x0005008eu, 0x000001b8u, 0x00000342u, - 0x00000341u, 0x0000019fu, 0x0003003eu, 0x0000033eu, 0x00000342u, 0x0004003du, 0x000001b8u, 0x00000344u, - 0x00000336u, 0x0004003du, 0x000001b8u, 0x00000345u, 0x0000033eu, 0x00050083u, 0x000001b8u, 0x00000346u, - 0x00000344u, 0x00000345u, 0x0006000cu, 0x00000008u, 0x00000347u, 0x00000001u, 0x00000042u, 0x00000346u, - 0x0003003eu, 0x00000343u, 0x00000347u, 0x0004003du, 0x00000008u, 0x00000348u, 0x00000343u, 0x0008000cu, - 0x00000008u, 0x0000034au, 0x00000001u, 0x0000002bu, 0x00000348u, 0x00000073u, 0x00000349u, 0x000200feu, - 0x0000034au, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000047u, 0x00000000u, 0x00000041u, 0x00030037u, - 0x00000021u, 0x00000042u, 0x00030037u, 0x00000021u, 0x00000043u, 0x00030037u, 0x00000032u, 0x00000044u, - 0x00030037u, 0x00000039u, 0x00000045u, 0x00030037u, 0x00000014u, 0x00000046u, 0x000200f8u, 0x00000048u, - 0x0004003bu, 0x00000014u, 0x0000034du, 0x00000007u, 0x0004003bu, 0x00000021u, 0x0000034eu, 0x00000007u, - 0x0004003bu, 0x00000021u, 0x00000350u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00000352u, 0x00000007u, - 0x0004003bu, 0x00000039u, 0x00000355u, 0x00000007u, 0x0004003du, 0x0000001bu, 0x0000034fu, 0x00000042u, - 0x0003003eu, 0x0000034eu, 0x0000034fu, 0x0004003du, 0x0000001bu, 0x00000351u, 0x00000043u, 0x0003003eu, - 0x00000350u, 0x00000351u, 0x00050041u, 0x00000037u, 0x00000353u, 0x00000044u, 0x00000122u, 0x0004003du, - 0x00000022u, 0x00000354u, 0x00000353u, 0x0003003eu, 0x00000352u, 0x00000354u, 0x0004003du, 0x00000038u, - 0x00000356u, 0x00000045u, 0x0003003eu, 0x00000355u, 0x00000356u, 0x00080039u, 0x00000008u, 0x00000357u, - 0x0000003fu, 0x0000034eu, 0x00000350u, 0x00000352u, 0x00000355u, 0x0003003eu, 0x0000034du, 0x00000357u, - 0x0004003du, 0x00000008u, 0x00000358u, 0x0000034du, 0x0004003du, 0x00000008u, 0x00000359u, 0x00000046u, - 0x000500b8u, 0x00000029u, 0x0000035au, 0x00000358u, 0x00000359u, 0x000300f7u, 0x0000035cu, 0x00000000u, - 0x000400fau, 0x0000035au, 0x0000035bu, 0x0000035cu, 0x000200f8u, 0x0000035bu, 0x000200feu, 0x00000049u, - 0x000200f8u, 0x0000035cu, 0x0004003du, 0x00000008u, 0x0000035eu, 0x0000034du, 0x0004003du, 0x00000008u, - 0x0000035fu, 0x00000046u, 0x00050085u, 0x00000008u, 0x00000361u, 0x0000035fu, 0x00000360u, 0x000500b8u, - 0x00000029u, 0x00000362u, 0x0000035eu, 0x00000361u, 0x000300f7u, 0x00000364u, 0x00000000u, 0x000400fau, - 0x00000362u, 0x00000363u, 0x00000364u, 0x000200f8u, 0x00000363u, 0x000200feu, 0x00000007u, 0x000200f8u, - 0x00000364u, 0x0004003du, 0x00000008u, 0x00000366u, 0x0000034du, 0x0004003du, 0x00000008u, 0x00000367u, - 0x00000046u, 0x00050085u, 0x00000008u, 0x00000369u, 0x00000367u, 0x00000368u, 0x000500b8u, 0x00000029u, - 0x0000036au, 0x00000366u, 0x00000369u, 0x000300f7u, 0x0000036cu, 0x00000000u, 0x000400fau, 0x0000036au, - 0x0000036bu, 0x0000036cu, 0x000200f8u, 0x0000036bu, 0x000200feu, 0x00000055u, 0x000200f8u, 0x0000036cu, - 0x000200feu, 0x0000005cu, 0x00010038u, -}; - -static const uint32_t kSpv_ts_obstacle_mesh[] = { - 0x07230203u, 0x00010600u, 0x0008000bu, 0x00000786u, 0x00000000u, 0x00020011u, 0x0000000bu, 0x00020011u, - 0x000014a3u, 0x0006000au, 0x5f565053u, 0x5f545845u, 0x6873656du, 0x6168735fu, 0x00726564u, 0x0006000bu, - 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, - 0x001b000fu, 0x000014f5u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x0000003cu, 0x00000379u, 0x0000037eu, - 0x00000389u, 0x0000038cu, 0x00000399u, 0x000003a5u, 0x00000432u, 0x00000537u, 0x00000546u, 0x00000551u, - 0x00000756u, 0x0000075au, 0x0000075eu, 0x00000763u, 0x00000767u, 0x0000076bu, 0x0000076fu, 0x00000775u, - 0x0000077au, 0x0000077fu, 0x00000784u, 0x0006014bu, 0x00000004u, 0x00000026u, 0x00000007u, 0x00000008u, - 0x00000008u, 0x00040010u, 0x00000004u, 0x0000001au, 0x00000060u, 0x00040010u, 0x00000004u, 0x00001496u, - 0x00000080u, 0x00030010u, 0x00000004u, 0x000014b2u, 0x00030003u, 0x00000002u, 0x000001ccu, 0x00060004u, - 0x455f4c47u, 0x6d5f5458u, 0x5f687365u, 0x64616873u, 0x00007265u, 0x000d0004u, 0x455f4c47u, 0x735f5458u, - 0x65646168u, 0x78655f72u, 0x63696c70u, 0x615f7469u, 0x68746972u, 0x6974656du, 0x79745f63u, 0x5f736570u, - 0x36746e69u, 0x00000034u, 0x00040005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00080005u, 0x0000000bu, - 0x5f746567u, 0x65726977u, 0x6d617266u, 0x69775f65u, 0x28687464u, 0x00000000u, 0x00050005u, 0x00000011u, - 0x656d6143u, 0x6f506172u, 0x00006573u, 0x00070006u, 0x00000011u, 0x00000000u, 0x6c726f77u, 0x6f745f64u, - 0x6d61635fu, 0x00617265u, 0x00060005u, 0x00000013u, 0x65685446u, 0x61436174u, 0x6172656du, 0x00000000u, - 0x00040006u, 0x00000013u, 0x00000000u, 0x00007863u, 0x00040006u, 0x00000013u, 0x00000001u, 0x00007963u, - 0x00050006u, 0x00000013u, 0x00000002u, 0x5f676d69u, 0x00000077u, 0x00050006u, 0x00000013u, 0x00000003u, - 0x5f676d69u, 0x00000068u, 0x00050006u, 0x00000013u, 0x00000004u, 0x796c6f70u, 0x00000030u, 0x00050006u, - 0x00000013u, 0x00000005u, 0x796c6f70u, 0x00000031u, 0x00050006u, 0x00000013u, 0x00000006u, 0x796c6f70u, - 0x00000032u, 0x00050006u, 0x00000013u, 0x00000007u, 0x796c6f70u, 0x00000033u, 0x00050006u, 0x00000013u, - 0x00000008u, 0x796c6f70u, 0x00000034u, 0x00050006u, 0x00000013u, 0x00000009u, 0x796c6f70u, 0x00000035u, - 0x00070006u, 0x00000013u, 0x0000000au, 0x5f78616du, 0x5f796172u, 0x6c676e61u, 0x00000065u, 0x00080006u, - 0x00000013u, 0x0000000bu, 0x5f78616du, 0x74736964u, 0x6974726fu, 0x765f6e6fu, 0x00006c61u, 0x00080006u, - 0x00000013u, 0x0000000cu, 0x5f78616du, 0x74736964u, 0x6974726fu, 0x645f6e6fu, 0x006c6176u, 0x00060006u, - 0x00000013u, 0x0000000du, 0x74706564u, 0x616d5f68u, 0x00000078u, 0x00050006u, 0x00000013u, 0x0000000eu, - 0x635f646cu, 0x00000000u, 0x00050006u, 0x00000013u, 0x0000000fu, 0x645f646cu, 0x00000000u, 0x00050006u, - 0x00000013u, 0x00000010u, 0x655f646cu, 0x00000000u, 0x00050006u, 0x00000013u, 0x00000011u, 0x665f646cu, - 0x00000000u, 0x00200005u, 0x00000019u, 0x65687466u, 0x705f6174u, 0x656a6f72u, 0x76287463u, 0x733b3366u, - 0x63757274u, 0x61432d74u, 0x6172656du, 0x65736f50u, 0x34666d2du, 0x733b3134u, 0x63757274u, 0x54462d74u, - 0x61746568u, 0x656d6143u, 0x662d6172u, 0x31662d31u, 0x2d31662du, 0x662d3166u, 0x31662d31u, 0x2d31662du, - 0x662d3166u, 0x31662d31u, 0x2d31662du, 0x662d3166u, 0x31662d31u, 0x2d31662du, 0x662d3166u, 0x31662d31u, - 0x00003b31u, 0x00050005u, 0x00000016u, 0x6c726f77u, 0x6f705f64u, 0x00000073u, 0x00040005u, 0x00000017u, - 0x65736f70u, 0x00000000u, 0x00030005u, 0x00000018u, 0x006d6163u, 0x00080005u, 0x0000001eu, 0x79726162u, - 0x7265765fu, 0x5f786574u, 0x6e756f63u, 0x31752874u, 0x0000003bu, 0x00040005u, 0x0000001du, 0x6576656cu, - 0x0000006cu, 0x00080005u, 0x00000021u, 0x79726162u, 0x6972745fu, 0x6c676e61u, 0x6f635f65u, 0x28746e75u, - 0x003b3175u, 0x00040005u, 0x00000020u, 0x6576656cu, 0x0000006cu, 0x00080005u, 0x00000027u, 0x79726162u, - 0x7265765fu, 0x5f786574u, 0x75287675u, 0x31753b31u, 0x0000003bu, 0x00050005u, 0x00000025u, 0x74726576u, - 0x695f7865u, 0x00007864u, 0x00040005u, 0x00000026u, 0x6576656cu, 0x0000006cu, 0x000b0005u, 0x0000002fu, - 0x79726162u, 0x746e695fu, 0x6f707265u, 0x6574616cu, 0x33667628u, 0x3366763bu, 0x3366763bu, 0x3266763bu, - 0x0000003bu, 0x00030005u, 0x0000002bu, 0x00003076u, 0x00030005u, 0x0000002cu, 0x00003176u, 0x00030005u, - 0x0000002du, 0x00003276u, 0x00030005u, 0x0000002eu, 0x00007675u, 0x000a0005u, 0x00000035u, 0x79726162u, - 0x6972745fu, 0x6c676e61u, 0x6e695f65u, 0x65636964u, 0x31752873u, 0x3b31753bu, 0x00000000u, 0x00040005u, - 0x00000033u, 0x5f697274u, 0x00786469u, 0x00040005u, 0x00000034u, 0x6576656cu, 0x0000006cu, 0x00040005u, - 0x00000038u, 0x6c616373u, 0x00000065u, 0x00060005u, 0x0000003au, 0x68737550u, 0x736e6f43u, 0x746e6174u, - 0x00000073u, 0x000a0006u, 0x0000003au, 0x00000000u, 0x69775f75u, 0x5f687464u, 0x796c6f70u, 0x656e696cu, - 0x6765725fu, 0x72616c75u, 0x00000000u, 0x00090006u, 0x0000003au, 0x00000001u, 0x69775f75u, 0x5f687464u, - 0x796c6f70u, 0x656e696cu, 0x7665625fu, 0x00000000u, 0x000a0006u, 0x0000003au, 0x00000002u, 0x69775f75u, - 0x5f687464u, 0x5f6f6765u, 0x6a617274u, 0x6765725fu, 0x72616c75u, 0x00000000u, 0x00090006u, 0x0000003au, - 0x00000003u, 0x69775f75u, 0x5f687464u, 0x5f6f6765u, 0x6a617274u, 0x7665625fu, 0x00000000u, 0x00080006u, - 0x0000003au, 0x00000004u, 0x69775f75u, 0x5f687464u, 0x65726977u, 0x6d617266u, 0x00000065u, 0x00080006u, - 0x0000003au, 0x00000005u, 0x65725f75u, 0x756c6f73u, 0x6e6f6974u, 0x6163735fu, 0x0000656cu, 0x00070006u, - 0x0000003au, 0x00000006u, 0x65645f75u, 0x5f687470u, 0x6c616373u, 0x00676e69u, 0x00090006u, 0x0000003au, - 0x00000007u, 0x616d5f75u, 0x78655f78u, 0x70617274u, 0x74616c6fu, 0x5f6e6f69u, 0x00007375u, 0x00090006u, - 0x0000003au, 0x00000008u, 0x6f635f75u, 0x5f726f6cu, 0x656c6170u, 0x5f657474u, 0x657a6973u, 0x00000000u, - 0x00070006u, 0x0000003au, 0x00000009u, 0x756e5f75u, 0x75715f6du, 0x65697265u, 0x00000073u, 0x000a0006u, - 0x0000003au, 0x0000000au, 0x65745f75u, 0x6c657373u, 0x6974616cu, 0x745f6e6fu, 0x73657268u, 0x646c6f68u, - 0x00000000u, 0x000a0006u, 0x0000003au, 0x0000000bu, 0x616d5f75u, 0x65745f78u, 0x6c657373u, 0x6974616cu, - 0x705f6e6fu, 0x6c796c6fu, 0x00656e69u, 0x000a0006u, 0x0000003au, 0x0000000cu, 0x616d5f75u, 0x65745f78u, - 0x6c657373u, 0x6974616cu, 0x705f6e6fu, 0x67796c6fu, 0x00006e6fu, 0x00090006u, 0x0000003au, 0x0000000du, - 0x616d5f75u, 0x65745f78u, 0x6c657373u, 0x6974616cu, 0x635f6e6fu, 0x00656275u, 0x00080006u, 0x0000003au, - 0x0000000eu, 0x75635f75u, 0x725f6c6cu, 0x75696461u, 0x63735f73u, 0x00656c61u, 0x00070006u, 0x0000003au, - 0x0000000fu, 0x6f665f75u, 0x6e655f67u, 0x656c6261u, 0x00000064u, 0x00070006u, 0x0000003au, 0x00000010u, - 0x616d5f75u, 0x626f5f78u, 0x63617473u, 0x0073656cu, 0x00080006u, 0x0000003au, 0x00000011u, 0x75635f75u, - 0x705f6562u, 0x5f6c6f6fu, 0x65646e69u, 0x00000078u, 0x00080006u, 0x0000003au, 0x00000012u, 0x756e5f75u, - 0x6f705f6du, 0x6f67796cu, 0x6f705f6eu, 0x00736c6fu, 0x00090006u, 0x0000003au, 0x00000013u, 0x616d5f75u, - 0x61765f78u, 0x79617272u, 0x65705f73u, 0x6f705f72u, 0x00006c6fu, 0x00090006u, 0x0000003au, 0x00000014u, - 0x756e5f75u, 0x6f705f6du, 0x696c796cu, 0x705f656eu, 0x736c6f6fu, 0x00000000u, 0x00030005u, 0x0000003cu, - 0x00006370u, 0x00050005u, 0x0000004cu, 0x65736162u, 0x6469775fu, 0x00006874u, 0x00040005u, 0x0000005eu, - 0x5f6d6163u, 0x00007470u, 0x00040005u, 0x0000006au, 0x74706564u, 0x00000068u, 0x00050005u, 0x0000006eu, - 0x5f796172u, 0x6d726f6eu, 0x00000000u, 0x00040005u, 0x00000078u, 0x666c6168u, 0x0069705fu, 0x00060005u, - 0x00000085u, 0x75657370u, 0x665f6f64u, 0x6c61636fu, 0x00000000u, 0x00040005u, 0x00000088u, 0x6c635f78u, - 0x00007069u, 0x00040005u, 0x00000094u, 0x6c635f79u, 0x00007069u, 0x00040005u, 0x000000a6u, 0x6e5f7978u, - 0x006d726fu, 0x00050005u, 0x000000aau, 0x5f736f63u, 0x68706c61u, 0x00000061u, 0x00040005u, 0x000000b1u, - 0x68706c61u, 0x00000061u, 0x00030005u, 0x000000b4u, 0x00003261u, 0x00030005u, 0x000000b8u, 0x00003361u, - 0x00030005u, 0x000000bcu, 0x00003461u, 0x00030005u, 0x000000c0u, 0x00003561u, 0x00040005u, 0x000000c4u, - 0x746c6564u, 0x00000061u, 0x00040005u, 0x000000f6u, 0x6c616373u, 0x00000065u, 0x00050005u, 0x00000101u, - 0x65786970u, 0x65725f6cu, 0x0000006cu, 0x00050005u, 0x00000106u, 0x65786970u, 0x69645f6cu, 0x00007473u, - 0x00040005u, 0x00000123u, 0x65786970u, 0x0000006cu, 0x00040005u, 0x0000012cu, 0x646e5f78u, 0x00000063u, - 0x00040005u, 0x00000134u, 0x646e5f79u, 0x00000063u, 0x00040005u, 0x00000142u, 0x61765f7au, 0x0065756cu, - 0x00040005u, 0x00000150u, 0x646e5f7au, 0x00000063u, 0x00030005u, 0x0000019eu, 0x00737675u, 0x00030005u, - 0x000001b6u, 0x00776f72u, 0x00030005u, 0x000001b7u, 0x006c6f63u, 0x00030005u, 0x000001e0u, 0x00776f72u, - 0x00030005u, 0x000001e1u, 0x006c6f63u, 0x00030005u, 0x00000228u, 0x00000077u, 0x00040005u, 0x0000024bu, - 0x73697274u, 0x00000000u, 0x00050005u, 0x00000260u, 0x5f776f72u, 0x72617473u, 0x00000074u, 0x00030005u, - 0x00000262u, 0x00000074u, 0x00030005u, 0x00000264u, 0x00776f72u, 0x00030005u, 0x00000265u, 0x006c6f63u, - 0x00040005u, 0x00000267u, 0x645f7369u, 0x006e776fu, 0x00030005u, 0x0000027bu, 0x0000746cu, 0x00030005u, - 0x0000028bu, 0x0000746cu, 0x00030005u, 0x0000029bu, 0x00003069u, 0x00030005u, 0x000002a1u, 0x00003169u, - 0x00030005u, 0x000002a8u, 0x00003269u, 0x00050005u, 0x000002cbu, 0x5f776f72u, 0x72617473u, 0x00000074u, - 0x00030005u, 0x000002cdu, 0x00000074u, 0x00030005u, 0x000002cfu, 0x00776f72u, 0x00030005u, 0x000002d0u, - 0x006c6f63u, 0x00040005u, 0x000002d1u, 0x645f7369u, 0x006e776fu, 0x00030005u, 0x000002e4u, 0x0000746cu, - 0x00030005u, 0x000002f4u, 0x0000746cu, 0x00030005u, 0x00000305u, 0x0000746cu, 0x00030005u, 0x00000316u, - 0x0000746cu, 0x00030005u, 0x00000327u, 0x0000746cu, 0x00030005u, 0x00000338u, 0x0000746cu, 0x00030005u, - 0x00000348u, 0x00003069u, 0x00030005u, 0x0000034eu, 0x00003169u, 0x00030005u, 0x00000355u, 0x00003269u, - 0x00050005u, 0x00000376u, 0x6972705fu, 0x6f635f6du, 0x00746e75u, 0x00060005u, 0x00000377u, 0x6b726f77u, - 0x756f7267u, 0x64695f70u, 0x00000000u, 0x00060005u, 0x00000379u, 0x575f6c67u, 0x476b726fu, 0x70756f72u, - 0x00004449u, 0x00030005u, 0x0000037du, 0x00646974u, 0x00080005u, 0x0000037eu, 0x4c5f6c67u, 0x6c61636fu, - 0x6f766e49u, 0x69746163u, 0x44496e6fu, 0x00000000u, 0x00050005u, 0x00000382u, 0x646e6552u, 0x75517265u, - 0x00797265u, 0x00060006u, 0x00000382u, 0x00000000u, 0x6e656373u, 0x64695f65u, 0x00000000u, 0x00060006u, - 0x00000382u, 0x00000001u, 0x656d6163u, 0x695f6172u, 0x00000064u, 0x00070006u, 0x00000382u, 0x00000002u, - 0x656d6974u, 0x6d617473u, 0x73755f70u, 0x00000000u, 0x00070006u, 0x00000382u, 0x00000003u, 0x656d6163u, - 0x745f6172u, 0x5f657079u, 0x00006469u, 0x00050006u, 0x00000382u, 0x00000004u, 0x6461705fu, 0x00000031u, - 0x00050006u, 0x00000382u, 0x00000005u, 0x6461705fu, 0x00000032u, 0x00050006u, 0x00000382u, 0x00000006u, - 0x6461705fu, 0x00000033u, 0x00040005u, 0x00000384u, 0x72657571u, 0x00000079u, 0x00050005u, 0x00000385u, - 0x646e6552u, 0x75517265u, 0x00797265u, 0x00060006u, 0x00000385u, 0x00000000u, 0x6e656373u, 0x64695f65u, - 0x00000000u, 0x00060006u, 0x00000385u, 0x00000001u, 0x656d6163u, 0x695f6172u, 0x00000064u, 0x00070006u, - 0x00000385u, 0x00000002u, 0x656d6974u, 0x6d617473u, 0x73755f70u, 0x00000000u, 0x00070006u, 0x00000385u, - 0x00000003u, 0x656d6163u, 0x745f6172u, 0x5f657079u, 0x00006469u, 0x00050006u, 0x00000385u, 0x00000004u, - 0x6461705fu, 0x00000031u, 0x00050006u, 0x00000385u, 0x00000005u, 0x6461705fu, 0x00000032u, 0x00050006u, - 0x00000385u, 0x00000006u, 0x6461705fu, 0x00000033u, 0x00050005u, 0x00000387u, 0x72657551u, 0x66754279u, - 0x00726566u, 0x00060006u, 0x00000387u, 0x00000000u, 0x75715f67u, 0x65697265u, 0x00000073u, 0x00030005u, - 0x00000389u, 0x00000000u, 0x00070005u, 0x0000038au, 0x7473624fu, 0x656c6361u, 0x6b736154u, 0x6c796150u, - 0x0064616fu, 0x00060006u, 0x0000038au, 0x00000000u, 0x72657571u, 0x64695f79u, 0x00000000u, 0x00060006u, - 0x0000038au, 0x00000001u, 0x7473626fu, 0x656c6361u, 0x0064695fu, 0x00070006u, 0x0000038au, 0x00000002u, - 0x656a626fu, 0x745f7463u, 0x6f775f6fu, 0x00646c72u, 0x00050006u, 0x0000038au, 0x00000003u, 0x6c616373u, - 0x00000065u, 0x00060006u, 0x0000038au, 0x00000004u, 0x6e6f7266u, 0x6f635f74u, 0x00726f6cu, 0x00060006u, - 0x0000038au, 0x00000005u, 0x6b636162u, 0x6c6f635fu, 0x0000726fu, 0x00080006u, 0x0000038au, 0x00000006u, - 0x64627573u, 0x73697669u, 0x5f6e6f69u, 0x6576656cu, 0x0000006cu, 0x00070006u, 0x0000038au, 0x00000007u, - 0x646e6572u, 0x665f7265u, 0x7367616cu, 0x00000000u, 0x00050006u, 0x0000038au, 0x00000008u, 0x625f7369u, - 0x00007665u, 0x00060006u, 0x0000038au, 0x00000009u, 0x65636166u, 0x73616d5fu, 0x0000006bu, 0x00040005u, - 0x0000038cu, 0x6c796170u, 0x0064616fu, 0x00030005u, 0x00000394u, 0x006d6163u, 0x00060005u, 0x00000395u, - 0x65685446u, 0x61436174u, 0x6172656du, 0x00000000u, 0x00040006u, 0x00000395u, 0x00000000u, 0x00007863u, - 0x00040006u, 0x00000395u, 0x00000001u, 0x00007963u, 0x00050006u, 0x00000395u, 0x00000002u, 0x5f676d69u, - 0x00000077u, 0x00050006u, 0x00000395u, 0x00000003u, 0x5f676d69u, 0x00000068u, 0x00050006u, 0x00000395u, - 0x00000004u, 0x796c6f70u, 0x00000030u, 0x00050006u, 0x00000395u, 0x00000005u, 0x796c6f70u, 0x00000031u, - 0x00050006u, 0x00000395u, 0x00000006u, 0x796c6f70u, 0x00000032u, 0x00050006u, 0x00000395u, 0x00000007u, - 0x796c6f70u, 0x00000033u, 0x00050006u, 0x00000395u, 0x00000008u, 0x796c6f70u, 0x00000034u, 0x00050006u, - 0x00000395u, 0x00000009u, 0x796c6f70u, 0x00000035u, 0x00070006u, 0x00000395u, 0x0000000au, 0x5f78616du, - 0x5f796172u, 0x6c676e61u, 0x00000065u, 0x00080006u, 0x00000395u, 0x0000000bu, 0x5f78616du, 0x74736964u, - 0x6974726fu, 0x765f6e6fu, 0x00006c61u, 0x00080006u, 0x00000395u, 0x0000000cu, 0x5f78616du, 0x74736964u, - 0x6974726fu, 0x645f6e6fu, 0x006c6176u, 0x00060006u, 0x00000395u, 0x0000000du, 0x74706564u, 0x616d5f68u, - 0x00000078u, 0x00050006u, 0x00000395u, 0x0000000eu, 0x635f646cu, 0x00000000u, 0x00050006u, 0x00000395u, - 0x0000000fu, 0x645f646cu, 0x00000000u, 0x00050006u, 0x00000395u, 0x00000010u, 0x655f646cu, 0x00000000u, - 0x00050006u, 0x00000395u, 0x00000011u, 0x665f646cu, 0x00000000u, 0x00080005u, 0x00000397u, 0x656d6143u, - 0x6e496172u, 0x6e697274u, 0x73636973u, 0x66667542u, 0x00007265u, 0x00080006u, 0x00000397u, 0x00000000u, - 0x61635f67u, 0x6172656du, 0x746e695fu, 0x736e6972u, 0x00736369u, 0x00030005u, 0x00000399u, 0x00000000u, - 0x00050005u, 0x000003a0u, 0x77656976u, 0x736f705fu, 0x00000065u, 0x00050005u, 0x000003a1u, 0x656d6143u, - 0x6f506172u, 0x00006573u, 0x00070006u, 0x000003a1u, 0x00000000u, 0x6c726f77u, 0x6f745f64u, 0x6d61635fu, - 0x00617265u, 0x00070005u, 0x000003a3u, 0x656d6143u, 0x6f506172u, 0x75426573u, 0x72656666u, 0x00000000u, - 0x00070006u, 0x000003a3u, 0x00000000u, 0x61635f67u, 0x6172656du, 0x736f705fu, 0x00007365u, 0x00030005u, - 0x000003a5u, 0x00000000u, 0x00060005u, 0x000003b0u, 0x655f6777u, 0x5f656764u, 0x7366666fu, 0x00007465u, - 0x00050005u, 0x000003b4u, 0x45474445u, 0x4449575fu, 0x00004854u, 0x00030005u, 0x000003b6u, 0x00003065u, - 0x00030005u, 0x000003b8u, 0x00003165u, 0x00040005u, 0x000003bbu, 0x765f3065u, 0x00007369u, 0x00050005u, - 0x000003cfu, 0x65646e69u, 0x6c626178u, 0x00000065u, 0x00050005u, 0x000003d4u, 0x65646e69u, 0x6c626178u, - 0x00000065u, 0x00040005u, 0x000003dbu, 0x765f3165u, 0x00007369u, 0x00050005u, 0x000003dfu, 0x65646e69u, - 0x6c626178u, 0x00000065u, 0x00050005u, 0x000003e4u, 0x65646e69u, 0x6c626178u, 0x00000065u, 0x00060005u, - 0x000003f4u, 0x73676573u, 0x7265705fu, 0x6764655fu, 0x00000065u, 0x00060005u, 0x000003f8u, 0x61746f74u, - 0x65735f6cu, 0x6e656d67u, 0x00007374u, 0x00070005u, 0x000003fbu, 0x61746f74u, 0x64655f6cu, 0x765f6567u, - 0x73747265u, 0x00000000u, 0x00050005u, 0x00000402u, 0x61636f6cu, 0x65735f6cu, 0x00000067u, 0x00050005u, - 0x0000040cu, 0x65676465u, 0x5f6e695fu, 0x00006777u, 0x00050005u, 0x00000410u, 0x5f676573u, 0x655f6e69u, - 0x00656764u, 0x00040005u, 0x00000414u, 0x65676465u, 0x0064695fu, 0x00030005u, 0x00000419u, 0x006a6461u, - 0x00050005u, 0x0000041bu, 0x65646e69u, 0x6c626178u, 0x00000065u, 0x00050005u, 0x0000042bu, 0x65736162u, - 0x7265765fu, 0x00000074u, 0x00070005u, 0x0000042eu, 0x4d5f6c67u, 0x50687365u, 0x65567265u, 0x78657472u, - 0x00545845u, 0x00060006u, 0x0000042eu, 0x00000000u, 0x505f6c67u, 0x7469736fu, 0x006e6f69u, 0x00070005u, - 0x00000432u, 0x4d5f6c67u, 0x56687365u, 0x69747265u, 0x45736563u, 0x00005458u, 0x00040005u, 0x00000440u, - 0x65676465u, 0x00000000u, 0x00050005u, 0x0000044cu, 0x65646e69u, 0x6c626178u, 0x00000065u, 0x00050005u, - 0x0000044fu, 0x6c5f3076u, 0x6c61636fu, 0x00000000u, 0x00050005u, 0x0000045eu, 0x65646e69u, 0x6c626178u, - 0x00000065u, 0x00050005u, 0x00000465u, 0x6c5f3176u, 0x6c61636fu, 0x00000000u, 0x00050005u, 0x00000468u, - 0x65646e69u, 0x6c626178u, 0x00000065u, 0x00050005u, 0x0000046eu, 0x775f3076u, 0x646c726fu, 0x00000000u, - 0x00050005u, 0x00000479u, 0x775f3176u, 0x646c726fu, 0x00000000u, 0x00030005u, 0x00000483u, 0x00003074u, - 0x00030005u, 0x00000489u, 0x00003174u, 0x00050005u, 0x00000490u, 0x5f307470u, 0x6c726f77u, 0x00000064u, - 0x00050005u, 0x00000496u, 0x5f317470u, 0x6c726f77u, 0x00000064u, 0x00040005u, 0x0000049du, 0x70696c63u, - 0x00000030u, 0x00040005u, 0x0000049eu, 0x61726170u, 0x0000006du, 0x00040005u, 0x000004a0u, 0x61726170u, - 0x0000006du, 0x00040005u, 0x000004a2u, 0x61726170u, 0x0000006du, 0x00040005u, 0x000004a5u, 0x70696c63u, - 0x00000031u, 0x00040005u, 0x000004a6u, 0x61726170u, 0x0000006du, 0x00040005u, 0x000004a8u, 0x61726170u, - 0x0000006du, 0x00040005u, 0x000004aau, 0x61726170u, 0x0000006du, 0x00040005u, 0x000004adu, 0x3063646eu, - 0x00000000u, 0x00040005u, 0x000004b4u, 0x3163646eu, 0x00000000u, 0x00050005u, 0x000004bbu, 0x65676465u, - 0x7269645fu, 0x00000000u, 0x00040005u, 0x000004c0u, 0x70726570u, 0x00000000u, 0x00040005u, 0x000004c7u, - 0x7366666fu, 0x00007465u, 0x00050005u, 0x000004d1u, 0x65736162u, 0x7265765fu, 0x00000074u, 0x00040005u, - 0x000004d4u, 0x3066666fu, 0x00000000u, 0x00040005u, 0x000004dcu, 0x3166666fu, 0x00000000u, 0x00040005u, - 0x000004e4u, 0x69625f7au, 0x00307361u, 0x00040005u, 0x000004e9u, 0x69625f7au, 0x00317361u, 0x00030005u, - 0x000004edu, 0x00003070u, 0x00030005u, 0x000004f6u, 0x00003170u, 0x00030005u, 0x000004ffu, 0x00003270u, - 0x00030005u, 0x00000508u, 0x00003370u, 0x00050005u, 0x00000524u, 0x61636f6cu, 0x65735f6cu, 0x00000067u, - 0x00050005u, 0x0000052eu, 0x65736162u, 0x7265765fu, 0x00000074u, 0x00050005u, 0x00000531u, 0x65736162u, - 0x6972745fu, 0x00000000u, 0x000a0005u, 0x00000537u, 0x505f6c67u, 0x696d6972u, 0x65766974u, 0x61697254u, - 0x656c676eu, 0x69646e49u, 0x45736563u, 0x00005458u, 0x00080005u, 0x00000543u, 0x4d5f6c67u, 0x50687365u, - 0x72507265u, 0x74696d69u, 0x45657669u, 0x00005458u, 0x00060006u, 0x00000543u, 0x00000000u, 0x4c5f6c67u, - 0x72657961u, 0x00000000u, 0x00080005u, 0x00000546u, 0x4d5f6c67u, 0x50687365u, 0x696d6972u, 0x65766974u, - 0x54584573u, 0x00000000u, 0x00070005u, 0x0000054eu, 0x65627543u, 0x64617247u, 0x746e6569u, 0x636f6c42u, - 0x0000006bu, 0x00060006u, 0x0000054eu, 0x00000000u, 0x6e726f63u, 0x745f7265u, 0x00000000u, 0x00060006u, - 0x0000054eu, 0x00000001u, 0x6e6f7266u, 0x6f635f74u, 0x00726f6cu, 0x00060006u, 0x0000054eu, 0x00000002u, - 0x6b636162u, 0x6c6f635fu, 0x0000726fu, 0x00050006u, 0x0000054eu, 0x00000003u, 0x625f7369u, 0x00007665u, - 0x00050005u, 0x00000551u, 0x6d697270u, 0x74756f5fu, 0x00000000u, 0x00040005u, 0x00000586u, 0x65636166u, - 0x0064695fu, 0x00040005u, 0x00000588u, 0x64627573u, 0x00007669u, 0x00040005u, 0x00000597u, 0x65636166u, - 0x00000000u, 0x00050005u, 0x000005a2u, 0x65646e69u, 0x6c626178u, 0x00000065u, 0x00030005u, 0x000005a5u, - 0x00000069u, 0x00050005u, 0x000005adu, 0x74726576u, 0x7864695fu, 0x00000000u, 0x00050005u, 0x000005cbu, - 0x61636f6cu, 0x65765f6cu, 0x00007472u, 0x00050005u, 0x000005cdu, 0x65646e69u, 0x6c626178u, 0x00000065u, - 0x00050005u, 0x000005d2u, 0x6e726f63u, 0x745f7265u, 0x00000000u, 0x00040005u, 0x000005dau, 0x6e726f63u, - 0x00737265u, 0x00060005u, 0x000005ebu, 0x74726576u, 0x65705f73u, 0x72745f72u, 0x00000069u, 0x00040005u, - 0x000005ecu, 0x61726170u, 0x0000006du, 0x00060005u, 0x000005efu, 0x73697274u, 0x7265705fu, 0x6972745fu, - 0x00000000u, 0x00040005u, 0x000005f0u, 0x61726170u, 0x0000006du, 0x00050005u, 0x000005f3u, 0x61746f74u, - 0x65765f6cu, 0x00737472u, 0x00050005u, 0x000005f6u, 0x61746f74u, 0x72745f6cu, 0x00007369u, 0x00050005u, - 0x000005feu, 0x5f697274u, 0x74726576u, 0x00000073u, 0x00040005u, 0x00000613u, 0x5f697274u, 0x00000074u, - 0x00030005u, 0x00000626u, 0x00000074u, 0x00030005u, 0x0000062eu, 0x00003076u, 0x00030005u, 0x00000633u, - 0x00003176u, 0x00030005u, 0x00000639u, 0x00003276u, 0x00050005u, 0x0000063fu, 0x74726576u, 0x7361625fu, - 0x00000065u, 0x00030005u, 0x00000643u, 0x00000076u, 0x00030005u, 0x0000064du, 0x00007675u, 0x00040005u, - 0x0000064eu, 0x61726170u, 0x0000006du, 0x00040005u, 0x00000650u, 0x61726170u, 0x0000006du, 0x00030005u, - 0x00000653u, 0x00007470u, 0x00040005u, 0x00000654u, 0x61726170u, 0x0000006du, 0x00040005u, 0x00000656u, - 0x61726170u, 0x0000006du, 0x00040005u, 0x00000658u, 0x61726170u, 0x0000006du, 0x00040005u, 0x0000065au, - 0x61726170u, 0x0000006du, 0x00040005u, 0x0000065du, 0x70696c63u, 0x00000000u, 0x00040005u, 0x0000065eu, - 0x61726170u, 0x0000006du, 0x00040005u, 0x00000660u, 0x61726170u, 0x0000006du, 0x00040005u, 0x00000662u, - 0x61726170u, 0x0000006du, 0x00030005u, 0x0000066eu, 0x00000074u, 0x00050005u, 0x00000676u, 0x74726576u, - 0x7361625fu, 0x00000065u, 0x00050005u, 0x0000067au, 0x5f697274u, 0x65736162u, 0x00000000u, 0x00030005u, - 0x0000067eu, 0x00003074u, 0x00030005u, 0x00000683u, 0x00003174u, 0x00030005u, 0x00000689u, 0x00003274u, - 0x00030005u, 0x0000068fu, 0x00000069u, 0x00030005u, 0x00000699u, 0x00786469u, 0x00040005u, 0x0000069au, - 0x61726170u, 0x0000006du, 0x00040005u, 0x0000069cu, 0x61726170u, 0x0000006du, 0x00050005u, 0x0000069fu, - 0x5f786469u, 0x65736162u, 0x00000000u, 0x00030005u, 0x000006bbu, 0x00307675u, 0x00040005u, 0x000006bcu, - 0x61726170u, 0x0000006du, 0x00040005u, 0x000006bfu, 0x61726170u, 0x0000006du, 0x00030005u, 0x000006c2u, - 0x00317675u, 0x00040005u, 0x000006c3u, 0x61726170u, 0x0000006du, 0x00040005u, 0x000006c6u, 0x61726170u, - 0x0000006du, 0x00030005u, 0x000006c9u, 0x00327675u, 0x00040005u, 0x000006cau, 0x61726170u, 0x0000006du, - 0x00040005u, 0x000006cdu, 0x61726170u, 0x0000006du, 0x00060005u, 0x000006d0u, 0x6e726f63u, 0x745f7265u, - 0x6c61765fu, 0x00736575u, 0x00080005u, 0x00000754u, 0x6f6c6f43u, 0x6c615072u, 0x65747465u, 0x66667542u, - 0x61457265u, 0x00796c72u, 0x00070006u, 0x00000754u, 0x00000000u, 0x6f635f67u, 0x5f726f6cu, 0x656c6170u, - 0x00657474u, 0x00030005u, 0x00000756u, 0x00000000u, 0x00070005u, 0x00000758u, 0x656d6954u, 0x6d617473u, - 0x75427370u, 0x72656666u, 0x00000000u, 0x00070006u, 0x00000758u, 0x00000000u, 0x69745f67u, 0x7473656du, - 0x73706d61u, 0x00000000u, 0x00030005u, 0x0000075au, 0x00000000u, 0x00050005u, 0x0000075cu, 0x33746e49u, - 0x66754232u, 0x00726566u, 0x00050006u, 0x0000075cu, 0x00000000u, 0x6e695f67u, 0x00323374u, 0x00030005u, - 0x0000075eu, 0x00000000u, 0x00040005u, 0x0000075fu, 0x74726556u, 0x00007865u, 0x00040006u, 0x0000075fu, - 0x00000000u, 0x00000078u, 0x00040006u, 0x0000075fu, 0x00000001u, 0x00000079u, 0x00040006u, 0x0000075fu, - 0x00000002u, 0x0000007au, 0x00050006u, 0x0000075fu, 0x00000003u, 0x6461705fu, 0x00000000u, 0x00060005u, - 0x00000761u, 0x74726556u, 0x75427865u, 0x72656666u, 0x00000000u, 0x00060006u, 0x00000761u, 0x00000000u, - 0x65765f67u, 0x63697472u, 0x00007365u, 0x00030005u, 0x00000763u, 0x00000000u, 0x00060005u, 0x00000765u, - 0x61697254u, 0x656c676eu, 0x66667542u, 0x00007265u, 0x00060006u, 0x00000765u, 0x00000000u, 0x72745f67u, - 0x676e6169u, 0x0073656cu, 0x00030005u, 0x00000767u, 0x00000000u, 0x00050005u, 0x00000769u, 0x65736f50u, - 0x66667542u, 0x00007265u, 0x00050006u, 0x00000769u, 0x00000000u, 0x6f705f67u, 0x00736573u, 0x00030005u, - 0x0000076bu, 0x00000000u, 0x00050005u, 0x0000076du, 0x616f6c46u, 0x66754274u, 0x00726566u, 0x00060006u, - 0x0000076du, 0x00000000u, 0x6c665f67u, 0x7374616fu, 0x00000000u, 0x00030005u, 0x0000076fu, 0x00000000u, - 0x00070005u, 0x00000771u, 0x656d6954u, 0x6d617473u, 0x53646570u, 0x656e6563u, 0x00000000u, 0x00080006u, - 0x00000771u, 0x00000000u, 0x5f6d756eu, 0x796c6f70u, 0x656e696cu, 0x6f6f705fu, 0x0000736cu, 0x00090006u, - 0x00000771u, 0x00000001u, 0x796c6f70u, 0x656e696cu, 0x6f6f705fu, 0x6f5f736cu, 0x65736666u, 0x00000074u, - 0x00080006u, 0x00000771u, 0x00000002u, 0x5f6d756eu, 0x796c6f70u, 0x5f6e6f67u, 0x6c6f6f70u, 0x00000073u, - 0x00090006u, 0x00000771u, 0x00000003u, 0x796c6f70u, 0x5f6e6f67u, 0x6c6f6f70u, 0x666f5f73u, 0x74657366u, - 0x00000000u, 0x00070006u, 0x00000771u, 0x00000004u, 0x5f6d756eu, 0x65627563u, 0x6f6f705fu, 0x0000736cu, - 0x00080006u, 0x00000771u, 0x00000005u, 0x65627563u, 0x6f6f705fu, 0x6f5f736cu, 0x65736666u, 0x00000074u, - 0x000a0006u, 0x00000771u, 0x00000006u, 0x656d6974u, 0x6d617473u, 0x625f7370u, 0x65666675u, 0x666f5f72u, - 0x74657366u, 0x00000000u, 0x00080006u, 0x00000771u, 0x00000007u, 0x33746e69u, 0x75625f32u, 0x72656666u, - 0x66666f5fu, 0x00746573u, 0x00090006u, 0x00000771u, 0x00000008u, 0x74726576u, 0x625f7865u, 0x65666675u, - 0x666f5f72u, 0x74657366u, 0x00000000u, 0x00090006u, 0x00000771u, 0x00000009u, 0x61697274u, 0x656c676eu, - 0x6675625fu, 0x5f726566u, 0x7366666fu, 0x00007465u, 0x00080006u, 0x00000771u, 0x0000000au, 0x65736f70u, - 0x6675625fu, 0x5f726566u, 0x7366666fu, 0x00007465u, 0x00080006u, 0x00000771u, 0x0000000bu, 0x616f6c66u, - 0x75625f74u, 0x72656666u, 0x66666f5fu, 0x00746573u, 0x00050006u, 0x00000771u, 0x0000000cu, 0x6461705fu, - 0x00000000u, 0x00050005u, 0x00000773u, 0x6e656353u, 0x66754265u, 0x00726566u, 0x00060006u, 0x00000773u, - 0x00000000u, 0x63735f67u, 0x73656e65u, 0x00000000u, 0x00030005u, 0x00000775u, 0x00000000u, 0x00080005u, - 0x00000776u, 0x656d6954u, 0x6d617473u, 0x50646570u, 0x6c796c6fu, 0x50656e69u, 0x006c6f6fu, 0x00070006u, - 0x00000776u, 0x00000000u, 0x5f6d756eu, 0x656d6974u, 0x6d617473u, 0x00007370u, 0x00060006u, 0x00000776u, - 0x00000001u, 0x5f6d756eu, 0x72726176u, 0x00737961u, 0x00070006u, 0x00000776u, 0x00000002u, 0x5f6d756eu, - 0x74726576u, 0x73656369u, 0x00000000u, 0x00070006u, 0x00000776u, 0x00000003u, 0x6d697270u, 0x7079745fu, - 0x64695f65u, 0x00000000u, 0x00080006u, 0x00000776u, 0x00000004u, 0x656d6974u, 0x6d617473u, 0x6f5f7370u, - 0x65736666u, 0x00000074u, 0x00090006u, 0x00000776u, 0x00000005u, 0x765f7374u, 0x61727261u, 0x705f7379u, - 0x666f5f73u, 0x74657366u, 0x00000000u, 0x00080006u, 0x00000776u, 0x00000006u, 0x72726176u, 0x5f737961u, - 0x6f5f7370u, 0x65736666u, 0x00000074u, 0x00070006u, 0x00000776u, 0x00000007u, 0x74726576u, 0x73656369u, - 0x66666f5fu, 0x00746573u, 0x00060006u, 0x00000776u, 0x00000008u, 0x62626161u, 0x66666f5fu, 0x00746573u, - 0x00050006u, 0x00000776u, 0x00000009u, 0x6461705fu, 0x00000031u, 0x00050006u, 0x00000776u, 0x0000000au, - 0x6461705fu, 0x00000032u, 0x00050006u, 0x00000776u, 0x0000000bu, 0x6461705fu, 0x00000033u, 0x00050006u, - 0x00000776u, 0x0000000cu, 0x6461705fu, 0x00000034u, 0x00050006u, 0x00000776u, 0x0000000du, 0x6461705fu, - 0x00000035u, 0x00050006u, 0x00000776u, 0x0000000eu, 0x6461705fu, 0x00000036u, 0x00050006u, 0x00000776u, - 0x0000000fu, 0x6461705fu, 0x00000037u, 0x00070005u, 0x00000778u, 0x796c6f50u, 0x656e696cu, 0x6c6f6f50u, - 0x66667542u, 0x00007265u, 0x00080006u, 0x00000778u, 0x00000000u, 0x6f705f67u, 0x696c796cu, 0x705f656eu, - 0x736c6f6fu, 0x00000000u, 0x00030005u, 0x0000077au, 0x00000000u, 0x00080005u, 0x0000077bu, 0x656d6954u, - 0x6d617473u, 0x50646570u, 0x67796c6fu, 0x6f506e6fu, 0x00006c6fu, 0x00070006u, 0x0000077bu, 0x00000000u, - 0x5f6d756eu, 0x656d6974u, 0x6d617473u, 0x00007370u, 0x00060006u, 0x0000077bu, 0x00000001u, 0x5f6d756eu, - 0x72726176u, 0x00737961u, 0x00070006u, 0x0000077bu, 0x00000002u, 0x5f6d756eu, 0x74726576u, 0x73656369u, - 0x00000000u, 0x00070006u, 0x0000077bu, 0x00000003u, 0x5f6d756eu, 0x61697274u, 0x656c676eu, 0x00000073u, - 0x00070006u, 0x0000077bu, 0x00000004u, 0x6d697270u, 0x7079745fu, 0x64695f65u, 0x00000000u, 0x00080006u, - 0x0000077bu, 0x00000005u, 0x656d6974u, 0x6d617473u, 0x6f5f7370u, 0x65736666u, 0x00000074u, 0x00090006u, - 0x0000077bu, 0x00000006u, 0x765f7374u, 0x61727261u, 0x705f7379u, 0x666f5f73u, 0x74657366u, 0x00000000u, - 0x00080006u, 0x0000077bu, 0x00000007u, 0x72726176u, 0x5f737961u, 0x6f5f7370u, 0x65736666u, 0x00000074u, - 0x00070006u, 0x0000077bu, 0x00000008u, 0x5f697274u, 0x6f5f7370u, 0x65736666u, 0x00000074u, 0x00070006u, - 0x0000077bu, 0x00000009u, 0x74726576u, 0x73656369u, 0x66666f5fu, 0x00746573u, 0x00080006u, 0x0000077bu, - 0x0000000au, 0x61697274u, 0x656c676eu, 0x666f5f73u, 0x74657366u, 0x00000000u, 0x00060006u, 0x0000077bu, - 0x0000000bu, 0x62626161u, 0x66666f5fu, 0x00746573u, 0x00050006u, 0x0000077bu, 0x0000000cu, 0x6461705fu, - 0x00000031u, 0x00050006u, 0x0000077bu, 0x0000000du, 0x6461705fu, 0x00000032u, 0x00050006u, 0x0000077bu, - 0x0000000eu, 0x6461705fu, 0x00000033u, 0x00050006u, 0x0000077bu, 0x0000000fu, 0x6461705fu, 0x00000034u, - 0x00070005u, 0x0000077du, 0x796c6f50u, 0x506e6f67u, 0x426c6f6fu, 0x65666675u, 0x00000072u, 0x00070006u, - 0x0000077du, 0x00000000u, 0x6f705f67u, 0x6f67796cu, 0x6f705f6eu, 0x00736c6fu, 0x00030005u, 0x0000077fu, - 0x00000000u, 0x00060005u, 0x00000780u, 0x7473624fu, 0x656c6361u, 0x6c6f6f50u, 0x00000000u, 0x00060006u, - 0x00000780u, 0x00000000u, 0x5f6d756eu, 0x65627563u, 0x00000073u, 0x00070006u, 0x00000780u, 0x00000001u, - 0x5f6d756eu, 0x656d6974u, 0x6d617473u, 0x00007370u, 0x00070006u, 0x00000780u, 0x00000002u, 0x5f6d756eu, - 0x63617274u, 0x6f705f6bu, 0x00736573u, 0x00070006u, 0x00000780u, 0x00000003u, 0x6d697270u, 0x7079745fu, - 0x64695f65u, 0x00000000u, 0x00080006u, 0x00000780u, 0x00000004u, 0x656d6974u, 0x6d617473u, 0x6f5f7370u, - 0x65736666u, 0x00000074u, 0x00080006u, 0x00000780u, 0x00000005u, 0x65627563u, 0x5f73745fu, 0x6f5f7370u, - 0x65736666u, 0x00000074u, 0x00090006u, 0x00000780u, 0x00000006u, 0x63617274u, 0x69745f6bu, 0x7473656du, - 0x73706d61u, 0x66666f5fu, 0x00746573u, 0x00080006u, 0x00000780u, 0x00000007u, 0x6e617274u, 0x74616c73u, - 0x736e6f69u, 0x66666f5fu, 0x00746573u, 0x00080006u, 0x00000780u, 0x00000008u, 0x74617571u, 0x696e7265u, - 0x5f736e6fu, 0x7366666fu, 0x00007465u, 0x00070006u, 0x00000780u, 0x00000009u, 0x6c616373u, 0x6f5f7365u, - 0x65736666u, 0x00000074u, 0x00070006u, 0x00000780u, 0x0000000au, 0x6f6c6f63u, 0x6f5f7372u, 0x65736666u, - 0x00000074u, 0x00070006u, 0x00000780u, 0x0000000bu, 0x646e6572u, 0x665f7265u, 0x7367616cu, 0x00000000u, - 0x00050006u, 0x00000780u, 0x0000000cu, 0x6461705fu, 0x00000032u, 0x00050006u, 0x00000780u, 0x0000000du, - 0x6461705fu, 0x00000033u, 0x00050006u, 0x00000780u, 0x0000000eu, 0x6461705fu, 0x00000034u, 0x00050006u, - 0x00000780u, 0x0000000fu, 0x6461705fu, 0x00000035u, 0x00070005u, 0x00000782u, 0x7473624fu, 0x656c6361u, - 0x6c6f6f50u, 0x66667542u, 0x00007265u, 0x00080006u, 0x00000782u, 0x00000000u, 0x626f5f67u, 0x63617473u, - 0x705f656cu, 0x736c6f6fu, 0x00000000u, 0x00030005u, 0x00000784u, 0x00000000u, 0x00030047u, 0x0000003au, - 0x00000002u, 0x00050048u, 0x0000003au, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000003au, - 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000003au, 0x00000002u, 0x00000023u, 0x00000008u, - 0x00050048u, 0x0000003au, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x0000003au, 0x00000004u, - 0x00000023u, 0x00000010u, 0x00050048u, 0x0000003au, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, - 0x0000003au, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x0000003au, 0x00000007u, 0x00000023u, - 0x0000001cu, 0x00050048u, 0x0000003au, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x0000003au, - 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x0000003au, 0x0000000au, 0x00000023u, 0x00000028u, - 0x00050048u, 0x0000003au, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x0000003au, 0x0000000cu, - 0x00000023u, 0x00000030u, 0x00050048u, 0x0000003au, 0x0000000du, 0x00000023u, 0x00000034u, 0x00050048u, - 0x0000003au, 0x0000000eu, 0x00000023u, 0x00000038u, 0x00050048u, 0x0000003au, 0x0000000fu, 0x00000023u, - 0x0000003cu, 0x00050048u, 0x0000003au, 0x00000010u, 0x00000023u, 0x00000040u, 0x00050048u, 0x0000003au, - 0x00000011u, 0x00000023u, 0x00000044u, 0x00050048u, 0x0000003au, 0x00000012u, 0x00000023u, 0x00000048u, - 0x00050048u, 0x0000003au, 0x00000013u, 0x00000023u, 0x0000004cu, 0x00050048u, 0x0000003au, 0x00000014u, - 0x00000023u, 0x00000050u, 0x00040047u, 0x00000379u, 0x0000000bu, 0x0000001au, 0x00040047u, 0x0000037eu, - 0x0000000bu, 0x0000001bu, 0x00050048u, 0x00000385u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, - 0x00000385u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000385u, 0x00000002u, 0x00000023u, - 0x00000008u, 0x00050048u, 0x00000385u, 0x00000003u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000385u, - 0x00000004u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000385u, 0x00000005u, 0x00000023u, 0x00000018u, - 0x00050048u, 0x00000385u, 0x00000006u, 0x00000023u, 0x0000001cu, 0x00040047u, 0x00000386u, 0x00000006u, - 0x00000020u, 0x00030047u, 0x00000387u, 0x00000002u, 0x00040048u, 0x00000387u, 0x00000000u, 0x00000018u, - 0x00050048u, 0x00000387u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000389u, 0x00000018u, - 0x00040047u, 0x00000389u, 0x00000021u, 0x0000000du, 0x00040047u, 0x00000389u, 0x00000022u, 0x00000000u, - 0x00050048u, 0x00000395u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000395u, 0x00000001u, - 0x00000023u, 0x00000004u, 0x00050048u, 0x00000395u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, - 0x00000395u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000395u, 0x00000004u, 0x00000023u, - 0x00000010u, 0x00050048u, 0x00000395u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000395u, - 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000395u, 0x00000007u, 0x00000023u, 0x0000001cu, - 0x00050048u, 0x00000395u, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000395u, 0x00000009u, - 0x00000023u, 0x00000024u, 0x00050048u, 0x00000395u, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, - 0x00000395u, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x00000395u, 0x0000000cu, 0x00000023u, - 0x00000030u, 0x00050048u, 0x00000395u, 0x0000000du, 0x00000023u, 0x00000034u, 0x00050048u, 0x00000395u, - 0x0000000eu, 0x00000023u, 0x00000038u, 0x00050048u, 0x00000395u, 0x0000000fu, 0x00000023u, 0x0000003cu, - 0x00050048u, 0x00000395u, 0x00000010u, 0x00000023u, 0x00000040u, 0x00050048u, 0x00000395u, 0x00000011u, - 0x00000023u, 0x00000044u, 0x00040047u, 0x00000396u, 0x00000006u, 0x00000048u, 0x00030047u, 0x00000397u, - 0x00000002u, 0x00040048u, 0x00000397u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000397u, 0x00000000u, - 0x00000023u, 0x00000000u, 0x00030047u, 0x00000399u, 0x00000018u, 0x00040047u, 0x00000399u, 0x00000021u, - 0x0000000bu, 0x00040047u, 0x00000399u, 0x00000022u, 0x00000000u, 0x00040048u, 0x000003a1u, 0x00000000u, - 0x00000005u, 0x00050048u, 0x000003a1u, 0x00000000u, 0x00000007u, 0x00000010u, 0x00050048u, 0x000003a1u, - 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x000003a2u, 0x00000006u, 0x00000040u, 0x00030047u, - 0x000003a3u, 0x00000002u, 0x00040048u, 0x000003a3u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000003a3u, - 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000003a5u, 0x00000018u, 0x00040047u, 0x000003a5u, - 0x00000021u, 0x0000000cu, 0x00040047u, 0x000003a5u, 0x00000022u, 0x00000000u, 0x00030047u, 0x000003cfu, - 0x00000018u, 0x00030047u, 0x000003d4u, 0x00000018u, 0x00030047u, 0x000003dfu, 0x00000018u, 0x00030047u, - 0x000003e4u, 0x00000018u, 0x00030047u, 0x0000041bu, 0x00000018u, 0x00030047u, 0x0000042eu, 0x00000002u, - 0x00050048u, 0x0000042eu, 0x00000000u, 0x0000000bu, 0x00000000u, 0x00030047u, 0x0000044cu, 0x00000018u, - 0x00030047u, 0x0000045eu, 0x00000018u, 0x00030047u, 0x00000468u, 0x00000018u, 0x00040047u, 0x00000537u, - 0x0000000bu, 0x000014b0u, 0x00030047u, 0x00000543u, 0x00000002u, 0x00050048u, 0x00000543u, 0x00000000u, - 0x0000000bu, 0x00000009u, 0x00040048u, 0x00000543u, 0x00000000u, 0x00001497u, 0x00030047u, 0x0000054eu, - 0x00000002u, 0x00040048u, 0x0000054eu, 0x00000000u, 0x00001497u, 0x00040048u, 0x0000054eu, 0x00000001u, - 0x00001497u, 0x00040048u, 0x0000054eu, 0x00000002u, 0x00001497u, 0x00040048u, 0x0000054eu, 0x00000003u, - 0x00001497u, 0x00040047u, 0x00000551u, 0x0000001eu, 0x00000000u, 0x00030047u, 0x000005a2u, 0x00000018u, - 0x00030047u, 0x000005cdu, 0x00000018u, 0x00040047u, 0x00000753u, 0x00000006u, 0x00000010u, 0x00030047u, - 0x00000754u, 0x00000002u, 0x00040048u, 0x00000754u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000754u, - 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000756u, 0x00000018u, 0x00040047u, 0x00000756u, - 0x00000021u, 0x0000000au, 0x00040047u, 0x00000756u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000757u, - 0x00000006u, 0x00000008u, 0x00030047u, 0x00000758u, 0x00000002u, 0x00040048u, 0x00000758u, 0x00000000u, - 0x00000018u, 0x00050048u, 0x00000758u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000075au, - 0x00000018u, 0x00040047u, 0x0000075au, 0x00000021u, 0x00000000u, 0x00040047u, 0x0000075au, 0x00000022u, - 0x00000000u, 0x00040047u, 0x0000075bu, 0x00000006u, 0x00000004u, 0x00030047u, 0x0000075cu, 0x00000002u, - 0x00040048u, 0x0000075cu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000075cu, 0x00000000u, 0x00000023u, - 0x00000000u, 0x00030047u, 0x0000075eu, 0x00000018u, 0x00040047u, 0x0000075eu, 0x00000021u, 0x00000001u, - 0x00040047u, 0x0000075eu, 0x00000022u, 0x00000000u, 0x00050048u, 0x0000075fu, 0x00000000u, 0x00000023u, - 0x00000000u, 0x00050048u, 0x0000075fu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000075fu, - 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000075fu, 0x00000003u, 0x00000023u, 0x0000000cu, - 0x00040047u, 0x00000760u, 0x00000006u, 0x00000010u, 0x00030047u, 0x00000761u, 0x00000002u, 0x00040048u, - 0x00000761u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000761u, 0x00000000u, 0x00000023u, 0x00000000u, - 0x00030047u, 0x00000763u, 0x00000018u, 0x00040047u, 0x00000763u, 0x00000021u, 0x00000002u, 0x00040047u, - 0x00000763u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000764u, 0x00000006u, 0x00000010u, 0x00030047u, - 0x00000765u, 0x00000002u, 0x00040048u, 0x00000765u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000765u, - 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000767u, 0x00000018u, 0x00040047u, 0x00000767u, - 0x00000021u, 0x00000003u, 0x00040047u, 0x00000767u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000768u, - 0x00000006u, 0x00000040u, 0x00030047u, 0x00000769u, 0x00000002u, 0x00040048u, 0x00000769u, 0x00000000u, - 0x00000018u, 0x00050048u, 0x00000769u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000076bu, - 0x00000018u, 0x00040047u, 0x0000076bu, 0x00000021u, 0x00000004u, 0x00040047u, 0x0000076bu, 0x00000022u, - 0x00000000u, 0x00040047u, 0x0000076cu, 0x00000006u, 0x00000004u, 0x00030047u, 0x0000076du, 0x00000002u, - 0x00040048u, 0x0000076du, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000076du, 0x00000000u, 0x00000023u, - 0x00000000u, 0x00030047u, 0x0000076fu, 0x00000018u, 0x00040047u, 0x0000076fu, 0x00000021u, 0x00000005u, - 0x00040047u, 0x0000076fu, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000770u, 0x00000006u, 0x00000004u, - 0x00050048u, 0x00000771u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000771u, 0x00000001u, - 0x00000023u, 0x00000004u, 0x00050048u, 0x00000771u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, - 0x00000771u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000771u, 0x00000004u, 0x00000023u, - 0x00000010u, 0x00050048u, 0x00000771u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000771u, - 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000771u, 0x00000007u, 0x00000023u, 0x0000001cu, - 0x00050048u, 0x00000771u, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000771u, 0x00000009u, - 0x00000023u, 0x00000024u, 0x00050048u, 0x00000771u, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, - 0x00000771u, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x00000771u, 0x0000000cu, 0x00000023u, - 0x00000030u, 0x00040047u, 0x00000772u, 0x00000006u, 0x00000080u, 0x00030047u, 0x00000773u, 0x00000002u, - 0x00040048u, 0x00000773u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000773u, 0x00000000u, 0x00000023u, - 0x00000000u, 0x00030047u, 0x00000775u, 0x00000018u, 0x00040047u, 0x00000775u, 0x00000021u, 0x00000006u, - 0x00040047u, 0x00000775u, 0x00000022u, 0x00000000u, 0x00050048u, 0x00000776u, 0x00000000u, 0x00000023u, - 0x00000000u, 0x00050048u, 0x00000776u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000776u, - 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000776u, 0x00000003u, 0x00000023u, 0x0000000cu, - 0x00050048u, 0x00000776u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000776u, 0x00000005u, - 0x00000023u, 0x00000014u, 0x00050048u, 0x00000776u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, - 0x00000776u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000776u, 0x00000008u, 0x00000023u, - 0x00000020u, 0x00050048u, 0x00000776u, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x00000776u, - 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x00000776u, 0x0000000bu, 0x00000023u, 0x0000002cu, - 0x00050048u, 0x00000776u, 0x0000000cu, 0x00000023u, 0x00000030u, 0x00050048u, 0x00000776u, 0x0000000du, - 0x00000023u, 0x00000034u, 0x00050048u, 0x00000776u, 0x0000000eu, 0x00000023u, 0x00000038u, 0x00050048u, - 0x00000776u, 0x0000000fu, 0x00000023u, 0x0000003cu, 0x00040047u, 0x00000777u, 0x00000006u, 0x00000040u, - 0x00030047u, 0x00000778u, 0x00000002u, 0x00040048u, 0x00000778u, 0x00000000u, 0x00000018u, 0x00050048u, - 0x00000778u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000077au, 0x00000018u, 0x00040047u, - 0x0000077au, 0x00000021u, 0x00000007u, 0x00040047u, 0x0000077au, 0x00000022u, 0x00000000u, 0x00050048u, - 0x0000077bu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000077bu, 0x00000001u, 0x00000023u, - 0x00000004u, 0x00050048u, 0x0000077bu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000077bu, - 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x0000077bu, 0x00000004u, 0x00000023u, 0x00000010u, - 0x00050048u, 0x0000077bu, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x0000077bu, 0x00000006u, - 0x00000023u, 0x00000018u, 0x00050048u, 0x0000077bu, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, - 0x0000077bu, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x0000077bu, 0x00000009u, 0x00000023u, - 0x00000024u, 0x00050048u, 0x0000077bu, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x0000077bu, - 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x0000077bu, 0x0000000cu, 0x00000023u, 0x00000030u, - 0x00050048u, 0x0000077bu, 0x0000000du, 0x00000023u, 0x00000034u, 0x00050048u, 0x0000077bu, 0x0000000eu, - 0x00000023u, 0x00000038u, 0x00050048u, 0x0000077bu, 0x0000000fu, 0x00000023u, 0x0000003cu, 0x00040047u, - 0x0000077cu, 0x00000006u, 0x00000040u, 0x00030047u, 0x0000077du, 0x00000002u, 0x00040048u, 0x0000077du, - 0x00000000u, 0x00000018u, 0x00050048u, 0x0000077du, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, - 0x0000077fu, 0x00000018u, 0x00040047u, 0x0000077fu, 0x00000021u, 0x00000008u, 0x00040047u, 0x0000077fu, - 0x00000022u, 0x00000000u, 0x00050048u, 0x00000780u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, - 0x00000780u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000780u, 0x00000002u, 0x00000023u, - 0x00000008u, 0x00050048u, 0x00000780u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000780u, - 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000780u, 0x00000005u, 0x00000023u, 0x00000014u, - 0x00050048u, 0x00000780u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000780u, 0x00000007u, - 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000780u, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, - 0x00000780u, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x00000780u, 0x0000000au, 0x00000023u, - 0x00000028u, 0x00050048u, 0x00000780u, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x00000780u, - 0x0000000cu, 0x00000023u, 0x00000030u, 0x00050048u, 0x00000780u, 0x0000000du, 0x00000023u, 0x00000034u, - 0x00050048u, 0x00000780u, 0x0000000eu, 0x00000023u, 0x00000038u, 0x00050048u, 0x00000780u, 0x0000000fu, - 0x00000023u, 0x0000003cu, 0x00040047u, 0x00000781u, 0x00000006u, 0x00000040u, 0x00030047u, 0x00000782u, - 0x00000002u, 0x00040048u, 0x00000782u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000782u, 0x00000000u, - 0x00000023u, 0x00000000u, 0x00030047u, 0x00000784u, 0x00000018u, 0x00040047u, 0x00000784u, 0x00000021u, - 0x00000009u, 0x00040047u, 0x00000784u, 0x00000022u, 0x00000000u, 0x00020013u, 0x00000002u, 0x00030021u, - 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x0004002bu, 0x00000006u, - 0x00000007u, 0x00000020u, 0x0004002bu, 0x00000006u, 0x00000008u, 0x00000001u, 0x00030016u, 0x00000009u, - 0x00000020u, 0x00030021u, 0x0000000au, 0x00000009u, 0x00040017u, 0x0000000du, 0x00000009u, 0x00000003u, - 0x00040020u, 0x0000000eu, 0x00000007u, 0x0000000du, 0x00040017u, 0x0000000fu, 0x00000009u, 0x00000004u, - 0x00040018u, 0x00000010u, 0x0000000fu, 0x00000004u, 0x0003001eu, 0x00000011u, 0x00000010u, 0x00040020u, - 0x00000012u, 0x00000007u, 0x00000011u, 0x0014001eu, 0x00000013u, 0x00000009u, 0x00000009u, 0x00000009u, - 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, - 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00040020u, - 0x00000014u, 0x00000007u, 0x00000013u, 0x00060021u, 0x00000015u, 0x0000000fu, 0x0000000eu, 0x00000012u, - 0x00000014u, 0x00040020u, 0x0000001bu, 0x00000007u, 0x00000006u, 0x00040021u, 0x0000001cu, 0x00000006u, - 0x0000001bu, 0x00040017u, 0x00000023u, 0x00000009u, 0x00000002u, 0x00050021u, 0x00000024u, 0x00000023u, - 0x0000001bu, 0x0000001bu, 0x00040020u, 0x00000029u, 0x00000007u, 0x00000023u, 0x00070021u, 0x0000002au, - 0x0000000du, 0x0000000eu, 0x0000000eu, 0x0000000eu, 0x00000029u, 0x00040017u, 0x00000031u, 0x00000006u, - 0x00000003u, 0x00050021u, 0x00000032u, 0x00000031u, 0x0000001bu, 0x0000001bu, 0x00040020u, 0x00000037u, - 0x00000007u, 0x00000009u, 0x00040015u, 0x00000039u, 0x00000020u, 0x00000001u, 0x0017001eu, 0x0000003au, - 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000039u, - 0x00000039u, 0x00000006u, 0x00000009u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000009u, 0x00000009u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x0000003bu, 0x00000009u, - 0x0000003au, 0x0004003bu, 0x0000003bu, 0x0000003cu, 0x00000009u, 0x0004002bu, 0x00000039u, 0x0000003du, - 0x00000005u, 0x00040020u, 0x0000003eu, 0x00000009u, 0x00000009u, 0x0004002bu, 0x00000009u, 0x00000041u, - 0x00000000u, 0x00020014u, 0x00000042u, 0x0004002bu, 0x00000009u, 0x0000004au, 0x3f800000u, 0x0004002bu, - 0x00000039u, 0x0000004du, 0x00000004u, 0x0004002bu, 0x00000009u, 0x00000057u, 0x40000000u, 0x0004002bu, - 0x00000039u, 0x0000005fu, 0x00000000u, 0x00040020u, 0x00000060u, 0x00000007u, 0x00000010u, 0x0004002bu, - 0x00000006u, 0x0000006bu, 0x00000002u, 0x0004002bu, 0x00000009u, 0x00000072u, 0x358637bdu, 0x0007002cu, - 0x0000000fu, 0x00000076u, 0x00000041u, 0x00000041u, 0x00000041u, 0x0000004au, 0x0004002bu, 0x00000009u, - 0x00000079u, 0x3fc90fdau, 0x0004002bu, 0x00000039u, 0x0000007au, 0x0000000au, 0x0004002bu, 0x00000009u, - 0x00000080u, 0x3a83126fu, 0x0004002bu, 0x00000006u, 0x00000089u, 0x00000000u, 0x0004002bu, 0x00000039u, - 0x0000008eu, 0x00000002u, 0x0004002bu, 0x00000009u, 0x00000091u, 0x3f000000u, 0x0004002bu, 0x00000039u, - 0x0000009au, 0x00000003u, 0x0004002bu, 0x00000009u, 0x000000a0u, 0x41200000u, 0x0004002bu, 0x00000009u, - 0x000000afu, 0xbf800000u, 0x0004002bu, 0x00000039u, 0x000000ccu, 0x00000006u, 0x0004002bu, 0x00000039u, - 0x000000d2u, 0x00000007u, 0x0004002bu, 0x00000039u, 0x000000d8u, 0x00000008u, 0x0004002bu, 0x00000039u, - 0x000000deu, 0x00000009u, 0x0004002bu, 0x00000039u, 0x000000eau, 0x0000000bu, 0x0004002bu, 0x00000039u, - 0x000000f1u, 0x0000000cu, 0x0004002bu, 0x00000039u, 0x00000107u, 0x0000000eu, 0x0004002bu, 0x00000039u, - 0x0000010du, 0x0000000fu, 0x0004002bu, 0x00000039u, 0x00000115u, 0x00000010u, 0x0004002bu, 0x00000039u, - 0x0000011bu, 0x00000011u, 0x0004002bu, 0x00000039u, 0x00000127u, 0x00000001u, 0x0004002bu, 0x00000039u, - 0x0000014au, 0x0000000du, 0x0004002bu, 0x00000006u, 0x00000160u, 0x00000003u, 0x0004002bu, 0x00000006u, - 0x00000166u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x0000016cu, 0x0000000fu, 0x0004002bu, 0x00000006u, - 0x0000016eu, 0x0000002du, 0x0004002bu, 0x00000006u, 0x0000017au, 0x00000004u, 0x0004002bu, 0x00000006u, - 0x00000180u, 0x00000010u, 0x0004002bu, 0x00000006u, 0x00000182u, 0x00000040u, 0x0005002cu, 0x00000023u, - 0x0000018du, 0x00000041u, 0x00000041u, 0x0005002cu, 0x00000023u, 0x00000193u, 0x0000004au, 0x00000041u, - 0x0005002cu, 0x00000023u, 0x00000195u, 0x00000041u, 0x0000004au, 0x0004001cu, 0x0000019cu, 0x00000023u, - 0x00000166u, 0x00040020u, 0x0000019du, 0x00000007u, 0x0000019cu, 0x0005002cu, 0x00000023u, 0x000001a2u, - 0x00000091u, 0x00000041u, 0x0005002cu, 0x00000023u, 0x000001a4u, 0x00000091u, 0x00000091u, 0x0005002cu, - 0x00000023u, 0x000001a6u, 0x00000041u, 0x00000091u, 0x0004002bu, 0x00000006u, 0x000001b2u, 0x00000005u, - 0x0004002bu, 0x00000006u, 0x000001bbu, 0x00000009u, 0x0004002bu, 0x00000006u, 0x000001c3u, 0x0000000cu, - 0x0004002bu, 0x00000006u, 0x000001cbu, 0x0000000eu, 0x0004002bu, 0x00000009u, 0x000001d4u, 0x40800000u, - 0x0004002bu, 0x00000006u, 0x000001e5u, 0x00000011u, 0x0004002bu, 0x00000006u, 0x000001edu, 0x00000018u, - 0x0004002bu, 0x00000006u, 0x000001f5u, 0x0000001eu, 0x0004002bu, 0x00000006u, 0x000001fdu, 0x00000023u, - 0x0004002bu, 0x00000006u, 0x00000205u, 0x00000027u, 0x0004002bu, 0x00000006u, 0x0000020du, 0x0000002au, - 0x0004002bu, 0x00000006u, 0x00000215u, 0x0000002cu, 0x0004002bu, 0x00000006u, 0x00000219u, 0x00000007u, - 0x0004002bu, 0x00000006u, 0x0000021du, 0x00000008u, 0x0004002bu, 0x00000009u, 0x00000220u, 0x41000000u, - 0x0006002cu, 0x00000031u, 0x00000242u, 0x00000089u, 0x00000008u, 0x0000006bu, 0x0004001cu, 0x00000249u, - 0x00000031u, 0x0000017au, 0x00040020u, 0x0000024au, 0x00000007u, 0x00000249u, 0x0006002cu, 0x00000031u, - 0x0000024cu, 0x00000089u, 0x00000160u, 0x000001b2u, 0x00040020u, 0x0000024du, 0x00000007u, 0x00000031u, - 0x0006002cu, 0x00000031u, 0x0000024fu, 0x00000160u, 0x00000008u, 0x0000017au, 0x0006002cu, 0x00000031u, - 0x00000251u, 0x000001b2u, 0x0000017au, 0x0000006bu, 0x0006002cu, 0x00000031u, 0x00000253u, 0x00000160u, - 0x0000017au, 0x000001b2u, 0x0004001cu, 0x0000025eu, 0x00000006u, 0x000001b2u, 0x00040020u, 0x0000025fu, - 0x00000007u, 0x0000025eu, 0x0008002cu, 0x0000025eu, 0x00000261u, 0x00000089u, 0x000001b2u, 0x000001bbu, - 0x000001c3u, 0x000001cbu, 0x00040020u, 0x00000266u, 0x00000007u, 0x00000042u, 0x0003002au, 0x00000042u, - 0x00000268u, 0x00030029u, 0x00000042u, 0x00000275u, 0x0004001cu, 0x000002c9u, 0x00000006u, 0x000001bbu, - 0x00040020u, 0x000002cau, 0x00000007u, 0x000002c9u, 0x000c002cu, 0x000002c9u, 0x000002ccu, 0x00000089u, - 0x000001bbu, 0x000001e5u, 0x000001edu, 0x000001f5u, 0x000001fdu, 0x00000205u, 0x0000020du, 0x00000215u, - 0x0004002bu, 0x00000006u, 0x000002e0u, 0x0000001cu, 0x0004002bu, 0x00000006u, 0x00000301u, 0x00000030u, - 0x0004002bu, 0x00000006u, 0x00000312u, 0x00000037u, 0x0004002bu, 0x00000006u, 0x00000323u, 0x0000003cu, - 0x0004002bu, 0x00000006u, 0x00000334u, 0x0000003fu, 0x00040020u, 0x00000378u, 0x00000001u, 0x00000031u, - 0x0004003bu, 0x00000378u, 0x00000379u, 0x00000001u, 0x00040020u, 0x0000037au, 0x00000001u, 0x00000006u, - 0x0004003bu, 0x00000378u, 0x0000037eu, 0x00000001u, 0x00040015u, 0x00000381u, 0x00000040u, 0x00000001u, - 0x0009001eu, 0x00000382u, 0x00000006u, 0x00000006u, 0x00000381u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00040020u, 0x00000383u, 0x00000007u, 0x00000382u, 0x0009001eu, 0x00000385u, 0x00000006u, - 0x00000006u, 0x00000381u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0003001du, 0x00000386u, - 0x00000385u, 0x0003001eu, 0x00000387u, 0x00000386u, 0x00040020u, 0x00000388u, 0x0000000cu, 0x00000387u, - 0x0004003bu, 0x00000388u, 0x00000389u, 0x0000000cu, 0x000c001eu, 0x0000038au, 0x00000006u, 0x00000006u, - 0x00000010u, 0x0000000du, 0x0000000du, 0x0000000du, 0x00000006u, 0x00000006u, 0x00000009u, 0x00000006u, - 0x00040020u, 0x0000038bu, 0x0000151au, 0x0000038au, 0x0004003bu, 0x0000038bu, 0x0000038cu, 0x0000151au, - 0x00040020u, 0x0000038du, 0x0000151au, 0x00000006u, 0x00040020u, 0x00000390u, 0x0000000cu, 0x00000385u, - 0x0014001eu, 0x00000395u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, - 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, - 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x0003001du, 0x00000396u, 0x00000395u, 0x0003001eu, - 0x00000397u, 0x00000396u, 0x00040020u, 0x00000398u, 0x0000000cu, 0x00000397u, 0x0004003bu, 0x00000398u, - 0x00000399u, 0x0000000cu, 0x00040020u, 0x0000039cu, 0x0000000cu, 0x00000395u, 0x0003001eu, 0x000003a1u, - 0x00000010u, 0x0003001du, 0x000003a2u, 0x000003a1u, 0x0003001eu, 0x000003a3u, 0x000003a2u, 0x00040020u, - 0x000003a4u, 0x0000000cu, 0x000003a3u, 0x0004003bu, 0x000003a4u, 0x000003a5u, 0x0000000cu, 0x00040020u, - 0x000003a8u, 0x0000000cu, 0x000003a1u, 0x00040017u, 0x000003beu, 0x00000006u, 0x00000002u, 0x0004001cu, - 0x000003bfu, 0x000003beu, 0x000001c3u, 0x0005002cu, 0x000003beu, 0x000003c0u, 0x00000089u, 0x0000017au, - 0x0005002cu, 0x000003beu, 0x000003c1u, 0x00000089u, 0x00000160u, 0x0005002cu, 0x000003beu, 0x000003c2u, - 0x00000089u, 0x000001b2u, 0x0005002cu, 0x000003beu, 0x000003c3u, 0x00000089u, 0x0000006bu, 0x0005002cu, - 0x000003beu, 0x000003c4u, 0x00000008u, 0x0000017au, 0x0005002cu, 0x000003beu, 0x000003c5u, 0x00000008u, - 0x00000160u, 0x0005002cu, 0x000003beu, 0x000003c6u, 0x00000008u, 0x000001b2u, 0x0005002cu, 0x000003beu, - 0x000003c7u, 0x00000008u, 0x0000006bu, 0x0005002cu, 0x000003beu, 0x000003c8u, 0x0000006bu, 0x0000017au, - 0x0005002cu, 0x000003beu, 0x000003c9u, 0x00000160u, 0x0000017au, 0x0005002cu, 0x000003beu, 0x000003cau, - 0x00000160u, 0x000001b2u, 0x0005002cu, 0x000003beu, 0x000003cbu, 0x0000006bu, 0x000001b2u, 0x000f002cu, - 0x000003bfu, 0x000003ccu, 0x000003c0u, 0x000003c1u, 0x000003c2u, 0x000003c3u, 0x000003c4u, 0x000003c5u, - 0x000003c6u, 0x000003c7u, 0x000003c8u, 0x000003c9u, 0x000003cau, 0x000003cbu, 0x00040020u, 0x000003ceu, - 0x00000007u, 0x000003bfu, 0x00040020u, 0x00000418u, 0x00000007u, 0x000003beu, 0x0003001eu, 0x0000042eu, - 0x0000000fu, 0x0004002bu, 0x00000006u, 0x0000042fu, 0x00000060u, 0x0004001cu, 0x00000430u, 0x0000042eu, - 0x0000042fu, 0x00040020u, 0x00000431u, 0x00000003u, 0x00000430u, 0x0004003bu, 0x00000431u, 0x00000432u, - 0x00000003u, 0x00040020u, 0x00000434u, 0x00000003u, 0x0000000fu, 0x0005002cu, 0x000003beu, 0x00000441u, - 0x00000089u, 0x00000008u, 0x0005002cu, 0x000003beu, 0x00000442u, 0x0000006bu, 0x00000160u, 0x0005002cu, - 0x000003beu, 0x00000443u, 0x00000160u, 0x00000089u, 0x0005002cu, 0x000003beu, 0x00000444u, 0x0000017au, - 0x000001b2u, 0x0005002cu, 0x000003beu, 0x00000445u, 0x000001b2u, 0x00000166u, 0x0005002cu, 0x000003beu, - 0x00000446u, 0x00000166u, 0x00000219u, 0x0005002cu, 0x000003beu, 0x00000447u, 0x00000219u, 0x0000017au, - 0x0005002cu, 0x000003beu, 0x00000448u, 0x0000006bu, 0x00000166u, 0x0005002cu, 0x000003beu, 0x00000449u, - 0x00000160u, 0x00000219u, 0x000f002cu, 0x000003bfu, 0x0000044au, 0x00000441u, 0x000003c7u, 0x00000442u, - 0x00000443u, 0x00000444u, 0x00000445u, 0x00000446u, 0x00000447u, 0x000003c0u, 0x000003c6u, 0x00000448u, - 0x00000449u, 0x0004001cu, 0x00000450u, 0x0000000du, 0x0000021du, 0x0004002bu, 0x00000009u, 0x00000451u, - 0xbf000000u, 0x0006002cu, 0x0000000du, 0x00000452u, 0x00000451u, 0x00000451u, 0x00000451u, 0x0006002cu, - 0x0000000du, 0x00000453u, 0x00000091u, 0x00000451u, 0x00000451u, 0x0006002cu, 0x0000000du, 0x00000454u, - 0x00000091u, 0x00000091u, 0x00000451u, 0x0006002cu, 0x0000000du, 0x00000455u, 0x00000451u, 0x00000091u, - 0x00000451u, 0x0006002cu, 0x0000000du, 0x00000456u, 0x00000451u, 0x00000451u, 0x00000091u, 0x0006002cu, - 0x0000000du, 0x00000457u, 0x00000091u, 0x00000451u, 0x00000091u, 0x0006002cu, 0x0000000du, 0x00000458u, - 0x00000091u, 0x00000091u, 0x00000091u, 0x0006002cu, 0x0000000du, 0x00000459u, 0x00000451u, 0x00000091u, - 0x00000091u, 0x000b002cu, 0x00000450u, 0x0000045au, 0x00000452u, 0x00000453u, 0x00000454u, 0x00000455u, - 0x00000456u, 0x00000457u, 0x00000458u, 0x00000459u, 0x00040020u, 0x0000045du, 0x00000007u, 0x00000450u, - 0x00040020u, 0x00000461u, 0x0000151au, 0x0000000du, 0x00040020u, 0x0000046fu, 0x0000151au, 0x00000010u, - 0x00040020u, 0x0000049cu, 0x00000007u, 0x0000000fu, 0x0004002bu, 0x00000009u, 0x000004e5u, 0xba83126fu, - 0x0004002bu, 0x00000006u, 0x00000523u, 0x00000108u, 0x0004002bu, 0x00000006u, 0x00000534u, 0x00000080u, - 0x0004001cu, 0x00000535u, 0x00000031u, 0x00000534u, 0x00040020u, 0x00000536u, 0x00000003u, 0x00000535u, - 0x0004003bu, 0x00000536u, 0x00000537u, 0x00000003u, 0x00040020u, 0x00000541u, 0x00000003u, 0x00000031u, - 0x0003001eu, 0x00000543u, 0x00000039u, 0x0004001cu, 0x00000544u, 0x00000543u, 0x00000534u, 0x00040020u, - 0x00000545u, 0x00000003u, 0x00000544u, 0x0004003bu, 0x00000545u, 0x00000546u, 0x00000003u, 0x00040020u, - 0x0000054cu, 0x00000003u, 0x00000039u, 0x0006001eu, 0x0000054eu, 0x0000000du, 0x0000000du, 0x0000000du, - 0x00000009u, 0x0004001cu, 0x0000054fu, 0x0000054eu, 0x00000534u, 0x00040020u, 0x00000550u, 0x00000003u, - 0x0000054fu, 0x0004003bu, 0x00000550u, 0x00000551u, 0x00000003u, 0x00040020u, 0x00000554u, 0x00000003u, - 0x0000000du, 0x0004002bu, 0x00000009u, 0x00000558u, 0x3f48b439u, 0x0006002cu, 0x0000000du, 0x00000559u, - 0x00000558u, 0x00000558u, 0x00000558u, 0x00040020u, 0x00000560u, 0x0000151au, 0x00000009u, 0x00040020u, - 0x00000563u, 0x00000003u, 0x00000009u, 0x00040017u, 0x00000595u, 0x00000006u, 0x00000004u, 0x00040020u, - 0x00000596u, 0x00000007u, 0x00000595u, 0x0004001cu, 0x00000598u, 0x00000595u, 0x00000166u, 0x0007002cu, - 0x00000595u, 0x00000599u, 0x00000089u, 0x00000160u, 0x0000006bu, 0x00000008u, 0x0007002cu, 0x00000595u, - 0x0000059au, 0x0000017au, 0x000001b2u, 0x00000166u, 0x00000219u, 0x0007002cu, 0x00000595u, 0x0000059bu, - 0x00000089u, 0x0000017au, 0x00000219u, 0x00000160u, 0x0007002cu, 0x00000595u, 0x0000059cu, 0x00000008u, - 0x0000006bu, 0x00000166u, 0x000001b2u, 0x0007002cu, 0x00000595u, 0x0000059du, 0x00000089u, 0x00000008u, - 0x000001b2u, 0x0000017au, 0x0007002cu, 0x00000595u, 0x0000059eu, 0x00000160u, 0x00000219u, 0x00000166u, - 0x0000006bu, 0x0009002cu, 0x00000598u, 0x0000059fu, 0x00000599u, 0x0000059au, 0x0000059bu, 0x0000059cu, - 0x0000059du, 0x0000059eu, 0x00040020u, 0x000005a1u, 0x00000007u, 0x00000598u, 0x0004001cu, 0x000005d0u, - 0x00000009u, 0x0000017au, 0x00040020u, 0x000005d1u, 0x00000007u, 0x000005d0u, 0x0004001cu, 0x000005d8u, - 0x0000000du, 0x0000017au, 0x00040020u, 0x000005d9u, 0x00000007u, 0x000005d8u, 0x0004001cu, 0x000005fcu, - 0x0000000du, 0x00000166u, 0x00040020u, 0x000005fdu, 0x00000007u, 0x000005fcu, 0x0004001cu, 0x00000611u, - 0x00000009u, 0x00000166u, 0x00040020u, 0x00000612u, 0x00000007u, 0x00000611u, 0x0004002bu, 0x00000006u, - 0x00000723u, 0x0000000au, 0x0004002bu, 0x00000006u, 0x00000724u, 0x0000000bu, 0x0004002bu, 0x00000006u, - 0x00000725u, 0x0000000du, 0x0004002bu, 0x00000006u, 0x00000726u, 0x00000012u, 0x0004002bu, 0x00000006u, - 0x00000727u, 0x00000013u, 0x0004002bu, 0x00000006u, 0x00000728u, 0x00000014u, 0x0004002bu, 0x00000006u, - 0x00000729u, 0x00000015u, 0x0004002bu, 0x00000009u, 0x0000072au, 0x3f7dfdfeu, 0x0004002bu, 0x00000009u, - 0x0000072bu, 0x3b808081u, 0x0004002bu, 0x00000009u, 0x0000072cu, 0x3f68e8e9u, 0x0006002cu, 0x0000000du, - 0x0000072du, 0x0000072au, 0x0000072bu, 0x0000072cu, 0x0004002bu, 0x00000009u, 0x0000072eu, 0x3ec4c4c5u, - 0x0004002bu, 0x00000009u, 0x0000072fu, 0x3f37b7b8u, 0x0004002bu, 0x00000009u, 0x00000730u, 0x3f79f9fau, - 0x0006002cu, 0x0000000du, 0x00000731u, 0x0000072eu, 0x0000072fu, 0x00000730u, 0x0004002bu, 0x00000009u, - 0x00000732u, 0x3f0b8b8cu, 0x0004002bu, 0x00000009u, 0x00000733u, 0x3ebababbu, 0x0006002cu, 0x0000000du, - 0x00000734u, 0x00000732u, 0x00000733u, 0x0000004au, 0x0004002bu, 0x00000009u, 0x00000735u, 0x3ec8c8c9u, - 0x0006002cu, 0x0000000du, 0x00000736u, 0x0000004au, 0x00000735u, 0x00000041u, 0x0006002cu, 0x0000000du, - 0x00000737u, 0x00000041u, 0x0000004au, 0x00000041u, 0x0004002bu, 0x00000009u, 0x00000738u, 0x3ed8d8d9u, - 0x0004002bu, 0x00000009u, 0x00000739u, 0x3f33b3b4u, 0x0004002bu, 0x00000009u, 0x0000073au, 0x3e6cecedu, - 0x0006002cu, 0x0000000du, 0x0000073bu, 0x00000738u, 0x00000739u, 0x0000073au, 0x0004002bu, 0x00000009u, - 0x0000073cu, 0x3e8a8a8bu, 0x0004002bu, 0x00000009u, 0x0000073du, 0x3f31b1b2u, 0x0006002cu, 0x0000000du, - 0x0000073eu, 0x0000072fu, 0x0000073cu, 0x0000073du, 0x0004002bu, 0x00000009u, 0x0000073fu, 0x3da0a0a1u, - 0x0004002bu, 0x00000009u, 0x00000740u, 0x3f7efeffu, 0x0004002bu, 0x00000009u, 0x00000741u, 0x3f39b9bau, - 0x0006002cu, 0x0000000du, 0x00000742u, 0x0000073fu, 0x00000740u, 0x00000741u, 0x0006002cu, 0x0000000du, - 0x00000743u, 0x00000735u, 0x00000735u, 0x00000735u, 0x0004002bu, 0x00000009u, 0x00000744u, 0x3d008081u, - 0x0004002bu, 0x00000009u, 0x00000745u, 0x3c008081u, 0x0006002cu, 0x0000000du, 0x00000746u, 0x00000744u, - 0x00000745u, 0x0000004au, 0x0004002bu, 0x00000009u, 0x00000747u, 0x3ea0a0a1u, 0x0004002bu, 0x00000009u, - 0x00000748u, 0x3ef0f0f1u, 0x0006002cu, 0x0000000du, 0x00000749u, 0x00000747u, 0x00000747u, 0x00000748u, - 0x0004002bu, 0x00000009u, 0x0000074au, 0x3e70f0f1u, 0x0006002cu, 0x0000000du, 0x0000074bu, 0x0000074au, - 0x00000748u, 0x0000074au, 0x0006002cu, 0x0000000du, 0x0000074cu, 0x00000748u, 0x00000747u, 0x00000747u, - 0x0006002cu, 0x0000000du, 0x0000074du, 0x0000004au, 0x0000004au, 0x0000004au, 0x0006002cu, 0x0000000du, - 0x0000074eu, 0x0000004au, 0x0000004au, 0x00000041u, 0x0004002bu, 0x00000009u, 0x0000074fu, 0x40e00000u, - 0x0004002bu, 0x00000009u, 0x00000750u, 0x41400000u, 0x0004002bu, 0x00000009u, 0x00000751u, 0x40a00000u, - 0x0004002bu, 0x00000009u, 0x00000752u, 0x40400000u, 0x0003001du, 0x00000753u, 0x0000000fu, 0x0003001eu, - 0x00000754u, 0x00000753u, 0x00040020u, 0x00000755u, 0x0000000cu, 0x00000754u, 0x0004003bu, 0x00000755u, - 0x00000756u, 0x0000000cu, 0x0003001du, 0x00000757u, 0x00000381u, 0x0003001eu, 0x00000758u, 0x00000757u, - 0x00040020u, 0x00000759u, 0x0000000cu, 0x00000758u, 0x0004003bu, 0x00000759u, 0x0000075au, 0x0000000cu, - 0x0003001du, 0x0000075bu, 0x00000039u, 0x0003001eu, 0x0000075cu, 0x0000075bu, 0x00040020u, 0x0000075du, - 0x0000000cu, 0x0000075cu, 0x0004003bu, 0x0000075du, 0x0000075eu, 0x0000000cu, 0x0006001eu, 0x0000075fu, - 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x0003001du, 0x00000760u, 0x0000075fu, 0x0003001eu, - 0x00000761u, 0x00000760u, 0x00040020u, 0x00000762u, 0x0000000cu, 0x00000761u, 0x0004003bu, 0x00000762u, - 0x00000763u, 0x0000000cu, 0x0003001du, 0x00000764u, 0x00000031u, 0x0003001eu, 0x00000765u, 0x00000764u, - 0x00040020u, 0x00000766u, 0x0000000cu, 0x00000765u, 0x0004003bu, 0x00000766u, 0x00000767u, 0x0000000cu, - 0x0003001du, 0x00000768u, 0x000003a1u, 0x0003001eu, 0x00000769u, 0x00000768u, 0x00040020u, 0x0000076au, - 0x0000000cu, 0x00000769u, 0x0004003bu, 0x0000076au, 0x0000076bu, 0x0000000cu, 0x0003001du, 0x0000076cu, - 0x00000009u, 0x0003001eu, 0x0000076du, 0x0000076cu, 0x00040020u, 0x0000076eu, 0x0000000cu, 0x0000076du, - 0x0004003bu, 0x0000076eu, 0x0000076fu, 0x0000000cu, 0x0004001cu, 0x00000770u, 0x00000006u, 0x00000728u, - 0x000f001eu, 0x00000771u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000770u, 0x0003001du, - 0x00000772u, 0x00000771u, 0x0003001eu, 0x00000773u, 0x00000772u, 0x00040020u, 0x00000774u, 0x0000000cu, - 0x00000773u, 0x0004003bu, 0x00000774u, 0x00000775u, 0x0000000cu, 0x0012001eu, 0x00000776u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0003001du, - 0x00000777u, 0x00000776u, 0x0003001eu, 0x00000778u, 0x00000777u, 0x00040020u, 0x00000779u, 0x0000000cu, - 0x00000778u, 0x0004003bu, 0x00000779u, 0x0000077au, 0x0000000cu, 0x0012001eu, 0x0000077bu, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0003001du, - 0x0000077cu, 0x0000077bu, 0x0003001eu, 0x0000077du, 0x0000077cu, 0x00040020u, 0x0000077eu, 0x0000000cu, - 0x0000077du, 0x0004003bu, 0x0000077eu, 0x0000077fu, 0x0000000cu, 0x0012001eu, 0x00000780u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0003001du, - 0x00000781u, 0x00000780u, 0x0003001eu, 0x00000782u, 0x00000781u, 0x00040020u, 0x00000783u, 0x0000000cu, - 0x00000782u, 0x0004003bu, 0x00000783u, 0x00000784u, 0x0000000cu, 0x0006002cu, 0x00000031u, 0x00000785u, - 0x00000007u, 0x00000008u, 0x00000008u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, - 0x000200f8u, 0x00000005u, 0x0004003bu, 0x0000001bu, 0x00000376u, 0x00000007u, 0x0004003bu, 0x0000001bu, - 0x00000377u, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x0000037du, 0x00000007u, 0x0004003bu, 0x00000383u, - 0x00000384u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000394u, 0x00000007u, 0x0004003bu, 0x00000012u, - 0x000003a0u, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x000003b0u, 0x00000007u, 0x0004003bu, 0x00000037u, - 0x000003b4u, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x000003b6u, 0x00000007u, 0x0004003bu, 0x0000001bu, - 0x000003b8u, 0x00000007u, 0x0004003bu, 0x00000266u, 0x000003bbu, 0x00000007u, 0x0005003bu, 0x000003ceu, - 0x000003cfu, 0x00000007u, 0x000003ccu, 0x0005003bu, 0x000003ceu, 0x000003d4u, 0x00000007u, 0x000003ccu, - 0x0004003bu, 0x00000266u, 0x000003dbu, 0x00000007u, 0x0005003bu, 0x000003ceu, 0x000003dfu, 0x00000007u, - 0x000003ccu, 0x0005003bu, 0x000003ceu, 0x000003e4u, 0x00000007u, 0x000003ccu, 0x0004003bu, 0x0000001bu, - 0x000003f4u, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x000003f8u, 0x00000007u, 0x0004003bu, 0x0000001bu, - 0x000003fbu, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x00000402u, 0x00000007u, 0x0004003bu, 0x0000001bu, - 0x0000040cu, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x00000410u, 0x00000007u, 0x0004003bu, 0x0000001bu, - 0x00000414u, 0x00000007u, 0x0004003bu, 0x00000418u, 0x00000419u, 0x00000007u, 0x0005003bu, 0x000003ceu, - 0x0000041bu, 0x00000007u, 0x000003ccu, 0x0004003bu, 0x0000001bu, 0x0000042bu, 0x00000007u, 0x0004003bu, - 0x00000418u, 0x00000440u, 0x00000007u, 0x0005003bu, 0x000003ceu, 0x0000044cu, 0x00000007u, 0x0000044au, - 0x0004003bu, 0x0000000eu, 0x0000044fu, 0x00000007u, 0x0005003bu, 0x0000045du, 0x0000045eu, 0x00000007u, - 0x0000045au, 0x0004003bu, 0x0000000eu, 0x00000465u, 0x00000007u, 0x0005003bu, 0x0000045du, 0x00000468u, - 0x00000007u, 0x0000045au, 0x0004003bu, 0x0000000eu, 0x0000046eu, 0x00000007u, 0x0004003bu, 0x0000000eu, - 0x00000479u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00000483u, 0x00000007u, 0x0004003bu, 0x00000037u, - 0x00000489u, 0x00000007u, 0x0004003bu, 0x0000000eu, 0x00000490u, 0x00000007u, 0x0004003bu, 0x0000000eu, - 0x00000496u, 0x00000007u, 0x0004003bu, 0x0000049cu, 0x0000049du, 0x00000007u, 0x0004003bu, 0x0000000eu, - 0x0000049eu, 0x00000007u, 0x0004003bu, 0x00000012u, 0x000004a0u, 0x00000007u, 0x0004003bu, 0x00000014u, - 0x000004a2u, 0x00000007u, 0x0004003bu, 0x0000049cu, 0x000004a5u, 0x00000007u, 0x0004003bu, 0x0000000eu, - 0x000004a6u, 0x00000007u, 0x0004003bu, 0x00000012u, 0x000004a8u, 0x00000007u, 0x0004003bu, 0x00000014u, - 0x000004aau, 0x00000007u, 0x0004003bu, 0x00000029u, 0x000004adu, 0x00000007u, 0x0004003bu, 0x00000029u, - 0x000004b4u, 0x00000007u, 0x0004003bu, 0x00000029u, 0x000004bbu, 0x00000007u, 0x0004003bu, 0x00000029u, - 0x000004c0u, 0x00000007u, 0x0004003bu, 0x00000029u, 0x000004c7u, 0x00000007u, 0x0004003bu, 0x0000001bu, - 0x000004d1u, 0x00000007u, 0x0004003bu, 0x0000049cu, 0x000004d4u, 0x00000007u, 0x0004003bu, 0x0000049cu, - 0x000004dcu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000004e4u, 0x00000007u, 0x0004003bu, 0x00000037u, - 0x000004e9u, 0x00000007u, 0x0004003bu, 0x0000049cu, 0x000004edu, 0x00000007u, 0x0004003bu, 0x0000049cu, - 0x000004f6u, 0x00000007u, 0x0004003bu, 0x0000049cu, 0x000004ffu, 0x00000007u, 0x0004003bu, 0x0000049cu, - 0x00000508u, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x00000524u, 0x00000007u, 0x0004003bu, 0x0000001bu, - 0x0000052eu, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x00000531u, 0x00000007u, 0x0004003bu, 0x0000001bu, - 0x00000586u, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x00000588u, 0x00000007u, 0x0004003bu, 0x00000596u, - 0x00000597u, 0x00000007u, 0x0005003bu, 0x000005a1u, 0x000005a2u, 0x00000007u, 0x0000059fu, 0x0004003bu, - 0x0000001bu, 0x000005a5u, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x000005adu, 0x00000007u, 0x0004003bu, - 0x0000001bu, 0x000005b0u, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x000005b8u, 0x00000007u, 0x0004003bu, - 0x0000001bu, 0x000005c0u, 0x00000007u, 0x0004003bu, 0x0000000eu, 0x000005cbu, 0x00000007u, 0x0005003bu, - 0x0000045du, 0x000005cdu, 0x00000007u, 0x0000045au, 0x0004003bu, 0x000005d1u, 0x000005d2u, 0x00000007u, - 0x0004003bu, 0x000005d9u, 0x000005dau, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x000005ebu, 0x00000007u, - 0x0004003bu, 0x0000001bu, 0x000005ecu, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x000005efu, 0x00000007u, - 0x0004003bu, 0x0000001bu, 0x000005f0u, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x000005f3u, 0x00000007u, - 0x0004003bu, 0x0000001bu, 0x000005f6u, 0x00000007u, 0x0004003bu, 0x000005fdu, 0x000005feu, 0x00000007u, - 0x0004003bu, 0x00000612u, 0x00000613u, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x00000626u, 0x00000007u, - 0x0004003bu, 0x0000000eu, 0x0000062eu, 0x00000007u, 0x0004003bu, 0x0000000eu, 0x00000633u, 0x00000007u, - 0x0004003bu, 0x0000000eu, 0x00000639u, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x0000063fu, 0x00000007u, - 0x0004003bu, 0x0000001bu, 0x00000643u, 0x00000007u, 0x0004003bu, 0x00000029u, 0x0000064du, 0x00000007u, - 0x0004003bu, 0x0000001bu, 0x0000064eu, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x00000650u, 0x00000007u, - 0x0004003bu, 0x0000000eu, 0x00000653u, 0x00000007u, 0x0004003bu, 0x0000000eu, 0x00000654u, 0x00000007u, - 0x0004003bu, 0x0000000eu, 0x00000656u, 0x00000007u, 0x0004003bu, 0x0000000eu, 0x00000658u, 0x00000007u, - 0x0004003bu, 0x00000029u, 0x0000065au, 0x00000007u, 0x0004003bu, 0x0000049cu, 0x0000065du, 0x00000007u, - 0x0004003bu, 0x0000000eu, 0x0000065eu, 0x00000007u, 0x0004003bu, 0x00000012u, 0x00000660u, 0x00000007u, - 0x0004003bu, 0x00000014u, 0x00000662u, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x0000066eu, 0x00000007u, - 0x0004003bu, 0x0000001bu, 0x00000676u, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x0000067au, 0x00000007u, - 0x0004003bu, 0x00000037u, 0x0000067eu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00000683u, 0x00000007u, - 0x0004003bu, 0x00000037u, 0x00000689u, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x0000068fu, 0x00000007u, - 0x0004003bu, 0x0000024du, 0x00000699u, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x0000069au, 0x00000007u, - 0x0004003bu, 0x0000001bu, 0x0000069cu, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x0000069fu, 0x00000007u, - 0x0004003bu, 0x00000029u, 0x000006bbu, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x000006bcu, 0x00000007u, - 0x0004003bu, 0x0000001bu, 0x000006bfu, 0x00000007u, 0x0004003bu, 0x00000029u, 0x000006c2u, 0x00000007u, - 0x0004003bu, 0x0000001bu, 0x000006c3u, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x000006c6u, 0x00000007u, - 0x0004003bu, 0x00000029u, 0x000006c9u, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x000006cau, 0x00000007u, - 0x0004003bu, 0x0000001bu, 0x000006cdu, 0x00000007u, 0x0004003bu, 0x0000000eu, 0x000006d0u, 0x00000007u, - 0x0003003eu, 0x00000376u, 0x00000089u, 0x00050041u, 0x0000037au, 0x0000037bu, 0x00000379u, 0x00000089u, - 0x0004003du, 0x00000006u, 0x0000037cu, 0x0000037bu, 0x0003003eu, 0x00000377u, 0x0000037cu, 0x00050041u, - 0x0000037au, 0x0000037fu, 0x0000037eu, 0x00000089u, 0x0004003du, 0x00000006u, 0x00000380u, 0x0000037fu, - 0x0003003eu, 0x0000037du, 0x00000380u, 0x00050041u, 0x0000038du, 0x0000038eu, 0x0000038cu, 0x0000005fu, - 0x0004003du, 0x00000006u, 0x0000038fu, 0x0000038eu, 0x00060041u, 0x00000390u, 0x00000391u, 0x00000389u, - 0x0000005fu, 0x0000038fu, 0x0004003du, 0x00000385u, 0x00000392u, 0x00000391u, 0x00040190u, 0x00000382u, - 0x00000393u, 0x00000392u, 0x0003003eu, 0x00000384u, 0x00000393u, 0x00050041u, 0x0000001bu, 0x0000039au, - 0x00000384u, 0x00000127u, 0x0004003du, 0x00000006u, 0x0000039bu, 0x0000039au, 0x00060041u, 0x0000039cu, - 0x0000039du, 0x00000399u, 0x0000005fu, 0x0000039bu, 0x0004003du, 0x00000395u, 0x0000039eu, 0x0000039du, - 0x00040190u, 0x00000013u, 0x0000039fu, 0x0000039eu, 0x0003003eu, 0x00000394u, 0x0000039fu, 0x00050041u, - 0x0000038du, 0x000003a6u, 0x0000038cu, 0x0000005fu, 0x0004003du, 0x00000006u, 0x000003a7u, 0x000003a6u, - 0x00060041u, 0x000003a8u, 0x000003a9u, 0x000003a5u, 0x0000005fu, 0x000003a7u, 0x0004003du, 0x000003a1u, - 0x000003aau, 0x000003a9u, 0x00040190u, 0x00000011u, 0x000003abu, 0x000003aau, 0x0003003eu, 0x000003a0u, - 0x000003abu, 0x0004003du, 0x00000006u, 0x000003acu, 0x00000377u, 0x000500aeu, 0x00000042u, 0x000003adu, - 0x000003acu, 0x00000166u, 0x000300f7u, 0x000003afu, 0x00000000u, 0x000400fau, 0x000003adu, 0x000003aeu, - 0x000003afu, 0x000200f8u, 0x000003aeu, 0x0004003du, 0x00000006u, 0x000003b1u, 0x00000377u, 0x00050082u, - 0x00000006u, 0x000003b2u, 0x000003b1u, 0x00000166u, 0x00050084u, 0x00000006u, 0x000003b3u, 0x000003b2u, - 0x0000006bu, 0x0003003eu, 0x000003b0u, 0x000003b3u, 0x00040039u, 0x00000009u, 0x000003b5u, 0x0000000bu, - 0x0003003eu, 0x000003b4u, 0x000003b5u, 0x0004003du, 0x00000006u, 0x000003b7u, 0x000003b0u, 0x0003003eu, - 0x000003b6u, 0x000003b7u, 0x0004003du, 0x00000006u, 0x000003b9u, 0x000003b0u, 0x00050080u, 0x00000006u, - 0x000003bau, 0x000003b9u, 0x00000008u, 0x0003003eu, 0x000003b8u, 0x000003bau, 0x00050041u, 0x0000038du, - 0x000003bcu, 0x0000038cu, 0x000000deu, 0x0004003du, 0x00000006u, 0x000003bdu, 0x000003bcu, 0x0004003du, - 0x00000006u, 0x000003cdu, 0x000003b6u, 0x00060041u, 0x0000001bu, 0x000003d0u, 0x000003cfu, 0x000003cdu, - 0x00000089u, 0x0004003du, 0x00000006u, 0x000003d1u, 0x000003d0u, 0x000500c4u, 0x00000006u, 0x000003d2u, - 0x00000008u, 0x000003d1u, 0x0004003du, 0x00000006u, 0x000003d3u, 0x000003b6u, 0x00060041u, 0x0000001bu, - 0x000003d5u, 0x000003d4u, 0x000003d3u, 0x00000008u, 0x0004003du, 0x00000006u, 0x000003d6u, 0x000003d5u, - 0x000500c4u, 0x00000006u, 0x000003d7u, 0x00000008u, 0x000003d6u, 0x000500c5u, 0x00000006u, 0x000003d8u, - 0x000003d2u, 0x000003d7u, 0x000500c7u, 0x00000006u, 0x000003d9u, 0x000003bdu, 0x000003d8u, 0x000500abu, - 0x00000042u, 0x000003dau, 0x000003d9u, 0x00000089u, 0x0003003eu, 0x000003bbu, 0x000003dau, 0x00050041u, - 0x0000038du, 0x000003dcu, 0x0000038cu, 0x000000deu, 0x0004003du, 0x00000006u, 0x000003ddu, 0x000003dcu, - 0x0004003du, 0x00000006u, 0x000003deu, 0x000003b8u, 0x00060041u, 0x0000001bu, 0x000003e0u, 0x000003dfu, - 0x000003deu, 0x00000089u, 0x0004003du, 0x00000006u, 0x000003e1u, 0x000003e0u, 0x000500c4u, 0x00000006u, - 0x000003e2u, 0x00000008u, 0x000003e1u, 0x0004003du, 0x00000006u, 0x000003e3u, 0x000003b8u, 0x00060041u, - 0x0000001bu, 0x000003e5u, 0x000003e4u, 0x000003e3u, 0x00000008u, 0x0004003du, 0x00000006u, 0x000003e6u, - 0x000003e5u, 0x000500c4u, 0x00000006u, 0x000003e7u, 0x00000008u, 0x000003e6u, 0x000500c5u, 0x00000006u, - 0x000003e8u, 0x000003e2u, 0x000003e7u, 0x000500c7u, 0x00000006u, 0x000003e9u, 0x000003ddu, 0x000003e8u, - 0x000500abu, 0x00000042u, 0x000003eau, 0x000003e9u, 0x00000089u, 0x0003003eu, 0x000003dbu, 0x000003eau, - 0x0004003du, 0x00000042u, 0x000003ebu, 0x000003bbu, 0x000400a8u, 0x00000042u, 0x000003ecu, 0x000003ebu, - 0x0004003du, 0x00000042u, 0x000003edu, 0x000003dbu, 0x000400a8u, 0x00000042u, 0x000003eeu, 0x000003edu, - 0x000500a7u, 0x00000042u, 0x000003efu, 0x000003ecu, 0x000003eeu, 0x000300f7u, 0x000003f1u, 0x00000000u, - 0x000400fau, 0x000003efu, 0x000003f0u, 0x000003f1u, 0x000200f8u, 0x000003f0u, 0x0003003eu, 0x00000376u, - 0x00000089u, 0x0004003du, 0x00000006u, 0x000003f2u, 0x00000376u, 0x000314afu, 0x00000089u, 0x000003f2u, - 0x000100fdu, 0x000200f8u, 0x000003f1u, 0x00050041u, 0x0000038du, 0x000003f5u, 0x0000038cu, 0x000000ccu, - 0x0004003du, 0x00000006u, 0x000003f6u, 0x000003f5u, 0x000500c4u, 0x00000006u, 0x000003f7u, 0x00000008u, - 0x000003f6u, 0x0003003eu, 0x000003f4u, 0x000003f7u, 0x0004003du, 0x00000006u, 0x000003f9u, 0x000003f4u, - 0x00050084u, 0x00000006u, 0x000003fau, 0x000003f9u, 0x0000006bu, 0x0003003eu, 0x000003f8u, 0x000003fau, - 0x0004003du, 0x00000006u, 0x000003fcu, 0x000003f8u, 0x00050084u, 0x00000006u, 0x000003fdu, 0x000003fcu, - 0x0000017au, 0x0003003eu, 0x000003fbu, 0x000003fdu, 0x0004003du, 0x00000006u, 0x000003feu, 0x000003f8u, - 0x00050084u, 0x00000006u, 0x000003ffu, 0x000003feu, 0x0000006bu, 0x0003003eu, 0x00000376u, 0x000003ffu, - 0x0004003du, 0x00000006u, 0x00000400u, 0x000003fbu, 0x0004003du, 0x00000006u, 0x00000401u, 0x00000376u, - 0x000314afu, 0x00000400u, 0x00000401u, 0x0004003du, 0x00000006u, 0x00000403u, 0x0000037du, 0x0003003eu, - 0x00000402u, 0x00000403u, 0x000200f9u, 0x00000404u, 0x000200f8u, 0x00000404u, 0x000400f6u, 0x00000406u, - 0x00000407u, 0x00000000u, 0x000200f9u, 0x00000408u, 0x000200f8u, 0x00000408u, 0x0004003du, 0x00000006u, - 0x00000409u, 0x00000402u, 0x0004003du, 0x00000006u, 0x0000040au, 0x000003f8u, 0x000500b0u, 0x00000042u, - 0x0000040bu, 0x00000409u, 0x0000040au, 0x000400fau, 0x0000040bu, 0x00000405u, 0x00000406u, 0x000200f8u, - 0x00000405u, 0x0004003du, 0x00000006u, 0x0000040du, 0x00000402u, 0x0004003du, 0x00000006u, 0x0000040eu, - 0x000003f4u, 0x00050086u, 0x00000006u, 0x0000040fu, 0x0000040du, 0x0000040eu, 0x0003003eu, 0x0000040cu, - 0x0000040fu, 0x0004003du, 0x00000006u, 0x00000411u, 0x00000402u, 0x0004003du, 0x00000006u, 0x00000412u, - 0x000003f4u, 0x00050089u, 0x00000006u, 0x00000413u, 0x00000411u, 0x00000412u, 0x0003003eu, 0x00000410u, - 0x00000413u, 0x0004003du, 0x00000006u, 0x00000415u, 0x000003b0u, 0x0004003du, 0x00000006u, 0x00000416u, - 0x0000040cu, 0x00050080u, 0x00000006u, 0x00000417u, 0x00000415u, 0x00000416u, 0x0003003eu, 0x00000414u, - 0x00000417u, 0x0004003du, 0x00000006u, 0x0000041au, 0x00000414u, 0x00050041u, 0x00000418u, 0x0000041cu, - 0x0000041bu, 0x0000041au, 0x0004003du, 0x000003beu, 0x0000041du, 0x0000041cu, 0x0003003eu, 0x00000419u, - 0x0000041du, 0x00050041u, 0x0000038du, 0x0000041eu, 0x0000038cu, 0x000000deu, 0x0004003du, 0x00000006u, - 0x0000041fu, 0x0000041eu, 0x00050041u, 0x0000001bu, 0x00000420u, 0x00000419u, 0x00000089u, 0x0004003du, - 0x00000006u, 0x00000421u, 0x00000420u, 0x000500c4u, 0x00000006u, 0x00000422u, 0x00000008u, 0x00000421u, - 0x00050041u, 0x0000001bu, 0x00000423u, 0x00000419u, 0x00000008u, 0x0004003du, 0x00000006u, 0x00000424u, - 0x00000423u, 0x000500c4u, 0x00000006u, 0x00000425u, 0x00000008u, 0x00000424u, 0x000500c5u, 0x00000006u, - 0x00000426u, 0x00000422u, 0x00000425u, 0x000500c7u, 0x00000006u, 0x00000427u, 0x0000041fu, 0x00000426u, - 0x000500aau, 0x00000042u, 0x00000428u, 0x00000427u, 0x00000089u, 0x000300f7u, 0x0000042au, 0x00000000u, - 0x000400fau, 0x00000428u, 0x00000429u, 0x0000042au, 0x000200f8u, 0x00000429u, 0x0004003du, 0x00000006u, - 0x0000042cu, 0x00000402u, 0x00050084u, 0x00000006u, 0x0000042du, 0x0000042cu, 0x0000017au, 0x0003003eu, - 0x0000042bu, 0x0000042du, 0x0004003du, 0x00000006u, 0x00000433u, 0x0000042bu, 0x00060041u, 0x00000434u, - 0x00000435u, 0x00000432u, 0x00000433u, 0x0000005fu, 0x0003003eu, 0x00000435u, 0x00000076u, 0x0004003du, - 0x00000006u, 0x00000436u, 0x0000042bu, 0x00050080u, 0x00000006u, 0x00000437u, 0x00000436u, 0x00000008u, - 0x00060041u, 0x00000434u, 0x00000438u, 0x00000432u, 0x00000437u, 0x0000005fu, 0x0003003eu, 0x00000438u, - 0x00000076u, 0x0004003du, 0x00000006u, 0x00000439u, 0x0000042bu, 0x00050080u, 0x00000006u, 0x0000043au, - 0x00000439u, 0x0000006bu, 0x00060041u, 0x00000434u, 0x0000043bu, 0x00000432u, 0x0000043au, 0x0000005fu, - 0x0003003eu, 0x0000043bu, 0x00000076u, 0x0004003du, 0x00000006u, 0x0000043cu, 0x0000042bu, 0x00050080u, - 0x00000006u, 0x0000043du, 0x0000043cu, 0x00000160u, 0x00060041u, 0x00000434u, 0x0000043eu, 0x00000432u, - 0x0000043du, 0x0000005fu, 0x0003003eu, 0x0000043eu, 0x00000076u, 0x000200f9u, 0x00000407u, 0x000200f8u, - 0x0000042au, 0x0004003du, 0x00000006u, 0x0000044bu, 0x00000414u, 0x00050041u, 0x00000418u, 0x0000044du, - 0x0000044cu, 0x0000044bu, 0x0004003du, 0x000003beu, 0x0000044eu, 0x0000044du, 0x0003003eu, 0x00000440u, - 0x0000044eu, 0x00050041u, 0x0000001bu, 0x0000045bu, 0x00000440u, 0x00000089u, 0x0004003du, 0x00000006u, - 0x0000045cu, 0x0000045bu, 0x00050041u, 0x0000000eu, 0x0000045fu, 0x0000045eu, 0x0000045cu, 0x0004003du, - 0x0000000du, 0x00000460u, 0x0000045fu, 0x00050041u, 0x00000461u, 0x00000462u, 0x0000038cu, 0x0000009au, - 0x0004003du, 0x0000000du, 0x00000463u, 0x00000462u, 0x00050085u, 0x0000000du, 0x00000464u, 0x00000460u, - 0x00000463u, 0x0003003eu, 0x0000044fu, 0x00000464u, 0x00050041u, 0x0000001bu, 0x00000466u, 0x00000440u, - 0x00000008u, 0x0004003du, 0x00000006u, 0x00000467u, 0x00000466u, 0x00050041u, 0x0000000eu, 0x00000469u, - 0x00000468u, 0x00000467u, 0x0004003du, 0x0000000du, 0x0000046au, 0x00000469u, 0x00050041u, 0x00000461u, - 0x0000046bu, 0x0000038cu, 0x0000009au, 0x0004003du, 0x0000000du, 0x0000046cu, 0x0000046bu, 0x00050085u, - 0x0000000du, 0x0000046du, 0x0000046au, 0x0000046cu, 0x0003003eu, 0x00000465u, 0x0000046du, 0x00050041u, - 0x0000046fu, 0x00000470u, 0x0000038cu, 0x0000008eu, 0x0004003du, 0x00000010u, 0x00000471u, 0x00000470u, - 0x0004003du, 0x0000000du, 0x00000472u, 0x0000044fu, 0x00050051u, 0x00000009u, 0x00000473u, 0x00000472u, - 0x00000000u, 0x00050051u, 0x00000009u, 0x00000474u, 0x00000472u, 0x00000001u, 0x00050051u, 0x00000009u, - 0x00000475u, 0x00000472u, 0x00000002u, 0x00070050u, 0x0000000fu, 0x00000476u, 0x00000473u, 0x00000474u, - 0x00000475u, 0x0000004au, 0x00050091u, 0x0000000fu, 0x00000477u, 0x00000471u, 0x00000476u, 0x0008004fu, - 0x0000000du, 0x00000478u, 0x00000477u, 0x00000477u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, - 0x0000046eu, 0x00000478u, 0x00050041u, 0x0000046fu, 0x0000047au, 0x0000038cu, 0x0000008eu, 0x0004003du, - 0x00000010u, 0x0000047bu, 0x0000047au, 0x0004003du, 0x0000000du, 0x0000047cu, 0x00000465u, 0x00050051u, - 0x00000009u, 0x0000047du, 0x0000047cu, 0x00000000u, 0x00050051u, 0x00000009u, 0x0000047eu, 0x0000047cu, - 0x00000001u, 0x00050051u, 0x00000009u, 0x0000047fu, 0x0000047cu, 0x00000002u, 0x00070050u, 0x0000000fu, - 0x00000480u, 0x0000047du, 0x0000047eu, 0x0000047fu, 0x0000004au, 0x00050091u, 0x0000000fu, 0x00000481u, - 0x0000047bu, 0x00000480u, 0x0008004fu, 0x0000000du, 0x00000482u, 0x00000481u, 0x00000481u, 0x00000000u, - 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000479u, 0x00000482u, 0x0004003du, 0x00000006u, 0x00000484u, - 0x00000410u, 0x00040070u, 0x00000009u, 0x00000485u, 0x00000484u, 0x0004003du, 0x00000006u, 0x00000486u, - 0x000003f4u, 0x00040070u, 0x00000009u, 0x00000487u, 0x00000486u, 0x00050088u, 0x00000009u, 0x00000488u, - 0x00000485u, 0x00000487u, 0x0003003eu, 0x00000483u, 0x00000488u, 0x0004003du, 0x00000006u, 0x0000048au, - 0x00000410u, 0x00050080u, 0x00000006u, 0x0000048bu, 0x0000048au, 0x00000008u, 0x00040070u, 0x00000009u, - 0x0000048cu, 0x0000048bu, 0x0004003du, 0x00000006u, 0x0000048du, 0x000003f4u, 0x00040070u, 0x00000009u, - 0x0000048eu, 0x0000048du, 0x00050088u, 0x00000009u, 0x0000048fu, 0x0000048cu, 0x0000048eu, 0x0003003eu, - 0x00000489u, 0x0000048fu, 0x0004003du, 0x0000000du, 0x00000491u, 0x0000046eu, 0x0004003du, 0x0000000du, - 0x00000492u, 0x00000479u, 0x0004003du, 0x00000009u, 0x00000493u, 0x00000483u, 0x00060050u, 0x0000000du, - 0x00000494u, 0x00000493u, 0x00000493u, 0x00000493u, 0x0008000cu, 0x0000000du, 0x00000495u, 0x00000001u, - 0x0000002eu, 0x00000491u, 0x00000492u, 0x00000494u, 0x0003003eu, 0x00000490u, 0x00000495u, 0x0004003du, - 0x0000000du, 0x00000497u, 0x0000046eu, 0x0004003du, 0x0000000du, 0x00000498u, 0x00000479u, 0x0004003du, - 0x00000009u, 0x00000499u, 0x00000489u, 0x00060050u, 0x0000000du, 0x0000049au, 0x00000499u, 0x00000499u, - 0x00000499u, 0x0008000cu, 0x0000000du, 0x0000049bu, 0x00000001u, 0x0000002eu, 0x00000497u, 0x00000498u, - 0x0000049au, 0x0003003eu, 0x00000496u, 0x0000049bu, 0x0004003du, 0x0000000du, 0x0000049fu, 0x00000490u, - 0x0003003eu, 0x0000049eu, 0x0000049fu, 0x0004003du, 0x00000011u, 0x000004a1u, 0x000003a0u, 0x0003003eu, - 0x000004a0u, 0x000004a1u, 0x0004003du, 0x00000013u, 0x000004a3u, 0x00000394u, 0x0003003eu, 0x000004a2u, - 0x000004a3u, 0x00070039u, 0x0000000fu, 0x000004a4u, 0x00000019u, 0x0000049eu, 0x000004a0u, 0x000004a2u, - 0x0003003eu, 0x0000049du, 0x000004a4u, 0x0004003du, 0x0000000du, 0x000004a7u, 0x00000496u, 0x0003003eu, - 0x000004a6u, 0x000004a7u, 0x0004003du, 0x00000011u, 0x000004a9u, 0x000003a0u, 0x0003003eu, 0x000004a8u, - 0x000004a9u, 0x0004003du, 0x00000013u, 0x000004abu, 0x00000394u, 0x0003003eu, 0x000004aau, 0x000004abu, - 0x00070039u, 0x0000000fu, 0x000004acu, 0x00000019u, 0x000004a6u, 0x000004a8u, 0x000004aau, 0x0003003eu, - 0x000004a5u, 0x000004acu, 0x0004003du, 0x0000000fu, 0x000004aeu, 0x0000049du, 0x0007004fu, 0x00000023u, - 0x000004afu, 0x000004aeu, 0x000004aeu, 0x00000000u, 0x00000001u, 0x00050041u, 0x00000037u, 0x000004b0u, - 0x0000049du, 0x00000160u, 0x0004003du, 0x00000009u, 0x000004b1u, 0x000004b0u, 0x00050050u, 0x00000023u, - 0x000004b2u, 0x000004b1u, 0x000004b1u, 0x00050088u, 0x00000023u, 0x000004b3u, 0x000004afu, 0x000004b2u, - 0x0003003eu, 0x000004adu, 0x000004b3u, 0x0004003du, 0x0000000fu, 0x000004b5u, 0x000004a5u, 0x0007004fu, - 0x00000023u, 0x000004b6u, 0x000004b5u, 0x000004b5u, 0x00000000u, 0x00000001u, 0x00050041u, 0x00000037u, - 0x000004b7u, 0x000004a5u, 0x00000160u, 0x0004003du, 0x00000009u, 0x000004b8u, 0x000004b7u, 0x00050050u, - 0x00000023u, 0x000004b9u, 0x000004b8u, 0x000004b8u, 0x00050088u, 0x00000023u, 0x000004bau, 0x000004b6u, - 0x000004b9u, 0x0003003eu, 0x000004b4u, 0x000004bau, 0x0004003du, 0x00000023u, 0x000004bcu, 0x000004b4u, - 0x0004003du, 0x00000023u, 0x000004bdu, 0x000004adu, 0x00050083u, 0x00000023u, 0x000004beu, 0x000004bcu, - 0x000004bdu, 0x0006000cu, 0x00000023u, 0x000004bfu, 0x00000001u, 0x00000045u, 0x000004beu, 0x0003003eu, - 0x000004bbu, 0x000004bfu, 0x00050041u, 0x00000037u, 0x000004c1u, 0x000004bbu, 0x00000008u, 0x0004003du, - 0x00000009u, 0x000004c2u, 0x000004c1u, 0x0004007fu, 0x00000009u, 0x000004c3u, 0x000004c2u, 0x00050041u, - 0x00000037u, 0x000004c4u, 0x000004bbu, 0x00000089u, 0x0004003du, 0x00000009u, 0x000004c5u, 0x000004c4u, - 0x00050050u, 0x00000023u, 0x000004c6u, 0x000004c3u, 0x000004c5u, 0x0003003eu, 0x000004c0u, 0x000004c6u, - 0x0004003du, 0x00000023u, 0x000004c8u, 0x000004c0u, 0x0004003du, 0x00000009u, 0x000004c9u, 0x000003b4u, - 0x0005008eu, 0x00000023u, 0x000004cau, 0x000004c8u, 0x000004c9u, 0x00050041u, 0x00000037u, 0x000004cbu, - 0x00000394u, 0x0000008eu, 0x0004003du, 0x00000009u, 0x000004ccu, 0x000004cbu, 0x00050041u, 0x00000037u, - 0x000004cdu, 0x00000394u, 0x0000009au, 0x0004003du, 0x00000009u, 0x000004ceu, 0x000004cdu, 0x00050050u, - 0x00000023u, 0x000004cfu, 0x000004ccu, 0x000004ceu, 0x00050088u, 0x00000023u, 0x000004d0u, 0x000004cau, - 0x000004cfu, 0x0003003eu, 0x000004c7u, 0x000004d0u, 0x0004003du, 0x00000006u, 0x000004d2u, 0x00000402u, - 0x00050084u, 0x00000006u, 0x000004d3u, 0x000004d2u, 0x0000017au, 0x0003003eu, 0x000004d1u, 0x000004d3u, - 0x0004003du, 0x00000023u, 0x000004d5u, 0x000004c7u, 0x00050041u, 0x00000037u, 0x000004d6u, 0x0000049du, - 0x00000160u, 0x0004003du, 0x00000009u, 0x000004d7u, 0x000004d6u, 0x0005008eu, 0x00000023u, 0x000004d8u, - 0x000004d5u, 0x000004d7u, 0x00050051u, 0x00000009u, 0x000004d9u, 0x000004d8u, 0x00000000u, 0x00050051u, - 0x00000009u, 0x000004dau, 0x000004d8u, 0x00000001u, 0x00070050u, 0x0000000fu, 0x000004dbu, 0x000004d9u, - 0x000004dau, 0x00000041u, 0x00000041u, 0x0003003eu, 0x000004d4u, 0x000004dbu, 0x0004003du, 0x00000023u, - 0x000004ddu, 0x000004c7u, 0x00050041u, 0x00000037u, 0x000004deu, 0x000004a5u, 0x00000160u, 0x0004003du, - 0x00000009u, 0x000004dfu, 0x000004deu, 0x0005008eu, 0x00000023u, 0x000004e0u, 0x000004ddu, 0x000004dfu, - 0x00050051u, 0x00000009u, 0x000004e1u, 0x000004e0u, 0x00000000u, 0x00050051u, 0x00000009u, 0x000004e2u, - 0x000004e0u, 0x00000001u, 0x00070050u, 0x0000000fu, 0x000004e3u, 0x000004e1u, 0x000004e2u, 0x00000041u, - 0x00000041u, 0x0003003eu, 0x000004dcu, 0x000004e3u, 0x00050041u, 0x00000037u, 0x000004e6u, 0x0000049du, - 0x00000160u, 0x0004003du, 0x00000009u, 0x000004e7u, 0x000004e6u, 0x00050085u, 0x00000009u, 0x000004e8u, - 0x000004e5u, 0x000004e7u, 0x0003003eu, 0x000004e4u, 0x000004e8u, 0x00050041u, 0x00000037u, 0x000004eau, - 0x000004a5u, 0x00000160u, 0x0004003du, 0x00000009u, 0x000004ebu, 0x000004eau, 0x00050085u, 0x00000009u, - 0x000004ecu, 0x000004e5u, 0x000004ebu, 0x0003003eu, 0x000004e9u, 0x000004ecu, 0x0004003du, 0x0000000fu, - 0x000004eeu, 0x0000049du, 0x0004003du, 0x0000000fu, 0x000004efu, 0x000004d4u, 0x00050083u, 0x0000000fu, - 0x000004f0u, 0x000004eeu, 0x000004efu, 0x0003003eu, 0x000004edu, 0x000004f0u, 0x0004003du, 0x00000009u, - 0x000004f1u, 0x000004e4u, 0x00050041u, 0x00000037u, 0x000004f2u, 0x000004edu, 0x0000006bu, 0x0004003du, - 0x00000009u, 0x000004f3u, 0x000004f2u, 0x00050081u, 0x00000009u, 0x000004f4u, 0x000004f3u, 0x000004f1u, - 0x00050041u, 0x00000037u, 0x000004f5u, 0x000004edu, 0x0000006bu, 0x0003003eu, 0x000004f5u, 0x000004f4u, - 0x0004003du, 0x0000000fu, 0x000004f7u, 0x0000049du, 0x0004003du, 0x0000000fu, 0x000004f8u, 0x000004d4u, - 0x00050081u, 0x0000000fu, 0x000004f9u, 0x000004f7u, 0x000004f8u, 0x0003003eu, 0x000004f6u, 0x000004f9u, - 0x0004003du, 0x00000009u, 0x000004fau, 0x000004e4u, 0x00050041u, 0x00000037u, 0x000004fbu, 0x000004f6u, - 0x0000006bu, 0x0004003du, 0x00000009u, 0x000004fcu, 0x000004fbu, 0x00050081u, 0x00000009u, 0x000004fdu, - 0x000004fcu, 0x000004fau, 0x00050041u, 0x00000037u, 0x000004feu, 0x000004f6u, 0x0000006bu, 0x0003003eu, - 0x000004feu, 0x000004fdu, 0x0004003du, 0x0000000fu, 0x00000500u, 0x000004a5u, 0x0004003du, 0x0000000fu, - 0x00000501u, 0x000004dcu, 0x00050081u, 0x0000000fu, 0x00000502u, 0x00000500u, 0x00000501u, 0x0003003eu, - 0x000004ffu, 0x00000502u, 0x0004003du, 0x00000009u, 0x00000503u, 0x000004e9u, 0x00050041u, 0x00000037u, - 0x00000504u, 0x000004ffu, 0x0000006bu, 0x0004003du, 0x00000009u, 0x00000505u, 0x00000504u, 0x00050081u, - 0x00000009u, 0x00000506u, 0x00000505u, 0x00000503u, 0x00050041u, 0x00000037u, 0x00000507u, 0x000004ffu, - 0x0000006bu, 0x0003003eu, 0x00000507u, 0x00000506u, 0x0004003du, 0x0000000fu, 0x00000509u, 0x000004a5u, - 0x0004003du, 0x0000000fu, 0x0000050au, 0x000004dcu, 0x00050083u, 0x0000000fu, 0x0000050bu, 0x00000509u, - 0x0000050au, 0x0003003eu, 0x00000508u, 0x0000050bu, 0x0004003du, 0x00000009u, 0x0000050cu, 0x000004e9u, - 0x00050041u, 0x00000037u, 0x0000050du, 0x00000508u, 0x0000006bu, 0x0004003du, 0x00000009u, 0x0000050eu, - 0x0000050du, 0x00050081u, 0x00000009u, 0x0000050fu, 0x0000050eu, 0x0000050cu, 0x00050041u, 0x00000037u, - 0x00000510u, 0x00000508u, 0x0000006bu, 0x0003003eu, 0x00000510u, 0x0000050fu, 0x0004003du, 0x00000006u, - 0x00000511u, 0x000004d1u, 0x00050080u, 0x00000006u, 0x00000512u, 0x00000511u, 0x00000089u, 0x0004003du, - 0x0000000fu, 0x00000513u, 0x000004edu, 0x00060041u, 0x00000434u, 0x00000514u, 0x00000432u, 0x00000512u, - 0x0000005fu, 0x0003003eu, 0x00000514u, 0x00000513u, 0x0004003du, 0x00000006u, 0x00000515u, 0x000004d1u, - 0x00050080u, 0x00000006u, 0x00000516u, 0x00000515u, 0x00000008u, 0x0004003du, 0x0000000fu, 0x00000517u, - 0x000004f6u, 0x00060041u, 0x00000434u, 0x00000518u, 0x00000432u, 0x00000516u, 0x0000005fu, 0x0003003eu, - 0x00000518u, 0x00000517u, 0x0004003du, 0x00000006u, 0x00000519u, 0x000004d1u, 0x00050080u, 0x00000006u, - 0x0000051au, 0x00000519u, 0x0000006bu, 0x0004003du, 0x0000000fu, 0x0000051bu, 0x000004ffu, 0x00060041u, - 0x00000434u, 0x0000051cu, 0x00000432u, 0x0000051au, 0x0000005fu, 0x0003003eu, 0x0000051cu, 0x0000051bu, - 0x0004003du, 0x00000006u, 0x0000051du, 0x000004d1u, 0x00050080u, 0x00000006u, 0x0000051eu, 0x0000051du, - 0x00000160u, 0x0004003du, 0x0000000fu, 0x0000051fu, 0x00000508u, 0x00060041u, 0x00000434u, 0x00000520u, - 0x00000432u, 0x0000051eu, 0x0000005fu, 0x0003003eu, 0x00000520u, 0x0000051fu, 0x000200f9u, 0x00000407u, - 0x000200f8u, 0x00000407u, 0x0004003du, 0x00000006u, 0x00000521u, 0x00000402u, 0x00050080u, 0x00000006u, - 0x00000522u, 0x00000521u, 0x00000007u, 0x0003003eu, 0x00000402u, 0x00000522u, 0x000200f9u, 0x00000404u, - 0x000200f8u, 0x00000406u, 0x000400e0u, 0x0000006bu, 0x0000006bu, 0x00000523u, 0x0004003du, 0x00000006u, - 0x00000525u, 0x0000037du, 0x0003003eu, 0x00000524u, 0x00000525u, 0x000200f9u, 0x00000526u, 0x000200f8u, - 0x00000526u, 0x000400f6u, 0x00000528u, 0x00000529u, 0x00000000u, 0x000200f9u, 0x0000052au, 0x000200f8u, - 0x0000052au, 0x0004003du, 0x00000006u, 0x0000052bu, 0x00000524u, 0x0004003du, 0x00000006u, 0x0000052cu, - 0x000003f8u, 0x000500b0u, 0x00000042u, 0x0000052du, 0x0000052bu, 0x0000052cu, 0x000400fau, 0x0000052du, - 0x00000527u, 0x00000528u, 0x000200f8u, 0x00000527u, 0x0004003du, 0x00000006u, 0x0000052fu, 0x00000524u, - 0x00050084u, 0x00000006u, 0x00000530u, 0x0000052fu, 0x0000017au, 0x0003003eu, 0x0000052eu, 0x00000530u, - 0x0004003du, 0x00000006u, 0x00000532u, 0x00000524u, 0x00050084u, 0x00000006u, 0x00000533u, 0x00000532u, - 0x0000006bu, 0x0003003eu, 0x00000531u, 0x00000533u, 0x0004003du, 0x00000006u, 0x00000538u, 0x00000531u, - 0x00050080u, 0x00000006u, 0x00000539u, 0x00000538u, 0x00000089u, 0x0004003du, 0x00000006u, 0x0000053au, - 0x0000052eu, 0x00050080u, 0x00000006u, 0x0000053bu, 0x0000053au, 0x00000089u, 0x0004003du, 0x00000006u, - 0x0000053cu, 0x0000052eu, 0x00050080u, 0x00000006u, 0x0000053du, 0x0000053cu, 0x00000008u, 0x0004003du, - 0x00000006u, 0x0000053eu, 0x0000052eu, 0x00050080u, 0x00000006u, 0x0000053fu, 0x0000053eu, 0x0000006bu, - 0x00060050u, 0x00000031u, 0x00000540u, 0x0000053bu, 0x0000053du, 0x0000053fu, 0x00050041u, 0x00000541u, - 0x00000542u, 0x00000537u, 0x00000539u, 0x0003003eu, 0x00000542u, 0x00000540u, 0x0004003du, 0x00000006u, - 0x00000547u, 0x00000531u, 0x00050080u, 0x00000006u, 0x00000548u, 0x00000547u, 0x00000089u, 0x00050041u, - 0x0000038du, 0x00000549u, 0x0000038cu, 0x0000005fu, 0x0004003du, 0x00000006u, 0x0000054au, 0x00000549u, - 0x0004007cu, 0x00000039u, 0x0000054bu, 0x0000054au, 0x00060041u, 0x0000054cu, 0x0000054du, 0x00000546u, - 0x00000548u, 0x0000005fu, 0x0003003eu, 0x0000054du, 0x0000054bu, 0x0004003du, 0x00000006u, 0x00000552u, - 0x00000531u, 0x00050080u, 0x00000006u, 0x00000553u, 0x00000552u, 0x00000089u, 0x00060041u, 0x00000554u, - 0x00000555u, 0x00000551u, 0x00000553u, 0x0000005fu, 0x0003003eu, 0x00000555u, 0x00000458u, 0x0004003du, - 0x00000006u, 0x00000556u, 0x00000531u, 0x00050080u, 0x00000006u, 0x00000557u, 0x00000556u, 0x00000089u, - 0x00060041u, 0x00000554u, 0x0000055au, 0x00000551u, 0x00000557u, 0x00000127u, 0x0003003eu, 0x0000055au, - 0x00000559u, 0x0004003du, 0x00000006u, 0x0000055bu, 0x00000531u, 0x00050080u, 0x00000006u, 0x0000055cu, - 0x0000055bu, 0x00000089u, 0x00060041u, 0x00000554u, 0x0000055du, 0x00000551u, 0x0000055cu, 0x0000008eu, - 0x0003003eu, 0x0000055du, 0x00000559u, 0x0004003du, 0x00000006u, 0x0000055eu, 0x00000531u, 0x00050080u, - 0x00000006u, 0x0000055fu, 0x0000055eu, 0x00000089u, 0x00050041u, 0x00000560u, 0x00000561u, 0x0000038cu, - 0x000000d8u, 0x0004003du, 0x00000009u, 0x00000562u, 0x00000561u, 0x00060041u, 0x00000563u, 0x00000564u, - 0x00000551u, 0x0000055fu, 0x0000009au, 0x0003003eu, 0x00000564u, 0x00000562u, 0x0004003du, 0x00000006u, - 0x00000565u, 0x00000531u, 0x00050080u, 0x00000006u, 0x00000566u, 0x00000565u, 0x00000008u, 0x0004003du, - 0x00000006u, 0x00000567u, 0x0000052eu, 0x00050080u, 0x00000006u, 0x00000568u, 0x00000567u, 0x00000089u, - 0x0004003du, 0x00000006u, 0x00000569u, 0x0000052eu, 0x00050080u, 0x00000006u, 0x0000056au, 0x00000569u, - 0x0000006bu, 0x0004003du, 0x00000006u, 0x0000056bu, 0x0000052eu, 0x00050080u, 0x00000006u, 0x0000056cu, - 0x0000056bu, 0x00000160u, 0x00060050u, 0x00000031u, 0x0000056du, 0x00000568u, 0x0000056au, 0x0000056cu, - 0x00050041u, 0x00000541u, 0x0000056eu, 0x00000537u, 0x00000566u, 0x0003003eu, 0x0000056eu, 0x0000056du, - 0x0004003du, 0x00000006u, 0x0000056fu, 0x00000531u, 0x00050080u, 0x00000006u, 0x00000570u, 0x0000056fu, - 0x00000008u, 0x00050041u, 0x0000038du, 0x00000571u, 0x0000038cu, 0x0000005fu, 0x0004003du, 0x00000006u, - 0x00000572u, 0x00000571u, 0x0004007cu, 0x00000039u, 0x00000573u, 0x00000572u, 0x00060041u, 0x0000054cu, - 0x00000574u, 0x00000546u, 0x00000570u, 0x0000005fu, 0x0003003eu, 0x00000574u, 0x00000573u, 0x0004003du, - 0x00000006u, 0x00000575u, 0x00000531u, 0x00050080u, 0x00000006u, 0x00000576u, 0x00000575u, 0x00000008u, - 0x00060041u, 0x00000554u, 0x00000577u, 0x00000551u, 0x00000576u, 0x0000005fu, 0x0003003eu, 0x00000577u, - 0x00000458u, 0x0004003du, 0x00000006u, 0x00000578u, 0x00000531u, 0x00050080u, 0x00000006u, 0x00000579u, - 0x00000578u, 0x00000008u, 0x00060041u, 0x00000554u, 0x0000057au, 0x00000551u, 0x00000579u, 0x00000127u, - 0x0003003eu, 0x0000057au, 0x00000559u, 0x0004003du, 0x00000006u, 0x0000057bu, 0x00000531u, 0x00050080u, - 0x00000006u, 0x0000057cu, 0x0000057bu, 0x00000008u, 0x00060041u, 0x00000554u, 0x0000057du, 0x00000551u, - 0x0000057cu, 0x0000008eu, 0x0003003eu, 0x0000057du, 0x00000559u, 0x0004003du, 0x00000006u, 0x0000057eu, - 0x00000531u, 0x00050080u, 0x00000006u, 0x0000057fu, 0x0000057eu, 0x00000008u, 0x00050041u, 0x00000560u, - 0x00000580u, 0x0000038cu, 0x000000d8u, 0x0004003du, 0x00000009u, 0x00000581u, 0x00000580u, 0x00060041u, - 0x00000563u, 0x00000582u, 0x00000551u, 0x0000057fu, 0x0000009au, 0x0003003eu, 0x00000582u, 0x00000581u, - 0x000200f9u, 0x00000529u, 0x000200f8u, 0x00000529u, 0x0004003du, 0x00000006u, 0x00000583u, 0x00000524u, - 0x00050080u, 0x00000006u, 0x00000584u, 0x00000583u, 0x00000007u, 0x0003003eu, 0x00000524u, 0x00000584u, - 0x000200f9u, 0x00000526u, 0x000200f8u, 0x00000528u, 0x000100fdu, 0x000200f8u, 0x000003afu, 0x0004003du, - 0x00000006u, 0x00000587u, 0x00000377u, 0x0003003eu, 0x00000586u, 0x00000587u, 0x00050041u, 0x0000038du, - 0x00000589u, 0x0000038cu, 0x000000ccu, 0x0004003du, 0x00000006u, 0x0000058au, 0x00000589u, 0x0003003eu, - 0x00000588u, 0x0000058au, 0x00050041u, 0x0000038du, 0x0000058bu, 0x0000038cu, 0x000000deu, 0x0004003du, - 0x00000006u, 0x0000058cu, 0x0000058bu, 0x0004003du, 0x00000006u, 0x0000058du, 0x00000586u, 0x000500c4u, - 0x00000006u, 0x0000058eu, 0x00000008u, 0x0000058du, 0x000500c7u, 0x00000006u, 0x0000058fu, 0x0000058cu, - 0x0000058eu, 0x000500aau, 0x00000042u, 0x00000590u, 0x0000058fu, 0x00000089u, 0x000300f7u, 0x00000592u, - 0x00000000u, 0x000400fau, 0x00000590u, 0x00000591u, 0x00000592u, 0x000200f8u, 0x00000591u, 0x0003003eu, - 0x00000376u, 0x00000089u, 0x0004003du, 0x00000006u, 0x00000593u, 0x00000376u, 0x000314afu, 0x00000089u, - 0x00000593u, 0x000100fdu, 0x000200f8u, 0x00000592u, 0x0004003du, 0x00000006u, 0x000005a0u, 0x00000586u, - 0x00050041u, 0x00000596u, 0x000005a3u, 0x000005a2u, 0x000005a0u, 0x0004003du, 0x00000595u, 0x000005a4u, - 0x000005a3u, 0x0003003eu, 0x00000597u, 0x000005a4u, 0x0003003eu, 0x000005a5u, 0x00000089u, 0x000200f9u, - 0x000005a6u, 0x000200f8u, 0x000005a6u, 0x000400f6u, 0x000005a8u, 0x000005a9u, 0x00000000u, 0x000200f9u, - 0x000005aau, 0x000200f8u, 0x000005aau, 0x0004003du, 0x00000006u, 0x000005abu, 0x000005a5u, 0x000500b0u, - 0x00000042u, 0x000005acu, 0x000005abu, 0x0000017au, 0x000400fau, 0x000005acu, 0x000005a7u, 0x000005a8u, - 0x000200f8u, 0x000005a7u, 0x0004003du, 0x00000006u, 0x000005aeu, 0x000005a5u, 0x000500aau, 0x00000042u, - 0x000005afu, 0x000005aeu, 0x00000089u, 0x000300f7u, 0x000005b2u, 0x00000000u, 0x000400fau, 0x000005afu, - 0x000005b1u, 0x000005b5u, 0x000200f8u, 0x000005b1u, 0x00050041u, 0x0000001bu, 0x000005b3u, 0x00000597u, - 0x00000089u, 0x0004003du, 0x00000006u, 0x000005b4u, 0x000005b3u, 0x0003003eu, 0x000005b0u, 0x000005b4u, - 0x000200f9u, 0x000005b2u, 0x000200f8u, 0x000005b5u, 0x0004003du, 0x00000006u, 0x000005b6u, 0x000005a5u, - 0x000500aau, 0x00000042u, 0x000005b7u, 0x000005b6u, 0x00000008u, 0x000300f7u, 0x000005bau, 0x00000000u, - 0x000400fau, 0x000005b7u, 0x000005b9u, 0x000005bdu, 0x000200f8u, 0x000005b9u, 0x00050041u, 0x0000001bu, - 0x000005bbu, 0x00000597u, 0x00000008u, 0x0004003du, 0x00000006u, 0x000005bcu, 0x000005bbu, 0x0003003eu, - 0x000005b8u, 0x000005bcu, 0x000200f9u, 0x000005bau, 0x000200f8u, 0x000005bdu, 0x0004003du, 0x00000006u, - 0x000005beu, 0x000005a5u, 0x000500aau, 0x00000042u, 0x000005bfu, 0x000005beu, 0x0000006bu, 0x000300f7u, - 0x000005c2u, 0x00000000u, 0x000400fau, 0x000005bfu, 0x000005c1u, 0x000005c5u, 0x000200f8u, 0x000005c1u, - 0x00050041u, 0x0000001bu, 0x000005c3u, 0x00000597u, 0x0000006bu, 0x0004003du, 0x00000006u, 0x000005c4u, - 0x000005c3u, 0x0003003eu, 0x000005c0u, 0x000005c4u, 0x000200f9u, 0x000005c2u, 0x000200f8u, 0x000005c5u, - 0x00050041u, 0x0000001bu, 0x000005c6u, 0x00000597u, 0x00000160u, 0x0004003du, 0x00000006u, 0x000005c7u, - 0x000005c6u, 0x0003003eu, 0x000005c0u, 0x000005c7u, 0x000200f9u, 0x000005c2u, 0x000200f8u, 0x000005c2u, - 0x0004003du, 0x00000006u, 0x000005c8u, 0x000005c0u, 0x0003003eu, 0x000005b8u, 0x000005c8u, 0x000200f9u, - 0x000005bau, 0x000200f8u, 0x000005bau, 0x0004003du, 0x00000006u, 0x000005c9u, 0x000005b8u, 0x0003003eu, - 0x000005b0u, 0x000005c9u, 0x000200f9u, 0x000005b2u, 0x000200f8u, 0x000005b2u, 0x0004003du, 0x00000006u, - 0x000005cau, 0x000005b0u, 0x0003003eu, 0x000005adu, 0x000005cau, 0x0004003du, 0x00000006u, 0x000005ccu, - 0x000005adu, 0x00050041u, 0x0000000eu, 0x000005ceu, 0x000005cdu, 0x000005ccu, 0x0004003du, 0x0000000du, - 0x000005cfu, 0x000005ceu, 0x0003003eu, 0x000005cbu, 0x000005cfu, 0x0004003du, 0x00000006u, 0x000005d3u, - 0x000005a5u, 0x00050041u, 0x00000037u, 0x000005d4u, 0x000005cbu, 0x00000089u, 0x0004003du, 0x00000009u, - 0x000005d5u, 0x000005d4u, 0x00050081u, 0x00000009u, 0x000005d6u, 0x000005d5u, 0x00000091u, 0x00050041u, - 0x00000037u, 0x000005d7u, 0x000005d2u, 0x000005d3u, 0x0003003eu, 0x000005d7u, 0x000005d6u, 0x0004003du, - 0x00000006u, 0x000005dbu, 0x000005a5u, 0x00050041u, 0x0000046fu, 0x000005dcu, 0x0000038cu, 0x0000008eu, - 0x0004003du, 0x00000010u, 0x000005ddu, 0x000005dcu, 0x0004003du, 0x0000000du, 0x000005deu, 0x000005cbu, - 0x00050041u, 0x00000461u, 0x000005dfu, 0x0000038cu, 0x0000009au, 0x0004003du, 0x0000000du, 0x000005e0u, - 0x000005dfu, 0x00050085u, 0x0000000du, 0x000005e1u, 0x000005deu, 0x000005e0u, 0x00050051u, 0x00000009u, - 0x000005e2u, 0x000005e1u, 0x00000000u, 0x00050051u, 0x00000009u, 0x000005e3u, 0x000005e1u, 0x00000001u, - 0x00050051u, 0x00000009u, 0x000005e4u, 0x000005e1u, 0x00000002u, 0x00070050u, 0x0000000fu, 0x000005e5u, - 0x000005e2u, 0x000005e3u, 0x000005e4u, 0x0000004au, 0x00050091u, 0x0000000fu, 0x000005e6u, 0x000005ddu, - 0x000005e5u, 0x0008004fu, 0x0000000du, 0x000005e7u, 0x000005e6u, 0x000005e6u, 0x00000000u, 0x00000001u, - 0x00000002u, 0x00050041u, 0x0000000eu, 0x000005e8u, 0x000005dau, 0x000005dbu, 0x0003003eu, 0x000005e8u, - 0x000005e7u, 0x000200f9u, 0x000005a9u, 0x000200f8u, 0x000005a9u, 0x0004003du, 0x00000006u, 0x000005e9u, - 0x000005a5u, 0x00050080u, 0x00000006u, 0x000005eau, 0x000005e9u, 0x00000127u, 0x0003003eu, 0x000005a5u, - 0x000005eau, 0x000200f9u, 0x000005a6u, 0x000200f8u, 0x000005a8u, 0x0004003du, 0x00000006u, 0x000005edu, - 0x00000588u, 0x0003003eu, 0x000005ecu, 0x000005edu, 0x00050039u, 0x00000006u, 0x000005eeu, 0x0000001eu, - 0x000005ecu, 0x0003003eu, 0x000005ebu, 0x000005eeu, 0x0004003du, 0x00000006u, 0x000005f1u, 0x00000588u, - 0x0003003eu, 0x000005f0u, 0x000005f1u, 0x00050039u, 0x00000006u, 0x000005f2u, 0x00000021u, 0x000005f0u, - 0x0003003eu, 0x000005efu, 0x000005f2u, 0x0004003du, 0x00000006u, 0x000005f4u, 0x000005ebu, 0x00050084u, - 0x00000006u, 0x000005f5u, 0x000005f4u, 0x0000006bu, 0x0003003eu, 0x000005f3u, 0x000005f5u, 0x0004003du, - 0x00000006u, 0x000005f7u, 0x000005efu, 0x00050084u, 0x00000006u, 0x000005f8u, 0x000005f7u, 0x0000006bu, - 0x0003003eu, 0x000005f6u, 0x000005f8u, 0x0004003du, 0x00000006u, 0x000005f9u, 0x000005f6u, 0x0003003eu, - 0x00000376u, 0x000005f9u, 0x0004003du, 0x00000006u, 0x000005fau, 0x000005f3u, 0x0004003du, 0x00000006u, - 0x000005fbu, 0x00000376u, 0x000314afu, 0x000005fau, 0x000005fbu, 0x00050041u, 0x0000000eu, 0x000005ffu, - 0x000005dau, 0x0000005fu, 0x0004003du, 0x0000000du, 0x00000600u, 0x000005ffu, 0x00050041u, 0x0000000eu, - 0x00000601u, 0x000005feu, 0x0000005fu, 0x0003003eu, 0x00000601u, 0x00000600u, 0x00050041u, 0x0000000eu, - 0x00000602u, 0x000005dau, 0x00000127u, 0x0004003du, 0x0000000du, 0x00000603u, 0x00000602u, 0x00050041u, - 0x0000000eu, 0x00000604u, 0x000005feu, 0x00000127u, 0x0003003eu, 0x00000604u, 0x00000603u, 0x00050041u, - 0x0000000eu, 0x00000605u, 0x000005dau, 0x0000008eu, 0x0004003du, 0x0000000du, 0x00000606u, 0x00000605u, - 0x00050041u, 0x0000000eu, 0x00000607u, 0x000005feu, 0x0000008eu, 0x0003003eu, 0x00000607u, 0x00000606u, - 0x00050041u, 0x0000000eu, 0x00000608u, 0x000005dau, 0x0000005fu, 0x0004003du, 0x0000000du, 0x00000609u, - 0x00000608u, 0x00050041u, 0x0000000eu, 0x0000060au, 0x000005feu, 0x0000009au, 0x0003003eu, 0x0000060au, - 0x00000609u, 0x00050041u, 0x0000000eu, 0x0000060bu, 0x000005dau, 0x0000008eu, 0x0004003du, 0x0000000du, - 0x0000060cu, 0x0000060bu, 0x00050041u, 0x0000000eu, 0x0000060du, 0x000005feu, 0x0000004du, 0x0003003eu, - 0x0000060du, 0x0000060cu, 0x00050041u, 0x0000000eu, 0x0000060eu, 0x000005dau, 0x0000009au, 0x0004003du, - 0x0000000du, 0x0000060fu, 0x0000060eu, 0x00050041u, 0x0000000eu, 0x00000610u, 0x000005feu, 0x0000003du, - 0x0003003eu, 0x00000610u, 0x0000060fu, 0x00050041u, 0x00000037u, 0x00000614u, 0x000005d2u, 0x0000005fu, - 0x0004003du, 0x00000009u, 0x00000615u, 0x00000614u, 0x00050041u, 0x00000037u, 0x00000616u, 0x00000613u, - 0x0000005fu, 0x0003003eu, 0x00000616u, 0x00000615u, 0x00050041u, 0x00000037u, 0x00000617u, 0x000005d2u, - 0x00000127u, 0x0004003du, 0x00000009u, 0x00000618u, 0x00000617u, 0x00050041u, 0x00000037u, 0x00000619u, - 0x00000613u, 0x00000127u, 0x0003003eu, 0x00000619u, 0x00000618u, 0x00050041u, 0x00000037u, 0x0000061au, - 0x000005d2u, 0x0000008eu, 0x0004003du, 0x00000009u, 0x0000061bu, 0x0000061au, 0x00050041u, 0x00000037u, - 0x0000061cu, 0x00000613u, 0x0000008eu, 0x0003003eu, 0x0000061cu, 0x0000061bu, 0x00050041u, 0x00000037u, - 0x0000061du, 0x000005d2u, 0x0000005fu, 0x0004003du, 0x00000009u, 0x0000061eu, 0x0000061du, 0x00050041u, - 0x00000037u, 0x0000061fu, 0x00000613u, 0x0000009au, 0x0003003eu, 0x0000061fu, 0x0000061eu, 0x00050041u, - 0x00000037u, 0x00000620u, 0x000005d2u, 0x0000008eu, 0x0004003du, 0x00000009u, 0x00000621u, 0x00000620u, - 0x00050041u, 0x00000037u, 0x00000622u, 0x00000613u, 0x0000004du, 0x0003003eu, 0x00000622u, 0x00000621u, - 0x00050041u, 0x00000037u, 0x00000623u, 0x000005d2u, 0x0000009au, 0x0004003du, 0x00000009u, 0x00000624u, - 0x00000623u, 0x00050041u, 0x00000037u, 0x00000625u, 0x00000613u, 0x0000003du, 0x0003003eu, 0x00000625u, - 0x00000624u, 0x0003003eu, 0x00000626u, 0x00000089u, 0x000200f9u, 0x00000627u, 0x000200f8u, 0x00000627u, - 0x000400f6u, 0x00000629u, 0x0000062au, 0x00000000u, 0x000200f9u, 0x0000062bu, 0x000200f8u, 0x0000062bu, - 0x0004003du, 0x00000006u, 0x0000062cu, 0x00000626u, 0x000500b0u, 0x00000042u, 0x0000062du, 0x0000062cu, - 0x0000006bu, 0x000400fau, 0x0000062du, 0x00000628u, 0x00000629u, 0x000200f8u, 0x00000628u, 0x0004003du, - 0x00000006u, 0x0000062fu, 0x00000626u, 0x00050084u, 0x00000006u, 0x00000630u, 0x0000062fu, 0x00000160u, - 0x00050041u, 0x0000000eu, 0x00000631u, 0x000005feu, 0x00000630u, 0x0004003du, 0x0000000du, 0x00000632u, - 0x00000631u, 0x0003003eu, 0x0000062eu, 0x00000632u, 0x0004003du, 0x00000006u, 0x00000634u, 0x00000626u, - 0x00050084u, 0x00000006u, 0x00000635u, 0x00000634u, 0x00000160u, 0x00050080u, 0x00000006u, 0x00000636u, - 0x00000635u, 0x00000008u, 0x00050041u, 0x0000000eu, 0x00000637u, 0x000005feu, 0x00000636u, 0x0004003du, - 0x0000000du, 0x00000638u, 0x00000637u, 0x0003003eu, 0x00000633u, 0x00000638u, 0x0004003du, 0x00000006u, - 0x0000063au, 0x00000626u, 0x00050084u, 0x00000006u, 0x0000063bu, 0x0000063au, 0x00000160u, 0x00050080u, - 0x00000006u, 0x0000063cu, 0x0000063bu, 0x0000006bu, 0x00050041u, 0x0000000eu, 0x0000063du, 0x000005feu, - 0x0000063cu, 0x0004003du, 0x0000000du, 0x0000063eu, 0x0000063du, 0x0003003eu, 0x00000639u, 0x0000063eu, - 0x0004003du, 0x00000006u, 0x00000640u, 0x00000626u, 0x0004003du, 0x00000006u, 0x00000641u, 0x000005ebu, - 0x00050084u, 0x00000006u, 0x00000642u, 0x00000640u, 0x00000641u, 0x0003003eu, 0x0000063fu, 0x00000642u, - 0x0004003du, 0x00000006u, 0x00000644u, 0x0000037du, 0x0003003eu, 0x00000643u, 0x00000644u, 0x000200f9u, - 0x00000645u, 0x000200f8u, 0x00000645u, 0x000400f6u, 0x00000647u, 0x00000648u, 0x00000000u, 0x000200f9u, - 0x00000649u, 0x000200f8u, 0x00000649u, 0x0004003du, 0x00000006u, 0x0000064au, 0x00000643u, 0x0004003du, - 0x00000006u, 0x0000064bu, 0x000005ebu, 0x000500b0u, 0x00000042u, 0x0000064cu, 0x0000064au, 0x0000064bu, - 0x000400fau, 0x0000064cu, 0x00000646u, 0x00000647u, 0x000200f8u, 0x00000646u, 0x0004003du, 0x00000006u, - 0x0000064fu, 0x00000643u, 0x0003003eu, 0x0000064eu, 0x0000064fu, 0x0004003du, 0x00000006u, 0x00000651u, - 0x00000588u, 0x0003003eu, 0x00000650u, 0x00000651u, 0x00060039u, 0x00000023u, 0x00000652u, 0x00000027u, - 0x0000064eu, 0x00000650u, 0x0003003eu, 0x0000064du, 0x00000652u, 0x0004003du, 0x0000000du, 0x00000655u, - 0x0000062eu, 0x0003003eu, 0x00000654u, 0x00000655u, 0x0004003du, 0x0000000du, 0x00000657u, 0x00000633u, - 0x0003003eu, 0x00000656u, 0x00000657u, 0x0004003du, 0x0000000du, 0x00000659u, 0x00000639u, 0x0003003eu, - 0x00000658u, 0x00000659u, 0x0004003du, 0x00000023u, 0x0000065bu, 0x0000064du, 0x0003003eu, 0x0000065au, - 0x0000065bu, 0x00080039u, 0x0000000du, 0x0000065cu, 0x0000002fu, 0x00000654u, 0x00000656u, 0x00000658u, - 0x0000065au, 0x0003003eu, 0x00000653u, 0x0000065cu, 0x0004003du, 0x0000000du, 0x0000065fu, 0x00000653u, - 0x0003003eu, 0x0000065eu, 0x0000065fu, 0x0004003du, 0x00000011u, 0x00000661u, 0x000003a0u, 0x0003003eu, - 0x00000660u, 0x00000661u, 0x0004003du, 0x00000013u, 0x00000663u, 0x00000394u, 0x0003003eu, 0x00000662u, - 0x00000663u, 0x00070039u, 0x0000000fu, 0x00000664u, 0x00000019u, 0x0000065eu, 0x00000660u, 0x00000662u, - 0x0003003eu, 0x0000065du, 0x00000664u, 0x0004003du, 0x00000006u, 0x00000665u, 0x0000063fu, 0x0004003du, - 0x00000006u, 0x00000666u, 0x00000643u, 0x00050080u, 0x00000006u, 0x00000667u, 0x00000665u, 0x00000666u, - 0x0004003du, 0x0000000fu, 0x00000668u, 0x0000065du, 0x00060041u, 0x00000434u, 0x00000669u, 0x00000432u, - 0x00000667u, 0x0000005fu, 0x0003003eu, 0x00000669u, 0x00000668u, 0x000200f9u, 0x00000648u, 0x000200f8u, - 0x00000648u, 0x0004003du, 0x00000006u, 0x0000066au, 0x00000643u, 0x00050080u, 0x00000006u, 0x0000066bu, - 0x0000066au, 0x00000007u, 0x0003003eu, 0x00000643u, 0x0000066bu, 0x000200f9u, 0x00000645u, 0x000200f8u, - 0x00000647u, 0x000200f9u, 0x0000062au, 0x000200f8u, 0x0000062au, 0x0004003du, 0x00000006u, 0x0000066cu, - 0x00000626u, 0x00050080u, 0x00000006u, 0x0000066du, 0x0000066cu, 0x00000127u, 0x0003003eu, 0x00000626u, - 0x0000066du, 0x000200f9u, 0x00000627u, 0x000200f8u, 0x00000629u, 0x000400e0u, 0x0000006bu, 0x0000006bu, - 0x00000523u, 0x0003003eu, 0x0000066eu, 0x00000089u, 0x000200f9u, 0x0000066fu, 0x000200f8u, 0x0000066fu, - 0x000400f6u, 0x00000671u, 0x00000672u, 0x00000000u, 0x000200f9u, 0x00000673u, 0x000200f8u, 0x00000673u, - 0x0004003du, 0x00000006u, 0x00000674u, 0x0000066eu, 0x000500b0u, 0x00000042u, 0x00000675u, 0x00000674u, - 0x0000006bu, 0x000400fau, 0x00000675u, 0x00000670u, 0x00000671u, 0x000200f8u, 0x00000670u, 0x0004003du, - 0x00000006u, 0x00000677u, 0x0000066eu, 0x0004003du, 0x00000006u, 0x00000678u, 0x000005ebu, 0x00050084u, - 0x00000006u, 0x00000679u, 0x00000677u, 0x00000678u, 0x0003003eu, 0x00000676u, 0x00000679u, 0x0004003du, - 0x00000006u, 0x0000067bu, 0x0000066eu, 0x0004003du, 0x00000006u, 0x0000067cu, 0x000005efu, 0x00050084u, - 0x00000006u, 0x0000067du, 0x0000067bu, 0x0000067cu, 0x0003003eu, 0x0000067au, 0x0000067du, 0x0004003du, - 0x00000006u, 0x0000067fu, 0x0000066eu, 0x00050084u, 0x00000006u, 0x00000680u, 0x0000067fu, 0x00000160u, - 0x00050041u, 0x00000037u, 0x00000681u, 0x00000613u, 0x00000680u, 0x0004003du, 0x00000009u, 0x00000682u, - 0x00000681u, 0x0003003eu, 0x0000067eu, 0x00000682u, 0x0004003du, 0x00000006u, 0x00000684u, 0x0000066eu, - 0x00050084u, 0x00000006u, 0x00000685u, 0x00000684u, 0x00000160u, 0x00050080u, 0x00000006u, 0x00000686u, - 0x00000685u, 0x00000008u, 0x00050041u, 0x00000037u, 0x00000687u, 0x00000613u, 0x00000686u, 0x0004003du, - 0x00000009u, 0x00000688u, 0x00000687u, 0x0003003eu, 0x00000683u, 0x00000688u, 0x0004003du, 0x00000006u, - 0x0000068au, 0x0000066eu, 0x00050084u, 0x00000006u, 0x0000068bu, 0x0000068au, 0x00000160u, 0x00050080u, - 0x00000006u, 0x0000068cu, 0x0000068bu, 0x0000006bu, 0x00050041u, 0x00000037u, 0x0000068du, 0x00000613u, - 0x0000068cu, 0x0004003du, 0x00000009u, 0x0000068eu, 0x0000068du, 0x0003003eu, 0x00000689u, 0x0000068eu, - 0x0004003du, 0x00000006u, 0x00000690u, 0x0000037du, 0x0003003eu, 0x0000068fu, 0x00000690u, 0x000200f9u, - 0x00000691u, 0x000200f8u, 0x00000691u, 0x000400f6u, 0x00000693u, 0x00000694u, 0x00000000u, 0x000200f9u, - 0x00000695u, 0x000200f8u, 0x00000695u, 0x0004003du, 0x00000006u, 0x00000696u, 0x0000068fu, 0x0004003du, - 0x00000006u, 0x00000697u, 0x000005efu, 0x000500b0u, 0x00000042u, 0x00000698u, 0x00000696u, 0x00000697u, - 0x000400fau, 0x00000698u, 0x00000692u, 0x00000693u, 0x000200f8u, 0x00000692u, 0x0004003du, 0x00000006u, - 0x0000069bu, 0x0000068fu, 0x0003003eu, 0x0000069au, 0x0000069bu, 0x0004003du, 0x00000006u, 0x0000069du, - 0x00000588u, 0x0003003eu, 0x0000069cu, 0x0000069du, 0x00060039u, 0x00000031u, 0x0000069eu, 0x00000035u, - 0x0000069au, 0x0000069cu, 0x0003003eu, 0x00000699u, 0x0000069eu, 0x0004003du, 0x00000006u, 0x000006a0u, - 0x0000067au, 0x0004003du, 0x00000006u, 0x000006a1u, 0x0000068fu, 0x00050080u, 0x00000006u, 0x000006a2u, - 0x000006a0u, 0x000006a1u, 0x00050084u, 0x00000006u, 0x000006a3u, 0x000006a2u, 0x00000160u, 0x0003003eu, - 0x0000069fu, 0x000006a3u, 0x0004003du, 0x00000006u, 0x000006a4u, 0x0000069fu, 0x00050086u, 0x00000006u, - 0x000006a5u, 0x000006a4u, 0x00000160u, 0x0004003du, 0x00000006u, 0x000006a6u, 0x00000676u, 0x00050041u, - 0x0000001bu, 0x000006a7u, 0x00000699u, 0x00000089u, 0x0004003du, 0x00000006u, 0x000006a8u, 0x000006a7u, - 0x00050080u, 0x00000006u, 0x000006a9u, 0x000006a6u, 0x000006a8u, 0x0004003du, 0x00000006u, 0x000006aau, - 0x00000676u, 0x00050041u, 0x0000001bu, 0x000006abu, 0x00000699u, 0x00000008u, 0x0004003du, 0x00000006u, - 0x000006acu, 0x000006abu, 0x00050080u, 0x00000006u, 0x000006adu, 0x000006aau, 0x000006acu, 0x0004003du, - 0x00000006u, 0x000006aeu, 0x00000676u, 0x00050041u, 0x0000001bu, 0x000006afu, 0x00000699u, 0x0000006bu, - 0x0004003du, 0x00000006u, 0x000006b0u, 0x000006afu, 0x00050080u, 0x00000006u, 0x000006b1u, 0x000006aeu, - 0x000006b0u, 0x00060050u, 0x00000031u, 0x000006b2u, 0x000006a9u, 0x000006adu, 0x000006b1u, 0x00050041u, - 0x00000541u, 0x000006b3u, 0x00000537u, 0x000006a5u, 0x0003003eu, 0x000006b3u, 0x000006b2u, 0x0004003du, - 0x00000006u, 0x000006b4u, 0x0000067au, 0x0004003du, 0x00000006u, 0x000006b5u, 0x0000068fu, 0x00050080u, - 0x00000006u, 0x000006b6u, 0x000006b4u, 0x000006b5u, 0x00050041u, 0x0000038du, 0x000006b7u, 0x0000038cu, - 0x0000005fu, 0x0004003du, 0x00000006u, 0x000006b8u, 0x000006b7u, 0x0004007cu, 0x00000039u, 0x000006b9u, - 0x000006b8u, 0x00060041u, 0x0000054cu, 0x000006bau, 0x00000546u, 0x000006b6u, 0x0000005fu, 0x0003003eu, - 0x000006bau, 0x000006b9u, 0x00050041u, 0x0000001bu, 0x000006bdu, 0x00000699u, 0x00000089u, 0x0004003du, - 0x00000006u, 0x000006beu, 0x000006bdu, 0x0003003eu, 0x000006bcu, 0x000006beu, 0x0004003du, 0x00000006u, - 0x000006c0u, 0x00000588u, 0x0003003eu, 0x000006bfu, 0x000006c0u, 0x00060039u, 0x00000023u, 0x000006c1u, - 0x00000027u, 0x000006bcu, 0x000006bfu, 0x0003003eu, 0x000006bbu, 0x000006c1u, 0x00050041u, 0x0000001bu, - 0x000006c4u, 0x00000699u, 0x00000008u, 0x0004003du, 0x00000006u, 0x000006c5u, 0x000006c4u, 0x0003003eu, - 0x000006c3u, 0x000006c5u, 0x0004003du, 0x00000006u, 0x000006c7u, 0x00000588u, 0x0003003eu, 0x000006c6u, - 0x000006c7u, 0x00060039u, 0x00000023u, 0x000006c8u, 0x00000027u, 0x000006c3u, 0x000006c6u, 0x0003003eu, - 0x000006c2u, 0x000006c8u, 0x00050041u, 0x0000001bu, 0x000006cbu, 0x00000699u, 0x0000006bu, 0x0004003du, - 0x00000006u, 0x000006ccu, 0x000006cbu, 0x0003003eu, 0x000006cau, 0x000006ccu, 0x0004003du, 0x00000006u, - 0x000006ceu, 0x00000588u, 0x0003003eu, 0x000006cdu, 0x000006ceu, 0x00060039u, 0x00000023u, 0x000006cfu, - 0x00000027u, 0x000006cau, 0x000006cdu, 0x0003003eu, 0x000006c9u, 0x000006cfu, 0x00050041u, 0x00000037u, - 0x000006d1u, 0x000006bbu, 0x00000089u, 0x0004003du, 0x00000009u, 0x000006d2u, 0x000006d1u, 0x00050083u, - 0x00000009u, 0x000006d3u, 0x0000004au, 0x000006d2u, 0x00050041u, 0x00000037u, 0x000006d4u, 0x000006bbu, - 0x00000008u, 0x0004003du, 0x00000009u, 0x000006d5u, 0x000006d4u, 0x00050083u, 0x00000009u, 0x000006d6u, - 0x000006d3u, 0x000006d5u, 0x0004003du, 0x00000009u, 0x000006d7u, 0x0000067eu, 0x00050085u, 0x00000009u, - 0x000006d8u, 0x000006d6u, 0x000006d7u, 0x00050041u, 0x00000037u, 0x000006d9u, 0x000006bbu, 0x00000089u, - 0x0004003du, 0x00000009u, 0x000006dau, 0x000006d9u, 0x0004003du, 0x00000009u, 0x000006dbu, 0x00000683u, - 0x00050085u, 0x00000009u, 0x000006dcu, 0x000006dau, 0x000006dbu, 0x00050081u, 0x00000009u, 0x000006ddu, - 0x000006d8u, 0x000006dcu, 0x00050041u, 0x00000037u, 0x000006deu, 0x000006bbu, 0x00000008u, 0x0004003du, - 0x00000009u, 0x000006dfu, 0x000006deu, 0x0004003du, 0x00000009u, 0x000006e0u, 0x00000689u, 0x00050085u, - 0x00000009u, 0x000006e1u, 0x000006dfu, 0x000006e0u, 0x00050081u, 0x00000009u, 0x000006e2u, 0x000006ddu, - 0x000006e1u, 0x00050041u, 0x00000037u, 0x000006e3u, 0x000006c2u, 0x00000089u, 0x0004003du, 0x00000009u, - 0x000006e4u, 0x000006e3u, 0x00050083u, 0x00000009u, 0x000006e5u, 0x0000004au, 0x000006e4u, 0x00050041u, - 0x00000037u, 0x000006e6u, 0x000006c2u, 0x00000008u, 0x0004003du, 0x00000009u, 0x000006e7u, 0x000006e6u, - 0x00050083u, 0x00000009u, 0x000006e8u, 0x000006e5u, 0x000006e7u, 0x0004003du, 0x00000009u, 0x000006e9u, - 0x0000067eu, 0x00050085u, 0x00000009u, 0x000006eau, 0x000006e8u, 0x000006e9u, 0x00050041u, 0x00000037u, - 0x000006ebu, 0x000006c2u, 0x00000089u, 0x0004003du, 0x00000009u, 0x000006ecu, 0x000006ebu, 0x0004003du, - 0x00000009u, 0x000006edu, 0x00000683u, 0x00050085u, 0x00000009u, 0x000006eeu, 0x000006ecu, 0x000006edu, - 0x00050081u, 0x00000009u, 0x000006efu, 0x000006eau, 0x000006eeu, 0x00050041u, 0x00000037u, 0x000006f0u, - 0x000006c2u, 0x00000008u, 0x0004003du, 0x00000009u, 0x000006f1u, 0x000006f0u, 0x0004003du, 0x00000009u, - 0x000006f2u, 0x00000689u, 0x00050085u, 0x00000009u, 0x000006f3u, 0x000006f1u, 0x000006f2u, 0x00050081u, - 0x00000009u, 0x000006f4u, 0x000006efu, 0x000006f3u, 0x00050041u, 0x00000037u, 0x000006f5u, 0x000006c9u, - 0x00000089u, 0x0004003du, 0x00000009u, 0x000006f6u, 0x000006f5u, 0x00050083u, 0x00000009u, 0x000006f7u, - 0x0000004au, 0x000006f6u, 0x00050041u, 0x00000037u, 0x000006f8u, 0x000006c9u, 0x00000008u, 0x0004003du, - 0x00000009u, 0x000006f9u, 0x000006f8u, 0x00050083u, 0x00000009u, 0x000006fau, 0x000006f7u, 0x000006f9u, - 0x0004003du, 0x00000009u, 0x000006fbu, 0x0000067eu, 0x00050085u, 0x00000009u, 0x000006fcu, 0x000006fau, - 0x000006fbu, 0x00050041u, 0x00000037u, 0x000006fdu, 0x000006c9u, 0x00000089u, 0x0004003du, 0x00000009u, - 0x000006feu, 0x000006fdu, 0x0004003du, 0x00000009u, 0x000006ffu, 0x00000683u, 0x00050085u, 0x00000009u, - 0x00000700u, 0x000006feu, 0x000006ffu, 0x00050081u, 0x00000009u, 0x00000701u, 0x000006fcu, 0x00000700u, - 0x00050041u, 0x00000037u, 0x00000702u, 0x000006c9u, 0x00000008u, 0x0004003du, 0x00000009u, 0x00000703u, - 0x00000702u, 0x0004003du, 0x00000009u, 0x00000704u, 0x00000689u, 0x00050085u, 0x00000009u, 0x00000705u, - 0x00000703u, 0x00000704u, 0x00050081u, 0x00000009u, 0x00000706u, 0x00000701u, 0x00000705u, 0x00060050u, - 0x0000000du, 0x00000707u, 0x000006e2u, 0x000006f4u, 0x00000706u, 0x0003003eu, 0x000006d0u, 0x00000707u, - 0x0004003du, 0x00000006u, 0x00000708u, 0x0000067au, 0x0004003du, 0x00000006u, 0x00000709u, 0x0000068fu, - 0x00050080u, 0x00000006u, 0x0000070au, 0x00000708u, 0x00000709u, 0x0004003du, 0x0000000du, 0x0000070bu, - 0x000006d0u, 0x00060041u, 0x00000554u, 0x0000070cu, 0x00000551u, 0x0000070au, 0x0000005fu, 0x0003003eu, - 0x0000070cu, 0x0000070bu, 0x0004003du, 0x00000006u, 0x0000070du, 0x0000067au, 0x0004003du, 0x00000006u, - 0x0000070eu, 0x0000068fu, 0x00050080u, 0x00000006u, 0x0000070fu, 0x0000070du, 0x0000070eu, 0x00050041u, - 0x00000461u, 0x00000710u, 0x0000038cu, 0x0000004du, 0x0004003du, 0x0000000du, 0x00000711u, 0x00000710u, - 0x00060041u, 0x00000554u, 0x00000712u, 0x00000551u, 0x0000070fu, 0x00000127u, 0x0003003eu, 0x00000712u, - 0x00000711u, 0x0004003du, 0x00000006u, 0x00000713u, 0x0000067au, 0x0004003du, 0x00000006u, 0x00000714u, - 0x0000068fu, 0x00050080u, 0x00000006u, 0x00000715u, 0x00000713u, 0x00000714u, 0x00050041u, 0x00000461u, - 0x00000716u, 0x0000038cu, 0x0000003du, 0x0004003du, 0x0000000du, 0x00000717u, 0x00000716u, 0x00060041u, - 0x00000554u, 0x00000718u, 0x00000551u, 0x00000715u, 0x0000008eu, 0x0003003eu, 0x00000718u, 0x00000717u, - 0x0004003du, 0x00000006u, 0x00000719u, 0x0000067au, 0x0004003du, 0x00000006u, 0x0000071au, 0x0000068fu, - 0x00050080u, 0x00000006u, 0x0000071bu, 0x00000719u, 0x0000071au, 0x00050041u, 0x00000560u, 0x0000071cu, - 0x0000038cu, 0x000000d8u, 0x0004003du, 0x00000009u, 0x0000071du, 0x0000071cu, 0x00060041u, 0x00000563u, - 0x0000071eu, 0x00000551u, 0x0000071bu, 0x0000009au, 0x0003003eu, 0x0000071eu, 0x0000071du, 0x000200f9u, - 0x00000694u, 0x000200f8u, 0x00000694u, 0x0004003du, 0x00000006u, 0x0000071fu, 0x0000068fu, 0x00050080u, - 0x00000006u, 0x00000720u, 0x0000071fu, 0x00000007u, 0x0003003eu, 0x0000068fu, 0x00000720u, 0x000200f9u, - 0x00000691u, 0x000200f8u, 0x00000693u, 0x000200f9u, 0x00000672u, 0x000200f8u, 0x00000672u, 0x0004003du, - 0x00000006u, 0x00000721u, 0x0000066eu, 0x00050080u, 0x00000006u, 0x00000722u, 0x00000721u, 0x00000127u, - 0x0003003eu, 0x0000066eu, 0x00000722u, 0x000200f9u, 0x0000066fu, 0x000200f8u, 0x00000671u, 0x000100fdu, - 0x00010038u, 0x00050036u, 0x00000009u, 0x0000000bu, 0x00000000u, 0x0000000au, 0x000200f8u, 0x0000000cu, - 0x0004003bu, 0x00000037u, 0x00000038u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00000044u, 0x00000007u, - 0x0004003bu, 0x00000037u, 0x0000004cu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00000051u, 0x00000007u, - 0x00050041u, 0x0000003eu, 0x0000003fu, 0x0000003cu, 0x0000003du, 0x0004003du, 0x00000009u, 0x00000040u, - 0x0000003fu, 0x000500bau, 0x00000042u, 0x00000043u, 0x00000040u, 0x00000041u, 0x000300f7u, 0x00000046u, - 0x00000000u, 0x000400fau, 0x00000043u, 0x00000045u, 0x00000049u, 0x000200f8u, 0x00000045u, 0x00050041u, - 0x0000003eu, 0x00000047u, 0x0000003cu, 0x0000003du, 0x0004003du, 0x00000009u, 0x00000048u, 0x00000047u, - 0x0003003eu, 0x00000044u, 0x00000048u, 0x000200f9u, 0x00000046u, 0x000200f8u, 0x00000049u, 0x0003003eu, - 0x00000044u, 0x0000004au, 0x000200f9u, 0x00000046u, 0x000200f8u, 0x00000046u, 0x0004003du, 0x00000009u, - 0x0000004bu, 0x00000044u, 0x0003003eu, 0x00000038u, 0x0000004bu, 0x00050041u, 0x0000003eu, 0x0000004eu, - 0x0000003cu, 0x0000004du, 0x0004003du, 0x00000009u, 0x0000004fu, 0x0000004eu, 0x000500bau, 0x00000042u, - 0x00000050u, 0x0000004fu, 0x00000041u, 0x000300f7u, 0x00000053u, 0x00000000u, 0x000400fau, 0x00000050u, - 0x00000052u, 0x00000056u, 0x000200f8u, 0x00000052u, 0x00050041u, 0x0000003eu, 0x00000054u, 0x0000003cu, - 0x0000004du, 0x0004003du, 0x00000009u, 0x00000055u, 0x00000054u, 0x0003003eu, 0x00000051u, 0x00000055u, - 0x000200f9u, 0x00000053u, 0x000200f8u, 0x00000056u, 0x0003003eu, 0x00000051u, 0x00000057u, 0x000200f9u, - 0x00000053u, 0x000200f8u, 0x00000053u, 0x0004003du, 0x00000009u, 0x00000058u, 0x00000051u, 0x0003003eu, - 0x0000004cu, 0x00000058u, 0x0004003du, 0x00000009u, 0x00000059u, 0x0000004cu, 0x0004003du, 0x00000009u, - 0x0000005au, 0x00000038u, 0x00050085u, 0x00000009u, 0x0000005bu, 0x00000059u, 0x0000005au, 0x000200feu, - 0x0000005bu, 0x00010038u, 0x00050036u, 0x0000000fu, 0x00000019u, 0x00000000u, 0x00000015u, 0x00030037u, - 0x0000000eu, 0x00000016u, 0x00030037u, 0x00000012u, 0x00000017u, 0x00030037u, 0x00000014u, 0x00000018u, - 0x000200f8u, 0x0000001au, 0x0004003bu, 0x0000000eu, 0x0000005eu, 0x00000007u, 0x0004003bu, 0x00000037u, - 0x0000006au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000006eu, 0x00000007u, 0x0004003bu, 0x00000037u, - 0x00000078u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00000085u, 0x00000007u, 0x0004003bu, 0x00000037u, - 0x00000088u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00000094u, 0x00000007u, 0x0004003bu, 0x00000037u, - 0x000000a6u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000000aau, 0x00000007u, 0x0004003bu, 0x00000037u, - 0x000000b1u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000000b4u, 0x00000007u, 0x0004003bu, 0x00000037u, - 0x000000b8u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000000bcu, 0x00000007u, 0x0004003bu, 0x00000037u, - 0x000000c0u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000000c4u, 0x00000007u, 0x0004003bu, 0x00000037u, - 0x000000f6u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000000f9u, 0x00000007u, 0x0004003bu, 0x00000029u, - 0x00000101u, 0x00000007u, 0x0004003bu, 0x00000029u, 0x00000106u, 0x00000007u, 0x0004003bu, 0x00000029u, - 0x00000123u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000012cu, 0x00000007u, 0x0004003bu, 0x00000037u, - 0x00000134u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00000142u, 0x00000007u, 0x0004003bu, 0x00000037u, - 0x00000145u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00000150u, 0x00000007u, 0x00050041u, 0x00000060u, - 0x00000061u, 0x00000017u, 0x0000005fu, 0x0004003du, 0x00000010u, 0x00000062u, 0x00000061u, 0x0004003du, - 0x0000000du, 0x00000063u, 0x00000016u, 0x00050051u, 0x00000009u, 0x00000064u, 0x00000063u, 0x00000000u, - 0x00050051u, 0x00000009u, 0x00000065u, 0x00000063u, 0x00000001u, 0x00050051u, 0x00000009u, 0x00000066u, - 0x00000063u, 0x00000002u, 0x00070050u, 0x0000000fu, 0x00000067u, 0x00000064u, 0x00000065u, 0x00000066u, - 0x0000004au, 0x00050091u, 0x0000000fu, 0x00000068u, 0x00000062u, 0x00000067u, 0x0008004fu, 0x0000000du, - 0x00000069u, 0x00000068u, 0x00000068u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000005eu, - 0x00000069u, 0x00050041u, 0x00000037u, 0x0000006cu, 0x0000005eu, 0x0000006bu, 0x0004003du, 0x00000009u, - 0x0000006du, 0x0000006cu, 0x0003003eu, 0x0000006au, 0x0000006du, 0x0004003du, 0x0000000du, 0x0000006fu, - 0x0000005eu, 0x0006000cu, 0x00000009u, 0x00000070u, 0x00000001u, 0x00000042u, 0x0000006fu, 0x0003003eu, - 0x0000006eu, 0x00000070u, 0x0004003du, 0x00000009u, 0x00000071u, 0x0000006eu, 0x000500b8u, 0x00000042u, - 0x00000073u, 0x00000071u, 0x00000072u, 0x000300f7u, 0x00000075u, 0x00000000u, 0x000400fau, 0x00000073u, - 0x00000074u, 0x00000075u, 0x000200f8u, 0x00000074u, 0x000200feu, 0x00000076u, 0x000200f8u, 0x00000075u, - 0x0003003eu, 0x00000078u, 0x00000079u, 0x00050041u, 0x00000037u, 0x0000007bu, 0x00000018u, 0x0000007au, - 0x0004003du, 0x00000009u, 0x0000007cu, 0x0000007bu, 0x0004003du, 0x00000009u, 0x0000007du, 0x00000078u, - 0x000500bcu, 0x00000042u, 0x0000007eu, 0x0000007cu, 0x0000007du, 0x0004003du, 0x00000009u, 0x0000007fu, - 0x0000006au, 0x000500b8u, 0x00000042u, 0x00000081u, 0x0000007fu, 0x00000080u, 0x000500a7u, 0x00000042u, - 0x00000082u, 0x0000007eu, 0x00000081u, 0x000300f7u, 0x00000084u, 0x00000000u, 0x000400fau, 0x00000082u, - 0x00000083u, 0x00000084u, 0x000200f8u, 0x00000083u, 0x00050041u, 0x00000037u, 0x00000086u, 0x00000018u, - 0x0000003du, 0x0004003du, 0x00000009u, 0x00000087u, 0x00000086u, 0x0003003eu, 0x00000085u, 0x00000087u, - 0x00050041u, 0x00000037u, 0x0000008au, 0x0000005eu, 0x00000089u, 0x0004003du, 0x00000009u, 0x0000008bu, - 0x0000008au, 0x0004003du, 0x00000009u, 0x0000008cu, 0x00000085u, 0x00050085u, 0x00000009u, 0x0000008du, - 0x0000008bu, 0x0000008cu, 0x00050041u, 0x00000037u, 0x0000008fu, 0x00000018u, 0x0000008eu, 0x0004003du, - 0x00000009u, 0x00000090u, 0x0000008fu, 0x00050085u, 0x00000009u, 0x00000092u, 0x00000090u, 0x00000091u, - 0x00050088u, 0x00000009u, 0x00000093u, 0x0000008du, 0x00000092u, 0x0003003eu, 0x00000088u, 0x00000093u, - 0x00050041u, 0x00000037u, 0x00000095u, 0x0000005eu, 0x00000008u, 0x0004003du, 0x00000009u, 0x00000096u, - 0x00000095u, 0x0004007fu, 0x00000009u, 0x00000097u, 0x00000096u, 0x0004003du, 0x00000009u, 0x00000098u, - 0x00000085u, 0x00050085u, 0x00000009u, 0x00000099u, 0x00000097u, 0x00000098u, 0x00050041u, 0x00000037u, - 0x0000009bu, 0x00000018u, 0x0000009au, 0x0004003du, 0x00000009u, 0x0000009cu, 0x0000009bu, 0x00050085u, - 0x00000009u, 0x0000009du, 0x0000009cu, 0x00000091u, 0x00050088u, 0x00000009u, 0x0000009eu, 0x00000099u, - 0x0000009du, 0x0003003eu, 0x00000094u, 0x0000009eu, 0x0004003du, 0x00000009u, 0x0000009fu, 0x00000088u, - 0x00050085u, 0x00000009u, 0x000000a1u, 0x0000009fu, 0x000000a0u, 0x0004003du, 0x00000009u, 0x000000a2u, - 0x00000094u, 0x00050085u, 0x00000009u, 0x000000a3u, 0x000000a2u, 0x000000a0u, 0x00070050u, 0x0000000fu, - 0x000000a4u, 0x000000a1u, 0x000000a3u, 0x0000004au, 0x0000004au, 0x000200feu, 0x000000a4u, 0x000200f8u, - 0x00000084u, 0x0004003du, 0x0000000du, 0x000000a7u, 0x0000005eu, 0x0007004fu, 0x00000023u, 0x000000a8u, - 0x000000a7u, 0x000000a7u, 0x00000000u, 0x00000001u, 0x0006000cu, 0x00000009u, 0x000000a9u, 0x00000001u, - 0x00000042u, 0x000000a8u, 0x0003003eu, 0x000000a6u, 0x000000a9u, 0x00050041u, 0x00000037u, 0x000000abu, - 0x0000005eu, 0x0000006bu, 0x0004003du, 0x00000009u, 0x000000acu, 0x000000abu, 0x0004003du, 0x00000009u, - 0x000000adu, 0x0000006eu, 0x00050088u, 0x00000009u, 0x000000aeu, 0x000000acu, 0x000000adu, 0x0008000cu, - 0x00000009u, 0x000000b0u, 0x00000001u, 0x0000002bu, 0x000000aeu, 0x000000afu, 0x0000004au, 0x0003003eu, - 0x000000aau, 0x000000b0u, 0x0004003du, 0x00000009u, 0x000000b2u, 0x000000aau, 0x0006000cu, 0x00000009u, - 0x000000b3u, 0x00000001u, 0x00000011u, 0x000000b2u, 0x0003003eu, 0x000000b1u, 0x000000b3u, 0x0004003du, - 0x00000009u, 0x000000b5u, 0x000000b1u, 0x0004003du, 0x00000009u, 0x000000b6u, 0x000000b1u, 0x00050085u, - 0x00000009u, 0x000000b7u, 0x000000b5u, 0x000000b6u, 0x0003003eu, 0x000000b4u, 0x000000b7u, 0x0004003du, - 0x00000009u, 0x000000b9u, 0x000000b4u, 0x0004003du, 0x00000009u, 0x000000bau, 0x000000b1u, 0x00050085u, - 0x00000009u, 0x000000bbu, 0x000000b9u, 0x000000bau, 0x0003003eu, 0x000000b8u, 0x000000bbu, 0x0004003du, - 0x00000009u, 0x000000bdu, 0x000000b4u, 0x0004003du, 0x00000009u, 0x000000beu, 0x000000b4u, 0x00050085u, - 0x00000009u, 0x000000bfu, 0x000000bdu, 0x000000beu, 0x0003003eu, 0x000000bcu, 0x000000bfu, 0x0004003du, - 0x00000009u, 0x000000c1u, 0x000000bcu, 0x0004003du, 0x00000009u, 0x000000c2u, 0x000000b1u, 0x00050085u, - 0x00000009u, 0x000000c3u, 0x000000c1u, 0x000000c2u, 0x0003003eu, 0x000000c0u, 0x000000c3u, 0x00050041u, - 0x00000037u, 0x000000c5u, 0x00000018u, 0x0000004du, 0x0004003du, 0x00000009u, 0x000000c6u, 0x000000c5u, - 0x00050041u, 0x00000037u, 0x000000c7u, 0x00000018u, 0x0000003du, 0x0004003du, 0x00000009u, 0x000000c8u, - 0x000000c7u, 0x0004003du, 0x00000009u, 0x000000c9u, 0x000000b1u, 0x00050085u, 0x00000009u, 0x000000cau, - 0x000000c8u, 0x000000c9u, 0x00050081u, 0x00000009u, 0x000000cbu, 0x000000c6u, 0x000000cau, 0x00050041u, - 0x00000037u, 0x000000cdu, 0x00000018u, 0x000000ccu, 0x0004003du, 0x00000009u, 0x000000ceu, 0x000000cdu, - 0x0004003du, 0x00000009u, 0x000000cfu, 0x000000b4u, 0x00050085u, 0x00000009u, 0x000000d0u, 0x000000ceu, - 0x000000cfu, 0x00050081u, 0x00000009u, 0x000000d1u, 0x000000cbu, 0x000000d0u, 0x00050041u, 0x00000037u, - 0x000000d3u, 0x00000018u, 0x000000d2u, 0x0004003du, 0x00000009u, 0x000000d4u, 0x000000d3u, 0x0004003du, - 0x00000009u, 0x000000d5u, 0x000000b8u, 0x00050085u, 0x00000009u, 0x000000d6u, 0x000000d4u, 0x000000d5u, - 0x00050081u, 0x00000009u, 0x000000d7u, 0x000000d1u, 0x000000d6u, 0x00050041u, 0x00000037u, 0x000000d9u, - 0x00000018u, 0x000000d8u, 0x0004003du, 0x00000009u, 0x000000dau, 0x000000d9u, 0x0004003du, 0x00000009u, - 0x000000dbu, 0x000000bcu, 0x00050085u, 0x00000009u, 0x000000dcu, 0x000000dau, 0x000000dbu, 0x00050081u, - 0x00000009u, 0x000000ddu, 0x000000d7u, 0x000000dcu, 0x00050041u, 0x00000037u, 0x000000dfu, 0x00000018u, - 0x000000deu, 0x0004003du, 0x00000009u, 0x000000e0u, 0x000000dfu, 0x0004003du, 0x00000009u, 0x000000e1u, - 0x000000c0u, 0x00050085u, 0x00000009u, 0x000000e2u, 0x000000e0u, 0x000000e1u, 0x00050081u, 0x00000009u, - 0x000000e3u, 0x000000ddu, 0x000000e2u, 0x0003003eu, 0x000000c4u, 0x000000e3u, 0x0004003du, 0x00000009u, - 0x000000e4u, 0x000000b1u, 0x00050041u, 0x00000037u, 0x000000e5u, 0x00000018u, 0x0000007au, 0x0004003du, - 0x00000009u, 0x000000e6u, 0x000000e5u, 0x000500bau, 0x00000042u, 0x000000e7u, 0x000000e4u, 0x000000e6u, - 0x000300f7u, 0x000000e9u, 0x00000000u, 0x000400fau, 0x000000e7u, 0x000000e8u, 0x000000e9u, 0x000200f8u, - 0x000000e8u, 0x00050041u, 0x00000037u, 0x000000ebu, 0x00000018u, 0x000000eau, 0x0004003du, 0x00000009u, - 0x000000ecu, 0x000000ebu, 0x0004003du, 0x00000009u, 0x000000edu, 0x000000b1u, 0x00050041u, 0x00000037u, - 0x000000eeu, 0x00000018u, 0x0000007au, 0x0004003du, 0x00000009u, 0x000000efu, 0x000000eeu, 0x00050083u, - 0x00000009u, 0x000000f0u, 0x000000edu, 0x000000efu, 0x00050041u, 0x00000037u, 0x000000f2u, 0x00000018u, - 0x000000f1u, 0x0004003du, 0x00000009u, 0x000000f3u, 0x000000f2u, 0x00050085u, 0x00000009u, 0x000000f4u, - 0x000000f0u, 0x000000f3u, 0x00050081u, 0x00000009u, 0x000000f5u, 0x000000ecu, 0x000000f4u, 0x0003003eu, - 0x000000c4u, 0x000000f5u, 0x000200f9u, 0x000000e9u, 0x000200f8u, 0x000000e9u, 0x0004003du, 0x00000009u, - 0x000000f7u, 0x000000a6u, 0x000500bau, 0x00000042u, 0x000000f8u, 0x000000f7u, 0x00000072u, 0x000300f7u, - 0x000000fbu, 0x00000000u, 0x000400fau, 0x000000f8u, 0x000000fau, 0x000000ffu, 0x000200f8u, 0x000000fau, - 0x0004003du, 0x00000009u, 0x000000fcu, 0x000000c4u, 0x0004003du, 0x00000009u, 0x000000fdu, 0x000000a6u, - 0x00050088u, 0x00000009u, 0x000000feu, 0x000000fcu, 0x000000fdu, 0x0003003eu, 0x000000f9u, 0x000000feu, - 0x000200f9u, 0x000000fbu, 0x000200f8u, 0x000000ffu, 0x0003003eu, 0x000000f9u, 0x00000041u, 0x000200f9u, - 0x000000fbu, 0x000200f8u, 0x000000fbu, 0x0004003du, 0x00000009u, 0x00000100u, 0x000000f9u, 0x0003003eu, - 0x000000f6u, 0x00000100u, 0x0004003du, 0x00000009u, 0x00000102u, 0x000000f6u, 0x0004003du, 0x0000000du, - 0x00000103u, 0x0000005eu, 0x0007004fu, 0x00000023u, 0x00000104u, 0x00000103u, 0x00000103u, 0x00000000u, - 0x00000001u, 0x0005008eu, 0x00000023u, 0x00000105u, 0x00000104u, 0x00000102u, 0x0003003eu, 0x00000101u, - 0x00000105u, 0x00050041u, 0x00000037u, 0x00000108u, 0x00000018u, 0x00000107u, 0x0004003du, 0x00000009u, - 0x00000109u, 0x00000108u, 0x00050041u, 0x00000037u, 0x0000010au, 0x00000101u, 0x00000089u, 0x0004003du, - 0x00000009u, 0x0000010bu, 0x0000010au, 0x00050085u, 0x00000009u, 0x0000010cu, 0x00000109u, 0x0000010bu, - 0x00050041u, 0x00000037u, 0x0000010eu, 0x00000018u, 0x0000010du, 0x0004003du, 0x00000009u, 0x0000010fu, - 0x0000010eu, 0x00050041u, 0x00000037u, 0x00000110u, 0x00000101u, 0x00000008u, 0x0004003du, 0x00000009u, - 0x00000111u, 0x00000110u, 0x00050085u, 0x00000009u, 0x00000112u, 0x0000010fu, 0x00000111u, 0x00050081u, - 0x00000009u, 0x00000113u, 0x0000010cu, 0x00000112u, 0x00050041u, 0x00000037u, 0x00000114u, 0x00000106u, - 0x00000089u, 0x0003003eu, 0x00000114u, 0x00000113u, 0x00050041u, 0x00000037u, 0x00000116u, 0x00000018u, - 0x00000115u, 0x0004003du, 0x00000009u, 0x00000117u, 0x00000116u, 0x00050041u, 0x00000037u, 0x00000118u, - 0x00000101u, 0x00000089u, 0x0004003du, 0x00000009u, 0x00000119u, 0x00000118u, 0x00050085u, 0x00000009u, - 0x0000011au, 0x00000117u, 0x00000119u, 0x00050041u, 0x00000037u, 0x0000011cu, 0x00000018u, 0x0000011bu, - 0x0004003du, 0x00000009u, 0x0000011du, 0x0000011cu, 0x00050041u, 0x00000037u, 0x0000011eu, 0x00000101u, - 0x00000008u, 0x0004003du, 0x00000009u, 0x0000011fu, 0x0000011eu, 0x00050085u, 0x00000009u, 0x00000120u, - 0x0000011du, 0x0000011fu, 0x00050081u, 0x00000009u, 0x00000121u, 0x0000011au, 0x00000120u, 0x00050041u, - 0x00000037u, 0x00000122u, 0x00000106u, 0x00000008u, 0x0003003eu, 0x00000122u, 0x00000121u, 0x0004003du, - 0x00000023u, 0x00000124u, 0x00000106u, 0x00050041u, 0x00000037u, 0x00000125u, 0x00000018u, 0x0000005fu, - 0x0004003du, 0x00000009u, 0x00000126u, 0x00000125u, 0x00050041u, 0x00000037u, 0x00000128u, 0x00000018u, - 0x00000127u, 0x0004003du, 0x00000009u, 0x00000129u, 0x00000128u, 0x00050050u, 0x00000023u, 0x0000012au, - 0x00000126u, 0x00000129u, 0x00050081u, 0x00000023u, 0x0000012bu, 0x00000124u, 0x0000012au, 0x0003003eu, - 0x00000123u, 0x0000012bu, 0x00050041u, 0x00000037u, 0x0000012du, 0x00000123u, 0x00000089u, 0x0004003du, - 0x00000009u, 0x0000012eu, 0x0000012du, 0x00050085u, 0x00000009u, 0x0000012fu, 0x00000057u, 0x0000012eu, - 0x00050041u, 0x00000037u, 0x00000130u, 0x00000018u, 0x0000008eu, 0x0004003du, 0x00000009u, 0x00000131u, - 0x00000130u, 0x00050088u, 0x00000009u, 0x00000132u, 0x0000012fu, 0x00000131u, 0x00050083u, 0x00000009u, - 0x00000133u, 0x00000132u, 0x0000004au, 0x0003003eu, 0x0000012cu, 0x00000133u, 0x00050041u, 0x00000037u, - 0x00000135u, 0x00000123u, 0x00000008u, 0x0004003du, 0x00000009u, 0x00000136u, 0x00000135u, 0x00050085u, - 0x00000009u, 0x00000137u, 0x00000057u, 0x00000136u, 0x00050041u, 0x00000037u, 0x00000138u, 0x00000018u, - 0x0000009au, 0x0004003du, 0x00000009u, 0x00000139u, 0x00000138u, 0x00050088u, 0x00000009u, 0x0000013au, - 0x00000137u, 0x00000139u, 0x00050083u, 0x00000009u, 0x0000013bu, 0x0000004au, 0x0000013au, 0x0003003eu, - 0x00000134u, 0x0000013bu, 0x00050041u, 0x00000037u, 0x0000013cu, 0x00000018u, 0x0000007au, 0x0004003du, - 0x00000009u, 0x0000013du, 0x0000013cu, 0x0004003du, 0x00000009u, 0x0000013eu, 0x00000078u, 0x000500bau, - 0x00000042u, 0x0000013fu, 0x0000013du, 0x0000013eu, 0x000300f7u, 0x00000141u, 0x00000000u, 0x000400fau, - 0x0000013fu, 0x00000140u, 0x0000014eu, 0x000200f8u, 0x00000140u, 0x0004003du, 0x00000009u, 0x00000143u, - 0x0000006au, 0x000500beu, 0x00000042u, 0x00000144u, 0x00000143u, 0x00000041u, 0x000300f7u, 0x00000147u, - 0x00000000u, 0x000400fau, 0x00000144u, 0x00000146u, 0x00000149u, 0x000200f8u, 0x00000146u, 0x0004003du, - 0x00000009u, 0x00000148u, 0x0000006eu, 0x0003003eu, 0x00000145u, 0x00000148u, 0x000200f9u, 0x00000147u, - 0x000200f8u, 0x00000149u, 0x00050041u, 0x00000037u, 0x0000014bu, 0x00000018u, 0x0000014au, 0x0004003du, - 0x00000009u, 0x0000014cu, 0x0000014bu, 0x0003003eu, 0x00000145u, 0x0000014cu, 0x000200f9u, 0x00000147u, - 0x000200f8u, 0x00000147u, 0x0004003du, 0x00000009u, 0x0000014du, 0x00000145u, 0x0003003eu, 0x00000142u, - 0x0000014du, 0x000200f9u, 0x00000141u, 0x000200f8u, 0x0000014eu, 0x0004003du, 0x00000009u, 0x0000014fu, - 0x0000006au, 0x0003003eu, 0x00000142u, 0x0000014fu, 0x000200f9u, 0x00000141u, 0x000200f8u, 0x00000141u, - 0x0004003du, 0x00000009u, 0x00000151u, 0x00000142u, 0x00050041u, 0x00000037u, 0x00000152u, 0x00000018u, - 0x0000014au, 0x0004003du, 0x00000009u, 0x00000153u, 0x00000152u, 0x00050088u, 0x00000009u, 0x00000154u, - 0x00000151u, 0x00000153u, 0x0008000cu, 0x00000009u, 0x00000155u, 0x00000001u, 0x0000002bu, 0x00000154u, - 0x00000041u, 0x0000004au, 0x0003003eu, 0x00000150u, 0x00000155u, 0x0004003du, 0x00000009u, 0x00000156u, - 0x0000012cu, 0x0004003du, 0x00000009u, 0x00000157u, 0x00000134u, 0x0004003du, 0x00000009u, 0x00000158u, - 0x00000150u, 0x00070050u, 0x0000000fu, 0x00000159u, 0x00000156u, 0x00000157u, 0x00000158u, 0x0000004au, - 0x000200feu, 0x00000159u, 0x00010038u, 0x00050036u, 0x00000006u, 0x0000001eu, 0x00000000u, 0x0000001cu, - 0x00030037u, 0x0000001bu, 0x0000001du, 0x000200f8u, 0x0000001fu, 0x0004003du, 0x00000006u, 0x0000015cu, - 0x0000001du, 0x000500aau, 0x00000042u, 0x0000015du, 0x0000015cu, 0x00000089u, 0x000300f7u, 0x0000015fu, - 0x00000000u, 0x000400fau, 0x0000015du, 0x0000015eu, 0x0000015fu, 0x000200f8u, 0x0000015eu, 0x000200feu, - 0x00000160u, 0x000200f8u, 0x0000015fu, 0x0004003du, 0x00000006u, 0x00000162u, 0x0000001du, 0x000500aau, - 0x00000042u, 0x00000163u, 0x00000162u, 0x00000008u, 0x000300f7u, 0x00000165u, 0x00000000u, 0x000400fau, - 0x00000163u, 0x00000164u, 0x00000165u, 0x000200f8u, 0x00000164u, 0x000200feu, 0x00000166u, 0x000200f8u, - 0x00000165u, 0x0004003du, 0x00000006u, 0x00000168u, 0x0000001du, 0x000500aau, 0x00000042u, 0x00000169u, - 0x00000168u, 0x0000006bu, 0x000300f7u, 0x0000016bu, 0x00000000u, 0x000400fau, 0x00000169u, 0x0000016au, - 0x0000016bu, 0x000200f8u, 0x0000016au, 0x000200feu, 0x0000016cu, 0x000200f8u, 0x0000016bu, 0x000200feu, - 0x0000016eu, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000021u, 0x00000000u, 0x0000001cu, 0x00030037u, - 0x0000001bu, 0x00000020u, 0x000200f8u, 0x00000022u, 0x0004003du, 0x00000006u, 0x00000171u, 0x00000020u, - 0x000500aau, 0x00000042u, 0x00000172u, 0x00000171u, 0x00000089u, 0x000300f7u, 0x00000174u, 0x00000000u, - 0x000400fau, 0x00000172u, 0x00000173u, 0x00000174u, 0x000200f8u, 0x00000173u, 0x000200feu, 0x00000008u, - 0x000200f8u, 0x00000174u, 0x0004003du, 0x00000006u, 0x00000176u, 0x00000020u, 0x000500aau, 0x00000042u, - 0x00000177u, 0x00000176u, 0x00000008u, 0x000300f7u, 0x00000179u, 0x00000000u, 0x000400fau, 0x00000177u, - 0x00000178u, 0x00000179u, 0x000200f8u, 0x00000178u, 0x000200feu, 0x0000017au, 0x000200f8u, 0x00000179u, - 0x0004003du, 0x00000006u, 0x0000017cu, 0x00000020u, 0x000500aau, 0x00000042u, 0x0000017du, 0x0000017cu, - 0x0000006bu, 0x000300f7u, 0x0000017fu, 0x00000000u, 0x000400fau, 0x0000017du, 0x0000017eu, 0x0000017fu, - 0x000200f8u, 0x0000017eu, 0x000200feu, 0x00000180u, 0x000200f8u, 0x0000017fu, 0x000200feu, 0x00000182u, - 0x00010038u, 0x00050036u, 0x00000023u, 0x00000027u, 0x00000000u, 0x00000024u, 0x00030037u, 0x0000001bu, - 0x00000025u, 0x00030037u, 0x0000001bu, 0x00000026u, 0x000200f8u, 0x00000028u, 0x0004003bu, 0x0000019du, - 0x0000019eu, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x000001b6u, 0x00000007u, 0x0004003bu, 0x0000001bu, - 0x000001b7u, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x000001e0u, 0x00000007u, 0x0004003bu, 0x0000001bu, - 0x000001e1u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000185u, 0x00000026u, 0x000500aau, 0x00000042u, - 0x00000186u, 0x00000185u, 0x00000089u, 0x000300f7u, 0x00000188u, 0x00000000u, 0x000400fau, 0x00000186u, - 0x00000187u, 0x00000197u, 0x000200f8u, 0x00000187u, 0x0004003du, 0x00000006u, 0x00000189u, 0x00000025u, - 0x000500aau, 0x00000042u, 0x0000018au, 0x00000189u, 0x00000089u, 0x000300f7u, 0x0000018cu, 0x00000000u, - 0x000400fau, 0x0000018au, 0x0000018bu, 0x0000018cu, 0x000200f8u, 0x0000018bu, 0x000200feu, 0x0000018du, - 0x000200f8u, 0x0000018cu, 0x0004003du, 0x00000006u, 0x0000018fu, 0x00000025u, 0x000500aau, 0x00000042u, - 0x00000190u, 0x0000018fu, 0x00000008u, 0x000300f7u, 0x00000192u, 0x00000000u, 0x000400fau, 0x00000190u, - 0x00000191u, 0x00000192u, 0x000200f8u, 0x00000191u, 0x000200feu, 0x00000193u, 0x000200f8u, 0x00000192u, - 0x000200feu, 0x00000195u, 0x000200f8u, 0x00000197u, 0x0004003du, 0x00000006u, 0x00000198u, 0x00000026u, - 0x000500aau, 0x00000042u, 0x00000199u, 0x00000198u, 0x00000008u, 0x000300f7u, 0x0000019bu, 0x00000000u, - 0x000400fau, 0x00000199u, 0x0000019au, 0x000001acu, 0x000200f8u, 0x0000019au, 0x00050041u, 0x00000029u, - 0x0000019fu, 0x0000019eu, 0x0000005fu, 0x0003003eu, 0x0000019fu, 0x0000018du, 0x00050041u, 0x00000029u, - 0x000001a0u, 0x0000019eu, 0x00000127u, 0x0003003eu, 0x000001a0u, 0x00000193u, 0x00050041u, 0x00000029u, - 0x000001a1u, 0x0000019eu, 0x0000008eu, 0x0003003eu, 0x000001a1u, 0x00000195u, 0x00050041u, 0x00000029u, - 0x000001a3u, 0x0000019eu, 0x0000009au, 0x0003003eu, 0x000001a3u, 0x000001a2u, 0x00050041u, 0x00000029u, - 0x000001a5u, 0x0000019eu, 0x0000004du, 0x0003003eu, 0x000001a5u, 0x000001a4u, 0x00050041u, 0x00000029u, - 0x000001a7u, 0x0000019eu, 0x0000003du, 0x0003003eu, 0x000001a7u, 0x000001a6u, 0x0004003du, 0x00000006u, - 0x000001a8u, 0x00000025u, 0x00050041u, 0x00000029u, 0x000001a9u, 0x0000019eu, 0x000001a8u, 0x0004003du, - 0x00000023u, 0x000001aau, 0x000001a9u, 0x000200feu, 0x000001aau, 0x000200f8u, 0x000001acu, 0x0004003du, - 0x00000006u, 0x000001adu, 0x00000026u, 0x000500aau, 0x00000042u, 0x000001aeu, 0x000001adu, 0x0000006bu, - 0x000300f7u, 0x000001b0u, 0x00000000u, 0x000400fau, 0x000001aeu, 0x000001afu, 0x000001dbu, 0x000200f8u, - 0x000001afu, 0x0004003du, 0x00000006u, 0x000001b1u, 0x00000025u, 0x000500b0u, 0x00000042u, 0x000001b3u, - 0x000001b1u, 0x000001b2u, 0x000300f7u, 0x000001b5u, 0x00000000u, 0x000400fau, 0x000001b3u, 0x000001b4u, - 0x000001b9u, 0x000200f8u, 0x000001b4u, 0x0003003eu, 0x000001b6u, 0x00000089u, 0x0004003du, 0x00000006u, - 0x000001b8u, 0x00000025u, 0x0003003eu, 0x000001b7u, 0x000001b8u, 0x000200f9u, 0x000001b5u, 0x000200f8u, - 0x000001b9u, 0x0004003du, 0x00000006u, 0x000001bau, 0x00000025u, 0x000500b0u, 0x00000042u, 0x000001bcu, - 0x000001bau, 0x000001bbu, 0x000300f7u, 0x000001beu, 0x00000000u, 0x000400fau, 0x000001bcu, 0x000001bdu, - 0x000001c1u, 0x000200f8u, 0x000001bdu, 0x0003003eu, 0x000001b6u, 0x00000008u, 0x0004003du, 0x00000006u, - 0x000001bfu, 0x00000025u, 0x00050082u, 0x00000006u, 0x000001c0u, 0x000001bfu, 0x000001b2u, 0x0003003eu, - 0x000001b7u, 0x000001c0u, 0x000200f9u, 0x000001beu, 0x000200f8u, 0x000001c1u, 0x0004003du, 0x00000006u, - 0x000001c2u, 0x00000025u, 0x000500b0u, 0x00000042u, 0x000001c4u, 0x000001c2u, 0x000001c3u, 0x000300f7u, - 0x000001c6u, 0x00000000u, 0x000400fau, 0x000001c4u, 0x000001c5u, 0x000001c9u, 0x000200f8u, 0x000001c5u, - 0x0003003eu, 0x000001b6u, 0x0000006bu, 0x0004003du, 0x00000006u, 0x000001c7u, 0x00000025u, 0x00050082u, - 0x00000006u, 0x000001c8u, 0x000001c7u, 0x000001bbu, 0x0003003eu, 0x000001b7u, 0x000001c8u, 0x000200f9u, - 0x000001c6u, 0x000200f8u, 0x000001c9u, 0x0004003du, 0x00000006u, 0x000001cau, 0x00000025u, 0x000500b0u, - 0x00000042u, 0x000001ccu, 0x000001cau, 0x000001cbu, 0x000300f7u, 0x000001ceu, 0x00000000u, 0x000400fau, - 0x000001ccu, 0x000001cdu, 0x000001d1u, 0x000200f8u, 0x000001cdu, 0x0003003eu, 0x000001b6u, 0x00000160u, - 0x0004003du, 0x00000006u, 0x000001cfu, 0x00000025u, 0x00050082u, 0x00000006u, 0x000001d0u, 0x000001cfu, - 0x000001c3u, 0x0003003eu, 0x000001b7u, 0x000001d0u, 0x000200f9u, 0x000001ceu, 0x000200f8u, 0x000001d1u, - 0x0003003eu, 0x000001b6u, 0x0000017au, 0x0003003eu, 0x000001b7u, 0x00000089u, 0x000200f9u, 0x000001ceu, - 0x000200f8u, 0x000001ceu, 0x000200f9u, 0x000001c6u, 0x000200f8u, 0x000001c6u, 0x000200f9u, 0x000001beu, - 0x000200f8u, 0x000001beu, 0x000200f9u, 0x000001b5u, 0x000200f8u, 0x000001b5u, 0x0004003du, 0x00000006u, - 0x000001d2u, 0x000001b7u, 0x00040070u, 0x00000009u, 0x000001d3u, 0x000001d2u, 0x00050088u, 0x00000009u, - 0x000001d5u, 0x000001d3u, 0x000001d4u, 0x0004003du, 0x00000006u, 0x000001d6u, 0x000001b6u, 0x00040070u, - 0x00000009u, 0x000001d7u, 0x000001d6u, 0x00050088u, 0x00000009u, 0x000001d8u, 0x000001d7u, 0x000001d4u, - 0x00050050u, 0x00000023u, 0x000001d9u, 0x000001d5u, 0x000001d8u, 0x000200feu, 0x000001d9u, 0x000200f8u, - 0x000001dbu, 0x0004003du, 0x00000006u, 0x000001dcu, 0x00000025u, 0x000500b0u, 0x00000042u, 0x000001ddu, - 0x000001dcu, 0x000001bbu, 0x000300f7u, 0x000001dfu, 0x00000000u, 0x000400fau, 0x000001ddu, 0x000001deu, - 0x000001e3u, 0x000200f8u, 0x000001deu, 0x0003003eu, 0x000001e0u, 0x00000089u, 0x0004003du, 0x00000006u, - 0x000001e2u, 0x00000025u, 0x0003003eu, 0x000001e1u, 0x000001e2u, 0x000200f9u, 0x000001dfu, 0x000200f8u, - 0x000001e3u, 0x0004003du, 0x00000006u, 0x000001e4u, 0x00000025u, 0x000500b0u, 0x00000042u, 0x000001e6u, - 0x000001e4u, 0x000001e5u, 0x000300f7u, 0x000001e8u, 0x00000000u, 0x000400fau, 0x000001e6u, 0x000001e7u, - 0x000001ebu, 0x000200f8u, 0x000001e7u, 0x0003003eu, 0x000001e0u, 0x00000008u, 0x0004003du, 0x00000006u, - 0x000001e9u, 0x00000025u, 0x00050082u, 0x00000006u, 0x000001eau, 0x000001e9u, 0x000001bbu, 0x0003003eu, - 0x000001e1u, 0x000001eau, 0x000200f9u, 0x000001e8u, 0x000200f8u, 0x000001ebu, 0x0004003du, 0x00000006u, - 0x000001ecu, 0x00000025u, 0x000500b0u, 0x00000042u, 0x000001eeu, 0x000001ecu, 0x000001edu, 0x000300f7u, - 0x000001f0u, 0x00000000u, 0x000400fau, 0x000001eeu, 0x000001efu, 0x000001f3u, 0x000200f8u, 0x000001efu, - 0x0003003eu, 0x000001e0u, 0x0000006bu, 0x0004003du, 0x00000006u, 0x000001f1u, 0x00000025u, 0x00050082u, - 0x00000006u, 0x000001f2u, 0x000001f1u, 0x000001e5u, 0x0003003eu, 0x000001e1u, 0x000001f2u, 0x000200f9u, - 0x000001f0u, 0x000200f8u, 0x000001f3u, 0x0004003du, 0x00000006u, 0x000001f4u, 0x00000025u, 0x000500b0u, - 0x00000042u, 0x000001f6u, 0x000001f4u, 0x000001f5u, 0x000300f7u, 0x000001f8u, 0x00000000u, 0x000400fau, - 0x000001f6u, 0x000001f7u, 0x000001fbu, 0x000200f8u, 0x000001f7u, 0x0003003eu, 0x000001e0u, 0x00000160u, - 0x0004003du, 0x00000006u, 0x000001f9u, 0x00000025u, 0x00050082u, 0x00000006u, 0x000001fau, 0x000001f9u, - 0x000001edu, 0x0003003eu, 0x000001e1u, 0x000001fau, 0x000200f9u, 0x000001f8u, 0x000200f8u, 0x000001fbu, - 0x0004003du, 0x00000006u, 0x000001fcu, 0x00000025u, 0x000500b0u, 0x00000042u, 0x000001feu, 0x000001fcu, - 0x000001fdu, 0x000300f7u, 0x00000200u, 0x00000000u, 0x000400fau, 0x000001feu, 0x000001ffu, 0x00000203u, - 0x000200f8u, 0x000001ffu, 0x0003003eu, 0x000001e0u, 0x0000017au, 0x0004003du, 0x00000006u, 0x00000201u, - 0x00000025u, 0x00050082u, 0x00000006u, 0x00000202u, 0x00000201u, 0x000001f5u, 0x0003003eu, 0x000001e1u, - 0x00000202u, 0x000200f9u, 0x00000200u, 0x000200f8u, 0x00000203u, 0x0004003du, 0x00000006u, 0x00000204u, - 0x00000025u, 0x000500b0u, 0x00000042u, 0x00000206u, 0x00000204u, 0x00000205u, 0x000300f7u, 0x00000208u, - 0x00000000u, 0x000400fau, 0x00000206u, 0x00000207u, 0x0000020bu, 0x000200f8u, 0x00000207u, 0x0003003eu, - 0x000001e0u, 0x000001b2u, 0x0004003du, 0x00000006u, 0x00000209u, 0x00000025u, 0x00050082u, 0x00000006u, - 0x0000020au, 0x00000209u, 0x000001fdu, 0x0003003eu, 0x000001e1u, 0x0000020au, 0x000200f9u, 0x00000208u, - 0x000200f8u, 0x0000020bu, 0x0004003du, 0x00000006u, 0x0000020cu, 0x00000025u, 0x000500b0u, 0x00000042u, - 0x0000020eu, 0x0000020cu, 0x0000020du, 0x000300f7u, 0x00000210u, 0x00000000u, 0x000400fau, 0x0000020eu, - 0x0000020fu, 0x00000213u, 0x000200f8u, 0x0000020fu, 0x0003003eu, 0x000001e0u, 0x00000166u, 0x0004003du, - 0x00000006u, 0x00000211u, 0x00000025u, 0x00050082u, 0x00000006u, 0x00000212u, 0x00000211u, 0x00000205u, - 0x0003003eu, 0x000001e1u, 0x00000212u, 0x000200f9u, 0x00000210u, 0x000200f8u, 0x00000213u, 0x0004003du, - 0x00000006u, 0x00000214u, 0x00000025u, 0x000500b0u, 0x00000042u, 0x00000216u, 0x00000214u, 0x00000215u, - 0x000300f7u, 0x00000218u, 0x00000000u, 0x000400fau, 0x00000216u, 0x00000217u, 0x0000021cu, 0x000200f8u, - 0x00000217u, 0x0003003eu, 0x000001e0u, 0x00000219u, 0x0004003du, 0x00000006u, 0x0000021au, 0x00000025u, - 0x00050082u, 0x00000006u, 0x0000021bu, 0x0000021au, 0x0000020du, 0x0003003eu, 0x000001e1u, 0x0000021bu, - 0x000200f9u, 0x00000218u, 0x000200f8u, 0x0000021cu, 0x0003003eu, 0x000001e0u, 0x0000021du, 0x0003003eu, - 0x000001e1u, 0x00000089u, 0x000200f9u, 0x00000218u, 0x000200f8u, 0x00000218u, 0x000200f9u, 0x00000210u, - 0x000200f8u, 0x00000210u, 0x000200f9u, 0x00000208u, 0x000200f8u, 0x00000208u, 0x000200f9u, 0x00000200u, - 0x000200f8u, 0x00000200u, 0x000200f9u, 0x000001f8u, 0x000200f8u, 0x000001f8u, 0x000200f9u, 0x000001f0u, - 0x000200f8u, 0x000001f0u, 0x000200f9u, 0x000001e8u, 0x000200f8u, 0x000001e8u, 0x000200f9u, 0x000001dfu, - 0x000200f8u, 0x000001dfu, 0x0004003du, 0x00000006u, 0x0000021eu, 0x000001e1u, 0x00040070u, 0x00000009u, - 0x0000021fu, 0x0000021eu, 0x00050088u, 0x00000009u, 0x00000221u, 0x0000021fu, 0x00000220u, 0x0004003du, - 0x00000006u, 0x00000222u, 0x000001e0u, 0x00040070u, 0x00000009u, 0x00000223u, 0x00000222u, 0x00050088u, - 0x00000009u, 0x00000224u, 0x00000223u, 0x00000220u, 0x00050050u, 0x00000023u, 0x00000225u, 0x00000221u, - 0x00000224u, 0x000200feu, 0x00000225u, 0x000200f8u, 0x000001b0u, 0x000100ffu, 0x000200f8u, 0x0000019bu, - 0x000100ffu, 0x000200f8u, 0x00000188u, 0x000100ffu, 0x00010038u, 0x00050036u, 0x0000000du, 0x0000002fu, - 0x00000000u, 0x0000002au, 0x00030037u, 0x0000000eu, 0x0000002bu, 0x00030037u, 0x0000000eu, 0x0000002cu, - 0x00030037u, 0x0000000eu, 0x0000002du, 0x00030037u, 0x00000029u, 0x0000002eu, 0x000200f8u, 0x00000030u, - 0x0004003bu, 0x00000037u, 0x00000228u, 0x00000007u, 0x00050041u, 0x00000037u, 0x00000229u, 0x0000002eu, - 0x00000089u, 0x0004003du, 0x00000009u, 0x0000022au, 0x00000229u, 0x00050083u, 0x00000009u, 0x0000022bu, - 0x0000004au, 0x0000022au, 0x00050041u, 0x00000037u, 0x0000022cu, 0x0000002eu, 0x00000008u, 0x0004003du, - 0x00000009u, 0x0000022du, 0x0000022cu, 0x00050083u, 0x00000009u, 0x0000022eu, 0x0000022bu, 0x0000022du, - 0x0003003eu, 0x00000228u, 0x0000022eu, 0x0004003du, 0x0000000du, 0x0000022fu, 0x0000002bu, 0x0004003du, - 0x00000009u, 0x00000230u, 0x00000228u, 0x0005008eu, 0x0000000du, 0x00000231u, 0x0000022fu, 0x00000230u, - 0x0004003du, 0x0000000du, 0x00000232u, 0x0000002cu, 0x00050041u, 0x00000037u, 0x00000233u, 0x0000002eu, - 0x00000089u, 0x0004003du, 0x00000009u, 0x00000234u, 0x00000233u, 0x0005008eu, 0x0000000du, 0x00000235u, - 0x00000232u, 0x00000234u, 0x00050081u, 0x0000000du, 0x00000236u, 0x00000231u, 0x00000235u, 0x0004003du, - 0x0000000du, 0x00000237u, 0x0000002du, 0x00050041u, 0x00000037u, 0x00000238u, 0x0000002eu, 0x00000008u, - 0x0004003du, 0x00000009u, 0x00000239u, 0x00000238u, 0x0005008eu, 0x0000000du, 0x0000023au, 0x00000237u, - 0x00000239u, 0x00050081u, 0x0000000du, 0x0000023bu, 0x00000236u, 0x0000023au, 0x000200feu, 0x0000023bu, - 0x00010038u, 0x00050036u, 0x00000031u, 0x00000035u, 0x00000000u, 0x00000032u, 0x00030037u, 0x0000001bu, - 0x00000033u, 0x00030037u, 0x0000001bu, 0x00000034u, 0x000200f8u, 0x00000036u, 0x0004003bu, 0x0000024au, - 0x0000024bu, 0x00000007u, 0x0004003bu, 0x0000025fu, 0x00000260u, 0x00000007u, 0x0004003bu, 0x0000001bu, - 0x00000262u, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x00000264u, 0x00000007u, 0x0004003bu, 0x0000001bu, - 0x00000265u, 0x00000007u, 0x0004003bu, 0x00000266u, 0x00000267u, 0x00000007u, 0x0004003bu, 0x0000001bu, - 0x0000027bu, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x0000028bu, 0x00000007u, 0x0004003bu, 0x0000001bu, - 0x0000029bu, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x000002a1u, 0x00000007u, 0x0004003bu, 0x0000001bu, - 0x000002a8u, 0x00000007u, 0x0004003bu, 0x000002cau, 0x000002cbu, 0x00000007u, 0x0004003bu, 0x0000001bu, - 0x000002cdu, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x000002cfu, 0x00000007u, 0x0004003bu, 0x0000001bu, - 0x000002d0u, 0x00000007u, 0x0004003bu, 0x00000266u, 0x000002d1u, 0x00000007u, 0x0004003bu, 0x0000001bu, - 0x000002e4u, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x000002f4u, 0x00000007u, 0x0004003bu, 0x0000001bu, - 0x00000305u, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x00000316u, 0x00000007u, 0x0004003bu, 0x0000001bu, - 0x00000327u, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x00000338u, 0x00000007u, 0x0004003bu, 0x0000001bu, - 0x00000348u, 0x00000007u, 0x0004003bu, 0x0000001bu, 0x0000034eu, 0x00000007u, 0x0004003bu, 0x0000001bu, - 0x00000355u, 0x00000007u, 0x0004003du, 0x00000006u, 0x0000023eu, 0x00000034u, 0x000500aau, 0x00000042u, - 0x0000023fu, 0x0000023eu, 0x00000089u, 0x000300f7u, 0x00000241u, 0x00000000u, 0x000400fau, 0x0000023fu, - 0x00000240u, 0x00000244u, 0x000200f8u, 0x00000240u, 0x000200feu, 0x00000242u, 0x000200f8u, 0x00000244u, - 0x0004003du, 0x00000006u, 0x00000245u, 0x00000034u, 0x000500aau, 0x00000042u, 0x00000246u, 0x00000245u, - 0x00000008u, 0x000300f7u, 0x00000248u, 0x00000000u, 0x000400fau, 0x00000246u, 0x00000247u, 0x00000259u, - 0x000200f8u, 0x00000247u, 0x00050041u, 0x0000024du, 0x0000024eu, 0x0000024bu, 0x0000005fu, 0x0003003eu, - 0x0000024eu, 0x0000024cu, 0x00050041u, 0x0000024du, 0x00000250u, 0x0000024bu, 0x00000127u, 0x0003003eu, - 0x00000250u, 0x0000024fu, 0x00050041u, 0x0000024du, 0x00000252u, 0x0000024bu, 0x0000008eu, 0x0003003eu, - 0x00000252u, 0x00000251u, 0x00050041u, 0x0000024du, 0x00000254u, 0x0000024bu, 0x0000009au, 0x0003003eu, - 0x00000254u, 0x00000253u, 0x0004003du, 0x00000006u, 0x00000255u, 0x00000033u, 0x00050041u, 0x0000024du, - 0x00000256u, 0x0000024bu, 0x00000255u, 0x0004003du, 0x00000031u, 0x00000257u, 0x00000256u, 0x000200feu, - 0x00000257u, 0x000200f8u, 0x00000259u, 0x0004003du, 0x00000006u, 0x0000025au, 0x00000034u, 0x000500aau, - 0x00000042u, 0x0000025bu, 0x0000025au, 0x0000006bu, 0x000300f7u, 0x0000025du, 0x00000000u, 0x000400fau, - 0x0000025bu, 0x0000025cu, 0x000002c8u, 0x000200f8u, 0x0000025cu, 0x0003003eu, 0x00000260u, 0x00000261u, - 0x0004003du, 0x00000006u, 0x00000263u, 0x00000033u, 0x0003003eu, 0x00000262u, 0x00000263u, 0x0003003eu, - 0x00000264u, 0x00000089u, 0x0003003eu, 0x00000265u, 0x00000089u, 0x0003003eu, 0x00000267u, 0x00000268u, - 0x0004003du, 0x00000006u, 0x00000269u, 0x00000262u, 0x000500b0u, 0x00000042u, 0x0000026au, 0x00000269u, - 0x00000219u, 0x000300f7u, 0x0000026cu, 0x00000000u, 0x000400fau, 0x0000026au, 0x0000026bu, 0x00000276u, - 0x000200f8u, 0x0000026bu, 0x0003003eu, 0x00000264u, 0x00000089u, 0x0004003du, 0x00000006u, 0x0000026du, - 0x00000262u, 0x000500b0u, 0x00000042u, 0x0000026eu, 0x0000026du, 0x0000017au, 0x000300f7u, 0x00000270u, - 0x00000000u, 0x000400fau, 0x0000026eu, 0x0000026fu, 0x00000272u, 0x000200f8u, 0x0000026fu, 0x0004003du, - 0x00000006u, 0x00000271u, 0x00000262u, 0x0003003eu, 0x00000265u, 0x00000271u, 0x0003003eu, 0x00000267u, - 0x00000268u, 0x000200f9u, 0x00000270u, 0x000200f8u, 0x00000272u, 0x0004003du, 0x00000006u, 0x00000273u, - 0x00000262u, 0x00050082u, 0x00000006u, 0x00000274u, 0x00000273u, 0x0000017au, 0x0003003eu, 0x00000265u, - 0x00000274u, 0x0003003eu, 0x00000267u, 0x00000275u, 0x000200f9u, 0x00000270u, 0x000200f8u, 0x00000270u, - 0x000200f9u, 0x0000026cu, 0x000200f8u, 0x00000276u, 0x0004003du, 0x00000006u, 0x00000277u, 0x00000262u, - 0x000500b0u, 0x00000042u, 0x00000278u, 0x00000277u, 0x000001c3u, 0x000300f7u, 0x0000027au, 0x00000000u, - 0x000400fau, 0x00000278u, 0x00000279u, 0x00000286u, 0x000200f8u, 0x00000279u, 0x0003003eu, 0x00000264u, - 0x00000008u, 0x0004003du, 0x00000006u, 0x0000027cu, 0x00000262u, 0x00050082u, 0x00000006u, 0x0000027du, - 0x0000027cu, 0x00000219u, 0x0003003eu, 0x0000027bu, 0x0000027du, 0x0004003du, 0x00000006u, 0x0000027eu, - 0x0000027bu, 0x000500b0u, 0x00000042u, 0x0000027fu, 0x0000027eu, 0x00000160u, 0x000300f7u, 0x00000281u, - 0x00000000u, 0x000400fau, 0x0000027fu, 0x00000280u, 0x00000283u, 0x000200f8u, 0x00000280u, 0x0004003du, - 0x00000006u, 0x00000282u, 0x0000027bu, 0x0003003eu, 0x00000265u, 0x00000282u, 0x0003003eu, 0x00000267u, - 0x00000268u, 0x000200f9u, 0x00000281u, 0x000200f8u, 0x00000283u, 0x0004003du, 0x00000006u, 0x00000284u, - 0x0000027bu, 0x00050082u, 0x00000006u, 0x00000285u, 0x00000284u, 0x00000160u, 0x0003003eu, 0x00000265u, - 0x00000285u, 0x0003003eu, 0x00000267u, 0x00000275u, 0x000200f9u, 0x00000281u, 0x000200f8u, 0x00000281u, - 0x000200f9u, 0x0000027au, 0x000200f8u, 0x00000286u, 0x0004003du, 0x00000006u, 0x00000287u, 0x00000262u, - 0x000500b0u, 0x00000042u, 0x00000288u, 0x00000287u, 0x0000016cu, 0x000300f7u, 0x0000028au, 0x00000000u, - 0x000400fau, 0x00000288u, 0x00000289u, 0x00000296u, 0x000200f8u, 0x00000289u, 0x0003003eu, 0x00000264u, - 0x0000006bu, 0x0004003du, 0x00000006u, 0x0000028cu, 0x00000262u, 0x00050082u, 0x00000006u, 0x0000028du, - 0x0000028cu, 0x000001c3u, 0x0003003eu, 0x0000028bu, 0x0000028du, 0x0004003du, 0x00000006u, 0x0000028eu, - 0x0000028bu, 0x000500b0u, 0x00000042u, 0x0000028fu, 0x0000028eu, 0x0000006bu, 0x000300f7u, 0x00000291u, - 0x00000000u, 0x000400fau, 0x0000028fu, 0x00000290u, 0x00000293u, 0x000200f8u, 0x00000290u, 0x0004003du, - 0x00000006u, 0x00000292u, 0x0000028bu, 0x0003003eu, 0x00000265u, 0x00000292u, 0x0003003eu, 0x00000267u, - 0x00000268u, 0x000200f9u, 0x00000291u, 0x000200f8u, 0x00000293u, 0x0004003du, 0x00000006u, 0x00000294u, - 0x0000028bu, 0x00050082u, 0x00000006u, 0x00000295u, 0x00000294u, 0x0000006bu, 0x0003003eu, 0x00000265u, - 0x00000295u, 0x0003003eu, 0x00000267u, 0x00000275u, 0x000200f9u, 0x00000291u, 0x000200f8u, 0x00000291u, - 0x000200f9u, 0x0000028au, 0x000200f8u, 0x00000296u, 0x0003003eu, 0x00000264u, 0x00000160u, 0x0003003eu, - 0x00000265u, 0x00000089u, 0x0003003eu, 0x00000267u, 0x00000268u, 0x000200f9u, 0x0000028au, 0x000200f8u, - 0x0000028au, 0x000200f9u, 0x0000027au, 0x000200f8u, 0x0000027au, 0x000200f9u, 0x0000026cu, 0x000200f8u, - 0x0000026cu, 0x0004003du, 0x00000042u, 0x00000297u, 0x00000267u, 0x000400a8u, 0x00000042u, 0x00000298u, - 0x00000297u, 0x000300f7u, 0x0000029au, 0x00000000u, 0x000400fau, 0x00000298u, 0x00000299u, 0x000002afu, - 0x000200f8u, 0x00000299u, 0x0004003du, 0x00000006u, 0x0000029cu, 0x00000264u, 0x00050041u, 0x0000001bu, - 0x0000029du, 0x00000260u, 0x0000029cu, 0x0004003du, 0x00000006u, 0x0000029eu, 0x0000029du, 0x0004003du, - 0x00000006u, 0x0000029fu, 0x00000265u, 0x00050080u, 0x00000006u, 0x000002a0u, 0x0000029eu, 0x0000029fu, - 0x0003003eu, 0x0000029bu, 0x000002a0u, 0x0004003du, 0x00000006u, 0x000002a2u, 0x00000264u, 0x00050041u, - 0x0000001bu, 0x000002a3u, 0x00000260u, 0x000002a2u, 0x0004003du, 0x00000006u, 0x000002a4u, 0x000002a3u, - 0x0004003du, 0x00000006u, 0x000002a5u, 0x00000265u, 0x00050080u, 0x00000006u, 0x000002a6u, 0x000002a4u, - 0x000002a5u, 0x00050080u, 0x00000006u, 0x000002a7u, 0x000002a6u, 0x00000008u, 0x0003003eu, 0x000002a1u, - 0x000002a7u, 0x0004003du, 0x00000006u, 0x000002a9u, 0x00000264u, 0x00050080u, 0x00000006u, 0x000002aau, - 0x000002a9u, 0x00000008u, 0x00050041u, 0x0000001bu, 0x000002abu, 0x00000260u, 0x000002aau, 0x0004003du, - 0x00000006u, 0x000002acu, 0x000002abu, 0x0004003du, 0x00000006u, 0x000002adu, 0x00000265u, 0x00050080u, - 0x00000006u, 0x000002aeu, 0x000002acu, 0x000002adu, 0x0003003eu, 0x000002a8u, 0x000002aeu, 0x000200f9u, - 0x0000029au, 0x000200f8u, 0x000002afu, 0x0004003du, 0x00000006u, 0x000002b0u, 0x00000264u, 0x00050041u, - 0x0000001bu, 0x000002b1u, 0x00000260u, 0x000002b0u, 0x0004003du, 0x00000006u, 0x000002b2u, 0x000002b1u, - 0x0004003du, 0x00000006u, 0x000002b3u, 0x00000265u, 0x00050080u, 0x00000006u, 0x000002b4u, 0x000002b2u, - 0x000002b3u, 0x00050080u, 0x00000006u, 0x000002b5u, 0x000002b4u, 0x00000008u, 0x0003003eu, 0x0000029bu, - 0x000002b5u, 0x0004003du, 0x00000006u, 0x000002b6u, 0x00000264u, 0x00050080u, 0x00000006u, 0x000002b7u, - 0x000002b6u, 0x00000008u, 0x00050041u, 0x0000001bu, 0x000002b8u, 0x00000260u, 0x000002b7u, 0x0004003du, - 0x00000006u, 0x000002b9u, 0x000002b8u, 0x0004003du, 0x00000006u, 0x000002bau, 0x00000265u, 0x00050080u, - 0x00000006u, 0x000002bbu, 0x000002b9u, 0x000002bau, 0x00050080u, 0x00000006u, 0x000002bcu, 0x000002bbu, - 0x00000008u, 0x0003003eu, 0x000002a1u, 0x000002bcu, 0x0004003du, 0x00000006u, 0x000002bdu, 0x00000264u, - 0x00050080u, 0x00000006u, 0x000002beu, 0x000002bdu, 0x00000008u, 0x00050041u, 0x0000001bu, 0x000002bfu, - 0x00000260u, 0x000002beu, 0x0004003du, 0x00000006u, 0x000002c0u, 0x000002bfu, 0x0004003du, 0x00000006u, - 0x000002c1u, 0x00000265u, 0x00050080u, 0x00000006u, 0x000002c2u, 0x000002c0u, 0x000002c1u, 0x0003003eu, - 0x000002a8u, 0x000002c2u, 0x000200f9u, 0x0000029au, 0x000200f8u, 0x0000029au, 0x0004003du, 0x00000006u, - 0x000002c3u, 0x0000029bu, 0x0004003du, 0x00000006u, 0x000002c4u, 0x000002a1u, 0x0004003du, 0x00000006u, - 0x000002c5u, 0x000002a8u, 0x00060050u, 0x00000031u, 0x000002c6u, 0x000002c3u, 0x000002c4u, 0x000002c5u, - 0x000200feu, 0x000002c6u, 0x000200f8u, 0x000002c8u, 0x0003003eu, 0x000002cbu, 0x000002ccu, 0x0004003du, - 0x00000006u, 0x000002ceu, 0x00000033u, 0x0003003eu, 0x000002cdu, 0x000002ceu, 0x0003003eu, 0x000002cfu, - 0x00000089u, 0x0003003eu, 0x000002d0u, 0x00000089u, 0x0003003eu, 0x000002d1u, 0x00000268u, 0x0004003du, - 0x00000006u, 0x000002d2u, 0x000002cdu, 0x000500b0u, 0x00000042u, 0x000002d3u, 0x000002d2u, 0x0000016cu, - 0x000300f7u, 0x000002d5u, 0x00000000u, 0x000400fau, 0x000002d3u, 0x000002d4u, 0x000002deu, 0x000200f8u, - 0x000002d4u, 0x0003003eu, 0x000002cfu, 0x00000089u, 0x0004003du, 0x00000006u, 0x000002d6u, 0x000002cdu, - 0x000500b0u, 0x00000042u, 0x000002d7u, 0x000002d6u, 0x0000021du, 0x000300f7u, 0x000002d9u, 0x00000000u, - 0x000400fau, 0x000002d7u, 0x000002d8u, 0x000002dbu, 0x000200f8u, 0x000002d8u, 0x0004003du, 0x00000006u, - 0x000002dau, 0x000002cdu, 0x0003003eu, 0x000002d0u, 0x000002dau, 0x0003003eu, 0x000002d1u, 0x00000268u, - 0x000200f9u, 0x000002d9u, 0x000200f8u, 0x000002dbu, 0x0004003du, 0x00000006u, 0x000002dcu, 0x000002cdu, - 0x00050082u, 0x00000006u, 0x000002ddu, 0x000002dcu, 0x0000021du, 0x0003003eu, 0x000002d0u, 0x000002ddu, - 0x0003003eu, 0x000002d1u, 0x00000275u, 0x000200f9u, 0x000002d9u, 0x000200f8u, 0x000002d9u, 0x000200f9u, - 0x000002d5u, 0x000200f8u, 0x000002deu, 0x0004003du, 0x00000006u, 0x000002dfu, 0x000002cdu, 0x000500b0u, - 0x00000042u, 0x000002e1u, 0x000002dfu, 0x000002e0u, 0x000300f7u, 0x000002e3u, 0x00000000u, 0x000400fau, - 0x000002e1u, 0x000002e2u, 0x000002efu, 0x000200f8u, 0x000002e2u, 0x0003003eu, 0x000002cfu, 0x00000008u, - 0x0004003du, 0x00000006u, 0x000002e5u, 0x000002cdu, 0x00050082u, 0x00000006u, 0x000002e6u, 0x000002e5u, - 0x0000016cu, 0x0003003eu, 0x000002e4u, 0x000002e6u, 0x0004003du, 0x00000006u, 0x000002e7u, 0x000002e4u, - 0x000500b0u, 0x00000042u, 0x000002e8u, 0x000002e7u, 0x00000219u, 0x000300f7u, 0x000002eau, 0x00000000u, - 0x000400fau, 0x000002e8u, 0x000002e9u, 0x000002ecu, 0x000200f8u, 0x000002e9u, 0x0004003du, 0x00000006u, - 0x000002ebu, 0x000002e4u, 0x0003003eu, 0x000002d0u, 0x000002ebu, 0x0003003eu, 0x000002d1u, 0x00000268u, - 0x000200f9u, 0x000002eau, 0x000200f8u, 0x000002ecu, 0x0004003du, 0x00000006u, 0x000002edu, 0x000002e4u, - 0x00050082u, 0x00000006u, 0x000002eeu, 0x000002edu, 0x00000219u, 0x0003003eu, 0x000002d0u, 0x000002eeu, - 0x0003003eu, 0x000002d1u, 0x00000275u, 0x000200f9u, 0x000002eau, 0x000200f8u, 0x000002eau, 0x000200f9u, - 0x000002e3u, 0x000200f8u, 0x000002efu, 0x0004003du, 0x00000006u, 0x000002f0u, 0x000002cdu, 0x000500b0u, - 0x00000042u, 0x000002f1u, 0x000002f0u, 0x00000205u, 0x000300f7u, 0x000002f3u, 0x00000000u, 0x000400fau, - 0x000002f1u, 0x000002f2u, 0x000002ffu, 0x000200f8u, 0x000002f2u, 0x0003003eu, 0x000002cfu, 0x0000006bu, - 0x0004003du, 0x00000006u, 0x000002f5u, 0x000002cdu, 0x00050082u, 0x00000006u, 0x000002f6u, 0x000002f5u, - 0x000002e0u, 0x0003003eu, 0x000002f4u, 0x000002f6u, 0x0004003du, 0x00000006u, 0x000002f7u, 0x000002f4u, - 0x000500b0u, 0x00000042u, 0x000002f8u, 0x000002f7u, 0x00000166u, 0x000300f7u, 0x000002fau, 0x00000000u, - 0x000400fau, 0x000002f8u, 0x000002f9u, 0x000002fcu, 0x000200f8u, 0x000002f9u, 0x0004003du, 0x00000006u, - 0x000002fbu, 0x000002f4u, 0x0003003eu, 0x000002d0u, 0x000002fbu, 0x0003003eu, 0x000002d1u, 0x00000268u, - 0x000200f9u, 0x000002fau, 0x000200f8u, 0x000002fcu, 0x0004003du, 0x00000006u, 0x000002fdu, 0x000002f4u, - 0x00050082u, 0x00000006u, 0x000002feu, 0x000002fdu, 0x00000166u, 0x0003003eu, 0x000002d0u, 0x000002feu, - 0x0003003eu, 0x000002d1u, 0x00000275u, 0x000200f9u, 0x000002fau, 0x000200f8u, 0x000002fau, 0x000200f9u, - 0x000002f3u, 0x000200f8u, 0x000002ffu, 0x0004003du, 0x00000006u, 0x00000300u, 0x000002cdu, 0x000500b0u, - 0x00000042u, 0x00000302u, 0x00000300u, 0x00000301u, 0x000300f7u, 0x00000304u, 0x00000000u, 0x000400fau, - 0x00000302u, 0x00000303u, 0x00000310u, 0x000200f8u, 0x00000303u, 0x0003003eu, 0x000002cfu, 0x00000160u, - 0x0004003du, 0x00000006u, 0x00000306u, 0x000002cdu, 0x00050082u, 0x00000006u, 0x00000307u, 0x00000306u, - 0x00000205u, 0x0003003eu, 0x00000305u, 0x00000307u, 0x0004003du, 0x00000006u, 0x00000308u, 0x00000305u, - 0x000500b0u, 0x00000042u, 0x00000309u, 0x00000308u, 0x000001b2u, 0x000300f7u, 0x0000030bu, 0x00000000u, - 0x000400fau, 0x00000309u, 0x0000030au, 0x0000030du, 0x000200f8u, 0x0000030au, 0x0004003du, 0x00000006u, - 0x0000030cu, 0x00000305u, 0x0003003eu, 0x000002d0u, 0x0000030cu, 0x0003003eu, 0x000002d1u, 0x00000268u, - 0x000200f9u, 0x0000030bu, 0x000200f8u, 0x0000030du, 0x0004003du, 0x00000006u, 0x0000030eu, 0x00000305u, - 0x00050082u, 0x00000006u, 0x0000030fu, 0x0000030eu, 0x000001b2u, 0x0003003eu, 0x000002d0u, 0x0000030fu, - 0x0003003eu, 0x000002d1u, 0x00000275u, 0x000200f9u, 0x0000030bu, 0x000200f8u, 0x0000030bu, 0x000200f9u, - 0x00000304u, 0x000200f8u, 0x00000310u, 0x0004003du, 0x00000006u, 0x00000311u, 0x000002cdu, 0x000500b0u, - 0x00000042u, 0x00000313u, 0x00000311u, 0x00000312u, 0x000300f7u, 0x00000315u, 0x00000000u, 0x000400fau, - 0x00000313u, 0x00000314u, 0x00000321u, 0x000200f8u, 0x00000314u, 0x0003003eu, 0x000002cfu, 0x0000017au, - 0x0004003du, 0x00000006u, 0x00000317u, 0x000002cdu, 0x00050082u, 0x00000006u, 0x00000318u, 0x00000317u, - 0x00000301u, 0x0003003eu, 0x00000316u, 0x00000318u, 0x0004003du, 0x00000006u, 0x00000319u, 0x00000316u, - 0x000500b0u, 0x00000042u, 0x0000031au, 0x00000319u, 0x0000017au, 0x000300f7u, 0x0000031cu, 0x00000000u, - 0x000400fau, 0x0000031au, 0x0000031bu, 0x0000031eu, 0x000200f8u, 0x0000031bu, 0x0004003du, 0x00000006u, - 0x0000031du, 0x00000316u, 0x0003003eu, 0x000002d0u, 0x0000031du, 0x0003003eu, 0x000002d1u, 0x00000268u, - 0x000200f9u, 0x0000031cu, 0x000200f8u, 0x0000031eu, 0x0004003du, 0x00000006u, 0x0000031fu, 0x00000316u, - 0x00050082u, 0x00000006u, 0x00000320u, 0x0000031fu, 0x0000017au, 0x0003003eu, 0x000002d0u, 0x00000320u, - 0x0003003eu, 0x000002d1u, 0x00000275u, 0x000200f9u, 0x0000031cu, 0x000200f8u, 0x0000031cu, 0x000200f9u, - 0x00000315u, 0x000200f8u, 0x00000321u, 0x0004003du, 0x00000006u, 0x00000322u, 0x000002cdu, 0x000500b0u, - 0x00000042u, 0x00000324u, 0x00000322u, 0x00000323u, 0x000300f7u, 0x00000326u, 0x00000000u, 0x000400fau, - 0x00000324u, 0x00000325u, 0x00000332u, 0x000200f8u, 0x00000325u, 0x0003003eu, 0x000002cfu, 0x000001b2u, - 0x0004003du, 0x00000006u, 0x00000328u, 0x000002cdu, 0x00050082u, 0x00000006u, 0x00000329u, 0x00000328u, - 0x00000312u, 0x0003003eu, 0x00000327u, 0x00000329u, 0x0004003du, 0x00000006u, 0x0000032au, 0x00000327u, - 0x000500b0u, 0x00000042u, 0x0000032bu, 0x0000032au, 0x00000160u, 0x000300f7u, 0x0000032du, 0x00000000u, - 0x000400fau, 0x0000032bu, 0x0000032cu, 0x0000032fu, 0x000200f8u, 0x0000032cu, 0x0004003du, 0x00000006u, - 0x0000032eu, 0x00000327u, 0x0003003eu, 0x000002d0u, 0x0000032eu, 0x0003003eu, 0x000002d1u, 0x00000268u, - 0x000200f9u, 0x0000032du, 0x000200f8u, 0x0000032fu, 0x0004003du, 0x00000006u, 0x00000330u, 0x00000327u, - 0x00050082u, 0x00000006u, 0x00000331u, 0x00000330u, 0x00000160u, 0x0003003eu, 0x000002d0u, 0x00000331u, - 0x0003003eu, 0x000002d1u, 0x00000275u, 0x000200f9u, 0x0000032du, 0x000200f8u, 0x0000032du, 0x000200f9u, - 0x00000326u, 0x000200f8u, 0x00000332u, 0x0004003du, 0x00000006u, 0x00000333u, 0x000002cdu, 0x000500b0u, - 0x00000042u, 0x00000335u, 0x00000333u, 0x00000334u, 0x000300f7u, 0x00000337u, 0x00000000u, 0x000400fau, - 0x00000335u, 0x00000336u, 0x00000343u, 0x000200f8u, 0x00000336u, 0x0003003eu, 0x000002cfu, 0x00000166u, - 0x0004003du, 0x00000006u, 0x00000339u, 0x000002cdu, 0x00050082u, 0x00000006u, 0x0000033au, 0x00000339u, - 0x00000323u, 0x0003003eu, 0x00000338u, 0x0000033au, 0x0004003du, 0x00000006u, 0x0000033bu, 0x00000338u, - 0x000500b0u, 0x00000042u, 0x0000033cu, 0x0000033bu, 0x0000006bu, 0x000300f7u, 0x0000033eu, 0x00000000u, - 0x000400fau, 0x0000033cu, 0x0000033du, 0x00000340u, 0x000200f8u, 0x0000033du, 0x0004003du, 0x00000006u, - 0x0000033fu, 0x00000338u, 0x0003003eu, 0x000002d0u, 0x0000033fu, 0x0003003eu, 0x000002d1u, 0x00000268u, - 0x000200f9u, 0x0000033eu, 0x000200f8u, 0x00000340u, 0x0004003du, 0x00000006u, 0x00000341u, 0x00000338u, - 0x00050082u, 0x00000006u, 0x00000342u, 0x00000341u, 0x0000006bu, 0x0003003eu, 0x000002d0u, 0x00000342u, - 0x0003003eu, 0x000002d1u, 0x00000275u, 0x000200f9u, 0x0000033eu, 0x000200f8u, 0x0000033eu, 0x000200f9u, - 0x00000337u, 0x000200f8u, 0x00000343u, 0x0003003eu, 0x000002cfu, 0x00000219u, 0x0003003eu, 0x000002d0u, - 0x00000089u, 0x0003003eu, 0x000002d1u, 0x00000268u, 0x000200f9u, 0x00000337u, 0x000200f8u, 0x00000337u, - 0x000200f9u, 0x00000326u, 0x000200f8u, 0x00000326u, 0x000200f9u, 0x00000315u, 0x000200f8u, 0x00000315u, - 0x000200f9u, 0x00000304u, 0x000200f8u, 0x00000304u, 0x000200f9u, 0x000002f3u, 0x000200f8u, 0x000002f3u, - 0x000200f9u, 0x000002e3u, 0x000200f8u, 0x000002e3u, 0x000200f9u, 0x000002d5u, 0x000200f8u, 0x000002d5u, - 0x0004003du, 0x00000042u, 0x00000344u, 0x000002d1u, 0x000400a8u, 0x00000042u, 0x00000345u, 0x00000344u, - 0x000300f7u, 0x00000347u, 0x00000000u, 0x000400fau, 0x00000345u, 0x00000346u, 0x0000035cu, 0x000200f8u, - 0x00000346u, 0x0004003du, 0x00000006u, 0x00000349u, 0x000002cfu, 0x00050041u, 0x0000001bu, 0x0000034au, - 0x000002cbu, 0x00000349u, 0x0004003du, 0x00000006u, 0x0000034bu, 0x0000034au, 0x0004003du, 0x00000006u, - 0x0000034cu, 0x000002d0u, 0x00050080u, 0x00000006u, 0x0000034du, 0x0000034bu, 0x0000034cu, 0x0003003eu, - 0x00000348u, 0x0000034du, 0x0004003du, 0x00000006u, 0x0000034fu, 0x000002cfu, 0x00050041u, 0x0000001bu, - 0x00000350u, 0x000002cbu, 0x0000034fu, 0x0004003du, 0x00000006u, 0x00000351u, 0x00000350u, 0x0004003du, - 0x00000006u, 0x00000352u, 0x000002d0u, 0x00050080u, 0x00000006u, 0x00000353u, 0x00000351u, 0x00000352u, - 0x00050080u, 0x00000006u, 0x00000354u, 0x00000353u, 0x00000008u, 0x0003003eu, 0x0000034eu, 0x00000354u, - 0x0004003du, 0x00000006u, 0x00000356u, 0x000002cfu, 0x00050080u, 0x00000006u, 0x00000357u, 0x00000356u, - 0x00000008u, 0x00050041u, 0x0000001bu, 0x00000358u, 0x000002cbu, 0x00000357u, 0x0004003du, 0x00000006u, - 0x00000359u, 0x00000358u, 0x0004003du, 0x00000006u, 0x0000035au, 0x000002d0u, 0x00050080u, 0x00000006u, - 0x0000035bu, 0x00000359u, 0x0000035au, 0x0003003eu, 0x00000355u, 0x0000035bu, 0x000200f9u, 0x00000347u, - 0x000200f8u, 0x0000035cu, 0x0004003du, 0x00000006u, 0x0000035du, 0x000002cfu, 0x00050041u, 0x0000001bu, - 0x0000035eu, 0x000002cbu, 0x0000035du, 0x0004003du, 0x00000006u, 0x0000035fu, 0x0000035eu, 0x0004003du, - 0x00000006u, 0x00000360u, 0x000002d0u, 0x00050080u, 0x00000006u, 0x00000361u, 0x0000035fu, 0x00000360u, - 0x00050080u, 0x00000006u, 0x00000362u, 0x00000361u, 0x00000008u, 0x0003003eu, 0x00000348u, 0x00000362u, - 0x0004003du, 0x00000006u, 0x00000363u, 0x000002cfu, 0x00050080u, 0x00000006u, 0x00000364u, 0x00000363u, - 0x00000008u, 0x00050041u, 0x0000001bu, 0x00000365u, 0x000002cbu, 0x00000364u, 0x0004003du, 0x00000006u, - 0x00000366u, 0x00000365u, 0x0004003du, 0x00000006u, 0x00000367u, 0x000002d0u, 0x00050080u, 0x00000006u, - 0x00000368u, 0x00000366u, 0x00000367u, 0x00050080u, 0x00000006u, 0x00000369u, 0x00000368u, 0x00000008u, - 0x0003003eu, 0x0000034eu, 0x00000369u, 0x0004003du, 0x00000006u, 0x0000036au, 0x000002cfu, 0x00050080u, - 0x00000006u, 0x0000036bu, 0x0000036au, 0x00000008u, 0x00050041u, 0x0000001bu, 0x0000036cu, 0x000002cbu, - 0x0000036bu, 0x0004003du, 0x00000006u, 0x0000036du, 0x0000036cu, 0x0004003du, 0x00000006u, 0x0000036eu, - 0x000002d0u, 0x00050080u, 0x00000006u, 0x0000036fu, 0x0000036du, 0x0000036eu, 0x0003003eu, 0x00000355u, - 0x0000036fu, 0x000200f9u, 0x00000347u, 0x000200f8u, 0x00000347u, 0x0004003du, 0x00000006u, 0x00000370u, - 0x00000348u, 0x0004003du, 0x00000006u, 0x00000371u, 0x0000034eu, 0x0004003du, 0x00000006u, 0x00000372u, - 0x00000355u, 0x00060050u, 0x00000031u, 0x00000373u, 0x00000370u, 0x00000371u, 0x00000372u, 0x000200feu, - 0x00000373u, 0x000200f8u, 0x0000025du, 0x000100ffu, 0x000200f8u, 0x00000248u, 0x000100ffu, 0x000200f8u, - 0x00000241u, 0x000100ffu, 0x00010038u, -}; - -static const uint32_t kSpv_ts_obstacle_frag[] = { - 0x07230203u, 0x00010600u, 0x0008000bu, 0x0000004bu, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, - 0x000014a3u, 0x00020011u, 0x000014a4u, 0x0006000au, 0x5f565053u, 0x5f545845u, 0x6873656du, 0x6168735fu, - 0x00726564u, 0x000a000au, 0x5f565053u, 0x5f52484bu, 0x67617266u, 0x746e656du, 0x6168735fu, 0x5f726564u, - 0x79726162u, 0x746e6563u, 0x00636972u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, - 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x000a000fu, 0x00000004u, 0x00000004u, 0x6e69616du, - 0x00000000u, 0x0000000cu, 0x00000012u, 0x00000024u, 0x00000039u, 0x00000045u, 0x00030010u, 0x00000004u, - 0x00000007u, 0x00030003u, 0x00000002u, 0x000001ccu, 0x000a0004u, 0x455f4c47u, 0x665f5458u, 0x6d676172u, - 0x5f746e65u, 0x64616873u, 0x625f7265u, 0x63797261u, 0x72746e65u, 0x00006369u, 0x00060004u, 0x455f4c47u, - 0x6d5f5458u, 0x5f687365u, 0x64616873u, 0x00007265u, 0x00040005u, 0x00000004u, 0x6e69616du, 0x00000000u, - 0x00030005u, 0x00000008u, 0x00000074u, 0x00070005u, 0x0000000au, 0x65627543u, 0x64617247u, 0x746e6569u, - 0x636f6c42u, 0x0000006bu, 0x00060006u, 0x0000000au, 0x00000000u, 0x6e726f63u, 0x745f7265u, 0x00000000u, - 0x00060006u, 0x0000000au, 0x00000001u, 0x6e6f7266u, 0x6f635f74u, 0x00726f6cu, 0x00060006u, 0x0000000au, - 0x00000002u, 0x6b636162u, 0x6c6f635fu, 0x0000726fu, 0x00050006u, 0x0000000au, 0x00000003u, 0x625f7369u, - 0x00007665u, 0x00040005u, 0x0000000cu, 0x6d697270u, 0x006e695fu, 0x00060005u, 0x00000012u, 0x425f6c67u, - 0x43797261u, 0x64726f6fu, 0x00545845u, 0x00040005u, 0x00000016u, 0x6f6c6f63u, 0x00000072u, 0x00060005u, - 0x00000022u, 0x68737550u, 0x736e6f43u, 0x746e6174u, 0x00000073u, 0x000a0006u, 0x00000022u, 0x00000000u, - 0x69775f75u, 0x5f687464u, 0x796c6f70u, 0x656e696cu, 0x6765725fu, 0x72616c75u, 0x00000000u, 0x00090006u, - 0x00000022u, 0x00000001u, 0x69775f75u, 0x5f687464u, 0x796c6f70u, 0x656e696cu, 0x7665625fu, 0x00000000u, - 0x000a0006u, 0x00000022u, 0x00000002u, 0x69775f75u, 0x5f687464u, 0x5f6f6765u, 0x6a617274u, 0x6765725fu, - 0x72616c75u, 0x00000000u, 0x00090006u, 0x00000022u, 0x00000003u, 0x69775f75u, 0x5f687464u, 0x5f6f6765u, - 0x6a617274u, 0x7665625fu, 0x00000000u, 0x00080006u, 0x00000022u, 0x00000004u, 0x69775f75u, 0x5f687464u, - 0x65726977u, 0x6d617266u, 0x00000065u, 0x00080006u, 0x00000022u, 0x00000005u, 0x65725f75u, 0x756c6f73u, - 0x6e6f6974u, 0x6163735fu, 0x0000656cu, 0x00070006u, 0x00000022u, 0x00000006u, 0x65645f75u, 0x5f687470u, - 0x6c616373u, 0x00676e69u, 0x00090006u, 0x00000022u, 0x00000007u, 0x616d5f75u, 0x78655f78u, 0x70617274u, - 0x74616c6fu, 0x5f6e6f69u, 0x00007375u, 0x00090006u, 0x00000022u, 0x00000008u, 0x6f635f75u, 0x5f726f6cu, - 0x656c6170u, 0x5f657474u, 0x657a6973u, 0x00000000u, 0x00070006u, 0x00000022u, 0x00000009u, 0x756e5f75u, - 0x75715f6du, 0x65697265u, 0x00000073u, 0x000a0006u, 0x00000022u, 0x0000000au, 0x65745f75u, 0x6c657373u, - 0x6974616cu, 0x745f6e6fu, 0x73657268u, 0x646c6f68u, 0x00000000u, 0x000a0006u, 0x00000022u, 0x0000000bu, - 0x616d5f75u, 0x65745f78u, 0x6c657373u, 0x6974616cu, 0x705f6e6fu, 0x6c796c6fu, 0x00656e69u, 0x000a0006u, - 0x00000022u, 0x0000000cu, 0x616d5f75u, 0x65745f78u, 0x6c657373u, 0x6974616cu, 0x705f6e6fu, 0x67796c6fu, - 0x00006e6fu, 0x00090006u, 0x00000022u, 0x0000000du, 0x616d5f75u, 0x65745f78u, 0x6c657373u, 0x6974616cu, - 0x635f6e6fu, 0x00656275u, 0x00080006u, 0x00000022u, 0x0000000eu, 0x75635f75u, 0x725f6c6cu, 0x75696461u, - 0x63735f73u, 0x00656c61u, 0x00070006u, 0x00000022u, 0x0000000fu, 0x6f665f75u, 0x6e655f67u, 0x656c6261u, - 0x00000064u, 0x00070006u, 0x00000022u, 0x00000010u, 0x616d5f75u, 0x626f5f78u, 0x63617473u, 0x0073656cu, - 0x00080006u, 0x00000022u, 0x00000011u, 0x75635f75u, 0x705f6562u, 0x5f6c6f6fu, 0x65646e69u, 0x00000078u, - 0x00080006u, 0x00000022u, 0x00000012u, 0x756e5f75u, 0x6f705f6du, 0x6f67796cu, 0x6f705f6eu, 0x00736c6fu, - 0x00090006u, 0x00000022u, 0x00000013u, 0x616d5f75u, 0x61765f78u, 0x79617272u, 0x65705f73u, 0x6f705f72u, - 0x00006c6fu, 0x00090006u, 0x00000022u, 0x00000014u, 0x756e5f75u, 0x6f705f6du, 0x696c796cu, 0x705f656eu, - 0x736c6f6fu, 0x00000000u, 0x00030005u, 0x00000024u, 0x00006370u, 0x00050005u, 0x00000035u, 0x5f676f66u, - 0x74636166u, 0x0000726fu, 0x00060005u, 0x00000039u, 0x465f6c67u, 0x43676172u, 0x64726f6fu, 0x00000000u, - 0x00050005u, 0x00000045u, 0x5f74756fu, 0x6f6c6f63u, 0x00000072u, 0x00030047u, 0x0000000au, 0x00000002u, - 0x00040048u, 0x0000000au, 0x00000000u, 0x00001497u, 0x00040048u, 0x0000000au, 0x00000001u, 0x00001497u, - 0x00040048u, 0x0000000au, 0x00000002u, 0x00001497u, 0x00040048u, 0x0000000au, 0x00000003u, 0x00001497u, - 0x00040047u, 0x0000000cu, 0x0000001eu, 0x00000000u, 0x00040047u, 0x00000012u, 0x0000000bu, 0x000014a6u, - 0x00030047u, 0x00000022u, 0x00000002u, 0x00050048u, 0x00000022u, 0x00000000u, 0x00000023u, 0x00000000u, - 0x00050048u, 0x00000022u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000022u, 0x00000002u, - 0x00000023u, 0x00000008u, 0x00050048u, 0x00000022u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, - 0x00000022u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000022u, 0x00000005u, 0x00000023u, - 0x00000014u, 0x00050048u, 0x00000022u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000022u, - 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000022u, 0x00000008u, 0x00000023u, 0x00000020u, - 0x00050048u, 0x00000022u, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x00000022u, 0x0000000au, - 0x00000023u, 0x00000028u, 0x00050048u, 0x00000022u, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, - 0x00000022u, 0x0000000cu, 0x00000023u, 0x00000030u, 0x00050048u, 0x00000022u, 0x0000000du, 0x00000023u, - 0x00000034u, 0x00050048u, 0x00000022u, 0x0000000eu, 0x00000023u, 0x00000038u, 0x00050048u, 0x00000022u, - 0x0000000fu, 0x00000023u, 0x0000003cu, 0x00050048u, 0x00000022u, 0x00000010u, 0x00000023u, 0x00000040u, - 0x00050048u, 0x00000022u, 0x00000011u, 0x00000023u, 0x00000044u, 0x00050048u, 0x00000022u, 0x00000012u, - 0x00000023u, 0x00000048u, 0x00050048u, 0x00000022u, 0x00000013u, 0x00000023u, 0x0000004cu, 0x00050048u, - 0x00000022u, 0x00000014u, 0x00000023u, 0x00000050u, 0x00040047u, 0x00000039u, 0x0000000bu, 0x0000000fu, - 0x00040047u, 0x00000045u, 0x0000001eu, 0x00000000u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, - 0x00000002u, 0x00030016u, 0x00000006u, 0x00000020u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, - 0x00040017u, 0x00000009u, 0x00000006u, 0x00000003u, 0x0006001eu, 0x0000000au, 0x00000009u, 0x00000009u, - 0x00000009u, 0x00000006u, 0x00040020u, 0x0000000bu, 0x00000001u, 0x0000000au, 0x0004003bu, 0x0000000bu, - 0x0000000cu, 0x00000001u, 0x00040015u, 0x0000000du, 0x00000020u, 0x00000001u, 0x0004002bu, 0x0000000du, - 0x0000000eu, 0x00000000u, 0x00040020u, 0x0000000fu, 0x00000001u, 0x00000009u, 0x0004003bu, 0x0000000fu, - 0x00000012u, 0x00000001u, 0x00040020u, 0x00000015u, 0x00000007u, 0x00000009u, 0x0004002bu, 0x0000000du, - 0x00000017u, 0x00000002u, 0x0004002bu, 0x0000000du, 0x0000001au, 0x00000001u, 0x00020014u, 0x00000020u, - 0x00040015u, 0x00000021u, 0x00000020u, 0x00000000u, 0x0017001eu, 0x00000022u, 0x00000006u, 0x00000006u, - 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0000000du, 0x0000000du, 0x00000021u, - 0x00000006u, 0x00000021u, 0x00000021u, 0x00000021u, 0x00000006u, 0x00000006u, 0x00000021u, 0x00000021u, - 0x00000021u, 0x00000021u, 0x00000021u, 0x00040020u, 0x00000023u, 0x00000009u, 0x00000022u, 0x0004003bu, - 0x00000023u, 0x00000024u, 0x00000009u, 0x0004002bu, 0x0000000du, 0x00000025u, 0x0000000fu, 0x00040020u, - 0x00000026u, 0x00000009u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x00000029u, 0x3f000000u, 0x0004002bu, - 0x0000000du, 0x0000002du, 0x00000003u, 0x00040020u, 0x0000002eu, 0x00000001u, 0x00000006u, 0x0004002bu, - 0x00000006u, 0x00000036u, 0x3f800000u, 0x00040017u, 0x00000037u, 0x00000006u, 0x00000004u, 0x00040020u, - 0x00000038u, 0x00000001u, 0x00000037u, 0x0004003bu, 0x00000038u, 0x00000039u, 0x00000001u, 0x0004002bu, - 0x00000021u, 0x0000003au, 0x00000002u, 0x0004002bu, 0x00000006u, 0x0000003fu, 0x00000000u, 0x00040020u, - 0x00000044u, 0x00000003u, 0x00000037u, 0x0004003bu, 0x00000044u, 0x00000045u, 0x00000003u, 0x00050036u, - 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000007u, - 0x00000008u, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000016u, 0x00000007u, 0x0004003bu, 0x00000007u, - 0x00000035u, 0x00000007u, 0x00050041u, 0x0000000fu, 0x00000010u, 0x0000000cu, 0x0000000eu, 0x0004003du, - 0x00000009u, 0x00000011u, 0x00000010u, 0x0004003du, 0x00000009u, 0x00000013u, 0x00000012u, 0x00050094u, - 0x00000006u, 0x00000014u, 0x00000011u, 0x00000013u, 0x0003003eu, 0x00000008u, 0x00000014u, 0x00050041u, - 0x0000000fu, 0x00000018u, 0x0000000cu, 0x00000017u, 0x0004003du, 0x00000009u, 0x00000019u, 0x00000018u, - 0x00050041u, 0x0000000fu, 0x0000001bu, 0x0000000cu, 0x0000001au, 0x0004003du, 0x00000009u, 0x0000001cu, - 0x0000001bu, 0x0004003du, 0x00000006u, 0x0000001du, 0x00000008u, 0x00060050u, 0x00000009u, 0x0000001eu, - 0x0000001du, 0x0000001du, 0x0000001du, 0x0008000cu, 0x00000009u, 0x0000001fu, 0x00000001u, 0x0000002eu, - 0x00000019u, 0x0000001cu, 0x0000001eu, 0x0003003eu, 0x00000016u, 0x0000001fu, 0x00050041u, 0x00000026u, - 0x00000027u, 0x00000024u, 0x00000025u, 0x0004003du, 0x00000006u, 0x00000028u, 0x00000027u, 0x000500bau, - 0x00000020u, 0x0000002au, 0x00000028u, 0x00000029u, 0x000300f7u, 0x0000002cu, 0x00000000u, 0x000400fau, - 0x0000002au, 0x0000002bu, 0x0000002cu, 0x000200f8u, 0x0000002bu, 0x00050041u, 0x0000002eu, 0x0000002fu, - 0x0000000cu, 0x0000002du, 0x0004003du, 0x00000006u, 0x00000030u, 0x0000002fu, 0x000500b8u, 0x00000020u, - 0x00000031u, 0x00000030u, 0x00000029u, 0x000200f9u, 0x0000002cu, 0x000200f8u, 0x0000002cu, 0x000700f5u, - 0x00000020u, 0x00000032u, 0x0000002au, 0x00000005u, 0x00000031u, 0x0000002bu, 0x000300f7u, 0x00000034u, - 0x00000000u, 0x000400fau, 0x00000032u, 0x00000033u, 0x00000034u, 0x000200f8u, 0x00000033u, 0x00050041u, - 0x0000002eu, 0x0000003bu, 0x00000039u, 0x0000003au, 0x0004003du, 0x00000006u, 0x0000003cu, 0x0000003bu, - 0x00050083u, 0x00000006u, 0x0000003du, 0x00000036u, 0x0000003cu, 0x0003003eu, 0x00000035u, 0x0000003du, - 0x0004003du, 0x00000006u, 0x0000003eu, 0x00000035u, 0x0008000cu, 0x00000006u, 0x00000040u, 0x00000001u, - 0x0000002bu, 0x0000003eu, 0x0000003fu, 0x00000036u, 0x0003003eu, 0x00000035u, 0x00000040u, 0x0004003du, - 0x00000006u, 0x00000041u, 0x00000035u, 0x0004003du, 0x00000009u, 0x00000042u, 0x00000016u, 0x0005008eu, - 0x00000009u, 0x00000043u, 0x00000042u, 0x00000041u, 0x0003003eu, 0x00000016u, 0x00000043u, 0x000200f9u, - 0x00000034u, 0x000200f8u, 0x00000034u, 0x0004003du, 0x00000009u, 0x00000046u, 0x00000016u, 0x00050051u, - 0x00000006u, 0x00000047u, 0x00000046u, 0x00000000u, 0x00050051u, 0x00000006u, 0x00000048u, 0x00000046u, - 0x00000001u, 0x00050051u, 0x00000006u, 0x00000049u, 0x00000046u, 0x00000002u, 0x00070050u, 0x00000037u, - 0x0000004au, 0x00000047u, 0x00000048u, 0x00000049u, 0x00000036u, 0x0003003eu, 0x00000045u, 0x0000004au, - 0x000100fdu, 0x00010038u, -}; - -// total embedded SPIR-V: 308524 bytes diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/_ops/__init__.py b/integrations/omnidreams/ludus-renderer/ludus_renderer/_ops/__init__.py index 788d61fd8..c81e837d4 100644 --- a/integrations/omnidreams/ludus-renderer/ludus_renderer/_ops/__init__.py +++ b/integrations/omnidreams/ludus-renderer/ludus_renderer/_ops/__init__.py @@ -28,11 +28,6 @@ # Ludus rendering contexts. from .context import LudusCudaTimestampedContext -# Vulkan backend: import is lazy and safe even when Vulkan headers/loader -# are not installed; the ImportError surfaces only when the context is -# actually constructed. -from .context_vk import LudusTimestampedContext - # Primitive data types and packing from .primitives import ( CAMERA_TYPE_BEV, @@ -132,5 +127,4 @@ "_triangulate_polygon_ear_clipping", # Ludus rendering contexts "LudusCudaTimestampedContext", - "LudusTimestampedContext", ] diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/_ops/_plugin_vk.py b/integrations/omnidreams/ludus-renderer/ludus_renderer/_ops/_plugin_vk.py deleted file mode 100644 index 4b5506035..000000000 --- a/integrations/omnidreams/ludus-renderer/ludus_renderer/_ops/_plugin_vk.py +++ /dev/null @@ -1,149 +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. - -"""JIT compilation of the Vulkan torch extension. - -This is a second, optional plugin alongside :mod:`._plugin`. It compiles -the Vulkan rasterizer (``ludus_renderer_vk_plugin``) which depends on -Vulkan headers and the Vulkan loader library at link time. - -Importing this module is lazy and safe -- the actual compilation only -runs the first time :func:`_get_vk_plugin` is called. Failures surface -as ``RuntimeError`` from that call, which the :class:`LudusTimestampedContext` -constructor turns into a friendly :class:`ImportError` with installation -hints. -""" - -from __future__ import annotations - -import logging -import os -import shutil - -import torch -import torch.utils.cpp_extension - -_cached_plugin = None -_log = logging.getLogger("ludus_renderer.vk") - - -def _resolve_vulkan_include() -> list[str]: - """Find Vulkan headers. Try VULKAN_SDK, then common system paths.""" - candidates: list[str] = [] - sdk = os.environ.get("VULKAN_SDK") - if sdk: - for sub in ("include", os.path.join("x86_64", "include")): - p = os.path.join(sdk, sub) - if os.path.isdir(p): - candidates.append(p) - for p in ("/usr/include", "/usr/local/include"): - if os.path.isdir(os.path.join(p, "vulkan")): - candidates.append(p) - return candidates - - -def _resolve_vulkan_libdir() -> list[str]: - """Find the directory containing libvulkan.so.""" - dirs: list[str] = [] - sdk = os.environ.get("VULKAN_SDK") - if sdk: - for sub in ("lib", os.path.join("x86_64", "lib")): - p = os.path.join(sdk, sub) - if os.path.isdir(p): - dirs.append(p) - for p in ("/usr/lib/x86_64-linux-gnu", "/usr/lib64", "/usr/lib", "/usr/local/lib"): - if any( - f.startswith("libvulkan.so") - for f in (os.listdir(p) if os.path.isdir(p) else []) - ): - dirs.append(p) - return dirs - - -def _vulkan_available() -> tuple[bool, str]: - """Check that Vulkan headers and loader library are present.""" - if os.name == "nt": - return False, "Vulkan backend is currently only supported on Linux." - - if not _resolve_vulkan_include(): - return False, ( - "Vulkan headers not found. Install libvulkan-dev " - "(Debian/Ubuntu) or set VULKAN_SDK to the Vulkan SDK root." - ) - if not _resolve_vulkan_libdir() and not shutil.which("vulkaninfo"): - return False, ( - "Vulkan loader (libvulkan.so) not found. Install " - "libvulkan1 (Debian/Ubuntu) or the Vulkan SDK." - ) - return True, "" - - -def _get_vk_plugin(): - """Compile (if needed) and return the Vulkan plugin module. - - Raises ``RuntimeError`` if Vulkan headers/loader are missing, or if - JIT compilation fails. - """ - global _cached_plugin - if _cached_plugin is not None: - return _cached_plugin - - ok, msg = _vulkan_available() - if not ok: - raise RuntimeError(f"Vulkan backend unavailable: {msg}") - - common_opts = ["-DNVDR_TORCH", "-DFW_DO_NOT_OVERRIDE_NEW_DELETE"] - - source_files = [ - "../_cpp/common/common.cpp", - "../_cpp/common/vkutil.cpp", - "../_cpp/render/ludus_timestamped_vk.cpp", - "../_cpp/render/ludus_jpeg.cu", - "../_cpp/bindings/torch_rasterize_vk.cpp", - ] - source_paths = [os.path.join(os.path.dirname(__file__), fn) for fn in source_files] - - extra_include_paths = _resolve_vulkan_include() - ldflags = ["-lcuda", "-lvulkan", "-lnvjpeg"] - for d in _resolve_vulkan_libdir(): - ldflags.insert(0, f"-L{d}") - ldflags.insert(0, f"-Wl,-rpath,{d}") - - # Reset CUDA arch list to let PyTorch detect the installed GPU. - os.environ["TORCH_CUDA_ARCH_LIST"] = "" - - plugin_name = "ludus_renderer_vk_plugin" - - try: - lock_fn = os.path.join( - torch.utils.cpp_extension._get_build_directory(plugin_name, False), "lock" - ) - if os.path.exists(lock_fn): - _log.warning("Stale lock file in Vulkan plugin build dir: %s", lock_fn) - except Exception: - pass - - _log.info("Compiling Vulkan plugin (this may take a minute on first run)...") - _cached_plugin = torch.utils.cpp_extension.load( - name=plugin_name, - sources=source_paths, - extra_include_paths=extra_include_paths, - extra_cflags=common_opts, - extra_cuda_cflags=common_opts + ["-lineinfo"], - extra_ldflags=ldflags, - with_cuda=True, - verbose=True, - ) - return _cached_plugin diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/_ops/context.py b/integrations/omnidreams/ludus-renderer/ludus_renderer/_ops/context.py index 7e2f78ed1..1f49d9ee5 100644 --- a/integrations/omnidreams/ludus-renderer/ludus_renderer/_ops/context.py +++ b/integrations/omnidreams/ludus-renderer/ludus_renderer/_ops/context.py @@ -15,12 +15,14 @@ """Ludus rendering context - ``LudusCudaTimestampedContext``.""" +from collections.abc import Sequence from typing import List, Optional, Tuple import torch from ._plugin import _get_plugin from .primitives import ( + CubePool, FThetaCamera, TimestampedScene, _pack_cameras, @@ -70,12 +72,14 @@ def __init__(self, device=None): with torch.cuda.device(device): cuda_device_idx = torch.cuda.current_device() self.cuda_device_idx = cuda_device_idx - self.cpp_wrapper = _get_plugin().LudusCudaStateWrapper(cuda_device_idx) + with torch.cuda.device(cuda_device_idx): + self.cpp_wrapper = _get_plugin().LudusCudaStateWrapper(cuda_device_idx) self._tessellation_threshold = 1.0 self._max_extrapolation_us = 500_000 self._cameras: List[FThetaCamera] = [] self._camera_intrinsics: Optional[torch.Tensor] = None + self._uniform_intrinsics_cache: dict[tuple[int, int], torch.Tensor] = {} self.needs_vflip = False # CUDA renders top-down (standard image convention) # Per-scene flat buffers @@ -91,6 +95,7 @@ def upload_cameras(self, cameras: List[FThetaCamera]) -> None: device = torch.device(f"cuda:{self.cuda_device_idx}") self._cameras = cameras self._camera_intrinsics = _pack_cameras(cameras, device) + self._uniform_intrinsics_cache.clear() # ------------------------------------------------------------------ def upload_scene(self, scene: TimestampedScene) -> int: @@ -105,6 +110,7 @@ def upload_scene(self, scene: TimestampedScene) -> int: polyline_pool_headers: List[torch.Tensor] = [] polygon_pool_headers: List[torch.Tensor] = [] cube_pool_headers: List[torch.Tensor] = [] + cube_pool_metadata: List[dict[str, int]] = [] ts_offset = 0 int32_offset = 0 @@ -236,6 +242,21 @@ def upload_scene(self, scene: TimestampedScene) -> int: header[10] = float_offset + n_track_poses * 7 + n_cubes * 3 # colors header[11] = pool.render_flags cube_pool_headers.append(header) + cube_pool_metadata.append( + { + "prim_type_id": int(pool.prim_type_id), + "n_cubes": n_cubes, + "n_global_ts": n_global_ts, + "n_track_poses": n_track_poses, + "timestamp_offset": ts_offset, + "track_timestamp_offset": ts_offset + n_global_ts, + "int32_offset": int32_offset, + "translation_offset": float_offset, + "quaternion_offset": float_offset + n_track_poses * 3, + "scale_offset": float_offset + n_track_poses * 7, + "color_offset": float_offset + n_track_poses * 7 + n_cubes * 3, + } + ) timestamps_list.append(pool.timestamps_us.to(device)) timestamps_list.append(pool.track_timestamps_us.to(device)) @@ -302,12 +323,135 @@ def upload_scene(self, scene: TimestampedScene) -> int: "polyline_pools": all_pl_pools, "polygon_pools": all_pg_pools, "cube_pools": all_cb_pools, + "cube_pool_metadata": cube_pool_metadata, + "cube_pool_counts": [ + metadata["n_cubes"] for metadata in cube_pool_metadata + ], + "total_cubes": sum( + metadata["n_cubes"] for metadata in cube_pool_metadata + ), "max_varrays_per_ts_polyline": max_varrays_per_ts_polyline, "max_varrays_per_ts_polygon": max_varrays_per_ts_polygon, } ) return scene_id + def replace_scene(self, scene_id: int, scene: TimestampedScene) -> int: + """Replace one scene slot without invalidating IDs or other scenes.""" + if not 0 <= scene_id < len(self._scenes): + raise IndexError(f"scene_id {scene_id} is out of range") + temporary_id = self.upload_scene(scene) + replacement = self._scenes.pop(temporary_id) + self._scenes[scene_id] = replacement + return scene_id + + def update_cube_pool( + self, scene_id: int, prim_type_id: int, pool: CubePool + ) -> bool: + """Copy a same-topology cube pool into existing CUDA scene buffers. + + Returns ``False`` when topology differs so the caller can perform a + one-time :meth:`replace_scene`. A successful update preserves every + allocation and all static HD-map data. + """ + if not 0 <= scene_id < len(self._scenes): + raise IndexError(f"scene_id {scene_id} is out of range") + scene = self._scenes[scene_id] + candidates = [ + (index, metadata) + for index, metadata in enumerate(scene["cube_pool_metadata"]) + if metadata["prim_type_id"] == int(prim_type_id) + ] + if len(candidates) != 1: + return False + pool_index, _ = candidates[0] + return self.update_cube_pool_at_index(scene_id, pool_index, pool) + + def update_cube_pool_at_index( + self, scene_id: int, pool_index: int, pool: CubePool + ) -> bool: + """Copy a same-topology cube pool into one exact scene slot.""" + if not 0 <= scene_id < len(self._scenes): + raise IndexError(f"scene_id {scene_id} is out of range") + scene = self._scenes[scene_id] + metadata_values = scene["cube_pool_metadata"] + if not 0 <= pool_index < len(metadata_values): + raise IndexError(f"cube pool index {pool_index} is out of range") + metadata = metadata_values[pool_index] + n_cubes = int(pool.scales.shape[0]) + n_global_ts = int(pool.timestamps_us.shape[0]) + n_track_poses = int(pool.translations.shape[0]) + if ( + int(pool.prim_type_id) != metadata["prim_type_id"] + or n_cubes != metadata["n_cubes"] + or n_global_ts != metadata["n_global_ts"] + or n_track_poses != metadata["n_track_poses"] + or tuple(pool.quaternions.shape) != (n_track_poses, 4) + or tuple(pool.scales.shape) != (n_cubes, 3) + or tuple(pool.colors.shape) != (n_cubes, 6) + ): + return False + + timestamps = scene["timestamps"] + int32 = scene["int32"] + floats = scene["floats"] + + def _copy_slice( + destination: torch.Tensor, + offset: int, + source: torch.Tensor, + dtype: torch.dtype, + ) -> None: + flattened = source.to( + device=destination.device, dtype=dtype, non_blocking=True + ).reshape(-1) + destination[offset : offset + flattened.numel()].copy_(flattened) + + _copy_slice( + timestamps, + metadata["timestamp_offset"], + pool.timestamps_us, + torch.int64, + ) + _copy_slice( + timestamps, + metadata["track_timestamp_offset"], + pool.track_timestamps_us, + torch.int64, + ) + _copy_slice( + int32, + metadata["int32_offset"], + pool.cube_ts_prefix_sum, + torch.int32, + ) + _copy_slice( + floats, + metadata["translation_offset"], + pool.translations, + torch.float32, + ) + _copy_slice( + floats, + metadata["quaternion_offset"], + pool.quaternions, + torch.float32, + ) + _copy_slice( + floats, + metadata["scale_offset"], + pool.scales, + torch.float32, + ) + _copy_slice( + floats, + metadata["color_offset"], + pool.colors, + torch.float32, + ) + scene["cube_pools"][pool_index, 11] = int(pool.render_flags) + return True + # ------------------------------------------------------------------ def set_tessellation_threshold(self, threshold: float) -> None: self._tessellation_threshold = threshold @@ -418,26 +562,61 @@ def render( ) -> torch.Tensor: """Render a batch of queries. - Currently only single-query rendering is supported (one scene, one - camera at a time); the batch is dispatched as a Python loop over - the per-query CUDA kernel call. + Queries sharing a scene and camera type are submitted as one + multi-camera CUDA render with per-camera timestamps. Query metadata + crosses to the host once for grouping instead of synchronizing scalar + ``.item()`` calls or entering the native renderer for every image. """ assert self._camera_intrinsics is not None, "call upload_cameras first" n = scene_ids.shape[0] - all_images = [] + if n == 0: + height, width = resolution + return torch.empty( + (0, height, width, 4), + dtype=torch.uint8, + device=camera_poses.device, + ) - plugin = _get_plugin() + metadata = ( + torch.stack( + ( + scene_ids.to(dtype=torch.int64), + camera_ids.to(dtype=torch.int64), + timestamps_us.to(dtype=torch.int64), + camera_type_ids.to(dtype=torch.int64), + ), + dim=1, + ) + .detach() + .cpu() + .tolist() + ) - for i in range(n): - sid = int(scene_ids[i].item()) - cid = int(camera_ids[i].item()) - ts_val = int(timestamps_us[i].item()) - cam_type = int(camera_type_ids[i].item()) + groups: dict[tuple[int, int], list[tuple[int, int, int]]] = {} + for output_index, (sid, cid, ts_val, cam_type) in enumerate(metadata): + groups.setdefault((sid, cam_type), []).append((output_index, cid, ts_val)) + all_images: list[Optional[torch.Tensor]] = [None] * n + + plugin = _get_plugin() + + for (sid, cam_type), members in groups.items(): sd = self._scenes[sid] - cam_intrinsics = self._camera_intrinsics[cid : cid + 1].contiguous() - pose = camera_poses[i : i + 1].contiguous() + output_indices = torch.tensor( + [member[0] for member in members], + dtype=torch.int64, + device=camera_poses.device, + ) + camera_indices = torch.tensor( + [member[1] for member in members], + dtype=torch.int64, + device=self._camera_intrinsics.device, + ) + cam_intrinsics = self._camera_intrinsics.index_select( + 0, camera_indices + ).contiguous() + pose = camera_poses.index_select(0, output_indices).contiguous() img = plugin.ludus_render_fwd_cuda_timestamped( self.cpp_wrapper, @@ -449,7 +628,9 @@ def render( sd["polyline_pools"], sd["polygon_pools"], sd["cube_pools"], - ts_val, + sd["total_cubes"], + sd["cube_pool_counts"], + [member[2] for member in members], self._max_extrapolation_us, sd["max_varrays_per_ts_polyline"], sd["max_varrays_per_ts_polygon"], @@ -459,6 +640,73 @@ def render( resolution, self._tessellation_threshold, ) - all_images.append(img) + for group_index, (output_index, _, _) in enumerate(members): + all_images[output_index] = img[group_index : group_index + 1] + + return torch.cat([image for image in all_images if image is not None], dim=0) - return torch.cat(all_images, dim=0) + def render_uniform( + self, + *, + scene_id: int, + camera_id: int, + timestamps_us: Sequence[int] | torch.Tensor, + camera_type_id: int, + camera_poses: torch.Tensor, + resolution: Tuple[int, int], + ) -> torch.Tensor: + """Render a uniform query batch without allocating grouping metadata.""" + assert self._camera_intrinsics is not None, "call upload_cameras first" + if not 0 <= scene_id < len(self._scenes): + raise IndexError(f"scene_id {scene_id} is out of range") + if not 0 <= camera_id < len(self._cameras): + raise IndexError(f"camera_id {camera_id} is out of range") + + frame_count = int(camera_poses.shape[0]) + if len(timestamps_us) != frame_count: + raise ValueError("timestamps_us must match the camera pose count") + if frame_count == 0: + height, width = resolution + return torch.empty( + (0, height, width, 4), + dtype=torch.uint8, + device=camera_poses.device, + ) + if isinstance(timestamps_us, torch.Tensor): + timestamp_values = timestamps_us.detach().cpu().tolist() + else: + timestamp_values = [int(timestamp) for timestamp in timestamps_us] + + cache_key = (camera_id, frame_count) + cam_intrinsics = self._uniform_intrinsics_cache.get(cache_key) + if cam_intrinsics is None: + cam_intrinsics = ( + self._camera_intrinsics[camera_id : camera_id + 1] + .expand(frame_count, -1) + .contiguous() + ) + self._uniform_intrinsics_cache[cache_key] = cam_intrinsics + + scene = self._scenes[scene_id] + return _get_plugin().ludus_render_fwd_cuda_timestamped( + self.cpp_wrapper, + scene["timestamps"], + scene["int32"], + scene["vertices"], + scene["triangles"], + scene["floats"], + scene["polyline_pools"], + scene["polygon_pools"], + scene["cube_pools"], + scene["total_cubes"], + scene["cube_pool_counts"], + timestamp_values, + self._max_extrapolation_us, + scene["max_varrays_per_ts_polyline"], + scene["max_varrays_per_ts_polygon"], + camera_type_id, + cam_intrinsics, + camera_poses.contiguous(), + resolution, + self._tessellation_threshold, + ) diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/_ops/context_vk.py b/integrations/omnidreams/ludus-renderer/ludus_renderer/_ops/context_vk.py deleted file mode 100644 index 8c2611508..000000000 --- a/integrations/omnidreams/ludus-renderer/ludus_renderer/_ops/context_vk.py +++ /dev/null @@ -1,735 +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. - -"""Ludus Vulkan timestamped rendering context. - -:class:`LudusTimestampedContext` is the Vulkan-backed counterpart to -:class:`LudusCudaTimestampedContext`. They expose the same public method -surface so callers can swap them at runtime. - -Compared to the CUDA backend: - -- Scene data is uploaded once into GPU-resident Vulkan SSBOs (rather than - cached in Python tensors and passed to the kernel on every render). -- Rendering of a query batch is a single Vulkan submission instead of one - CUDA kernel launch per query, so larger batches scale much better. -- Geometry is generated procedurally in task/mesh shaders rather than in - CUDA kernels. - -The Vulkan extension is built on demand the first time you instantiate -this class. If the Vulkan loader or headers are missing, the constructor -raises :class:`ImportError` with an actionable hint. -""" - -from __future__ import annotations - -from typing import List, Optional, Tuple - -import torch - -from ._plugin_vk import _get_vk_plugin -from .context import _compute_element_aabbs -from .primitives import ( - FThetaCamera, - TimestampedScene, - _pack_cameras, -) - - -def _max_varrays_per_ts(timestamped_varrays_prefix_sum: torch.Tensor) -> int: - """Max number of varrays present at any single timestamp in a pool. - - The prefix sum is cumulative across timestamps, so consecutive differences - give the per-timestamp varray counts; the max drives the mesh-task dispatch - stride (mirrors the CUDA backend's ``max_varrays_per_ts_*``). - """ - ps = timestamped_varrays_prefix_sum - if ps.numel() == 0: - return 0 - diffs = torch.diff(ps, prepend=torch.zeros(1, dtype=ps.dtype, device=ps.device)) - return int(diffs.max().item()) - - -class LudusTimestampedContext: - """Vulkan context for timestamped scene rendering. - - All timestamp search, element extraction, color lookup, and procedural - geometry generation happen on the GPU in task/mesh shaders. - - Example:: - - ctx = LudusTimestampedContext(device="cuda") - ctx.upload_cameras(cameras) - scene_id = ctx.upload_scene(scene) - - queries = [(scene_id, cam_id, ts_us, CAMERA_TYPE_REGULAR)] - poses = scene.get_ego_poses_at_timestamps(...) - images = ctx.render_batch(queries, poses, resolution=(720, 1280)) - """ - - # ------------------------------------------------------------------ - # Construction - # ------------------------------------------------------------------ - def __init__(self, device=None): - if device is None: - cuda_device_idx = torch.cuda.current_device() - else: - with torch.cuda.device(device): - cuda_device_idx = torch.cuda.current_device() - self.cuda_device_idx = cuda_device_idx - self._device = torch.device(f"cuda:{cuda_device_idx}") - - try: - plugin = _get_vk_plugin() - except RuntimeError as exc: - raise ImportError(str(exc)) from exc - - self._plugin = plugin - self.cpp_wrapper = plugin.LudusTimestampedVkStateWrapper(cuda_device_idx) - - # Some defaults that the wrapper sets but Python should track. - self._tessellation_threshold = 1.0 - - self._cameras: List[FThetaCamera] = [] - self._camera_intrinsics: Optional[torch.Tensor] = None - - # Track the set of scene ids known to the C++ side so callers can - # iterate / debug. - self._scene_ids: List[int] = [] - - # Running SSBO base offsets per scene (mirror the C++ *Used counters), - # so scene N reads its own data, not scene 0's. Reset by clear_scenes. - self._global_ts_off = 0 - self._global_i32_off = 0 - self._global_vert_off = 0 - self._global_tri_off = 0 - self._global_float_off = 0 - self._global_pl_pool_off = 0 - self._global_pg_pool_off = 0 - self._global_cb_pool_off = 0 - - # GL/Vulkan render their layered framebuffer top-down by default; - # Vulkan's viewport y-flip in the renderer matches the CUDA backend's - # output convention so callers don't need to vflip. - self.needs_vflip = False - - # ------------------------------------------------------------------ - @property - def max_batch_size(self) -> int: - """Maximum number of queries the backend can render in one call.""" - return int(self.cpp_wrapper.get_max_batch_size()) - - # ------------------------------------------------------------------ - def upload_cameras(self, cameras: List[FThetaCamera]) -> None: - """Upload camera intrinsics to the GPU.""" - self._cameras = list(cameras) - self._camera_intrinsics = _pack_cameras(cameras, self._device) - self.cpp_wrapper.upload_cameras(self._camera_intrinsics) - - # ------------------------------------------------------------------ - # Pool packers: each builds 16-uint32 row matching the C++ struct - # layout (`ludus_types.h`) so the binding can `reinterpret_cast` rows - # into structured pool descriptors. - # ------------------------------------------------------------------ - @staticmethod - def _pack_polyline_pool_row( - num_timestamps: int, - num_varrays: int, - num_vertices: int, - prim_type_id: int, - ts_offset: int, - ts_varrays_ps_offset: int, - varrays_ps_offset: int, - vertices_offset: int, - aabb_offset: int, - ) -> torch.Tensor: - row = torch.zeros(16, dtype=torch.uint32) - row[0] = num_timestamps - row[1] = num_varrays - row[2] = num_vertices - row[3] = prim_type_id - row[4] = ts_offset - row[5] = ts_varrays_ps_offset - row[6] = varrays_ps_offset - row[7] = vertices_offset - row[8] = aabb_offset - return row - - @staticmethod - def _pack_polygon_pool_row( - num_timestamps: int, - num_varrays: int, - num_vertices: int, - num_triangles: int, - prim_type_id: int, - ts_offset: int, - ts_varrays_ps_offset: int, - varrays_ps_offset: int, - tri_ps_offset: int, - vertices_offset: int, - triangles_offset: int, - aabb_offset: int, - ) -> torch.Tensor: - row = torch.zeros(16, dtype=torch.uint32) - row[0] = num_timestamps - row[1] = num_varrays - row[2] = num_vertices - row[3] = num_triangles - row[4] = prim_type_id - row[5] = ts_offset - row[6] = ts_varrays_ps_offset - row[7] = varrays_ps_offset - row[8] = tri_ps_offset - row[9] = vertices_offset - row[10] = triangles_offset - row[11] = aabb_offset - return row - - @staticmethod - def _pack_cube_pool_row( - num_cubes: int, - num_timestamps: int, - num_track_poses: int, - prim_type_id: int, - ts_offset: int, - cube_ts_ps_offset: int, - track_ts_offset: int, - translations_offset: int, - quaternions_offset: int, - scales_offset: int, - colors_offset: int, - render_flags: int, - ) -> torch.Tensor: - row = torch.zeros(16, dtype=torch.uint32) - row[0] = num_cubes - row[1] = num_timestamps - row[2] = num_track_poses - row[3] = prim_type_id - row[4] = ts_offset - row[5] = cube_ts_ps_offset - row[6] = track_ts_offset - row[7] = translations_offset - row[8] = quaternions_offset - row[9] = scales_offset - row[10] = colors_offset - row[11] = render_flags - return row - - @staticmethod - def _pack_scene_desc( - num_pl_pools: int, - pl_pools_offset: int, - num_pg_pools: int, - pg_pools_offset: int, - num_cb_pools: int, - cb_pools_offset: int, - ts_buf_offset: int, - int32_buf_offset: int, - vert_buf_offset: int, - tri_buf_offset: int, - pose_buf_offset: int, - float_buf_offset: int, - ) -> torch.Tensor: - # 128-byte scene descriptor = 32 uint32. - row = torch.zeros(32, dtype=torch.uint32) - row[0] = num_pl_pools - row[1] = pl_pools_offset - row[2] = num_pg_pools - row[3] = pg_pools_offset - row[4] = num_cb_pools - row[5] = cb_pools_offset - row[6] = ts_buf_offset - row[7] = int32_buf_offset - row[8] = vert_buf_offset - row[9] = tri_buf_offset - row[10] = pose_buf_offset - row[11] = float_buf_offset - return row - - # ------------------------------------------------------------------ - def upload_scene(self, scene: TimestampedScene) -> int: - """Pack the scene and upload it to GPU SSBOs in a single call. - - Returns the scene id assigned by the backend. - """ - device = self._device - - timestamps_list: List[torch.Tensor] = [] - int32_list: List[torch.Tensor] = [] - vertices_list: List[torch.Tensor] = [] - triangles_list: List[torch.Tensor] = [] - float_list: List[torch.Tensor] = [] - - polyline_pool_rows: List[torch.Tensor] = [] - polygon_pool_rows: List[torch.Tensor] = [] - cube_pool_rows: List[torch.Tensor] = [] - - # Per-scene local offsets. The C++ side appends each scene's data - # to the global SSBOs and patches absolute offsets later via the - # scene descriptor's *_buffer_offset fields. - ts_off = 0 - i32_off = 0 - vert_off = 0 - tri_off = 0 - # Start float_off at 1 (and prepend a dummy float below) so that the - # first pool never gets aabb_offset == 0. The task shaders use 0 as - # a sentinel meaning "no AABB available, skip culling", so a real - # aabb located at offset 0 silently disables culling for that pool, - # which lets behind-camera polygons through and produces giant - # garbage triangles when they straddle the camera plane. - float_off = 1 - float_list.append(torch.zeros(1, dtype=torch.float32, device=device)) - - # Max varrays present at any single timestamp, per family. Drives the - # per-pool mesh-task dispatch stride (u_max_varrays_per_pool) so pools - # larger than this are not silently truncated. - max_varrays_per_ts_polyline = 0 - max_varrays_per_ts_polygon = 0 - - # ---------- polyline pools ---------- - for pool in scene.polyline_pools: - n_ts = int(pool.timestamps_us.shape[0]) - n_var = int(pool.varrays_prefix_sum.shape[0]) - n_v = int(pool.vertices.shape[0]) - max_varrays_per_ts_polyline = max( - max_varrays_per_ts_polyline, - _max_varrays_per_ts(pool.timestamped_varrays_prefix_sum), - ) - - aabbs = _compute_element_aabbs( - pool.vertices, pool.varrays_prefix_sum, device - ) - - row = self._pack_polyline_pool_row( - num_timestamps=n_ts, - num_varrays=n_var, - num_vertices=n_v, - prim_type_id=pool.prim_type_id, - ts_offset=ts_off, - ts_varrays_ps_offset=i32_off, - varrays_ps_offset=i32_off + n_ts, - vertices_offset=vert_off, - aabb_offset=float_off, - ) - polyline_pool_rows.append(row) - - timestamps_list.append(pool.timestamps_us.to(device, dtype=torch.int64)) - int32_list.append( - pool.timestamped_varrays_prefix_sum.to(device, dtype=torch.int32) - ) - int32_list.append(pool.varrays_prefix_sum.to(device, dtype=torch.int32)) - - # Vertices are stored as Vertex (vec3 + pad) in the SSBO. - v_padded = torch.zeros(n_v, 4, dtype=torch.float32, device=device) - v_padded[:, :3] = pool.vertices.to(device, dtype=torch.float32) - vertices_list.append(v_padded) - - float_list.append(aabbs) - - ts_off += n_ts - i32_off += n_ts + n_var - vert_off += n_v - float_off += int(aabbs.numel()) - - # ---------- polygon pools ---------- - for pool in scene.polygon_pools: - n_ts = int(pool.timestamps_us.shape[0]) - n_var = int(pool.varrays_prefix_sum.shape[0]) - n_v = int(pool.vertices.shape[0]) - n_t = int(pool.triangles.shape[0]) - max_varrays_per_ts_polygon = max( - max_varrays_per_ts_polygon, - _max_varrays_per_ts(pool.timestamped_varrays_prefix_sum), - ) - - aabbs = _compute_element_aabbs( - pool.vertices, pool.varrays_prefix_sum, device - ) - - row = self._pack_polygon_pool_row( - num_timestamps=n_ts, - num_varrays=n_var, - num_vertices=n_v, - num_triangles=n_t, - prim_type_id=pool.prim_type_id, - ts_offset=ts_off, - ts_varrays_ps_offset=i32_off, - varrays_ps_offset=i32_off + n_ts, - tri_ps_offset=i32_off + n_ts + n_var, - vertices_offset=vert_off, - triangles_offset=tri_off, - aabb_offset=float_off, - ) - polygon_pool_rows.append(row) - - timestamps_list.append(pool.timestamps_us.to(device, dtype=torch.int64)) - int32_list.append( - pool.timestamped_varrays_prefix_sum.to(device, dtype=torch.int32) - ) - int32_list.append(pool.varrays_prefix_sum.to(device, dtype=torch.int32)) - int32_list.append(pool.triangle_prefix_sum.to(device, dtype=torch.int32)) - - v_padded = torch.zeros(n_v, 4, dtype=torch.float32, device=device) - v_padded[:, :3] = pool.vertices.to(device, dtype=torch.float32) - vertices_list.append(v_padded) - - t_padded = torch.zeros(n_t, 4, dtype=torch.int32, device=device) - t_padded[:, :3] = pool.triangles.to(device, dtype=torch.int32) - triangles_list.append(t_padded) - - float_list.append(aabbs) - - ts_off += n_ts - i32_off += n_ts + 2 * n_var - vert_off += n_v - tri_off += n_t - float_off += int(aabbs.numel()) - - # ---------- cube pools ---------- - for pool in scene.cube_pools or []: - n_global_ts = int(pool.timestamps_us.shape[0]) - n_cubes = int(pool.scales.shape[0]) - n_track = int(pool.translations.shape[0]) - - row = self._pack_cube_pool_row( - num_cubes=n_cubes, - num_timestamps=n_global_ts, - num_track_poses=n_track, - prim_type_id=pool.prim_type_id, - ts_offset=ts_off, - cube_ts_ps_offset=i32_off, - track_ts_offset=ts_off + n_global_ts, - translations_offset=float_off, - quaternions_offset=float_off + n_track * 3, - scales_offset=float_off + n_track * 7, - colors_offset=float_off + n_track * 7 + n_cubes * 3, - render_flags=int(pool.render_flags), - ) - cube_pool_rows.append(row) - - timestamps_list.append(pool.timestamps_us.to(device, dtype=torch.int64)) - timestamps_list.append( - pool.track_timestamps_us.to(device, dtype=torch.int64) - ) - int32_list.append(pool.cube_ts_prefix_sum.to(device, dtype=torch.int32)) - float_list.append( - pool.translations.to(device, dtype=torch.float32).reshape(-1) - ) - float_list.append( - pool.quaternions.to(device, dtype=torch.float32).reshape(-1) - ) - float_list.append(pool.scales.to(device, dtype=torch.float32).reshape(-1)) - float_list.append(pool.colors.to(device, dtype=torch.float32).reshape(-1)) - - ts_off += n_global_ts + n_track - i32_off += n_cubes - float_off += n_track * 7 + n_cubes * 9 - - # ---------- concatenate flat buffers ---------- - all_timestamps = ( - torch.cat(timestamps_list).contiguous() - if timestamps_list - else torch.empty(0, dtype=torch.int64, device=device) - ) - all_int32 = ( - torch.cat(int32_list).contiguous() - if int32_list - else torch.empty(0, dtype=torch.int32, device=device) - ) - all_vertices = ( - torch.cat(vertices_list).contiguous() - if vertices_list - else torch.empty((0, 4), dtype=torch.float32, device=device) - ) - all_triangles = ( - torch.cat(triangles_list).contiguous() - if triangles_list - else torch.empty((0, 4), dtype=torch.int32, device=device) - ) - all_floats = ( - torch.cat(float_list).contiguous() - if float_list - else torch.empty(0, dtype=torch.float32, device=device) - ) - - # Pool descriptor tensors (16 uint32 per row, viewed as raw bytes - # so the C++ side can reinterpret_cast). - def _pools_to_bytes( - rows: List[torch.Tensor], stride_u32: int = 16 - ) -> torch.Tensor: - if not rows: - return torch.empty( - (0, stride_u32 * 4), dtype=torch.uint8, device=device - ) - stacked = torch.stack(rows).to(device).contiguous() # [N, 16] uint32 - return stacked.view(torch.uint8).reshape(-1, stride_u32 * 4).contiguous() - - polyline_pool_bytes = _pools_to_bytes(polyline_pool_rows, stride_u32=16) - polygon_pool_bytes = _pools_to_bytes(polygon_pool_rows, stride_u32=16) - cube_pool_bytes = _pools_to_bytes(cube_pool_rows, stride_u32=16) - - # Scene descriptor (128 bytes). - # This scene's base offset in each shared SSBO (0 for the first scene). - # Shaders index as scene._offset + pool._offset. - scene_desc_row = self._pack_scene_desc( - num_pl_pools=len(polyline_pool_rows), - pl_pools_offset=self._global_pl_pool_off, - num_pg_pools=len(polygon_pool_rows), - pg_pools_offset=self._global_pg_pool_off, - num_cb_pools=len(cube_pool_rows), - cb_pools_offset=self._global_cb_pool_off, - ts_buf_offset=self._global_ts_off, - int32_buf_offset=self._global_i32_off, - vert_buf_offset=self._global_vert_off, - tri_buf_offset=self._global_tri_off, - pose_buf_offset=0, - float_buf_offset=self._global_float_off, - ) - scene_desc = scene_desc_row.to(device).contiguous().view(torch.uint8) - - # Empty CameraPose tensor -- this backend uses per-query camera - # poses uploaded at render time, not per-scene poses. - empty_poses = torch.empty((0, 16), dtype=torch.float32, device=device) - - # Per-pool max obstacle count drives one dispatch per pool. - max_obstacles = max( - (int(p.scales.shape[0]) for p in (scene.cube_pools or [])), default=0 - ) - - scene_id = int( - self.cpp_wrapper.upload_scene( - scene_desc, - polyline_pool_bytes, - polygon_pool_bytes, - cube_pool_bytes, - max_obstacles, - max_varrays_per_ts_polyline, - max_varrays_per_ts_polygon, - all_timestamps, - all_int32, - all_vertices, - all_triangles, - empty_poses, - all_floats, - ) - ) - - # Advance the cursors past this scene for the next upload_scene. - self._global_ts_off += ts_off - self._global_i32_off += i32_off - self._global_vert_off += vert_off - self._global_tri_off += tri_off - self._global_float_off += float_off - self._global_pl_pool_off += len(polyline_pool_rows) - self._global_pg_pool_off += len(polygon_pool_rows) - self._global_cb_pool_off += len(cube_pool_rows) - - self._scene_ids.append(scene_id) - return scene_id - - # ------------------------------------------------------------------ - def remove_scene(self, scene_id: int) -> None: - self.cpp_wrapper.remove_scene(int(scene_id)) - if scene_id in self._scene_ids: - self._scene_ids.remove(scene_id) - - def clear_scenes(self) -> None: - self.cpp_wrapper.clear_scenes() - self._scene_ids.clear() - self._global_ts_off = 0 - self._global_i32_off = 0 - self._global_vert_off = 0 - self._global_tri_off = 0 - self._global_float_off = 0 - self._global_pl_pool_off = 0 - self._global_pg_pool_off = 0 - self._global_cb_pool_off = 0 - - # ------------------------------------------------------------------ - # Render-tuning settings (mirror LudusCudaTimestampedContext) - # ------------------------------------------------------------------ - def set_tessellation_threshold(self, threshold: float) -> None: - self._tessellation_threshold = float(threshold) - self.cpp_wrapper.set_tessellation_threshold(float(threshold)) - - def set_depth_scaling(self, enabled: bool = True) -> None: - self.cpp_wrapper.set_depth_scaling(1.0 if enabled else 0.0) - - def set_resolution_scale( - self, - width: int, - height: int, - reference_width: int = 1280, - reference_height: int = 720, - ) -> None: - scale = min(width / reference_width, height / reference_height) - self.cpp_wrapper.set_resolution_scale(float(scale)) - - def set_cull_radius(self, scale: float = 1.5) -> None: - self.cpp_wrapper.set_cull_radius(float(scale)) - - def set_msaa_samples(self, samples: int) -> None: - self.cpp_wrapper.set_msaa_samples(int(samples)) - - def set_line_widths( - self, - polyline_regular: float = 0.0, - polyline_bev: float = 0.0, - ego_traj_regular: float = 0.0, - ego_traj_bev: float = 0.0, - wireframe: float = 0.0, - ) -> None: - self.cpp_wrapper.set_line_widths( - float(polyline_regular), - float(polyline_bev), - float(ego_traj_regular), - float(ego_traj_bev), - float(wireframe), - ) - - def set_max_tessellation_levels( - self, - polyline: int = 4, - polygon: int = 3, - cube: int = 3, - ) -> None: - self.cpp_wrapper.set_max_tessellation_levels( - int(polyline), int(polygon), int(cube) - ) - - def upload_color_palette(self, colors: dict) -> None: - """Upload a custom color palette. - - ``colors`` maps ``prim_type_id`` (int) to an RGBA tuple - ``(r, g, b, a)`` with each component in [0, 255]. Internally the - Vulkan binding accepts either int32 packed RGBA8 or float [N,4] - in [0,1]; we send float so the shader can use it as ``vec4``. - """ - max_prim = max(colors.keys()) + 1 if colors else 0 - palette = torch.zeros((max_prim, 4), dtype=torch.float32) - for prim_id, rgba in colors.items(): - r, g, b = int(rgba[0]), int(rgba[1]), int(rgba[2]) - a = int(rgba[3]) if len(rgba) > 3 else 255 - palette[prim_id, 0] = r / 255.0 - palette[prim_id, 1] = g / 255.0 - palette[prim_id, 2] = b / 255.0 - palette[prim_id, 3] = a / 255.0 - self.cpp_wrapper.upload_color_palette(palette.to(self._device)) - - # ------------------------------------------------------------------ - # Render - # ------------------------------------------------------------------ - def _pack_queries( - self, - scene_ids: torch.Tensor, - camera_ids: torch.Tensor, - timestamps_us: torch.Tensor, - camera_type_ids: torch.Tensor, - ) -> torch.Tensor: - """Pack into ``RenderQuery[]`` (32 bytes each, returned as uint8).""" - n = int(scene_ids.shape[0]) - # Layout (32 bytes per query): - # u32 scene_id offset 0..4 - # u32 camera_id offset 4..8 - # i64 timestamp_us offset 8..16 - # u32 camera_type_id offset 16..20 - # u32 pad[3] offset 20..32 - # - # We assemble the 32-byte record from two CPU int32/int64 columns to - # avoid relying on `torch.uint32` / view-dtype machinery (which has - # historically been finicky across torch versions). The final - # tensor is then copied to the target device in one go. - ints = torch.zeros((n, 5), dtype=torch.int32) - ints[:, 0] = scene_ids.to("cpu", dtype=torch.int32) - ints[:, 1] = camera_ids.to("cpu", dtype=torch.int32) - # Skip slots 2..3 (int64 timestamp - filled separately). - ints[:, 4] = camera_type_ids.to("cpu", dtype=torch.int32) - ts = timestamps_us.to("cpu", dtype=torch.int64) - - buf = torch.zeros(n, 32, dtype=torch.uint8) - buf_i32_view = buf.view(torch.int32).reshape(n, 8) - buf_i64_view = buf.view(torch.int64).reshape(n, 4) - buf_i32_view[:, 0] = ints[:, 0] # scene_id - buf_i32_view[:, 1] = ints[:, 1] # camera_id - buf_i64_view[:, 1] = ts # timestamp_us - buf_i32_view[:, 4] = ints[:, 4] # camera_type_id - return buf.to(self._device).contiguous() - - def render( - self, - scene_ids: torch.Tensor, - camera_ids: torch.Tensor, - timestamps_us: torch.Tensor, - camera_type_ids: torch.Tensor, - camera_poses: torch.Tensor, - resolution: Tuple[int, int], - ) -> torch.Tensor: - """Render a batch of queries with one Vulkan submission.""" - if self._camera_intrinsics is None: - raise RuntimeError("call upload_cameras() before render()") - n = int(scene_ids.shape[0]) - if n == 0: - h, w = resolution - return torch.empty((0, h, w, 4), dtype=torch.uint8, device=self._device) - - queries = self._pack_queries( - scene_ids.to(self._device), - camera_ids.to(self._device), - timestamps_us.to(self._device), - camera_type_ids.to(self._device), - ) - poses = camera_poses.to(self._device, dtype=torch.float32).contiguous() - return self._plugin.ludus_timestamped_render_batch( - self.cpp_wrapper, queries, poses, resolution - ) - - def render_batch( - self, - queries: List[Tuple[int, int, int, int]], - camera_poses: torch.Tensor, - resolution: Tuple[int, int], - ) -> torch.Tensor: - """Render a batch of queries (tuple-based API). Mirrors - :meth:`LudusCudaTimestampedContext.render_batch`.""" - device = camera_poses.device if camera_poses.is_cuda else self._device - - # Build each column on the host and copy once; per-element GPU writes - # would force a host/device sync per query. - def _ts(q): - ts = q[2] - return int(ts.item() if isinstance(ts, torch.Tensor) else ts) - - scene_ids = torch.tensor( - [int(q[0]) for q in queries], dtype=torch.int32, device=device - ) - camera_ids = torch.tensor( - [int(q[1]) for q in queries], dtype=torch.int32, device=device - ) - timestamps_us = torch.tensor( - [_ts(q) for q in queries], dtype=torch.int64, device=device - ) - camera_type_ids = torch.tensor( - [int(q[3]) if len(q) > 3 else 0 for q in queries], - dtype=torch.int32, - device=device, - ) - return self.render( - scene_ids, - camera_ids, - timestamps_us, - camera_type_ids, - camera_poses, - resolution, - ) diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/_physx_native.py b/integrations/omnidreams/ludus-renderer/ludus_renderer/_physx_native.py new file mode 100644 index 000000000..8ddd2da22 --- /dev/null +++ b/integrations/omnidreams/ludus-renderer/ludus_renderer/_physx_native.py @@ -0,0 +1,241 @@ +# 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. + +"""Build and load Ludus's standalone PhysX extension.""" + +from __future__ import annotations + +import hashlib +import importlib.util +import os +import platform +import shutil +import subprocess +import sys +import tempfile +import time +import urllib.request +import zipfile +from collections.abc import Iterator +from contextlib import contextmanager +from pathlib import Path +from types import ModuleType + +import torch + +_PHYSX_VERSION = "5.9.0" +_PHYSX_COMMIT = "517a0073715120e114ee055b63b26c95e00d9039" +_PHYSX_ARCHIVE_URL = ( + f"https://github.com/NVIDIA-Omniverse/PhysX/archive/{_PHYSX_COMMIT}.zip" +) +_PHYSX_ARCHIVE_SHA256 = ( + "b2f713bac94e2655614b1c8c34ba18750673d5d780fba19e0a23a21bda5695bb" +) +_MODULE_NAME = "ludus_physx_native" +_CACHED_MODULE: ModuleType | None = None + + +def _cache_root() -> Path: + override = os.environ.get("LUDUS_PHYSX_CACHE") + if override: + return Path(override).expanduser().resolve() + if os.name == "nt": + base = Path(os.environ.get("LOCALAPPDATA", tempfile.gettempdir())) + else: + base = Path(os.environ.get("XDG_CACHE_HOME", Path.home() / ".cache")) + return base / "ludus-renderer" / f"physx-{_PHYSX_VERSION}" + + +def _download_source(cache_root: Path) -> Path: + source_root = cache_root / "source" / f"PhysX-{_PHYSX_COMMIT}" / "physx" + if source_root.is_dir(): + return source_root + cache_root.mkdir(parents=True, exist_ok=True) + archive = cache_root / f"PhysX-{_PHYSX_VERSION}.zip" + if not archive.is_file() or _sha256(archive) != _PHYSX_ARCHIVE_SHA256: + partial = archive.with_suffix(".zip.partial") + partial.unlink(missing_ok=True) + urllib.request.urlretrieve(_PHYSX_ARCHIVE_URL, partial) + digest = _sha256(partial) + if digest != _PHYSX_ARCHIVE_SHA256: + partial.unlink(missing_ok=True) + raise RuntimeError( + "PhysX source archive failed SHA-256 verification: " + f"expected {_PHYSX_ARCHIVE_SHA256}, received {digest}" + ) + partial.replace(archive) + extraction = cache_root / "source.partial" + if extraction.exists(): + shutil.rmtree(extraction) + extraction.mkdir() + with zipfile.ZipFile(archive) as source_zip: + source_zip.extractall(extraction) + destination = cache_root / "source" + if destination.exists(): + shutil.rmtree(destination) + extraction.replace(destination) + if not source_root.is_dir(): + raise RuntimeError("PhysX archive did not contain the expected source tree") + return source_root + + +def _sha256(path: Path) -> str: + digest = hashlib.sha256() + with path.open("rb") as source: + for chunk in iter(lambda: source.read(1024 * 1024), b""): + digest.update(chunk) + return digest.hexdigest() + + +def _native_source_dir() -> Path: + return Path(__file__).resolve().parent / "_cpp" / "physx" + + +@contextmanager +def _build_lock(cache_root: Path) -> Iterator[None]: + """Serialize first-use builds that share the platform cache.""" + cache_root.mkdir(parents=True, exist_ok=True) + lock_path = cache_root / "build.lock" + deadline = time.monotonic() + 600.0 + descriptor: int | None = None + while descriptor is None: + try: + descriptor = os.open( + lock_path, + os.O_CREAT | os.O_EXCL | os.O_WRONLY, + 0o600, + ) + os.write(descriptor, f"{os.getpid()}\n".encode()) + except FileExistsError: + try: + stale = time.time() - lock_path.stat().st_mtime > 1_800.0 + except FileNotFoundError: + continue + if stale: + lock_path.unlink(missing_ok=True) + continue + if time.monotonic() >= deadline: + raise TimeoutError( + f"timed out waiting for the PhysX build lock at {lock_path}" + ) from None + time.sleep(0.1) + try: + yield + finally: + os.close(descriptor) + lock_path.unlink(missing_ok=True) + + +def _module_path(output_dir: Path) -> Path | None: + suffixes = ("*.pyd",) if os.name == "nt" else ("*.so",) + candidates = [path for pattern in suffixes for path in output_dir.glob(pattern)] + return max(candidates, key=lambda path: path.stat().st_mtime, default=None) + + +def _needs_rebuild(module_path: Path | None) -> bool: + if module_path is None: + return True + newest_source = max( + path.stat().st_mtime + for path in _native_source_dir().iterdir() + if path.suffix in {".cpp", ".txt"} + ) + return module_path.stat().st_mtime < newest_source + + +def _configure_and_build(cache_root: Path, physx_root: Path) -> Path: + cmake = shutil.which("cmake") + if cmake is None: + raise RuntimeError( + "ludus-renderer requires the CMake Python package to build native PhysX" + ) + output_dir = cache_root / "module" + build_dir = cache_root / f"build-{platform.system().lower()}-{platform.machine()}" + output_dir.mkdir(parents=True, exist_ok=True) + torch_include = Path(torch.__file__).resolve().parent / "include" + configure = [ + cmake, + "-S", + str(_native_source_dir()), + "-B", + str(build_dir), + f"-DPHYSX_ROOT_DIR={physx_root.as_posix()}", + f"-DPYBIND11_INCLUDE_DIR={torch_include.as_posix()}", + f"-DLUDUS_MODULE_OUTPUT_DIR={output_dir.as_posix()}", + ] + if os.name == "nt": + dummy_freeglut = cache_root / "dummy-freeglut" / "win64" + dummy_freeglut.mkdir(parents=True, exist_ok=True) + for name in ("freeglut.dll", "freeglutd.dll"): + (dummy_freeglut / name).touch() + configure.extend( + [ + "-G", + "Visual Studio 17 2022", + "-A", + "x64", + f"-DPHYSX_SLN_FREEGLUT_PATH={dummy_freeglut.parent.as_posix()}", + "-DCMAKE_CONFIGURATION_TYPES=Release", + ] + ) + else: + configure.extend(["-G", "Ninja", "-DCMAKE_BUILD_TYPE=Release"]) + build_environment = os.environ.copy() + build_environment["MSBUILDDISABLENODEREUSE"] = "1" + subprocess.run(configure, check=True, env=build_environment) + build = [ + cmake, + "--build", + str(build_dir), + "--config", + "Release", + "--target", + _MODULE_NAME, + "--parallel", + str(min(16, os.cpu_count() or 1)), + ] + subprocess.run(build, check=True, env=build_environment) + module_path = _module_path(output_dir) + if module_path is None: + raise RuntimeError("native PhysX build completed without producing a module") + return module_path + + +def load_native_physx() -> ModuleType: + """Build once and return the standalone Ludus PhysX module.""" + global _CACHED_MODULE + if _CACHED_MODULE is not None: + return _CACHED_MODULE + cache_root = _cache_root() + output_dir = cache_root / "module" + module_path = _module_path(output_dir) + if _needs_rebuild(module_path): + with _build_lock(cache_root): + module_path = _module_path(output_dir) + if _needs_rebuild(module_path): + physx_root = _download_source(cache_root) + module_path = _configure_and_build(cache_root, physx_root) + assert module_path is not None + spec = importlib.util.spec_from_file_location(_MODULE_NAME, module_path) + if spec is None or spec.loader is None: + raise RuntimeError(f"could not load native PhysX module at {module_path}") + module = importlib.util.module_from_spec(spec) + sys.modules[_MODULE_NAME] = module + spec.loader.exec_module(module) + _CACHED_MODULE = module + return module + + +__all__ = ["load_native_physx"] diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/dynamic_scene.py b/integrations/omnidreams/ludus-renderer/ludus_renderer/dynamic_scene.py new file mode 100644 index 000000000..f59783b0b --- /dev/null +++ b/integrations/omnidreams/ludus-renderer/ludus_renderer/dynamic_scene.py @@ -0,0 +1,236 @@ +# 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. + +"""CUDA HD-map box construction for simulated object-graph trajectories.""" + +from __future__ import annotations + +from collections.abc import Sequence +from typing import Any, Protocol + +import numpy as np +import torch + +from ._ops.primitives import ( + CUBE_FLAG_WIREFRAME, + PRIM_OBSTACLE, + CubePool, + TimestampedScene, +) + + +class ObjectTrajectory(Protocol): + """Structural input accepted from simulation clients.""" + + entity_id: str + object_type: str + timestamps_us: Any + translations_world: Any + orientations_xyzw: Any + dimensions_lwh: Any + is_simulated: bool + + +class MutableSceneContext(Protocol): + """Rendering operations required by :class:`MutableObjectSceneBuffer`.""" + + def update_cube_pool( + self, scene_id: int, prim_type_id: int, pool: CubePool + ) -> bool: ... + + def update_cube_pool_at_index( + self, scene_id: int, pool_index: int, pool: CubePool + ) -> bool: ... + + def replace_scene(self, scene_id: int, scene: TimestampedScene) -> int: ... + + +class MutableObjectSceneBuffer: + """Own dynamic-object topology and reuse policy for one CUDA scene slot.""" + + def __init__( + self, + context: MutableSceneContext, + scene_id: int, + base_scene: TimestampedScene, + *, + device: torch.device, + ) -> None: + self._context = context + self._scene_id = scene_id + self._base_scene = base_scene + self._device = device + self._initialized = False + self._actor_partition: tuple[tuple[str, ...], tuple[str, ...]] | None = None + self._dynamic_pool_index: int | None = None + + @property + def scene_id(self) -> int: + """Return the stable renderer scene slot.""" + return self._scene_id + + def update(self, actors: Sequence[ObjectTrajectory]) -> None: + """Update simulated tracks while retaining immutable tracks on CUDA.""" + if not actors: + if self._initialized: + static_pools = [ + pool + for pool in (self._base_scene.cube_pools or []) + if pool.prim_type_id != PRIM_OBSTACLE + ] + replacement = TimestampedScene( + polyline_pools=self._base_scene.polyline_pools, + polygon_pools=self._base_scene.polygon_pools, + cube_pools=static_pools, + ) + self._scene_id = self._context.replace_scene( + self._scene_id, replacement + ) + self._initialized = False + self._actor_partition = None + self._dynamic_pool_index = None + return + + static_actors = tuple( + actor for actor in actors if not getattr(actor, "is_simulated", False) + ) + dynamic_actors = tuple( + actor for actor in actors if getattr(actor, "is_simulated", False) + ) + partition = ( + tuple(actor.entity_id for actor in static_actors), + tuple(actor.entity_id for actor in dynamic_actors), + ) + if ( + self._initialized + and partition == self._actor_partition + and self._dynamic_pool_index is None + ): + return + if ( + self._initialized + and partition == self._actor_partition + and self._dynamic_pool_index is not None + ): + dynamic_pool = build_hdmap_object_pool( + dynamic_actors, device=self._device + ) + if self._context.update_cube_pool_at_index( + self._scene_id, self._dynamic_pool_index, dynamic_pool + ): + return + + static_pools = [ + pool + for pool in (self._base_scene.cube_pools or []) + if pool.prim_type_id != PRIM_OBSTACLE + ] + actor_pools = [] + if static_actors: + actor_pools.append( + build_hdmap_object_pool(static_actors, device=self._device) + ) + dynamic_pool_index = None + if dynamic_actors: + dynamic_pool_index = len(static_pools) + len(actor_pools) + actor_pools.append( + build_hdmap_object_pool(dynamic_actors, device=self._device) + ) + replacement = TimestampedScene( + polyline_pools=self._base_scene.polyline_pools, + polygon_pools=self._base_scene.polygon_pools, + cube_pools=[*static_pools, *actor_pools], + ) + self._scene_id = self._context.replace_scene(self._scene_id, replacement) + self._initialized = True + self._actor_partition = partition + self._dynamic_pool_index = dynamic_pool_index + + +def build_hdmap_object_pool( + actors: Sequence[ObjectTrajectory], *, device: torch.device +) -> CubePool: + """Build the CUDA box pool consumed by RGB and BEV model inputs. + + Simulation clients normally provide NumPy arrays. Stage those arrays in + contiguous batches so an update performs one host-to-device transfer per + field instead of several small transfers per object. + """ + if not actors: + raise ValueError("actors must not be empty") + + def _host_array(value: Any, dtype: np.dtype[Any]) -> np.ndarray: + if isinstance(value, torch.Tensor): + value = value.detach().cpu().numpy() + return np.asarray(value, dtype=dtype) + + track_lengths_host = np.fromiter( + (len(actor.timestamps_us) for actor in actors), + dtype=np.int32, + count=len(actors), + ) + track_timestamps_host = np.concatenate( + [_host_array(actor.timestamps_us, np.dtype(np.int64)) for actor in actors] + ) + translations_host = np.concatenate( + [ + _host_array(actor.translations_world, np.dtype(np.float32)) + for actor in actors + ] + ) + quaternions_host = np.concatenate( + [_host_array(actor.orientations_xyzw, np.dtype(np.float32)) for actor in actors] + ) + scales_host = np.stack( + [_host_array(actor.dimensions_lwh, np.dtype(np.float32)) for actor in actors] + ) + colors_host = np.asarray( + [ + [1.0, 0.55, 0.15, 0.55, 0.18, 0.04] + if any( + token in actor.object_type.lower() + for token in ("truck", "bus", "trailer") + ) + else [0.25, 0.75, 1.0, 0.08, 0.30, 0.55] + for actor in actors + ], + dtype=np.float32, + ) + + track_lengths = torch.as_tensor(track_lengths_host, device=device) + track_timestamps = torch.as_tensor(track_timestamps_host, device=device) + translations = torch.as_tensor(translations_host, device=device) + quaternions = torch.as_tensor(quaternions_host, device=device) + scales = torch.as_tensor(scales_host, device=device) + colors = torch.as_tensor(colors_host, device=device) + return CubePool( + timestamps_us=torch.unique(track_timestamps).sort()[0], + cube_ts_prefix_sum=torch.cumsum(track_lengths, dim=0, dtype=torch.int32), + track_timestamps_us=track_timestamps, + translations=translations, + quaternions=quaternions, + scales=scales, + colors=colors, + prim_type_id=PRIM_OBSTACLE, + render_flags=CUBE_FLAG_WIREFRAME, + ) + + +__all__ = [ + "MutableObjectSceneBuffer", + "MutableSceneContext", + "ObjectTrajectory", + "build_hdmap_object_pool", +] diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/object_graph.py b/integrations/omnidreams/ludus-renderer/ludus_renderer/object_graph.py new file mode 100644 index 000000000..45b1e8828 --- /dev/null +++ b/integrations/omnidreams/ludus-renderer/ludus_renderer/object_graph.py @@ -0,0 +1,451 @@ +# 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. + +"""PhysX-first object graph shared by Ludus simulation and rendering.""" + +from __future__ import annotations + +from dataclasses import dataclass, field + +import numpy as np +import numpy.typing as npt + +FloatArray = npt.NDArray[np.float32] +Int64Array = npt.NDArray[np.int64] + + +@dataclass(frozen=True) +class VehicleModel: + """Per-instance four-wheel contact and suspension model.""" + + chassis_half_extents_m: tuple[float, float, float] + """Half extents of the sprung chassis collision shape.""" + + chassis_offset_m: tuple[float, float, float] + """Chassis-shape center relative to the visual body origin.""" + + suspension_mounts_m: tuple[tuple[float, float, float], ...] + """Four suspension mounts in body-local coordinates.""" + + wheel_radius_m: float + """Wheel radius used by suspension raycasts.""" + + suspension_rest_length_m: float + """Uncompressed suspension length from mount to wheel center.""" + + suspension_max_compression_m: float + """Maximum spring compression before the bump stop.""" + + spring_stiffness_n_per_m: float + """Linear spring rate for each wheel.""" + + damper_rate_n_s_per_m: float + """Linear compression and rebound damping rate for each wheel.""" + + tire_friction: float + """Coulomb friction coefficient limiting each tire's contact force.""" + + cornering_stiffness_n_per_rad: float + """Lateral tire force per slip angle, divided across four wheels.""" + + rolling_resistance: float + """Longitudinal rolling-resistance coefficient.""" + + max_engine_force_n: float + """Maximum propulsion force available to the shared drive actuator.""" + + max_brake_force_n: float + """Maximum braking force available to the shared drive actuator.""" + + +@dataclass(frozen=True) +class RigidBodyModel: + """Immutable engine-neutral body topology and material parameters.""" + + mass_kg: float + half_extents_m: tuple[float, float, float] + restitution: float = 0.22 + friction: float = 0.65 + vehicle: VehicleModel | None = None + """Wheel and suspension model; ``None`` uses the box collider directly.""" + + +@dataclass +class SceneObject: + """Typed object with contiguous tracks and a fixed PhysX body model.""" + + object_id: str + object_type: str + model: RigidBodyModel + timestamps_us: Int64Array + positions_m: FloatArray + orientations_xyzw: FloatArray + max_extrapolation_us: float | None = None + detached: bool = False + + def __post_init__(self) -> None: + self.timestamps_us = np.ascontiguousarray(self.timestamps_us, dtype=np.int64) + self.positions_m = np.ascontiguousarray(self.positions_m, dtype=np.float32) + self.orientations_xyzw = np.ascontiguousarray( + self.orientations_xyzw, dtype=np.float32 + ) + count = len(self.timestamps_us) + if count == 0: + raise ValueError("object tracks must contain at least one sample") + if self.positions_m.shape != (count, 3): + raise ValueError("positions_m must have shape [samples, 3]") + if self.orientations_xyzw.shape != (count, 4): + raise ValueError("orientations_xyzw must have shape [samples, 4]") + + def sample(self, timestamp_us: int) -> tuple[FloatArray, FloatArray, FloatArray]: + """Interpolate pose and finite-difference velocity at a timestamp.""" + index = int(np.searchsorted(self.timestamps_us, timestamp_us, side="left")) + if index <= 0: + lo = hi = 0 + alpha = 0.0 + elif index >= len(self.timestamps_us): + lo = hi = len(self.timestamps_us) - 1 + alpha = 0.0 + else: + lo, hi = index - 1, index + span = int(self.timestamps_us[hi] - self.timestamps_us[lo]) + alpha = 0.0 if span == 0 else (timestamp_us - self.timestamps_us[lo]) / span + position = ( + self.positions_m[lo] * (1.0 - alpha) + self.positions_m[hi] * alpha + ).astype(np.float32) + quaternion = ( + self.orientations_xyzw[lo] * (1.0 - alpha) + + self.orientations_xyzw[hi] * alpha + ).astype(np.float32) + norm = float(np.linalg.norm(quaternion)) + if norm > 1e-8: + quaternion /= norm + if lo == hi: + velocity = np.zeros(3, dtype=np.float32) + else: + dt_s = float(self.timestamps_us[hi] - self.timestamps_us[lo]) / 1_000_000.0 + velocity = ((self.positions_m[hi] - self.positions_m[lo]) / dt_s).astype( + np.float32 + ) + return position, quaternion, velocity + + def is_visible_at(self, timestamp_us: int) -> bool: + """Keep a track visible after it starts, holding its final pose.""" + if self.max_extrapolation_us is None: + return True + first_timestamp_us = int(self.timestamps_us[0]) + if timestamp_us < first_timestamp_us: + return ( + len(self.timestamps_us) >= 2 + and first_timestamp_us - timestamp_us <= self.max_extrapolation_us + ) + return True + + +@dataclass(frozen=True) +class InvisibleBarrier: + """Non-rendered collision wall represented by one map-line segment.""" + + start_xy_m: tuple[float, float] + end_xy_m: tuple[float, float] + thickness_m: float = 0.30 + height_m: float = 3.0 + barrier_id: str | None = None + + +@dataclass +class PhysicsObjectGraph: + """Contiguous, typed scene data used to build and update one PhysX world.""" + + objects: tuple[SceneObject, ...] = () + barriers: tuple[InvisibleBarrier, ...] = () + object_index: dict[str, int] = field(init=False) + revision: int = field(init=False, default=0) + _spatial_cell_size_m: float = field( + init=False, default=64.0, repr=False, compare=False + ) + _object_cells: dict[tuple[int, int], tuple[int, ...]] = field( + init=False, default_factory=dict, repr=False, compare=False + ) + _barrier_cells: dict[tuple[int, int], tuple[int, ...]] = field( + init=False, default_factory=dict, repr=False, compare=False + ) + + def __post_init__(self) -> None: + self.object_index = { + scene_object.object_id: index + for index, scene_object in enumerate(self.objects) + } + if len(self.object_index) != len(self.objects): + raise ValueError("object_id values must be unique") + self._rebuild_spatial_index() + + def _cells_for_bounds( + self, minimum_xy: np.ndarray, maximum_xy: np.ndarray + ) -> tuple[tuple[int, int], ...]: + minimum_cell = np.floor(minimum_xy / self._spatial_cell_size_m).astype(np.int64) + maximum_cell = np.floor(maximum_xy / self._spatial_cell_size_m).astype(np.int64) + return tuple( + (x, y) + for x in range(int(minimum_cell[0]), int(maximum_cell[0]) + 1) + for y in range(int(minimum_cell[1]), int(maximum_cell[1]) + 1) + ) + + def _rebuild_spatial_index(self) -> None: + object_cells: dict[tuple[int, int], list[int]] = {} + for index, scene_object in enumerate(self.objects): + positions_xy = scene_object.positions_m[:, :2] + footprint_radius_m = float( + np.linalg.norm(scene_object.model.half_extents_m[:2]) + ) + extent = np.full(2, footprint_radius_m, dtype=np.float32) + occupied_cells: set[tuple[int, int]] = set() + if len(positions_xy) == 1: + occupied_cells.update( + self._cells_for_bounds( + positions_xy[0] - extent, positions_xy[0] + extent + ) + ) + else: + # Index swept segment bounds, not only recorded samples. Sparse + # tracks can cross a simulation window without a keyframe in it. + for start, end in zip(positions_xy[:-1], positions_xy[1:], strict=True): + occupied_cells.update( + self._cells_for_bounds( + np.minimum(start, end) - extent, + np.maximum(start, end) + extent, + ) + ) + for cell in occupied_cells: + object_cells.setdefault(cell, []).append(index) + barrier_cells: dict[tuple[int, int], list[int]] = {} + for index, barrier in enumerate(self.barriers): + endpoints = np.asarray( + [barrier.start_xy_m, barrier.end_xy_m], dtype=np.float32 + ) + extent = np.full(2, barrier.thickness_m * 0.5, dtype=np.float32) + for cell in self._cells_for_bounds( + np.min(endpoints, axis=0) - extent, + np.max(endpoints, axis=0) + extent, + ): + barrier_cells.setdefault(cell, []).append(index) + self._object_cells = { + cell: tuple(indices) for cell, indices in object_cells.items() + } + self._barrier_cells = { + cell: tuple(indices) for cell, indices in barrier_cells.items() + } + + def _spatial_candidates( + self, + index: dict[tuple[int, int], tuple[int, ...]], + center: np.ndarray, + radius_m: float, + ) -> tuple[int, ...]: + extent = np.full(2, radius_m, dtype=np.float32) + candidates: set[int] = set() + for cell in self._cells_for_bounds(center - extent, center + extent): + candidates.update(index.get(cell, ())) + return tuple(sorted(candidates)) + + def upsert_object(self, scene_object: SceneObject) -> None: + """Add or replace one object while preserving all unrelated topology.""" + existing = self.object_index.get(scene_object.object_id) + objects = list(self.objects) + if existing is None: + objects.append(scene_object) + else: + objects[existing] = scene_object + self.objects = tuple(objects) + self.object_index = { + value.object_id: index for index, value in enumerate(self.objects) + } + self.revision += 1 + self._rebuild_spatial_index() + + def remove_object(self, object_id: str) -> None: + """Remove one object without rebuilding unrelated graph data.""" + if object_id not in self.object_index: + return + self.objects = tuple( + scene_object + for scene_object in self.objects + if scene_object.object_id != object_id + ) + self.object_index = { + value.object_id: index for index, value in enumerate(self.objects) + } + self.revision += 1 + self._rebuild_spatial_index() + + def upsert_barrier(self, barrier_id: str, barrier: InvisibleBarrier) -> None: + """Add or replace one named invisible wall.""" + normalized = InvisibleBarrier( + start_xy_m=barrier.start_xy_m, + end_xy_m=barrier.end_xy_m, + thickness_m=barrier.thickness_m, + height_m=barrier.height_m, + barrier_id=barrier_id, + ) + barriers = list(self.barriers) + for index, existing in enumerate(barriers): + if existing.barrier_id == barrier_id: + barriers[index] = normalized + break + else: + barriers.append(normalized) + self.barriers = tuple(barriers) + self.revision += 1 + self._rebuild_spatial_index() + + def remove_barrier(self, barrier_id: str) -> None: + """Remove one named invisible wall.""" + barriers = tuple( + barrier for barrier in self.barriers if barrier.barrier_id != barrier_id + ) + if len(barriers) == len(self.barriers): + return + self.barriers = barriers + self.revision += 1 + self._rebuild_spatial_index() + + def copy_for_physx( + self, + center_xy_m: npt.ArrayLike, + radius_m: float, + timestamp_us: int | None = None, + ) -> PhysicsObjectGraph: + """Copy nearby topology into the active PhysX simulation window. + + Args: + center_xy_m: Center of the simulation window. + radius_m: Simulation radius in metres. + timestamp_us: Track-sampling time; ``None`` considers every recorded + position. + """ + center = np.asarray(center_xy_m, dtype=np.float32) + if center.shape != (2,): + raise ValueError("center_xy_m must have shape (2,)") + if radius_m <= 0.0: + raise ValueError("radius_m must be positive") + object_candidates = self._spatial_candidates( + self._object_cells, center, float(radius_m) + ) + + def _object_is_near(scene_object: SceneObject) -> bool: + footprint_radius_m = float( + np.linalg.norm(scene_object.model.half_extents_m[:2]) + ) + expanded_radius_sq = (float(radius_m) + footprint_radius_m) ** 2 + if timestamp_us is not None: + if not scene_object.is_visible_at(timestamp_us): + return False + position, _, _ = scene_object.sample(timestamp_us) + delta = position[:2] - center + return float(np.dot(delta, delta)) <= expanded_radius_sq + points = scene_object.positions_m[:, :2] + if len(points) == 1: + delta = points[0] - center + return float(np.dot(delta, delta)) <= expanded_radius_sq + segments = points[1:] - points[:-1] + length_sq = np.sum(segments * segments, axis=1) + offset = center[None, :] - points[:-1] + alpha = np.divide( + np.sum(offset * segments, axis=1), + length_sq, + out=np.zeros_like(length_sq), + where=length_sq > 1e-8, + ) + alpha = np.clip(alpha, 0.0, 1.0) + closest = points[:-1] + segments * alpha[:, None] + distance_sq = np.sum((closest - center[None, :]) ** 2, axis=1) + return float(np.min(distance_sq)) <= expanded_radius_sq + + objects = tuple( + self.objects[index] + for index in object_candidates + if _object_is_near(self.objects[index]) + ) + + def _barrier_is_near(barrier: InvisibleBarrier) -> bool: + start = np.asarray(barrier.start_xy_m, dtype=np.float32) + end = np.asarray(barrier.end_xy_m, dtype=np.float32) + segment = end - start + length_sq = float(np.dot(segment, segment)) + if length_sq <= 1e-8: + closest = start + else: + alpha = float( + np.clip(np.dot(center - start, segment) / length_sq, 0.0, 1.0) + ) + closest = start + segment * alpha + expanded_radius = float(radius_m) + barrier.thickness_m * 0.5 + return float(np.dot(center - closest, center - closest)) <= ( + expanded_radius * expanded_radius + ) + + barrier_candidates = self._spatial_candidates( + self._barrier_cells, center, float(radius_m) + ) + barriers = tuple( + self.barriers[index] + for index in barrier_candidates + if _barrier_is_near(self.barriers[index]) + ) + return PhysicsObjectGraph(objects=objects, barriers=barriers) + + +@dataclass(frozen=True) +class BodyState: + """Engine-neutral rigid-body state crossing the Ludus PhysX boundary.""" + + position_m: FloatArray + orientation_xyzw: FloatArray + linear_velocity_mps: FloatArray + angular_velocity_radps: FloatArray + + +@dataclass(frozen=True) +class ObjectPose: + """One simulated object pose returned by PhysX.""" + + object_id: str + position_m: FloatArray + orientation_xyzw: FloatArray + linear_velocity_mps: FloatArray + angular_velocity_radps: FloatArray + detached: bool + collision_active: bool + + +@dataclass(frozen=True) +class PhysicsStep: + """Authoritative ego and object state after a PhysX step.""" + + ego: BodyState + objects: tuple[ObjectPose, ...] + impact: bool + + +__all__ = [ + "BodyState", + "InvisibleBarrier", + "ObjectPose", + "PhysicsObjectGraph", + "PhysicsStep", + "RigidBodyModel", + "SceneObject", + "VehicleModel", +] diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/physx.py b/integrations/omnidreams/ludus-renderer/ludus_renderer/physx.py new file mode 100644 index 000000000..a046bf593 --- /dev/null +++ b/integrations/omnidreams/ludus-renderer/ludus_renderer/physx.py @@ -0,0 +1,628 @@ +# 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. + +"""Standalone native PhysX implementation isolated behind Ludus data types.""" + +from __future__ import annotations + +import hashlib +import math +import time +from dataclasses import dataclass + +import numpy as np + +from ._physx_native import load_native_physx +from .object_graph import ( + BodyState, + InvisibleBarrier, + ObjectPose, + PhysicsObjectGraph, + PhysicsStep, + RigidBodyModel, + SceneObject, +) + +_EGO_BODY_ID = 0 + + +@dataclass(frozen=True) +class PhysXStepTimings: + """Measured components of one compact native physics step.""" + + total_ms: float + actor_update_ms: float + solver_ms: float + readback_ms: float + bridge_ms: float + visible_actor_count: int + detached_actor_count: int + + +@dataclass(frozen=True) +class _CompactPhysicsStep: + ego: BodyState + actor_samples: tuple[tuple[str, BodyState, bool], ...] + track_samples: tuple[tuple[str, np.ndarray, np.ndarray, np.ndarray], ...] + struck_object_ids: frozenset[str] + impact: bool + timings: PhysXStepTimings + + +def prepare_physx() -> None: + """Build and cache the pinned standalone PhysX module if necessary.""" + load_native_physx() + + +def _native_id(value: str, *, barrier: bool = False) -> int: + namespace = b"barrier:" if barrier else b"body:" + encoded = hashlib.blake2b(namespace + value.encode(), digest_size=8).digest() + result = int.from_bytes(encoded, "little", signed=True) + return result if result not in {-1, _EGO_BODY_ID} else result + 2 + + +def _state_arrays(state: BodyState) -> tuple[np.ndarray, np.ndarray, np.ndarray]: + pose = np.concatenate((state.position_m, state.orientation_xyzw)).astype( + np.float32, copy=False + ) + return ( + np.ascontiguousarray(pose), + np.ascontiguousarray(state.linear_velocity_mps, dtype=np.float32), + np.ascontiguousarray(state.angular_velocity_radps, dtype=np.float32), + ) + + +def _body_state(row: np.ndarray, *, copy: bool = True) -> BodyState: + """Create a body state, optionally borrowing one stable native-buffer row.""" + values = row.copy() if copy else row + return BodyState( + position_m=values[:3], + orientation_xyzw=values[3:7], + linear_velocity_mps=values[7:10], + angular_velocity_radps=values[10:13], + ) + + +def _yaw_from_xyzw(quaternion: np.ndarray) -> float: + x, y, z, w = (float(value) for value in quaternion) + return math.atan2(2.0 * (w * z + x * y), 1.0 - 2.0 * (y * y + z * z)) + + +def _overlap( + ego: BodyState, + ego_half: tuple[float, float, float], + actor_position: np.ndarray, + actor_quaternion: np.ndarray, + actor_half: tuple[float, float, float], +) -> bool: + ego_yaw = _yaw_from_xyzw(ego.orientation_xyzw) + actor_yaw = _yaw_from_xyzw(actor_quaternion) + axes = ( + np.asarray([math.cos(ego_yaw), math.sin(ego_yaw)]), + np.asarray([-math.sin(ego_yaw), math.cos(ego_yaw)]), + np.asarray([math.cos(actor_yaw), math.sin(actor_yaw)]), + np.asarray([-math.sin(actor_yaw), math.cos(actor_yaw)]), + ) + delta = actor_position[:2] - ego.position_m[:2] + for axis in axes: + ego_radius = sum( + ego_half[index] * abs(float(np.dot(axes[index], axis))) + for index in range(2) + ) + actor_radius = sum( + actor_half[index] * abs(float(np.dot(axes[index + 2], axis))) + for index in range(2) + ) + if abs(float(np.dot(delta, axis))) > ego_radius + actor_radius: + return False + return True + + +def _barrier_rebound_velocity( + barriers: tuple[InvisibleBarrier, ...], + ego: BodyState, + ego_model: RigidBodyModel, +) -> np.ndarray | None: + position = np.asarray(ego.position_m[:2], dtype=np.float32) + velocity = np.asarray(ego.linear_velocity_mps, dtype=np.float32) + yaw = _yaw_from_xyzw(ego.orientation_xyzw) + forward = np.asarray([math.cos(yaw), math.sin(yaw)], dtype=np.float32) + left = np.asarray([-forward[1], forward[0]], dtype=np.float32) + for barrier in barriers: + start = np.asarray(barrier.start_xy_m, dtype=np.float32) + end = np.asarray(barrier.end_xy_m, dtype=np.float32) + segment = end - start + segment_length_sq = float(np.dot(segment, segment)) + if segment_length_sq <= 1e-8: + continue + alpha = float( + np.clip(np.dot(position - start, segment) / segment_length_sq, 0.0, 1.0) + ) + closest = start + segment * alpha + offset = position - closest + distance = float(np.linalg.norm(offset)) + if distance > 1e-6: + normal = offset / distance + else: + speed = float(np.linalg.norm(velocity[:2])) + normal = -velocity[:2] / speed if speed > 1e-6 else np.asarray([1.0, 0.0]) + support = ( + abs(float(np.dot(normal, forward))) * ego_model.half_extents_m[0] + + abs(float(np.dot(normal, left))) * ego_model.half_extents_m[1] + ) + if distance > support + barrier.thickness_m * 0.5 + 0.05: + continue + normal_speed = float(np.dot(velocity[:2], normal)) + if normal_speed >= 0.0: + return velocity.copy() + reflected = velocity.copy() + reflected[:2] -= ((1.0 + ego_model.restitution) * normal_speed * normal).astype( + np.float32 + ) + return reflected + return None + + +class PhysXWorld: + """Own a reusable standalone PhysX scene and stable body-state buffers.""" + + def __init__( + self, + graph: PhysicsObjectGraph, + ego_model: RigidBodyModel, + *, + actor_collision_enabled: bool = True, + max_actor_drive_speed_mps: float | None = None, + capacity: int | None = None, + ) -> None: + if max_actor_drive_speed_mps is not None and ( + not math.isfinite(max_actor_drive_speed_mps) + or max_actor_drive_speed_mps <= 0.0 + ): + raise ValueError("max_actor_drive_speed_mps must be finite and positive") + native = load_native_physx() + minimum_capacity = len(graph.objects) + 1 + self._scene = native.NativeScene(capacity or max(256, minimum_capacity * 2)) + self.graph = graph + self.ego_model = ego_model + self.actor_collision_enabled = actor_collision_enabled + self.max_actor_drive_speed_mps = max_actor_drive_speed_mps + self._closed = False + self._objects: dict[str, SceneObject] = {} + self._object_slots: dict[str, int] = {} + self._slot_object_ids: dict[int, str] = {} + self._object_native_ids: dict[str, int] = {} + self._object_collision_active: dict[str, bool] = {} + self._track_drive_enabled: dict[str, bool] = {} + self._detached_object_ids: set[str] = set() + self._barriers: dict[str, InvisibleBarrier] = {} + self._state_buffer = self._scene.state_buffer() + self._track_state_buffer = self._scene.track_state_buffer() + self._id_buffer = self._scene.id_buffer() + self._active_buffer = self._scene.active_buffer() + self._collision_active_buffer = self._scene.collision_active_buffer() + self._detached_buffer = self._scene.detached_buffer() + self._struck_buffer = self._scene.struck_buffer() + self._half_extents_buffer = np.zeros( + (len(self._active_buffer), 3), dtype=np.float32 + ) + self.last_step_timings: PhysXStepTimings | None = None + + ego_state = BodyState( + position_m=np.asarray( + [0.0, 0.0, ego_model.half_extents_m[2]], dtype=np.float32 + ), + orientation_xyzw=np.asarray([0.0, 0.0, 0.0, 1.0], dtype=np.float32), + linear_velocity_mps=np.zeros(3, dtype=np.float32), + angular_velocity_radps=np.zeros(3, dtype=np.float32), + ) + self._ego_slot = self._add_body( + _EGO_BODY_ID, ego_model, ego_state, False, True, None + ) + for scene_object in graph.objects: + self.add_object(scene_object) + for index, barrier in enumerate(graph.barriers): + self.add_barrier(barrier.barrier_id or f"barrier-{index}", barrier) + + @property + def state_buffer(self) -> np.ndarray: + """Return the stable ``[capacity, 13]`` native body-state view.""" + return self._state_buffer + + @property + def active_buffer(self) -> np.ndarray: + """Return the stable active-slot mask paired with :attr:`state_buffer`.""" + return self._active_buffer + + @property + def body_count(self) -> int: + """Return the number of live bodies, including the ego chassis.""" + return int(self._scene.body_count) + + @property + def barrier_count(self) -> int: + """Return the number of live invisible walls.""" + return int(self._scene.barrier_count) + + @property + def active_collider_ids(self) -> frozenset[str]: + """Return tracked objects whose PhysX collision shapes are enabled.""" + return frozenset( + object_id + for object_id, slot in self._object_slots.items() + if bool(self._collision_active_buffer[slot]) + ) + + def body_state(self, object_id: str) -> BodyState: + """Return the current authoritative state for one tracked body.""" + return _body_state(self._state_buffer[self._object_slots[object_id]]) + + def set_track_drive_enabled(self, object_id: str, enabled: bool) -> None: + """Enable or suppress the tracked body's driving actuator.""" + self.apply_track_controls( + ((object_id, enabled, self._objects[object_id].detached),) + ) + + def set_detached(self, object_id: str, detached: bool) -> None: + """Publish the integration-owned track attachment state to PhysX.""" + self.apply_track_controls( + ((object_id, self._track_drive_enabled[object_id], detached),) + ) + + def apply_track_controls( + self, controls: tuple[tuple[str, bool, bool], ...] + ) -> None: + """Publish changed traffic controls through one native bridge call.""" + changed = [ + (object_id, bool(drive_enabled), bool(detached)) + for object_id, drive_enabled, detached in controls + if self._track_drive_enabled.get(object_id) != bool(drive_enabled) + or self._objects[object_id].detached != bool(detached) + ] + if not changed: + return + self._scene.set_body_track_controls( + np.fromiter( + (self._object_native_ids[item[0]] for item in changed), + dtype=np.int64, + count=len(changed), + ), + np.fromiter( + (item[1] for item in changed), dtype=np.uint8, count=len(changed) + ), + np.fromiter( + (item[2] for item in changed), dtype=np.uint8, count=len(changed) + ), + ) + for object_id, drive_enabled, detached in changed: + self._track_drive_enabled[object_id] = drive_enabled + self._objects[object_id].detached = detached + + def _add_body( + self, + native_id: int, + model: RigidBodyModel, + state: BodyState, + kinematic: bool, + collision_enabled: bool, + max_drive_speed_mps: float | None, + ) -> int: + pose, linear, angular = _state_arrays(state) + vehicle = model.vehicle + chassis_half_extents = ( + model.half_extents_m if vehicle is None else vehicle.chassis_half_extents_m + ) + chassis_offset = ( + (0.0, 0.0, 0.0) if vehicle is None else vehicle.chassis_offset_m + ) + suspension_mounts = ( + np.empty((0, 3), dtype=np.float32) + if vehicle is None + else np.asarray(vehicle.suspension_mounts_m, dtype=np.float32) + ) + return int( + self._scene.add_body( + native_id, + np.asarray(model.half_extents_m, dtype=np.float32), + np.asarray(chassis_half_extents, dtype=np.float32), + np.asarray(chassis_offset, dtype=np.float32), + model.mass_kg, + model.friction, + model.restitution, + pose, + linear, + angular, + kinematic, + collision_enabled, + suspension_mounts, + 0.0 if vehicle is None else vehicle.wheel_radius_m, + 0.0 if vehicle is None else vehicle.suspension_rest_length_m, + (0.0 if vehicle is None else vehicle.suspension_max_compression_m), + 0.0 if vehicle is None else vehicle.spring_stiffness_n_per_m, + 0.0 if vehicle is None else vehicle.damper_rate_n_s_per_m, + 0.0 if vehicle is None else vehicle.tire_friction, + (0.0 if vehicle is None else vehicle.cornering_stiffness_n_per_rad), + 0.0 if vehicle is None else vehicle.rolling_resistance, + 0.0 if vehicle is None else vehicle.max_engine_force_n, + 0.0 if vehicle is None else vehicle.max_brake_force_n, + 0.0 if max_drive_speed_mps is None else max_drive_speed_mps, + ) + ) + + def add_object( + self, scene_object: SceneObject, *, timestamp_us: int | None = None + ) -> None: + """Add one tracked object without rebuilding the PhysX scene. + + Args: + scene_object: Object and recorded track to add. + timestamp_us: Initial pose time; ``None`` uses the first track sample. + """ + if scene_object.object_id in self._objects: + raise ValueError(f"object {scene_object.object_id!r} already exists") + position, quaternion, velocity = scene_object.sample( + int(scene_object.timestamps_us[0]) + if timestamp_us is None + else int(timestamp_us) + ) + state = BodyState( + position_m=position, + orientation_xyzw=quaternion, + linear_velocity_mps=velocity, + angular_velocity_radps=np.zeros(3, dtype=np.float32), + ) + native_id = _native_id(scene_object.object_id) + slot = self._add_body( + native_id, + scene_object.model, + state, + False, + self.actor_collision_enabled, + self.max_actor_drive_speed_mps, + ) + self._scene.set_body_track( + native_id, + scene_object.timestamps_us, + scene_object.positions_m, + scene_object.orientations_xyzw, + ( + -1.0 + if scene_object.max_extrapolation_us is None + else float(scene_object.max_extrapolation_us) + ), + ) + self._objects[scene_object.object_id] = scene_object + self._object_slots[scene_object.object_id] = slot + self._slot_object_ids[slot] = scene_object.object_id + self._object_native_ids[scene_object.object_id] = native_id + self._half_extents_buffer[slot] = np.asarray( + scene_object.model.half_extents_m, dtype=np.float32 + ) + self._object_collision_active[scene_object.object_id] = ( + self.actor_collision_enabled + ) + self._track_drive_enabled[scene_object.object_id] = True + + def remove_object(self, object_id: str) -> None: + """Remove one object and recycle its stable native slot.""" + if object_id not in self._objects: + return + slot = self._object_slots[object_id] + self._scene.remove_body(self._object_native_ids[object_id]) + del self._objects[object_id] + del self._object_slots[object_id] + del self._slot_object_ids[slot] + del self._object_native_ids[object_id] + del self._object_collision_active[object_id] + del self._track_drive_enabled[object_id] + self._detached_object_ids.discard(object_id) + self._half_extents_buffer[slot] = 0.0 + + def add_barrier(self, barrier_id: str, barrier: InvisibleBarrier) -> None: + """Add one invisible static wall without rebuilding the scene.""" + if barrier_id in self._barriers: + raise ValueError(f"barrier {barrier_id!r} already exists") + self._scene.add_barrier( + _native_id(barrier_id, barrier=True), + np.asarray(barrier.start_xy_m, dtype=np.float32), + np.asarray(barrier.end_xy_m, dtype=np.float32), + barrier.thickness_m, + barrier.height_m, + self.ego_model.friction, + self.ego_model.restitution, + ) + self._barriers[barrier_id] = barrier + + def remove_barrier(self, barrier_id: str) -> None: + """Remove one invisible wall without rebuilding the scene.""" + if barrier_id not in self._barriers: + return + self._scene.remove_barrier(_native_id(barrier_id, barrier=True)) + del self._barriers[barrier_id] + + def synchronize( + self, graph: PhysicsObjectGraph, *, timestamp_us: int | None = None + ) -> None: + """Apply graph additions, replacements, and removals incrementally. + + Args: + graph: Desired active topology. + timestamp_us: Initial pose time for newly added objects. + """ + incoming_objects = {value.object_id: value for value in graph.objects} + for object_id in tuple(self._objects): + if object_id not in incoming_objects: + self.remove_object(object_id) + for object_id, scene_object in incoming_objects.items(): + current = self._objects.get(object_id) + if current is scene_object: + continue + if current is not None: + self.remove_object(object_id) + self.add_object(scene_object, timestamp_us=timestamp_us) + + incoming_barriers = { + barrier.barrier_id or f"barrier-{index}": barrier + for index, barrier in enumerate(graph.barriers) + } + for barrier_id in tuple(self._barriers): + if barrier_id not in incoming_barriers: + self.remove_barrier(barrier_id) + for barrier_id, barrier in incoming_barriers.items(): + if self._barriers.get(barrier_id) == barrier: + continue + if barrier_id in self._barriers: + self.remove_barrier(barrier_id) + self.add_barrier(barrier_id, barrier) + self.graph = graph + + def step_compact( + self, ego: BodyState, timestamp_us: int, dt_s: float + ) -> _CompactPhysicsStep: + """Advance all tracked actors with one native call and narrow readback.""" + if self._closed: + raise RuntimeError("PhysX world is closed") + total_started_at = time.perf_counter() + ego_pose, ego_linear, ego_angular = _state_arrays(ego) + ( + impact, + actor_update_ms, + solver_ms, + readback_ms, + visible_actor_count, + detached_actor_count, + ) = self._scene.step_tracked( + ego_pose, + ego_linear, + ego_angular, + int(timestamp_us), + float(dt_s), + self.actor_collision_enabled, + ) + # The ego escapes through the public result, so keep its snapshot stable. + # Actor states remain borrowed below and are materialized once by the game + # adapter instead of being copied twice on every frame. + simulated_ego = _body_state(self._state_buffer[self._ego_slot]) + visible_slots = tuple( + (object_id, slot) + for object_id, slot in self._object_slots.items() + if self._objects[object_id].is_visible_at(timestamp_us) + ) + actor_samples = tuple( + ( + object_id, + _body_state(self._state_buffer[slot], copy=False), + bool(self._detached_buffer[slot]), + ) + for object_id, slot in visible_slots + ) + track_samples = tuple( + ( + object_id, + self._track_state_buffer[slot, :3], + self._track_state_buffer[slot, 3:7], + self._track_state_buffer[slot, 7:10], + ) + for object_id, slot in visible_slots + ) + struck_object_ids = frozenset( + object_id + for object_id, slot in self._object_slots.items() + if bool(self._struck_buffer[slot]) + ) + detached_ids = {sample[0] for sample in actor_samples if sample[2]} + for object_id in self._detached_object_ids - detached_ids: + self._objects[object_id].detached = False + for object_id in detached_ids - self._detached_object_ids: + self._objects[object_id].detached = True + self._detached_object_ids = detached_ids + total_ms = (time.perf_counter() - total_started_at) * 1000.0 + native_ms = float(actor_update_ms) + float(solver_ms) + float(readback_ms) + timings = PhysXStepTimings( + total_ms=total_ms, + actor_update_ms=float(actor_update_ms), + solver_ms=float(solver_ms), + readback_ms=float(readback_ms), + bridge_ms=max(0.0, total_ms - native_ms), + visible_actor_count=int(visible_actor_count), + detached_actor_count=int(detached_actor_count), + ) + self.last_step_timings = timings + return _CompactPhysicsStep( + ego=simulated_ego, + actor_samples=actor_samples, + track_samples=track_samples, + struck_object_ids=struck_object_ids, + impact=bool(impact), + timings=timings, + ) + + def collider_state_arrays( + self, + ) -> tuple[tuple[str, ...], np.ndarray, np.ndarray, np.ndarray]: + """Return compact state arrays for currently collidable tracked bodies.""" + slots = np.flatnonzero(self._collision_active_buffer) + slots = slots[slots != self._ego_slot] + if len(slots) == 0: + return ( + (), + np.empty((0, 3), dtype=np.float32), + np.empty((0, 4), dtype=np.float32), + np.empty((0, 3), dtype=np.float32), + ) + return ( + tuple(self._slot_object_ids[int(slot)] for slot in slots), + self._state_buffer[slots, :3].copy(), + self._state_buffer[slots, 3:7].copy(), + (self._half_extents_buffer[slots] * 2.0).astype(np.float32, copy=False), + ) + + def step(self, ego: BodyState, timestamp_us: int, dt_s: float) -> PhysicsStep: + """Advance PhysX and materialize the compatibility object-pose result.""" + compact = self.step_compact(ego, timestamp_us, dt_s) + object_poses = [] + for object_id, slot in self._object_slots.items(): + state = _body_state(self._state_buffer[slot]) + collision_active = bool(self._collision_active_buffer[slot]) + self._object_collision_active[object_id] = collision_active + object_poses.append( + ObjectPose( + object_id=object_id, + position_m=state.position_m, + orientation_xyzw=state.orientation_xyzw, + linear_velocity_mps=state.linear_velocity_mps, + angular_velocity_radps=state.angular_velocity_radps, + detached=self._objects[object_id].detached, + collision_active=collision_active, + ) + ) + objects = tuple(object_poses) + return PhysicsStep(ego=compact.ego, objects=objects, impact=compact.impact) + + def close(self) -> None: + """Release the native PhysX scene and its reusable buffers.""" + if self._closed: + return + self._closed = True + self._scene.close() + + def __del__(self) -> None: + try: + self.close() + except Exception: + pass + + +__all__ = ["PhysXWorld", "prepare_physx"] diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/compile.sh b/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/compile.sh deleted file mode 100755 index 02d8c4239..000000000 --- a/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/compile.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/bash -# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: Apache-2.0 -# -# Compile the EXT-style timestamped mesh-shader pipeline to SPIR-V and -# embed the bytecode into a C++ header for the Vulkan renderer. -# -# Prerequisites: -# - glslangValidator (Vulkan SDK or distro package) on PATH, or -# GLSLANG_VALIDATOR / VULKAN_SDK env var pointing at it. -# - python3 with the standard library. -set -euo pipefail -SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) -cd "$SCRIPT_DIR" - -if [ -n "${GLSLANG_VALIDATOR:-}" ] && [ -x "$GLSLANG_VALIDATOR" ]; then - GLSLANG="$GLSLANG_VALIDATOR" -elif [ -n "${VULKAN_SDK:-}" ] && [ -x "$VULKAN_SDK/bin/glslangValidator" ]; then - GLSLANG="$VULKAN_SDK/bin/glslangValidator" -elif [ -n "${VULKAN_SDK:-}" ] && [ -x "$VULKAN_SDK/x86_64/bin/glslangValidator" ]; then - GLSLANG="$VULKAN_SDK/x86_64/bin/glslangValidator" -else - GLSLANG=$(command -v glslangValidator || true) -fi - -if [ -z "${GLSLANG:-}" ]; then - echo "error: glslangValidator not found. Install the Vulkan SDK or set GLSLANG_VALIDATOR." >&2 - exit 2 -fi - -echo "Using: $GLSLANG" -"$GLSLANG" --version 2>/dev/null | head -1 || true - -GLSL_FILES=( - ts_polyline.task.glsl ts_polyline.mesh.glsl ts_polyline.frag.glsl - ts_polygon.task.glsl ts_polygon.mesh.glsl ts_polygon.frag.glsl - ts_obstacle.task.glsl ts_obstacle.mesh.glsl ts_obstacle.frag.glsl -) - -failed=0 -for f in "${GLSL_FILES[@]}"; do - if [ ! -f "$f" ]; then - echo " missing source: $f" - failed=$((failed+1)) - continue - fi - spv="${f%.glsl}.spv" - if "$GLSLANG" --target-env vulkan1.3 --target-env spirv1.6 -V -o "$spv" "$f"; then - : - else - failed=$((failed+1)) - fi -done - -if [ $failed -ne 0 ]; then - echo "FAILED: $failed shader(s) did not compile" - exit 1 -fi - -echo "All shaders compiled. Embedding into C++ header..." -python3 "$SCRIPT_DIR/embed_spv.py" -echo "Done." diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/embed_spv.py b/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/embed_spv.py deleted file mode 100755 index 5fdd9a984..000000000 --- a/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/embed_spv.py +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/env python3 -# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: Apache-2.0 -"""Embed the 9 timestamped SPIR-V shader modules into a C++ header. - -The generated header (``_cpp/render/shaders_spv.h``) defines one -``static const uint32_t kSpv_[]`` array per stage. The Vulkan -renderer includes this header and feeds the arrays directly to -``vkCreateShaderModule`` -- no runtime file loading required. - -Normally invoked automatically by ``compile.sh`` after it compiles the GLSL to -SPIR-V; run it directly only to re-embed already-compiled ``.spv`` files: - - python3 ludus_renderer/shaders/embed_spv.py -""" - -from __future__ import annotations - -import os -import struct -import sys - -SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) -OUT_HEADER = os.path.normpath( - os.path.join(SCRIPT_DIR, "..", "_cpp", "render", "shaders_spv.h") -) - -SPV_FILES = [ - ("ts_polyline_task", "ts_polyline.task.spv"), - ("ts_polyline_mesh", "ts_polyline.mesh.spv"), - ("ts_polyline_frag", "ts_polyline.frag.spv"), - ("ts_polygon_task", "ts_polygon.task.spv"), - ("ts_polygon_mesh", "ts_polygon.mesh.spv"), - ("ts_polygon_frag", "ts_polygon.frag.spv"), - ("ts_obstacle_task", "ts_obstacle.task.spv"), - ("ts_obstacle_mesh", "ts_obstacle.mesh.spv"), - ("ts_obstacle_frag", "ts_obstacle.frag.spv"), -] - -HEADER_TOP = """\ -// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -// SPDX-License-Identifier: Apache-2.0 -// -// AUTOGENERATED by ludus_renderer/shaders/embed_spv.py -// DO NOT EDIT BY HAND. Regenerate with: -// bash ludus_renderer/shaders/compile.sh (compiles GLSL -> SPIR-V and re-embeds) - -#pragma once -#include - -""" - - -def emit_array(name: str, data: bytes, out) -> int: - if len(data) % 4 != 0: - raise RuntimeError(f"{name}: SPIR-V length {len(data)} not 4-byte aligned") - words = struct.unpack(f"<{len(data) // 4}I", data) - out.write(f"static const uint32_t kSpv_{name}[] = {{\n") - for i in range(0, len(words), 8): - chunk = ", ".join(f"0x{w:08x}u" for w in words[i : i + 8]) - out.write(f" {chunk},\n") - out.write("};\n\n") - return len(words) - - -def main() -> int: - missing = [ - fn for _, fn in SPV_FILES if not os.path.exists(os.path.join(SCRIPT_DIR, fn)) - ] - if missing: - print("Missing .spv files (run compile.sh first):", file=sys.stderr) - for m in missing: - print(f" {m}", file=sys.stderr) - return 1 - - os.makedirs(os.path.dirname(OUT_HEADER), exist_ok=True) - with open(OUT_HEADER, "w") as out: - out.write(HEADER_TOP) - total_words = 0 - for var, fn in SPV_FILES: - with open(os.path.join(SCRIPT_DIR, fn), "rb") as f: - data = f.read() - words = emit_array(var, data, out) - total_words += words - print(f" {fn:30s} -> kSpv_{var:20s} ({words * 4} bytes)") - out.write(f"// total embedded SPIR-V: {total_words * 4} bytes\n") - print(f"Wrote {OUT_HEADER}") - return 0 - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/ts_obstacle.frag.glsl b/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/ts_obstacle.frag.glsl deleted file mode 100644 index 800cb2752..000000000 --- a/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/ts_obstacle.frag.glsl +++ /dev/null @@ -1,61 +0,0 @@ - -#version 460 -#extension GL_EXT_fragment_shader_barycentric : require -#extension GL_EXT_mesh_shader : require - -layout(push_constant) uniform PushConstants { - float u_width_polyline_regular; - float u_width_polyline_bev; - float u_width_ego_traj_regular; - float u_width_ego_traj_bev; - float u_width_wireframe; - float u_resolution_scale; - float u_depth_scaling; - int u_max_extrapolation_us; - int u_color_palette_size; - uint u_num_queries; - float u_tessellation_threshold; - uint u_max_tessellation_polyline; - uint u_max_tessellation_polygon; - uint u_max_tessellation_cube; - float u_cull_radius_scale; - float u_fog_enabled; - uint u_max_obstacles; - uint u_cube_pool_index; - uint u_num_polygon_pools; - uint u_max_varrays_per_pool; - uint u_num_polyline_pools; -} pc; - -#define IF_ZMODIFY(x) - -// Per-primitive gradient data from mesh shader (no per-vertex outputs needed!) -layout(location = 0) perprimitiveEXT in CubeGradientBlock { - vec3 corner_t; // gradient t values at triangle's 3 corners - vec3 front_color; - vec3 back_color; - float is_bev; // 1.0 for BEV cameras (disables fog), 0.0 otherwise -} prim_in; - -layout(location = 0) out vec4 out_color; - - -IF_ZMODIFY(layout(location = 0) uniform float in_dummy;) - -void main() { - // Interpolate gradient t using hardware barycentric coordinates - float t = dot(prim_in.corner_t, gl_BaryCoordEXT); - - // Compute gradient color - vec3 color = mix(prim_in.back_color, prim_in.front_color, t); - - // Apply distance-based fog (darken with distance) - disabled for BEV cameras - if (pc.u_fog_enabled > 0.5 && prim_in.is_bev < 0.5) { - float fog_factor = 1.0 - gl_FragCoord.z; - fog_factor = clamp(fog_factor, 0.0, 1.0); - color *= fog_factor; - } - - out_color = vec4(color, 1.0); - IF_ZMODIFY(gl_FragDepth = gl_FragCoord.z + in_dummy;) -} diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/ts_obstacle.mesh.glsl b/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/ts_obstacle.mesh.glsl deleted file mode 100644 index 9b5949119..000000000 --- a/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/ts_obstacle.mesh.glsl +++ /dev/null @@ -1,1131 +0,0 @@ -#version 460 -#extension GL_EXT_mesh_shader : require -#extension GL_EXT_shader_explicit_arithmetic_types_int64 : require - -layout(push_constant) uniform PushConstants { - float u_width_polyline_regular; - float u_width_polyline_bev; - float u_width_ego_traj_regular; - float u_width_ego_traj_bev; - float u_width_wireframe; - float u_resolution_scale; - float u_depth_scaling; - int u_max_extrapolation_us; - int u_color_palette_size; - uint u_num_queries; - float u_tessellation_threshold; - uint u_max_tessellation_polyline; - uint u_max_tessellation_polygon; - uint u_max_tessellation_cube; - float u_cull_radius_scale; - float u_fog_enabled; - uint u_max_obstacles; - uint u_cube_pool_index; - uint u_num_polygon_pools; - uint u_max_varrays_per_pool; - uint u_num_polyline_pools; -} pc; - -#define IF_ZMODIFY(x) - -// Cap styles -const uint CAP_NONE = 0u; -const uint CAP_FLAT = 1u; -const uint CAP_ROUND = 2u; - -// Primitive type IDs (must match Python PRIM_* constants in ops.py) -const uint PRIM_ROAD_BOUNDARY = 0u; -const uint PRIM_LANE_LINE = 1u; // Legacy cyan lane line -const uint PRIM_CROSSWALK = 2u; -const uint PRIM_STATIC_OBSTACLE = 3u; // Legacy, avoid using -const uint PRIM_EGO_TRAJECTORY = 4u; -const uint PRIM_OBSTACLE = 5u; -const uint PRIM_EGO_OBSTACLE = 6u; -const uint PRIM_WAIT_LINE = 7u; -const uint PRIM_POLE = 8u; -const uint PRIM_ROAD_MARKING = 9u; -const uint PRIM_LANE_BOUNDARY = 10u; -const uint PRIM_TRAFFIC_LIGHT = 11u; -const uint PRIM_TRAFFIC_SIGN = 12u; -const uint PRIM_INTERSECTION = 13u; -const uint PRIM_ROAD_ISLAND = 14u; -const uint PRIM_BUFFER_ZONE = 15u; -// Lane line variants by color/style -const uint PRIM_LANE_LINE_WHITE_SOLID = 16u; -const uint PRIM_LANE_LINE_WHITE_DASHED = 17u; -const uint PRIM_LANE_LINE_YELLOW_SOLID = 18u; -const uint PRIM_LANE_LINE_YELLOW_DASHED = 19u; -// Dot primitives - each vertex is rendered as a circle -const uint PRIM_DOT_YELLOW = 20u; -const uint PRIM_DOT_WHITE = 21u; - -// Camera type IDs -const uint CAMERA_TYPE_REGULAR = 0u; -const uint CAMERA_TYPE_BEV = 1u; - -//============================================================================= -// Hardcoded Primitive Styles (matching wm-render colorscheme v3) -//============================================================================= - -// Colors (RGB normalized) - matching imaginaire4 v3 colorscheme -// Source: imaginaire4/imaginaire/auxiliary/world_scenario/color_scheme/config_color_hdmap.json -const vec3 COLOR_ROAD_BOUNDARY = vec3(253.0/255.0, 1.0/255.0, 232.0/255.0); // Magenta (253, 1, 232) -const vec3 COLOR_LANE_LINE = vec3(98.0/255.0, 183.0/255.0, 249.0/255.0); // Cyan (98, 183, 249) - "lanelines" (legacy) -const vec3 COLOR_CROSSWALK = vec3(139.0/255.0, 93.0/255.0, 255.0/255.0); // Purple (139, 93, 255) -const vec3 COLOR_STATIC_OBSTACLE = vec3(255.0/255.0, 100.0/255.0, 0.0/255.0); // Orange (legacy) -const vec3 COLOR_EGO_TRAJECTORY = vec3(0.0/255.0, 255.0/255.0, 0.0/255.0); // Green (0, 255, 0) -const vec3 COLOR_WAIT_LINE = vec3(108.0/255.0, 179.0/255.0, 59.0/255.0); // Yellow-green (108, 179, 59) -const vec3 COLOR_POLE = vec3(183.0/255.0, 69.0/255.0, 177.0/255.0); // Purple-magenta (183, 69, 177) -const vec3 COLOR_ROAD_MARKING = vec3(20.0/255.0, 254.0/255.0, 185.0/255.0); // Cyan-green (20, 254, 185) -const vec3 COLOR_LANE_BOUNDARY = vec3(98.0/255.0, 183.0/255.0, 249.0/255.0); // Cyan (same as lane line) -const vec3 COLOR_TRAFFIC_LIGHT = vec3(100.0/255.0, 100.0/255.0, 100.0/255.0); // Gray (100, 100, 100) -const vec3 COLOR_TRAFFIC_SIGN = vec3(8.0/255.0, 2.0/255.0, 255.0/255.0); // Blue (8, 2, 255) -const vec3 COLOR_INTERSECTION = vec3(80.0/255.0, 80.0/255.0, 120.0/255.0); // Dark blue-gray (approximated) -const vec3 COLOR_ROAD_ISLAND = vec3(60.0/255.0, 120.0/255.0, 60.0/255.0); // Dark green (approximated) -const vec3 COLOR_BUFFER_ZONE = vec3(120.0/255.0, 80.0/255.0, 80.0/255.0); // Dark red-brown (approximated) -// Lane line variants from config_color_geometry_laneline.json -const vec3 COLOR_LANE_LINE_WHITE = vec3(255.0/255.0, 255.0/255.0, 255.0/255.0); // White (255, 255, 255) -const vec3 COLOR_LANE_LINE_YELLOW = vec3(255.0/255.0, 255.0/255.0, 0.0/255.0); // Yellow (255, 255, 0) - -// Default polyline widths (pixels at reference resolution 1280x720) -const float DEFAULT_WIDTH_POLYLINE_REGULAR = 7.0; -const float DEFAULT_WIDTH_POLYLINE_BEV = 4.0; -const float DEFAULT_WIDTH_EGO_TRAJ_REGULAR = 12.0; -const float DEFAULT_WIDTH_EGO_TRAJ_BEV = 5.0; -const float DEFAULT_WIDTH_POLE_REGULAR = 5.0; // Poles are thinner (reference: 5 vs 12) -const float DEFAULT_WIDTH_POLE_BEV = 3.0; -const float DEFAULT_WIDTH_WIREFRAME = 2.0; - -// Configurable width uniforms (set from Python, or use defaults) - -// Compute depth-based scaling factor for line width -// z_ndc is in [-1, 1] where -1 is near, +1 is far -// Returns 1.0 at near, 0.0 at far (linear fade) -float get_depth_scale(vec4 clip) { - if (pc.u_depth_scaling < 0.5) return 1.0; // Disabled - float z_ndc = clip.z / clip.w; // Convert to NDC - float depth_scale = 1.0 - z_ndc; // Map [-1,1] to [1,0] - return clamp(depth_scale, 0.0, 1.0); -} - -// Color palette buffer (optional, configured from Python) -// Declared early so get_prim_color can use it; actual buffer layout defined later -layout(std430, binding = 10) readonly buffer ColorPaletteBufferEarly { - vec4 g_color_palette[]; -}; - -// Get default color for primitive type (hardcoded fallback) -vec3 get_default_prim_color(uint prim_type_id) { - if (prim_type_id == PRIM_ROAD_BOUNDARY) return COLOR_ROAD_BOUNDARY; - if (prim_type_id == PRIM_LANE_LINE) return COLOR_LANE_LINE; - if (prim_type_id == PRIM_CROSSWALK) return COLOR_CROSSWALK; - if (prim_type_id == PRIM_STATIC_OBSTACLE) return COLOR_STATIC_OBSTACLE; - if (prim_type_id == PRIM_EGO_TRAJECTORY) return COLOR_EGO_TRAJECTORY; - if (prim_type_id == PRIM_WAIT_LINE) return COLOR_WAIT_LINE; - if (prim_type_id == PRIM_POLE) return COLOR_POLE; - if (prim_type_id == PRIM_ROAD_MARKING) return COLOR_ROAD_MARKING; - if (prim_type_id == PRIM_LANE_BOUNDARY) return COLOR_LANE_BOUNDARY; - if (prim_type_id == PRIM_TRAFFIC_LIGHT) return COLOR_TRAFFIC_LIGHT; - if (prim_type_id == PRIM_TRAFFIC_SIGN) return COLOR_TRAFFIC_SIGN; - if (prim_type_id == PRIM_INTERSECTION) return COLOR_INTERSECTION; - if (prim_type_id == PRIM_ROAD_ISLAND) return COLOR_ROAD_ISLAND; - if (prim_type_id == PRIM_BUFFER_ZONE) return COLOR_BUFFER_ZONE; - // Lane line variants - if (prim_type_id == PRIM_LANE_LINE_WHITE_SOLID) return COLOR_LANE_LINE_WHITE; - if (prim_type_id == PRIM_LANE_LINE_WHITE_DASHED) return COLOR_LANE_LINE_WHITE; - if (prim_type_id == PRIM_LANE_LINE_YELLOW_SOLID) return COLOR_LANE_LINE_YELLOW; - if (prim_type_id == PRIM_LANE_LINE_YELLOW_DASHED) return COLOR_LANE_LINE_YELLOW; - if (prim_type_id == PRIM_DOT_YELLOW) return COLOR_LANE_LINE_YELLOW; - if (prim_type_id == PRIM_DOT_WHITE) return COLOR_LANE_LINE_WHITE; - return vec3(1.0, 1.0, 1.0); // Default white for obstacles -} - -// Get color for primitive type (checks palette first, then falls back to defaults) -vec3 get_prim_color(uint prim_type_id) { - // If color palette is configured, check if this prim_type has a custom color - // Alpha < 0 means "use default", alpha >= 0 means "use this color" - if (pc.u_color_palette_size > 0 && prim_type_id < uint(pc.u_color_palette_size)) { - vec4 palette_color = g_color_palette[prim_type_id]; - if (palette_color.a >= 0.0) { - return palette_color.rgb; - } - } - // Fall back to hardcoded defaults - return get_default_prim_color(prim_type_id); -} - -// Check if primitive is a dot type (rendered as circles at each vertex) -bool is_dot_primitive(uint prim_type_id) { - return prim_type_id == PRIM_DOT_YELLOW || prim_type_id == PRIM_DOT_WHITE; -} - -// Get polyline width for primitive type and camera type (scaled by resolution) -float get_prim_width(uint prim_type_id, uint camera_type_id) { - bool is_bev = (camera_type_id == CAMERA_TYPE_BEV); - float scale = (pc.u_resolution_scale > 0.0) ? pc.u_resolution_scale : 1.0; - - float base_width; - if (prim_type_id == PRIM_EGO_TRAJECTORY) { - float default_w = is_bev ? DEFAULT_WIDTH_EGO_TRAJ_BEV : DEFAULT_WIDTH_EGO_TRAJ_REGULAR; - float custom_w = is_bev ? pc.u_width_ego_traj_bev : pc.u_width_ego_traj_regular; - base_width = (custom_w > 0.0) ? custom_w : default_w; - } else if (prim_type_id == PRIM_POLE) { - // Poles use thinner lines (reference: 5 pixels vs 12 for other polylines) - base_width = is_bev ? DEFAULT_WIDTH_POLE_BEV : DEFAULT_WIDTH_POLE_REGULAR; - } else { - float default_w = is_bev ? DEFAULT_WIDTH_POLYLINE_BEV : DEFAULT_WIDTH_POLYLINE_REGULAR; - float custom_w = is_bev ? pc.u_width_polyline_bev : pc.u_width_polyline_regular; - base_width = (custom_w > 0.0) ? custom_w : default_w; - } - return base_width * scale; -} - -// Get wireframe edge width (scaled by resolution) -float get_wireframe_width() { - float scale = (pc.u_resolution_scale > 0.0) ? pc.u_resolution_scale : 1.0; - float base_width = (pc.u_width_wireframe > 0.0) ? pc.u_width_wireframe : DEFAULT_WIDTH_WIREFRAME; - return base_width * scale; -} - -//============================================================================= -// Data Structures (must match C++ structs) -//============================================================================= - -// TimestampedPolylinePool (64 bytes) -struct TimestampedPolylinePool { - uint num_timestamps; - uint num_varrays; - uint num_vertices; - uint prim_type_id; // Index into PrimitiveStyle lookup table - uint timestamps_offset; - uint ts_varrays_ps_offset; - uint varrays_ps_offset; - uint vertices_offset; - uint aabb_offset; // Per-element AABB in float buffer (6 floats each: min xyz, max xyz) - uint _pad1, _pad2, _pad3, _pad4, _pad5, _pad6, _pad7; // Padding to 64 bytes -}; - -// TimestampedPolygonPool (64 bytes) -struct TimestampedPolygonPool { - uint num_timestamps; - uint num_varrays; - uint num_vertices; - uint num_triangles; - uint prim_type_id; // Index into PrimitiveStyle lookup table - uint timestamps_offset; - uint ts_varrays_ps_offset; - uint varrays_ps_offset; - uint tri_ps_offset; - uint vertices_offset; - uint triangles_offset; - uint aabb_offset; // Per-element AABB in float buffer (6 floats each: min xyz, max xyz) - uint _pad1, _pad2, _pad3, _pad4; // Padding to 64 bytes (16 uints) -}; - -// CubePool (64 bytes) - used for obstacles, traffic lights, traffic signs, etc. -// Renamed from ObstaclePool but keeping struct name for backward compat -struct ObstaclePool { - uint num_cubes; // Was: num_obstacles - uint num_timestamps; - uint num_track_poses; - uint prim_type_id; // Semantic type for color lookup - uint timestamps_offset; // Global timestamps for this pool - uint cube_ts_ps_offset; // Per-cube track length prefix sum (was: obstacle_ts_ps_offset) - uint track_timestamps_offset; // Per-pose timestamps in float buffer (as 2x uint for int64) - uint translations_offset; // Per-pose translations (3 floats each) - uint quaternions_offset; // Per-pose quaternions (4 floats each) - uint scales_offset; // Per-cube scales (3 floats each) - uint colors_offset; // Per-cube colors (6 floats each) - uint render_flags; // CUBE_FLAG_* bits (e.g., CUBE_FLAG_WIREFRAME) - uint _pad2, _pad3, _pad4, _pad5; // 4 padding fields for 64 bytes total -}; - -// Cube render flags -const uint CUBE_FLAG_WIREFRAME = 1u; // Draw wireframe edges in addition to solid faces - -// TimestampedScene (128 bytes) -struct TimestampedScene { - uint num_polyline_pools; - uint polyline_pools_offset; - uint num_polygon_pools; - uint polygon_pools_offset; - uint num_cube_pools; // Was: has_obstacle_pool (0/1), now supports multiple - uint cube_pools_offset; // Was: obstacle_pool_offset - uint timestamps_buffer_offset; - uint int32_buffer_offset; - uint vertex_buffer_offset; - uint triangle_buffer_offset; - uint pose_buffer_offset; - uint float_buffer_offset; - uint _pad[20]; -}; - -// RenderQuery (16 bytes) -struct RenderQuery { - uint scene_id; - uint camera_id; - int64_t timestamp_us; - uint camera_type_id; // CAMERA_TYPE_REGULAR or CAMERA_TYPE_BEV - uint _pad1, _pad2, _pad3; // Padding to 32 bytes -}; - -// FThetaCamera (72 bytes) -struct FThetaCamera { - float cx, cy; - float img_w, img_h; - float poly0, poly1, poly2, poly3, poly4, poly5; - float max_ray_angle; - float max_distortion_val; - float max_distortion_dval; - float depth_max; - float ld_c, ld_d, ld_e, ld_f; -}; - -// CameraPose (64 bytes) -struct CameraPose { - mat4 world_to_camera; -}; - -// Vertex (16 bytes) -struct Vertex { - float x, y, z; - float _pad; -}; - -//============================================================================= -// Buffer Bindings -//============================================================================= - -// Global data buffers -layout(std430, binding = 0) readonly buffer TimestampsBuffer { - int64_t g_timestamps[]; -}; - -layout(std430, binding = 1) readonly buffer Int32Buffer { - int g_int32[]; -}; - -layout(std430, binding = 2) readonly buffer VertexBuffer { - Vertex g_vertices[]; -}; - -layout(std430, binding = 3) readonly buffer TriangleBuffer { - uvec3 g_triangles[]; -}; - -layout(std430, binding = 4) readonly buffer PoseBuffer { - CameraPose g_poses[]; -}; - -layout(std430, binding = 5) readonly buffer FloatBuffer { - float g_floats[]; -}; - -// Scene metadata -layout(std430, binding = 6) readonly buffer SceneBuffer { - TimestampedScene g_scenes[]; -}; - -layout(std430, binding = 7) readonly buffer PolylinePoolBuffer { - TimestampedPolylinePool g_polyline_pools[]; -}; - -layout(std430, binding = 8) readonly buffer PolygonPoolBuffer { - TimestampedPolygonPool g_polygon_pools[]; -}; - -layout(std430, binding = 9) readonly buffer ObstaclePoolBuffer { - ObstaclePool g_obstacle_pools[]; -}; - -// Camera buffers -layout(std430, binding = 11) readonly buffer CameraIntrinsicsBuffer { - FThetaCamera g_camera_intrinsics[]; -}; - -layout(std430, binding = 12) readonly buffer CameraPoseBuffer { - CameraPose g_camera_poses[]; // One per query (dynamic viewpoints) -}; - -// Query buffer -layout(std430, binding = 13) readonly buffer QueryBuffer { - RenderQuery g_queries[]; -}; - -// Uniforms -// Spatial culling: elements beyond depth_max * scale from the camera are -// discarded in the task shader. Scale > 1 gives headroom so nothing at -// the visible boundary pops in/out. Set to 0 to disable culling. - -//============================================================================= -// GPU Binary Search -// Returns index of last element <= target, or -1 if target < all elements -//============================================================================= - -int binary_search_timestamps(uint base_offset, uint count, int64_t target) { - if (count == 0u) return -1; - - int left = 0; - int right = int(count) - 1; - int result = -1; - - while (left <= right) { - int mid = (left + right) / 2; - int64_t val = g_timestamps[base_offset + uint(mid)]; - - if (val <= target) { - result = mid; - left = mid + 1; - } else { - right = mid - 1; - } - } - - return result; -} - -//============================================================================= -// Quaternion Math for Track Interpolation -//============================================================================= - -// Quaternion dot product -float quat_dot(vec4 a, vec4 b) { - return a.x*b.x + a.y*b.y + a.z*b.z + a.w*b.w; -} - -// Quaternion normalize -vec4 quat_normalize(vec4 q) { - float len = length(q); - return len > 1e-10 ? q / len : vec4(0.0, 0.0, 0.0, 1.0); -} - -// Quaternion spherical linear interpolation (slerp) -vec4 quat_slerp(vec4 q0, vec4 q1, float t) { - // Ensure shortest path - float d = quat_dot(q0, q1); - if (d < 0.0) { - q1 = -q1; - d = -d; - } - - // If quaternions are very close, use linear interpolation - if (d > 0.9995) { - return quat_normalize(mix(q0, q1, t)); - } - - // Spherical interpolation - float theta_0 = acos(clamp(d, -1.0, 1.0)); - float theta = theta_0 * t; - float sin_theta = sin(theta); - float sin_theta_0 = sin(theta_0); - - float s0 = cos(theta) - d * sin_theta / sin_theta_0; - float s1 = sin_theta / sin_theta_0; - - return quat_normalize(s0 * q0 + s1 * q1); -} - -// Convert quaternion (x, y, z, w) to 3x3 rotation matrix -// GLSL mat3 is column-major: mat3(col0, col1, col2) -mat3 quat_to_matrix(vec4 q) { - float x = q.x, y = q.y, z = q.z, w = q.w; - - float x2 = x + x, y2 = y + y, z2 = z + z; - float xx = x * x2, xy = x * y2, xz = x * z2; - float yy = y * y2, yz = y * z2, zz = z * z2; - float wx = w * x2, wy = w * y2, wz = w * z2; - - // Column 0: (R00, R10, R20), Column 1: (R01, R11, R21), Column 2: (R02, R12, R22) - return mat3( - 1.0 - (yy + zz), xy + wz, xz - wy, // Column 0 - xy - wz, 1.0 - (xx + zz), yz + wx, // Column 1 - xz + wy, yz - wx, 1.0 - (xx + yy) // Column 2 - ); -} - -// Build 4x4 transform from translation and quaternion (with scale) -mat4 build_transform(vec3 translation, vec4 quaternion, vec3 scale) { - mat3 rot = quat_to_matrix(quaternion); - - // Apply scale to each column of rotation matrix - mat4 result = mat4( - vec4(rot[0] * scale.x, 0.0), - vec4(rot[1] * scale.y, 0.0), - vec4(rot[2] * scale.z, 0.0), - vec4(translation, 1.0) - ); - - return result; -} - -// Binary search for track interpolation (returns index where t0 <= target < t1) -// Returns -1 if target is outside the track range -int binary_search_track(uint base_offset, uint count, int64_t target) { - if (count < 2u) return -1; // Need at least 2 points for interpolation - - int64_t first_ts = g_timestamps[base_offset]; - int64_t last_ts = g_timestamps[base_offset + count - 1u]; - - // Check bounds - if (target < first_ts || target > last_ts) return -1; - - int left = 0; - int right = int(count) - 2; // Max valid index for interpolation start - int result = 0; - - while (left <= right) { - int mid = (left + right) / 2; - int64_t t0 = g_timestamps[base_offset + uint(mid)]; - int64_t t1 = g_timestamps[base_offset + uint(mid) + 1u]; - - if (t0 <= target && target <= t1) { - return mid; - } else if (target < t0) { - right = mid - 1; - } else { - left = mid + 1; - } - } - - return -1; // Should not reach here for valid input -} - -//============================================================================= -// Spatial Culling Helpers -//============================================================================= - -// AABB-AABB overlap test -bool cull_aabb_overlap(vec3 a_min, vec3 a_max, vec3 b_min, vec3 b_max) { - return all(lessThanEqual(a_min, b_max)) && all(greaterThanEqual(a_max, b_min)); -} - -// Sphere-AABB overlap test -bool cull_sphere_aabb_overlap(vec3 center, float radius, vec3 b_min, vec3 b_max) { - vec3 nearest = clamp(center, b_min, b_max); - vec3 d = center - nearest; - return dot(d, d) <= radius * radius; -} - -// Extract camera world position from view pose -vec3 get_camera_world_pos(CameraPose pose) { - mat3 R = mat3(pose.world_to_camera); - return -transpose(R) * pose.world_to_camera[3].xyz; -} - -//============================================================================= -// F-theta Projection -//============================================================================= - -vec3 rotate_rodrigues(vec3 v, vec3 r) { - float theta = length(r); - if (theta < 1e-8) return v; - vec3 k = r / theta; - float c = cos(theta); - float s = sin(theta); - return v * c + cross(k, v) * s + k * dot(k, v) * (1.0 - c); -} - -// F-theta projection: world point -> NDC -// Supports >180° FOV fisheye cameras where points can have negative z (behind camera plane) -vec4 ftheta_project(vec3 world_pos, CameraPose pose, FThetaCamera cam) { - vec3 cam_pt = (pose.world_to_camera * vec4(world_pos, 1.0)).xyz; - float depth = cam_pt.z; - - float ray_norm = length(cam_pt); - - // Handle points at camera origin - if (ray_norm < 1e-6) { - return vec4(0.0, 0.0, 0.0, 1.0); - } - - float half_pi = 1.5707963; // π/2 - - // For cameras with FOV <= 180° (max_ray_angle <= π/2), points behind camera should be clipped - // Use pseudo-pinhole projection to push them far away in the correct direction - if (cam.max_ray_angle <= half_pi && depth < 0.001) { - float pseudo_focal = cam.poly1; - float x_clip = cam_pt.x * pseudo_focal / (cam.img_w * 0.5); - float y_clip = -cam_pt.y * pseudo_focal / (cam.img_h * 0.5); - return vec4(x_clip * 10.0, y_clip * 10.0, 1.0, 1.0); // Scale by 10 to push far outside - } - - float xy_norm = length(cam_pt.xy); - float cos_alpha = clamp(cam_pt.z / ray_norm, -1.0, 1.0); - float alpha = acos(cos_alpha); // alpha in [0, π] - - // Apply polynomial projection (with linear extrapolation beyond max_ray_angle) - float a2 = alpha * alpha; - float a3 = a2 * alpha; - float a4 = a2 * a2; - float a5 = a4 * alpha; - - float delta = cam.poly0 + cam.poly1 * alpha + cam.poly2 * a2 + - cam.poly3 * a3 + cam.poly4 * a4 + cam.poly5 * a5; - if (alpha > cam.max_ray_angle) { - delta = cam.max_distortion_val + (alpha - cam.max_ray_angle) * cam.max_distortion_dval; - } - - float scale = (xy_norm > 1e-6) ? (delta / xy_norm) : 0.0; - vec2 pixel_rel = scale * cam_pt.xy; - - vec2 pixel_dist; - pixel_dist.x = cam.ld_c * pixel_rel.x + cam.ld_d * pixel_rel.y; - pixel_dist.y = cam.ld_e * pixel_rel.x + cam.ld_f * pixel_rel.y; - - vec2 pixel = pixel_dist + vec2(cam.cx, cam.cy); - - float x_ndc = 2.0 * pixel.x / cam.img_w - 1.0; - float y_ndc = 1.0 - 2.0 * pixel.y / cam.img_h; - - // For z-buffer depth mapping: - // - Narrow FOV (<=180°): use signed depth (cam_pt.z) - // - Wide FOV (>180°): use ray_norm for front-camera vertices (unchanged), - // but push behind-camera vertices to depth_max so they never occlude - // forward geometry. ray_norm alone can't distinguish front from behind. - float z_value; - if (cam.max_ray_angle > half_pi) { - z_value = (depth >= 0.0) ? ray_norm : cam.depth_max; - } else { - z_value = depth; - } - float z_ndc = clamp(z_value / cam.depth_max, 0.0, 1.0); - - return vec4(x_ndc, y_ndc, z_ndc, 1.0); -} - -// Inline version that takes mat4 directly -float estimate_edge_distortion_pixels_mat4(vec3 v0, vec3 v1, mat4 world_to_cam, FThetaCamera cam) { - // Transform to camera space - vec3 cam_pt0 = (world_to_cam * vec4(v0, 1.0)).xyz; - vec3 cam_pt1 = (world_to_cam * vec4(v1, 1.0)).xyz; - vec3 mid_world = (v0 + v1) * 0.5; - vec3 cam_pt_mid = (world_to_cam * vec4(mid_world, 1.0)).xyz; - - // Just clamp depths to avoid division issues - - // For segments in front of camera, compute f-theta projection error directly - // Use depth-clamped projection to handle near-plane cases - float depth0 = max(cam_pt0.z, 0.001); - float depth1 = max(cam_pt1.z, 0.001); - float depth_mid = max(cam_pt_mid.z, 0.001); - - // Compute f-theta projection for each point - // We inline the projection to avoid struct-passing issues - vec2 pixel0, pixel1, pixel_mid; - { - float xy_norm = length(cam_pt0.xy); - float ray_norm = length(vec3(cam_pt0.xy, depth0)) + 1e-10; - float cos_alpha = clamp(depth0 / ray_norm, -1.0, 1.0); - float alpha = acos(cos_alpha); - float a2 = alpha * alpha; - float delta = cam.poly0 + cam.poly1 * alpha + cam.poly2 * a2 + - cam.poly3 * (a2 * alpha) + cam.poly4 * (a2 * a2) + cam.poly5 * (a2 * a2 * alpha); - if (alpha > cam.max_ray_angle) { - delta = cam.max_distortion_val + (alpha - cam.max_ray_angle) * cam.max_distortion_dval; - } - float scale = (xy_norm > 1e-6) ? (delta / xy_norm) : 0.0; - vec2 pixel_rel = scale * cam_pt0.xy; - vec2 pixel_dist = vec2(cam.ld_c * pixel_rel.x + cam.ld_d * pixel_rel.y, - cam.ld_e * pixel_rel.x + cam.ld_f * pixel_rel.y); - pixel0 = pixel_dist + vec2(cam.cx, cam.cy); - } - { - float xy_norm = length(cam_pt1.xy); - float ray_norm = length(vec3(cam_pt1.xy, depth1)) + 1e-10; - float cos_alpha = clamp(depth1 / ray_norm, -1.0, 1.0); - float alpha = acos(cos_alpha); - float a2 = alpha * alpha; - float delta = cam.poly0 + cam.poly1 * alpha + cam.poly2 * a2 + - cam.poly3 * (a2 * alpha) + cam.poly4 * (a2 * a2) + cam.poly5 * (a2 * a2 * alpha); - if (alpha > cam.max_ray_angle) { - delta = cam.max_distortion_val + (alpha - cam.max_ray_angle) * cam.max_distortion_dval; - } - float scale = (xy_norm > 1e-6) ? (delta / xy_norm) : 0.0; - vec2 pixel_rel = scale * cam_pt1.xy; - vec2 pixel_dist = vec2(cam.ld_c * pixel_rel.x + cam.ld_d * pixel_rel.y, - cam.ld_e * pixel_rel.x + cam.ld_f * pixel_rel.y); - pixel1 = pixel_dist + vec2(cam.cx, cam.cy); - } - { - float xy_norm = length(cam_pt_mid.xy); - float ray_norm = length(vec3(cam_pt_mid.xy, depth_mid)) + 1e-10; - float cos_alpha = clamp(depth_mid / ray_norm, -1.0, 1.0); - float alpha = acos(cos_alpha); - float a2 = alpha * alpha; - float delta = cam.poly0 + cam.poly1 * alpha + cam.poly2 * a2 + - cam.poly3 * (a2 * alpha) + cam.poly4 * (a2 * a2) + cam.poly5 * (a2 * a2 * alpha); - if (alpha > cam.max_ray_angle) { - delta = cam.max_distortion_val + (alpha - cam.max_ray_angle) * cam.max_distortion_dval; - } - float scale = (xy_norm > 1e-6) ? (delta / xy_norm) : 0.0; - vec2 pixel_rel = scale * cam_pt_mid.xy; - vec2 pixel_dist = vec2(cam.ld_c * pixel_rel.x + cam.ld_d * pixel_rel.y, - cam.ld_e * pixel_rel.x + cam.ld_f * pixel_rel.y); - pixel_mid = pixel_dist + vec2(cam.cx, cam.cy); - } - - // Compute error: distance from projected midpoint to linear interpolation - vec2 linear_pixel_mid = (pixel0 + pixel1) * 0.5; - float error_pixels = length(pixel_mid - linear_pixel_mid); - - // Clamp to reasonable range to handle edge cases - return clamp(error_pixels, 0.0, 10000.0); -} - -uint compute_subdivision_level(vec3 v0, vec3 v1, CameraPose pose, FThetaCamera cam, float threshold_pixels) { - float error = estimate_edge_distortion_pixels_mat4(v0, v1, pose.world_to_camera, cam); - - if (error < threshold_pixels) return 0u; - if (error < threshold_pixels * 2.0) return 1u; - if (error < threshold_pixels * 4.0) return 2u; - return 3u; -} - -//============================================================================= -// Barycentric Subdivision Utilities (shared with polygon/cube) -//============================================================================= - -uint bary_vertex_count(uint level) { - // Vertices = (n+1)(n+2)/2 where n = 2^level - if (level == 0u) return 3u; - if (level == 1u) return 6u; - if (level == 2u) return 15u; - return 45u; // level 3 -} - -uint bary_triangle_count(uint level) { - // Triangles = 4^level - if (level == 0u) return 1u; - if (level == 1u) return 4u; - if (level == 2u) return 16u; - return 64u; // level 3 -} - -vec2 bary_vertex_uv(uint vertex_idx, uint level) { - if (level == 0u) { - if (vertex_idx == 0u) return vec2(0.0, 0.0); - if (vertex_idx == 1u) return vec2(1.0, 0.0); - return vec2(0.0, 1.0); - } else if (level == 1u) { - vec2 uvs[6]; - uvs[0] = vec2(0.0, 0.0); - uvs[1] = vec2(1.0, 0.0); - uvs[2] = vec2(0.0, 1.0); - uvs[3] = vec2(0.5, 0.0); - uvs[4] = vec2(0.5, 0.5); - uvs[5] = vec2(0.0, 0.5); - return uvs[vertex_idx]; - } else if (level == 2u) { - uint row, col; - if (vertex_idx < 5u) { row = 0u; col = vertex_idx; } - else if (vertex_idx < 9u) { row = 1u; col = vertex_idx - 5u; } - else if (vertex_idx < 12u) { row = 2u; col = vertex_idx - 9u; } - else if (vertex_idx < 14u) { row = 3u; col = vertex_idx - 12u; } - else { row = 4u; col = 0u; } - return vec2(float(col) / 4.0, float(row) / 4.0); - } else { - // Level 3: 9 rows (0-8), row r has (9-r) vertices - uint row, col; - if (vertex_idx < 9u) { row = 0u; col = vertex_idx; } - else if (vertex_idx < 17u) { row = 1u; col = vertex_idx - 9u; } - else if (vertex_idx < 24u) { row = 2u; col = vertex_idx - 17u; } - else if (vertex_idx < 30u) { row = 3u; col = vertex_idx - 24u; } - else if (vertex_idx < 35u) { row = 4u; col = vertex_idx - 30u; } - else if (vertex_idx < 39u) { row = 5u; col = vertex_idx - 35u; } - else if (vertex_idx < 42u) { row = 6u; col = vertex_idx - 39u; } - else if (vertex_idx < 44u) { row = 7u; col = vertex_idx - 42u; } - else { row = 8u; col = 0u; } - return vec2(float(col) / 8.0, float(row) / 8.0); - } -} - -vec3 bary_interpolate(vec3 v0, vec3 v1, vec3 v2, vec2 uv) { - float w = 1.0 - uv.x - uv.y; - return v0 * w + v1 * uv.x + v2 * uv.y; -} - -uvec3 bary_triangle_indices(uint tri_idx, uint level) { - if (level == 0u) { - return uvec3(0u, 1u, 2u); - } else if (level == 1u) { - uvec3 tris[4]; - tris[0] = uvec3(0u, 3u, 5u); - tris[1] = uvec3(3u, 1u, 4u); - tris[2] = uvec3(5u, 4u, 2u); - tris[3] = uvec3(3u, 4u, 5u); - return tris[tri_idx]; - } else if (level == 2u) { - uint row_start[5] = uint[5](0u, 5u, 9u, 12u, 14u); - uint t = tri_idx; - uint row = 0u, col = 0u; - bool is_down = false; - - if (t < 7u) { - row = 0u; - if (t < 4u) { col = t; is_down = false; } - else { col = t - 4u; is_down = true; } - } else if (t < 12u) { - row = 1u; - uint lt = t - 7u; - if (lt < 3u) { col = lt; is_down = false; } - else { col = lt - 3u; is_down = true; } - } else if (t < 15u) { - row = 2u; - uint lt = t - 12u; - if (lt < 2u) { col = lt; is_down = false; } - else { col = lt - 2u; is_down = true; } - } else { - row = 3u; col = 0u; is_down = false; - } - - uint i0, i1, i2; - if (!is_down) { - i0 = row_start[row] + col; - i1 = row_start[row] + col + 1u; - i2 = row_start[row + 1u] + col; - } else { - i0 = row_start[row] + col + 1u; - i1 = row_start[row + 1u] + col + 1u; - i2 = row_start[row + 1u] + col; - } - return uvec3(i0, i1, i2); - } else { - // Level 3: row_start for 9 rows - uint row_start[9] = uint[9](0u, 9u, 17u, 24u, 30u, 35u, 39u, 42u, 44u); - uint t = tri_idx; - uint row = 0u, col = 0u; - bool is_down = false; - - // Row 0: 8 up + 7 down = 15, Row 1: 7 up + 6 down = 13, etc. - if (t < 15u) { - row = 0u; - if (t < 8u) { col = t; is_down = false; } - else { col = t - 8u; is_down = true; } - } else if (t < 28u) { - row = 1u; uint lt = t - 15u; - if (lt < 7u) { col = lt; is_down = false; } - else { col = lt - 7u; is_down = true; } - } else if (t < 39u) { - row = 2u; uint lt = t - 28u; - if (lt < 6u) { col = lt; is_down = false; } - else { col = lt - 6u; is_down = true; } - } else if (t < 48u) { - row = 3u; uint lt = t - 39u; - if (lt < 5u) { col = lt; is_down = false; } - else { col = lt - 5u; is_down = true; } - } else if (t < 55u) { - row = 4u; uint lt = t - 48u; - if (lt < 4u) { col = lt; is_down = false; } - else { col = lt - 4u; is_down = true; } - } else if (t < 60u) { - row = 5u; uint lt = t - 55u; - if (lt < 3u) { col = lt; is_down = false; } - else { col = lt - 3u; is_down = true; } - } else if (t < 63u) { - row = 6u; uint lt = t - 60u; - if (lt < 2u) { col = lt; is_down = false; } - else { col = lt - 2u; is_down = true; } - } else { - row = 7u; col = 0u; is_down = false; - } - - uint i0, i1, i2; - if (!is_down) { - i0 = row_start[row] + col; - i1 = row_start[row] + col + 1u; - i2 = row_start[row + 1u] + col; - } else { - i0 = row_start[row] + col + 1u; - i1 = row_start[row + 1u] + col + 1u; - i2 = row_start[row + 1u] + col; - } - return uvec3(i0, i1, i2); - } -} - - -layout(local_size_x = 32) in; -// No per-vertex output arrays - all gradient data passed per-primitive -// This allows unlimited vertices (within mesh shader spec) -layout(triangles, max_vertices = 96, max_primitives = 128) out; - -struct ObstacleTaskPayload { - uint query_id; - uint obstacle_id; - mat4 object_to_world; - vec3 scale; - vec3 front_color; - vec3 back_color; - uint subdivision_level; // From task shader - uint render_flags; // CUBE_FLAG_* bits from pool - float is_bev; - uint face_mask; // Bitmask of front-facing faces -}; -taskPayloadSharedEXT ObstacleTaskPayload payload; - -out gl_MeshPerVertexNV { - vec4 gl_Position; -} gl_MeshVerticesEXT[]; - -perprimitiveEXT out gl_MeshPerPrimitiveNV { - int gl_Layer; -} gl_MeshPrimitivesEXT[]; - -// Per-primitive gradient data (no per-vertex outputs needed!) -layout(location = 0) perprimitiveEXT out CubeGradientBlock { - vec3 corner_t; // gradient t values at triangle's 3 corners - vec3 front_color; - vec3 back_color; - float is_bev; // 1.0 for BEV cameras (disables fog), 0.0 otherwise -} prim_out[]; - -// Unit cube vertices -const vec3 CUBE_VERTS[8] = vec3[8]( - vec3(-0.5, -0.5, -0.5), vec3(+0.5, -0.5, -0.5), - vec3(+0.5, +0.5, -0.5), vec3(-0.5, +0.5, -0.5), - vec3(-0.5, -0.5, +0.5), vec3(+0.5, -0.5, +0.5), - vec3(+0.5, +0.5, +0.5), vec3(-0.5, +0.5, +0.5) -); - -// Face vertex indices (CCW winding) -const uvec4 FACE_VERTS[6] = uvec4[6]( - uvec4(0, 3, 2, 1), // -Z (back) - uvec4(4, 5, 6, 7), // +Z (front) - uvec4(0, 4, 7, 3), // -X - uvec4(1, 2, 6, 5), // +X - uvec4(0, 1, 5, 4), // -Y - uvec4(3, 7, 6, 2) // +Y -); - -// 12 edges of cube (pairs of vertex indices) -const uvec2 CUBE_EDGES[12] = uvec2[12]( - uvec2(0,1), uvec2(1,2), uvec2(2,3), uvec2(3,0), // back face - uvec2(4,5), uvec2(5,6), uvec2(6,7), uvec2(7,4), // front face - uvec2(0,4), uvec2(1,5), uvec2(2,6), uvec2(3,7) // connecting edges -); - -// Edge wireframe color (light gray - matches reference: [200, 200, 200] / 255.0) -const vec3 EDGE_COLOR = vec3(0.784, 0.784, 0.784); - -void main() { - uint _prim_count = 0u; - uint workgroup_id = gl_WorkGroupID.x; - uint tid = gl_LocalInvocationID.x; - - RenderQuery query = g_queries[payload.query_id]; - FThetaCamera cam = g_camera_intrinsics[query.camera_id]; - CameraPose view_pose = g_camera_poses[payload.query_id]; - - // Workgroups 6-11 = wireframe edges (2 edges per workgroup, subdivided to match face tessellation) - if (workgroup_id >= 6u) { - uint wg_edge_offset = (workgroup_id - 6u) * 2u; // 0, 2, 4, 6, 8, 10 - float EDGE_WIDTH = get_wireframe_width(); - - // Edge-to-face adjacency for backface culling of wireframe edges - const uvec2 EDGE_FACES[12] = uvec2[12]( - uvec2(0, 4), uvec2(0, 3), uvec2(0, 5), uvec2(0, 2), - uvec2(1, 4), uvec2(1, 3), uvec2(1, 5), uvec2(1, 2), - uvec2(2, 4), uvec2(3, 4), uvec2(3, 5), uvec2(2, 5) - ); - - // Check if either edge in this workgroup is adjacent to a visible face - uint e0 = wg_edge_offset; - uint e1 = wg_edge_offset + 1u; - bool e0_vis = (payload.face_mask & ((1u << EDGE_FACES[e0].x) | (1u << EDGE_FACES[e0].y))) != 0u; - bool e1_vis = (payload.face_mask & ((1u << EDGE_FACES[e1].x) | (1u << EDGE_FACES[e1].y))) != 0u; - - if (!e0_vis && !e1_vis) { - _prim_count = 0u; SetMeshOutputsEXT(0u, _prim_count); - return; - } - - // Number of segments per edge based on subdivision level (matches face tessellation) - // subdiv 0 = 1 segment, subdiv 1 = 2 segments, subdiv 2 = 4 segments - uint segs_per_edge = 1u << payload.subdivision_level; // 1, 2, or 4 - uint total_segments = segs_per_edge * 2u; // 2 edges - - uint total_edge_verts = total_segments * 4u; - _prim_count = total_segments * 2u; SetMeshOutputsEXT(total_edge_verts, _prim_count); // 2 triangles per segment quad - - // Process both edges in this workgroup - for (uint local_seg = tid; local_seg < total_segments; local_seg += 32u) { - uint edge_in_wg = local_seg / segs_per_edge; // 0 or 1 - uint seg_in_edge = local_seg % segs_per_edge; - uint edge_id = wg_edge_offset + edge_in_wg; - - // Skip edges adjacent only to back-facing faces - uvec2 adj = EDGE_FACES[edge_id]; - if ((payload.face_mask & ((1u << adj.x) | (1u << adj.y))) == 0u) { - uint base_vert = local_seg * 4u; - gl_MeshVerticesEXT[base_vert].gl_Position = vec4(0, 0, 0, 1); - gl_MeshVerticesEXT[base_vert + 1u].gl_Position = vec4(0, 0, 0, 1); - gl_MeshVerticesEXT[base_vert + 2u].gl_Position = vec4(0, 0, 0, 1); - gl_MeshVerticesEXT[base_vert + 3u].gl_Position = vec4(0, 0, 0, 1); - continue; - } - - // Get edge endpoints - uvec2 edge = CUBE_EDGES[edge_id]; - vec3 v0_local = CUBE_VERTS[edge.x] * payload.scale; - vec3 v1_local = CUBE_VERTS[edge.y] * payload.scale; - - vec3 v0_world = (payload.object_to_world * vec4(v0_local, 1.0)).xyz; - vec3 v1_world = (payload.object_to_world * vec4(v1_local, 1.0)).xyz; - - // Interpolate two world-space points for this segment - float t0 = float(seg_in_edge) / float(segs_per_edge); - float t1 = float(seg_in_edge + 1u) / float(segs_per_edge); - - vec3 pt0_world = mix(v0_world, v1_world, t0); - vec3 pt1_world = mix(v0_world, v1_world, t1); - - // Project to clip space (f-theta curvature applied here) - vec4 clip0 = ftheta_project(pt0_world, view_pose, cam); - vec4 clip1 = ftheta_project(pt1_world, view_pose, cam); - - // Edge direction and perpendicular for width - vec2 ndc0 = clip0.xy / clip0.w; - vec2 ndc1 = clip1.xy / clip1.w; - vec2 edge_dir = normalize(ndc1 - ndc0); - vec2 perp = vec2(-edge_dir.y, edge_dir.x); - vec2 offset = perp * EDGE_WIDTH / vec2(cam.img_w, cam.img_h); - - // Create 4 vertices for the quad - uint base_vert = local_seg * 4u; - - vec4 off0 = vec4(offset * clip0.w, 0.0, 0.0); - vec4 off1 = vec4(offset * clip1.w, 0.0, 0.0); - - // Depth bias to render edges on top of faces - float z_bias0 = -0.001 * clip0.w; - float z_bias1 = -0.001 * clip1.w; - - vec4 p0 = clip0 - off0; p0.z += z_bias0; - vec4 p1 = clip0 + off0; p1.z += z_bias0; - vec4 p2 = clip1 + off1; p2.z += z_bias1; - vec4 p3 = clip1 - off1; p3.z += z_bias1; - - gl_MeshVerticesEXT[base_vert + 0u].gl_Position = p0; - gl_MeshVerticesEXT[base_vert + 1u].gl_Position = p1; - gl_MeshVerticesEXT[base_vert + 2u].gl_Position = p2; - gl_MeshVerticesEXT[base_vert + 3u].gl_Position = p3; - } - - barrier(); - - // Generate triangle indices for segment quads - for (uint local_seg = tid; local_seg < total_segments; local_seg += 32u) { - uint base_vert = local_seg * 4u; - uint base_tri = local_seg * 2u; - - // Triangle 1: 0, 1, 2 - gl_PrimitiveTriangleIndicesEXT[base_tri + 0u] = uvec3(base_vert + 0u, base_vert + 1u, base_vert + 2u); - gl_MeshPrimitivesEXT[base_tri + 0u].gl_Layer = int(payload.query_id); - // Wireframe uses solid edge color (front = back = EDGE_COLOR, corner_t doesn't matter) - prim_out[base_tri + 0u].corner_t = vec3(0.5); - prim_out[base_tri + 0u].front_color = EDGE_COLOR; - prim_out[base_tri + 0u].back_color = EDGE_COLOR; - prim_out[base_tri + 0u].is_bev = payload.is_bev; - - // Triangle 2: 0, 2, 3 - gl_PrimitiveTriangleIndicesEXT[base_tri + 1u] = uvec3(base_vert + 0u, base_vert + 2u, base_vert + 3u); - gl_MeshPrimitivesEXT[base_tri + 1u].gl_Layer = int(payload.query_id); - prim_out[base_tri + 1u].corner_t = vec3(0.5); - prim_out[base_tri + 1u].front_color = EDGE_COLOR; - prim_out[base_tri + 1u].back_color = EDGE_COLOR; - prim_out[base_tri + 1u].is_bev = payload.is_bev; - } - - return; - } - - // Workgroups 0-5: Face rendering (2 triangles per face) - uint face_id = workgroup_id; - uint subdiv = payload.subdivision_level; - - // Backface culling: skip faces not visible from camera - if ((payload.face_mask & (1u << face_id)) == 0u) { - _prim_count = 0u; SetMeshOutputsEXT(0u, _prim_count); - return; - } - - // Get face corner info - uvec4 face = FACE_VERTS[face_id]; - - // Compute per-corner gradient t values and world positions - float corner_t[4]; - vec3 corners[4]; - for (uint i = 0u; i < 4u; i++) { - uint vert_idx = (i == 0u) ? face.x : (i == 1u) ? face.y : (i == 2u) ? face.z : face.w; - vec3 local_vert = CUBE_VERTS[vert_idx]; - corner_t[i] = local_vert.x + 0.5; // 0 at back (-X), 1 at front (+X) - corners[i] = (payload.object_to_world * vec4(local_vert * payload.scale, 1.0)).xyz; - } - - // Use shared barycentric subdivision utilities - uint verts_per_tri = bary_vertex_count(subdiv); - uint tris_per_tri = bary_triangle_count(subdiv); - - // 2 triangles per face - uint total_verts = verts_per_tri * 2u; - uint total_tris = tris_per_tri * 2u; - - _prim_count = total_tris; SetMeshOutputsEXT(total_verts, _prim_count); - - // Face = 2 triangles: (c0,c1,c2) and (c0,c2,c3) - vec3 tri_verts[6]; - float tri_t[6]; - tri_verts[0] = corners[0]; tri_verts[1] = corners[1]; tri_verts[2] = corners[2]; - tri_verts[3] = corners[0]; tri_verts[4] = corners[2]; tri_verts[5] = corners[3]; - tri_t[0] = corner_t[0]; tri_t[1] = corner_t[1]; tri_t[2] = corner_t[2]; - tri_t[3] = corner_t[0]; tri_t[4] = corner_t[2]; tri_t[5] = corner_t[3]; - - // Generate vertices for both triangles (position only, no per-vertex outputs) - for (uint t = 0u; t < 2u; t++) { - vec3 v0 = tri_verts[t * 3u]; - vec3 v1 = tri_verts[t * 3u + 1u]; - vec3 v2 = tri_verts[t * 3u + 2u]; - uint vert_base = t * verts_per_tri; - - for (uint v = tid; v < verts_per_tri; v += 32u) { - vec2 uv = bary_vertex_uv(v, subdiv); - vec3 pt = bary_interpolate(v0, v1, v2, uv); - vec4 clip = ftheta_project(pt, view_pose, cam); - gl_MeshVerticesEXT[vert_base + v].gl_Position = clip; - } - } - - barrier(); - - // Generate triangle indices and set per-primitive data (including corner_t) - for (uint t = 0u; t < 2u; t++) { - uint vert_base = t * verts_per_tri; - uint tri_base = t * tris_per_tri; - float t0 = tri_t[t * 3u]; - float t1 = tri_t[t * 3u + 1u]; - float t2 = tri_t[t * 3u + 2u]; - - for (uint i = tid; i < tris_per_tri; i += 32u) { - uvec3 idx = bary_triangle_indices(i, subdiv); - uint idx_base = (tri_base + i) * 3u; - gl_PrimitiveTriangleIndicesEXT[(idx_base) / 3u] = uvec3(vert_base + idx.x, vert_base + idx.y, vert_base + idx.z); - gl_MeshPrimitivesEXT[tri_base + i].gl_Layer = int(payload.query_id); - - // Compute gradient t values at each corner of this sub-triangle - vec2 uv0 = bary_vertex_uv(idx.x, subdiv); - vec2 uv1 = bary_vertex_uv(idx.y, subdiv); - vec2 uv2 = bary_vertex_uv(idx.z, subdiv); - vec3 corner_t_values = vec3( - (1.0 - uv0.x - uv0.y) * t0 + uv0.x * t1 + uv0.y * t2, - (1.0 - uv1.x - uv1.y) * t0 + uv1.x * t1 + uv1.y * t2, - (1.0 - uv2.x - uv2.y) * t0 + uv2.x * t1 + uv2.y * t2 - ); - - // Set per-primitive gradient data - prim_out[tri_base + i].corner_t = corner_t_values; - prim_out[tri_base + i].front_color = payload.front_color; - prim_out[tri_base + i].back_color = payload.back_color; - prim_out[tri_base + i].is_bev = payload.is_bev; - } - } -} diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/ts_obstacle.task.glsl b/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/ts_obstacle.task.glsl deleted file mode 100644 index 327d159c2..000000000 --- a/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/ts_obstacle.task.glsl +++ /dev/null @@ -1,1181 +0,0 @@ -#version 460 -#extension GL_EXT_mesh_shader : require -#extension GL_EXT_shader_explicit_arithmetic_types_int64 : require - -layout(push_constant) uniform PushConstants { - float u_width_polyline_regular; - float u_width_polyline_bev; - float u_width_ego_traj_regular; - float u_width_ego_traj_bev; - float u_width_wireframe; - float u_resolution_scale; - float u_depth_scaling; - int u_max_extrapolation_us; - int u_color_palette_size; - uint u_num_queries; - float u_tessellation_threshold; - uint u_max_tessellation_polyline; - uint u_max_tessellation_polygon; - uint u_max_tessellation_cube; - float u_cull_radius_scale; - float u_fog_enabled; - uint u_max_obstacles; - uint u_cube_pool_index; - uint u_num_polygon_pools; - uint u_max_varrays_per_pool; - uint u_num_polyline_pools; -} pc; - -#define IF_ZMODIFY(x) - -// Cap styles -const uint CAP_NONE = 0u; -const uint CAP_FLAT = 1u; -const uint CAP_ROUND = 2u; - -// Primitive type IDs (must match Python PRIM_* constants in ops.py) -const uint PRIM_ROAD_BOUNDARY = 0u; -const uint PRIM_LANE_LINE = 1u; // Legacy cyan lane line -const uint PRIM_CROSSWALK = 2u; -const uint PRIM_STATIC_OBSTACLE = 3u; // Legacy, avoid using -const uint PRIM_EGO_TRAJECTORY = 4u; -const uint PRIM_OBSTACLE = 5u; -const uint PRIM_EGO_OBSTACLE = 6u; -const uint PRIM_WAIT_LINE = 7u; -const uint PRIM_POLE = 8u; -const uint PRIM_ROAD_MARKING = 9u; -const uint PRIM_LANE_BOUNDARY = 10u; -const uint PRIM_TRAFFIC_LIGHT = 11u; -const uint PRIM_TRAFFIC_SIGN = 12u; -const uint PRIM_INTERSECTION = 13u; -const uint PRIM_ROAD_ISLAND = 14u; -const uint PRIM_BUFFER_ZONE = 15u; -// Lane line variants by color/style -const uint PRIM_LANE_LINE_WHITE_SOLID = 16u; -const uint PRIM_LANE_LINE_WHITE_DASHED = 17u; -const uint PRIM_LANE_LINE_YELLOW_SOLID = 18u; -const uint PRIM_LANE_LINE_YELLOW_DASHED = 19u; -// Dot primitives - each vertex is rendered as a circle -const uint PRIM_DOT_YELLOW = 20u; -const uint PRIM_DOT_WHITE = 21u; - -// Camera type IDs -const uint CAMERA_TYPE_REGULAR = 0u; -const uint CAMERA_TYPE_BEV = 1u; - -//============================================================================= -// Hardcoded Primitive Styles (matching wm-render colorscheme v3) -//============================================================================= - -// Colors (RGB normalized) - matching imaginaire4 v3 colorscheme -// Source: imaginaire4/imaginaire/auxiliary/world_scenario/color_scheme/config_color_hdmap.json -const vec3 COLOR_ROAD_BOUNDARY = vec3(253.0/255.0, 1.0/255.0, 232.0/255.0); // Magenta (253, 1, 232) -const vec3 COLOR_LANE_LINE = vec3(98.0/255.0, 183.0/255.0, 249.0/255.0); // Cyan (98, 183, 249) - "lanelines" (legacy) -const vec3 COLOR_CROSSWALK = vec3(139.0/255.0, 93.0/255.0, 255.0/255.0); // Purple (139, 93, 255) -const vec3 COLOR_STATIC_OBSTACLE = vec3(255.0/255.0, 100.0/255.0, 0.0/255.0); // Orange (legacy) -const vec3 COLOR_EGO_TRAJECTORY = vec3(0.0/255.0, 255.0/255.0, 0.0/255.0); // Green (0, 255, 0) -const vec3 COLOR_WAIT_LINE = vec3(108.0/255.0, 179.0/255.0, 59.0/255.0); // Yellow-green (108, 179, 59) -const vec3 COLOR_POLE = vec3(183.0/255.0, 69.0/255.0, 177.0/255.0); // Purple-magenta (183, 69, 177) -const vec3 COLOR_ROAD_MARKING = vec3(20.0/255.0, 254.0/255.0, 185.0/255.0); // Cyan-green (20, 254, 185) -const vec3 COLOR_LANE_BOUNDARY = vec3(98.0/255.0, 183.0/255.0, 249.0/255.0); // Cyan (same as lane line) -const vec3 COLOR_TRAFFIC_LIGHT = vec3(100.0/255.0, 100.0/255.0, 100.0/255.0); // Gray (100, 100, 100) -const vec3 COLOR_TRAFFIC_SIGN = vec3(8.0/255.0, 2.0/255.0, 255.0/255.0); // Blue (8, 2, 255) -const vec3 COLOR_INTERSECTION = vec3(80.0/255.0, 80.0/255.0, 120.0/255.0); // Dark blue-gray (approximated) -const vec3 COLOR_ROAD_ISLAND = vec3(60.0/255.0, 120.0/255.0, 60.0/255.0); // Dark green (approximated) -const vec3 COLOR_BUFFER_ZONE = vec3(120.0/255.0, 80.0/255.0, 80.0/255.0); // Dark red-brown (approximated) -// Lane line variants from config_color_geometry_laneline.json -const vec3 COLOR_LANE_LINE_WHITE = vec3(255.0/255.0, 255.0/255.0, 255.0/255.0); // White (255, 255, 255) -const vec3 COLOR_LANE_LINE_YELLOW = vec3(255.0/255.0, 255.0/255.0, 0.0/255.0); // Yellow (255, 255, 0) - -// Default polyline widths (pixels at reference resolution 1280x720) -const float DEFAULT_WIDTH_POLYLINE_REGULAR = 7.0; -const float DEFAULT_WIDTH_POLYLINE_BEV = 4.0; -const float DEFAULT_WIDTH_EGO_TRAJ_REGULAR = 12.0; -const float DEFAULT_WIDTH_EGO_TRAJ_BEV = 5.0; -const float DEFAULT_WIDTH_POLE_REGULAR = 5.0; // Poles are thinner (reference: 5 vs 12) -const float DEFAULT_WIDTH_POLE_BEV = 3.0; -const float DEFAULT_WIDTH_WIREFRAME = 2.0; - -// Configurable width uniforms (set from Python, or use defaults) - -// Compute depth-based scaling factor for line width -// z_ndc is in [-1, 1] where -1 is near, +1 is far -// Returns 1.0 at near, 0.0 at far (linear fade) -float get_depth_scale(vec4 clip) { - if (pc.u_depth_scaling < 0.5) return 1.0; // Disabled - float z_ndc = clip.z / clip.w; // Convert to NDC - float depth_scale = 1.0 - z_ndc; // Map [-1,1] to [1,0] - return clamp(depth_scale, 0.0, 1.0); -} - -// Color palette buffer (optional, configured from Python) -// Declared early so get_prim_color can use it; actual buffer layout defined later -layout(std430, binding = 10) readonly buffer ColorPaletteBufferEarly { - vec4 g_color_palette[]; -}; - -// Get default color for primitive type (hardcoded fallback) -vec3 get_default_prim_color(uint prim_type_id) { - if (prim_type_id == PRIM_ROAD_BOUNDARY) return COLOR_ROAD_BOUNDARY; - if (prim_type_id == PRIM_LANE_LINE) return COLOR_LANE_LINE; - if (prim_type_id == PRIM_CROSSWALK) return COLOR_CROSSWALK; - if (prim_type_id == PRIM_STATIC_OBSTACLE) return COLOR_STATIC_OBSTACLE; - if (prim_type_id == PRIM_EGO_TRAJECTORY) return COLOR_EGO_TRAJECTORY; - if (prim_type_id == PRIM_WAIT_LINE) return COLOR_WAIT_LINE; - if (prim_type_id == PRIM_POLE) return COLOR_POLE; - if (prim_type_id == PRIM_ROAD_MARKING) return COLOR_ROAD_MARKING; - if (prim_type_id == PRIM_LANE_BOUNDARY) return COLOR_LANE_BOUNDARY; - if (prim_type_id == PRIM_TRAFFIC_LIGHT) return COLOR_TRAFFIC_LIGHT; - if (prim_type_id == PRIM_TRAFFIC_SIGN) return COLOR_TRAFFIC_SIGN; - if (prim_type_id == PRIM_INTERSECTION) return COLOR_INTERSECTION; - if (prim_type_id == PRIM_ROAD_ISLAND) return COLOR_ROAD_ISLAND; - if (prim_type_id == PRIM_BUFFER_ZONE) return COLOR_BUFFER_ZONE; - // Lane line variants - if (prim_type_id == PRIM_LANE_LINE_WHITE_SOLID) return COLOR_LANE_LINE_WHITE; - if (prim_type_id == PRIM_LANE_LINE_WHITE_DASHED) return COLOR_LANE_LINE_WHITE; - if (prim_type_id == PRIM_LANE_LINE_YELLOW_SOLID) return COLOR_LANE_LINE_YELLOW; - if (prim_type_id == PRIM_LANE_LINE_YELLOW_DASHED) return COLOR_LANE_LINE_YELLOW; - if (prim_type_id == PRIM_DOT_YELLOW) return COLOR_LANE_LINE_YELLOW; - if (prim_type_id == PRIM_DOT_WHITE) return COLOR_LANE_LINE_WHITE; - return vec3(1.0, 1.0, 1.0); // Default white for obstacles -} - -// Get color for primitive type (checks palette first, then falls back to defaults) -vec3 get_prim_color(uint prim_type_id) { - // If color palette is configured, check if this prim_type has a custom color - // Alpha < 0 means "use default", alpha >= 0 means "use this color" - if (pc.u_color_palette_size > 0 && prim_type_id < uint(pc.u_color_palette_size)) { - vec4 palette_color = g_color_palette[prim_type_id]; - if (palette_color.a >= 0.0) { - return palette_color.rgb; - } - } - // Fall back to hardcoded defaults - return get_default_prim_color(prim_type_id); -} - -// Check if primitive is a dot type (rendered as circles at each vertex) -bool is_dot_primitive(uint prim_type_id) { - return prim_type_id == PRIM_DOT_YELLOW || prim_type_id == PRIM_DOT_WHITE; -} - -// Get polyline width for primitive type and camera type (scaled by resolution) -float get_prim_width(uint prim_type_id, uint camera_type_id) { - bool is_bev = (camera_type_id == CAMERA_TYPE_BEV); - float scale = (pc.u_resolution_scale > 0.0) ? pc.u_resolution_scale : 1.0; - - float base_width; - if (prim_type_id == PRIM_EGO_TRAJECTORY) { - float default_w = is_bev ? DEFAULT_WIDTH_EGO_TRAJ_BEV : DEFAULT_WIDTH_EGO_TRAJ_REGULAR; - float custom_w = is_bev ? pc.u_width_ego_traj_bev : pc.u_width_ego_traj_regular; - base_width = (custom_w > 0.0) ? custom_w : default_w; - } else if (prim_type_id == PRIM_POLE) { - // Poles use thinner lines (reference: 5 pixels vs 12 for other polylines) - base_width = is_bev ? DEFAULT_WIDTH_POLE_BEV : DEFAULT_WIDTH_POLE_REGULAR; - } else { - float default_w = is_bev ? DEFAULT_WIDTH_POLYLINE_BEV : DEFAULT_WIDTH_POLYLINE_REGULAR; - float custom_w = is_bev ? pc.u_width_polyline_bev : pc.u_width_polyline_regular; - base_width = (custom_w > 0.0) ? custom_w : default_w; - } - return base_width * scale; -} - -// Get wireframe edge width (scaled by resolution) -float get_wireframe_width() { - float scale = (pc.u_resolution_scale > 0.0) ? pc.u_resolution_scale : 1.0; - float base_width = (pc.u_width_wireframe > 0.0) ? pc.u_width_wireframe : DEFAULT_WIDTH_WIREFRAME; - return base_width * scale; -} - -//============================================================================= -// Data Structures (must match C++ structs) -//============================================================================= - -// TimestampedPolylinePool (64 bytes) -struct TimestampedPolylinePool { - uint num_timestamps; - uint num_varrays; - uint num_vertices; - uint prim_type_id; // Index into PrimitiveStyle lookup table - uint timestamps_offset; - uint ts_varrays_ps_offset; - uint varrays_ps_offset; - uint vertices_offset; - uint aabb_offset; // Per-element AABB in float buffer (6 floats each: min xyz, max xyz) - uint _pad1, _pad2, _pad3, _pad4, _pad5, _pad6, _pad7; // Padding to 64 bytes -}; - -// TimestampedPolygonPool (64 bytes) -struct TimestampedPolygonPool { - uint num_timestamps; - uint num_varrays; - uint num_vertices; - uint num_triangles; - uint prim_type_id; // Index into PrimitiveStyle lookup table - uint timestamps_offset; - uint ts_varrays_ps_offset; - uint varrays_ps_offset; - uint tri_ps_offset; - uint vertices_offset; - uint triangles_offset; - uint aabb_offset; // Per-element AABB in float buffer (6 floats each: min xyz, max xyz) - uint _pad1, _pad2, _pad3, _pad4; // Padding to 64 bytes (16 uints) -}; - -// CubePool (64 bytes) - used for obstacles, traffic lights, traffic signs, etc. -// Renamed from ObstaclePool but keeping struct name for backward compat -struct ObstaclePool { - uint num_cubes; // Was: num_obstacles - uint num_timestamps; - uint num_track_poses; - uint prim_type_id; // Semantic type for color lookup - uint timestamps_offset; // Global timestamps for this pool - uint cube_ts_ps_offset; // Per-cube track length prefix sum (was: obstacle_ts_ps_offset) - uint track_timestamps_offset; // Per-pose timestamps in float buffer (as 2x uint for int64) - uint translations_offset; // Per-pose translations (3 floats each) - uint quaternions_offset; // Per-pose quaternions (4 floats each) - uint scales_offset; // Per-cube scales (3 floats each) - uint colors_offset; // Per-cube colors (6 floats each) - uint render_flags; // CUBE_FLAG_* bits (e.g., CUBE_FLAG_WIREFRAME) - uint _pad2, _pad3, _pad4, _pad5; // 4 padding fields for 64 bytes total -}; - -// Cube render flags -const uint CUBE_FLAG_WIREFRAME = 1u; // Draw wireframe edges in addition to solid faces - -// TimestampedScene (128 bytes) -struct TimestampedScene { - uint num_polyline_pools; - uint polyline_pools_offset; - uint num_polygon_pools; - uint polygon_pools_offset; - uint num_cube_pools; // Was: has_obstacle_pool (0/1), now supports multiple - uint cube_pools_offset; // Was: obstacle_pool_offset - uint timestamps_buffer_offset; - uint int32_buffer_offset; - uint vertex_buffer_offset; - uint triangle_buffer_offset; - uint pose_buffer_offset; - uint float_buffer_offset; - uint _pad[20]; -}; - -// RenderQuery (16 bytes) -struct RenderQuery { - uint scene_id; - uint camera_id; - int64_t timestamp_us; - uint camera_type_id; // CAMERA_TYPE_REGULAR or CAMERA_TYPE_BEV - uint _pad1, _pad2, _pad3; // Padding to 32 bytes -}; - -// FThetaCamera (72 bytes) -struct FThetaCamera { - float cx, cy; - float img_w, img_h; - float poly0, poly1, poly2, poly3, poly4, poly5; - float max_ray_angle; - float max_distortion_val; - float max_distortion_dval; - float depth_max; - float ld_c, ld_d, ld_e, ld_f; -}; - -// CameraPose (64 bytes) -struct CameraPose { - mat4 world_to_camera; -}; - -// Vertex (16 bytes) -struct Vertex { - float x, y, z; - float _pad; -}; - -//============================================================================= -// Buffer Bindings -//============================================================================= - -// Global data buffers -layout(std430, binding = 0) readonly buffer TimestampsBuffer { - int64_t g_timestamps[]; -}; - -layout(std430, binding = 1) readonly buffer Int32Buffer { - int g_int32[]; -}; - -layout(std430, binding = 2) readonly buffer VertexBuffer { - Vertex g_vertices[]; -}; - -layout(std430, binding = 3) readonly buffer TriangleBuffer { - uvec3 g_triangles[]; -}; - -layout(std430, binding = 4) readonly buffer PoseBuffer { - CameraPose g_poses[]; -}; - -layout(std430, binding = 5) readonly buffer FloatBuffer { - float g_floats[]; -}; - -// Scene metadata -layout(std430, binding = 6) readonly buffer SceneBuffer { - TimestampedScene g_scenes[]; -}; - -layout(std430, binding = 7) readonly buffer PolylinePoolBuffer { - TimestampedPolylinePool g_polyline_pools[]; -}; - -layout(std430, binding = 8) readonly buffer PolygonPoolBuffer { - TimestampedPolygonPool g_polygon_pools[]; -}; - -layout(std430, binding = 9) readonly buffer ObstaclePoolBuffer { - ObstaclePool g_obstacle_pools[]; -}; - -// Camera buffers -layout(std430, binding = 11) readonly buffer CameraIntrinsicsBuffer { - FThetaCamera g_camera_intrinsics[]; -}; - -layout(std430, binding = 12) readonly buffer CameraPoseBuffer { - CameraPose g_camera_poses[]; // One per query (dynamic viewpoints) -}; - -// Query buffer -layout(std430, binding = 13) readonly buffer QueryBuffer { - RenderQuery g_queries[]; -}; - -// Uniforms -// Spatial culling: elements beyond depth_max * scale from the camera are -// discarded in the task shader. Scale > 1 gives headroom so nothing at -// the visible boundary pops in/out. Set to 0 to disable culling. - -//============================================================================= -// GPU Binary Search -// Returns index of last element <= target, or -1 if target < all elements -//============================================================================= - -int binary_search_timestamps(uint base_offset, uint count, int64_t target) { - if (count == 0u) return -1; - - int left = 0; - int right = int(count) - 1; - int result = -1; - - while (left <= right) { - int mid = (left + right) / 2; - int64_t val = g_timestamps[base_offset + uint(mid)]; - - if (val <= target) { - result = mid; - left = mid + 1; - } else { - right = mid - 1; - } - } - - return result; -} - -//============================================================================= -// Quaternion Math for Track Interpolation -//============================================================================= - -// Quaternion dot product -float quat_dot(vec4 a, vec4 b) { - return a.x*b.x + a.y*b.y + a.z*b.z + a.w*b.w; -} - -// Quaternion normalize -vec4 quat_normalize(vec4 q) { - float len = length(q); - return len > 1e-10 ? q / len : vec4(0.0, 0.0, 0.0, 1.0); -} - -// Quaternion spherical linear interpolation (slerp) -vec4 quat_slerp(vec4 q0, vec4 q1, float t) { - // Ensure shortest path - float d = quat_dot(q0, q1); - if (d < 0.0) { - q1 = -q1; - d = -d; - } - - // If quaternions are very close, use linear interpolation - if (d > 0.9995) { - return quat_normalize(mix(q0, q1, t)); - } - - // Spherical interpolation - float theta_0 = acos(clamp(d, -1.0, 1.0)); - float theta = theta_0 * t; - float sin_theta = sin(theta); - float sin_theta_0 = sin(theta_0); - - float s0 = cos(theta) - d * sin_theta / sin_theta_0; - float s1 = sin_theta / sin_theta_0; - - return quat_normalize(s0 * q0 + s1 * q1); -} - -// Convert quaternion (x, y, z, w) to 3x3 rotation matrix -// GLSL mat3 is column-major: mat3(col0, col1, col2) -mat3 quat_to_matrix(vec4 q) { - float x = q.x, y = q.y, z = q.z, w = q.w; - - float x2 = x + x, y2 = y + y, z2 = z + z; - float xx = x * x2, xy = x * y2, xz = x * z2; - float yy = y * y2, yz = y * z2, zz = z * z2; - float wx = w * x2, wy = w * y2, wz = w * z2; - - // Column 0: (R00, R10, R20), Column 1: (R01, R11, R21), Column 2: (R02, R12, R22) - return mat3( - 1.0 - (yy + zz), xy + wz, xz - wy, // Column 0 - xy - wz, 1.0 - (xx + zz), yz + wx, // Column 1 - xz + wy, yz - wx, 1.0 - (xx + yy) // Column 2 - ); -} - -// Build 4x4 transform from translation and quaternion (with scale) -mat4 build_transform(vec3 translation, vec4 quaternion, vec3 scale) { - mat3 rot = quat_to_matrix(quaternion); - - // Apply scale to each column of rotation matrix - mat4 result = mat4( - vec4(rot[0] * scale.x, 0.0), - vec4(rot[1] * scale.y, 0.0), - vec4(rot[2] * scale.z, 0.0), - vec4(translation, 1.0) - ); - - return result; -} - -// Binary search for track interpolation (returns index where t0 <= target < t1) -// Returns -1 if target is outside the track range -int binary_search_track(uint base_offset, uint count, int64_t target) { - if (count < 2u) return -1; // Need at least 2 points for interpolation - - int64_t first_ts = g_timestamps[base_offset]; - int64_t last_ts = g_timestamps[base_offset + count - 1u]; - - // Check bounds - if (target < first_ts || target > last_ts) return -1; - - int left = 0; - int right = int(count) - 2; // Max valid index for interpolation start - int result = 0; - - while (left <= right) { - int mid = (left + right) / 2; - int64_t t0 = g_timestamps[base_offset + uint(mid)]; - int64_t t1 = g_timestamps[base_offset + uint(mid) + 1u]; - - if (t0 <= target && target <= t1) { - return mid; - } else if (target < t0) { - right = mid - 1; - } else { - left = mid + 1; - } - } - - return -1; // Should not reach here for valid input -} - -//============================================================================= -// Spatial Culling Helpers -//============================================================================= - -// AABB-AABB overlap test -bool cull_aabb_overlap(vec3 a_min, vec3 a_max, vec3 b_min, vec3 b_max) { - return all(lessThanEqual(a_min, b_max)) && all(greaterThanEqual(a_max, b_min)); -} - -// Sphere-AABB overlap test -bool cull_sphere_aabb_overlap(vec3 center, float radius, vec3 b_min, vec3 b_max) { - vec3 nearest = clamp(center, b_min, b_max); - vec3 d = center - nearest; - return dot(d, d) <= radius * radius; -} - -// Extract camera world position from view pose -vec3 get_camera_world_pos(CameraPose pose) { - mat3 R = mat3(pose.world_to_camera); - return -transpose(R) * pose.world_to_camera[3].xyz; -} - -//============================================================================= -// F-theta Projection -//============================================================================= - -vec3 rotate_rodrigues(vec3 v, vec3 r) { - float theta = length(r); - if (theta < 1e-8) return v; - vec3 k = r / theta; - float c = cos(theta); - float s = sin(theta); - return v * c + cross(k, v) * s + k * dot(k, v) * (1.0 - c); -} - -// F-theta projection: world point -> NDC -// Supports >180° FOV fisheye cameras where points can have negative z (behind camera plane) -vec4 ftheta_project(vec3 world_pos, CameraPose pose, FThetaCamera cam) { - vec3 cam_pt = (pose.world_to_camera * vec4(world_pos, 1.0)).xyz; - float depth = cam_pt.z; - - float ray_norm = length(cam_pt); - - // Handle points at camera origin - if (ray_norm < 1e-6) { - return vec4(0.0, 0.0, 0.0, 1.0); - } - - float half_pi = 1.5707963; // π/2 - - // For cameras with FOV <= 180° (max_ray_angle <= π/2), points behind camera should be clipped - // Use pseudo-pinhole projection to push them far away in the correct direction - if (cam.max_ray_angle <= half_pi && depth < 0.001) { - float pseudo_focal = cam.poly1; - float x_clip = cam_pt.x * pseudo_focal / (cam.img_w * 0.5); - float y_clip = -cam_pt.y * pseudo_focal / (cam.img_h * 0.5); - return vec4(x_clip * 10.0, y_clip * 10.0, 1.0, 1.0); // Scale by 10 to push far outside - } - - float xy_norm = length(cam_pt.xy); - float cos_alpha = clamp(cam_pt.z / ray_norm, -1.0, 1.0); - float alpha = acos(cos_alpha); // alpha in [0, π] - - // Apply polynomial projection (with linear extrapolation beyond max_ray_angle) - float a2 = alpha * alpha; - float a3 = a2 * alpha; - float a4 = a2 * a2; - float a5 = a4 * alpha; - - float delta = cam.poly0 + cam.poly1 * alpha + cam.poly2 * a2 + - cam.poly3 * a3 + cam.poly4 * a4 + cam.poly5 * a5; - if (alpha > cam.max_ray_angle) { - delta = cam.max_distortion_val + (alpha - cam.max_ray_angle) * cam.max_distortion_dval; - } - - float scale = (xy_norm > 1e-6) ? (delta / xy_norm) : 0.0; - vec2 pixel_rel = scale * cam_pt.xy; - - vec2 pixel_dist; - pixel_dist.x = cam.ld_c * pixel_rel.x + cam.ld_d * pixel_rel.y; - pixel_dist.y = cam.ld_e * pixel_rel.x + cam.ld_f * pixel_rel.y; - - vec2 pixel = pixel_dist + vec2(cam.cx, cam.cy); - - float x_ndc = 2.0 * pixel.x / cam.img_w - 1.0; - float y_ndc = 1.0 - 2.0 * pixel.y / cam.img_h; - - // For z-buffer depth mapping: - // - Narrow FOV (<=180°): use signed depth (cam_pt.z) - // - Wide FOV (>180°): use ray_norm for front-camera vertices (unchanged), - // but push behind-camera vertices to depth_max so they never occlude - // forward geometry. ray_norm alone can't distinguish front from behind. - float z_value; - if (cam.max_ray_angle > half_pi) { - z_value = (depth >= 0.0) ? ray_norm : cam.depth_max; - } else { - z_value = depth; - } - float z_ndc = clamp(z_value / cam.depth_max, 0.0, 1.0); - - return vec4(x_ndc, y_ndc, z_ndc, 1.0); -} - -// Inline version that takes mat4 directly -float estimate_edge_distortion_pixels_mat4(vec3 v0, vec3 v1, mat4 world_to_cam, FThetaCamera cam) { - // Transform to camera space - vec3 cam_pt0 = (world_to_cam * vec4(v0, 1.0)).xyz; - vec3 cam_pt1 = (world_to_cam * vec4(v1, 1.0)).xyz; - vec3 mid_world = (v0 + v1) * 0.5; - vec3 cam_pt_mid = (world_to_cam * vec4(mid_world, 1.0)).xyz; - - // Just clamp depths to avoid division issues - - // For segments in front of camera, compute f-theta projection error directly - // Use depth-clamped projection to handle near-plane cases - float depth0 = max(cam_pt0.z, 0.001); - float depth1 = max(cam_pt1.z, 0.001); - float depth_mid = max(cam_pt_mid.z, 0.001); - - // Compute f-theta projection for each point - // We inline the projection to avoid struct-passing issues - vec2 pixel0, pixel1, pixel_mid; - { - float xy_norm = length(cam_pt0.xy); - float ray_norm = length(vec3(cam_pt0.xy, depth0)) + 1e-10; - float cos_alpha = clamp(depth0 / ray_norm, -1.0, 1.0); - float alpha = acos(cos_alpha); - float a2 = alpha * alpha; - float delta = cam.poly0 + cam.poly1 * alpha + cam.poly2 * a2 + - cam.poly3 * (a2 * alpha) + cam.poly4 * (a2 * a2) + cam.poly5 * (a2 * a2 * alpha); - if (alpha > cam.max_ray_angle) { - delta = cam.max_distortion_val + (alpha - cam.max_ray_angle) * cam.max_distortion_dval; - } - float scale = (xy_norm > 1e-6) ? (delta / xy_norm) : 0.0; - vec2 pixel_rel = scale * cam_pt0.xy; - vec2 pixel_dist = vec2(cam.ld_c * pixel_rel.x + cam.ld_d * pixel_rel.y, - cam.ld_e * pixel_rel.x + cam.ld_f * pixel_rel.y); - pixel0 = pixel_dist + vec2(cam.cx, cam.cy); - } - { - float xy_norm = length(cam_pt1.xy); - float ray_norm = length(vec3(cam_pt1.xy, depth1)) + 1e-10; - float cos_alpha = clamp(depth1 / ray_norm, -1.0, 1.0); - float alpha = acos(cos_alpha); - float a2 = alpha * alpha; - float delta = cam.poly0 + cam.poly1 * alpha + cam.poly2 * a2 + - cam.poly3 * (a2 * alpha) + cam.poly4 * (a2 * a2) + cam.poly5 * (a2 * a2 * alpha); - if (alpha > cam.max_ray_angle) { - delta = cam.max_distortion_val + (alpha - cam.max_ray_angle) * cam.max_distortion_dval; - } - float scale = (xy_norm > 1e-6) ? (delta / xy_norm) : 0.0; - vec2 pixel_rel = scale * cam_pt1.xy; - vec2 pixel_dist = vec2(cam.ld_c * pixel_rel.x + cam.ld_d * pixel_rel.y, - cam.ld_e * pixel_rel.x + cam.ld_f * pixel_rel.y); - pixel1 = pixel_dist + vec2(cam.cx, cam.cy); - } - { - float xy_norm = length(cam_pt_mid.xy); - float ray_norm = length(vec3(cam_pt_mid.xy, depth_mid)) + 1e-10; - float cos_alpha = clamp(depth_mid / ray_norm, -1.0, 1.0); - float alpha = acos(cos_alpha); - float a2 = alpha * alpha; - float delta = cam.poly0 + cam.poly1 * alpha + cam.poly2 * a2 + - cam.poly3 * (a2 * alpha) + cam.poly4 * (a2 * a2) + cam.poly5 * (a2 * a2 * alpha); - if (alpha > cam.max_ray_angle) { - delta = cam.max_distortion_val + (alpha - cam.max_ray_angle) * cam.max_distortion_dval; - } - float scale = (xy_norm > 1e-6) ? (delta / xy_norm) : 0.0; - vec2 pixel_rel = scale * cam_pt_mid.xy; - vec2 pixel_dist = vec2(cam.ld_c * pixel_rel.x + cam.ld_d * pixel_rel.y, - cam.ld_e * pixel_rel.x + cam.ld_f * pixel_rel.y); - pixel_mid = pixel_dist + vec2(cam.cx, cam.cy); - } - - // Compute error: distance from projected midpoint to linear interpolation - vec2 linear_pixel_mid = (pixel0 + pixel1) * 0.5; - float error_pixels = length(pixel_mid - linear_pixel_mid); - - // Clamp to reasonable range to handle edge cases - return clamp(error_pixels, 0.0, 10000.0); -} - -uint compute_subdivision_level(vec3 v0, vec3 v1, CameraPose pose, FThetaCamera cam, float threshold_pixels) { - float error = estimate_edge_distortion_pixels_mat4(v0, v1, pose.world_to_camera, cam); - - if (error < threshold_pixels) return 0u; - if (error < threshold_pixels * 2.0) return 1u; - if (error < threshold_pixels * 4.0) return 2u; - return 3u; -} - -//============================================================================= -// Barycentric Subdivision Utilities (shared with polygon/cube) -//============================================================================= - -uint bary_vertex_count(uint level) { - // Vertices = (n+1)(n+2)/2 where n = 2^level - if (level == 0u) return 3u; - if (level == 1u) return 6u; - if (level == 2u) return 15u; - return 45u; // level 3 -} - -uint bary_triangle_count(uint level) { - // Triangles = 4^level - if (level == 0u) return 1u; - if (level == 1u) return 4u; - if (level == 2u) return 16u; - return 64u; // level 3 -} - -vec2 bary_vertex_uv(uint vertex_idx, uint level) { - if (level == 0u) { - if (vertex_idx == 0u) return vec2(0.0, 0.0); - if (vertex_idx == 1u) return vec2(1.0, 0.0); - return vec2(0.0, 1.0); - } else if (level == 1u) { - vec2 uvs[6]; - uvs[0] = vec2(0.0, 0.0); - uvs[1] = vec2(1.0, 0.0); - uvs[2] = vec2(0.0, 1.0); - uvs[3] = vec2(0.5, 0.0); - uvs[4] = vec2(0.5, 0.5); - uvs[5] = vec2(0.0, 0.5); - return uvs[vertex_idx]; - } else if (level == 2u) { - uint row, col; - if (vertex_idx < 5u) { row = 0u; col = vertex_idx; } - else if (vertex_idx < 9u) { row = 1u; col = vertex_idx - 5u; } - else if (vertex_idx < 12u) { row = 2u; col = vertex_idx - 9u; } - else if (vertex_idx < 14u) { row = 3u; col = vertex_idx - 12u; } - else { row = 4u; col = 0u; } - return vec2(float(col) / 4.0, float(row) / 4.0); - } else { - // Level 3: 9 rows (0-8), row r has (9-r) vertices - uint row, col; - if (vertex_idx < 9u) { row = 0u; col = vertex_idx; } - else if (vertex_idx < 17u) { row = 1u; col = vertex_idx - 9u; } - else if (vertex_idx < 24u) { row = 2u; col = vertex_idx - 17u; } - else if (vertex_idx < 30u) { row = 3u; col = vertex_idx - 24u; } - else if (vertex_idx < 35u) { row = 4u; col = vertex_idx - 30u; } - else if (vertex_idx < 39u) { row = 5u; col = vertex_idx - 35u; } - else if (vertex_idx < 42u) { row = 6u; col = vertex_idx - 39u; } - else if (vertex_idx < 44u) { row = 7u; col = vertex_idx - 42u; } - else { row = 8u; col = 0u; } - return vec2(float(col) / 8.0, float(row) / 8.0); - } -} - -vec3 bary_interpolate(vec3 v0, vec3 v1, vec3 v2, vec2 uv) { - float w = 1.0 - uv.x - uv.y; - return v0 * w + v1 * uv.x + v2 * uv.y; -} - -uvec3 bary_triangle_indices(uint tri_idx, uint level) { - if (level == 0u) { - return uvec3(0u, 1u, 2u); - } else if (level == 1u) { - uvec3 tris[4]; - tris[0] = uvec3(0u, 3u, 5u); - tris[1] = uvec3(3u, 1u, 4u); - tris[2] = uvec3(5u, 4u, 2u); - tris[3] = uvec3(3u, 4u, 5u); - return tris[tri_idx]; - } else if (level == 2u) { - uint row_start[5] = uint[5](0u, 5u, 9u, 12u, 14u); - uint t = tri_idx; - uint row = 0u, col = 0u; - bool is_down = false; - - if (t < 7u) { - row = 0u; - if (t < 4u) { col = t; is_down = false; } - else { col = t - 4u; is_down = true; } - } else if (t < 12u) { - row = 1u; - uint lt = t - 7u; - if (lt < 3u) { col = lt; is_down = false; } - else { col = lt - 3u; is_down = true; } - } else if (t < 15u) { - row = 2u; - uint lt = t - 12u; - if (lt < 2u) { col = lt; is_down = false; } - else { col = lt - 2u; is_down = true; } - } else { - row = 3u; col = 0u; is_down = false; - } - - uint i0, i1, i2; - if (!is_down) { - i0 = row_start[row] + col; - i1 = row_start[row] + col + 1u; - i2 = row_start[row + 1u] + col; - } else { - i0 = row_start[row] + col + 1u; - i1 = row_start[row + 1u] + col + 1u; - i2 = row_start[row + 1u] + col; - } - return uvec3(i0, i1, i2); - } else { - // Level 3: row_start for 9 rows - uint row_start[9] = uint[9](0u, 9u, 17u, 24u, 30u, 35u, 39u, 42u, 44u); - uint t = tri_idx; - uint row = 0u, col = 0u; - bool is_down = false; - - // Row 0: 8 up + 7 down = 15, Row 1: 7 up + 6 down = 13, etc. - if (t < 15u) { - row = 0u; - if (t < 8u) { col = t; is_down = false; } - else { col = t - 8u; is_down = true; } - } else if (t < 28u) { - row = 1u; uint lt = t - 15u; - if (lt < 7u) { col = lt; is_down = false; } - else { col = lt - 7u; is_down = true; } - } else if (t < 39u) { - row = 2u; uint lt = t - 28u; - if (lt < 6u) { col = lt; is_down = false; } - else { col = lt - 6u; is_down = true; } - } else if (t < 48u) { - row = 3u; uint lt = t - 39u; - if (lt < 5u) { col = lt; is_down = false; } - else { col = lt - 5u; is_down = true; } - } else if (t < 55u) { - row = 4u; uint lt = t - 48u; - if (lt < 4u) { col = lt; is_down = false; } - else { col = lt - 4u; is_down = true; } - } else if (t < 60u) { - row = 5u; uint lt = t - 55u; - if (lt < 3u) { col = lt; is_down = false; } - else { col = lt - 3u; is_down = true; } - } else if (t < 63u) { - row = 6u; uint lt = t - 60u; - if (lt < 2u) { col = lt; is_down = false; } - else { col = lt - 2u; is_down = true; } - } else { - row = 7u; col = 0u; is_down = false; - } - - uint i0, i1, i2; - if (!is_down) { - i0 = row_start[row] + col; - i1 = row_start[row] + col + 1u; - i2 = row_start[row + 1u] + col; - } else { - i0 = row_start[row] + col + 1u; - i1 = row_start[row + 1u] + col + 1u; - i2 = row_start[row + 1u] + col; - } - return uvec3(i0, i1, i2); - } -} - - -layout(local_size_x = 1) in; - -// Uniforms for obstacle/cube dispatch - -// Unit cube vertices for edge distortion calculation (same as non-timestamped) -const vec3 CUBE_VERTS[8] = vec3[8]( - vec3(-0.5, -0.5, -0.5), vec3(+0.5, -0.5, -0.5), - vec3(+0.5, +0.5, -0.5), vec3(-0.5, +0.5, -0.5), - vec3(-0.5, -0.5, +0.5), vec3(+0.5, -0.5, +0.5), - vec3(+0.5, +0.5, +0.5), vec3(-0.5, +0.5, +0.5) -); - -// 12 edges of cube (pairs of vertex indices) -const uvec2 CUBE_EDGES[12] = uvec2[12]( - uvec2(0,1), uvec2(1,2), uvec2(2,3), uvec2(3,0), // back face - uvec2(4,5), uvec2(5,6), uvec2(6,7), uvec2(7,4), // front face - uvec2(0,4), uvec2(1,5), uvec2(2,6), uvec2(3,7) // connecting edges -); - -struct ObstacleTaskPayload { - uint query_id; - uint obstacle_id; - mat4 object_to_world; - vec3 scale; - vec3 front_color; - vec3 back_color; - uint subdivision_level; - uint render_flags; // CUBE_FLAG_* bits from pool - float is_bev; - uint face_mask; // Bitmask of front-facing faces (backface culling) -}; -taskPayloadSharedEXT ObstacleTaskPayload payload; - -// Face normals in local space (outward-facing, matches FACE_VERTS winding) -const vec3 FACE_NORMALS[6] = vec3[6]( - vec3( 0, 0, -1), // face 0: -Z (back) - vec3( 0, 0, +1), // face 1: +Z (front) - vec3(-1, 0, 0), // face 2: -X - vec3(+1, 0, 0), // face 3: +X - vec3( 0, -1, 0), // face 4: -Y - vec3( 0, +1, 0) // face 5: +Y -); - -// Helper to read translation from float buffer -vec3 read_translation(uint base_offset, uint pose_idx) { - uint off = base_offset + pose_idx * 3u; - return vec3(g_floats[off], g_floats[off + 1u], g_floats[off + 2u]); -} - -// Helper to read quaternion from float buffer (x, y, z, w) -vec4 read_quaternion(uint base_offset, uint pose_idx) { - uint off = base_offset + pose_idx * 4u; - return vec4(g_floats[off], g_floats[off + 1u], g_floats[off + 2u], g_floats[off + 3u]); -} - -// Helper to read int64 timestamp from float buffer (stored as 2 uints) -int64_t read_track_timestamp(uint base_offset, uint pose_idx) { - // Track timestamps stored in timestamps buffer, not float buffer - return g_timestamps[base_offset + pose_idx]; -} - -void main() { - uint _task_count = 0u; - uint work_id = gl_WorkGroupID.x; - - // Decode work_id = query_id * max_obstacles + obstacle_id - uint query_id_local = work_id / pc.u_max_obstacles; - uint obstacle_id_local = work_id % pc.u_max_obstacles; - - if (query_id_local >= pc.u_num_queries) { - _task_count = 0u; - EmitMeshTasksEXT(_task_count, 1, 1); return; - } - - RenderQuery query = g_queries[query_id_local]; - TimestampedScene scene = g_scenes[query.scene_id]; - - if (scene.num_cube_pools == 0u || pc.u_cube_pool_index >= scene.num_cube_pools) { - _task_count = 0u; - EmitMeshTasksEXT(_task_count, 1, 1); return; - } - - // Access the cube pool at the specified index - ObstaclePool pool = g_obstacle_pools[scene.cube_pools_offset + pc.u_cube_pool_index]; - - // Mirror the polygon/polyline task-shader guard: keep subsequent SSBO - // reads in-bounds when the workgroup is over-dispatched (this pool has - // fewer cubes than the per-dispatch max), then force the final emit - // count to zero. Without this, invalid workgroups can read the next - // pool's prefix sums / translations / scales and produce ghost cubes - // scattered throughout the scene. - bool force_zero_tasks = false; - if (obstacle_id_local >= pool.num_cubes) { - force_zero_tasks = true; - obstacle_id_local = 0u; - } - - // Ego obstacle is only visible in BEV cameras - if (pool.prim_type_id == PRIM_EGO_OBSTACLE && query.camera_type_id != CAMERA_TYPE_BEV) { - force_zero_tasks = true; - } - - // Get this obstacle's track range - uint track_start = 0u; - if (obstacle_id_local > 0u) { - track_start = uint(g_int32[scene.int32_buffer_offset + pool.cube_ts_ps_offset + obstacle_id_local - 1u]); - } - uint track_end = uint(g_int32[scene.int32_buffer_offset + pool.cube_ts_ps_offset + obstacle_id_local]); - uint track_len = track_end - track_start; - - if (track_len < 1u) { - force_zero_tasks = true; - track_len = 1u; - } - - // Find bracketing timestamps for interpolation - uint track_ts_base = scene.timestamps_buffer_offset + pool.track_timestamps_offset + track_start; - int64_t target_ts = query.timestamp_us; - - // Check bounds with extrapolation support - int64_t first_ts = g_timestamps[track_ts_base]; - int64_t last_ts = g_timestamps[track_ts_base + track_len - 1u]; - - // Determine if we need extrapolation - bool extrapolate_before = (target_ts < first_ts); - bool extrapolate_after = (target_ts > last_ts); - - if (extrapolate_before) { - int64_t dt = first_ts - target_ts; - if (dt > int64_t(pc.u_max_extrapolation_us) || track_len < 2u) { - force_zero_tasks = true; - } - } else if (extrapolate_after) { - int64_t dt = target_ts - last_ts; - if (dt > int64_t(pc.u_max_extrapolation_us) || track_len < 2u) { - force_zero_tasks = true; - } - } - - // Binary search for interpolation interval [t0, t1] where t0 <= target <= t1 - // For extrapolation, we use the first/last interval - int idx0 = 0; - int idx1 = 0; - float alpha = 0.0; - - if (track_len == 1u) { - // Single pose - no interpolation needed - idx0 = 0; - idx1 = 0; - alpha = 0.0; - } else if (extrapolate_before) { - // Extrapolate backwards: use first two poses - idx0 = 0; - idx1 = 1; - int64_t t0 = g_timestamps[track_ts_base]; - int64_t t1 = g_timestamps[track_ts_base + 1u]; - // alpha will be negative for backwards extrapolation - if (t1 > t0) { - alpha = float(target_ts - t0) / float(t1 - t0); - } else { - alpha = 0.0; - } - } else if (extrapolate_after) { - // Extrapolate forwards: use last two poses - idx0 = int(track_len) - 2; - idx1 = int(track_len) - 1; - int64_t t0 = g_timestamps[track_ts_base + uint(idx0)]; - int64_t t1 = g_timestamps[track_ts_base + uint(idx1)]; - // alpha will be > 1.0 for forward extrapolation - if (t1 > t0) { - alpha = float(target_ts - t0) / float(t1 - t0); - } else { - alpha = 1.0; - } - } else { - // Normal interpolation: binary search for the interval - int left = 0; - int right = int(track_len) - 2; - idx0 = 0; - - while (left <= right) { - int mid = (left + right) / 2; - int64_t t0 = g_timestamps[track_ts_base + uint(mid)]; - int64_t t1 = g_timestamps[track_ts_base + uint(mid) + 1u]; - - if (t0 <= target_ts && target_ts <= t1) { - idx0 = mid; - break; - } else if (target_ts < t0) { - right = mid - 1; - } else { - left = mid + 1; - idx0 = mid + 1; // Update in case we exit - } - } - - idx1 = min(idx0 + 1, int(track_len) - 1); - - // Compute interpolation factor - int64_t t0 = g_timestamps[track_ts_base + uint(idx0)]; - int64_t t1 = g_timestamps[track_ts_base + uint(idx1)]; - - if (t1 > t0) { - alpha = float(target_ts - t0) / float(t1 - t0); - } else { - alpha = 0.0; - } - } - - // Read translations and quaternions for interpolation - uint trans_base = scene.float_buffer_offset + pool.translations_offset + track_start * 3u; - uint quat_base = scene.float_buffer_offset + pool.quaternions_offset + track_start * 4u; - - vec3 trans0 = vec3( - g_floats[trans_base + uint(idx0) * 3u], - g_floats[trans_base + uint(idx0) * 3u + 1u], - g_floats[trans_base + uint(idx0) * 3u + 2u] - ); - vec3 trans1 = vec3( - g_floats[trans_base + uint(idx1) * 3u], - g_floats[trans_base + uint(idx1) * 3u + 1u], - g_floats[trans_base + uint(idx1) * 3u + 2u] - ); - - vec4 quat0 = vec4( - g_floats[quat_base + uint(idx0) * 4u], - g_floats[quat_base + uint(idx0) * 4u + 1u], - g_floats[quat_base + uint(idx0) * 4u + 2u], - g_floats[quat_base + uint(idx0) * 4u + 3u] - ); - vec4 quat1 = vec4( - g_floats[quat_base + uint(idx1) * 4u], - g_floats[quat_base + uint(idx1) * 4u + 1u], - g_floats[quat_base + uint(idx1) * 4u + 2u], - g_floats[quat_base + uint(idx1) * 4u + 3u] - ); - - // Interpolate translation (lerp) and rotation (slerp) - // For position: extrapolate linearly (alpha can be negative or > 1) - // For orientation: clamp to first/last keyframe (match wm-render behavior) - vec3 trans_interp = mix(trans0, trans1, alpha); - float alpha_clamped = clamp(alpha, 0.0, 1.0); - vec4 quat_interp = quat_slerp(quat0, quat1, alpha_clamped); - - // Get scale - uint scale_offset = scene.float_buffer_offset + pool.scales_offset + obstacle_id_local * 3u; - vec3 scale_local = vec3( - g_floats[scale_offset], - g_floats[scale_offset + 1u], - g_floats[scale_offset + 2u] - ); - - // Spatial culling: test bounding sphere against camera-centred view volume - if (pc.u_cull_radius_scale > 0.0) { - float cull_r = g_camera_intrinsics[query.camera_id].depth_max * pc.u_cull_radius_scale; - CameraPose cull_pose = g_camera_poses[query_id_local]; - vec3 cam_pos = get_camera_world_pos(cull_pose); - vec3 view_min = cam_pos - vec3(cull_r); - vec3 view_max = cam_pos + vec3(cull_r); - float radius = length(scale_local); - if (!cull_sphere_aabb_overlap(trans_interp, radius, view_min, view_max)) { - force_zero_tasks = true; - } - } - - // Build object_to_world matrix (rotation + translation, scale applied in mesh shader) - mat4 obj_to_world = build_transform(trans_interp, quat_interp, vec3(1.0)); - - // Get colors from buffer (first 3 floats = front, next 3 = back) - uint color_offset = scene.float_buffer_offset + pool.colors_offset + obstacle_id_local * 6u; - vec3 front = vec3( - g_floats[color_offset], - g_floats[color_offset + 1u], - g_floats[color_offset + 2u] - ); - vec3 back = vec3( - g_floats[color_offset + 3u], - g_floats[color_offset + 4u], - g_floats[color_offset + 5u] - ); - - // Compute max subdivision level from all 12 edges - FThetaCamera cam = g_camera_intrinsics[query.camera_id]; - CameraPose view_pose = g_camera_poses[query_id_local]; - - // Backface culling: compute which faces are visible from camera - mat3 R_view = mat3(view_pose.world_to_camera); - vec3 cam_world = -transpose(R_view) * view_pose.world_to_camera[3].xyz; - mat3 R_obj = mat3(obj_to_world); - - uint fmask = 0u; - for (uint f = 0u; f < 6u; f++) { - vec3 n_world = R_obj * FACE_NORMALS[f]; - vec3 center_local = FACE_NORMALS[f] * 0.5 * scale_local; - vec3 center_world = (obj_to_world * vec4(center_local, 1.0)).xyz; - if (dot(n_world, cam_world - center_world) > 0.0) { - fmask |= (1u << f); - } - } - - if (fmask == 0u) { - force_zero_tasks = true; - } - - uint max_subdiv = 0u; - if (pc.u_tessellation_threshold > 0.0) { - for (uint e = 0u; e < 12u; e++) { - vec3 v0_local = CUBE_VERTS[CUBE_EDGES[e].x] * scale_local; - vec3 v1_local = CUBE_VERTS[CUBE_EDGES[e].y] * scale_local; - // Transform to world space using interpolated object_to_world matrix - vec3 v0_world = (obj_to_world * vec4(v0_local, 1.0)).xyz; - vec3 v1_world = (obj_to_world * vec4(v1_local, 1.0)).xyz; - - uint subdiv = compute_subdivision_level(v0_world, v1_world, view_pose, cam, pc.u_tessellation_threshold); - max_subdiv = max(max_subdiv, subdiv); - } - max_subdiv = min(max_subdiv, pc.u_max_tessellation_cube); - } - - // Dispatch 6 faces + 6 for wireframe edges if enabled - uint wireframe = (pool.render_flags & CUBE_FLAG_WIREFRAME) != 0u ? 6u : 0u; - _task_count = force_zero_tasks ? 0u : (6u + wireframe); - - payload.query_id = query_id_local; - payload.obstacle_id = obstacle_id_local; - payload.object_to_world = obj_to_world; - payload.scale = scale_local; - payload.front_color = front; - payload.back_color = back; - payload.subdivision_level = max_subdiv; - payload.render_flags = pool.render_flags; - payload.is_bev = (query.camera_type_id == CAMERA_TYPE_BEV) ? 1.0 : 0.0; - payload.face_mask = fmask; - EmitMeshTasksEXT(_task_count, 1, 1); -} diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/ts_polygon.frag.glsl b/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/ts_polygon.frag.glsl deleted file mode 100644 index 4d4af1194..000000000 --- a/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/ts_polygon.frag.glsl +++ /dev/null @@ -1,56 +0,0 @@ - -#version 460 -#extension GL_EXT_fragment_shader_barycentric : require -#extension GL_EXT_mesh_shader : require - -layout(push_constant) uniform PushConstants { - float u_width_polyline_regular; - float u_width_polyline_bev; - float u_width_ego_traj_regular; - float u_width_ego_traj_bev; - float u_width_wireframe; - float u_resolution_scale; - float u_depth_scaling; - int u_max_extrapolation_us; - int u_color_palette_size; - uint u_num_queries; - float u_tessellation_threshold; - uint u_max_tessellation_polyline; - uint u_max_tessellation_polygon; - uint u_max_tessellation_cube; - float u_cull_radius_scale; - float u_fog_enabled; - uint u_max_obstacles; - uint u_cube_pool_index; - uint u_num_polygon_pools; - uint u_max_varrays_per_pool; - uint u_num_polyline_pools; -} pc; - -#define IF_ZMODIFY(x) - -// Per-primitive color block from mesh shader -layout(location = 0) perprimitiveEXT in PrimColorBlock { - vec3 color; - float is_bev; -} prim_in; - -layout(location = 0) out vec4 out_color; - - -IF_ZMODIFY(layout(location = 0) uniform float in_dummy;) - -void main() { - vec3 color = prim_in.color; - - // Apply distance-based fog (darken with distance) - disabled for BEV cameras - // gl_FragCoord.z is in [0, 1] where 0=near, 1=far - if (pc.u_fog_enabled > 0.5 && prim_in.is_bev < 0.5) { - float fog_factor = 1.0 - gl_FragCoord.z; // 1.0 at near, 0.0 at far - fog_factor = clamp(fog_factor, 0.0, 1.0); - color *= fog_factor; - } - - out_color = vec4(color, 1.0); - IF_ZMODIFY(gl_FragDepth = gl_FragCoord.z + in_dummy;) -} diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/ts_polygon.mesh.glsl b/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/ts_polygon.mesh.glsl deleted file mode 100644 index 254347d1e..000000000 --- a/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/ts_polygon.mesh.glsl +++ /dev/null @@ -1,1123 +0,0 @@ -#version 460 -#extension GL_EXT_mesh_shader : require -#extension GL_EXT_shader_explicit_arithmetic_types_int64 : require - -layout(push_constant) uniform PushConstants { - float u_width_polyline_regular; - float u_width_polyline_bev; - float u_width_ego_traj_regular; - float u_width_ego_traj_bev; - float u_width_wireframe; - float u_resolution_scale; - float u_depth_scaling; - int u_max_extrapolation_us; - int u_color_palette_size; - uint u_num_queries; - float u_tessellation_threshold; - uint u_max_tessellation_polyline; - uint u_max_tessellation_polygon; - uint u_max_tessellation_cube; - float u_cull_radius_scale; - float u_fog_enabled; - uint u_max_obstacles; - uint u_cube_pool_index; - uint u_num_polygon_pools; - uint u_max_varrays_per_pool; - uint u_num_polyline_pools; -} pc; - -#define IF_ZMODIFY(x) - -// Cap styles -const uint CAP_NONE = 0u; -const uint CAP_FLAT = 1u; -const uint CAP_ROUND = 2u; - -// Primitive type IDs (must match Python PRIM_* constants in ops.py) -const uint PRIM_ROAD_BOUNDARY = 0u; -const uint PRIM_LANE_LINE = 1u; // Legacy cyan lane line -const uint PRIM_CROSSWALK = 2u; -const uint PRIM_STATIC_OBSTACLE = 3u; // Legacy, avoid using -const uint PRIM_EGO_TRAJECTORY = 4u; -const uint PRIM_OBSTACLE = 5u; -const uint PRIM_EGO_OBSTACLE = 6u; -const uint PRIM_WAIT_LINE = 7u; -const uint PRIM_POLE = 8u; -const uint PRIM_ROAD_MARKING = 9u; -const uint PRIM_LANE_BOUNDARY = 10u; -const uint PRIM_TRAFFIC_LIGHT = 11u; -const uint PRIM_TRAFFIC_SIGN = 12u; -const uint PRIM_INTERSECTION = 13u; -const uint PRIM_ROAD_ISLAND = 14u; -const uint PRIM_BUFFER_ZONE = 15u; -// Lane line variants by color/style -const uint PRIM_LANE_LINE_WHITE_SOLID = 16u; -const uint PRIM_LANE_LINE_WHITE_DASHED = 17u; -const uint PRIM_LANE_LINE_YELLOW_SOLID = 18u; -const uint PRIM_LANE_LINE_YELLOW_DASHED = 19u; -// Dot primitives - each vertex is rendered as a circle -const uint PRIM_DOT_YELLOW = 20u; -const uint PRIM_DOT_WHITE = 21u; - -// Camera type IDs -const uint CAMERA_TYPE_REGULAR = 0u; -const uint CAMERA_TYPE_BEV = 1u; - -//============================================================================= -// Hardcoded Primitive Styles (matching wm-render colorscheme v3) -//============================================================================= - -// Colors (RGB normalized) - matching imaginaire4 v3 colorscheme -// Source: imaginaire4/imaginaire/auxiliary/world_scenario/color_scheme/config_color_hdmap.json -const vec3 COLOR_ROAD_BOUNDARY = vec3(253.0/255.0, 1.0/255.0, 232.0/255.0); // Magenta (253, 1, 232) -const vec3 COLOR_LANE_LINE = vec3(98.0/255.0, 183.0/255.0, 249.0/255.0); // Cyan (98, 183, 249) - "lanelines" (legacy) -const vec3 COLOR_CROSSWALK = vec3(139.0/255.0, 93.0/255.0, 255.0/255.0); // Purple (139, 93, 255) -const vec3 COLOR_STATIC_OBSTACLE = vec3(255.0/255.0, 100.0/255.0, 0.0/255.0); // Orange (legacy) -const vec3 COLOR_EGO_TRAJECTORY = vec3(0.0/255.0, 255.0/255.0, 0.0/255.0); // Green (0, 255, 0) -const vec3 COLOR_WAIT_LINE = vec3(108.0/255.0, 179.0/255.0, 59.0/255.0); // Yellow-green (108, 179, 59) -const vec3 COLOR_POLE = vec3(183.0/255.0, 69.0/255.0, 177.0/255.0); // Purple-magenta (183, 69, 177) -const vec3 COLOR_ROAD_MARKING = vec3(20.0/255.0, 254.0/255.0, 185.0/255.0); // Cyan-green (20, 254, 185) -const vec3 COLOR_LANE_BOUNDARY = vec3(98.0/255.0, 183.0/255.0, 249.0/255.0); // Cyan (same as lane line) -const vec3 COLOR_TRAFFIC_LIGHT = vec3(100.0/255.0, 100.0/255.0, 100.0/255.0); // Gray (100, 100, 100) -const vec3 COLOR_TRAFFIC_SIGN = vec3(8.0/255.0, 2.0/255.0, 255.0/255.0); // Blue (8, 2, 255) -const vec3 COLOR_INTERSECTION = vec3(80.0/255.0, 80.0/255.0, 120.0/255.0); // Dark blue-gray (approximated) -const vec3 COLOR_ROAD_ISLAND = vec3(60.0/255.0, 120.0/255.0, 60.0/255.0); // Dark green (approximated) -const vec3 COLOR_BUFFER_ZONE = vec3(120.0/255.0, 80.0/255.0, 80.0/255.0); // Dark red-brown (approximated) -// Lane line variants from config_color_geometry_laneline.json -const vec3 COLOR_LANE_LINE_WHITE = vec3(255.0/255.0, 255.0/255.0, 255.0/255.0); // White (255, 255, 255) -const vec3 COLOR_LANE_LINE_YELLOW = vec3(255.0/255.0, 255.0/255.0, 0.0/255.0); // Yellow (255, 255, 0) - -// Default polyline widths (pixels at reference resolution 1280x720) -const float DEFAULT_WIDTH_POLYLINE_REGULAR = 7.0; -const float DEFAULT_WIDTH_POLYLINE_BEV = 4.0; -const float DEFAULT_WIDTH_EGO_TRAJ_REGULAR = 12.0; -const float DEFAULT_WIDTH_EGO_TRAJ_BEV = 5.0; -const float DEFAULT_WIDTH_POLE_REGULAR = 5.0; // Poles are thinner (reference: 5 vs 12) -const float DEFAULT_WIDTH_POLE_BEV = 3.0; -const float DEFAULT_WIDTH_WIREFRAME = 2.0; - -// Configurable width uniforms (set from Python, or use defaults) - -// Compute depth-based scaling factor for line width -// z_ndc is in [-1, 1] where -1 is near, +1 is far -// Returns 1.0 at near, 0.0 at far (linear fade) -float get_depth_scale(vec4 clip) { - if (pc.u_depth_scaling < 0.5) return 1.0; // Disabled - float z_ndc = clip.z / clip.w; // Convert to NDC - float depth_scale = 1.0 - z_ndc; // Map [-1,1] to [1,0] - return clamp(depth_scale, 0.0, 1.0); -} - -// Color palette buffer (optional, configured from Python) -// Declared early so get_prim_color can use it; actual buffer layout defined later -layout(std430, binding = 10) readonly buffer ColorPaletteBufferEarly { - vec4 g_color_palette[]; -}; - -// Get default color for primitive type (hardcoded fallback) -vec3 get_default_prim_color(uint prim_type_id) { - if (prim_type_id == PRIM_ROAD_BOUNDARY) return COLOR_ROAD_BOUNDARY; - if (prim_type_id == PRIM_LANE_LINE) return COLOR_LANE_LINE; - if (prim_type_id == PRIM_CROSSWALK) return COLOR_CROSSWALK; - if (prim_type_id == PRIM_STATIC_OBSTACLE) return COLOR_STATIC_OBSTACLE; - if (prim_type_id == PRIM_EGO_TRAJECTORY) return COLOR_EGO_TRAJECTORY; - if (prim_type_id == PRIM_WAIT_LINE) return COLOR_WAIT_LINE; - if (prim_type_id == PRIM_POLE) return COLOR_POLE; - if (prim_type_id == PRIM_ROAD_MARKING) return COLOR_ROAD_MARKING; - if (prim_type_id == PRIM_LANE_BOUNDARY) return COLOR_LANE_BOUNDARY; - if (prim_type_id == PRIM_TRAFFIC_LIGHT) return COLOR_TRAFFIC_LIGHT; - if (prim_type_id == PRIM_TRAFFIC_SIGN) return COLOR_TRAFFIC_SIGN; - if (prim_type_id == PRIM_INTERSECTION) return COLOR_INTERSECTION; - if (prim_type_id == PRIM_ROAD_ISLAND) return COLOR_ROAD_ISLAND; - if (prim_type_id == PRIM_BUFFER_ZONE) return COLOR_BUFFER_ZONE; - // Lane line variants - if (prim_type_id == PRIM_LANE_LINE_WHITE_SOLID) return COLOR_LANE_LINE_WHITE; - if (prim_type_id == PRIM_LANE_LINE_WHITE_DASHED) return COLOR_LANE_LINE_WHITE; - if (prim_type_id == PRIM_LANE_LINE_YELLOW_SOLID) return COLOR_LANE_LINE_YELLOW; - if (prim_type_id == PRIM_LANE_LINE_YELLOW_DASHED) return COLOR_LANE_LINE_YELLOW; - if (prim_type_id == PRIM_DOT_YELLOW) return COLOR_LANE_LINE_YELLOW; - if (prim_type_id == PRIM_DOT_WHITE) return COLOR_LANE_LINE_WHITE; - return vec3(1.0, 1.0, 1.0); // Default white for obstacles -} - -// Get color for primitive type (checks palette first, then falls back to defaults) -vec3 get_prim_color(uint prim_type_id) { - // If color palette is configured, check if this prim_type has a custom color - // Alpha < 0 means "use default", alpha >= 0 means "use this color" - if (pc.u_color_palette_size > 0 && prim_type_id < uint(pc.u_color_palette_size)) { - vec4 palette_color = g_color_palette[prim_type_id]; - if (palette_color.a >= 0.0) { - return palette_color.rgb; - } - } - // Fall back to hardcoded defaults - return get_default_prim_color(prim_type_id); -} - -// Check if primitive is a dot type (rendered as circles at each vertex) -bool is_dot_primitive(uint prim_type_id) { - return prim_type_id == PRIM_DOT_YELLOW || prim_type_id == PRIM_DOT_WHITE; -} - -// Get polyline width for primitive type and camera type (scaled by resolution) -float get_prim_width(uint prim_type_id, uint camera_type_id) { - bool is_bev = (camera_type_id == CAMERA_TYPE_BEV); - float scale = (pc.u_resolution_scale > 0.0) ? pc.u_resolution_scale : 1.0; - - float base_width; - if (prim_type_id == PRIM_EGO_TRAJECTORY) { - float default_w = is_bev ? DEFAULT_WIDTH_EGO_TRAJ_BEV : DEFAULT_WIDTH_EGO_TRAJ_REGULAR; - float custom_w = is_bev ? pc.u_width_ego_traj_bev : pc.u_width_ego_traj_regular; - base_width = (custom_w > 0.0) ? custom_w : default_w; - } else if (prim_type_id == PRIM_POLE) { - // Poles use thinner lines (reference: 5 pixels vs 12 for other polylines) - base_width = is_bev ? DEFAULT_WIDTH_POLE_BEV : DEFAULT_WIDTH_POLE_REGULAR; - } else { - float default_w = is_bev ? DEFAULT_WIDTH_POLYLINE_BEV : DEFAULT_WIDTH_POLYLINE_REGULAR; - float custom_w = is_bev ? pc.u_width_polyline_bev : pc.u_width_polyline_regular; - base_width = (custom_w > 0.0) ? custom_w : default_w; - } - return base_width * scale; -} - -// Get wireframe edge width (scaled by resolution) -float get_wireframe_width() { - float scale = (pc.u_resolution_scale > 0.0) ? pc.u_resolution_scale : 1.0; - float base_width = (pc.u_width_wireframe > 0.0) ? pc.u_width_wireframe : DEFAULT_WIDTH_WIREFRAME; - return base_width * scale; -} - -//============================================================================= -// Data Structures (must match C++ structs) -//============================================================================= - -// TimestampedPolylinePool (64 bytes) -struct TimestampedPolylinePool { - uint num_timestamps; - uint num_varrays; - uint num_vertices; - uint prim_type_id; // Index into PrimitiveStyle lookup table - uint timestamps_offset; - uint ts_varrays_ps_offset; - uint varrays_ps_offset; - uint vertices_offset; - uint aabb_offset; // Per-element AABB in float buffer (6 floats each: min xyz, max xyz) - uint _pad1, _pad2, _pad3, _pad4, _pad5, _pad6, _pad7; // Padding to 64 bytes -}; - -// TimestampedPolygonPool (64 bytes) -struct TimestampedPolygonPool { - uint num_timestamps; - uint num_varrays; - uint num_vertices; - uint num_triangles; - uint prim_type_id; // Index into PrimitiveStyle lookup table - uint timestamps_offset; - uint ts_varrays_ps_offset; - uint varrays_ps_offset; - uint tri_ps_offset; - uint vertices_offset; - uint triangles_offset; - uint aabb_offset; // Per-element AABB in float buffer (6 floats each: min xyz, max xyz) - uint _pad1, _pad2, _pad3, _pad4; // Padding to 64 bytes (16 uints) -}; - -// CubePool (64 bytes) - used for obstacles, traffic lights, traffic signs, etc. -// Renamed from ObstaclePool but keeping struct name for backward compat -struct ObstaclePool { - uint num_cubes; // Was: num_obstacles - uint num_timestamps; - uint num_track_poses; - uint prim_type_id; // Semantic type for color lookup - uint timestamps_offset; // Global timestamps for this pool - uint cube_ts_ps_offset; // Per-cube track length prefix sum (was: obstacle_ts_ps_offset) - uint track_timestamps_offset; // Per-pose timestamps in float buffer (as 2x uint for int64) - uint translations_offset; // Per-pose translations (3 floats each) - uint quaternions_offset; // Per-pose quaternions (4 floats each) - uint scales_offset; // Per-cube scales (3 floats each) - uint colors_offset; // Per-cube colors (6 floats each) - uint render_flags; // CUBE_FLAG_* bits (e.g., CUBE_FLAG_WIREFRAME) - uint _pad2, _pad3, _pad4, _pad5; // 4 padding fields for 64 bytes total -}; - -// Cube render flags -const uint CUBE_FLAG_WIREFRAME = 1u; // Draw wireframe edges in addition to solid faces - -// TimestampedScene (128 bytes) -struct TimestampedScene { - uint num_polyline_pools; - uint polyline_pools_offset; - uint num_polygon_pools; - uint polygon_pools_offset; - uint num_cube_pools; // Was: has_obstacle_pool (0/1), now supports multiple - uint cube_pools_offset; // Was: obstacle_pool_offset - uint timestamps_buffer_offset; - uint int32_buffer_offset; - uint vertex_buffer_offset; - uint triangle_buffer_offset; - uint pose_buffer_offset; - uint float_buffer_offset; - uint _pad[20]; -}; - -// RenderQuery (16 bytes) -struct RenderQuery { - uint scene_id; - uint camera_id; - int64_t timestamp_us; - uint camera_type_id; // CAMERA_TYPE_REGULAR or CAMERA_TYPE_BEV - uint _pad1, _pad2, _pad3; // Padding to 32 bytes -}; - -// FThetaCamera (72 bytes) -struct FThetaCamera { - float cx, cy; - float img_w, img_h; - float poly0, poly1, poly2, poly3, poly4, poly5; - float max_ray_angle; - float max_distortion_val; - float max_distortion_dval; - float depth_max; - float ld_c, ld_d, ld_e, ld_f; -}; - -// CameraPose (64 bytes) -struct CameraPose { - mat4 world_to_camera; -}; - -// Vertex (16 bytes) -struct Vertex { - float x, y, z; - float _pad; -}; - -//============================================================================= -// Buffer Bindings -//============================================================================= - -// Global data buffers -layout(std430, binding = 0) readonly buffer TimestampsBuffer { - int64_t g_timestamps[]; -}; - -layout(std430, binding = 1) readonly buffer Int32Buffer { - int g_int32[]; -}; - -layout(std430, binding = 2) readonly buffer VertexBuffer { - Vertex g_vertices[]; -}; - -layout(std430, binding = 3) readonly buffer TriangleBuffer { - uvec3 g_triangles[]; -}; - -layout(std430, binding = 4) readonly buffer PoseBuffer { - CameraPose g_poses[]; -}; - -layout(std430, binding = 5) readonly buffer FloatBuffer { - float g_floats[]; -}; - -// Scene metadata -layout(std430, binding = 6) readonly buffer SceneBuffer { - TimestampedScene g_scenes[]; -}; - -layout(std430, binding = 7) readonly buffer PolylinePoolBuffer { - TimestampedPolylinePool g_polyline_pools[]; -}; - -layout(std430, binding = 8) readonly buffer PolygonPoolBuffer { - TimestampedPolygonPool g_polygon_pools[]; -}; - -layout(std430, binding = 9) readonly buffer ObstaclePoolBuffer { - ObstaclePool g_obstacle_pools[]; -}; - -// Camera buffers -layout(std430, binding = 11) readonly buffer CameraIntrinsicsBuffer { - FThetaCamera g_camera_intrinsics[]; -}; - -layout(std430, binding = 12) readonly buffer CameraPoseBuffer { - CameraPose g_camera_poses[]; // One per query (dynamic viewpoints) -}; - -// Query buffer -layout(std430, binding = 13) readonly buffer QueryBuffer { - RenderQuery g_queries[]; -}; - -// Uniforms -// Spatial culling: elements beyond depth_max * scale from the camera are -// discarded in the task shader. Scale > 1 gives headroom so nothing at -// the visible boundary pops in/out. Set to 0 to disable culling. - -//============================================================================= -// GPU Binary Search -// Returns index of last element <= target, or -1 if target < all elements -//============================================================================= - -int binary_search_timestamps(uint base_offset, uint count, int64_t target) { - if (count == 0u) return -1; - - int left = 0; - int right = int(count) - 1; - int result = -1; - - while (left <= right) { - int mid = (left + right) / 2; - int64_t val = g_timestamps[base_offset + uint(mid)]; - - if (val <= target) { - result = mid; - left = mid + 1; - } else { - right = mid - 1; - } - } - - return result; -} - -//============================================================================= -// Quaternion Math for Track Interpolation -//============================================================================= - -// Quaternion dot product -float quat_dot(vec4 a, vec4 b) { - return a.x*b.x + a.y*b.y + a.z*b.z + a.w*b.w; -} - -// Quaternion normalize -vec4 quat_normalize(vec4 q) { - float len = length(q); - return len > 1e-10 ? q / len : vec4(0.0, 0.0, 0.0, 1.0); -} - -// Quaternion spherical linear interpolation (slerp) -vec4 quat_slerp(vec4 q0, vec4 q1, float t) { - // Ensure shortest path - float d = quat_dot(q0, q1); - if (d < 0.0) { - q1 = -q1; - d = -d; - } - - // If quaternions are very close, use linear interpolation - if (d > 0.9995) { - return quat_normalize(mix(q0, q1, t)); - } - - // Spherical interpolation - float theta_0 = acos(clamp(d, -1.0, 1.0)); - float theta = theta_0 * t; - float sin_theta = sin(theta); - float sin_theta_0 = sin(theta_0); - - float s0 = cos(theta) - d * sin_theta / sin_theta_0; - float s1 = sin_theta / sin_theta_0; - - return quat_normalize(s0 * q0 + s1 * q1); -} - -// Convert quaternion (x, y, z, w) to 3x3 rotation matrix -// GLSL mat3 is column-major: mat3(col0, col1, col2) -mat3 quat_to_matrix(vec4 q) { - float x = q.x, y = q.y, z = q.z, w = q.w; - - float x2 = x + x, y2 = y + y, z2 = z + z; - float xx = x * x2, xy = x * y2, xz = x * z2; - float yy = y * y2, yz = y * z2, zz = z * z2; - float wx = w * x2, wy = w * y2, wz = w * z2; - - // Column 0: (R00, R10, R20), Column 1: (R01, R11, R21), Column 2: (R02, R12, R22) - return mat3( - 1.0 - (yy + zz), xy + wz, xz - wy, // Column 0 - xy - wz, 1.0 - (xx + zz), yz + wx, // Column 1 - xz + wy, yz - wx, 1.0 - (xx + yy) // Column 2 - ); -} - -// Build 4x4 transform from translation and quaternion (with scale) -mat4 build_transform(vec3 translation, vec4 quaternion, vec3 scale) { - mat3 rot = quat_to_matrix(quaternion); - - // Apply scale to each column of rotation matrix - mat4 result = mat4( - vec4(rot[0] * scale.x, 0.0), - vec4(rot[1] * scale.y, 0.0), - vec4(rot[2] * scale.z, 0.0), - vec4(translation, 1.0) - ); - - return result; -} - -// Binary search for track interpolation (returns index where t0 <= target < t1) -// Returns -1 if target is outside the track range -int binary_search_track(uint base_offset, uint count, int64_t target) { - if (count < 2u) return -1; // Need at least 2 points for interpolation - - int64_t first_ts = g_timestamps[base_offset]; - int64_t last_ts = g_timestamps[base_offset + count - 1u]; - - // Check bounds - if (target < first_ts || target > last_ts) return -1; - - int left = 0; - int right = int(count) - 2; // Max valid index for interpolation start - int result = 0; - - while (left <= right) { - int mid = (left + right) / 2; - int64_t t0 = g_timestamps[base_offset + uint(mid)]; - int64_t t1 = g_timestamps[base_offset + uint(mid) + 1u]; - - if (t0 <= target && target <= t1) { - return mid; - } else if (target < t0) { - right = mid - 1; - } else { - left = mid + 1; - } - } - - return -1; // Should not reach here for valid input -} - -//============================================================================= -// Spatial Culling Helpers -//============================================================================= - -// AABB-AABB overlap test -bool cull_aabb_overlap(vec3 a_min, vec3 a_max, vec3 b_min, vec3 b_max) { - return all(lessThanEqual(a_min, b_max)) && all(greaterThanEqual(a_max, b_min)); -} - -// Sphere-AABB overlap test -bool cull_sphere_aabb_overlap(vec3 center, float radius, vec3 b_min, vec3 b_max) { - vec3 nearest = clamp(center, b_min, b_max); - vec3 d = center - nearest; - return dot(d, d) <= radius * radius; -} - -// Extract camera world position from view pose -vec3 get_camera_world_pos(CameraPose pose) { - mat3 R = mat3(pose.world_to_camera); - return -transpose(R) * pose.world_to_camera[3].xyz; -} - -//============================================================================= -// F-theta Projection -//============================================================================= - -vec3 rotate_rodrigues(vec3 v, vec3 r) { - float theta = length(r); - if (theta < 1e-8) return v; - vec3 k = r / theta; - float c = cos(theta); - float s = sin(theta); - return v * c + cross(k, v) * s + k * dot(k, v) * (1.0 - c); -} - -// F-theta projection: world point -> NDC -// Supports >180° FOV fisheye cameras where points can have negative z (behind camera plane) -vec4 ftheta_project(vec3 world_pos, CameraPose pose, FThetaCamera cam) { - vec3 cam_pt = (pose.world_to_camera * vec4(world_pos, 1.0)).xyz; - float depth = cam_pt.z; - - float ray_norm = length(cam_pt); - - // Handle points at camera origin - if (ray_norm < 1e-6) { - return vec4(0.0, 0.0, 0.0, 1.0); - } - - float half_pi = 1.5707963; // π/2 - - // For cameras with FOV <= 180° (max_ray_angle <= π/2), points behind camera should be clipped - // Use pseudo-pinhole projection to push them far away in the correct direction - if (cam.max_ray_angle <= half_pi && depth < 0.001) { - float pseudo_focal = cam.poly1; - float x_clip = cam_pt.x * pseudo_focal / (cam.img_w * 0.5); - float y_clip = -cam_pt.y * pseudo_focal / (cam.img_h * 0.5); - return vec4(x_clip * 10.0, y_clip * 10.0, 1.0, 1.0); // Scale by 10 to push far outside - } - - float xy_norm = length(cam_pt.xy); - float cos_alpha = clamp(cam_pt.z / ray_norm, -1.0, 1.0); - float alpha = acos(cos_alpha); // alpha in [0, π] - - // Apply polynomial projection (with linear extrapolation beyond max_ray_angle) - float a2 = alpha * alpha; - float a3 = a2 * alpha; - float a4 = a2 * a2; - float a5 = a4 * alpha; - - float delta = cam.poly0 + cam.poly1 * alpha + cam.poly2 * a2 + - cam.poly3 * a3 + cam.poly4 * a4 + cam.poly5 * a5; - if (alpha > cam.max_ray_angle) { - delta = cam.max_distortion_val + (alpha - cam.max_ray_angle) * cam.max_distortion_dval; - } - - float scale = (xy_norm > 1e-6) ? (delta / xy_norm) : 0.0; - vec2 pixel_rel = scale * cam_pt.xy; - - vec2 pixel_dist; - pixel_dist.x = cam.ld_c * pixel_rel.x + cam.ld_d * pixel_rel.y; - pixel_dist.y = cam.ld_e * pixel_rel.x + cam.ld_f * pixel_rel.y; - - vec2 pixel = pixel_dist + vec2(cam.cx, cam.cy); - - float x_ndc = 2.0 * pixel.x / cam.img_w - 1.0; - float y_ndc = 1.0 - 2.0 * pixel.y / cam.img_h; - - // For z-buffer depth mapping: - // - Narrow FOV (<=180°): use signed depth (cam_pt.z) - // - Wide FOV (>180°): use ray_norm for front-camera vertices (unchanged), - // but push behind-camera vertices to depth_max so they never occlude - // forward geometry. ray_norm alone can't distinguish front from behind. - float z_value; - if (cam.max_ray_angle > half_pi) { - z_value = (depth >= 0.0) ? ray_norm : cam.depth_max; - } else { - z_value = depth; - } - float z_ndc = clamp(z_value / cam.depth_max, 0.0, 1.0); - - return vec4(x_ndc, y_ndc, z_ndc, 1.0); -} - -// Inline version that takes mat4 directly -float estimate_edge_distortion_pixels_mat4(vec3 v0, vec3 v1, mat4 world_to_cam, FThetaCamera cam) { - // Transform to camera space - vec3 cam_pt0 = (world_to_cam * vec4(v0, 1.0)).xyz; - vec3 cam_pt1 = (world_to_cam * vec4(v1, 1.0)).xyz; - vec3 mid_world = (v0 + v1) * 0.5; - vec3 cam_pt_mid = (world_to_cam * vec4(mid_world, 1.0)).xyz; - - // Just clamp depths to avoid division issues - - // For segments in front of camera, compute f-theta projection error directly - // Use depth-clamped projection to handle near-plane cases - float depth0 = max(cam_pt0.z, 0.001); - float depth1 = max(cam_pt1.z, 0.001); - float depth_mid = max(cam_pt_mid.z, 0.001); - - // Compute f-theta projection for each point - // We inline the projection to avoid struct-passing issues - vec2 pixel0, pixel1, pixel_mid; - { - float xy_norm = length(cam_pt0.xy); - float ray_norm = length(vec3(cam_pt0.xy, depth0)) + 1e-10; - float cos_alpha = clamp(depth0 / ray_norm, -1.0, 1.0); - float alpha = acos(cos_alpha); - float a2 = alpha * alpha; - float delta = cam.poly0 + cam.poly1 * alpha + cam.poly2 * a2 + - cam.poly3 * (a2 * alpha) + cam.poly4 * (a2 * a2) + cam.poly5 * (a2 * a2 * alpha); - if (alpha > cam.max_ray_angle) { - delta = cam.max_distortion_val + (alpha - cam.max_ray_angle) * cam.max_distortion_dval; - } - float scale = (xy_norm > 1e-6) ? (delta / xy_norm) : 0.0; - vec2 pixel_rel = scale * cam_pt0.xy; - vec2 pixel_dist = vec2(cam.ld_c * pixel_rel.x + cam.ld_d * pixel_rel.y, - cam.ld_e * pixel_rel.x + cam.ld_f * pixel_rel.y); - pixel0 = pixel_dist + vec2(cam.cx, cam.cy); - } - { - float xy_norm = length(cam_pt1.xy); - float ray_norm = length(vec3(cam_pt1.xy, depth1)) + 1e-10; - float cos_alpha = clamp(depth1 / ray_norm, -1.0, 1.0); - float alpha = acos(cos_alpha); - float a2 = alpha * alpha; - float delta = cam.poly0 + cam.poly1 * alpha + cam.poly2 * a2 + - cam.poly3 * (a2 * alpha) + cam.poly4 * (a2 * a2) + cam.poly5 * (a2 * a2 * alpha); - if (alpha > cam.max_ray_angle) { - delta = cam.max_distortion_val + (alpha - cam.max_ray_angle) * cam.max_distortion_dval; - } - float scale = (xy_norm > 1e-6) ? (delta / xy_norm) : 0.0; - vec2 pixel_rel = scale * cam_pt1.xy; - vec2 pixel_dist = vec2(cam.ld_c * pixel_rel.x + cam.ld_d * pixel_rel.y, - cam.ld_e * pixel_rel.x + cam.ld_f * pixel_rel.y); - pixel1 = pixel_dist + vec2(cam.cx, cam.cy); - } - { - float xy_norm = length(cam_pt_mid.xy); - float ray_norm = length(vec3(cam_pt_mid.xy, depth_mid)) + 1e-10; - float cos_alpha = clamp(depth_mid / ray_norm, -1.0, 1.0); - float alpha = acos(cos_alpha); - float a2 = alpha * alpha; - float delta = cam.poly0 + cam.poly1 * alpha + cam.poly2 * a2 + - cam.poly3 * (a2 * alpha) + cam.poly4 * (a2 * a2) + cam.poly5 * (a2 * a2 * alpha); - if (alpha > cam.max_ray_angle) { - delta = cam.max_distortion_val + (alpha - cam.max_ray_angle) * cam.max_distortion_dval; - } - float scale = (xy_norm > 1e-6) ? (delta / xy_norm) : 0.0; - vec2 pixel_rel = scale * cam_pt_mid.xy; - vec2 pixel_dist = vec2(cam.ld_c * pixel_rel.x + cam.ld_d * pixel_rel.y, - cam.ld_e * pixel_rel.x + cam.ld_f * pixel_rel.y); - pixel_mid = pixel_dist + vec2(cam.cx, cam.cy); - } - - // Compute error: distance from projected midpoint to linear interpolation - vec2 linear_pixel_mid = (pixel0 + pixel1) * 0.5; - float error_pixels = length(pixel_mid - linear_pixel_mid); - - // Clamp to reasonable range to handle edge cases - return clamp(error_pixels, 0.0, 10000.0); -} - -uint compute_subdivision_level(vec3 v0, vec3 v1, CameraPose pose, FThetaCamera cam, float threshold_pixels) { - float error = estimate_edge_distortion_pixels_mat4(v0, v1, pose.world_to_camera, cam); - - if (error < threshold_pixels) return 0u; - if (error < threshold_pixels * 2.0) return 1u; - if (error < threshold_pixels * 4.0) return 2u; - return 3u; -} - -//============================================================================= -// Barycentric Subdivision Utilities (shared with polygon/cube) -//============================================================================= - -uint bary_vertex_count(uint level) { - // Vertices = (n+1)(n+2)/2 where n = 2^level - if (level == 0u) return 3u; - if (level == 1u) return 6u; - if (level == 2u) return 15u; - return 45u; // level 3 -} - -uint bary_triangle_count(uint level) { - // Triangles = 4^level - if (level == 0u) return 1u; - if (level == 1u) return 4u; - if (level == 2u) return 16u; - return 64u; // level 3 -} - -vec2 bary_vertex_uv(uint vertex_idx, uint level) { - if (level == 0u) { - if (vertex_idx == 0u) return vec2(0.0, 0.0); - if (vertex_idx == 1u) return vec2(1.0, 0.0); - return vec2(0.0, 1.0); - } else if (level == 1u) { - vec2 uvs[6]; - uvs[0] = vec2(0.0, 0.0); - uvs[1] = vec2(1.0, 0.0); - uvs[2] = vec2(0.0, 1.0); - uvs[3] = vec2(0.5, 0.0); - uvs[4] = vec2(0.5, 0.5); - uvs[5] = vec2(0.0, 0.5); - return uvs[vertex_idx]; - } else if (level == 2u) { - uint row, col; - if (vertex_idx < 5u) { row = 0u; col = vertex_idx; } - else if (vertex_idx < 9u) { row = 1u; col = vertex_idx - 5u; } - else if (vertex_idx < 12u) { row = 2u; col = vertex_idx - 9u; } - else if (vertex_idx < 14u) { row = 3u; col = vertex_idx - 12u; } - else { row = 4u; col = 0u; } - return vec2(float(col) / 4.0, float(row) / 4.0); - } else { - // Level 3: 9 rows (0-8), row r has (9-r) vertices - uint row, col; - if (vertex_idx < 9u) { row = 0u; col = vertex_idx; } - else if (vertex_idx < 17u) { row = 1u; col = vertex_idx - 9u; } - else if (vertex_idx < 24u) { row = 2u; col = vertex_idx - 17u; } - else if (vertex_idx < 30u) { row = 3u; col = vertex_idx - 24u; } - else if (vertex_idx < 35u) { row = 4u; col = vertex_idx - 30u; } - else if (vertex_idx < 39u) { row = 5u; col = vertex_idx - 35u; } - else if (vertex_idx < 42u) { row = 6u; col = vertex_idx - 39u; } - else if (vertex_idx < 44u) { row = 7u; col = vertex_idx - 42u; } - else { row = 8u; col = 0u; } - return vec2(float(col) / 8.0, float(row) / 8.0); - } -} - -vec3 bary_interpolate(vec3 v0, vec3 v1, vec3 v2, vec2 uv) { - float w = 1.0 - uv.x - uv.y; - return v0 * w + v1 * uv.x + v2 * uv.y; -} - -uvec3 bary_triangle_indices(uint tri_idx, uint level) { - if (level == 0u) { - return uvec3(0u, 1u, 2u); - } else if (level == 1u) { - uvec3 tris[4]; - tris[0] = uvec3(0u, 3u, 5u); - tris[1] = uvec3(3u, 1u, 4u); - tris[2] = uvec3(5u, 4u, 2u); - tris[3] = uvec3(3u, 4u, 5u); - return tris[tri_idx]; - } else if (level == 2u) { - uint row_start[5] = uint[5](0u, 5u, 9u, 12u, 14u); - uint t = tri_idx; - uint row = 0u, col = 0u; - bool is_down = false; - - if (t < 7u) { - row = 0u; - if (t < 4u) { col = t; is_down = false; } - else { col = t - 4u; is_down = true; } - } else if (t < 12u) { - row = 1u; - uint lt = t - 7u; - if (lt < 3u) { col = lt; is_down = false; } - else { col = lt - 3u; is_down = true; } - } else if (t < 15u) { - row = 2u; - uint lt = t - 12u; - if (lt < 2u) { col = lt; is_down = false; } - else { col = lt - 2u; is_down = true; } - } else { - row = 3u; col = 0u; is_down = false; - } - - uint i0, i1, i2; - if (!is_down) { - i0 = row_start[row] + col; - i1 = row_start[row] + col + 1u; - i2 = row_start[row + 1u] + col; - } else { - i0 = row_start[row] + col + 1u; - i1 = row_start[row + 1u] + col + 1u; - i2 = row_start[row + 1u] + col; - } - return uvec3(i0, i1, i2); - } else { - // Level 3: row_start for 9 rows - uint row_start[9] = uint[9](0u, 9u, 17u, 24u, 30u, 35u, 39u, 42u, 44u); - uint t = tri_idx; - uint row = 0u, col = 0u; - bool is_down = false; - - // Row 0: 8 up + 7 down = 15, Row 1: 7 up + 6 down = 13, etc. - if (t < 15u) { - row = 0u; - if (t < 8u) { col = t; is_down = false; } - else { col = t - 8u; is_down = true; } - } else if (t < 28u) { - row = 1u; uint lt = t - 15u; - if (lt < 7u) { col = lt; is_down = false; } - else { col = lt - 7u; is_down = true; } - } else if (t < 39u) { - row = 2u; uint lt = t - 28u; - if (lt < 6u) { col = lt; is_down = false; } - else { col = lt - 6u; is_down = true; } - } else if (t < 48u) { - row = 3u; uint lt = t - 39u; - if (lt < 5u) { col = lt; is_down = false; } - else { col = lt - 5u; is_down = true; } - } else if (t < 55u) { - row = 4u; uint lt = t - 48u; - if (lt < 4u) { col = lt; is_down = false; } - else { col = lt - 4u; is_down = true; } - } else if (t < 60u) { - row = 5u; uint lt = t - 55u; - if (lt < 3u) { col = lt; is_down = false; } - else { col = lt - 3u; is_down = true; } - } else if (t < 63u) { - row = 6u; uint lt = t - 60u; - if (lt < 2u) { col = lt; is_down = false; } - else { col = lt - 2u; is_down = true; } - } else { - row = 7u; col = 0u; is_down = false; - } - - uint i0, i1, i2; - if (!is_down) { - i0 = row_start[row] + col; - i1 = row_start[row] + col + 1u; - i2 = row_start[row + 1u] + col; - } else { - i0 = row_start[row] + col + 1u; - i1 = row_start[row + 1u] + col + 1u; - i2 = row_start[row + 1u] + col; - } - return uvec3(i0, i1, i2); - } -} - - -layout(local_size_x = 32) in; -layout(triangles, max_vertices = 64, max_primitives = 64) out; - -struct PolygonTaskPayload { - uint query_id; - uint pool_id; - uint varray_idx; - uint triangle_count; - uint vertex_count; - uint subdivision_level; - vec3 color; - float is_bev; -}; -taskPayloadSharedEXT PolygonTaskPayload payload; - -out gl_MeshPerVertexNV { - vec4 gl_Position; -} gl_MeshVerticesEXT[]; - -perprimitiveEXT out gl_MeshPerPrimitiveNV { - int gl_Layer; -} gl_MeshPrimitivesEXT[]; - -// Per-primitive color (same as polylines) - no per-vertex array needed -layout(location = 0) perprimitiveEXT out PrimColorBlock { - vec3 color; - float is_bev; // 1.0 for BEV cameras (disables fog), 0.0 otherwise -} prim_out[]; - -void main() { - uint _prim_count = 0u; - uint chunk_id = gl_WorkGroupID.x; - uint subdiv = payload.subdivision_level; - uint tid = gl_LocalInvocationID.x; - - RenderQuery query = g_queries[payload.query_id]; - TimestampedScene scene = g_scenes[query.scene_id]; - TimestampedPolygonPool pool = g_polygon_pools[scene.polygon_pools_offset + payload.pool_id]; - - FThetaCamera cam = g_camera_intrinsics[query.camera_id]; - CameraPose pose = g_camera_poses[payload.query_id]; - - // Get triangle/vertex ranges for this polygon - uint tri_start = 0u; - if (payload.varray_idx > 0u) { - tri_start = uint(g_int32[scene.int32_buffer_offset + pool.tri_ps_offset + payload.varray_idx - 1u]); - } - uint tri_end = uint(g_int32[scene.int32_buffer_offset + pool.tri_ps_offset + payload.varray_idx]); - uint total_tris = tri_end - tri_start; - - uint v_start = 0u; - if (payload.varray_idx > 0u) { - v_start = uint(g_int32[scene.int32_buffer_offset + pool.varrays_ps_offset + payload.varray_idx - 1u]); - } - - uint base_v_idx = scene.vertex_buffer_offset + pool.vertices_offset + v_start; - uint base_t_idx = scene.triangle_buffer_offset + pool.triangles_offset + tri_start; - - const uint CHUNK_SIZE = 8u; // Conservative chunking - const uint MAX_SHARED_VERTS = 30u; // Match original - - if (subdiv == 0u && payload.vertex_count <= MAX_SHARED_VERTS && chunk_id == 0u) { - // ===== NO SUBDIVISION, SHARED VERTEX MODE (small polygons) ===== - uint num_verts = min(payload.vertex_count, 30u); - uint num_tris = min(total_tris, 28u); - - _prim_count = num_tris; SetMeshOutputsEXT(num_verts, _prim_count); - - if (tid < num_verts) { - Vertex vtx = g_vertices[base_v_idx + tid]; - vec3 world_pos = vec3(vtx.x, vtx.y, vtx.z); - - vec4 clip = ftheta_project(world_pos, pose, cam); - gl_MeshVerticesEXT[tid].gl_Position = clip; - } - - barrier(); - - if (tid < num_tris) { - uvec3 tri = g_triangles[base_t_idx + tid]; - - uint base = tid * 3u; - gl_PrimitiveTriangleIndicesEXT[(base) / 3u] = uvec3(tri.x, tri.y, tri.z); - - gl_MeshPrimitivesEXT[tid].gl_Layer = int(payload.query_id); - prim_out[tid].color = payload.color; - prim_out[tid].is_bev = payload.is_bev; - } - } else if (subdiv == 1u) { - // ===== LEVEL 1 SUBDIVISION: 4 sub-triangles per triangle ===== - uint verts_per_tri = bary_vertex_count(1u); // 6 - uint tris_per_tri = bary_triangle_count(1u); // 4 - - uint tris_per_chunk = 5u; // Original value - uint chunk_start = chunk_id * tris_per_chunk; - uint chunk_end = min(chunk_start + tris_per_chunk, total_tris); - uint num_orig_tris = chunk_end - chunk_start; - - if (num_orig_tris == 0u) { - _prim_count = 0u; SetMeshOutputsEXT(0u, _prim_count); - return; - } - - uint num_out_verts = num_orig_tris * verts_per_tri; - uint num_out_tris = num_orig_tris * tris_per_tri; - _prim_count = num_out_tris; SetMeshOutputsEXT(num_out_verts, _prim_count); - - if (tid < num_orig_tris) { - uvec3 tri = g_triangles[base_t_idx + chunk_start + tid]; - - Vertex v0_data = g_vertices[base_v_idx + tri.x]; - Vertex v1_data = g_vertices[base_v_idx + tri.y]; - Vertex v2_data = g_vertices[base_v_idx + tri.z]; - - vec3 v0 = vec3(v0_data.x, v0_data.y, v0_data.z); - vec3 v1 = vec3(v1_data.x, v1_data.y, v1_data.z); - vec3 v2 = vec3(v2_data.x, v2_data.y, v2_data.z); - - uint vert_base = tid * verts_per_tri; - for (uint i = 0u; i < verts_per_tri; i++) { - vec2 uv = bary_vertex_uv(i, 1u); - vec3 pt = bary_interpolate(v0, v1, v2, uv); - - vec4 clip = ftheta_project(pt, pose, cam); - gl_MeshVerticesEXT[vert_base + i].gl_Position = clip; - } - } - - barrier(); - - if (tid < num_orig_tris) { - uint vert_base = tid * verts_per_tri; - uint tri_base = tid * tris_per_tri; - - for (uint t = 0u; t < tris_per_tri; t++) { - uvec3 idx = bary_triangle_indices(t, 1u); - uint idx_base = (tri_base + t) * 3u; - gl_PrimitiveTriangleIndicesEXT[(idx_base) / 3u] = uvec3(vert_base + idx.x, vert_base + idx.y, vert_base + idx.z); - gl_MeshPrimitivesEXT[tri_base + t].gl_Layer = int(payload.query_id); - prim_out[tri_base + t].color = payload.color; - prim_out[tri_base + t].is_bev = payload.is_bev; - } - } - } else if (subdiv == 2u) { - // ===== LEVEL 2 SUBDIVISION: 16 sub-triangles per triangle ===== - const uint TRIS_PER_CHUNK = 2u; // Original value - uint chunk_start = chunk_id * TRIS_PER_CHUNK; - uint chunk_end = min(chunk_start + TRIS_PER_CHUNK, total_tris); - uint num_orig_tris = chunk_end - chunk_start; - - if (num_orig_tris == 0u) { - _prim_count = 0u; SetMeshOutputsEXT(0u, _prim_count); - return; - } - - uint num_out_verts = num_orig_tris * 15u; - _prim_count = num_orig_tris * 16u; SetMeshOutputsEXT(num_out_verts, _prim_count); - - uint tri_local = tid / 16u; - uint vert_local = tid % 16u; - - if (tri_local < num_orig_tris && vert_local < 15u) { - uvec3 tri = g_triangles[base_t_idx + chunk_start + tri_local]; - - Vertex v0_data = g_vertices[base_v_idx + tri.x]; - Vertex v1_data = g_vertices[base_v_idx + tri.y]; - Vertex v2_data = g_vertices[base_v_idx + tri.z]; - - vec3 v0 = vec3(v0_data.x, v0_data.y, v0_data.z); - vec3 v1 = vec3(v1_data.x, v1_data.y, v1_data.z); - vec3 v2 = vec3(v2_data.x, v2_data.y, v2_data.z); - - vec2 uv = bary_vertex_uv(vert_local, 2u); - vec3 pt = bary_interpolate(v0, v1, v2, uv); - - vec4 clip = ftheta_project(pt, pose, cam); - uint vert_idx = tri_local * 15u + vert_local; - gl_MeshVerticesEXT[vert_idx].gl_Position = clip; - } - - barrier(); - - if (tri_local < num_orig_tris && vert_local < 16u) { - uint vert_base = tri_local * 15u; - uint tri_out_idx = tri_local * 16u + vert_local; - - uvec3 idx = bary_triangle_indices(vert_local, 2u); - - uint idx_base = tri_out_idx * 3u; - gl_PrimitiveTriangleIndicesEXT[(idx_base) / 3u] = uvec3(vert_base + idx.x, vert_base + idx.y, vert_base + idx.z); - gl_MeshPrimitivesEXT[tri_out_idx].gl_Layer = int(payload.query_id); - prim_out[tri_out_idx].color = payload.color; - prim_out[tri_out_idx].is_bev = payload.is_bev; - } - } else if (subdiv == 3u) { - // ===== LEVEL 3 SUBDIVISION: 64 sub-triangles per triangle ===== - // 1 original triangle per chunk (45 verts, 64 output tris) - const uint TRIS_PER_CHUNK = 1u; - uint chunk_start = chunk_id * TRIS_PER_CHUNK; - - if (chunk_start >= total_tris) { - _prim_count = 0u; SetMeshOutputsEXT(0u, _prim_count); - return; - } - - _prim_count = 64u; SetMeshOutputsEXT(45u, _prim_count); - - // Load the single triangle for this chunk - uvec3 tri = g_triangles[base_t_idx + chunk_start]; - Vertex v0_data = g_vertices[base_v_idx + tri.x]; - Vertex v1_data = g_vertices[base_v_idx + tri.y]; - Vertex v2_data = g_vertices[base_v_idx + tri.z]; - vec3 v0 = vec3(v0_data.x, v0_data.y, v0_data.z); - vec3 v1 = vec3(v1_data.x, v1_data.y, v1_data.z); - vec3 v2 = vec3(v2_data.x, v2_data.y, v2_data.z); - - // Each thread handles ~2 vertices (45 verts / 32 threads) - for (uint v = tid; v < 45u; v += 32u) { - vec2 uv = bary_vertex_uv(v, 3u); - vec3 pt = bary_interpolate(v0, v1, v2, uv); - vec4 clip = ftheta_project(pt, pose, cam); - gl_MeshVerticesEXT[v].gl_Position = clip; - } - - barrier(); - - // Each thread handles 2 triangles (64 tris / 32 threads) - for (uint t = tid; t < 64u; t += 32u) { - uvec3 idx = bary_triangle_indices(t, 3u); - uint idx_base = t * 3u; - gl_PrimitiveTriangleIndicesEXT[(idx_base) / 3u] = uvec3(idx.x, idx.y, idx.z); - gl_MeshPrimitivesEXT[t].gl_Layer = int(payload.query_id); - prim_out[t].color = payload.color; - prim_out[t].is_bev = payload.is_bev; - } - } else { - // ===== LARGE POLYGON WITHOUT SUBDIVISION ===== - uint chunk_start = chunk_id * CHUNK_SIZE; - uint chunk_end = min(chunk_start + CHUNK_SIZE, total_tris); - uint num_orig_tris = chunk_end - chunk_start; - - if (num_orig_tris == 0u) { - _prim_count = 0u; SetMeshOutputsEXT(0u, _prim_count); - return; - } - - uint num_out_verts = num_orig_tris * 3u; - _prim_count = num_orig_tris; SetMeshOutputsEXT(num_out_verts, _prim_count); - - if (tid < num_orig_tris) { - uvec3 tri = g_triangles[base_t_idx + chunk_start + tid]; - - Vertex v0_data = g_vertices[base_v_idx + tri.x]; - Vertex v1_data = g_vertices[base_v_idx + tri.y]; - Vertex v2_data = g_vertices[base_v_idx + tri.z]; - - vec3 v0 = vec3(v0_data.x, v0_data.y, v0_data.z); - vec3 v1 = vec3(v1_data.x, v1_data.y, v1_data.z); - vec3 v2 = vec3(v2_data.x, v2_data.y, v2_data.z); - - uint vert_base = tid * 3u; - - vec4 clip0 = ftheta_project(v0, pose, cam); - vec4 clip1 = ftheta_project(v1, pose, cam); - vec4 clip2 = ftheta_project(v2, pose, cam); - gl_MeshVerticesEXT[vert_base + 0u].gl_Position = clip0; - gl_MeshVerticesEXT[vert_base + 1u].gl_Position = clip1; - gl_MeshVerticesEXT[vert_base + 2u].gl_Position = clip2; - - uint idx_base = tid * 3u; - gl_PrimitiveTriangleIndicesEXT[(idx_base) / 3u] = uvec3(vert_base + 0u, vert_base + 1u, vert_base + 2u); - gl_MeshPrimitivesEXT[tid].gl_Layer = int(payload.query_id); - prim_out[tid].color = payload.color; - prim_out[tid].is_bev = payload.is_bev; - } - } -} diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/ts_polygon.task.glsl b/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/ts_polygon.task.glsl deleted file mode 100644 index 3ff155db8..000000000 --- a/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/ts_polygon.task.glsl +++ /dev/null @@ -1,1010 +0,0 @@ -#version 460 -#extension GL_EXT_mesh_shader : require -#extension GL_EXT_shader_explicit_arithmetic_types_int64 : require - -layout(push_constant) uniform PushConstants { - float u_width_polyline_regular; - float u_width_polyline_bev; - float u_width_ego_traj_regular; - float u_width_ego_traj_bev; - float u_width_wireframe; - float u_resolution_scale; - float u_depth_scaling; - int u_max_extrapolation_us; - int u_color_palette_size; - uint u_num_queries; - float u_tessellation_threshold; - uint u_max_tessellation_polyline; - uint u_max_tessellation_polygon; - uint u_max_tessellation_cube; - float u_cull_radius_scale; - float u_fog_enabled; - uint u_max_obstacles; - uint u_cube_pool_index; - uint u_num_polygon_pools; - uint u_max_varrays_per_pool; - uint u_num_polyline_pools; -} pc; - -#define IF_ZMODIFY(x) - -// Cap styles -const uint CAP_NONE = 0u; -const uint CAP_FLAT = 1u; -const uint CAP_ROUND = 2u; - -// Primitive type IDs (must match Python PRIM_* constants in ops.py) -const uint PRIM_ROAD_BOUNDARY = 0u; -const uint PRIM_LANE_LINE = 1u; // Legacy cyan lane line -const uint PRIM_CROSSWALK = 2u; -const uint PRIM_STATIC_OBSTACLE = 3u; // Legacy, avoid using -const uint PRIM_EGO_TRAJECTORY = 4u; -const uint PRIM_OBSTACLE = 5u; -const uint PRIM_EGO_OBSTACLE = 6u; -const uint PRIM_WAIT_LINE = 7u; -const uint PRIM_POLE = 8u; -const uint PRIM_ROAD_MARKING = 9u; -const uint PRIM_LANE_BOUNDARY = 10u; -const uint PRIM_TRAFFIC_LIGHT = 11u; -const uint PRIM_TRAFFIC_SIGN = 12u; -const uint PRIM_INTERSECTION = 13u; -const uint PRIM_ROAD_ISLAND = 14u; -const uint PRIM_BUFFER_ZONE = 15u; -// Lane line variants by color/style -const uint PRIM_LANE_LINE_WHITE_SOLID = 16u; -const uint PRIM_LANE_LINE_WHITE_DASHED = 17u; -const uint PRIM_LANE_LINE_YELLOW_SOLID = 18u; -const uint PRIM_LANE_LINE_YELLOW_DASHED = 19u; -// Dot primitives - each vertex is rendered as a circle -const uint PRIM_DOT_YELLOW = 20u; -const uint PRIM_DOT_WHITE = 21u; - -// Camera type IDs -const uint CAMERA_TYPE_REGULAR = 0u; -const uint CAMERA_TYPE_BEV = 1u; - -//============================================================================= -// Hardcoded Primitive Styles (matching wm-render colorscheme v3) -//============================================================================= - -// Colors (RGB normalized) - matching imaginaire4 v3 colorscheme -// Source: imaginaire4/imaginaire/auxiliary/world_scenario/color_scheme/config_color_hdmap.json -const vec3 COLOR_ROAD_BOUNDARY = vec3(253.0/255.0, 1.0/255.0, 232.0/255.0); // Magenta (253, 1, 232) -const vec3 COLOR_LANE_LINE = vec3(98.0/255.0, 183.0/255.0, 249.0/255.0); // Cyan (98, 183, 249) - "lanelines" (legacy) -const vec3 COLOR_CROSSWALK = vec3(139.0/255.0, 93.0/255.0, 255.0/255.0); // Purple (139, 93, 255) -const vec3 COLOR_STATIC_OBSTACLE = vec3(255.0/255.0, 100.0/255.0, 0.0/255.0); // Orange (legacy) -const vec3 COLOR_EGO_TRAJECTORY = vec3(0.0/255.0, 255.0/255.0, 0.0/255.0); // Green (0, 255, 0) -const vec3 COLOR_WAIT_LINE = vec3(108.0/255.0, 179.0/255.0, 59.0/255.0); // Yellow-green (108, 179, 59) -const vec3 COLOR_POLE = vec3(183.0/255.0, 69.0/255.0, 177.0/255.0); // Purple-magenta (183, 69, 177) -const vec3 COLOR_ROAD_MARKING = vec3(20.0/255.0, 254.0/255.0, 185.0/255.0); // Cyan-green (20, 254, 185) -const vec3 COLOR_LANE_BOUNDARY = vec3(98.0/255.0, 183.0/255.0, 249.0/255.0); // Cyan (same as lane line) -const vec3 COLOR_TRAFFIC_LIGHT = vec3(100.0/255.0, 100.0/255.0, 100.0/255.0); // Gray (100, 100, 100) -const vec3 COLOR_TRAFFIC_SIGN = vec3(8.0/255.0, 2.0/255.0, 255.0/255.0); // Blue (8, 2, 255) -const vec3 COLOR_INTERSECTION = vec3(80.0/255.0, 80.0/255.0, 120.0/255.0); // Dark blue-gray (approximated) -const vec3 COLOR_ROAD_ISLAND = vec3(60.0/255.0, 120.0/255.0, 60.0/255.0); // Dark green (approximated) -const vec3 COLOR_BUFFER_ZONE = vec3(120.0/255.0, 80.0/255.0, 80.0/255.0); // Dark red-brown (approximated) -// Lane line variants from config_color_geometry_laneline.json -const vec3 COLOR_LANE_LINE_WHITE = vec3(255.0/255.0, 255.0/255.0, 255.0/255.0); // White (255, 255, 255) -const vec3 COLOR_LANE_LINE_YELLOW = vec3(255.0/255.0, 255.0/255.0, 0.0/255.0); // Yellow (255, 255, 0) - -// Default polyline widths (pixels at reference resolution 1280x720) -const float DEFAULT_WIDTH_POLYLINE_REGULAR = 7.0; -const float DEFAULT_WIDTH_POLYLINE_BEV = 4.0; -const float DEFAULT_WIDTH_EGO_TRAJ_REGULAR = 12.0; -const float DEFAULT_WIDTH_EGO_TRAJ_BEV = 5.0; -const float DEFAULT_WIDTH_POLE_REGULAR = 5.0; // Poles are thinner (reference: 5 vs 12) -const float DEFAULT_WIDTH_POLE_BEV = 3.0; -const float DEFAULT_WIDTH_WIREFRAME = 2.0; - -// Configurable width uniforms (set from Python, or use defaults) - -// Compute depth-based scaling factor for line width -// z_ndc is in [-1, 1] where -1 is near, +1 is far -// Returns 1.0 at near, 0.0 at far (linear fade) -float get_depth_scale(vec4 clip) { - if (pc.u_depth_scaling < 0.5) return 1.0; // Disabled - float z_ndc = clip.z / clip.w; // Convert to NDC - float depth_scale = 1.0 - z_ndc; // Map [-1,1] to [1,0] - return clamp(depth_scale, 0.0, 1.0); -} - -// Color palette buffer (optional, configured from Python) -// Declared early so get_prim_color can use it; actual buffer layout defined later -layout(std430, binding = 10) readonly buffer ColorPaletteBufferEarly { - vec4 g_color_palette[]; -}; - -// Get default color for primitive type (hardcoded fallback) -vec3 get_default_prim_color(uint prim_type_id) { - if (prim_type_id == PRIM_ROAD_BOUNDARY) return COLOR_ROAD_BOUNDARY; - if (prim_type_id == PRIM_LANE_LINE) return COLOR_LANE_LINE; - if (prim_type_id == PRIM_CROSSWALK) return COLOR_CROSSWALK; - if (prim_type_id == PRIM_STATIC_OBSTACLE) return COLOR_STATIC_OBSTACLE; - if (prim_type_id == PRIM_EGO_TRAJECTORY) return COLOR_EGO_TRAJECTORY; - if (prim_type_id == PRIM_WAIT_LINE) return COLOR_WAIT_LINE; - if (prim_type_id == PRIM_POLE) return COLOR_POLE; - if (prim_type_id == PRIM_ROAD_MARKING) return COLOR_ROAD_MARKING; - if (prim_type_id == PRIM_LANE_BOUNDARY) return COLOR_LANE_BOUNDARY; - if (prim_type_id == PRIM_TRAFFIC_LIGHT) return COLOR_TRAFFIC_LIGHT; - if (prim_type_id == PRIM_TRAFFIC_SIGN) return COLOR_TRAFFIC_SIGN; - if (prim_type_id == PRIM_INTERSECTION) return COLOR_INTERSECTION; - if (prim_type_id == PRIM_ROAD_ISLAND) return COLOR_ROAD_ISLAND; - if (prim_type_id == PRIM_BUFFER_ZONE) return COLOR_BUFFER_ZONE; - // Lane line variants - if (prim_type_id == PRIM_LANE_LINE_WHITE_SOLID) return COLOR_LANE_LINE_WHITE; - if (prim_type_id == PRIM_LANE_LINE_WHITE_DASHED) return COLOR_LANE_LINE_WHITE; - if (prim_type_id == PRIM_LANE_LINE_YELLOW_SOLID) return COLOR_LANE_LINE_YELLOW; - if (prim_type_id == PRIM_LANE_LINE_YELLOW_DASHED) return COLOR_LANE_LINE_YELLOW; - if (prim_type_id == PRIM_DOT_YELLOW) return COLOR_LANE_LINE_YELLOW; - if (prim_type_id == PRIM_DOT_WHITE) return COLOR_LANE_LINE_WHITE; - return vec3(1.0, 1.0, 1.0); // Default white for obstacles -} - -// Get color for primitive type (checks palette first, then falls back to defaults) -vec3 get_prim_color(uint prim_type_id) { - // If color palette is configured, check if this prim_type has a custom color - // Alpha < 0 means "use default", alpha >= 0 means "use this color" - if (pc.u_color_palette_size > 0 && prim_type_id < uint(pc.u_color_palette_size)) { - vec4 palette_color = g_color_palette[prim_type_id]; - if (palette_color.a >= 0.0) { - return palette_color.rgb; - } - } - // Fall back to hardcoded defaults - return get_default_prim_color(prim_type_id); -} - -// Check if primitive is a dot type (rendered as circles at each vertex) -bool is_dot_primitive(uint prim_type_id) { - return prim_type_id == PRIM_DOT_YELLOW || prim_type_id == PRIM_DOT_WHITE; -} - -// Get polyline width for primitive type and camera type (scaled by resolution) -float get_prim_width(uint prim_type_id, uint camera_type_id) { - bool is_bev = (camera_type_id == CAMERA_TYPE_BEV); - float scale = (pc.u_resolution_scale > 0.0) ? pc.u_resolution_scale : 1.0; - - float base_width; - if (prim_type_id == PRIM_EGO_TRAJECTORY) { - float default_w = is_bev ? DEFAULT_WIDTH_EGO_TRAJ_BEV : DEFAULT_WIDTH_EGO_TRAJ_REGULAR; - float custom_w = is_bev ? pc.u_width_ego_traj_bev : pc.u_width_ego_traj_regular; - base_width = (custom_w > 0.0) ? custom_w : default_w; - } else if (prim_type_id == PRIM_POLE) { - // Poles use thinner lines (reference: 5 pixels vs 12 for other polylines) - base_width = is_bev ? DEFAULT_WIDTH_POLE_BEV : DEFAULT_WIDTH_POLE_REGULAR; - } else { - float default_w = is_bev ? DEFAULT_WIDTH_POLYLINE_BEV : DEFAULT_WIDTH_POLYLINE_REGULAR; - float custom_w = is_bev ? pc.u_width_polyline_bev : pc.u_width_polyline_regular; - base_width = (custom_w > 0.0) ? custom_w : default_w; - } - return base_width * scale; -} - -// Get wireframe edge width (scaled by resolution) -float get_wireframe_width() { - float scale = (pc.u_resolution_scale > 0.0) ? pc.u_resolution_scale : 1.0; - float base_width = (pc.u_width_wireframe > 0.0) ? pc.u_width_wireframe : DEFAULT_WIDTH_WIREFRAME; - return base_width * scale; -} - -//============================================================================= -// Data Structures (must match C++ structs) -//============================================================================= - -// TimestampedPolylinePool (64 bytes) -struct TimestampedPolylinePool { - uint num_timestamps; - uint num_varrays; - uint num_vertices; - uint prim_type_id; // Index into PrimitiveStyle lookup table - uint timestamps_offset; - uint ts_varrays_ps_offset; - uint varrays_ps_offset; - uint vertices_offset; - uint aabb_offset; // Per-element AABB in float buffer (6 floats each: min xyz, max xyz) - uint _pad1, _pad2, _pad3, _pad4, _pad5, _pad6, _pad7; // Padding to 64 bytes -}; - -// TimestampedPolygonPool (64 bytes) -struct TimestampedPolygonPool { - uint num_timestamps; - uint num_varrays; - uint num_vertices; - uint num_triangles; - uint prim_type_id; // Index into PrimitiveStyle lookup table - uint timestamps_offset; - uint ts_varrays_ps_offset; - uint varrays_ps_offset; - uint tri_ps_offset; - uint vertices_offset; - uint triangles_offset; - uint aabb_offset; // Per-element AABB in float buffer (6 floats each: min xyz, max xyz) - uint _pad1, _pad2, _pad3, _pad4; // Padding to 64 bytes (16 uints) -}; - -// CubePool (64 bytes) - used for obstacles, traffic lights, traffic signs, etc. -// Renamed from ObstaclePool but keeping struct name for backward compat -struct ObstaclePool { - uint num_cubes; // Was: num_obstacles - uint num_timestamps; - uint num_track_poses; - uint prim_type_id; // Semantic type for color lookup - uint timestamps_offset; // Global timestamps for this pool - uint cube_ts_ps_offset; // Per-cube track length prefix sum (was: obstacle_ts_ps_offset) - uint track_timestamps_offset; // Per-pose timestamps in float buffer (as 2x uint for int64) - uint translations_offset; // Per-pose translations (3 floats each) - uint quaternions_offset; // Per-pose quaternions (4 floats each) - uint scales_offset; // Per-cube scales (3 floats each) - uint colors_offset; // Per-cube colors (6 floats each) - uint render_flags; // CUBE_FLAG_* bits (e.g., CUBE_FLAG_WIREFRAME) - uint _pad2, _pad3, _pad4, _pad5; // 4 padding fields for 64 bytes total -}; - -// Cube render flags -const uint CUBE_FLAG_WIREFRAME = 1u; // Draw wireframe edges in addition to solid faces - -// TimestampedScene (128 bytes) -struct TimestampedScene { - uint num_polyline_pools; - uint polyline_pools_offset; - uint num_polygon_pools; - uint polygon_pools_offset; - uint num_cube_pools; // Was: has_obstacle_pool (0/1), now supports multiple - uint cube_pools_offset; // Was: obstacle_pool_offset - uint timestamps_buffer_offset; - uint int32_buffer_offset; - uint vertex_buffer_offset; - uint triangle_buffer_offset; - uint pose_buffer_offset; - uint float_buffer_offset; - uint _pad[20]; -}; - -// RenderQuery (16 bytes) -struct RenderQuery { - uint scene_id; - uint camera_id; - int64_t timestamp_us; - uint camera_type_id; // CAMERA_TYPE_REGULAR or CAMERA_TYPE_BEV - uint _pad1, _pad2, _pad3; // Padding to 32 bytes -}; - -// FThetaCamera (72 bytes) -struct FThetaCamera { - float cx, cy; - float img_w, img_h; - float poly0, poly1, poly2, poly3, poly4, poly5; - float max_ray_angle; - float max_distortion_val; - float max_distortion_dval; - float depth_max; - float ld_c, ld_d, ld_e, ld_f; -}; - -// CameraPose (64 bytes) -struct CameraPose { - mat4 world_to_camera; -}; - -// Vertex (16 bytes) -struct Vertex { - float x, y, z; - float _pad; -}; - -//============================================================================= -// Buffer Bindings -//============================================================================= - -// Global data buffers -layout(std430, binding = 0) readonly buffer TimestampsBuffer { - int64_t g_timestamps[]; -}; - -layout(std430, binding = 1) readonly buffer Int32Buffer { - int g_int32[]; -}; - -layout(std430, binding = 2) readonly buffer VertexBuffer { - Vertex g_vertices[]; -}; - -layout(std430, binding = 3) readonly buffer TriangleBuffer { - uvec3 g_triangles[]; -}; - -layout(std430, binding = 4) readonly buffer PoseBuffer { - CameraPose g_poses[]; -}; - -layout(std430, binding = 5) readonly buffer FloatBuffer { - float g_floats[]; -}; - -// Scene metadata -layout(std430, binding = 6) readonly buffer SceneBuffer { - TimestampedScene g_scenes[]; -}; - -layout(std430, binding = 7) readonly buffer PolylinePoolBuffer { - TimestampedPolylinePool g_polyline_pools[]; -}; - -layout(std430, binding = 8) readonly buffer PolygonPoolBuffer { - TimestampedPolygonPool g_polygon_pools[]; -}; - -layout(std430, binding = 9) readonly buffer ObstaclePoolBuffer { - ObstaclePool g_obstacle_pools[]; -}; - -// Camera buffers -layout(std430, binding = 11) readonly buffer CameraIntrinsicsBuffer { - FThetaCamera g_camera_intrinsics[]; -}; - -layout(std430, binding = 12) readonly buffer CameraPoseBuffer { - CameraPose g_camera_poses[]; // One per query (dynamic viewpoints) -}; - -// Query buffer -layout(std430, binding = 13) readonly buffer QueryBuffer { - RenderQuery g_queries[]; -}; - -// Uniforms -// Spatial culling: elements beyond depth_max * scale from the camera are -// discarded in the task shader. Scale > 1 gives headroom so nothing at -// the visible boundary pops in/out. Set to 0 to disable culling. - -//============================================================================= -// GPU Binary Search -// Returns index of last element <= target, or -1 if target < all elements -//============================================================================= - -int binary_search_timestamps(uint base_offset, uint count, int64_t target) { - if (count == 0u) return -1; - - int left = 0; - int right = int(count) - 1; - int result = -1; - - while (left <= right) { - int mid = (left + right) / 2; - int64_t val = g_timestamps[base_offset + uint(mid)]; - - if (val <= target) { - result = mid; - left = mid + 1; - } else { - right = mid - 1; - } - } - - return result; -} - -//============================================================================= -// Quaternion Math for Track Interpolation -//============================================================================= - -// Quaternion dot product -float quat_dot(vec4 a, vec4 b) { - return a.x*b.x + a.y*b.y + a.z*b.z + a.w*b.w; -} - -// Quaternion normalize -vec4 quat_normalize(vec4 q) { - float len = length(q); - return len > 1e-10 ? q / len : vec4(0.0, 0.0, 0.0, 1.0); -} - -// Quaternion spherical linear interpolation (slerp) -vec4 quat_slerp(vec4 q0, vec4 q1, float t) { - // Ensure shortest path - float d = quat_dot(q0, q1); - if (d < 0.0) { - q1 = -q1; - d = -d; - } - - // If quaternions are very close, use linear interpolation - if (d > 0.9995) { - return quat_normalize(mix(q0, q1, t)); - } - - // Spherical interpolation - float theta_0 = acos(clamp(d, -1.0, 1.0)); - float theta = theta_0 * t; - float sin_theta = sin(theta); - float sin_theta_0 = sin(theta_0); - - float s0 = cos(theta) - d * sin_theta / sin_theta_0; - float s1 = sin_theta / sin_theta_0; - - return quat_normalize(s0 * q0 + s1 * q1); -} - -// Convert quaternion (x, y, z, w) to 3x3 rotation matrix -// GLSL mat3 is column-major: mat3(col0, col1, col2) -mat3 quat_to_matrix(vec4 q) { - float x = q.x, y = q.y, z = q.z, w = q.w; - - float x2 = x + x, y2 = y + y, z2 = z + z; - float xx = x * x2, xy = x * y2, xz = x * z2; - float yy = y * y2, yz = y * z2, zz = z * z2; - float wx = w * x2, wy = w * y2, wz = w * z2; - - // Column 0: (R00, R10, R20), Column 1: (R01, R11, R21), Column 2: (R02, R12, R22) - return mat3( - 1.0 - (yy + zz), xy + wz, xz - wy, // Column 0 - xy - wz, 1.0 - (xx + zz), yz + wx, // Column 1 - xz + wy, yz - wx, 1.0 - (xx + yy) // Column 2 - ); -} - -// Build 4x4 transform from translation and quaternion (with scale) -mat4 build_transform(vec3 translation, vec4 quaternion, vec3 scale) { - mat3 rot = quat_to_matrix(quaternion); - - // Apply scale to each column of rotation matrix - mat4 result = mat4( - vec4(rot[0] * scale.x, 0.0), - vec4(rot[1] * scale.y, 0.0), - vec4(rot[2] * scale.z, 0.0), - vec4(translation, 1.0) - ); - - return result; -} - -// Binary search for track interpolation (returns index where t0 <= target < t1) -// Returns -1 if target is outside the track range -int binary_search_track(uint base_offset, uint count, int64_t target) { - if (count < 2u) return -1; // Need at least 2 points for interpolation - - int64_t first_ts = g_timestamps[base_offset]; - int64_t last_ts = g_timestamps[base_offset + count - 1u]; - - // Check bounds - if (target < first_ts || target > last_ts) return -1; - - int left = 0; - int right = int(count) - 2; // Max valid index for interpolation start - int result = 0; - - while (left <= right) { - int mid = (left + right) / 2; - int64_t t0 = g_timestamps[base_offset + uint(mid)]; - int64_t t1 = g_timestamps[base_offset + uint(mid) + 1u]; - - if (t0 <= target && target <= t1) { - return mid; - } else if (target < t0) { - right = mid - 1; - } else { - left = mid + 1; - } - } - - return -1; // Should not reach here for valid input -} - -//============================================================================= -// Spatial Culling Helpers -//============================================================================= - -// AABB-AABB overlap test -bool cull_aabb_overlap(vec3 a_min, vec3 a_max, vec3 b_min, vec3 b_max) { - return all(lessThanEqual(a_min, b_max)) && all(greaterThanEqual(a_max, b_min)); -} - -// Sphere-AABB overlap test -bool cull_sphere_aabb_overlap(vec3 center, float radius, vec3 b_min, vec3 b_max) { - vec3 nearest = clamp(center, b_min, b_max); - vec3 d = center - nearest; - return dot(d, d) <= radius * radius; -} - -// Extract camera world position from view pose -vec3 get_camera_world_pos(CameraPose pose) { - mat3 R = mat3(pose.world_to_camera); - return -transpose(R) * pose.world_to_camera[3].xyz; -} - -//============================================================================= -// F-theta Projection -//============================================================================= - -vec3 rotate_rodrigues(vec3 v, vec3 r) { - float theta = length(r); - if (theta < 1e-8) return v; - vec3 k = r / theta; - float c = cos(theta); - float s = sin(theta); - return v * c + cross(k, v) * s + k * dot(k, v) * (1.0 - c); -} - -// F-theta projection: world point -> NDC -// Supports >180° FOV fisheye cameras where points can have negative z (behind camera plane) -vec4 ftheta_project(vec3 world_pos, CameraPose pose, FThetaCamera cam) { - vec3 cam_pt = (pose.world_to_camera * vec4(world_pos, 1.0)).xyz; - float depth = cam_pt.z; - - float ray_norm = length(cam_pt); - - // Handle points at camera origin - if (ray_norm < 1e-6) { - return vec4(0.0, 0.0, 0.0, 1.0); - } - - float half_pi = 1.5707963; // π/2 - - // For cameras with FOV <= 180° (max_ray_angle <= π/2), points behind camera should be clipped - // Use pseudo-pinhole projection to push them far away in the correct direction - if (cam.max_ray_angle <= half_pi && depth < 0.001) { - float pseudo_focal = cam.poly1; - float x_clip = cam_pt.x * pseudo_focal / (cam.img_w * 0.5); - float y_clip = -cam_pt.y * pseudo_focal / (cam.img_h * 0.5); - return vec4(x_clip * 10.0, y_clip * 10.0, 1.0, 1.0); // Scale by 10 to push far outside - } - - float xy_norm = length(cam_pt.xy); - float cos_alpha = clamp(cam_pt.z / ray_norm, -1.0, 1.0); - float alpha = acos(cos_alpha); // alpha in [0, π] - - // Apply polynomial projection (with linear extrapolation beyond max_ray_angle) - float a2 = alpha * alpha; - float a3 = a2 * alpha; - float a4 = a2 * a2; - float a5 = a4 * alpha; - - float delta = cam.poly0 + cam.poly1 * alpha + cam.poly2 * a2 + - cam.poly3 * a3 + cam.poly4 * a4 + cam.poly5 * a5; - if (alpha > cam.max_ray_angle) { - delta = cam.max_distortion_val + (alpha - cam.max_ray_angle) * cam.max_distortion_dval; - } - - float scale = (xy_norm > 1e-6) ? (delta / xy_norm) : 0.0; - vec2 pixel_rel = scale * cam_pt.xy; - - vec2 pixel_dist; - pixel_dist.x = cam.ld_c * pixel_rel.x + cam.ld_d * pixel_rel.y; - pixel_dist.y = cam.ld_e * pixel_rel.x + cam.ld_f * pixel_rel.y; - - vec2 pixel = pixel_dist + vec2(cam.cx, cam.cy); - - float x_ndc = 2.0 * pixel.x / cam.img_w - 1.0; - float y_ndc = 1.0 - 2.0 * pixel.y / cam.img_h; - - // For z-buffer depth mapping: - // - Narrow FOV (<=180°): use signed depth (cam_pt.z) - // - Wide FOV (>180°): use ray_norm for front-camera vertices (unchanged), - // but push behind-camera vertices to depth_max so they never occlude - // forward geometry. ray_norm alone can't distinguish front from behind. - float z_value; - if (cam.max_ray_angle > half_pi) { - z_value = (depth >= 0.0) ? ray_norm : cam.depth_max; - } else { - z_value = depth; - } - float z_ndc = clamp(z_value / cam.depth_max, 0.0, 1.0); - - return vec4(x_ndc, y_ndc, z_ndc, 1.0); -} - -// Inline version that takes mat4 directly -float estimate_edge_distortion_pixels_mat4(vec3 v0, vec3 v1, mat4 world_to_cam, FThetaCamera cam) { - // Transform to camera space - vec3 cam_pt0 = (world_to_cam * vec4(v0, 1.0)).xyz; - vec3 cam_pt1 = (world_to_cam * vec4(v1, 1.0)).xyz; - vec3 mid_world = (v0 + v1) * 0.5; - vec3 cam_pt_mid = (world_to_cam * vec4(mid_world, 1.0)).xyz; - - // Just clamp depths to avoid division issues - - // For segments in front of camera, compute f-theta projection error directly - // Use depth-clamped projection to handle near-plane cases - float depth0 = max(cam_pt0.z, 0.001); - float depth1 = max(cam_pt1.z, 0.001); - float depth_mid = max(cam_pt_mid.z, 0.001); - - // Compute f-theta projection for each point - // We inline the projection to avoid struct-passing issues - vec2 pixel0, pixel1, pixel_mid; - { - float xy_norm = length(cam_pt0.xy); - float ray_norm = length(vec3(cam_pt0.xy, depth0)) + 1e-10; - float cos_alpha = clamp(depth0 / ray_norm, -1.0, 1.0); - float alpha = acos(cos_alpha); - float a2 = alpha * alpha; - float delta = cam.poly0 + cam.poly1 * alpha + cam.poly2 * a2 + - cam.poly3 * (a2 * alpha) + cam.poly4 * (a2 * a2) + cam.poly5 * (a2 * a2 * alpha); - if (alpha > cam.max_ray_angle) { - delta = cam.max_distortion_val + (alpha - cam.max_ray_angle) * cam.max_distortion_dval; - } - float scale = (xy_norm > 1e-6) ? (delta / xy_norm) : 0.0; - vec2 pixel_rel = scale * cam_pt0.xy; - vec2 pixel_dist = vec2(cam.ld_c * pixel_rel.x + cam.ld_d * pixel_rel.y, - cam.ld_e * pixel_rel.x + cam.ld_f * pixel_rel.y); - pixel0 = pixel_dist + vec2(cam.cx, cam.cy); - } - { - float xy_norm = length(cam_pt1.xy); - float ray_norm = length(vec3(cam_pt1.xy, depth1)) + 1e-10; - float cos_alpha = clamp(depth1 / ray_norm, -1.0, 1.0); - float alpha = acos(cos_alpha); - float a2 = alpha * alpha; - float delta = cam.poly0 + cam.poly1 * alpha + cam.poly2 * a2 + - cam.poly3 * (a2 * alpha) + cam.poly4 * (a2 * a2) + cam.poly5 * (a2 * a2 * alpha); - if (alpha > cam.max_ray_angle) { - delta = cam.max_distortion_val + (alpha - cam.max_ray_angle) * cam.max_distortion_dval; - } - float scale = (xy_norm > 1e-6) ? (delta / xy_norm) : 0.0; - vec2 pixel_rel = scale * cam_pt1.xy; - vec2 pixel_dist = vec2(cam.ld_c * pixel_rel.x + cam.ld_d * pixel_rel.y, - cam.ld_e * pixel_rel.x + cam.ld_f * pixel_rel.y); - pixel1 = pixel_dist + vec2(cam.cx, cam.cy); - } - { - float xy_norm = length(cam_pt_mid.xy); - float ray_norm = length(vec3(cam_pt_mid.xy, depth_mid)) + 1e-10; - float cos_alpha = clamp(depth_mid / ray_norm, -1.0, 1.0); - float alpha = acos(cos_alpha); - float a2 = alpha * alpha; - float delta = cam.poly0 + cam.poly1 * alpha + cam.poly2 * a2 + - cam.poly3 * (a2 * alpha) + cam.poly4 * (a2 * a2) + cam.poly5 * (a2 * a2 * alpha); - if (alpha > cam.max_ray_angle) { - delta = cam.max_distortion_val + (alpha - cam.max_ray_angle) * cam.max_distortion_dval; - } - float scale = (xy_norm > 1e-6) ? (delta / xy_norm) : 0.0; - vec2 pixel_rel = scale * cam_pt_mid.xy; - vec2 pixel_dist = vec2(cam.ld_c * pixel_rel.x + cam.ld_d * pixel_rel.y, - cam.ld_e * pixel_rel.x + cam.ld_f * pixel_rel.y); - pixel_mid = pixel_dist + vec2(cam.cx, cam.cy); - } - - // Compute error: distance from projected midpoint to linear interpolation - vec2 linear_pixel_mid = (pixel0 + pixel1) * 0.5; - float error_pixels = length(pixel_mid - linear_pixel_mid); - - // Clamp to reasonable range to handle edge cases - return clamp(error_pixels, 0.0, 10000.0); -} - -uint compute_subdivision_level(vec3 v0, vec3 v1, CameraPose pose, FThetaCamera cam, float threshold_pixels) { - float error = estimate_edge_distortion_pixels_mat4(v0, v1, pose.world_to_camera, cam); - - if (error < threshold_pixels) return 0u; - if (error < threshold_pixels * 2.0) return 1u; - if (error < threshold_pixels * 4.0) return 2u; - return 3u; -} - -//============================================================================= -// Barycentric Subdivision Utilities (shared with polygon/cube) -//============================================================================= - -uint bary_vertex_count(uint level) { - // Vertices = (n+1)(n+2)/2 where n = 2^level - if (level == 0u) return 3u; - if (level == 1u) return 6u; - if (level == 2u) return 15u; - return 45u; // level 3 -} - -uint bary_triangle_count(uint level) { - // Triangles = 4^level - if (level == 0u) return 1u; - if (level == 1u) return 4u; - if (level == 2u) return 16u; - return 64u; // level 3 -} - -vec2 bary_vertex_uv(uint vertex_idx, uint level) { - if (level == 0u) { - if (vertex_idx == 0u) return vec2(0.0, 0.0); - if (vertex_idx == 1u) return vec2(1.0, 0.0); - return vec2(0.0, 1.0); - } else if (level == 1u) { - vec2 uvs[6]; - uvs[0] = vec2(0.0, 0.0); - uvs[1] = vec2(1.0, 0.0); - uvs[2] = vec2(0.0, 1.0); - uvs[3] = vec2(0.5, 0.0); - uvs[4] = vec2(0.5, 0.5); - uvs[5] = vec2(0.0, 0.5); - return uvs[vertex_idx]; - } else if (level == 2u) { - uint row, col; - if (vertex_idx < 5u) { row = 0u; col = vertex_idx; } - else if (vertex_idx < 9u) { row = 1u; col = vertex_idx - 5u; } - else if (vertex_idx < 12u) { row = 2u; col = vertex_idx - 9u; } - else if (vertex_idx < 14u) { row = 3u; col = vertex_idx - 12u; } - else { row = 4u; col = 0u; } - return vec2(float(col) / 4.0, float(row) / 4.0); - } else { - // Level 3: 9 rows (0-8), row r has (9-r) vertices - uint row, col; - if (vertex_idx < 9u) { row = 0u; col = vertex_idx; } - else if (vertex_idx < 17u) { row = 1u; col = vertex_idx - 9u; } - else if (vertex_idx < 24u) { row = 2u; col = vertex_idx - 17u; } - else if (vertex_idx < 30u) { row = 3u; col = vertex_idx - 24u; } - else if (vertex_idx < 35u) { row = 4u; col = vertex_idx - 30u; } - else if (vertex_idx < 39u) { row = 5u; col = vertex_idx - 35u; } - else if (vertex_idx < 42u) { row = 6u; col = vertex_idx - 39u; } - else if (vertex_idx < 44u) { row = 7u; col = vertex_idx - 42u; } - else { row = 8u; col = 0u; } - return vec2(float(col) / 8.0, float(row) / 8.0); - } -} - -vec3 bary_interpolate(vec3 v0, vec3 v1, vec3 v2, vec2 uv) { - float w = 1.0 - uv.x - uv.y; - return v0 * w + v1 * uv.x + v2 * uv.y; -} - -uvec3 bary_triangle_indices(uint tri_idx, uint level) { - if (level == 0u) { - return uvec3(0u, 1u, 2u); - } else if (level == 1u) { - uvec3 tris[4]; - tris[0] = uvec3(0u, 3u, 5u); - tris[1] = uvec3(3u, 1u, 4u); - tris[2] = uvec3(5u, 4u, 2u); - tris[3] = uvec3(3u, 4u, 5u); - return tris[tri_idx]; - } else if (level == 2u) { - uint row_start[5] = uint[5](0u, 5u, 9u, 12u, 14u); - uint t = tri_idx; - uint row = 0u, col = 0u; - bool is_down = false; - - if (t < 7u) { - row = 0u; - if (t < 4u) { col = t; is_down = false; } - else { col = t - 4u; is_down = true; } - } else if (t < 12u) { - row = 1u; - uint lt = t - 7u; - if (lt < 3u) { col = lt; is_down = false; } - else { col = lt - 3u; is_down = true; } - } else if (t < 15u) { - row = 2u; - uint lt = t - 12u; - if (lt < 2u) { col = lt; is_down = false; } - else { col = lt - 2u; is_down = true; } - } else { - row = 3u; col = 0u; is_down = false; - } - - uint i0, i1, i2; - if (!is_down) { - i0 = row_start[row] + col; - i1 = row_start[row] + col + 1u; - i2 = row_start[row + 1u] + col; - } else { - i0 = row_start[row] + col + 1u; - i1 = row_start[row + 1u] + col + 1u; - i2 = row_start[row + 1u] + col; - } - return uvec3(i0, i1, i2); - } else { - // Level 3: row_start for 9 rows - uint row_start[9] = uint[9](0u, 9u, 17u, 24u, 30u, 35u, 39u, 42u, 44u); - uint t = tri_idx; - uint row = 0u, col = 0u; - bool is_down = false; - - // Row 0: 8 up + 7 down = 15, Row 1: 7 up + 6 down = 13, etc. - if (t < 15u) { - row = 0u; - if (t < 8u) { col = t; is_down = false; } - else { col = t - 8u; is_down = true; } - } else if (t < 28u) { - row = 1u; uint lt = t - 15u; - if (lt < 7u) { col = lt; is_down = false; } - else { col = lt - 7u; is_down = true; } - } else if (t < 39u) { - row = 2u; uint lt = t - 28u; - if (lt < 6u) { col = lt; is_down = false; } - else { col = lt - 6u; is_down = true; } - } else if (t < 48u) { - row = 3u; uint lt = t - 39u; - if (lt < 5u) { col = lt; is_down = false; } - else { col = lt - 5u; is_down = true; } - } else if (t < 55u) { - row = 4u; uint lt = t - 48u; - if (lt < 4u) { col = lt; is_down = false; } - else { col = lt - 4u; is_down = true; } - } else if (t < 60u) { - row = 5u; uint lt = t - 55u; - if (lt < 3u) { col = lt; is_down = false; } - else { col = lt - 3u; is_down = true; } - } else if (t < 63u) { - row = 6u; uint lt = t - 60u; - if (lt < 2u) { col = lt; is_down = false; } - else { col = lt - 2u; is_down = true; } - } else { - row = 7u; col = 0u; is_down = false; - } - - uint i0, i1, i2; - if (!is_down) { - i0 = row_start[row] + col; - i1 = row_start[row] + col + 1u; - i2 = row_start[row + 1u] + col; - } else { - i0 = row_start[row] + col + 1u; - i1 = row_start[row + 1u] + col + 1u; - i2 = row_start[row + 1u] + col; - } - return uvec3(i0, i1, i2); - } -} - - -layout(local_size_x = 1) in; - -// Uniforms for dispatch decoding (same pattern as polylines) - -// Task payload - matches non-timestamped version -struct PolygonTaskPayload { - uint query_id; - uint pool_id; - uint varray_idx; - uint triangle_count; - uint vertex_count; - uint subdivision_level; - vec3 color; - float is_bev; -}; -taskPayloadSharedEXT PolygonTaskPayload payload; - -void main() { - uint _task_count = 0u; - uint work_id = gl_WorkGroupID.x; - - uint varray_offset = work_id % pc.u_max_varrays_per_pool; - uint temp = work_id / pc.u_max_varrays_per_pool; - uint pool_id_local = temp % pc.u_num_polygon_pools; - uint query_id_local = temp / pc.u_num_polygon_pools; - - if (query_id_local >= pc.u_num_queries) { - _task_count = 0u; - EmitMeshTasksEXT(_task_count, 1, 1); return; - } - - RenderQuery query = g_queries[query_id_local]; - TimestampedScene scene = g_scenes[query.scene_id]; - - if (pool_id_local >= scene.num_polygon_pools) { - _task_count = 0u; - EmitMeshTasksEXT(_task_count, 1, 1); return; - } - - TimestampedPolygonPool pool = g_polygon_pools[scene.polygon_pools_offset + pool_id_local]; - - int ts_idx = binary_search_timestamps( - scene.timestamps_buffer_offset + pool.timestamps_offset, - pool.num_timestamps, - query.timestamp_us - ); - - if (ts_idx < 0) { - _task_count = 0u; - EmitMeshTasksEXT(_task_count, 1, 1); return; - } - - // Get varray range for this timestamp - uint varray_start = 0u; - if (ts_idx > 0) { - varray_start = uint(g_int32[scene.int32_buffer_offset + pool.ts_varrays_ps_offset + uint(ts_idx) - 1u]); - } - uint varray_end = uint(g_int32[scene.int32_buffer_offset + pool.ts_varrays_ps_offset + uint(ts_idx)]); - uint num_varrays = varray_end - varray_start; - - bool force_zero_tasks = false; - if (varray_offset >= num_varrays) { - // Do not rely on an early EmitMeshTasksEXT(0, ...) here. Keep - // subsequent SSBO reads in-bounds by redirecting to a valid varray, - // then force the final emit count to zero. Without this, invalid - // workgroups for smaller pools can read the following pool's prefix - // sums/vertices and produce huge garbage triangles. - force_zero_tasks = true; - varray_offset = 0u; - } - - uint actual_varray_idx = varray_start + varray_offset; - - // Spatial culling: test per-element AABB against camera-centred view volume - if (pc.u_cull_radius_scale > 0.0 && pool.aabb_offset != 0u) { - float cull_r = g_camera_intrinsics[query.camera_id].depth_max * pc.u_cull_radius_scale; - CameraPose cull_pose = g_camera_poses[query_id_local]; - vec3 cam_pos = get_camera_world_pos(cull_pose); - vec3 view_min = cam_pos - vec3(cull_r); - vec3 view_max = cam_pos + vec3(cull_r); - uint ab = scene.float_buffer_offset + pool.aabb_offset + actual_varray_idx * 6u; - vec3 e_min = vec3(g_floats[ab], g_floats[ab+1u], g_floats[ab+2u]); - vec3 e_max = vec3(g_floats[ab+3u], g_floats[ab+4u], g_floats[ab+5u]); - if (!cull_aabb_overlap(e_min, e_max, view_min, view_max)) { - force_zero_tasks = true; - } - } - - // Get triangle range for this polygon - uint tri_start = 0u; - if (actual_varray_idx > 0u) { - tri_start = uint(g_int32[scene.int32_buffer_offset + pool.tri_ps_offset + actual_varray_idx - 1u]); - } - uint tri_end = uint(g_int32[scene.int32_buffer_offset + pool.tri_ps_offset + actual_varray_idx]); - uint total_tris = tri_end - tri_start; - - if (total_tris == 0u) { - force_zero_tasks = true; - } - - // Get vertex range - uint v_start = 0u; - if (actual_varray_idx > 0u) { - v_start = uint(g_int32[scene.int32_buffer_offset + pool.varrays_ps_offset + actual_varray_idx - 1u]); - } - uint v_end = uint(g_int32[scene.int32_buffer_offset + pool.varrays_ps_offset + actual_varray_idx]); - uint total_verts = v_end - v_start; - - // Compute max subdivision level (sample first few triangles) - FThetaCamera cam = g_camera_intrinsics[query.camera_id]; - CameraPose pose = g_camera_poses[query_id_local]; - - uint max_subdiv = 0u; - if (pc.u_tessellation_threshold > 0.0) { - uint base_v_idx = scene.vertex_buffer_offset + pool.vertices_offset + v_start; - uint base_t_idx = scene.triangle_buffer_offset + pool.triangles_offset + tri_start; - uint sample_count = min(total_tris, 8u); - - for (uint t = 0u; t < sample_count; t++) { - uvec3 tri = g_triangles[base_t_idx + t]; - Vertex v0 = g_vertices[base_v_idx + tri.x]; - Vertex v1 = g_vertices[base_v_idx + tri.y]; - Vertex v2 = g_vertices[base_v_idx + tri.z]; - - vec3 p0 = vec3(v0.x, v0.y, v0.z); - vec3 p1 = vec3(v1.x, v1.y, v1.z); - vec3 p2 = vec3(v2.x, v2.y, v2.z); - - max_subdiv = max(max_subdiv, compute_subdivision_level(p0, p1, pose, cam, pc.u_tessellation_threshold)); - max_subdiv = max(max_subdiv, compute_subdivision_level(p1, p2, pose, cam, pc.u_tessellation_threshold)); - max_subdiv = max(max_subdiv, compute_subdivision_level(p2, p0, pose, cam, pc.u_tessellation_threshold)); - } - max_subdiv = min(max_subdiv, 3u); // Allow up to level 3 - } - - // Compute chunks based on subdivision level (must match mesh shader constants) - const uint MAX_SHARED_VERTS = 30u; - uint num_chunks; - uint tris_per_chunk; - - if (max_subdiv == 0u && total_verts <= MAX_SHARED_VERTS) { - num_chunks = 1u; - } else { - if (max_subdiv == 0u) tris_per_chunk = 8u; - else if (max_subdiv == 1u) tris_per_chunk = 5u; - else if (max_subdiv == 2u) tris_per_chunk = 2u; - else tris_per_chunk = 1u; // Level 3: 1 tri per chunk - - num_chunks = (total_tris + tris_per_chunk - 1u) / tris_per_chunk; - num_chunks = max(num_chunks, 1u); - } - - _task_count = force_zero_tasks ? 0u : num_chunks; - - payload.query_id = query_id_local; - payload.pool_id = pool_id_local; - payload.varray_idx = actual_varray_idx; - payload.triangle_count = total_tris; - payload.vertex_count = total_verts; - payload.subdivision_level = max_subdiv; - payload.color = get_prim_color(pool.prim_type_id); - payload.is_bev = (query.camera_type_id == CAMERA_TYPE_BEV) ? 1.0 : 0.0; - EmitMeshTasksEXT(_task_count, 1, 1); -} diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/ts_polyline.frag.glsl b/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/ts_polyline.frag.glsl deleted file mode 100644 index 4d4af1194..000000000 --- a/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/ts_polyline.frag.glsl +++ /dev/null @@ -1,56 +0,0 @@ - -#version 460 -#extension GL_EXT_fragment_shader_barycentric : require -#extension GL_EXT_mesh_shader : require - -layout(push_constant) uniform PushConstants { - float u_width_polyline_regular; - float u_width_polyline_bev; - float u_width_ego_traj_regular; - float u_width_ego_traj_bev; - float u_width_wireframe; - float u_resolution_scale; - float u_depth_scaling; - int u_max_extrapolation_us; - int u_color_palette_size; - uint u_num_queries; - float u_tessellation_threshold; - uint u_max_tessellation_polyline; - uint u_max_tessellation_polygon; - uint u_max_tessellation_cube; - float u_cull_radius_scale; - float u_fog_enabled; - uint u_max_obstacles; - uint u_cube_pool_index; - uint u_num_polygon_pools; - uint u_max_varrays_per_pool; - uint u_num_polyline_pools; -} pc; - -#define IF_ZMODIFY(x) - -// Per-primitive color block from mesh shader -layout(location = 0) perprimitiveEXT in PrimColorBlock { - vec3 color; - float is_bev; -} prim_in; - -layout(location = 0) out vec4 out_color; - - -IF_ZMODIFY(layout(location = 0) uniform float in_dummy;) - -void main() { - vec3 color = prim_in.color; - - // Apply distance-based fog (darken with distance) - disabled for BEV cameras - // gl_FragCoord.z is in [0, 1] where 0=near, 1=far - if (pc.u_fog_enabled > 0.5 && prim_in.is_bev < 0.5) { - float fog_factor = 1.0 - gl_FragCoord.z; // 1.0 at near, 0.0 at far - fog_factor = clamp(fog_factor, 0.0, 1.0); - color *= fog_factor; - } - - out_color = vec4(color, 1.0); - IF_ZMODIFY(gl_FragDepth = gl_FragCoord.z + in_dummy;) -} diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/ts_polyline.mesh.glsl b/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/ts_polyline.mesh.glsl deleted file mode 100644 index fc3e7a3c5..000000000 --- a/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/ts_polyline.mesh.glsl +++ /dev/null @@ -1,1447 +0,0 @@ -#version 460 -#extension GL_EXT_mesh_shader : require -#extension GL_EXT_shader_explicit_arithmetic_types_int64 : require - -layout(push_constant) uniform PushConstants { - float u_width_polyline_regular; - float u_width_polyline_bev; - float u_width_ego_traj_regular; - float u_width_ego_traj_bev; - float u_width_wireframe; - float u_resolution_scale; - float u_depth_scaling; - int u_max_extrapolation_us; - int u_color_palette_size; - uint u_num_queries; - float u_tessellation_threshold; - uint u_max_tessellation_polyline; - uint u_max_tessellation_polygon; - uint u_max_tessellation_cube; - float u_cull_radius_scale; - float u_fog_enabled; - uint u_max_obstacles; - uint u_cube_pool_index; - uint u_num_polygon_pools; - uint u_max_varrays_per_pool; - uint u_num_polyline_pools; -} pc; - -#define IF_ZMODIFY(x) - -// Cap styles -const uint CAP_NONE = 0u; -const uint CAP_FLAT = 1u; -const uint CAP_ROUND = 2u; - -// Primitive type IDs (must match Python PRIM_* constants in ops.py) -const uint PRIM_ROAD_BOUNDARY = 0u; -const uint PRIM_LANE_LINE = 1u; // Legacy cyan lane line -const uint PRIM_CROSSWALK = 2u; -const uint PRIM_STATIC_OBSTACLE = 3u; // Legacy, avoid using -const uint PRIM_EGO_TRAJECTORY = 4u; -const uint PRIM_OBSTACLE = 5u; -const uint PRIM_EGO_OBSTACLE = 6u; -const uint PRIM_WAIT_LINE = 7u; -const uint PRIM_POLE = 8u; -const uint PRIM_ROAD_MARKING = 9u; -const uint PRIM_LANE_BOUNDARY = 10u; -const uint PRIM_TRAFFIC_LIGHT = 11u; -const uint PRIM_TRAFFIC_SIGN = 12u; -const uint PRIM_INTERSECTION = 13u; -const uint PRIM_ROAD_ISLAND = 14u; -const uint PRIM_BUFFER_ZONE = 15u; -// Lane line variants by color/style -const uint PRIM_LANE_LINE_WHITE_SOLID = 16u; -const uint PRIM_LANE_LINE_WHITE_DASHED = 17u; -const uint PRIM_LANE_LINE_YELLOW_SOLID = 18u; -const uint PRIM_LANE_LINE_YELLOW_DASHED = 19u; -// Dot primitives - each vertex is rendered as a circle -const uint PRIM_DOT_YELLOW = 20u; -const uint PRIM_DOT_WHITE = 21u; - -// Camera type IDs -const uint CAMERA_TYPE_REGULAR = 0u; -const uint CAMERA_TYPE_BEV = 1u; - -//============================================================================= -// Hardcoded Primitive Styles (matching wm-render colorscheme v3) -//============================================================================= - -// Colors (RGB normalized) - matching imaginaire4 v3 colorscheme -// Source: imaginaire4/imaginaire/auxiliary/world_scenario/color_scheme/config_color_hdmap.json -const vec3 COLOR_ROAD_BOUNDARY = vec3(253.0/255.0, 1.0/255.0, 232.0/255.0); // Magenta (253, 1, 232) -const vec3 COLOR_LANE_LINE = vec3(98.0/255.0, 183.0/255.0, 249.0/255.0); // Cyan (98, 183, 249) - "lanelines" (legacy) -const vec3 COLOR_CROSSWALK = vec3(139.0/255.0, 93.0/255.0, 255.0/255.0); // Purple (139, 93, 255) -const vec3 COLOR_STATIC_OBSTACLE = vec3(255.0/255.0, 100.0/255.0, 0.0/255.0); // Orange (legacy) -const vec3 COLOR_EGO_TRAJECTORY = vec3(0.0/255.0, 255.0/255.0, 0.0/255.0); // Green (0, 255, 0) -const vec3 COLOR_WAIT_LINE = vec3(108.0/255.0, 179.0/255.0, 59.0/255.0); // Yellow-green (108, 179, 59) -const vec3 COLOR_POLE = vec3(183.0/255.0, 69.0/255.0, 177.0/255.0); // Purple-magenta (183, 69, 177) -const vec3 COLOR_ROAD_MARKING = vec3(20.0/255.0, 254.0/255.0, 185.0/255.0); // Cyan-green (20, 254, 185) -const vec3 COLOR_LANE_BOUNDARY = vec3(98.0/255.0, 183.0/255.0, 249.0/255.0); // Cyan (same as lane line) -const vec3 COLOR_TRAFFIC_LIGHT = vec3(100.0/255.0, 100.0/255.0, 100.0/255.0); // Gray (100, 100, 100) -const vec3 COLOR_TRAFFIC_SIGN = vec3(8.0/255.0, 2.0/255.0, 255.0/255.0); // Blue (8, 2, 255) -const vec3 COLOR_INTERSECTION = vec3(80.0/255.0, 80.0/255.0, 120.0/255.0); // Dark blue-gray (approximated) -const vec3 COLOR_ROAD_ISLAND = vec3(60.0/255.0, 120.0/255.0, 60.0/255.0); // Dark green (approximated) -const vec3 COLOR_BUFFER_ZONE = vec3(120.0/255.0, 80.0/255.0, 80.0/255.0); // Dark red-brown (approximated) -// Lane line variants from config_color_geometry_laneline.json -const vec3 COLOR_LANE_LINE_WHITE = vec3(255.0/255.0, 255.0/255.0, 255.0/255.0); // White (255, 255, 255) -const vec3 COLOR_LANE_LINE_YELLOW = vec3(255.0/255.0, 255.0/255.0, 0.0/255.0); // Yellow (255, 255, 0) - -// Default polyline widths (pixels at reference resolution 1280x720) -const float DEFAULT_WIDTH_POLYLINE_REGULAR = 7.0; -const float DEFAULT_WIDTH_POLYLINE_BEV = 4.0; -const float DEFAULT_WIDTH_EGO_TRAJ_REGULAR = 12.0; -const float DEFAULT_WIDTH_EGO_TRAJ_BEV = 5.0; -const float DEFAULT_WIDTH_POLE_REGULAR = 5.0; // Poles are thinner (reference: 5 vs 12) -const float DEFAULT_WIDTH_POLE_BEV = 3.0; -const float DEFAULT_WIDTH_WIREFRAME = 2.0; - -// Configurable width uniforms (set from Python, or use defaults) - -// Compute depth-based scaling factor for line width -// z_ndc is in [-1, 1] where -1 is near, +1 is far -// Returns 1.0 at near, 0.0 at far (linear fade) -float get_depth_scale(vec4 clip) { - if (pc.u_depth_scaling < 0.5) return 1.0; // Disabled - float z_ndc = clip.z / clip.w; // Convert to NDC - float depth_scale = 1.0 - z_ndc; // Map [-1,1] to [1,0] - return clamp(depth_scale, 0.0, 1.0); -} - -// Color palette buffer (optional, configured from Python) -// Declared early so get_prim_color can use it; actual buffer layout defined later -layout(std430, binding = 10) readonly buffer ColorPaletteBufferEarly { - vec4 g_color_palette[]; -}; - -// Get default color for primitive type (hardcoded fallback) -vec3 get_default_prim_color(uint prim_type_id) { - if (prim_type_id == PRIM_ROAD_BOUNDARY) return COLOR_ROAD_BOUNDARY; - if (prim_type_id == PRIM_LANE_LINE) return COLOR_LANE_LINE; - if (prim_type_id == PRIM_CROSSWALK) return COLOR_CROSSWALK; - if (prim_type_id == PRIM_STATIC_OBSTACLE) return COLOR_STATIC_OBSTACLE; - if (prim_type_id == PRIM_EGO_TRAJECTORY) return COLOR_EGO_TRAJECTORY; - if (prim_type_id == PRIM_WAIT_LINE) return COLOR_WAIT_LINE; - if (prim_type_id == PRIM_POLE) return COLOR_POLE; - if (prim_type_id == PRIM_ROAD_MARKING) return COLOR_ROAD_MARKING; - if (prim_type_id == PRIM_LANE_BOUNDARY) return COLOR_LANE_BOUNDARY; - if (prim_type_id == PRIM_TRAFFIC_LIGHT) return COLOR_TRAFFIC_LIGHT; - if (prim_type_id == PRIM_TRAFFIC_SIGN) return COLOR_TRAFFIC_SIGN; - if (prim_type_id == PRIM_INTERSECTION) return COLOR_INTERSECTION; - if (prim_type_id == PRIM_ROAD_ISLAND) return COLOR_ROAD_ISLAND; - if (prim_type_id == PRIM_BUFFER_ZONE) return COLOR_BUFFER_ZONE; - // Lane line variants - if (prim_type_id == PRIM_LANE_LINE_WHITE_SOLID) return COLOR_LANE_LINE_WHITE; - if (prim_type_id == PRIM_LANE_LINE_WHITE_DASHED) return COLOR_LANE_LINE_WHITE; - if (prim_type_id == PRIM_LANE_LINE_YELLOW_SOLID) return COLOR_LANE_LINE_YELLOW; - if (prim_type_id == PRIM_LANE_LINE_YELLOW_DASHED) return COLOR_LANE_LINE_YELLOW; - if (prim_type_id == PRIM_DOT_YELLOW) return COLOR_LANE_LINE_YELLOW; - if (prim_type_id == PRIM_DOT_WHITE) return COLOR_LANE_LINE_WHITE; - return vec3(1.0, 1.0, 1.0); // Default white for obstacles -} - -// Get color for primitive type (checks palette first, then falls back to defaults) -vec3 get_prim_color(uint prim_type_id) { - // If color palette is configured, check if this prim_type has a custom color - // Alpha < 0 means "use default", alpha >= 0 means "use this color" - if (pc.u_color_palette_size > 0 && prim_type_id < uint(pc.u_color_palette_size)) { - vec4 palette_color = g_color_palette[prim_type_id]; - if (palette_color.a >= 0.0) { - return palette_color.rgb; - } - } - // Fall back to hardcoded defaults - return get_default_prim_color(prim_type_id); -} - -// Check if primitive is a dot type (rendered as circles at each vertex) -bool is_dot_primitive(uint prim_type_id) { - return prim_type_id == PRIM_DOT_YELLOW || prim_type_id == PRIM_DOT_WHITE; -} - -// Get polyline width for primitive type and camera type (scaled by resolution) -float get_prim_width(uint prim_type_id, uint camera_type_id) { - bool is_bev = (camera_type_id == CAMERA_TYPE_BEV); - float scale = (pc.u_resolution_scale > 0.0) ? pc.u_resolution_scale : 1.0; - - float base_width; - if (prim_type_id == PRIM_EGO_TRAJECTORY) { - float default_w = is_bev ? DEFAULT_WIDTH_EGO_TRAJ_BEV : DEFAULT_WIDTH_EGO_TRAJ_REGULAR; - float custom_w = is_bev ? pc.u_width_ego_traj_bev : pc.u_width_ego_traj_regular; - base_width = (custom_w > 0.0) ? custom_w : default_w; - } else if (prim_type_id == PRIM_POLE) { - // Poles use thinner lines (reference: 5 pixels vs 12 for other polylines) - base_width = is_bev ? DEFAULT_WIDTH_POLE_BEV : DEFAULT_WIDTH_POLE_REGULAR; - } else { - float default_w = is_bev ? DEFAULT_WIDTH_POLYLINE_BEV : DEFAULT_WIDTH_POLYLINE_REGULAR; - float custom_w = is_bev ? pc.u_width_polyline_bev : pc.u_width_polyline_regular; - base_width = (custom_w > 0.0) ? custom_w : default_w; - } - return base_width * scale; -} - -// Get wireframe edge width (scaled by resolution) -float get_wireframe_width() { - float scale = (pc.u_resolution_scale > 0.0) ? pc.u_resolution_scale : 1.0; - float base_width = (pc.u_width_wireframe > 0.0) ? pc.u_width_wireframe : DEFAULT_WIDTH_WIREFRAME; - return base_width * scale; -} - -//============================================================================= -// Data Structures (must match C++ structs) -//============================================================================= - -// TimestampedPolylinePool (64 bytes) -struct TimestampedPolylinePool { - uint num_timestamps; - uint num_varrays; - uint num_vertices; - uint prim_type_id; // Index into PrimitiveStyle lookup table - uint timestamps_offset; - uint ts_varrays_ps_offset; - uint varrays_ps_offset; - uint vertices_offset; - uint aabb_offset; // Per-element AABB in float buffer (6 floats each: min xyz, max xyz) - uint _pad1, _pad2, _pad3, _pad4, _pad5, _pad6, _pad7; // Padding to 64 bytes -}; - -// TimestampedPolygonPool (64 bytes) -struct TimestampedPolygonPool { - uint num_timestamps; - uint num_varrays; - uint num_vertices; - uint num_triangles; - uint prim_type_id; // Index into PrimitiveStyle lookup table - uint timestamps_offset; - uint ts_varrays_ps_offset; - uint varrays_ps_offset; - uint tri_ps_offset; - uint vertices_offset; - uint triangles_offset; - uint aabb_offset; // Per-element AABB in float buffer (6 floats each: min xyz, max xyz) - uint _pad1, _pad2, _pad3, _pad4; // Padding to 64 bytes (16 uints) -}; - -// CubePool (64 bytes) - used for obstacles, traffic lights, traffic signs, etc. -// Renamed from ObstaclePool but keeping struct name for backward compat -struct ObstaclePool { - uint num_cubes; // Was: num_obstacles - uint num_timestamps; - uint num_track_poses; - uint prim_type_id; // Semantic type for color lookup - uint timestamps_offset; // Global timestamps for this pool - uint cube_ts_ps_offset; // Per-cube track length prefix sum (was: obstacle_ts_ps_offset) - uint track_timestamps_offset; // Per-pose timestamps in float buffer (as 2x uint for int64) - uint translations_offset; // Per-pose translations (3 floats each) - uint quaternions_offset; // Per-pose quaternions (4 floats each) - uint scales_offset; // Per-cube scales (3 floats each) - uint colors_offset; // Per-cube colors (6 floats each) - uint render_flags; // CUBE_FLAG_* bits (e.g., CUBE_FLAG_WIREFRAME) - uint _pad2, _pad3, _pad4, _pad5; // 4 padding fields for 64 bytes total -}; - -// Cube render flags -const uint CUBE_FLAG_WIREFRAME = 1u; // Draw wireframe edges in addition to solid faces - -// TimestampedScene (128 bytes) -struct TimestampedScene { - uint num_polyline_pools; - uint polyline_pools_offset; - uint num_polygon_pools; - uint polygon_pools_offset; - uint num_cube_pools; // Was: has_obstacle_pool (0/1), now supports multiple - uint cube_pools_offset; // Was: obstacle_pool_offset - uint timestamps_buffer_offset; - uint int32_buffer_offset; - uint vertex_buffer_offset; - uint triangle_buffer_offset; - uint pose_buffer_offset; - uint float_buffer_offset; - uint _pad[20]; -}; - -// RenderQuery (16 bytes) -struct RenderQuery { - uint scene_id; - uint camera_id; - int64_t timestamp_us; - uint camera_type_id; // CAMERA_TYPE_REGULAR or CAMERA_TYPE_BEV - uint _pad1, _pad2, _pad3; // Padding to 32 bytes -}; - -// FThetaCamera (72 bytes) -struct FThetaCamera { - float cx, cy; - float img_w, img_h; - float poly0, poly1, poly2, poly3, poly4, poly5; - float max_ray_angle; - float max_distortion_val; - float max_distortion_dval; - float depth_max; - float ld_c, ld_d, ld_e, ld_f; -}; - -// CameraPose (64 bytes) -struct CameraPose { - mat4 world_to_camera; -}; - -// Vertex (16 bytes) -struct Vertex { - float x, y, z; - float _pad; -}; - -//============================================================================= -// Buffer Bindings -//============================================================================= - -// Global data buffers -layout(std430, binding = 0) readonly buffer TimestampsBuffer { - int64_t g_timestamps[]; -}; - -layout(std430, binding = 1) readonly buffer Int32Buffer { - int g_int32[]; -}; - -layout(std430, binding = 2) readonly buffer VertexBuffer { - Vertex g_vertices[]; -}; - -layout(std430, binding = 3) readonly buffer TriangleBuffer { - uvec3 g_triangles[]; -}; - -layout(std430, binding = 4) readonly buffer PoseBuffer { - CameraPose g_poses[]; -}; - -layout(std430, binding = 5) readonly buffer FloatBuffer { - float g_floats[]; -}; - -// Scene metadata -layout(std430, binding = 6) readonly buffer SceneBuffer { - TimestampedScene g_scenes[]; -}; - -layout(std430, binding = 7) readonly buffer PolylinePoolBuffer { - TimestampedPolylinePool g_polyline_pools[]; -}; - -layout(std430, binding = 8) readonly buffer PolygonPoolBuffer { - TimestampedPolygonPool g_polygon_pools[]; -}; - -layout(std430, binding = 9) readonly buffer ObstaclePoolBuffer { - ObstaclePool g_obstacle_pools[]; -}; - -// Camera buffers -layout(std430, binding = 11) readonly buffer CameraIntrinsicsBuffer { - FThetaCamera g_camera_intrinsics[]; -}; - -layout(std430, binding = 12) readonly buffer CameraPoseBuffer { - CameraPose g_camera_poses[]; // One per query (dynamic viewpoints) -}; - -// Query buffer -layout(std430, binding = 13) readonly buffer QueryBuffer { - RenderQuery g_queries[]; -}; - -// Uniforms -// Spatial culling: elements beyond depth_max * scale from the camera are -// discarded in the task shader. Scale > 1 gives headroom so nothing at -// the visible boundary pops in/out. Set to 0 to disable culling. - -//============================================================================= -// GPU Binary Search -// Returns index of last element <= target, or -1 if target < all elements -//============================================================================= - -int binary_search_timestamps(uint base_offset, uint count, int64_t target) { - if (count == 0u) return -1; - - int left = 0; - int right = int(count) - 1; - int result = -1; - - while (left <= right) { - int mid = (left + right) / 2; - int64_t val = g_timestamps[base_offset + uint(mid)]; - - if (val <= target) { - result = mid; - left = mid + 1; - } else { - right = mid - 1; - } - } - - return result; -} - -//============================================================================= -// Quaternion Math for Track Interpolation -//============================================================================= - -// Quaternion dot product -float quat_dot(vec4 a, vec4 b) { - return a.x*b.x + a.y*b.y + a.z*b.z + a.w*b.w; -} - -// Quaternion normalize -vec4 quat_normalize(vec4 q) { - float len = length(q); - return len > 1e-10 ? q / len : vec4(0.0, 0.0, 0.0, 1.0); -} - -// Quaternion spherical linear interpolation (slerp) -vec4 quat_slerp(vec4 q0, vec4 q1, float t) { - // Ensure shortest path - float d = quat_dot(q0, q1); - if (d < 0.0) { - q1 = -q1; - d = -d; - } - - // If quaternions are very close, use linear interpolation - if (d > 0.9995) { - return quat_normalize(mix(q0, q1, t)); - } - - // Spherical interpolation - float theta_0 = acos(clamp(d, -1.0, 1.0)); - float theta = theta_0 * t; - float sin_theta = sin(theta); - float sin_theta_0 = sin(theta_0); - - float s0 = cos(theta) - d * sin_theta / sin_theta_0; - float s1 = sin_theta / sin_theta_0; - - return quat_normalize(s0 * q0 + s1 * q1); -} - -// Convert quaternion (x, y, z, w) to 3x3 rotation matrix -// GLSL mat3 is column-major: mat3(col0, col1, col2) -mat3 quat_to_matrix(vec4 q) { - float x = q.x, y = q.y, z = q.z, w = q.w; - - float x2 = x + x, y2 = y + y, z2 = z + z; - float xx = x * x2, xy = x * y2, xz = x * z2; - float yy = y * y2, yz = y * z2, zz = z * z2; - float wx = w * x2, wy = w * y2, wz = w * z2; - - // Column 0: (R00, R10, R20), Column 1: (R01, R11, R21), Column 2: (R02, R12, R22) - return mat3( - 1.0 - (yy + zz), xy + wz, xz - wy, // Column 0 - xy - wz, 1.0 - (xx + zz), yz + wx, // Column 1 - xz + wy, yz - wx, 1.0 - (xx + yy) // Column 2 - ); -} - -// Build 4x4 transform from translation and quaternion (with scale) -mat4 build_transform(vec3 translation, vec4 quaternion, vec3 scale) { - mat3 rot = quat_to_matrix(quaternion); - - // Apply scale to each column of rotation matrix - mat4 result = mat4( - vec4(rot[0] * scale.x, 0.0), - vec4(rot[1] * scale.y, 0.0), - vec4(rot[2] * scale.z, 0.0), - vec4(translation, 1.0) - ); - - return result; -} - -// Binary search for track interpolation (returns index where t0 <= target < t1) -// Returns -1 if target is outside the track range -int binary_search_track(uint base_offset, uint count, int64_t target) { - if (count < 2u) return -1; // Need at least 2 points for interpolation - - int64_t first_ts = g_timestamps[base_offset]; - int64_t last_ts = g_timestamps[base_offset + count - 1u]; - - // Check bounds - if (target < first_ts || target > last_ts) return -1; - - int left = 0; - int right = int(count) - 2; // Max valid index for interpolation start - int result = 0; - - while (left <= right) { - int mid = (left + right) / 2; - int64_t t0 = g_timestamps[base_offset + uint(mid)]; - int64_t t1 = g_timestamps[base_offset + uint(mid) + 1u]; - - if (t0 <= target && target <= t1) { - return mid; - } else if (target < t0) { - right = mid - 1; - } else { - left = mid + 1; - } - } - - return -1; // Should not reach here for valid input -} - -//============================================================================= -// Spatial Culling Helpers -//============================================================================= - -// AABB-AABB overlap test -bool cull_aabb_overlap(vec3 a_min, vec3 a_max, vec3 b_min, vec3 b_max) { - return all(lessThanEqual(a_min, b_max)) && all(greaterThanEqual(a_max, b_min)); -} - -// Sphere-AABB overlap test -bool cull_sphere_aabb_overlap(vec3 center, float radius, vec3 b_min, vec3 b_max) { - vec3 nearest = clamp(center, b_min, b_max); - vec3 d = center - nearest; - return dot(d, d) <= radius * radius; -} - -// Extract camera world position from view pose -vec3 get_camera_world_pos(CameraPose pose) { - mat3 R = mat3(pose.world_to_camera); - return -transpose(R) * pose.world_to_camera[3].xyz; -} - -//============================================================================= -// F-theta Projection -//============================================================================= - -vec3 rotate_rodrigues(vec3 v, vec3 r) { - float theta = length(r); - if (theta < 1e-8) return v; - vec3 k = r / theta; - float c = cos(theta); - float s = sin(theta); - return v * c + cross(k, v) * s + k * dot(k, v) * (1.0 - c); -} - -// F-theta projection: world point -> NDC -// Supports >180° FOV fisheye cameras where points can have negative z (behind camera plane) -vec4 ftheta_project(vec3 world_pos, CameraPose pose, FThetaCamera cam) { - vec3 cam_pt = (pose.world_to_camera * vec4(world_pos, 1.0)).xyz; - float depth = cam_pt.z; - - float ray_norm = length(cam_pt); - - // Handle points at camera origin - if (ray_norm < 1e-6) { - return vec4(0.0, 0.0, 0.0, 1.0); - } - - float half_pi = 1.5707963; // π/2 - - // For cameras with FOV <= 180° (max_ray_angle <= π/2), points behind camera should be clipped - // Use pseudo-pinhole projection to push them far away in the correct direction - if (cam.max_ray_angle <= half_pi && depth < 0.001) { - float pseudo_focal = cam.poly1; - float x_clip = cam_pt.x * pseudo_focal / (cam.img_w * 0.5); - float y_clip = -cam_pt.y * pseudo_focal / (cam.img_h * 0.5); - return vec4(x_clip * 10.0, y_clip * 10.0, 1.0, 1.0); // Scale by 10 to push far outside - } - - float xy_norm = length(cam_pt.xy); - float cos_alpha = clamp(cam_pt.z / ray_norm, -1.0, 1.0); - float alpha = acos(cos_alpha); // alpha in [0, π] - - // Apply polynomial projection (with linear extrapolation beyond max_ray_angle) - float a2 = alpha * alpha; - float a3 = a2 * alpha; - float a4 = a2 * a2; - float a5 = a4 * alpha; - - float delta = cam.poly0 + cam.poly1 * alpha + cam.poly2 * a2 + - cam.poly3 * a3 + cam.poly4 * a4 + cam.poly5 * a5; - if (alpha > cam.max_ray_angle) { - delta = cam.max_distortion_val + (alpha - cam.max_ray_angle) * cam.max_distortion_dval; - } - - float scale = (xy_norm > 1e-6) ? (delta / xy_norm) : 0.0; - vec2 pixel_rel = scale * cam_pt.xy; - - vec2 pixel_dist; - pixel_dist.x = cam.ld_c * pixel_rel.x + cam.ld_d * pixel_rel.y; - pixel_dist.y = cam.ld_e * pixel_rel.x + cam.ld_f * pixel_rel.y; - - vec2 pixel = pixel_dist + vec2(cam.cx, cam.cy); - - float x_ndc = 2.0 * pixel.x / cam.img_w - 1.0; - float y_ndc = 1.0 - 2.0 * pixel.y / cam.img_h; - - // For z-buffer depth mapping: - // - Narrow FOV (<=180°): use signed depth (cam_pt.z) - // - Wide FOV (>180°): use ray_norm for front-camera vertices (unchanged), - // but push behind-camera vertices to depth_max so they never occlude - // forward geometry. ray_norm alone can't distinguish front from behind. - float z_value; - if (cam.max_ray_angle > half_pi) { - z_value = (depth >= 0.0) ? ray_norm : cam.depth_max; - } else { - z_value = depth; - } - float z_ndc = clamp(z_value / cam.depth_max, 0.0, 1.0); - - return vec4(x_ndc, y_ndc, z_ndc, 1.0); -} - -// Inline version that takes mat4 directly -float estimate_edge_distortion_pixels_mat4(vec3 v0, vec3 v1, mat4 world_to_cam, FThetaCamera cam) { - // Transform to camera space - vec3 cam_pt0 = (world_to_cam * vec4(v0, 1.0)).xyz; - vec3 cam_pt1 = (world_to_cam * vec4(v1, 1.0)).xyz; - vec3 mid_world = (v0 + v1) * 0.5; - vec3 cam_pt_mid = (world_to_cam * vec4(mid_world, 1.0)).xyz; - - // Just clamp depths to avoid division issues - - // For segments in front of camera, compute f-theta projection error directly - // Use depth-clamped projection to handle near-plane cases - float depth0 = max(cam_pt0.z, 0.001); - float depth1 = max(cam_pt1.z, 0.001); - float depth_mid = max(cam_pt_mid.z, 0.001); - - // Compute f-theta projection for each point - // We inline the projection to avoid struct-passing issues - vec2 pixel0, pixel1, pixel_mid; - { - float xy_norm = length(cam_pt0.xy); - float ray_norm = length(vec3(cam_pt0.xy, depth0)) + 1e-10; - float cos_alpha = clamp(depth0 / ray_norm, -1.0, 1.0); - float alpha = acos(cos_alpha); - float a2 = alpha * alpha; - float delta = cam.poly0 + cam.poly1 * alpha + cam.poly2 * a2 + - cam.poly3 * (a2 * alpha) + cam.poly4 * (a2 * a2) + cam.poly5 * (a2 * a2 * alpha); - if (alpha > cam.max_ray_angle) { - delta = cam.max_distortion_val + (alpha - cam.max_ray_angle) * cam.max_distortion_dval; - } - float scale = (xy_norm > 1e-6) ? (delta / xy_norm) : 0.0; - vec2 pixel_rel = scale * cam_pt0.xy; - vec2 pixel_dist = vec2(cam.ld_c * pixel_rel.x + cam.ld_d * pixel_rel.y, - cam.ld_e * pixel_rel.x + cam.ld_f * pixel_rel.y); - pixel0 = pixel_dist + vec2(cam.cx, cam.cy); - } - { - float xy_norm = length(cam_pt1.xy); - float ray_norm = length(vec3(cam_pt1.xy, depth1)) + 1e-10; - float cos_alpha = clamp(depth1 / ray_norm, -1.0, 1.0); - float alpha = acos(cos_alpha); - float a2 = alpha * alpha; - float delta = cam.poly0 + cam.poly1 * alpha + cam.poly2 * a2 + - cam.poly3 * (a2 * alpha) + cam.poly4 * (a2 * a2) + cam.poly5 * (a2 * a2 * alpha); - if (alpha > cam.max_ray_angle) { - delta = cam.max_distortion_val + (alpha - cam.max_ray_angle) * cam.max_distortion_dval; - } - float scale = (xy_norm > 1e-6) ? (delta / xy_norm) : 0.0; - vec2 pixel_rel = scale * cam_pt1.xy; - vec2 pixel_dist = vec2(cam.ld_c * pixel_rel.x + cam.ld_d * pixel_rel.y, - cam.ld_e * pixel_rel.x + cam.ld_f * pixel_rel.y); - pixel1 = pixel_dist + vec2(cam.cx, cam.cy); - } - { - float xy_norm = length(cam_pt_mid.xy); - float ray_norm = length(vec3(cam_pt_mid.xy, depth_mid)) + 1e-10; - float cos_alpha = clamp(depth_mid / ray_norm, -1.0, 1.0); - float alpha = acos(cos_alpha); - float a2 = alpha * alpha; - float delta = cam.poly0 + cam.poly1 * alpha + cam.poly2 * a2 + - cam.poly3 * (a2 * alpha) + cam.poly4 * (a2 * a2) + cam.poly5 * (a2 * a2 * alpha); - if (alpha > cam.max_ray_angle) { - delta = cam.max_distortion_val + (alpha - cam.max_ray_angle) * cam.max_distortion_dval; - } - float scale = (xy_norm > 1e-6) ? (delta / xy_norm) : 0.0; - vec2 pixel_rel = scale * cam_pt_mid.xy; - vec2 pixel_dist = vec2(cam.ld_c * pixel_rel.x + cam.ld_d * pixel_rel.y, - cam.ld_e * pixel_rel.x + cam.ld_f * pixel_rel.y); - pixel_mid = pixel_dist + vec2(cam.cx, cam.cy); - } - - // Compute error: distance from projected midpoint to linear interpolation - vec2 linear_pixel_mid = (pixel0 + pixel1) * 0.5; - float error_pixels = length(pixel_mid - linear_pixel_mid); - - // Clamp to reasonable range to handle edge cases - return clamp(error_pixels, 0.0, 10000.0); -} - -uint compute_subdivision_level(vec3 v0, vec3 v1, CameraPose pose, FThetaCamera cam, float threshold_pixels) { - float error = estimate_edge_distortion_pixels_mat4(v0, v1, pose.world_to_camera, cam); - - if (error < threshold_pixels) return 0u; - if (error < threshold_pixels * 2.0) return 1u; - if (error < threshold_pixels * 4.0) return 2u; - return 3u; -} - -//============================================================================= -// Barycentric Subdivision Utilities (shared with polygon/cube) -//============================================================================= - -uint bary_vertex_count(uint level) { - // Vertices = (n+1)(n+2)/2 where n = 2^level - if (level == 0u) return 3u; - if (level == 1u) return 6u; - if (level == 2u) return 15u; - return 45u; // level 3 -} - -uint bary_triangle_count(uint level) { - // Triangles = 4^level - if (level == 0u) return 1u; - if (level == 1u) return 4u; - if (level == 2u) return 16u; - return 64u; // level 3 -} - -vec2 bary_vertex_uv(uint vertex_idx, uint level) { - if (level == 0u) { - if (vertex_idx == 0u) return vec2(0.0, 0.0); - if (vertex_idx == 1u) return vec2(1.0, 0.0); - return vec2(0.0, 1.0); - } else if (level == 1u) { - vec2 uvs[6]; - uvs[0] = vec2(0.0, 0.0); - uvs[1] = vec2(1.0, 0.0); - uvs[2] = vec2(0.0, 1.0); - uvs[3] = vec2(0.5, 0.0); - uvs[4] = vec2(0.5, 0.5); - uvs[5] = vec2(0.0, 0.5); - return uvs[vertex_idx]; - } else if (level == 2u) { - uint row, col; - if (vertex_idx < 5u) { row = 0u; col = vertex_idx; } - else if (vertex_idx < 9u) { row = 1u; col = vertex_idx - 5u; } - else if (vertex_idx < 12u) { row = 2u; col = vertex_idx - 9u; } - else if (vertex_idx < 14u) { row = 3u; col = vertex_idx - 12u; } - else { row = 4u; col = 0u; } - return vec2(float(col) / 4.0, float(row) / 4.0); - } else { - // Level 3: 9 rows (0-8), row r has (9-r) vertices - uint row, col; - if (vertex_idx < 9u) { row = 0u; col = vertex_idx; } - else if (vertex_idx < 17u) { row = 1u; col = vertex_idx - 9u; } - else if (vertex_idx < 24u) { row = 2u; col = vertex_idx - 17u; } - else if (vertex_idx < 30u) { row = 3u; col = vertex_idx - 24u; } - else if (vertex_idx < 35u) { row = 4u; col = vertex_idx - 30u; } - else if (vertex_idx < 39u) { row = 5u; col = vertex_idx - 35u; } - else if (vertex_idx < 42u) { row = 6u; col = vertex_idx - 39u; } - else if (vertex_idx < 44u) { row = 7u; col = vertex_idx - 42u; } - else { row = 8u; col = 0u; } - return vec2(float(col) / 8.0, float(row) / 8.0); - } -} - -vec3 bary_interpolate(vec3 v0, vec3 v1, vec3 v2, vec2 uv) { - float w = 1.0 - uv.x - uv.y; - return v0 * w + v1 * uv.x + v2 * uv.y; -} - -uvec3 bary_triangle_indices(uint tri_idx, uint level) { - if (level == 0u) { - return uvec3(0u, 1u, 2u); - } else if (level == 1u) { - uvec3 tris[4]; - tris[0] = uvec3(0u, 3u, 5u); - tris[1] = uvec3(3u, 1u, 4u); - tris[2] = uvec3(5u, 4u, 2u); - tris[3] = uvec3(3u, 4u, 5u); - return tris[tri_idx]; - } else if (level == 2u) { - uint row_start[5] = uint[5](0u, 5u, 9u, 12u, 14u); - uint t = tri_idx; - uint row = 0u, col = 0u; - bool is_down = false; - - if (t < 7u) { - row = 0u; - if (t < 4u) { col = t; is_down = false; } - else { col = t - 4u; is_down = true; } - } else if (t < 12u) { - row = 1u; - uint lt = t - 7u; - if (lt < 3u) { col = lt; is_down = false; } - else { col = lt - 3u; is_down = true; } - } else if (t < 15u) { - row = 2u; - uint lt = t - 12u; - if (lt < 2u) { col = lt; is_down = false; } - else { col = lt - 2u; is_down = true; } - } else { - row = 3u; col = 0u; is_down = false; - } - - uint i0, i1, i2; - if (!is_down) { - i0 = row_start[row] + col; - i1 = row_start[row] + col + 1u; - i2 = row_start[row + 1u] + col; - } else { - i0 = row_start[row] + col + 1u; - i1 = row_start[row + 1u] + col + 1u; - i2 = row_start[row + 1u] + col; - } - return uvec3(i0, i1, i2); - } else { - // Level 3: row_start for 9 rows - uint row_start[9] = uint[9](0u, 9u, 17u, 24u, 30u, 35u, 39u, 42u, 44u); - uint t = tri_idx; - uint row = 0u, col = 0u; - bool is_down = false; - - // Row 0: 8 up + 7 down = 15, Row 1: 7 up + 6 down = 13, etc. - if (t < 15u) { - row = 0u; - if (t < 8u) { col = t; is_down = false; } - else { col = t - 8u; is_down = true; } - } else if (t < 28u) { - row = 1u; uint lt = t - 15u; - if (lt < 7u) { col = lt; is_down = false; } - else { col = lt - 7u; is_down = true; } - } else if (t < 39u) { - row = 2u; uint lt = t - 28u; - if (lt < 6u) { col = lt; is_down = false; } - else { col = lt - 6u; is_down = true; } - } else if (t < 48u) { - row = 3u; uint lt = t - 39u; - if (lt < 5u) { col = lt; is_down = false; } - else { col = lt - 5u; is_down = true; } - } else if (t < 55u) { - row = 4u; uint lt = t - 48u; - if (lt < 4u) { col = lt; is_down = false; } - else { col = lt - 4u; is_down = true; } - } else if (t < 60u) { - row = 5u; uint lt = t - 55u; - if (lt < 3u) { col = lt; is_down = false; } - else { col = lt - 3u; is_down = true; } - } else if (t < 63u) { - row = 6u; uint lt = t - 60u; - if (lt < 2u) { col = lt; is_down = false; } - else { col = lt - 2u; is_down = true; } - } else { - row = 7u; col = 0u; is_down = false; - } - - uint i0, i1, i2; - if (!is_down) { - i0 = row_start[row] + col; - i1 = row_start[row] + col + 1u; - i2 = row_start[row + 1u] + col; - } else { - i0 = row_start[row] + col + 1u; - i1 = row_start[row + 1u] + col + 1u; - i2 = row_start[row + 1u] + col; - } - return uvec3(i0, i1, i2); - } -} - - -layout(local_size_x = 32) in; -layout(triangles, max_vertices = 128, max_primitives = 126) out; - -// Task payload from task shader -struct PolylineTaskPayload { - uint query_id; - uint pool_id; - uint varray_idx; - uint total_points; - float width; - vec3 color; - uint cap_style; - float is_bev; -}; -taskPayloadSharedEXT PolylineTaskPayload payload; - -out gl_MeshPerVertexNV { - vec4 gl_Position; -} gl_MeshVerticesEXT[]; - -perprimitiveEXT out gl_MeshPerPrimitiveNV { - int gl_Layer; -} gl_MeshPrimitivesEXT[]; - -// Per-primitive color in a named block with explicit location -layout(location = 0) perprimitiveEXT out PrimColorBlock { - vec3 color; - float is_bev; // 1.0 for BEV cameras (disables fog), 0.0 otherwise -} prim_out[]; - -// Shared memory for subdivided projected points -// With 128 max vertices, we can have up to 64 effective points (2 verts each) -// Reserve indices 62, 63 for overlap vertices -shared vec4 s_clip_pos[64]; -shared vec2 s_screen_pos[64]; -shared vec3 s_world_pos[64]; - -// Shared memory indices for special values -const uint OVERLAP_BEFORE_IDX = 62u; // Overlap vertex before chunk -const uint OVERLAP_AFTER_IDX = 63u; // Overlap vertex after chunk -const uint COUNTER_IDX = 61u; // Counter and flags storage - -void main() { - uint _prim_count = 0u; - // Get chunk ID from mesh workgroup index - uint chunk_id = gl_WorkGroupID.x; - uint tid = gl_LocalInvocationID.x; - - // Read from task payload - uint total_pts = payload.total_points; - - // Load scene and pool info - RenderQuery query = g_queries[payload.query_id]; - TimestampedScene scene = g_scenes[query.scene_id]; - TimestampedPolylinePool pool = g_polyline_pools[scene.polyline_pools_offset + payload.pool_id]; - FThetaCamera cam = g_camera_intrinsics[query.camera_id]; - CameraPose pose = g_camera_poses[payload.query_id]; - uint cap_style_local = payload.cap_style; - - // Handle dot primitives - render each vertex as a circle - if (is_dot_primitive(pool.prim_type_id)) { - // Dot mode: each vertex is a separate circle - const uint DOTS_PER_CHUNK = 7u; - uint dot_start = chunk_id * DOTS_PER_CHUNK; - uint dot_end = min(dot_start + DOTS_PER_CHUNK, total_pts); - uint num_dots = dot_end - dot_start; - - if (num_dots == 0u) { - _prim_count = 0u; SetMeshOutputsEXT(0u, _prim_count); - return; - } - - // Get vertex base for this polyline - uint v_start_base = 0u; - if (payload.varray_idx > 0u) { - v_start_base = uint(g_int32[scene.int32_buffer_offset + pool.varrays_ps_offset + payload.varray_idx - 1u]); - } - uint base_v_idx = scene.vertex_buffer_offset + pool.vertices_offset + v_start_base; - - // Dot radius = same as regular line half-width - float half_width = payload.width * 0.5; - - // Each dot: 9 vertices (center + 8 ring), 8 triangles - uint total_verts = num_dots * 9u; - uint total_tris = num_dots * 8u; - - _prim_count = total_tris; SetMeshOutputsEXT(total_verts, _prim_count); - - // Generate dots (only thread 0 for simplicity, could parallelize) - if (tid == 0u) { - for (uint d = 0u; d < num_dots; d++) { - uint global_dot = dot_start + d; - uint vi = base_v_idx + global_dot; - Vertex vx = g_vertices[vi]; - vec3 world_pos = vec3(vx.x, vx.y, vx.z); - - // Project center - vec4 center_clip = ftheta_project(world_pos, pose, cam); - float w = center_clip.w; - if (abs(w) < 1e-6) w = 1e-6; - vec2 center_screen = vec2( - (center_clip.x / w * 0.5 + 0.5) * cam.img_w, - (0.5 - center_clip.y / w * 0.5) * cam.img_h - ); - - // Emit center vertex - uint base_vert = d * 9u; - gl_MeshVerticesEXT[base_vert].gl_Position = center_clip; - - // Apply depth-based radius scaling for dots - float dot_depth_scale = get_depth_scale(center_clip); - float scaled_half_width = half_width * dot_depth_scale; - - // Emit 8 ring vertices (octagon for circle approximation) - for (uint i = 0u; i < 8u; i++) { - float angle = float(i) * 0.785398; // 2*PI/8 - vec2 offset = vec2(cos(angle), sin(angle)) * scaled_half_width; - vec2 ring_screen = center_screen + offset; - - // Convert back to clip space - vec4 ring_clip; - ring_clip.x = ((ring_screen.x / cam.img_w) * 2.0 - 1.0) * w; - ring_clip.y = ((0.5 - ring_screen.y / cam.img_h) * 2.0) * w; - ring_clip.z = center_clip.z; - ring_clip.w = w; - - gl_MeshVerticesEXT[base_vert + 1u + i].gl_Position = ring_clip; - } - - // Emit 8 triangles (center -> ring[i] -> ring[i+1]) - uint base_tri = d * 8u; - for (uint i = 0u; i < 8u; i++) { - uint next_i = (i + 1u) % 8u; - gl_PrimitiveTriangleIndicesEXT[base_tri + i] = uvec3(base_vert, base_vert + 1u + i, base_vert + 1u + next_i); - gl_MeshPrimitivesEXT[base_tri + i].gl_Layer = int(payload.query_id); - prim_out[base_tri + i].color = payload.color; - prim_out[base_tri + i].is_bev = payload.is_bev; - } - } - } - return; - } - - // Regular polyline mode - // Calculate chunk range in original segment space - // 4 segments per chunk with overlap vertices for seamless miter joins (matching task shader) - const uint MAX_SEGMENTS_PER_CHUNK = 3u; - uint num_segments = total_pts - 1u; - uint seg_start = chunk_id * MAX_SEGMENTS_PER_CHUNK; - uint seg_end = min(seg_start + MAX_SEGMENTS_PER_CHUNK, num_segments); - uint num_segs_in_chunk = seg_end - seg_start; - - bool is_first_chunk = (chunk_id == 0u); - bool is_last_chunk = (seg_end >= num_segments); - - if (num_segs_in_chunk == 0u) { - _prim_count = 0u; SetMeshOutputsEXT(0u, _prim_count); - return; - } - - float half_width = payload.width * 0.5; - - // Get vertex start for this polyline - uint v_start = 0u; - if (payload.varray_idx > 0u) { - v_start = uint(g_int32[scene.int32_buffer_offset + pool.varrays_ps_offset + payload.varray_idx - 1u]); - } - uint base_v_idx = scene.vertex_buffer_offset + pool.vertices_offset + v_start; - - // Phase 1: Compute subdivision per segment and generate subdivided points - // Also load overlap vertices for chunk boundary miter calculation - uint eff_point_count = 0u; - bool has_overlap_before = false; - bool has_overlap_after = false; - - if (tid == 0u) { - // Load overlap vertex BEFORE this chunk (for first point miter) - if (!is_first_chunk && seg_start > 0u) { - uint vi_before = base_v_idx + seg_start - 1u; - Vertex vx_before = g_vertices[vi_before]; - s_world_pos[OVERLAP_BEFORE_IDX] = vec3(vx_before.x, vx_before.y, vx_before.z); - has_overlap_before = true; - } - - // Load overlap vertex AFTER this chunk (for last point miter) - if (!is_last_chunk && seg_end < num_segments) { - uint vi_after = base_v_idx + seg_end + 1u; - Vertex vx_after = g_vertices[vi_after]; - s_world_pos[OVERLAP_AFTER_IDX] = vec3(vx_after.x, vx_after.y, vx_after.z); - has_overlap_after = true; - } - - // Generate body points for this chunk's segments - for (uint seg_idx = 0u; seg_idx < num_segs_in_chunk; seg_idx++) { - uint global_seg = seg_start + seg_idx; - uint vi0 = base_v_idx + global_seg; - uint vi1 = base_v_idx + global_seg + 1u; - Vertex vx0 = g_vertices[vi0]; - Vertex vx1 = g_vertices[vi1]; - vec3 p0 = vec3(vx0.x, vx0.y, vx0.z); - vec3 p1 = vec3(vx1.x, vx1.y, vx1.z); - - // Compute distortion error for this segment - float error = estimate_edge_distortion_pixels_mat4(p0, p1, pose.world_to_camera, cam); - - // Determine subdivision level based on error threshold - // Max level 4 = 16 subsegments, 3 segs * 16 = 48 subsegments = 49 points - uint subdiv_level = 0u; - float tess_thresh = pc.u_tessellation_threshold; - if (tess_thresh > 0.0 && error > tess_thresh) subdiv_level = 1u; - if (tess_thresh > 0.0 && error > tess_thresh * 4.0) subdiv_level = 2u; - if (tess_thresh > 0.0 && error > tess_thresh * 16.0) subdiv_level = 3u; - if (tess_thresh > 0.0 && error > tess_thresh * 64.0) subdiv_level = 4u; - subdiv_level = min(subdiv_level, pc.u_max_tessellation_polyline); - - uint num_subsegments = 1u << subdiv_level; - - // First point: only if this is the first segment in chunk - if (seg_idx == 0u) { - s_world_pos[eff_point_count] = p0; - eff_point_count++; - } - - // Interior and end points - for (uint sub_i = 1u; sub_i <= num_subsegments; sub_i++) { - float t = float(sub_i) / float(num_subsegments); - vec3 world_pos = mix(p0, p1, t); - s_world_pos[eff_point_count] = world_pos; - eff_point_count++; - - if (eff_point_count >= 50u) break; // 49 segments max = 98 verts + caps < 128 - } - - if (eff_point_count >= 50u) break; - } - - // Store counts and flags via shared memory at COUNTER_IDX - s_clip_pos[COUNTER_IDX].x = float(eff_point_count); - s_clip_pos[COUNTER_IDX].y = has_overlap_before ? 1.0 : 0.0; - s_clip_pos[COUNTER_IDX].z = has_overlap_after ? 1.0 : 0.0; - } - - barrier(); - - uint num_eff_points = uint(s_clip_pos[COUNTER_IDX].x); - bool use_overlap_before = (s_clip_pos[COUNTER_IDX].y > 0.5); - bool use_overlap_after = (s_clip_pos[COUNTER_IDX].z > 0.5); - - // 128 verts / 2 verts per point = 64 points max, minus caps = ~60 points - // Use 50 for safety margin with overlap vertices - num_eff_points = min(num_eff_points, 50u); - - if (num_eff_points < 2u) { - _prim_count = 0u; SetMeshOutputsEXT(0u, _prim_count); - return; - } - - // Phase 2: Project all points - pass raw values to GPU, no clamping - // Loop to handle more points than threads (33 points, 32 threads) - for (uint pt = tid; pt < num_eff_points; pt += 32u) { - vec3 world_pos = s_world_pos[pt]; - vec4 clip = ftheta_project(world_pos, pose, cam); - s_clip_pos[pt] = clip; - - // Screen position for direction calculation - float w = clip.w; - if (abs(w) < 1e-6) w = 1e-6; // Only prevent division by zero - s_screen_pos[pt] = vec2( - (clip.x / w * 0.5 + 0.5) * cam.img_w, - (0.5 - clip.y / w * 0.5) * cam.img_h - ); - } - - barrier(); - - // SHARED MITER VERTICES: 2 vertices per point (left, right) - // Segment i uses vertices from points i and i+1 (shared at joints) - // No joint triangles needed since vertices are shared - uint num_eff_segs = num_eff_points - 1u; - - // Caps: 4-triangle semicircles for round line ends and to hide chunk seams - // Each cap: 4 new vertices (center + 3 arc points), 4 triangles - // Draw caps at ALL chunk boundaries to hide gaps between chunks - bool draw_start_cap = true; // Always draw start cap (for polyline start or chunk seam) - bool draw_end_cap = true; // Always draw end cap (for polyline end or chunk seam) - uint num_cap_verts = (draw_start_cap ? 4u : 0u) + (draw_end_cap ? 4u : 0u); - uint num_cap_tris = (draw_start_cap ? 4u : 0u) + (draw_end_cap ? 4u : 0u); - - // Vertex layout: - // [0, 2*num_eff_points-1]: point vertices (left, right per point) - // [2*num_eff_points, ...]: cap vertices (if any) - uint point_verts_end = num_eff_points * 2u; - uint start_cap_base = point_verts_end; // center, arc1, arc2, arc3 - uint end_cap_base = start_cap_base + (draw_start_cap ? 4u : 0u); - - uint num_verts = point_verts_end + num_cap_verts; - uint num_tris = num_eff_segs * 2u + num_cap_tris; - - // With 3 segs × level 4 = 49 points = 48 segs × 2 + 8 caps = 104 tris max - _prim_count = min(num_tris, 120u); SetMeshOutputsEXT(num_verts, _prim_count); - - // Phase 3: Generate point vertices (2 per point) WITH MITER JOINS - // Point i: vertices [2*i, 2*i+1] = [left, right] - // Vertices are shared between adjacent segments - // Loop to handle more points than threads - for (uint pt = tid; pt < num_eff_points; pt += 32u) { - vec4 clip = s_clip_pos[pt]; - vec2 screen = s_screen_pos[pt]; - - // For miter direction calculation, we need stable screen positions - // If an adjacent point has bad w (off-screen), use binary search to find - // a closer point with good w for direction calculation - float w_min = 1.0; - - // Get directions to adjacent points for miter calculation in SCREEN SPACE - vec2 dir_prev = vec2(0.0); - vec2 dir_next = vec2(0.0); - bool has_prev = (pt > 0u); - bool has_next = (pt < num_eff_points - 1u); - - vec2 screen_for_dir = screen; - vec4 clip_curr = clip; - - // If current point has bad w, clamp it for direction calculation - if (clip_curr.w < w_min && pt > 0u && s_clip_pos[pt - 1u].w >= w_min) { - // Binary search toward prev point to find good w - vec3 good = s_world_pos[pt - 1u]; - vec3 bad = s_world_pos[pt]; - for (int iter = 0; iter < 5; iter++) { - vec3 mid = (good + bad) * 0.5; - vec4 mid_clip = ftheta_project(mid, pose, cam); - if (mid_clip.w >= w_min) good = mid; else bad = mid; - } - vec4 clamped = ftheta_project(good, pose, cam); - float w_c = max(clamped.w, 0.001); - screen_for_dir = vec2((clamped.x / w_c * 0.5 + 0.5) * cam.img_w, - (0.5 - clamped.y / w_c * 0.5) * cam.img_h); - } else if (clip_curr.w < w_min && pt < num_eff_points - 1u && s_clip_pos[pt + 1u].w >= w_min) { - // Binary search toward next point - vec3 good = s_world_pos[pt + 1u]; - vec3 bad = s_world_pos[pt]; - for (int iter = 0; iter < 5; iter++) { - vec3 mid = (good + bad) * 0.5; - vec4 mid_clip = ftheta_project(mid, pose, cam); - if (mid_clip.w >= w_min) good = mid; else bad = mid; - } - vec4 clamped = ftheta_project(good, pose, cam); - float w_c = max(clamped.w, 0.001); - screen_for_dir = vec2((clamped.x / w_c * 0.5 + 0.5) * cam.img_w, - (0.5 - clamped.y / w_c * 0.5) * cam.img_h); - } - - if (has_prev) { - vec2 screen_prev = s_screen_pos[pt - 1u]; - // If prev point has bad w, use clamped position for direction - if (s_clip_pos[pt - 1u].w < w_min && clip_curr.w >= w_min) { - vec3 good = s_world_pos[pt]; - vec3 bad = s_world_pos[pt - 1u]; - for (int iter = 0; iter < 5; iter++) { - vec3 mid = (good + bad) * 0.5; - vec4 mid_clip = ftheta_project(mid, pose, cam); - if (mid_clip.w >= w_min) good = mid; else bad = mid; - } - vec4 clamped = ftheta_project(good, pose, cam); - float w_c = max(clamped.w, 0.001); - screen_prev = vec2((clamped.x / w_c * 0.5 + 0.5) * cam.img_w, - (0.5 - clamped.y / w_c * 0.5) * cam.img_h); - } - vec2 d = screen_for_dir - screen_prev; - float len = length(d); - if (len > 0.001) dir_prev = d / len; - } - if (has_next) { - vec2 screen_next = s_screen_pos[pt + 1u]; - // If next point has bad w, use clamped position for direction - if (s_clip_pos[pt + 1u].w < w_min && clip_curr.w >= w_min) { - vec3 good = s_world_pos[pt]; - vec3 bad = s_world_pos[pt + 1u]; - for (int iter = 0; iter < 5; iter++) { - vec3 mid = (good + bad) * 0.5; - vec4 mid_clip = ftheta_project(mid, pose, cam); - if (mid_clip.w >= w_min) good = mid; else bad = mid; - } - vec4 clamped = ftheta_project(good, pose, cam); - float w_c = max(clamped.w, 0.001); - screen_next = vec2((clamped.x / w_c * 0.5 + 0.5) * cam.img_w, - (0.5 - clamped.y / w_c * 0.5) * cam.img_h); - } - vec2 d = screen_next - screen_for_dir; - float len = length(d); - if (len > 0.001) dir_next = d / len; - } - - // Compute miter direction and scale in screen space - vec2 miter; - float miter_scale = 1.0; - - if (has_prev && has_next && length(dir_prev) > 0.001 && length(dir_next) > 0.001) { - // Interior point: average perpendiculars - vec2 perp_prev = vec2(-dir_prev.y, dir_prev.x); - vec2 perp_next = vec2(-dir_next.y, dir_next.x); - vec2 miter_sum = perp_prev + perp_next; - float miter_len = length(miter_sum); - if (miter_len > 0.001) { - miter = miter_sum / miter_len; - float cos_half = dot(miter, perp_next); - miter_scale = (cos_half > 0.5) ? (1.0 / cos_half) : 2.0; - } else { - // Nearly 180° turn, use either perpendicular - miter = perp_next; - } - } else if (has_next && length(dir_next) > 0.001) { - // First point: use next segment's perpendicular - miter = vec2(-dir_next.y, dir_next.x); - } else if (has_prev && length(dir_prev) > 0.001) { - // Last point: use prev segment's perpendicular - miter = vec2(-dir_prev.y, dir_prev.x); - } else { - // Degenerate case - miter = vec2(1.0, 0.0); - } - - // Compute offset: screen-space miter direction, scaled to clip space - // Apply distance-based width scaling (thinner lines in distance) - float depth_scale = get_depth_scale(clip); - float scaled_half_width = half_width * depth_scale; - - float off_x = miter.x * scaled_half_width * miter_scale * 2.0 / cam.img_w * clip.w; - float off_y = -miter.y * scaled_half_width * miter_scale * 2.0 / cam.img_h * clip.w; - - uint base = pt * 2u; - gl_MeshVerticesEXT[base].gl_Position = vec4(clip.x - off_x, clip.y - off_y, clip.z, clip.w); - gl_MeshVerticesEXT[base + 1u].gl_Position = vec4(clip.x + off_x, clip.y + off_y, clip.z, clip.w); - } - - // Generate cap vertices (first thread only) - // Cap is a 4-triangle semicircle fan from center through arc points - // Arc goes from right edge, around the back, to left edge - if (tid == 0u) { - // Start cap: at first point, semicircle facing backward (opposite to line direction) - if (draw_start_cap && num_eff_points >= 2u) { - vec4 clip0 = s_clip_pos[0u]; - vec2 screen0 = s_screen_pos[0u]; - vec2 screen1 = s_screen_pos[1u]; - - // Line direction and perpendicular - vec2 line_dir = normalize(screen1 - screen0); - vec2 perp = vec2(-line_dir.y, line_dir.x); - - // Cap center is at the first point (no offset) - gl_MeshVerticesEXT[start_cap_base].gl_Position = clip0; - - // Arc points at 45°, 90°, 135° from right to left (going backward) - // right = +perp, backward = -line_dir, left = -perp - // 45°: mix of +perp and -line_dir - // 90°: pure -line_dir - // 135°: mix of -perp and -line_dir - float angles[3] = float[3](0.7854, 1.5708, 2.3562); // 45°, 90°, 135° in radians - - // Apply depth-based width scaling for cap - float cap0_depth_scale = get_depth_scale(clip0); - float cap0_scaled_half_width = half_width * cap0_depth_scale; - - for (int i = 0; i < 3; i++) { - float a = angles[i]; - // Direction: rotate from +perp toward -line_dir - vec2 arc_dir = cos(a) * perp + sin(a) * (-line_dir); - - float arc_off_x = arc_dir.x * cap0_scaled_half_width * 2.0 / cam.img_w * clip0.w; - float arc_off_y = -arc_dir.y * cap0_scaled_half_width * 2.0 / cam.img_h * clip0.w; - - gl_MeshVerticesEXT[start_cap_base + 1u + uint(i)].gl_Position = - vec4(clip0.x + arc_off_x, clip0.y + arc_off_y, clip0.z, clip0.w); - } - } - - // End cap: at last point, semicircle facing forward (in line direction) - if (draw_end_cap && num_eff_points >= 2u) { - uint last_pt = num_eff_points - 1u; - vec4 clipN = s_clip_pos[last_pt]; - vec2 screenN = s_screen_pos[last_pt]; - vec2 screenN1 = s_screen_pos[last_pt - 1u]; - - // Line direction (from second-to-last toward last) - vec2 line_dir = normalize(screenN - screenN1); - vec2 perp = vec2(-line_dir.y, line_dir.x); - - // Cap center is at the last point - gl_MeshVerticesEXT[end_cap_base].gl_Position = clipN; - - // Arc points at 45°, 90°, 135° from left to right (going forward) - // left = -perp, forward = +line_dir, right = +perp - float angles[3] = float[3](0.7854, 1.5708, 2.3562); - - // Apply depth-based width scaling for cap - float capN_depth_scale = get_depth_scale(clipN); - float capN_scaled_half_width = half_width * capN_depth_scale; - - for (int i = 0; i < 3; i++) { - float a = angles[i]; - // Direction: rotate from -perp toward +line_dir - vec2 arc_dir = cos(a) * (-perp) + sin(a) * line_dir; - - float arc_off_x = arc_dir.x * capN_scaled_half_width * 2.0 / cam.img_w * clipN.w; - float arc_off_y = -arc_dir.y * capN_scaled_half_width * 2.0 / cam.img_h * clipN.w; - - gl_MeshVerticesEXT[end_cap_base + 1u + uint(i)].gl_Position = - vec4(clipN.x + arc_off_x, clipN.y + arc_off_y, clipN.z, clipN.w); - } - } - } - - // Phase 4: Set triangle indices (first thread only) - // SHARED VERTICES: segment i uses vertices from point i and point i+1 - // Point i: vertices [2*i, 2*i+1] = [left, right] - if (tid == 0u) { - uint tri_idx = 0u; - - // Segment triangles: each segment uses 4 vertices from 2 adjacent points - // Segment i (points i, i+1): left0=2*i, right0=2*i+1, left1=2*(i+1), right1=2*(i+1)+1 - for (uint seg = 0u; seg < num_eff_segs; seg++) { - uint left0 = seg * 2u; - uint right0 = seg * 2u + 1u; - uint left1 = (seg + 1u) * 2u; - uint right1 = (seg + 1u) * 2u + 1u; - - // Triangle 1: left0, right0, left1 - gl_PrimitiveTriangleIndicesEXT[tri_idx] = uvec3(left0, right0, left1); - tri_idx++; - - // Triangle 2: right0, right1, left1 - gl_PrimitiveTriangleIndicesEXT[tri_idx] = uvec3(right0, right1, left1); - tri_idx++; - } - - // No joint triangles needed - vertices are shared! - - // Start cap triangles: fan from center through arc points - // Vertices: right(1), arc1, arc2, arc3, left(0) - // center = start_cap_base, arc1/2/3 = start_cap_base + 1/2/3 - if (draw_start_cap) { - uint center = start_cap_base; - uint right_edge = 1u; // First point's right vertex - uint left_edge = 0u; // First point's left vertex - uint arc1 = start_cap_base + 1u; - uint arc2 = start_cap_base + 2u; - uint arc3 = start_cap_base + 3u; - - // Triangle 1: center, right_edge, arc1 - gl_PrimitiveTriangleIndicesEXT[tri_idx] = uvec3(center, right_edge, arc1); - tri_idx++; - - // Triangle 2: center, arc1, arc2 - gl_PrimitiveTriangleIndicesEXT[tri_idx] = uvec3(center, arc1, arc2); - tri_idx++; - - // Triangle 3: center, arc2, arc3 - gl_PrimitiveTriangleIndicesEXT[tri_idx] = uvec3(center, arc2, arc3); - tri_idx++; - - // Triangle 4: center, arc3, left_edge - gl_PrimitiveTriangleIndicesEXT[tri_idx] = uvec3(center, arc3, left_edge); - tri_idx++; - } - - // End cap triangles: fan from center through arc points - // Vertices: left(2*(n-1)), arc1, arc2, arc3, right(2*(n-1)+1) - if (draw_end_cap) { - uint last_pt = num_eff_points - 1u; - uint center = end_cap_base; - uint left_edge = last_pt * 2u; // Last point's left vertex - uint right_edge = last_pt * 2u + 1u; // Last point's right vertex - uint arc1 = end_cap_base + 1u; - uint arc2 = end_cap_base + 2u; - uint arc3 = end_cap_base + 3u; - - // Triangle 1: center, left_edge, arc1 - gl_PrimitiveTriangleIndicesEXT[tri_idx] = uvec3(center, left_edge, arc1); - tri_idx++; - - // Triangle 2: center, arc1, arc2 - gl_PrimitiveTriangleIndicesEXT[tri_idx] = uvec3(center, arc1, arc2); - tri_idx++; - - // Triangle 3: center, arc2, arc3 - gl_PrimitiveTriangleIndicesEXT[tri_idx] = uvec3(center, arc2, arc3); - tri_idx++; - - // Triangle 4: center, arc3, right_edge - gl_PrimitiveTriangleIndicesEXT[tri_idx] = uvec3(center, arc3, right_edge); - tri_idx++; - } - - // Set all primitives to layer matching query_id and uniform color - for (uint i = 0u; i < _prim_count; i++) { - gl_MeshPrimitivesEXT[i].gl_Layer = int(payload.query_id); - prim_out[i].color = payload.color; - prim_out[i].is_bev = payload.is_bev; - } - } -} diff --git a/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/ts_polyline.task.glsl b/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/ts_polyline.task.glsl deleted file mode 100644 index e9fd6008f..000000000 --- a/integrations/omnidreams/ludus-renderer/ludus_renderer/shaders/ts_polyline.task.glsl +++ /dev/null @@ -1,989 +0,0 @@ -#version 460 -#extension GL_EXT_mesh_shader : require -#extension GL_EXT_shader_explicit_arithmetic_types_int64 : require - -layout(push_constant) uniform PushConstants { - float u_width_polyline_regular; - float u_width_polyline_bev; - float u_width_ego_traj_regular; - float u_width_ego_traj_bev; - float u_width_wireframe; - float u_resolution_scale; - float u_depth_scaling; - int u_max_extrapolation_us; - int u_color_palette_size; - uint u_num_queries; - float u_tessellation_threshold; - uint u_max_tessellation_polyline; - uint u_max_tessellation_polygon; - uint u_max_tessellation_cube; - float u_cull_radius_scale; - float u_fog_enabled; - uint u_max_obstacles; - uint u_cube_pool_index; - uint u_num_polygon_pools; - uint u_max_varrays_per_pool; - uint u_num_polyline_pools; -} pc; - -#define IF_ZMODIFY(x) - -// Cap styles -const uint CAP_NONE = 0u; -const uint CAP_FLAT = 1u; -const uint CAP_ROUND = 2u; - -// Primitive type IDs (must match Python PRIM_* constants in ops.py) -const uint PRIM_ROAD_BOUNDARY = 0u; -const uint PRIM_LANE_LINE = 1u; // Legacy cyan lane line -const uint PRIM_CROSSWALK = 2u; -const uint PRIM_STATIC_OBSTACLE = 3u; // Legacy, avoid using -const uint PRIM_EGO_TRAJECTORY = 4u; -const uint PRIM_OBSTACLE = 5u; -const uint PRIM_EGO_OBSTACLE = 6u; -const uint PRIM_WAIT_LINE = 7u; -const uint PRIM_POLE = 8u; -const uint PRIM_ROAD_MARKING = 9u; -const uint PRIM_LANE_BOUNDARY = 10u; -const uint PRIM_TRAFFIC_LIGHT = 11u; -const uint PRIM_TRAFFIC_SIGN = 12u; -const uint PRIM_INTERSECTION = 13u; -const uint PRIM_ROAD_ISLAND = 14u; -const uint PRIM_BUFFER_ZONE = 15u; -// Lane line variants by color/style -const uint PRIM_LANE_LINE_WHITE_SOLID = 16u; -const uint PRIM_LANE_LINE_WHITE_DASHED = 17u; -const uint PRIM_LANE_LINE_YELLOW_SOLID = 18u; -const uint PRIM_LANE_LINE_YELLOW_DASHED = 19u; -// Dot primitives - each vertex is rendered as a circle -const uint PRIM_DOT_YELLOW = 20u; -const uint PRIM_DOT_WHITE = 21u; - -// Camera type IDs -const uint CAMERA_TYPE_REGULAR = 0u; -const uint CAMERA_TYPE_BEV = 1u; - -//============================================================================= -// Hardcoded Primitive Styles (matching wm-render colorscheme v3) -//============================================================================= - -// Colors (RGB normalized) - matching imaginaire4 v3 colorscheme -// Source: imaginaire4/imaginaire/auxiliary/world_scenario/color_scheme/config_color_hdmap.json -const vec3 COLOR_ROAD_BOUNDARY = vec3(253.0/255.0, 1.0/255.0, 232.0/255.0); // Magenta (253, 1, 232) -const vec3 COLOR_LANE_LINE = vec3(98.0/255.0, 183.0/255.0, 249.0/255.0); // Cyan (98, 183, 249) - "lanelines" (legacy) -const vec3 COLOR_CROSSWALK = vec3(139.0/255.0, 93.0/255.0, 255.0/255.0); // Purple (139, 93, 255) -const vec3 COLOR_STATIC_OBSTACLE = vec3(255.0/255.0, 100.0/255.0, 0.0/255.0); // Orange (legacy) -const vec3 COLOR_EGO_TRAJECTORY = vec3(0.0/255.0, 255.0/255.0, 0.0/255.0); // Green (0, 255, 0) -const vec3 COLOR_WAIT_LINE = vec3(108.0/255.0, 179.0/255.0, 59.0/255.0); // Yellow-green (108, 179, 59) -const vec3 COLOR_POLE = vec3(183.0/255.0, 69.0/255.0, 177.0/255.0); // Purple-magenta (183, 69, 177) -const vec3 COLOR_ROAD_MARKING = vec3(20.0/255.0, 254.0/255.0, 185.0/255.0); // Cyan-green (20, 254, 185) -const vec3 COLOR_LANE_BOUNDARY = vec3(98.0/255.0, 183.0/255.0, 249.0/255.0); // Cyan (same as lane line) -const vec3 COLOR_TRAFFIC_LIGHT = vec3(100.0/255.0, 100.0/255.0, 100.0/255.0); // Gray (100, 100, 100) -const vec3 COLOR_TRAFFIC_SIGN = vec3(8.0/255.0, 2.0/255.0, 255.0/255.0); // Blue (8, 2, 255) -const vec3 COLOR_INTERSECTION = vec3(80.0/255.0, 80.0/255.0, 120.0/255.0); // Dark blue-gray (approximated) -const vec3 COLOR_ROAD_ISLAND = vec3(60.0/255.0, 120.0/255.0, 60.0/255.0); // Dark green (approximated) -const vec3 COLOR_BUFFER_ZONE = vec3(120.0/255.0, 80.0/255.0, 80.0/255.0); // Dark red-brown (approximated) -// Lane line variants from config_color_geometry_laneline.json -const vec3 COLOR_LANE_LINE_WHITE = vec3(255.0/255.0, 255.0/255.0, 255.0/255.0); // White (255, 255, 255) -const vec3 COLOR_LANE_LINE_YELLOW = vec3(255.0/255.0, 255.0/255.0, 0.0/255.0); // Yellow (255, 255, 0) - -// Default polyline widths (pixels at reference resolution 1280x720) -const float DEFAULT_WIDTH_POLYLINE_REGULAR = 7.0; -const float DEFAULT_WIDTH_POLYLINE_BEV = 4.0; -const float DEFAULT_WIDTH_EGO_TRAJ_REGULAR = 12.0; -const float DEFAULT_WIDTH_EGO_TRAJ_BEV = 5.0; -const float DEFAULT_WIDTH_POLE_REGULAR = 5.0; // Poles are thinner (reference: 5 vs 12) -const float DEFAULT_WIDTH_POLE_BEV = 3.0; -const float DEFAULT_WIDTH_WIREFRAME = 2.0; - -// Configurable width uniforms (set from Python, or use defaults) - -// Compute depth-based scaling factor for line width -// z_ndc is in [-1, 1] where -1 is near, +1 is far -// Returns 1.0 at near, 0.0 at far (linear fade) -float get_depth_scale(vec4 clip) { - if (pc.u_depth_scaling < 0.5) return 1.0; // Disabled - float z_ndc = clip.z / clip.w; // Convert to NDC - float depth_scale = 1.0 - z_ndc; // Map [-1,1] to [1,0] - return clamp(depth_scale, 0.0, 1.0); -} - -// Color palette buffer (optional, configured from Python) -// Declared early so get_prim_color can use it; actual buffer layout defined later -layout(std430, binding = 10) readonly buffer ColorPaletteBufferEarly { - vec4 g_color_palette[]; -}; - -// Get default color for primitive type (hardcoded fallback) -vec3 get_default_prim_color(uint prim_type_id) { - if (prim_type_id == PRIM_ROAD_BOUNDARY) return COLOR_ROAD_BOUNDARY; - if (prim_type_id == PRIM_LANE_LINE) return COLOR_LANE_LINE; - if (prim_type_id == PRIM_CROSSWALK) return COLOR_CROSSWALK; - if (prim_type_id == PRIM_STATIC_OBSTACLE) return COLOR_STATIC_OBSTACLE; - if (prim_type_id == PRIM_EGO_TRAJECTORY) return COLOR_EGO_TRAJECTORY; - if (prim_type_id == PRIM_WAIT_LINE) return COLOR_WAIT_LINE; - if (prim_type_id == PRIM_POLE) return COLOR_POLE; - if (prim_type_id == PRIM_ROAD_MARKING) return COLOR_ROAD_MARKING; - if (prim_type_id == PRIM_LANE_BOUNDARY) return COLOR_LANE_BOUNDARY; - if (prim_type_id == PRIM_TRAFFIC_LIGHT) return COLOR_TRAFFIC_LIGHT; - if (prim_type_id == PRIM_TRAFFIC_SIGN) return COLOR_TRAFFIC_SIGN; - if (prim_type_id == PRIM_INTERSECTION) return COLOR_INTERSECTION; - if (prim_type_id == PRIM_ROAD_ISLAND) return COLOR_ROAD_ISLAND; - if (prim_type_id == PRIM_BUFFER_ZONE) return COLOR_BUFFER_ZONE; - // Lane line variants - if (prim_type_id == PRIM_LANE_LINE_WHITE_SOLID) return COLOR_LANE_LINE_WHITE; - if (prim_type_id == PRIM_LANE_LINE_WHITE_DASHED) return COLOR_LANE_LINE_WHITE; - if (prim_type_id == PRIM_LANE_LINE_YELLOW_SOLID) return COLOR_LANE_LINE_YELLOW; - if (prim_type_id == PRIM_LANE_LINE_YELLOW_DASHED) return COLOR_LANE_LINE_YELLOW; - if (prim_type_id == PRIM_DOT_YELLOW) return COLOR_LANE_LINE_YELLOW; - if (prim_type_id == PRIM_DOT_WHITE) return COLOR_LANE_LINE_WHITE; - return vec3(1.0, 1.0, 1.0); // Default white for obstacles -} - -// Get color for primitive type (checks palette first, then falls back to defaults) -vec3 get_prim_color(uint prim_type_id) { - // If color palette is configured, check if this prim_type has a custom color - // Alpha < 0 means "use default", alpha >= 0 means "use this color" - if (pc.u_color_palette_size > 0 && prim_type_id < uint(pc.u_color_palette_size)) { - vec4 palette_color = g_color_palette[prim_type_id]; - if (palette_color.a >= 0.0) { - return palette_color.rgb; - } - } - // Fall back to hardcoded defaults - return get_default_prim_color(prim_type_id); -} - -// Check if primitive is a dot type (rendered as circles at each vertex) -bool is_dot_primitive(uint prim_type_id) { - return prim_type_id == PRIM_DOT_YELLOW || prim_type_id == PRIM_DOT_WHITE; -} - -// Get polyline width for primitive type and camera type (scaled by resolution) -float get_prim_width(uint prim_type_id, uint camera_type_id) { - bool is_bev = (camera_type_id == CAMERA_TYPE_BEV); - float scale = (pc.u_resolution_scale > 0.0) ? pc.u_resolution_scale : 1.0; - - float base_width; - if (prim_type_id == PRIM_EGO_TRAJECTORY) { - float default_w = is_bev ? DEFAULT_WIDTH_EGO_TRAJ_BEV : DEFAULT_WIDTH_EGO_TRAJ_REGULAR; - float custom_w = is_bev ? pc.u_width_ego_traj_bev : pc.u_width_ego_traj_regular; - base_width = (custom_w > 0.0) ? custom_w : default_w; - } else if (prim_type_id == PRIM_POLE) { - // Poles use thinner lines (reference: 5 pixels vs 12 for other polylines) - base_width = is_bev ? DEFAULT_WIDTH_POLE_BEV : DEFAULT_WIDTH_POLE_REGULAR; - } else { - float default_w = is_bev ? DEFAULT_WIDTH_POLYLINE_BEV : DEFAULT_WIDTH_POLYLINE_REGULAR; - float custom_w = is_bev ? pc.u_width_polyline_bev : pc.u_width_polyline_regular; - base_width = (custom_w > 0.0) ? custom_w : default_w; - } - return base_width * scale; -} - -// Get wireframe edge width (scaled by resolution) -float get_wireframe_width() { - float scale = (pc.u_resolution_scale > 0.0) ? pc.u_resolution_scale : 1.0; - float base_width = (pc.u_width_wireframe > 0.0) ? pc.u_width_wireframe : DEFAULT_WIDTH_WIREFRAME; - return base_width * scale; -} - -//============================================================================= -// Data Structures (must match C++ structs) -//============================================================================= - -// TimestampedPolylinePool (64 bytes) -struct TimestampedPolylinePool { - uint num_timestamps; - uint num_varrays; - uint num_vertices; - uint prim_type_id; // Index into PrimitiveStyle lookup table - uint timestamps_offset; - uint ts_varrays_ps_offset; - uint varrays_ps_offset; - uint vertices_offset; - uint aabb_offset; // Per-element AABB in float buffer (6 floats each: min xyz, max xyz) - uint _pad1, _pad2, _pad3, _pad4, _pad5, _pad6, _pad7; // Padding to 64 bytes -}; - -// TimestampedPolygonPool (64 bytes) -struct TimestampedPolygonPool { - uint num_timestamps; - uint num_varrays; - uint num_vertices; - uint num_triangles; - uint prim_type_id; // Index into PrimitiveStyle lookup table - uint timestamps_offset; - uint ts_varrays_ps_offset; - uint varrays_ps_offset; - uint tri_ps_offset; - uint vertices_offset; - uint triangles_offset; - uint aabb_offset; // Per-element AABB in float buffer (6 floats each: min xyz, max xyz) - uint _pad1, _pad2, _pad3, _pad4; // Padding to 64 bytes (16 uints) -}; - -// CubePool (64 bytes) - used for obstacles, traffic lights, traffic signs, etc. -// Renamed from ObstaclePool but keeping struct name for backward compat -struct ObstaclePool { - uint num_cubes; // Was: num_obstacles - uint num_timestamps; - uint num_track_poses; - uint prim_type_id; // Semantic type for color lookup - uint timestamps_offset; // Global timestamps for this pool - uint cube_ts_ps_offset; // Per-cube track length prefix sum (was: obstacle_ts_ps_offset) - uint track_timestamps_offset; // Per-pose timestamps in float buffer (as 2x uint for int64) - uint translations_offset; // Per-pose translations (3 floats each) - uint quaternions_offset; // Per-pose quaternions (4 floats each) - uint scales_offset; // Per-cube scales (3 floats each) - uint colors_offset; // Per-cube colors (6 floats each) - uint render_flags; // CUBE_FLAG_* bits (e.g., CUBE_FLAG_WIREFRAME) - uint _pad2, _pad3, _pad4, _pad5; // 4 padding fields for 64 bytes total -}; - -// Cube render flags -const uint CUBE_FLAG_WIREFRAME = 1u; // Draw wireframe edges in addition to solid faces - -// TimestampedScene (128 bytes) -struct TimestampedScene { - uint num_polyline_pools; - uint polyline_pools_offset; - uint num_polygon_pools; - uint polygon_pools_offset; - uint num_cube_pools; // Was: has_obstacle_pool (0/1), now supports multiple - uint cube_pools_offset; // Was: obstacle_pool_offset - uint timestamps_buffer_offset; - uint int32_buffer_offset; - uint vertex_buffer_offset; - uint triangle_buffer_offset; - uint pose_buffer_offset; - uint float_buffer_offset; - uint _pad[20]; -}; - -// RenderQuery (16 bytes) -struct RenderQuery { - uint scene_id; - uint camera_id; - int64_t timestamp_us; - uint camera_type_id; // CAMERA_TYPE_REGULAR or CAMERA_TYPE_BEV - uint _pad1, _pad2, _pad3; // Padding to 32 bytes -}; - -// FThetaCamera (72 bytes) -struct FThetaCamera { - float cx, cy; - float img_w, img_h; - float poly0, poly1, poly2, poly3, poly4, poly5; - float max_ray_angle; - float max_distortion_val; - float max_distortion_dval; - float depth_max; - float ld_c, ld_d, ld_e, ld_f; -}; - -// CameraPose (64 bytes) -struct CameraPose { - mat4 world_to_camera; -}; - -// Vertex (16 bytes) -struct Vertex { - float x, y, z; - float _pad; -}; - -//============================================================================= -// Buffer Bindings -//============================================================================= - -// Global data buffers -layout(std430, binding = 0) readonly buffer TimestampsBuffer { - int64_t g_timestamps[]; -}; - -layout(std430, binding = 1) readonly buffer Int32Buffer { - int g_int32[]; -}; - -layout(std430, binding = 2) readonly buffer VertexBuffer { - Vertex g_vertices[]; -}; - -layout(std430, binding = 3) readonly buffer TriangleBuffer { - uvec3 g_triangles[]; -}; - -layout(std430, binding = 4) readonly buffer PoseBuffer { - CameraPose g_poses[]; -}; - -layout(std430, binding = 5) readonly buffer FloatBuffer { - float g_floats[]; -}; - -// Scene metadata -layout(std430, binding = 6) readonly buffer SceneBuffer { - TimestampedScene g_scenes[]; -}; - -layout(std430, binding = 7) readonly buffer PolylinePoolBuffer { - TimestampedPolylinePool g_polyline_pools[]; -}; - -layout(std430, binding = 8) readonly buffer PolygonPoolBuffer { - TimestampedPolygonPool g_polygon_pools[]; -}; - -layout(std430, binding = 9) readonly buffer ObstaclePoolBuffer { - ObstaclePool g_obstacle_pools[]; -}; - -// Camera buffers -layout(std430, binding = 11) readonly buffer CameraIntrinsicsBuffer { - FThetaCamera g_camera_intrinsics[]; -}; - -layout(std430, binding = 12) readonly buffer CameraPoseBuffer { - CameraPose g_camera_poses[]; // One per query (dynamic viewpoints) -}; - -// Query buffer -layout(std430, binding = 13) readonly buffer QueryBuffer { - RenderQuery g_queries[]; -}; - -// Uniforms -// Spatial culling: elements beyond depth_max * scale from the camera are -// discarded in the task shader. Scale > 1 gives headroom so nothing at -// the visible boundary pops in/out. Set to 0 to disable culling. - -//============================================================================= -// GPU Binary Search -// Returns index of last element <= target, or -1 if target < all elements -//============================================================================= - -int binary_search_timestamps(uint base_offset, uint count, int64_t target) { - if (count == 0u) return -1; - - int left = 0; - int right = int(count) - 1; - int result = -1; - - while (left <= right) { - int mid = (left + right) / 2; - int64_t val = g_timestamps[base_offset + uint(mid)]; - - if (val <= target) { - result = mid; - left = mid + 1; - } else { - right = mid - 1; - } - } - - return result; -} - -//============================================================================= -// Quaternion Math for Track Interpolation -//============================================================================= - -// Quaternion dot product -float quat_dot(vec4 a, vec4 b) { - return a.x*b.x + a.y*b.y + a.z*b.z + a.w*b.w; -} - -// Quaternion normalize -vec4 quat_normalize(vec4 q) { - float len = length(q); - return len > 1e-10 ? q / len : vec4(0.0, 0.0, 0.0, 1.0); -} - -// Quaternion spherical linear interpolation (slerp) -vec4 quat_slerp(vec4 q0, vec4 q1, float t) { - // Ensure shortest path - float d = quat_dot(q0, q1); - if (d < 0.0) { - q1 = -q1; - d = -d; - } - - // If quaternions are very close, use linear interpolation - if (d > 0.9995) { - return quat_normalize(mix(q0, q1, t)); - } - - // Spherical interpolation - float theta_0 = acos(clamp(d, -1.0, 1.0)); - float theta = theta_0 * t; - float sin_theta = sin(theta); - float sin_theta_0 = sin(theta_0); - - float s0 = cos(theta) - d * sin_theta / sin_theta_0; - float s1 = sin_theta / sin_theta_0; - - return quat_normalize(s0 * q0 + s1 * q1); -} - -// Convert quaternion (x, y, z, w) to 3x3 rotation matrix -// GLSL mat3 is column-major: mat3(col0, col1, col2) -mat3 quat_to_matrix(vec4 q) { - float x = q.x, y = q.y, z = q.z, w = q.w; - - float x2 = x + x, y2 = y + y, z2 = z + z; - float xx = x * x2, xy = x * y2, xz = x * z2; - float yy = y * y2, yz = y * z2, zz = z * z2; - float wx = w * x2, wy = w * y2, wz = w * z2; - - // Column 0: (R00, R10, R20), Column 1: (R01, R11, R21), Column 2: (R02, R12, R22) - return mat3( - 1.0 - (yy + zz), xy + wz, xz - wy, // Column 0 - xy - wz, 1.0 - (xx + zz), yz + wx, // Column 1 - xz + wy, yz - wx, 1.0 - (xx + yy) // Column 2 - ); -} - -// Build 4x4 transform from translation and quaternion (with scale) -mat4 build_transform(vec3 translation, vec4 quaternion, vec3 scale) { - mat3 rot = quat_to_matrix(quaternion); - - // Apply scale to each column of rotation matrix - mat4 result = mat4( - vec4(rot[0] * scale.x, 0.0), - vec4(rot[1] * scale.y, 0.0), - vec4(rot[2] * scale.z, 0.0), - vec4(translation, 1.0) - ); - - return result; -} - -// Binary search for track interpolation (returns index where t0 <= target < t1) -// Returns -1 if target is outside the track range -int binary_search_track(uint base_offset, uint count, int64_t target) { - if (count < 2u) return -1; // Need at least 2 points for interpolation - - int64_t first_ts = g_timestamps[base_offset]; - int64_t last_ts = g_timestamps[base_offset + count - 1u]; - - // Check bounds - if (target < first_ts || target > last_ts) return -1; - - int left = 0; - int right = int(count) - 2; // Max valid index for interpolation start - int result = 0; - - while (left <= right) { - int mid = (left + right) / 2; - int64_t t0 = g_timestamps[base_offset + uint(mid)]; - int64_t t1 = g_timestamps[base_offset + uint(mid) + 1u]; - - if (t0 <= target && target <= t1) { - return mid; - } else if (target < t0) { - right = mid - 1; - } else { - left = mid + 1; - } - } - - return -1; // Should not reach here for valid input -} - -//============================================================================= -// Spatial Culling Helpers -//============================================================================= - -// AABB-AABB overlap test -bool cull_aabb_overlap(vec3 a_min, vec3 a_max, vec3 b_min, vec3 b_max) { - return all(lessThanEqual(a_min, b_max)) && all(greaterThanEqual(a_max, b_min)); -} - -// Sphere-AABB overlap test -bool cull_sphere_aabb_overlap(vec3 center, float radius, vec3 b_min, vec3 b_max) { - vec3 nearest = clamp(center, b_min, b_max); - vec3 d = center - nearest; - return dot(d, d) <= radius * radius; -} - -// Extract camera world position from view pose -vec3 get_camera_world_pos(CameraPose pose) { - mat3 R = mat3(pose.world_to_camera); - return -transpose(R) * pose.world_to_camera[3].xyz; -} - -//============================================================================= -// F-theta Projection -//============================================================================= - -vec3 rotate_rodrigues(vec3 v, vec3 r) { - float theta = length(r); - if (theta < 1e-8) return v; - vec3 k = r / theta; - float c = cos(theta); - float s = sin(theta); - return v * c + cross(k, v) * s + k * dot(k, v) * (1.0 - c); -} - -// F-theta projection: world point -> NDC -// Supports >180° FOV fisheye cameras where points can have negative z (behind camera plane) -vec4 ftheta_project(vec3 world_pos, CameraPose pose, FThetaCamera cam) { - vec3 cam_pt = (pose.world_to_camera * vec4(world_pos, 1.0)).xyz; - float depth = cam_pt.z; - - float ray_norm = length(cam_pt); - - // Handle points at camera origin - if (ray_norm < 1e-6) { - return vec4(0.0, 0.0, 0.0, 1.0); - } - - float half_pi = 1.5707963; // π/2 - - // For cameras with FOV <= 180° (max_ray_angle <= π/2), points behind camera should be clipped - // Use pseudo-pinhole projection to push them far away in the correct direction - if (cam.max_ray_angle <= half_pi && depth < 0.001) { - float pseudo_focal = cam.poly1; - float x_clip = cam_pt.x * pseudo_focal / (cam.img_w * 0.5); - float y_clip = -cam_pt.y * pseudo_focal / (cam.img_h * 0.5); - return vec4(x_clip * 10.0, y_clip * 10.0, 1.0, 1.0); // Scale by 10 to push far outside - } - - float xy_norm = length(cam_pt.xy); - float cos_alpha = clamp(cam_pt.z / ray_norm, -1.0, 1.0); - float alpha = acos(cos_alpha); // alpha in [0, π] - - // Apply polynomial projection (with linear extrapolation beyond max_ray_angle) - float a2 = alpha * alpha; - float a3 = a2 * alpha; - float a4 = a2 * a2; - float a5 = a4 * alpha; - - float delta = cam.poly0 + cam.poly1 * alpha + cam.poly2 * a2 + - cam.poly3 * a3 + cam.poly4 * a4 + cam.poly5 * a5; - if (alpha > cam.max_ray_angle) { - delta = cam.max_distortion_val + (alpha - cam.max_ray_angle) * cam.max_distortion_dval; - } - - float scale = (xy_norm > 1e-6) ? (delta / xy_norm) : 0.0; - vec2 pixel_rel = scale * cam_pt.xy; - - vec2 pixel_dist; - pixel_dist.x = cam.ld_c * pixel_rel.x + cam.ld_d * pixel_rel.y; - pixel_dist.y = cam.ld_e * pixel_rel.x + cam.ld_f * pixel_rel.y; - - vec2 pixel = pixel_dist + vec2(cam.cx, cam.cy); - - float x_ndc = 2.0 * pixel.x / cam.img_w - 1.0; - float y_ndc = 1.0 - 2.0 * pixel.y / cam.img_h; - - // For z-buffer depth mapping: - // - Narrow FOV (<=180°): use signed depth (cam_pt.z) - // - Wide FOV (>180°): use ray_norm for front-camera vertices (unchanged), - // but push behind-camera vertices to depth_max so they never occlude - // forward geometry. ray_norm alone can't distinguish front from behind. - float z_value; - if (cam.max_ray_angle > half_pi) { - z_value = (depth >= 0.0) ? ray_norm : cam.depth_max; - } else { - z_value = depth; - } - float z_ndc = clamp(z_value / cam.depth_max, 0.0, 1.0); - - return vec4(x_ndc, y_ndc, z_ndc, 1.0); -} - -// Inline version that takes mat4 directly -float estimate_edge_distortion_pixels_mat4(vec3 v0, vec3 v1, mat4 world_to_cam, FThetaCamera cam) { - // Transform to camera space - vec3 cam_pt0 = (world_to_cam * vec4(v0, 1.0)).xyz; - vec3 cam_pt1 = (world_to_cam * vec4(v1, 1.0)).xyz; - vec3 mid_world = (v0 + v1) * 0.5; - vec3 cam_pt_mid = (world_to_cam * vec4(mid_world, 1.0)).xyz; - - // Just clamp depths to avoid division issues - - // For segments in front of camera, compute f-theta projection error directly - // Use depth-clamped projection to handle near-plane cases - float depth0 = max(cam_pt0.z, 0.001); - float depth1 = max(cam_pt1.z, 0.001); - float depth_mid = max(cam_pt_mid.z, 0.001); - - // Compute f-theta projection for each point - // We inline the projection to avoid struct-passing issues - vec2 pixel0, pixel1, pixel_mid; - { - float xy_norm = length(cam_pt0.xy); - float ray_norm = length(vec3(cam_pt0.xy, depth0)) + 1e-10; - float cos_alpha = clamp(depth0 / ray_norm, -1.0, 1.0); - float alpha = acos(cos_alpha); - float a2 = alpha * alpha; - float delta = cam.poly0 + cam.poly1 * alpha + cam.poly2 * a2 + - cam.poly3 * (a2 * alpha) + cam.poly4 * (a2 * a2) + cam.poly5 * (a2 * a2 * alpha); - if (alpha > cam.max_ray_angle) { - delta = cam.max_distortion_val + (alpha - cam.max_ray_angle) * cam.max_distortion_dval; - } - float scale = (xy_norm > 1e-6) ? (delta / xy_norm) : 0.0; - vec2 pixel_rel = scale * cam_pt0.xy; - vec2 pixel_dist = vec2(cam.ld_c * pixel_rel.x + cam.ld_d * pixel_rel.y, - cam.ld_e * pixel_rel.x + cam.ld_f * pixel_rel.y); - pixel0 = pixel_dist + vec2(cam.cx, cam.cy); - } - { - float xy_norm = length(cam_pt1.xy); - float ray_norm = length(vec3(cam_pt1.xy, depth1)) + 1e-10; - float cos_alpha = clamp(depth1 / ray_norm, -1.0, 1.0); - float alpha = acos(cos_alpha); - float a2 = alpha * alpha; - float delta = cam.poly0 + cam.poly1 * alpha + cam.poly2 * a2 + - cam.poly3 * (a2 * alpha) + cam.poly4 * (a2 * a2) + cam.poly5 * (a2 * a2 * alpha); - if (alpha > cam.max_ray_angle) { - delta = cam.max_distortion_val + (alpha - cam.max_ray_angle) * cam.max_distortion_dval; - } - float scale = (xy_norm > 1e-6) ? (delta / xy_norm) : 0.0; - vec2 pixel_rel = scale * cam_pt1.xy; - vec2 pixel_dist = vec2(cam.ld_c * pixel_rel.x + cam.ld_d * pixel_rel.y, - cam.ld_e * pixel_rel.x + cam.ld_f * pixel_rel.y); - pixel1 = pixel_dist + vec2(cam.cx, cam.cy); - } - { - float xy_norm = length(cam_pt_mid.xy); - float ray_norm = length(vec3(cam_pt_mid.xy, depth_mid)) + 1e-10; - float cos_alpha = clamp(depth_mid / ray_norm, -1.0, 1.0); - float alpha = acos(cos_alpha); - float a2 = alpha * alpha; - float delta = cam.poly0 + cam.poly1 * alpha + cam.poly2 * a2 + - cam.poly3 * (a2 * alpha) + cam.poly4 * (a2 * a2) + cam.poly5 * (a2 * a2 * alpha); - if (alpha > cam.max_ray_angle) { - delta = cam.max_distortion_val + (alpha - cam.max_ray_angle) * cam.max_distortion_dval; - } - float scale = (xy_norm > 1e-6) ? (delta / xy_norm) : 0.0; - vec2 pixel_rel = scale * cam_pt_mid.xy; - vec2 pixel_dist = vec2(cam.ld_c * pixel_rel.x + cam.ld_d * pixel_rel.y, - cam.ld_e * pixel_rel.x + cam.ld_f * pixel_rel.y); - pixel_mid = pixel_dist + vec2(cam.cx, cam.cy); - } - - // Compute error: distance from projected midpoint to linear interpolation - vec2 linear_pixel_mid = (pixel0 + pixel1) * 0.5; - float error_pixels = length(pixel_mid - linear_pixel_mid); - - // Clamp to reasonable range to handle edge cases - return clamp(error_pixels, 0.0, 10000.0); -} - -uint compute_subdivision_level(vec3 v0, vec3 v1, CameraPose pose, FThetaCamera cam, float threshold_pixels) { - float error = estimate_edge_distortion_pixels_mat4(v0, v1, pose.world_to_camera, cam); - - if (error < threshold_pixels) return 0u; - if (error < threshold_pixels * 2.0) return 1u; - if (error < threshold_pixels * 4.0) return 2u; - return 3u; -} - -//============================================================================= -// Barycentric Subdivision Utilities (shared with polygon/cube) -//============================================================================= - -uint bary_vertex_count(uint level) { - // Vertices = (n+1)(n+2)/2 where n = 2^level - if (level == 0u) return 3u; - if (level == 1u) return 6u; - if (level == 2u) return 15u; - return 45u; // level 3 -} - -uint bary_triangle_count(uint level) { - // Triangles = 4^level - if (level == 0u) return 1u; - if (level == 1u) return 4u; - if (level == 2u) return 16u; - return 64u; // level 3 -} - -vec2 bary_vertex_uv(uint vertex_idx, uint level) { - if (level == 0u) { - if (vertex_idx == 0u) return vec2(0.0, 0.0); - if (vertex_idx == 1u) return vec2(1.0, 0.0); - return vec2(0.0, 1.0); - } else if (level == 1u) { - vec2 uvs[6]; - uvs[0] = vec2(0.0, 0.0); - uvs[1] = vec2(1.0, 0.0); - uvs[2] = vec2(0.0, 1.0); - uvs[3] = vec2(0.5, 0.0); - uvs[4] = vec2(0.5, 0.5); - uvs[5] = vec2(0.0, 0.5); - return uvs[vertex_idx]; - } else if (level == 2u) { - uint row, col; - if (vertex_idx < 5u) { row = 0u; col = vertex_idx; } - else if (vertex_idx < 9u) { row = 1u; col = vertex_idx - 5u; } - else if (vertex_idx < 12u) { row = 2u; col = vertex_idx - 9u; } - else if (vertex_idx < 14u) { row = 3u; col = vertex_idx - 12u; } - else { row = 4u; col = 0u; } - return vec2(float(col) / 4.0, float(row) / 4.0); - } else { - // Level 3: 9 rows (0-8), row r has (9-r) vertices - uint row, col; - if (vertex_idx < 9u) { row = 0u; col = vertex_idx; } - else if (vertex_idx < 17u) { row = 1u; col = vertex_idx - 9u; } - else if (vertex_idx < 24u) { row = 2u; col = vertex_idx - 17u; } - else if (vertex_idx < 30u) { row = 3u; col = vertex_idx - 24u; } - else if (vertex_idx < 35u) { row = 4u; col = vertex_idx - 30u; } - else if (vertex_idx < 39u) { row = 5u; col = vertex_idx - 35u; } - else if (vertex_idx < 42u) { row = 6u; col = vertex_idx - 39u; } - else if (vertex_idx < 44u) { row = 7u; col = vertex_idx - 42u; } - else { row = 8u; col = 0u; } - return vec2(float(col) / 8.0, float(row) / 8.0); - } -} - -vec3 bary_interpolate(vec3 v0, vec3 v1, vec3 v2, vec2 uv) { - float w = 1.0 - uv.x - uv.y; - return v0 * w + v1 * uv.x + v2 * uv.y; -} - -uvec3 bary_triangle_indices(uint tri_idx, uint level) { - if (level == 0u) { - return uvec3(0u, 1u, 2u); - } else if (level == 1u) { - uvec3 tris[4]; - tris[0] = uvec3(0u, 3u, 5u); - tris[1] = uvec3(3u, 1u, 4u); - tris[2] = uvec3(5u, 4u, 2u); - tris[3] = uvec3(3u, 4u, 5u); - return tris[tri_idx]; - } else if (level == 2u) { - uint row_start[5] = uint[5](0u, 5u, 9u, 12u, 14u); - uint t = tri_idx; - uint row = 0u, col = 0u; - bool is_down = false; - - if (t < 7u) { - row = 0u; - if (t < 4u) { col = t; is_down = false; } - else { col = t - 4u; is_down = true; } - } else if (t < 12u) { - row = 1u; - uint lt = t - 7u; - if (lt < 3u) { col = lt; is_down = false; } - else { col = lt - 3u; is_down = true; } - } else if (t < 15u) { - row = 2u; - uint lt = t - 12u; - if (lt < 2u) { col = lt; is_down = false; } - else { col = lt - 2u; is_down = true; } - } else { - row = 3u; col = 0u; is_down = false; - } - - uint i0, i1, i2; - if (!is_down) { - i0 = row_start[row] + col; - i1 = row_start[row] + col + 1u; - i2 = row_start[row + 1u] + col; - } else { - i0 = row_start[row] + col + 1u; - i1 = row_start[row + 1u] + col + 1u; - i2 = row_start[row + 1u] + col; - } - return uvec3(i0, i1, i2); - } else { - // Level 3: row_start for 9 rows - uint row_start[9] = uint[9](0u, 9u, 17u, 24u, 30u, 35u, 39u, 42u, 44u); - uint t = tri_idx; - uint row = 0u, col = 0u; - bool is_down = false; - - // Row 0: 8 up + 7 down = 15, Row 1: 7 up + 6 down = 13, etc. - if (t < 15u) { - row = 0u; - if (t < 8u) { col = t; is_down = false; } - else { col = t - 8u; is_down = true; } - } else if (t < 28u) { - row = 1u; uint lt = t - 15u; - if (lt < 7u) { col = lt; is_down = false; } - else { col = lt - 7u; is_down = true; } - } else if (t < 39u) { - row = 2u; uint lt = t - 28u; - if (lt < 6u) { col = lt; is_down = false; } - else { col = lt - 6u; is_down = true; } - } else if (t < 48u) { - row = 3u; uint lt = t - 39u; - if (lt < 5u) { col = lt; is_down = false; } - else { col = lt - 5u; is_down = true; } - } else if (t < 55u) { - row = 4u; uint lt = t - 48u; - if (lt < 4u) { col = lt; is_down = false; } - else { col = lt - 4u; is_down = true; } - } else if (t < 60u) { - row = 5u; uint lt = t - 55u; - if (lt < 3u) { col = lt; is_down = false; } - else { col = lt - 3u; is_down = true; } - } else if (t < 63u) { - row = 6u; uint lt = t - 60u; - if (lt < 2u) { col = lt; is_down = false; } - else { col = lt - 2u; is_down = true; } - } else { - row = 7u; col = 0u; is_down = false; - } - - uint i0, i1, i2; - if (!is_down) { - i0 = row_start[row] + col; - i1 = row_start[row] + col + 1u; - i2 = row_start[row + 1u] + col; - } else { - i0 = row_start[row] + col + 1u; - i1 = row_start[row + 1u] + col + 1u; - i2 = row_start[row + 1u] + col; - } - return uvec3(i0, i1, i2); - } -} - - -layout(local_size_x = 1) in; - -// Uniforms for dispatch decoding - -// Task payload to mesh shader - matches non-timestamped version -struct PolylineTaskPayload { - uint query_id; - uint pool_id; - uint varray_idx; // Actual varray index (global in pool) - uint total_points; // Number of vertices in this polyline - float width; - vec3 color; - uint cap_style; - float is_bev; // 1.0 for BEV cameras, 0.0 otherwise -}; -taskPayloadSharedEXT PolylineTaskPayload payload; - -void main() { - uint _task_count = 0u; - uint work_id = gl_WorkGroupID.x; - - // Decode work_id into (query, pool, varray_offset) - uint varray_offset = work_id % pc.u_max_varrays_per_pool; - uint temp = work_id / pc.u_max_varrays_per_pool; - uint pool_id_local = temp % pc.u_num_polyline_pools; - uint query_id_local = temp / pc.u_num_polyline_pools; - - if (query_id_local >= pc.u_num_queries) { - _task_count = 0u; - EmitMeshTasksEXT(_task_count, 1, 1); return; - } - - // Load query - RenderQuery query = g_queries[query_id_local]; - TimestampedScene scene = g_scenes[query.scene_id]; - - if (pool_id_local >= scene.num_polyline_pools) { - _task_count = 0u; - EmitMeshTasksEXT(_task_count, 1, 1); return; - } - - // Load pool - TimestampedPolylinePool pool = g_polyline_pools[scene.polyline_pools_offset + pool_id_local]; - - // Binary search for timestamp - int ts_idx = binary_search_timestamps( - scene.timestamps_buffer_offset + pool.timestamps_offset, - pool.num_timestamps, - query.timestamp_us - ); - - if (ts_idx < 0) { - _task_count = 0u; - EmitMeshTasksEXT(_task_count, 1, 1); return; - } - - // Compute varray range for this timestamp - uint varray_start = 0u; - if (ts_idx > 0) { - varray_start = uint(g_int32[scene.int32_buffer_offset + pool.ts_varrays_ps_offset + uint(ts_idx) - 1u]); - } - uint varray_end = uint(g_int32[scene.int32_buffer_offset + pool.ts_varrays_ps_offset + uint(ts_idx)]); - uint num_varrays = varray_end - varray_start; - - bool force_zero_tasks = false; - if (varray_offset >= num_varrays) { - // Keep subsequent SSBO reads in-bounds, then force the final emit - // count to zero. This mirrors the polygon task shader guard and - // prevents over-dispatched workgroups for smaller pools from - // reading following pools' prefix sums/vertices. - force_zero_tasks = true; - varray_offset = 0u; - } - - uint actual_varray_idx = varray_start + varray_offset; - - // Spatial culling: test per-element AABB against camera-centred view volume - if (pc.u_cull_radius_scale > 0.0 && pool.aabb_offset != 0u) { - float cull_r = g_camera_intrinsics[query.camera_id].depth_max * pc.u_cull_radius_scale; - CameraPose cull_pose = g_camera_poses[query_id_local]; - vec3 cam_pos = get_camera_world_pos(cull_pose); - vec3 view_min = cam_pos - vec3(cull_r); - vec3 view_max = cam_pos + vec3(cull_r); - uint ab = scene.float_buffer_offset + pool.aabb_offset + actual_varray_idx * 6u; - vec3 e_min = vec3(g_floats[ab], g_floats[ab+1u], g_floats[ab+2u]); - vec3 e_max = vec3(g_floats[ab+3u], g_floats[ab+4u], g_floats[ab+5u]); - if (!cull_aabb_overlap(e_min, e_max, view_min, view_max)) { - force_zero_tasks = true; - } - } - - // Get vertex range for this polyline - uint v_start = 0u; - if (actual_varray_idx > 0u) { - v_start = uint(g_int32[scene.int32_buffer_offset + pool.varrays_ps_offset + actual_varray_idx - 1u]); - } - uint v_end = uint(g_int32[scene.int32_buffer_offset + pool.varrays_ps_offset + actual_varray_idx]); - uint total_pts = v_end - v_start; - - // Handle dot primitives differently - each vertex is a separate circle - bool is_dot = is_dot_primitive(pool.prim_type_id); - - if (is_dot) { - // For dots: each vertex is a dot, dispatch one mesh task per batch of dots - // Each dot uses 9 vertices (center + 8 ring) and 8 triangles - // With max 64 verts, we can do 7 dots per mesh (7*9=63) - const uint DOTS_PER_CHUNK = 7u; - uint num_chunks = (total_pts + DOTS_PER_CHUNK - 1u) / DOTS_PER_CHUNK; - num_chunks = max(num_chunks, 1u); - - _task_count = force_zero_tasks ? 0u : num_chunks; - } else { - // Regular polylines - if (total_pts < 2u) { - force_zero_tasks = true; - total_pts = 2u; - } - - // Per-segment adaptive subdivision with 128 vertex limit (per-primitive color) - // Max capacity: 128 verts - 8 cap verts = 120 body verts = 60 effective points - // Worst case 16x subdivision (level 4): 60 / 16 = 3.75 segments - // Use 3 segments per chunk for safety margin - const uint MAX_SEGMENTS_PER_CHUNK = 3u; - - uint num_segments = total_pts - 1u; - uint num_chunks = (num_segments + MAX_SEGMENTS_PER_CHUNK - 1u) / MAX_SEGMENTS_PER_CHUNK; - num_chunks = max(num_chunks, 1u); - - // Emit mesh tasks for each chunk - _task_count = force_zero_tasks ? 0u : num_chunks; - } - - // Write task payload - readable by all spawned mesh shaders - payload.query_id = query_id_local; - payload.pool_id = pool_id_local; - payload.varray_idx = actual_varray_idx; - payload.total_points = total_pts; - payload.width = get_prim_width(pool.prim_type_id, query.camera_type_id); - payload.color = get_prim_color(pool.prim_type_id); - payload.cap_style = CAP_ROUND; - payload.is_bev = (query.camera_type_id == CAMERA_TYPE_BEV) ? 1.0 : 0.0; - EmitMeshTasksEXT(_task_count, 1, 1); -} diff --git a/integrations/omnidreams/ludus-renderer/pyproject.toml b/integrations/omnidreams/ludus-renderer/pyproject.toml index 344d51afd..c5f3fb66f 100644 --- a/integrations/omnidreams/ludus-renderer/pyproject.toml +++ b/integrations/omnidreams/ludus-renderer/pyproject.toml @@ -33,6 +33,7 @@ dependencies = [ "pillow>=10.0", "setuptools>=69", "ninja>=1.13.0", + "cmake>=4.0", "nvidia-nvcomp-cu12>=4.0", ] @@ -62,9 +63,8 @@ packages = [ [tool.setuptools.package-data] "ludus_renderer" = [ "_cpp/common/*.h", - "_cpp/common/*.cpp", + "_cpp/common/common.cpp", "_cpp/render/*.h", - "_cpp/render/*.cpp", "_cpp/render/*.cu", "_cpp/cudaraster/*.hpp", "_cpp/cudaraster/*.cpp", @@ -86,9 +86,8 @@ packages = [ "_cpp/loader/*.h", "_cpp/loader/*.cpp", "_cpp/loader/*.cu", - "shaders/*.glsl", - "shaders/*.sh", - "shaders/*.py", + "_cpp/physx/*.cpp", + "_cpp/physx/CMakeLists.txt", ] [tool.uv] diff --git a/integrations/omnidreams/ludus-renderer/tests/test_cudaraster_api.py b/integrations/omnidreams/ludus-renderer/tests/test_cudaraster_api.py index 8bb94079c..ada674a57 100644 --- a/integrations/omnidreams/ludus-renderer/tests/test_cudaraster_api.py +++ b/integrations/omnidreams/ludus-renderer/tests/test_cudaraster_api.py @@ -2680,3 +2680,74 @@ def test_mixed_scale_overlap_respects_depth_order(harness: CudaRasterHarness) -> far_only = harness.read() far_depth = int(far_only.depth[cy, cx]) assert near_depth < far_depth + + +def test_timestamped_context_batches_distinct_timestamps_exactly() -> None: + """A multi-frame call must match independent native submissions bit-for-bit.""" + from ludus_renderer import ( + CubePool, + FThetaCamera, + LudusCudaTimestampedContext, + TimestampedScene, + ) + + device = torch.device("cuda") + width, height = 160, 88 + timestamps = torch.tensor([0, 33_333], dtype=torch.int64, device=device) + pool = CubePool( + timestamps_us=timestamps, + cube_ts_prefix_sum=torch.tensor([2], dtype=torch.int32, device=device), + track_timestamps_us=timestamps, + translations=torch.tensor( + [[8.0, -2.0, 0.0], [8.0, 2.0, 0.0]], + dtype=torch.float32, + device=device, + ), + quaternions=torch.tensor( + [[0.0, 0.0, 0.0, 1.0], [0.0, 0.0, 0.0, 1.0]], + dtype=torch.float32, + device=device, + ), + scales=torch.tensor([[4.0, 2.0, 2.0]], device=device), + colors=torch.ones((1, 6), dtype=torch.float32, device=device), + ) + camera = FThetaCamera( + principal_point=torch.tensor([width / 2, height / 2], device=device), + image_size=torch.tensor([width, height], device=device), + fw_poly=torch.tensor([0.0, 125.0, 0.0, 0.0, 0.0, 0.0], device=device), + max_ray_angle=1.3, + depth_max=100.0, + ) + context = LudusCudaTimestampedContext(device=device) + context.upload_cameras([camera]) + scene_id = context.upload_scene(TimestampedScene([], [], [pool])) + context.set_max_tessellation_levels(cube=0) + context.set_msaa_samples(0) + + scene_ids = torch.full((2,), scene_id, dtype=torch.int32, device=device) + camera_ids = torch.zeros(2, dtype=torch.int32, device=device) + camera_types = torch.zeros(2, dtype=torch.int32, device=device) + poses = torch.eye(4, device=device).repeat(2, 1, 1) + batched = context.render( + scene_ids, + camera_ids, + timestamps, + camera_types, + poses, + (height, width), + ) + sequential = torch.cat( + [ + context.render( + scene_ids[index : index + 1], + camera_ids[index : index + 1], + timestamps[index : index + 1], + camera_types[index : index + 1], + poses[index : index + 1], + (height, width), + ) + for index in range(2) + ] + ) + + assert torch.equal(batched, sequential) diff --git a/integrations/omnidreams/ludus-renderer/tests/test_vulkan_backend.py b/integrations/omnidreams/ludus-renderer/tests/test_vulkan_backend.py deleted file mode 100644 index 648597d8c..000000000 --- a/integrations/omnidreams/ludus-renderer/tests/test_vulkan_backend.py +++ /dev/null @@ -1,170 +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. - -"""Smoke test for the Vulkan backend (LudusTimestampedContext). - -Builds a tiny synthetic scene with one polyline and one polygon, renders -one frame with both ``LudusCudaTimestampedContext`` and -``LudusTimestampedContext``, and asserts the Vulkan output is non-empty -and roughly similar to the CUDA reference. -""" - -from __future__ import annotations - -import math - -import pytest - -torch = pytest.importorskip("torch") -if not torch.cuda.is_available(): - pytest.skip("CUDA not available", allow_module_level=True) - - -def _build_camera(width=320, height=240): - """Linear (pinhole-ish) F-theta camera.""" - from ludus_renderer import FThetaCamera - - return FThetaCamera( - principal_point=torch.tensor([width / 2.0, height / 2.0], dtype=torch.float32), - image_size=torch.tensor([float(width), float(height)], dtype=torch.float32), - fw_poly=torch.tensor([0.0, 200.0, 0.0, 0.0, 0.0, 0.0], dtype=torch.float32), - max_ray_angle=math.pi / 2.0, - depth_max=200.0, - ) - - -def _build_synthetic_scene(): - """One polyline that spans the view in front of the camera. - - The renderer's world coordinate convention is FLU (Front-Left-Up), so a - polyline at x=5 with varying y traces a horizontal line 5 m in front of - a camera sitting at the origin. - """ - from ludus_renderer import ( - PRIM_ROAD_BOUNDARY, - TimestampedPolylinePool, - TimestampedScene, - ) - - polyline_pts = torch.tensor( - [ - [5.0, -2.0, 0.0], - [5.0, -1.0, 0.0], - [5.0, 0.0, 0.0], - [5.0, 1.0, 0.0], - [5.0, 2.0, 0.0], - ], - dtype=torch.float32, - ) - pl_pool = TimestampedPolylinePool( - timestamps_us=torch.tensor([0], dtype=torch.int64), - timestamped_varrays_prefix_sum=torch.tensor([1], dtype=torch.int32), - varrays_prefix_sum=torch.tensor([polyline_pts.shape[0]], dtype=torch.int32), - vertices=polyline_pts, - prim_type_id=PRIM_ROAD_BOUNDARY, - ) - - return TimestampedScene( - polyline_pools=[pl_pool], - polygon_pools=[], - cube_pools=None, - ) - - -def _identity_pose(device="cuda"): - """4x4 world->camera identity pose on the given device.""" - return torch.eye(4, dtype=torch.float32, device=device).unsqueeze(0) - - -def _render_once(ctx_cls, scene, camera, resolution=(240, 320)): - ctx = ctx_cls(device="cuda") - ctx.upload_cameras([camera]) - scene_id = ctx.upload_scene(scene) - queries = [(scene_id, 0, 0, 0)] # scene, camera, timestamp, camera_type - img = ctx.render_batch(queries, _identity_pose("cuda"), resolution) - return img.detach().cpu() - - -def test_cuda_backend_renders_synthetic_scene(): - """Baseline: the CUDA backend renders the synthetic polyline.""" - from ludus_renderer import LudusCudaTimestampedContext - - scene = _build_synthetic_scene() - cam = _build_camera() - img = _render_once(LudusCudaTimestampedContext, scene, cam) - - assert img.shape == (1, 240, 320, 4), f"unexpected output shape {tuple(img.shape)}" - assert img.dtype == torch.uint8 - assert int((img[..., :3].sum(dim=-1) > 0).sum().item()) > 0, ( - "CUDA render is all black" - ) - - -def test_vulkan_backend_renders_synthetic_scene(): - """The Vulkan backend should JIT-compile, init, upload, render, and - produce visible geometry for the same scene as CUDA.""" - try: - from ludus_renderer import LudusTimestampedContext - except ImportError as exc: - pytest.skip(f"Vulkan backend unavailable: {exc}") - - scene = _build_synthetic_scene() - cam = _build_camera() - - try: - img = _render_once(LudusTimestampedContext, scene, cam) - except ImportError as exc: - pytest.skip(f"Vulkan backend unavailable: {exc}") - except RuntimeError as exc: - # No GPU with mesh-shader support, no Vulkan ICD, etc. - pytest.skip(f"Vulkan backend init failed: {exc}") - - assert img.shape == (1, 240, 320, 4), f"unexpected output shape {tuple(img.shape)}" - assert img.dtype == torch.uint8 - nonzero = int((img[..., :3].sum(dim=-1) > 0).sum().item()) - assert nonzero > 0, "Vulkan render is all black" - - -def test_vulkan_vs_cuda_pixel_counts_close(): - """The Vulkan and CUDA backends use different rasterizers, but on a - simple synthetic scene the number of lit pixels should be in the same - ballpark (within 25%).""" - from ludus_renderer import LudusCudaTimestampedContext - - try: - from ludus_renderer import LudusTimestampedContext - except ImportError as exc: - pytest.skip(f"Vulkan backend unavailable: {exc}") - - scene = _build_synthetic_scene() - cam = _build_camera() - - cuda_img = _render_once(LudusCudaTimestampedContext, scene, cam) - try: - vk_img = _render_once(LudusTimestampedContext, scene, cam) - except (ImportError, RuntimeError) as exc: - pytest.skip(f"Vulkan backend unavailable: {exc}") - - assert cuda_img.shape == vk_img.shape - assert cuda_img.dtype == vk_img.dtype - - cuda_nz = int((cuda_img[..., :3].sum(dim=-1) > 0).sum().item()) - vk_nz = int((vk_img[..., :3].sum(dim=-1) > 0).sum().item()) - assert cuda_nz > 0 and vk_nz > 0 - ratio = vk_nz / cuda_nz - assert 0.75 <= ratio <= 1.33, ( - f"Vulkan lit-pixel count diverges from CUDA: vk={vk_nz}, cuda={cuda_nz}, " - f"ratio={ratio:.2f}" - ) diff --git a/integrations/omnidreams/ludus-renderer/uv.lock b/integrations/omnidreams/ludus-renderer/uv.lock index 96c21c57e..3a2ee7eda 100644 --- a/integrations/omnidreams/ludus-renderer/uv.lock +++ b/integrations/omnidreams/ludus-renderer/uv.lock @@ -1,19 +1,39 @@ version = 1 revision = 3 -requires-python = ">=3.10" +requires-python = ">=3.10, <3.14" resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version == '3.11.*' and sys_platform == 'emscripten'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.11' and sys_platform == 'win32'", + "python_full_version >= '3.11' and sys_platform == 'emscripten'", + "python_full_version >= '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version < '3.11'", ] +[[package]] +name = "cmake" +version = "4.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ca/4c/fec299c7e437299ac354b7907bdcedfb85860afce76471ed0fcc6879166d/cmake-4.4.0.tar.gz", hash = "sha256:933eb5977ecc5226e47d702d1c412b69f77ca00f59a4660c80b436cf7d5472de", size = 34915, upload-time = "2026-07-10T20:50:32.879Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/50/21/9e97957b80e548f44277753f369bfcb9a997333380d5adb9f4dcf8cc6790/cmake-4.4.0-py3-none-macosx_10_10_universal2.whl", hash = "sha256:3068d219f21dde2c757fc65bf6fa1f11e892ddba1a00f2bc87276529d9c95f9a", size = 54381909, upload-time = "2026-07-10T20:48:51.167Z" }, + { url = "https://files.pythonhosted.org/packages/a3/fc/83b3472c3c40759e29970f583a6602fb584ae0123b573de2ff44a0a52712/cmake-4.4.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7ce803007cbebd3440eb0c52cec6b28a172b5cd7737ceaf613bc566880c1d0a4", size = 30277284, upload-time = "2026-07-10T20:48:57.604Z" }, + { url = "https://files.pythonhosted.org/packages/3d/36/0c83d4682758f6e1cbc56f0aaac5b392a3c93d81518d99418aa0f2e1d805/cmake-4.4.0-py3-none-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:41021341a394406fa56d54dabe2eaa32ac7f74fde076720397872bdc3f96a19d", size = 31451960, upload-time = "2026-07-10T20:49:02.31Z" }, + { url = "https://files.pythonhosted.org/packages/22/fc/33224d3f8310555e26934a119a681b76e6324601e5617b88515b2aecddd5/cmake-4.4.0-py3-none-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:825ce04c2873b4d1e6185d7cf8330d38658b00d72e56a375445241d14fe21ff7", size = 31208506, upload-time = "2026-07-10T20:49:07.954Z" }, + { url = "https://files.pythonhosted.org/packages/fe/86/640651cd15993ce76f54bf953cc39c1f0114f5d22960301b208887c0b8d5/cmake-4.4.0-py3-none-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:4329555c90091d10c4651272c36c8fe91b7af8c25655529c8276c33461d02957", size = 29087073, upload-time = "2026-07-10T20:49:12.731Z" }, + { url = "https://files.pythonhosted.org/packages/f8/8d/6f62747b52bf1b48f05f1bf187ea95bfbc6338d21692223f67db2576b944/cmake-4.4.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:51bcb2e65c0d5c1af4a749ba40a321b7436420c7359724ab46719004f3cd2149", size = 30215347, upload-time = "2026-07-10T20:49:18.265Z" }, + { url = "https://files.pythonhosted.org/packages/f1/5a/370b663877b0f58083fdcf1c5490604d0d4bf7750d63169e1c49c7035a5e/cmake-4.4.0-py3-none-manylinux_2_31_armv7l.whl", hash = "sha256:a70cafba0e4f7a741b8ef41fc8a58da0963512a0f505a38256ed0a2c70ef07eb", size = 27309126, upload-time = "2026-07-10T20:49:23.161Z" }, + { url = "https://files.pythonhosted.org/packages/2f/63/83bf7eacccf338d939098f5f6944eed3b27b7da2c56442eb7640c2468f7d/cmake-4.4.0-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:a550aaae137eaed453eb4493ceafa135f70da0b6660cd3ef05adbf9a2e9da629", size = 27419954, upload-time = "2026-07-10T20:49:28.13Z" }, + { url = "https://files.pythonhosted.org/packages/5e/f6/4a9158c97cbbc73a99102228914453f71a429cc05e54193bdb94306d6679/cmake-4.4.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:43d07406792836dc27d3d17f0ef927aa1f07f9cabf19674bf3daf64998a1a4c1", size = 39458539, upload-time = "2026-07-10T20:49:34.228Z" }, + { url = "https://files.pythonhosted.org/packages/29/8c/86cf5eb866dabc1e19c64ea0e2445504b32633a609d54ae78537a9374d11/cmake-4.4.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:efaca203845fdb611e2709fc88e39034d9596139e7ef8c87875ff8b63728576e", size = 36091712, upload-time = "2026-07-10T20:49:40.29Z" }, + { url = "https://files.pythonhosted.org/packages/1e/37/b23658343f7c00ced44813dd1dd272840c733601fb8c05d99e8e7b1f6246/cmake-4.4.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:2df0e65b29fd68067ace39a5405ce334a6f3a738ae59f9ca50f79bee178d1ae0", size = 42227957, upload-time = "2026-07-10T20:49:46.901Z" }, + { url = "https://files.pythonhosted.org/packages/f2/b4/f197a34feaee62b5ffd0091cce8bb89b46420ae322fd0ba503829b08f1a0/cmake-4.4.0-py3-none-musllinux_1_2_ppc64le.whl", hash = "sha256:3e9260372bbdc68f4b575548ca92ba02c459ed6acfc1903fae49d8945afe529b", size = 41381016, upload-time = "2026-07-10T20:49:53.213Z" }, + { url = "https://files.pythonhosted.org/packages/97/d9/6deaf3453ce1c60d72cdfea8b3fe05cf367578f5610ed96d5548e3019970/cmake-4.4.0-py3-none-musllinux_1_2_riscv64.whl", hash = "sha256:fc30f2cffc29951ba996db0f73a5f6cb4e4ef96be983199a10c2eeb25c4f151e", size = 36306195, upload-time = "2026-07-10T20:49:59.07Z" }, + { url = "https://files.pythonhosted.org/packages/8b/0f/2c397d6712fac6ed892d2614ed08947b78714aeca53ccb6c58b62730304c/cmake-4.4.0-py3-none-musllinux_1_2_s390x.whl", hash = "sha256:66271dacfa14a1a6abd845b65ae76dc14491716c3fdaa499745e6d16f41712c8", size = 38652910, upload-time = "2026-07-10T20:50:05.141Z" }, + { url = "https://files.pythonhosted.org/packages/f1/85/24cb4bf15eecfb7bf8092bccbe6263c4ff1cd22ce88077fb5131f5279d16/cmake-4.4.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:842de4296c7fb651799e6e3c1f8dc2355d3539067507f5c8012d1dc4625657b2", size = 39428686, upload-time = "2026-07-10T20:50:11.299Z" }, + { url = "https://files.pythonhosted.org/packages/ca/51/f2057dcfdd2d87e98a7ddd4347111165612780a9da872195f538d947e869/cmake-4.4.0-py3-none-win32.whl", hash = "sha256:8e245108da252fc67410b549f025d578d7689f99366e00d8cea1f6a1c49fc1a9", size = 38759093, upload-time = "2026-07-10T20:50:17.491Z" }, + { url = "https://files.pythonhosted.org/packages/6d/cb/7118b720745d76a6dca9ddf3c096fb90c71a2841b8ca493218202fc9d40a/cmake-4.4.0-py3-none-win_amd64.whl", hash = "sha256:13209a4d89d554c0b5623ed1158024b045e468bbb912c3f491de5e957b940858", size = 42309353, upload-time = "2026-07-10T20:50:23.85Z" }, + { url = "https://files.pythonhosted.org/packages/04/8f/2818561f47151e0ffdfe44356c160038b5ae4e9025c0a3e61e36cd685489/cmake-4.4.0-py3-none-win_arm64.whl", hash = "sha256:7d481da3868e1b5831db34573c061daa8534a584baaffac93b1348b92e493f20", size = 40473618, upload-time = "2026-07-10T20:50:30.352Z" }, +] + [[package]] name = "colorama" version = "0.4.6" @@ -39,10 +59,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/04/40/a2ea4d8f032bfd6c220d50b6f92cd61f33d48f31959da39ed1b178cfee54/cuda_bindings-13.3.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a99c3b8d584f266c616bd0f30c7cd83e33553e3ef2abad41ff5a74fbc033a69a", size = 6653764, upload-time = "2026-05-27T03:59:09.981Z" }, { url = "https://files.pythonhosted.org/packages/ae/a0/156efe7816699c2de1ea2395031db7d010b7af23c243563a3ee6f0ecc1de/cuda_bindings-13.3.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a7698fcc4577aa96372866f4d0c9a6cf686cd5c90eab94581c29d37fe6600542", size = 5914803, upload-time = "2026-05-27T03:59:14.011Z" }, { url = "https://files.pythonhosted.org/packages/51/91/510aae64d53227b5b36db6bfaea41514b66d92cd65ddc43aa49566f18313/cuda_bindings-13.3.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:abd908f651160d12c45c5714a38ee102a1173a55433c0d1509ec0e8293beb4a6", size = 6472506, upload-time = "2026-05-27T03:59:16.551Z" }, - { url = "https://files.pythonhosted.org/packages/01/53/2ef49e5b3734a5531b2ba5d726cba724d9cbb262404e586ed61070604826/cuda_bindings-13.3.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a801fa30e75d25b74252123aefc746b6c4275624d2b8640632dd1dfeeaa1f88", size = 6008814, upload-time = "2026-05-27T03:59:20.921Z" }, - { url = "https://files.pythonhosted.org/packages/2f/cb/3a9fcf0651e0a49b4d0f1955837ce079245b27086c22fb2f253039bdf324/cuda_bindings-13.3.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:94d40ef7b4bdd9dce0244a1baa132e0e538f1eb2c0d162fb3648a15e48515365", size = 6531477, upload-time = "2026-05-27T03:59:23.391Z" }, - { url = "https://files.pythonhosted.org/packages/2b/0f/6987c5ee98f117317a85650ddc79480a3fa59a573ae1c923d0722b56ae71/cuda_bindings-13.3.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e5911bea15810b749a8077f8c45423ed785d51618b8e8664dea1fc8f5a2a76c8", size = 5807073, upload-time = "2026-05-27T03:59:28.218Z" }, - { url = "https://files.pythonhosted.org/packages/f6/ab/46ceee07dc19f18a5d1c28d592750ed9dbdc803077eb083576a442c9938c/cuda_bindings-13.3.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e2870fed7707a37f8af0c02364b05f355ebe8921604e8c68eb56cf66867e0798", size = 6354325, upload-time = "2026-05-27T03:59:30.715Z" }, ] [[package]] @@ -163,6 +179,7 @@ name = "ludus-renderer" version = "0.9.0" source = { editable = "." } dependencies = [ + { name = "cmake" }, { name = "ninja" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.4.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, @@ -189,6 +206,7 @@ video-codec = [ [package.metadata] requires-dist = [ + { name = "cmake", specifier = ">=4.0" }, { name = "imageio-ffmpeg", marker = "extra == 'dev'", specifier = ">=0.5" }, { name = "ninja", specifier = ">=1.13.0" }, { name = "numpy", specifier = ">=1.24" }, @@ -266,28 +284,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612, upload-time = "2025-09-27T18:37:02.639Z" }, { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200, upload-time = "2025-09-27T18:37:03.582Z" }, { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973, upload-time = "2025-09-27T18:37:04.929Z" }, - { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" }, - { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" }, - { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" }, - { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" }, - { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" }, - { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" }, - { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" }, - { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" }, - { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747, upload-time = "2025-09-27T18:37:15.36Z" }, - { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341, upload-time = "2025-09-27T18:37:16.496Z" }, - { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073, upload-time = "2025-09-27T18:37:17.476Z" }, - { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" }, - { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" }, - { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" }, - { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" }, - { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" }, - { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" }, - { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" }, - { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" }, - { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" }, - { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" }, - { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, ] [[package]] @@ -316,15 +312,9 @@ name = "networkx" version = "3.6.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version == '3.11.*' and sys_platform == 'emscripten'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.11' and sys_platform == 'win32'", + "python_full_version >= '3.11' and sys_platform == 'emscripten'", + "python_full_version >= '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] sdist = { url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", size = 2517025, upload-time = "2025-12-08T17:02:39.908Z" } wheels = [ @@ -427,15 +417,9 @@ name = "numpy" version = "2.4.4" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version == '3.11.*' and sys_platform == 'emscripten'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.11' and sys_platform == 'win32'", + "python_full_version >= '3.11' and sys_platform == 'emscripten'", + "python_full_version >= '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] sdist = { url = "https://files.pythonhosted.org/packages/d7/9f/b8cef5bffa569759033adda9481211426f12f53299629b410340795c2514/numpy-2.4.4.tar.gz", hash = "sha256:2d390634c5182175533585cc89f3608a4682ccb173cc9bb940b2881c8d6f8fa0", size = 20731587, upload-time = "2026-03-29T13:22:01.298Z" } wheels = [ @@ -482,27 +466,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c2/c9/fcfd5d0639222c6eac7f304829b04892ef51c96a75d479214d77e3ce6e33/numpy-2.4.4-cp313-cp313t-win32.whl", hash = "sha256:9c585a1790d5436a5374bac930dad6ed244c046ed91b2b2a3634eb2971d21008", size = 6083477, upload-time = "2026-03-29T13:20:20.195Z" }, { url = "https://files.pythonhosted.org/packages/d5/e3/3938a61d1c538aaec8ed6fd6323f57b0c2d2d2219512434c5c878db76553/numpy-2.4.4-cp313-cp313t-win_amd64.whl", hash = "sha256:93e15038125dc1e5345d9b5b68aa7f996ec33b98118d18c6ca0d0b7d6198b7e8", size = 12457487, upload-time = "2026-03-29T13:20:22.946Z" }, { url = "https://files.pythonhosted.org/packages/97/6a/7e345032cc60501721ef94e0e30b60f6b0bd601f9174ebd36389a2b86d40/numpy-2.4.4-cp313-cp313t-win_arm64.whl", hash = "sha256:0dfd3f9d3adbe2920b68b5cd3d51444e13a10792ec7154cd0a2f6e74d4ab3233", size = 10292002, upload-time = "2026-03-29T13:20:25.909Z" }, - { url = "https://files.pythonhosted.org/packages/6e/06/c54062f85f673dd5c04cbe2f14c3acb8c8b95e3384869bb8cc9bff8cb9df/numpy-2.4.4-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:f169b9a863d34f5d11b8698ead99febeaa17a13ca044961aa8e2662a6c7766a0", size = 16684353, upload-time = "2026-03-29T13:20:29.504Z" }, - { url = "https://files.pythonhosted.org/packages/4c/39/8a320264a84404c74cc7e79715de85d6130fa07a0898f67fb5cd5bd79908/numpy-2.4.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2483e4584a1cb3092da4470b38866634bafb223cbcd551ee047633fd2584599a", size = 14704914, upload-time = "2026-03-29T13:20:33.547Z" }, - { url = "https://files.pythonhosted.org/packages/91/fb/287076b2614e1d1044235f50f03748f31fa287e3dbe6abeb35cdfa351eca/numpy-2.4.4-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:2d19e6e2095506d1736b7d80595e0f252d76b89f5e715c35e06e937679ea7d7a", size = 5210005, upload-time = "2026-03-29T13:20:36.45Z" }, - { url = "https://files.pythonhosted.org/packages/63/eb/fcc338595309910de6ecabfcef2419a9ce24399680bfb149421fa2df1280/numpy-2.4.4-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:6a246d5914aa1c820c9443ddcee9c02bec3e203b0c080349533fae17727dfd1b", size = 6544974, upload-time = "2026-03-29T13:20:39.014Z" }, - { url = "https://files.pythonhosted.org/packages/44/5d/e7e9044032a716cdfaa3fba27a8e874bf1c5f1912a1ddd4ed071bf8a14a6/numpy-2.4.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:989824e9faf85f96ec9c7761cd8d29c531ad857bfa1daa930cba85baaecf1a9a", size = 15684591, upload-time = "2026-03-29T13:20:42.146Z" }, - { url = "https://files.pythonhosted.org/packages/98/7c/21252050676612625449b4807d6b695b9ce8a7c9e1c197ee6216c8a65c7c/numpy-2.4.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:27a8d92cd10f1382a67d7cf4db7ce18341b66438bdd9f691d7b0e48d104c2a9d", size = 16637700, upload-time = "2026-03-29T13:20:46.204Z" }, - { url = "https://files.pythonhosted.org/packages/b1/29/56d2bbef9465db24ef25393383d761a1af4f446a1df9b8cded4fe3a5a5d7/numpy-2.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e44319a2953c738205bf3354537979eaa3998ed673395b964c1176083dd46252", size = 17035781, upload-time = "2026-03-29T13:20:50.242Z" }, - { url = "https://files.pythonhosted.org/packages/e3/2b/a35a6d7589d21f44cea7d0a98de5ddcbb3d421b2622a5c96b1edf18707c3/numpy-2.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e892aff75639bbef0d2a2cfd55535510df26ff92f63c92cd84ef8d4ba5a5557f", size = 18362959, upload-time = "2026-03-29T13:20:54.019Z" }, - { url = "https://files.pythonhosted.org/packages/64/c9/d52ec581f2390e0f5f85cbfd80fb83d965fc15e9f0e1aec2195faa142cde/numpy-2.4.4-cp314-cp314-win32.whl", hash = "sha256:1378871da56ca8943c2ba674530924bb8ca40cd228358a3b5f302ad60cf875fc", size = 6008768, upload-time = "2026-03-29T13:20:56.912Z" }, - { url = "https://files.pythonhosted.org/packages/fa/22/4cc31a62a6c7b74a8730e31a4274c5dc80e005751e277a2ce38e675e4923/numpy-2.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:715d1c092715954784bc79e1174fc2a90093dc4dc84ea15eb14dad8abdcdeb74", size = 12449181, upload-time = "2026-03-29T13:20:59.548Z" }, - { url = "https://files.pythonhosted.org/packages/70/2e/14cda6f4d8e396c612d1bf97f22958e92148801d7e4f110cabebdc0eef4b/numpy-2.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:2c194dd721e54ecad9ad387c1d35e63dce5c4450c6dc7dd5611283dda239aabb", size = 10496035, upload-time = "2026-03-29T13:21:02.524Z" }, - { url = "https://files.pythonhosted.org/packages/b1/e8/8fed8c8d848d7ecea092dc3469643f9d10bc3a134a815a3b033da1d2039b/numpy-2.4.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2aa0613a5177c264ff5921051a5719d20095ea586ca88cc802c5c218d1c67d3e", size = 14824958, upload-time = "2026-03-29T13:21:05.671Z" }, - { url = "https://files.pythonhosted.org/packages/05/1a/d8007a5138c179c2bf33ef44503e83d70434d2642877ee8fbb230e7c0548/numpy-2.4.4-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:42c16925aa5a02362f986765f9ebabf20de75cdefdca827d14315c568dcab113", size = 5330020, upload-time = "2026-03-29T13:21:08.635Z" }, - { url = "https://files.pythonhosted.org/packages/99/64/ffb99ac6ae93faf117bcbd5c7ba48a7f45364a33e8e458545d3633615dda/numpy-2.4.4-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:874f200b2a981c647340f841730fc3a2b54c9d940566a3c4149099591e2c4c3d", size = 6650758, upload-time = "2026-03-29T13:21:10.949Z" }, - { url = "https://files.pythonhosted.org/packages/6e/6e/795cc078b78a384052e73b2f6281ff7a700e9bf53bcce2ee579d4f6dd879/numpy-2.4.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c9b39d38a9bd2ae1becd7eac1303d031c5c110ad31f2b319c6e7d98b135c934d", size = 15729948, upload-time = "2026-03-29T13:21:14.047Z" }, - { url = "https://files.pythonhosted.org/packages/5f/86/2acbda8cc2af5f3d7bfc791192863b9e3e19674da7b5e533fded124d1299/numpy-2.4.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b268594bccac7d7cf5844c7732e3f20c50921d94e36d7ec9b79e9857694b1b2f", size = 16679325, upload-time = "2026-03-29T13:21:17.561Z" }, - { url = "https://files.pythonhosted.org/packages/bc/59/cafd83018f4aa55e0ac6fa92aa066c0a1877b77a615ceff1711c260ffae8/numpy-2.4.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ac6b31e35612a26483e20750126d30d0941f949426974cace8e6b5c58a3657b0", size = 17084883, upload-time = "2026-03-29T13:21:21.106Z" }, - { url = "https://files.pythonhosted.org/packages/f0/85/a42548db84e65ece46ab2caea3d3f78b416a47af387fcbb47ec28e660dc2/numpy-2.4.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8e3ed142f2728df44263aaf5fb1f5b0b99f4070c553a0d7f033be65338329150", size = 18403474, upload-time = "2026-03-29T13:21:24.828Z" }, - { url = "https://files.pythonhosted.org/packages/ed/ad/483d9e262f4b831000062e5d8a45e342166ec8aaa1195264982bca267e62/numpy-2.4.4-cp314-cp314t-win32.whl", hash = "sha256:dddbbd259598d7240b18c9d87c56a9d2fb3b02fe266f49a7c101532e78c1d871", size = 6155500, upload-time = "2026-03-29T13:21:28.205Z" }, - { url = "https://files.pythonhosted.org/packages/c7/03/2fc4e14c7bd4ff2964b74ba90ecb8552540b6315f201df70f137faa5c589/numpy-2.4.4-cp314-cp314t-win_amd64.whl", hash = "sha256:a7164afb23be6e37ad90b2f10426149fd75aee07ca55653d2aa41e66c4ef697e", size = 12637755, upload-time = "2026-03-29T13:21:31.107Z" }, - { url = "https://files.pythonhosted.org/packages/58/78/548fb8e07b1a341746bfbecb32f2c268470f45fa028aacdbd10d9bc73aab/numpy-2.4.4-cp314-cp314t-win_arm64.whl", hash = "sha256:ba203255017337d39f89bdd58417f03c4426f12beed0440cfd933cb15f8669c7", size = 10566643, upload-time = "2026-03-29T13:21:34.339Z" }, { url = "https://files.pythonhosted.org/packages/6b/33/8fae8f964a4f63ed528264ddf25d2b683d0b663e3cba26961eb838a7c1bd/numpy-2.4.4-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:58c8b5929fcb8287cbd6f0a3fae19c6e03a5c48402ae792962ac465224a629a4", size = 16854491, upload-time = "2026-03-29T13:21:38.03Z" }, { url = "https://files.pythonhosted.org/packages/bc/d0/1aabee441380b981cf8cdda3ae7a46aa827d1b5a8cce84d14598bc94d6d9/numpy-2.4.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:eea7ac5d2dce4189771cedb559c738a71512768210dc4e4753b107a2048b3d0e", size = 14895830, upload-time = "2026-03-29T13:21:41.509Z" }, { url = "https://files.pythonhosted.org/packages/a5/b8/aafb0d1065416894fccf4df6b49ef22b8db045187949545bced89c034b8e/numpy-2.4.4-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:51fc224f7ca4d92656d5a5eb315f12eb5fe2c97a66249aa7b5f562528a3be38c", size = 5400927, upload-time = "2026-03-29T13:21:44.747Z" }, @@ -708,11 +671,11 @@ wheels = [ [[package]] name = "packaging" -version = "26.2" +version = "23.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661", size = 228134, upload-time = "2026-04-24T20:15:23.917Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fb/2b/9b9c33ffed44ee921d0967086d653047286054117d584f1b1a7c22ceaf7b/packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5", size = 146714, upload-time = "2023-10-01T13:50:05.279Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195, upload-time = "2026-04-24T20:15:22.081Z" }, + { url = "https://files.pythonhosted.org/packages/ec/1a/610693ac4ee14fcdf2d9bf3c493370e4f2ef7ae2e19217d7a237ff42367d/packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7", size = 53011, upload-time = "2023-10-01T13:50:03.745Z" }, ] [[package]] @@ -764,19 +727,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/44/23/78d645adc35d94d1ac4f2a3c4112ab6f5b8999f4898b8cdf01252f8df4a9/pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110", size = 12121912, upload-time = "2025-09-29T23:23:05.042Z" }, { url = "https://files.pythonhosted.org/packages/53/da/d10013df5e6aaef6b425aa0c32e1fc1f3e431e4bcabd420517dceadce354/pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86", size = 12712160, upload-time = "2025-09-29T23:23:28.57Z" }, { url = "https://files.pythonhosted.org/packages/bd/17/e756653095a083d8a37cbd816cb87148debcfcd920129b25f99dd8d04271/pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc", size = 13199233, upload-time = "2025-09-29T23:24:24.876Z" }, - { url = "https://files.pythonhosted.org/packages/04/fd/74903979833db8390b73b3a8a7d30d146d710bd32703724dd9083950386f/pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0", size = 11540635, upload-time = "2025-09-29T23:25:52.486Z" }, - { url = "https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593", size = 10759079, upload-time = "2025-09-29T23:26:33.204Z" }, - { url = "https://files.pythonhosted.org/packages/ca/05/d01ef80a7a3a12b2f8bbf16daba1e17c98a2f039cbc8e2f77a2c5a63d382/pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c", size = 11814049, upload-time = "2025-09-29T23:27:15.384Z" }, - { url = "https://files.pythonhosted.org/packages/15/b2/0e62f78c0c5ba7e3d2c5945a82456f4fac76c480940f805e0b97fcbc2f65/pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b", size = 12332638, upload-time = "2025-09-29T23:27:51.625Z" }, - { url = "https://files.pythonhosted.org/packages/c5/33/dd70400631b62b9b29c3c93d2feee1d0964dc2bae2e5ad7a6c73a7f25325/pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6", size = 12886834, upload-time = "2025-09-29T23:28:21.289Z" }, - { url = "https://files.pythonhosted.org/packages/d3/18/b5d48f55821228d0d2692b34fd5034bb185e854bdb592e9c640f6290e012/pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3", size = 13409925, upload-time = "2025-09-29T23:28:58.261Z" }, - { url = "https://files.pythonhosted.org/packages/a6/3d/124ac75fcd0ecc09b8fdccb0246ef65e35b012030defb0e0eba2cbbbe948/pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5", size = 11109071, upload-time = "2025-09-29T23:32:27.484Z" }, - { url = "https://files.pythonhosted.org/packages/89/9c/0e21c895c38a157e0faa1fb64587a9226d6dd46452cac4532d80c3c4a244/pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec", size = 12048504, upload-time = "2025-09-29T23:29:31.47Z" }, - { url = "https://files.pythonhosted.org/packages/d7/82/b69a1c95df796858777b68fbe6a81d37443a33319761d7c652ce77797475/pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7", size = 11410702, upload-time = "2025-09-29T23:29:54.591Z" }, - { url = "https://files.pythonhosted.org/packages/f9/88/702bde3ba0a94b8c73a0181e05144b10f13f29ebfc2150c3a79062a8195d/pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450", size = 11634535, upload-time = "2025-09-29T23:30:21.003Z" }, - { url = "https://files.pythonhosted.org/packages/a4/1e/1bac1a839d12e6a82ec6cb40cda2edde64a2013a66963293696bbf31fbbb/pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5", size = 12121582, upload-time = "2025-09-29T23:30:43.391Z" }, - { url = "https://files.pythonhosted.org/packages/44/91/483de934193e12a3b1d6ae7c8645d083ff88dec75f46e827562f1e4b4da6/pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788", size = 12699963, upload-time = "2025-09-29T23:31:10.009Z" }, - { url = "https://files.pythonhosted.org/packages/70/44/5191d2e4026f86a2a109053e194d3ba7a31a2d10a9c2348368c63ed4e85a/pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87", size = 13202175, upload-time = "2025-09-29T23:31:59.173Z" }, ] [[package]] @@ -784,15 +734,9 @@ name = "pandas" version = "3.0.3" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version == '3.11.*' and sys_platform == 'emscripten'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.11' and sys_platform == 'win32'", + "python_full_version >= '3.11' and sys_platform == 'emscripten'", + "python_full_version >= '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ { name = "numpy", version = "2.4.4", source = { registry = "https://pypi.org/simple" } }, @@ -832,22 +776,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e9/21/ea191195e587b18cf682e97f433f81b2d0fbe341380e80a3e0d6e4403c8e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d26cbe1fcfc12e8fd900e2454163e466b2d3af84f7c75481df7683ffc073d870", size = 11350796, upload-time = "2026-05-11T18:53:32.056Z" }, { url = "https://files.pythonhosted.org/packages/64/69/f0eaaf54939f0e8c6768fd06be9af2cef9b36048b96dfb9e1b2c685a807e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e91cec1879ada0624fc3dc9953c5cbd60208e59c0db28f540c5d6d47502422f", size = 11799741, upload-time = "2026-05-11T18:53:34.985Z" }, { url = "https://files.pythonhosted.org/packages/45/a4/865e0e510cae5fc2194de4db28be638952de942571ba9125934fd9c01d47/pandas-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:08d789b41f87e0905880e293cedf6197ce71fe67cc081358b1e148a491b9bd13", size = 10499958, upload-time = "2026-05-11T18:53:37.857Z" }, - { url = "https://files.pythonhosted.org/packages/86/54/effdcc3c0ff7a08037889200e148ebe94c16c4f653be078c7b3675955df1/pandas-3.0.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3650109c0f22879df8bd6179ab9ee3d7f1d1d4e7e0094a3f0032d9f51e2e64ac", size = 10336065, upload-time = "2026-05-11T18:53:41.099Z" }, - { url = "https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bab900348131a7db1f69a7309ef141fd5680f1487094193bcbbb61791573bf8f", size = 9926101, upload-time = "2026-05-11T18:53:43.515Z" }, - { url = "https://files.pythonhosted.org/packages/ae/e9/e35cf11c8a136e757b956f5f0efdcaa50aecde85ea055f1898dfc68262f3/pandas-3.0.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba7e08b9ac1d54569cd1e256e3668975ed624d6826f7b68df0342b012007bddb", size = 10457553, upload-time = "2026-05-11T18:53:46.394Z" }, - { url = "https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d71c63ae4ebdbf70209742096f1fc46a83a0613c99d4b23766cced9ff8cd62a", size = 10914065, upload-time = "2026-05-11T18:53:49.134Z" }, - { url = "https://files.pythonhosted.org/packages/c4/c2/1ef644445fcd72e3627bceec77e3560636f87ddce4ed841afe76b83b5bf9/pandas-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e3a2ec42c98ffa2565a67e08e218d06d72576d758d90facb7c00805194d8f360", size = 11459188, upload-time = "2026-05-11T18:53:52.527Z" }, - { url = "https://files.pythonhosted.org/packages/7e/49/4d8d4f42cbc9c4adc7a1870f269c02cbd6cd40d059622c06fb298addcbad/pandas-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:335f62418ed562cfc3c49e9e196375c28b729dcef8543abf4f9438e381bf3c76", size = 11982966, upload-time = "2026-05-11T18:53:55.043Z" }, - { url = "https://files.pythonhosted.org/packages/38/55/792619469bab9882d8bbd5865d45a72f6478762d04a9af4bf0d08c503e95/pandas-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:3c20a521bbb85902f79f7270c80a59e1b5452d96d170c034f207181870f97ac5", size = 9876755, upload-time = "2026-05-11T18:53:58.067Z" }, - { url = "https://files.pythonhosted.org/packages/2a/af/33c469653b0ba03b50c3a98192d4c07f0c75c66b263ceb097fce0ee97d31/pandas-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:a2d2dff8a04f3917b55ab3910c32990f8ddf7eceba114947838cefa976a68977", size = 9198658, upload-time = "2026-05-11T18:54:00.733Z" }, - { url = "https://files.pythonhosted.org/packages/a2/fa/b8c257bd76b8bd060c3a9151c1fca05e9b9c5e3af5d0f549c0356f6d143d/pandas-3.0.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:0d589105b3c14645af1738ff279b2995102d8f7a03b0a66dc8d95550eb513e04", size = 10787242, upload-time = "2026-05-11T18:54:03.564Z" }, - { url = "https://files.pythonhosted.org/packages/54/eb/f19206ffb0bf1919002969aa448b4702c6594845156a6f8050674855aac3/pandas-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:13fc1e853d9e04743d11ba75a985ccbc2a317fe07d8af61e445a6fd24dacd6a6", size = 10436369, upload-time = "2026-05-11T18:54:06.311Z" }, - { url = "https://files.pythonhosted.org/packages/fd/24/c7c39fb4fe22b71a0c2d78bf0c585c600092d85f94f086d2b3b2f6ca27e2/pandas-3.0.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:819959dab7bbd0049c15623fbac4e29a191b9528160a61fb1032242d8ced2d9c", size = 10358306, upload-time = "2026-05-11T18:54:09.085Z" }, - { url = "https://files.pythonhosted.org/packages/16/ec/dd2a9eb7fa1204df88c0864164e35b228ac581062ac612ba0a67fd812e4c/pandas-3.0.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:60ae316d3fd75d1858d450d0db0103ea2be3e7d4a95ec2f064f7e2ae63f7b028", size = 10758394, upload-time = "2026-05-11T18:54:11.956Z" }, - { url = "https://files.pythonhosted.org/packages/95/6e/00c61ea8e85b4f6d8d35e11852a1a4998fc7fafc91c6a602d1cc9c972d64/pandas-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bd3a518890b400d32f9023722dc9a9a5c969f00b415419a3c06c043f09bb5d7d", size = 11375717, upload-time = "2026-05-11T18:54:14.539Z" }, - { url = "https://files.pythonhosted.org/packages/31/89/8fc1c268969fac43688d65fd92e67df24bd128d53cb4d2eee534cd307399/pandas-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9c39be2d709d01fa972a0cabc522389fceca4f3969332ba25a7d6c5802cf976a", size = 11828897, upload-time = "2026-05-11T18:54:17.146Z" }, - { url = "https://files.pythonhosted.org/packages/56/3b/e7d20dea247a3e6dc0bd8a6953854afbedc03951def4e7371e05e7263e25/pandas-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4db8c527972a821cf5286b40ccc57642a39bc62e62022b42f99f8a67fca8c3a1", size = 10900855, upload-time = "2026-05-11T18:54:19.72Z" }, - { url = "https://files.pythonhosted.org/packages/0f/54/68a0978d1ef8502b8492099beaa6e7a0c1b32e3b5d4f677f5810cb08711c/pandas-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b2c95f8bfc1ee412bf482605d7bfd30c12d1d26bd59fdd91efeef1d4718decb1", size = 9466464, upload-time = "2026-05-11T18:54:22.754Z" }, ] [[package]] @@ -914,31 +842,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ad/4b/926ab182c07fccae9fcb120043464e1ff1564775ec8864f21a0ebce6ac25/pillow-12.2.0-cp313-cp313t-win32.whl", hash = "sha256:ee3120ae9dff32f121610bb08e4313be87e03efeadfc6c0d18f89127e24d0c24", size = 6379592, upload-time = "2026-04-01T14:44:40.336Z" }, { url = "https://files.pythonhosted.org/packages/c2/c4/f9e476451a098181b30050cc4c9a3556b64c02cf6497ea421ac047e89e4b/pillow-12.2.0-cp313-cp313t-win_amd64.whl", hash = "sha256:325ca0528c6788d2a6c3d40e3568639398137346c3d6e66bb61db96b96511c98", size = 7085542, upload-time = "2026-04-01T14:44:43.251Z" }, { url = "https://files.pythonhosted.org/packages/00/a4/285f12aeacbe2d6dc36c407dfbbe9e96d4a80b0fb710a337f6d2ad978c75/pillow-12.2.0-cp313-cp313t-win_arm64.whl", hash = "sha256:2e5a76d03a6c6dcef67edabda7a52494afa4035021a79c8558e14af25313d453", size = 2465765, upload-time = "2026-04-01T14:44:45.996Z" }, - { url = "https://files.pythonhosted.org/packages/bf/98/4595daa2365416a86cb0d495248a393dfc84e96d62ad080c8546256cb9c0/pillow-12.2.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:3adc9215e8be0448ed6e814966ecf3d9952f0ea40eb14e89a102b87f450660d8", size = 4100848, upload-time = "2026-04-01T14:44:48.48Z" }, - { url = "https://files.pythonhosted.org/packages/0b/79/40184d464cf89f6663e18dfcf7ca21aae2491fff1a16127681bf1fa9b8cf/pillow-12.2.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:6a9adfc6d24b10f89588096364cc726174118c62130c817c2837c60cf08a392b", size = 4176515, upload-time = "2026-04-01T14:44:51.353Z" }, - { url = "https://files.pythonhosted.org/packages/b0/63/703f86fd4c422a9cf722833670f4f71418fb116b2853ff7da722ea43f184/pillow-12.2.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:6a6e67ea2e6feda684ed370f9a1c52e7a243631c025ba42149a2cc5934dec295", size = 3640159, upload-time = "2026-04-01T14:44:53.588Z" }, - { url = "https://files.pythonhosted.org/packages/71/e0/fb22f797187d0be2270f83500aab851536101b254bfa1eae10795709d283/pillow-12.2.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:2bb4a8d594eacdfc59d9e5ad972aa8afdd48d584ffd5f13a937a664c3e7db0ed", size = 5312185, upload-time = "2026-04-01T14:44:56.039Z" }, - { url = "https://files.pythonhosted.org/packages/ba/8c/1a9e46228571de18f8e28f16fabdfc20212a5d019f3e3303452b3f0a580d/pillow-12.2.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:80b2da48193b2f33ed0c32c38140f9d3186583ce7d516526d462645fd98660ae", size = 4695386, upload-time = "2026-04-01T14:44:58.663Z" }, - { url = "https://files.pythonhosted.org/packages/70/62/98f6b7f0c88b9addd0e87c217ded307b36be024d4ff8869a812b241d1345/pillow-12.2.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22db17c68434de69d8ecfc2fe821569195c0c373b25cccb9cbdacf2c6e53c601", size = 6280384, upload-time = "2026-04-01T14:45:01.5Z" }, - { url = "https://files.pythonhosted.org/packages/5e/03/688747d2e91cfbe0e64f316cd2e8005698f76ada3130d0194664174fa5de/pillow-12.2.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7b14cc0106cd9aecda615dd6903840a058b4700fcb817687d0ee4fc8b6e389be", size = 8091599, upload-time = "2026-04-01T14:45:04.5Z" }, - { url = "https://files.pythonhosted.org/packages/f6/35/577e22b936fcdd66537329b33af0b4ccfefaeabd8aec04b266528cddb33c/pillow-12.2.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8cbeb542b2ebc6fcdacabf8aca8c1a97c9b3ad3927d46b8723f9d4f033288a0f", size = 6396021, upload-time = "2026-04-01T14:45:07.117Z" }, - { url = "https://files.pythonhosted.org/packages/11/8d/d2532ad2a603ca2b93ad9f5135732124e57811d0168155852f37fbce2458/pillow-12.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4bfd07bc812fbd20395212969e41931001fd59eb55a60658b0e5710872e95286", size = 7083360, upload-time = "2026-04-01T14:45:09.763Z" }, - { url = "https://files.pythonhosted.org/packages/5e/26/d325f9f56c7e039034897e7380e9cc202b1e368bfd04d4cbe6a441f02885/pillow-12.2.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9aba9a17b623ef750a4d11b742cbafffeb48a869821252b30ee21b5e91392c50", size = 6507628, upload-time = "2026-04-01T14:45:12.378Z" }, - { url = "https://files.pythonhosted.org/packages/5f/f7/769d5632ffb0988f1c5e7660b3e731e30f7f8ec4318e94d0a5d674eb65a4/pillow-12.2.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:deede7c263feb25dba4e82ea23058a235dcc2fe1f6021025dc71f2b618e26104", size = 7209321, upload-time = "2026-04-01T14:45:15.122Z" }, - { url = "https://files.pythonhosted.org/packages/6a/7a/c253e3c645cd47f1aceea6a8bacdba9991bf45bb7dfe927f7c893e89c93c/pillow-12.2.0-cp314-cp314-win32.whl", hash = "sha256:632ff19b2778e43162304d50da0181ce24ac5bb8180122cbe1bf4673428328c7", size = 6479723, upload-time = "2026-04-01T14:45:17.797Z" }, - { url = "https://files.pythonhosted.org/packages/cd/8b/601e6566b957ca50e28725cb6c355c59c2c8609751efbecd980db44e0349/pillow-12.2.0-cp314-cp314-win_amd64.whl", hash = "sha256:4e6c62e9d237e9b65fac06857d511e90d8461a32adcc1b9065ea0c0fa3a28150", size = 7217400, upload-time = "2026-04-01T14:45:20.529Z" }, - { url = "https://files.pythonhosted.org/packages/d6/94/220e46c73065c3e2951bb91c11a1fb636c8c9ad427ac3ce7d7f3359b9b2f/pillow-12.2.0-cp314-cp314-win_arm64.whl", hash = "sha256:b1c1fbd8a5a1af3412a0810d060a78b5136ec0836c8a4ef9aa11807f2a22f4e1", size = 2554835, upload-time = "2026-04-01T14:45:23.162Z" }, - { url = "https://files.pythonhosted.org/packages/b6/ab/1b426a3974cb0e7da5c29ccff4807871d48110933a57207b5a676cccc155/pillow-12.2.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:57850958fe9c751670e49b2cecf6294acc99e562531f4bd317fa5ddee2068463", size = 5314225, upload-time = "2026-04-01T14:45:25.637Z" }, - { url = "https://files.pythonhosted.org/packages/19/1e/dce46f371be2438eecfee2a1960ee2a243bbe5e961890146d2dee1ff0f12/pillow-12.2.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d5d38f1411c0ed9f97bcb49b7bd59b6b7c314e0e27420e34d99d844b9ce3b6f3", size = 4698541, upload-time = "2026-04-01T14:45:28.355Z" }, - { url = "https://files.pythonhosted.org/packages/55/c3/7fbecf70adb3a0c33b77a300dc52e424dc22ad8cdc06557a2e49523b703d/pillow-12.2.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5c0a9f29ca8e79f09de89293f82fc9b0270bb4af1d58bc98f540cc4aedf03166", size = 6322251, upload-time = "2026-04-01T14:45:30.924Z" }, - { url = "https://files.pythonhosted.org/packages/1c/3c/7fbc17cfb7e4fe0ef1642e0abc17fc6c94c9f7a16be41498e12e2ba60408/pillow-12.2.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1610dd6c61621ae1cf811bef44d77e149ce3f7b95afe66a4512f8c59f25d9ebe", size = 8127807, upload-time = "2026-04-01T14:45:33.908Z" }, - { url = "https://files.pythonhosted.org/packages/ff/c3/a8ae14d6defd2e448493ff512fae903b1e9bd40b72efb6ec55ce0048c8ce/pillow-12.2.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a34329707af4f73cf1782a36cd2289c0368880654a2c11f027bcee9052d35dd", size = 6433935, upload-time = "2026-04-01T14:45:36.623Z" }, - { url = "https://files.pythonhosted.org/packages/6e/32/2880fb3a074847ac159d8f902cb43278a61e85f681661e7419e6596803ed/pillow-12.2.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8e9c4f5b3c546fa3458a29ab22646c1c6c787ea8f5ef51300e5a60300736905e", size = 7116720, upload-time = "2026-04-01T14:45:39.258Z" }, - { url = "https://files.pythonhosted.org/packages/46/87/495cc9c30e0129501643f24d320076f4cc54f718341df18cc70ec94c44e1/pillow-12.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:fb043ee2f06b41473269765c2feae53fc2e2fbf96e5e22ca94fb5ad677856f06", size = 6540498, upload-time = "2026-04-01T14:45:41.879Z" }, - { url = "https://files.pythonhosted.org/packages/18/53/773f5edca692009d883a72211b60fdaf8871cbef075eaa9d577f0a2f989e/pillow-12.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f278f034eb75b4e8a13a54a876cc4a5ab39173d2cdd93a638e1b467fc545ac43", size = 7239413, upload-time = "2026-04-01T14:45:44.705Z" }, - { url = "https://files.pythonhosted.org/packages/c9/e4/4b64a97d71b2a83158134abbb2f5bd3f8a2ea691361282f010998f339ec7/pillow-12.2.0-cp314-cp314t-win32.whl", hash = "sha256:6bb77b2dcb06b20f9f4b4a8454caa581cd4dd0643a08bacf821216a16d9c8354", size = 6482084, upload-time = "2026-04-01T14:45:47.568Z" }, - { url = "https://files.pythonhosted.org/packages/ba/13/306d275efd3a3453f72114b7431c877d10b1154014c1ebbedd067770d629/pillow-12.2.0-cp314-cp314t-win_amd64.whl", hash = "sha256:6562ace0d3fb5f20ed7290f1f929cae41b25ae29528f2af1722966a0a02e2aa1", size = 7225152, upload-time = "2026-04-01T14:45:50.032Z" }, - { url = "https://files.pythonhosted.org/packages/ff/6e/cf826fae916b8658848d7b9f38d88da6396895c676e8086fc0988073aaf8/pillow-12.2.0-cp314-cp314t-win_arm64.whl", hash = "sha256:aa88ccfe4e32d362816319ed727a004423aab09c5cea43c01a4b435643fa34eb", size = 2556579, upload-time = "2026-04-01T14:45:52.529Z" }, { url = "https://files.pythonhosted.org/packages/4e/b7/2437044fb910f499610356d1352e3423753c98e34f915252aafecc64889f/pillow-12.2.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0538bd5e05efec03ae613fd89c4ce0368ecd2ba239cc25b9f9be7ed426b0af1f", size = 5273969, upload-time = "2026-04-01T14:45:55.538Z" }, { url = "https://files.pythonhosted.org/packages/f6/f4/8316e31de11b780f4ac08ef3654a75555e624a98db1056ecb2122d008d5a/pillow-12.2.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:394167b21da716608eac917c60aa9b969421b5dcbbe02ae7f013e7b85811c69d", size = 4659674, upload-time = "2026-04-01T14:45:58.093Z" }, { url = "https://files.pythonhosted.org/packages/d4/37/664fca7201f8bb2aa1d20e2c3d5564a62e6ae5111741966c8319ca802361/pillow-12.2.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5d04bfa02cc2d23b497d1e90a0f927070043f6cbf303e738300532379a4b4e0f", size = 5288479, upload-time = "2026-04-01T14:46:01.141Z" }, @@ -998,20 +901,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5f/eb/771f9ecb0c65e73fe9dccdd1717901b9594f08c4515d000c7c62df573811/pyarrow-24.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:641f795b361874ac9da5294f8f443dfdbee355cf2bd9e3b8d97aaac2306b9b37", size = 49451819, upload-time = "2026-04-21T10:49:21.474Z" }, { url = "https://files.pythonhosted.org/packages/48/da/61ae89a88732f5a785646f3ec6125dbb640fa98a540eb2b9889caa561403/pyarrow-24.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8adc8e6ce5fccf5dc707046ae4914fd537def529709cc0d285d37a7f9cd442ca", size = 51909252, upload-time = "2026-04-21T10:49:31.164Z" }, { url = "https://files.pythonhosted.org/packages/cb/1a/8dd5cafab7b66573fa91c03d06d213356ad4edd71813aa75e08ce2b3a844/pyarrow-24.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:9b18371ad2f44044b81a8d23bc2d8a9b6a6226dca775e8e16cfee640473d6c5d", size = 27388127, upload-time = "2026-04-21T10:49:37.334Z" }, - { url = "https://files.pythonhosted.org/packages/ad/80/d022a34ff05d2cbedd8ccf841fc1f532ecfa9eb5ed1711b56d0e0ea71fc9/pyarrow-24.0.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:1cc9057f0319e26333b357e17f3c2c022f1a83739b48a88b25bfd5fa2dc18838", size = 35007997, upload-time = "2026-04-21T10:49:48.796Z" }, - { url = "https://files.pythonhosted.org/packages/1a/ff/f01485fda6f4e5d441afb8dd5e7681e4db18826c1e271852f5d3957d6a80/pyarrow-24.0.0-cp314-cp314-macosx_12_0_x86_64.whl", hash = "sha256:e6f1278ee4785b6db21229374a1c9e54ec7c549de5d1efc9630b6207de7e170b", size = 36678720, upload-time = "2026-04-21T10:49:55.858Z" }, - { url = "https://files.pythonhosted.org/packages/9e/c2/2d2d5fea814237923f71b36495211f20b43a1576f9a4d6da7e751a64ec6f/pyarrow-24.0.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:adbbedc55506cbdabb830890444fb856bfb0060c46c6f8026c6c2f2cf86ae795", size = 45741852, upload-time = "2026-04-21T10:50:04.624Z" }, - { url = "https://files.pythonhosted.org/packages/8e/3a/28ba9c1c1ebdbb5f1b94dfebb46f207e52e6a554b7fe4132540fde29a3a0/pyarrow-24.0.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:ae8a1145af31d903fa9bb166824d7abe9b4681a000b0159c9fb99c11bc11ad26", size = 48889852, upload-time = "2026-04-21T10:50:12.293Z" }, - { url = "https://files.pythonhosted.org/packages/df/51/4a389acfd31dca009f8fb82d7f510bb4130f2b3a8e18cf00194d0687d8ac/pyarrow-24.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d7027eba1df3b2069e2e8d80f644fa0918b68c46432af3d088ddd390d063ecde", size = 49445207, upload-time = "2026-04-21T10:50:20.677Z" }, - { url = "https://files.pythonhosted.org/packages/19/4b/0bab2b23d2ae901b1b9a03c0efd4b2d070256f8ce3fc43f6e58c167b2081/pyarrow-24.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e56a1ffe9bf7b727432b89104cc0849c21582949dd7bdcb34f17b2001a351a76", size = 51954117, upload-time = "2026-04-21T10:50:29.14Z" }, - { url = "https://files.pythonhosted.org/packages/29/88/f4e9145da0417b3d2c12035a8492b35ff4a3dbc653e614fcfb51d9dedb38/pyarrow-24.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:38be1808cdd068605b787e6ca9119b27eb275a0234e50212c3492331680c3b1e", size = 28001155, upload-time = "2026-04-21T10:51:22.337Z" }, - { url = "https://files.pythonhosted.org/packages/79/4f/46a49a63f43526da895b1a45bbb51d5baf8e4d77159f8528fc3e5490007f/pyarrow-24.0.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:418e48ce50a45a6a6c73c454677203a9c75c966cb1e92ca3370959185f197a05", size = 35250387, upload-time = "2026-04-21T10:50:35.552Z" }, - { url = "https://files.pythonhosted.org/packages/a0/da/d5e0cd5ef00796922404806d5f00325cdadc3441ce2c13fe7115f2df9a64/pyarrow-24.0.0-cp314-cp314t-macosx_12_0_x86_64.whl", hash = "sha256:2f16197705a230a78270cdd4ea8a1d57e86b2fdcbc34a1f6aebc72e65c986f9a", size = 36797102, upload-time = "2026-04-21T10:50:42.417Z" }, - { url = "https://files.pythonhosted.org/packages/34/c7/5904145b0a593a05236c882933d439b5720f0a145381179063722fbfc123/pyarrow-24.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:fb24ac194bfc5e86839d7dcd52092ee31e5fe6733fe11f5e3b06ef0812b20072", size = 45745118, upload-time = "2026-04-21T10:50:49.324Z" }, - { url = "https://files.pythonhosted.org/packages/13/d3/cca42fe166d1c6e4d5b80e530b7949104d10e17508a90ae202dac205ce2a/pyarrow-24.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:9700ebd9a51f5895ce75ff4ac4b3c47a7d4b42bc618be8e713e5d56bacf5f931", size = 48844765, upload-time = "2026-04-21T10:50:55.579Z" }, - { url = "https://files.pythonhosted.org/packages/b0/49/942c3b79878ba928324d1e17c274ed84581db8c0a749b24bcf4cbdf15bd3/pyarrow-24.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d8ddd2768da81d3ee08cfea9b597f4abb4e8e1dc8ae7e204b608d23a0d3ab699", size = 49471890, upload-time = "2026-04-21T10:51:02.439Z" }, - { url = "https://files.pythonhosted.org/packages/76/97/ff71431000a75d84135a1ace5ca4ba11726a231a8007bbb320a4c54075d5/pyarrow-24.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:61a3d7eaa97a14768b542f3d284dc6400dd2470d9f080708b13cd46b6ae18136", size = 51932250, upload-time = "2026-04-21T10:51:10.576Z" }, - { url = "https://files.pythonhosted.org/packages/51/be/6f79d55816d5c22557cf27533543d5d70dfe692adfbee4b99f2760674f38/pyarrow-24.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:c91d00057f23b8d353039520dc3a6c09d8608164c692e9f59a175a42b2ae0c19", size = 28131282, upload-time = "2026-04-21T10:51:16.815Z" }, ] [[package]] @@ -1142,15 +1031,9 @@ name = "scipy" version = "1.17.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version == '3.11.*' and sys_platform == 'emscripten'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.11' and sys_platform == 'win32'", + "python_full_version >= '3.11' and sys_platform == 'emscripten'", + "python_full_version >= '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ { name = "numpy", version = "2.4.4", source = { registry = "https://pypi.org/simple" } }, @@ -1197,26 +1080,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/bd/12/d19da97efde68ca1ee5538bb261d5d2c062f0c055575128f11a2730e3ac1/scipy-1.17.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:94055a11dfebe37c656e70317e1996dc197e1a15bbcc351bcdd4610e128fe1ca", size = 37665910, upload-time = "2026-02-23T00:20:34.743Z" }, { url = "https://files.pythonhosted.org/packages/06/1c/1172a88d507a4baaf72c5a09bb6c018fe2ae0ab622e5830b703a46cc9e44/scipy-1.17.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e30bdeaa5deed6bc27b4cc490823cd0347d7dae09119b8803ae576ea0ce52e4c", size = 36562980, upload-time = "2026-02-23T00:20:40.575Z" }, { url = "https://files.pythonhosted.org/packages/70/b0/eb757336e5a76dfa7911f63252e3b7d1de00935d7705cf772db5b45ec238/scipy-1.17.1-cp313-cp313t-win_arm64.whl", hash = "sha256:a720477885a9d2411f94a93d16f9d89bad0f28ca23c3f8daa521e2dcc3f44d49", size = 24856543, upload-time = "2026-02-23T00:20:45.313Z" }, - { url = "https://files.pythonhosted.org/packages/cf/83/333afb452af6f0fd70414dc04f898647ee1423979ce02efa75c3b0f2c28e/scipy-1.17.1-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:a48a72c77a310327f6a3a920092fa2b8fd03d7deaa60f093038f22d98e096717", size = 31584510, upload-time = "2026-02-23T00:21:01.015Z" }, - { url = "https://files.pythonhosted.org/packages/ed/a6/d05a85fd51daeb2e4ea71d102f15b34fedca8e931af02594193ae4fd25f7/scipy-1.17.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:45abad819184f07240d8a696117a7aacd39787af9e0b719d00285549ed19a1e9", size = 28170131, upload-time = "2026-02-23T00:21:05.888Z" }, - { url = "https://files.pythonhosted.org/packages/db/7b/8624a203326675d7746a254083a187398090a179335b2e4a20e2ddc46e83/scipy-1.17.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:3fd1fcdab3ea951b610dc4cef356d416d5802991e7e32b5254828d342f7b7e0b", size = 20342032, upload-time = "2026-02-23T00:21:09.904Z" }, - { url = "https://files.pythonhosted.org/packages/c9/35/2c342897c00775d688d8ff3987aced3426858fd89d5a0e26e020b660b301/scipy-1.17.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:7bdf2da170b67fdf10bca777614b1c7d96ae3ca5794fd9587dce41eb2966e866", size = 22678766, upload-time = "2026-02-23T00:21:14.313Z" }, - { url = "https://files.pythonhosted.org/packages/ef/f2/7cdb8eb308a1a6ae1e19f945913c82c23c0c442a462a46480ce487fdc0ac/scipy-1.17.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:adb2642e060a6549c343603a3851ba76ef0b74cc8c079a9a58121c7ec9fe2350", size = 32957007, upload-time = "2026-02-23T00:21:19.663Z" }, - { url = "https://files.pythonhosted.org/packages/0b/2e/7eea398450457ecb54e18e9d10110993fa65561c4f3add5e8eccd2b9cd41/scipy-1.17.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eee2cfda04c00a857206a4330f0c5e3e56535494e30ca445eb19ec624ae75118", size = 35221333, upload-time = "2026-02-23T00:21:25.278Z" }, - { url = "https://files.pythonhosted.org/packages/d9/77/5b8509d03b77f093a0d52e606d3c4f79e8b06d1d38c441dacb1e26cacf46/scipy-1.17.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d2650c1fb97e184d12d8ba010493ee7b322864f7d3d00d3f9bb97d9c21de4068", size = 35042066, upload-time = "2026-02-23T00:21:31.358Z" }, - { url = "https://files.pythonhosted.org/packages/f9/df/18f80fb99df40b4070328d5ae5c596f2f00fffb50167e31439e932f29e7d/scipy-1.17.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:08b900519463543aa604a06bec02461558a6e1cef8fdbb8098f77a48a83c8118", size = 37612763, upload-time = "2026-02-23T00:21:37.247Z" }, - { url = "https://files.pythonhosted.org/packages/4b/39/f0e8ea762a764a9dc52aa7dabcfad51a354819de1f0d4652b6a1122424d6/scipy-1.17.1-cp314-cp314-win_amd64.whl", hash = "sha256:3877ac408e14da24a6196de0ddcace62092bfc12a83823e92e49e40747e52c19", size = 37290984, upload-time = "2026-02-23T00:22:35.023Z" }, - { url = "https://files.pythonhosted.org/packages/7c/56/fe201e3b0f93d1a8bcf75d3379affd228a63d7e2d80ab45467a74b494947/scipy-1.17.1-cp314-cp314-win_arm64.whl", hash = "sha256:f8885db0bc2bffa59d5c1b72fad7a6a92d3e80e7257f967dd81abb553a90d293", size = 25192877, upload-time = "2026-02-23T00:22:39.798Z" }, - { url = "https://files.pythonhosted.org/packages/96/ad/f8c414e121f82e02d76f310f16db9899c4fcde36710329502a6b2a3c0392/scipy-1.17.1-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:1cc682cea2ae55524432f3cdff9e9a3be743d52a7443d0cba9017c23c87ae2f6", size = 31949750, upload-time = "2026-02-23T00:21:42.289Z" }, - { url = "https://files.pythonhosted.org/packages/7c/b0/c741e8865d61b67c81e255f4f0a832846c064e426636cd7de84e74d209be/scipy-1.17.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:2040ad4d1795a0ae89bfc7e8429677f365d45aa9fd5e4587cf1ea737f927b4a1", size = 28585858, upload-time = "2026-02-23T00:21:47.706Z" }, - { url = "https://files.pythonhosted.org/packages/ed/1b/3985219c6177866628fa7c2595bfd23f193ceebbe472c98a08824b9466ff/scipy-1.17.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:131f5aaea57602008f9822e2115029b55d4b5f7c070287699fe45c661d051e39", size = 20757723, upload-time = "2026-02-23T00:21:52.039Z" }, - { url = "https://files.pythonhosted.org/packages/c0/19/2a04aa25050d656d6f7b9e7b685cc83d6957fb101665bfd9369ca6534563/scipy-1.17.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:9cdc1a2fcfd5c52cfb3045feb399f7b3ce822abdde3a193a6b9a60b3cb5854ca", size = 23043098, upload-time = "2026-02-23T00:21:56.185Z" }, - { url = "https://files.pythonhosted.org/packages/86/f1/3383beb9b5d0dbddd030335bf8a8b32d4317185efe495374f134d8be6cce/scipy-1.17.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e3dcd57ab780c741fde8dc68619de988b966db759a3c3152e8e9142c26295ad", size = 33030397, upload-time = "2026-02-23T00:22:01.404Z" }, - { url = "https://files.pythonhosted.org/packages/41/68/8f21e8a65a5a03f25a79165ec9d2b28c00e66dc80546cf5eb803aeeff35b/scipy-1.17.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9956e4d4f4a301ebf6cde39850333a6b6110799d470dbbb1e25326ac447f52a", size = 35281163, upload-time = "2026-02-23T00:22:07.024Z" }, - { url = "https://files.pythonhosted.org/packages/84/8d/c8a5e19479554007a5632ed7529e665c315ae7492b4f946b0deb39870e39/scipy-1.17.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:a4328d245944d09fd639771de275701ccadf5f781ba0ff092ad141e017eccda4", size = 35116291, upload-time = "2026-02-23T00:22:12.585Z" }, - { url = "https://files.pythonhosted.org/packages/52/52/e57eceff0e342a1f50e274264ed47497b59e6a4e3118808ee58ddda7b74a/scipy-1.17.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a77cbd07b940d326d39a1d1b37817e2ee4d79cb30e7338f3d0cddffae70fcaa2", size = 37682317, upload-time = "2026-02-23T00:22:18.513Z" }, - { url = "https://files.pythonhosted.org/packages/11/2f/b29eafe4a3fbc3d6de9662b36e028d5f039e72d345e05c250e121a230dd4/scipy-1.17.1-cp314-cp314t-win_amd64.whl", hash = "sha256:eb092099205ef62cd1782b006658db09e2fed75bffcae7cc0d44052d8aa0f484", size = 37345327, upload-time = "2026-02-23T00:22:24.442Z" }, - { url = "https://files.pythonhosted.org/packages/07/39/338d9219c4e87f3e708f18857ecd24d22a0c3094752393319553096b98af/scipy-1.17.1-cp314-cp314t-win_arm64.whl", hash = "sha256:200e1050faffacc162be6a486a984a0497866ec54149a01270adc8a59b7c7d21", size = 25489165, upload-time = "2026-02-23T00:22:29.563Z" }, ] [[package]] @@ -1282,24 +1145,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/16/f9/229fa3434c590ddf6c0aa9af64d3af4b752540686cace29e6281e3458469/tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd", size = 97976, upload-time = "2026-03-25T20:21:39.316Z" }, { url = "https://files.pythonhosted.org/packages/6a/1e/71dfd96bcc1c775420cb8befe7a9d35f2e5b1309798f009dca17b7708c1e/tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36", size = 108755, upload-time = "2026-03-25T20:21:40.248Z" }, { url = "https://files.pythonhosted.org/packages/83/7a/d34f422a021d62420b78f5c538e5b102f62bea616d1d75a13f0a88acb04a/tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd", size = 95265, upload-time = "2026-03-25T20:21:41.219Z" }, - { url = "https://files.pythonhosted.org/packages/3c/fb/9a5c8d27dbab540869f7c1f8eb0abb3244189ce780ba9cd73f3770662072/tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf", size = 155726, upload-time = "2026-03-25T20:21:42.23Z" }, - { url = "https://files.pythonhosted.org/packages/62/05/d2f816630cc771ad836af54f5001f47a6f611d2d39535364f148b6a92d6b/tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac", size = 149859, upload-time = "2026-03-25T20:21:43.386Z" }, - { url = "https://files.pythonhosted.org/packages/ce/48/66341bdb858ad9bd0ceab5a86f90eddab127cf8b046418009f2125630ecb/tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662", size = 244713, upload-time = "2026-03-25T20:21:44.474Z" }, - { url = "https://files.pythonhosted.org/packages/df/6d/c5fad00d82b3c7a3ab6189bd4b10e60466f22cfe8a08a9394185c8a8111c/tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853", size = 252084, upload-time = "2026-03-25T20:21:45.62Z" }, - { url = "https://files.pythonhosted.org/packages/00/71/3a69e86f3eafe8c7a59d008d245888051005bd657760e96d5fbfb0b740c2/tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15", size = 247973, upload-time = "2026-03-25T20:21:46.937Z" }, - { url = "https://files.pythonhosted.org/packages/67/50/361e986652847fec4bd5e4a0208752fbe64689c603c7ae5ea7cb16b1c0ca/tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba", size = 256223, upload-time = "2026-03-25T20:21:48.467Z" }, - { url = "https://files.pythonhosted.org/packages/8c/9a/b4173689a9203472e5467217e0154b00e260621caa227b6fa01feab16998/tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6", size = 98973, upload-time = "2026-03-25T20:21:49.526Z" }, - { url = "https://files.pythonhosted.org/packages/14/58/640ac93bf230cd27d002462c9af0d837779f8773bc03dee06b5835208214/tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7", size = 109082, upload-time = "2026-03-25T20:21:50.506Z" }, - { url = "https://files.pythonhosted.org/packages/d5/2f/702d5e05b227401c1068f0d386d79a589bb12bf64c3d2c72ce0631e3bc49/tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232", size = 96490, upload-time = "2026-03-25T20:21:51.474Z" }, - { url = "https://files.pythonhosted.org/packages/45/4b/b877b05c8ba62927d9865dd980e34a755de541eb65fffba52b4cc495d4d2/tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4", size = 164263, upload-time = "2026-03-25T20:21:52.543Z" }, - { url = "https://files.pythonhosted.org/packages/24/79/6ab420d37a270b89f7195dec5448f79400d9e9c1826df982f3f8e97b24fd/tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c", size = 160736, upload-time = "2026-03-25T20:21:53.674Z" }, - { url = "https://files.pythonhosted.org/packages/02/e0/3630057d8eb170310785723ed5adcdfb7d50cb7e6455f85ba8a3deed642b/tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d", size = 270717, upload-time = "2026-03-25T20:21:55.129Z" }, - { url = "https://files.pythonhosted.org/packages/7a/b4/1613716072e544d1a7891f548d8f9ec6ce2faf42ca65acae01d76ea06bb0/tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41", size = 278461, upload-time = "2026-03-25T20:21:56.228Z" }, - { url = "https://files.pythonhosted.org/packages/05/38/30f541baf6a3f6df77b3df16b01ba319221389e2da59427e221ef417ac0c/tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c", size = 274855, upload-time = "2026-03-25T20:21:57.653Z" }, - { url = "https://files.pythonhosted.org/packages/77/a3/ec9dd4fd2c38e98de34223b995a3b34813e6bdadf86c75314c928350ed14/tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f", size = 283144, upload-time = "2026-03-25T20:21:59.089Z" }, - { url = "https://files.pythonhosted.org/packages/ef/be/605a6261cac79fba2ec0c9827e986e00323a1945700969b8ee0b30d85453/tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8", size = 108683, upload-time = "2026-03-25T20:22:00.214Z" }, - { url = "https://files.pythonhosted.org/packages/12/64/da524626d3b9cc40c168a13da8335fe1c51be12c0a63685cc6db7308daae/tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26", size = 121196, upload-time = "2026-03-25T20:22:01.169Z" }, - { url = "https://files.pythonhosted.org/packages/5a/cd/e80b62269fc78fc36c9af5a6b89c835baa8af28ff5ad28c7028d60860320/tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396", size = 100393, upload-time = "2026-03-25T20:22:02.137Z" }, { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" }, ] @@ -1346,14 +1191,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b7/07/055d06d985b445d67422d25b033c11cf55bbb81785d4c4e68e28bca5820e/torch-2.12.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:af68dbf403439cae9ceaeaaf92f8352b460787dcd27b92aa05c40dd4a19c0f1e", size = 426397656, upload-time = "2026-05-13T14:52:38.84Z" }, { url = "https://files.pythonhosted.org/packages/43/94/b0b4fdc3014122e0a7302fb90086d352aa48f2576f0b252561ebb38c01a8/torch-2.12.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:a6a2eebb237d3b1d9ad3b378e86d9b9e0782afdea8b1e0eba6a13646b9b49c07", size = 532183124, upload-time = "2026-05-13T14:53:16.178Z" }, { url = "https://files.pythonhosted.org/packages/d8/c8/052405e6ad05d3237bfe5a4df78f917773956f8e17813a2d44c059068b74/torch-2.12.0-cp313-cp313t-win_amd64.whl", hash = "sha256:2140e373e9a51a3e22ef62e8d14366d0b470d18f0adf19fdc757368077133a34", size = 123232462, upload-time = "2026-05-13T14:52:27.26Z" }, - { url = "https://files.pythonhosted.org/packages/67/dc/ac069f8d6e8be701535921141055293b0d4819d3d7f224a4612cf157c7f9/torch-2.12.0-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:f7dfae4a519197dfa050e98d8e36378a0fb5899625a875c2b54445005a2e404e", size = 88027282, upload-time = "2026-05-13T14:53:05.258Z" }, - { url = "https://files.pythonhosted.org/packages/33/c3/1c1eb00e34555b536dddf792676026a988d710ed36981aa00499b36b0620/torch-2.12.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:891c769072637c74e9a5a77a3bc782894696d8ffec83b938df8536dee7f0ba78", size = 426386961, upload-time = "2026-05-13T14:51:28.406Z" }, - { url = "https://files.pythonhosted.org/packages/cd/d4/7e730dba0c7032a4154dc9056b76cf9625515e030e269cfbf8098fcfee7d/torch-2.12.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:e2ad3eb85d39c3cab62dfa93ed5a73516e6a53c6713cb97d004004fe089f0f1f", size = 532272265, upload-time = "2026-05-13T14:51:59.308Z" }, - { url = "https://files.pythonhosted.org/packages/f1/b4/92c80d1bbfee1c0036c06d1d2155a3065bd2423134c83bf8a47e65cd6b9b/torch-2.12.0-cp314-cp314-win_amd64.whl", hash = "sha256:c66696857e987efb8bc1777a37357ec4f60ab5e8af6250b83d6034437fa2d8f3", size = 122987138, upload-time = "2026-05-13T14:51:45.942Z" }, - { url = "https://files.pythonhosted.org/packages/7b/78/2e12b37ce50a19a037d7bc62d652a5a8f27385a7b05859d6bc9204f20cfe/torch-2.12.0-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:b4556715c8572758625d62b6e0ae3b1f76c440221913a6fb5e100f321fb4fb02", size = 88320100, upload-time = "2026-05-13T14:51:39.955Z" }, - { url = "https://files.pythonhosted.org/packages/56/5e/83c450ec7b0bb40a7b74611c1b5440f9260e33c54c90d556fd4a1f0fd955/torch-2.12.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:a43ac605a5e13116c72b64c359644cce0229f213dde48d2ae0ae5eb5becf7feb", size = 426391871, upload-time = "2026-05-13T14:52:14.989Z" }, - { url = "https://files.pythonhosted.org/packages/c9/e9/1a0b575d98d0afedd8f157d23fa3d2759421483660448e60d0a4b10b6daa/torch-2.12.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:6a7512adfdd7f6732e40de1c620831e3c75b39b98cef60b11d0c5f0a76473ec5", size = 532192241, upload-time = "2026-05-13T14:51:07.795Z" }, - { url = "https://files.pythonhosted.org/packages/88/21/afadd25ecd81b3cea1e11c73cf1ab41a983a50271548c3ec7ec3b9efc3e9/torch-2.12.0-cp314-cp314t-win_amd64.whl", hash = "sha256:5f96b63f8287f66a005dd1b5a6abba2920f11156c5e5c4d815f3e2050fd1aa16", size = 123231092, upload-time = "2026-05-13T14:51:18.854Z" }, ] [[package]] @@ -1371,10 +1208,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/30/b1/b7507bb9815d403927c8dd51d4158ed2e11751a92dbc118a044f247b6848/triton-3.7.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a35d7afe3f3f058e7ec49fcce09794049e0ffc5c59019ac25ec3413741b8c4e7", size = 201453566, upload-time = "2026-05-07T18:46:20.427Z" }, { url = "https://files.pythonhosted.org/packages/a6/8f/0bea7a6a0c989315c9135a1d7fb37e41905cfb3a17cbc1f10044ebd4cc3a/triton-3.7.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cc1d61c172d257db80ddf42595131fb196ad2e9bdd751e90fe2ef13531734e8b", size = 188612899, upload-time = "2026-05-07T19:05:24.955Z" }, { url = "https://files.pythonhosted.org/packages/e1/02/d96f57828d0912aec733b9bc7e0e7dbfd2c6f079a8fa433ac25cb93d1a30/triton-3.7.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:70fb9bbdc9f400afc54bbf6eb2670af28829a6ae3996863317964783141daf56", size = 201553816, upload-time = "2026-05-07T18:46:27.49Z" }, - { url = "https://files.pythonhosted.org/packages/40/fb/82a802dac4689f2a2fb2e69302e6a138eecc3e175bbe976ba3cfc717683a/triton-3.7.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4a44a8476d0d3571eac4e4d1048e1ff75aad81a09ff4602ccfc56c6dea1672e", size = 188507879, upload-time = "2026-05-07T19:05:32.209Z" }, - { url = "https://files.pythonhosted.org/packages/8f/af/9904ec6d3c93d9b24e5ec360445bbdf758b7f00bfbeedb89cb0eb64eb8bb/triton-3.7.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b9b85e72968a9d8bba5ddb24e9b64aaabaf48affb042f2755cb7cfa92b7531ce", size = 201460637, upload-time = "2026-05-07T18:46:34.749Z" }, - { url = "https://files.pythonhosted.org/packages/a1/f9/4835a8ea746b88727d8899f4e3ccce4f9cacb38abfc3bb0a638266c53111/triton-3.7.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:18a160de426fd99f92b0baf509045360afbd3bfaa0b4a5171dde800ec9f09684", size = 188608706, upload-time = "2026-05-07T19:05:39.218Z" }, - { url = "https://files.pythonhosted.org/packages/c1/68/fa86e5a39608000f645535b2c124920126327ab731f8c4fafd5b07ff8d4b/triton-3.7.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ce061073102714b725f3660ec6939d94a1da7984b3aa99c921417cae273672f5", size = 201546766, upload-time = "2026-05-07T18:46:42.088Z" }, ] [[package]] diff --git a/integrations/omnidreams/omnidreams/interactive_drive/README.md b/integrations/omnidreams/omnidreams/interactive_drive/README.md index ff06081b8..bc1239e2d 100644 --- a/integrations/omnidreams/omnidreams/interactive_drive/README.md +++ b/integrations/omnidreams/omnidreams/interactive_drive/README.md @@ -20,7 +20,7 @@ The implementation is intentionally narrow: - one scene loaded at startup - one camera view -- ego-only kinematic controls from the keyboard +- fixed-step vehicle dynamics with collision-driven dynamic actors - one UI thread and one simulation thread - explicit WSL-safe CPU staging between Vulkan and CUDA when needed @@ -136,10 +136,9 @@ prerequisites: ### 3. Sync and stage assets Run everything from the **flashdreams workspace root** — the standard -flashdreams convention. The `interactive-drive` extra pulls in `slangpy` -(the Vulkan-backed local windowing runtime) on top of the base -`flashdreams-omnidreams` deps; server-only users (`omnidreams.webrtc` / -`omnidreams.grpc`) skip it. +flashdreams convention. Ludus always installs NVIDIA PhysX because simulation +has one supported physics implementation. The `interactive-drive` extra adds +only `slangpy`, the local-window presentation runtime. ```bash uv sync --package flashdreams-omnidreams --extra interactive-drive @@ -237,6 +236,17 @@ flags: | **Bare backend, local window** | You want the lightweight setup: a single Vulkan window showing the world-model output, no HUD chrome. | `interactive-drive --no-hud ...` | | **Bare backend, browser** | The demo machine has no graphics-capable GPU (e.g. compute-only GB300) or you want to view from a laptop browser while the model runs elsewhere. Implies `--no-hud`. | `interactive-drive --stream-mjpeg [HOST:]PORT ...` | +Collision physics and the vehicle speed limit are off by default. Add +`--game-mode` to enable the speed limit and collisions with scene actors and +static map geometry, together with the collision visual effect: + +```bash +uv run --package flashdreams-omnidreams interactive-drive --game-mode +``` + +To keep collision physics but suppress the full-screen collision flare, combine +`--game-mode` with `--disable-visual-flare`. + For a richer remote-viewing experience with a polished frontend and lower latency than an in-process MJPEG stream, prefer the separate `omnidreams.webrtc.server` entry point (see @@ -460,6 +470,12 @@ CUDA: uv run --no-sync --package flashdreams-omnidreams interactive-drive ``` +The packaged interactive manifests leave the one-shot image/per-chunk HDMap +encoders and display decoder eager (`compile_encoders: false` and +`compile_decoder: false`) to reduce first-scene latency. Native DiT compilation +remains enabled for steady generation. Prewarmed deployments can enable either +wrapper when measurements justify its additional startup cost. + Set `INTERACTIVE_DRIVE_DISABLE_CUDA_INTEROP=1` to force the conservative host path for both HDMap raster conditioning and presenter CUDA interop. In HUD mode, chrome is still rendered with PIL on the CPU, then uploaded as an alpha overlay; @@ -477,6 +493,7 @@ Controls (apply in all three modes): - `Space` stop - `1` generated driving view - `2` HD map view +- `3` first-person PhysX collider view (actor chassis and invisible walls) - `R` reset rollout - `X` exit scene (return to the scene selector; HUD mode only) - `Esc` quit @@ -485,6 +502,61 @@ The browser control hint is static today, so it does not confirm every keydown visually. If the world-model backend is still producing a chunk, input can be accepted before the visual response arrives. +### Interactive startup profile + +The packaged encoder/decoder policy is recommended for interactive sessions. +On an RTX PRO 6000 Blackwell (driver 596.72, CUDA 13.0, PyTorch 2.12.1), a warm +native-extension run on 2026-07-31 measured 32.0 s from process start through +one steady chunk, versus 87.3 s with compiled encoder/decoder wrappers. Model +warmup was 14.95 s, the first chunk was 5.73 s, and the next 8-frame chunk was +356.6 ms. The compiled-wrapper baseline's steady chunk was 319.7 ms, so this +trades about 37 ms per chunk for roughly 55 s less startup. + +```bash +uv run --no-sync --package flashdreams-omnidreams interactive-drive \ + --manifest example_world_model_perf.yaml --synthetic-model \ + --synthetic-scene --auto-start --stream-mjpeg 127.0.0.1:18765 \ + --stop-after-chunks 1 --no-bev --profile-world-model +``` + +The simulation uses fixed timesteps and a PhysX-first object graph owned by +Ludus. Interactive-drive maps typed scene tracks into that graph. Throttle and +braking preserve momentum; steering +feeds a bicycle-model yaw target and lateral tire grip; a spring-damper adds +game-style body pitch and roll. Every semantic type has a fixed mass (cars +1,550 kg, trucks 8,000 kg, buses 12,000 kg, trailers 10,000 kg). Each road +vehicle also carries dimension-derived chassis geometry and four per-instance +wheel contacts. PhysX raycasts those wheels against static geometry and applies +spring, damper, cornering, friction, and rolling-resistance forces at their +contact points. Recorded position and heading samples are controller targets: +bounded forces and torques ask each actor to follow its track, but no track pose +is written into the body after creation. Non-ego track-driving commands are +limited to 15 mph; collision impulses remain ordinary rigid-body forces rather +than being velocity-clamped. PhysX therefore owns translation, +vertical suspension travel, body attitude, rigid-body contact, and +mass-dependent momentum transfer without locking any axis. A struck actor +remains an integrated vehicle body instead of reverting to a sliding visual box. +When an impact meets the collision visual effect's 5 mph speed-change threshold, +traffic AI suppresses the struck vehicle's track-driving command so that only +its transferred momentum moves it. Driving is restored only after the body has +remained stationary for one continuous simulated second; the native physics +layer owns neither that timer nor that decision. + +Road-boundary, curb, building, house, and wall line/polygon layers are solid +barriers. The large scene AABB remains a separate last-resort respawn boundary. +The complete typed scene stays in the abstract graph for rendering; Ludus +copies a 350 m active window into PhysX and coalesces densely sampled map +strokes into roughly 2 m collision walls. This keeps long-HD-map preload cost +bounded without dropping far-away objects from RGB or BEV rendering. +For active actors, Ludus renders the authoritative per-frame PhysX poses as +oriented HD-map boxes for both RGB and BEV/model inputs. The first topology +change replaces one scene slot; subsequent chunks update the actor cube pool in +place without clearing static map or camera buffers. + +``GameEntity.to_game_engine_dict()`` and +``DynamicActorTrajectory.to_game_engine_dict()`` expose JSON-compatible +component data and timestamped transform keyframes for an external game engine. + ### Generated-frame e2e profiling Set `INTERACTIVE_DRIVE_PROFILE_INPUT_TO_PRESENT=1` to log generated-frame diff --git a/integrations/omnidreams/omnidreams/interactive_drive/app.py b/integrations/omnidreams/omnidreams/interactive_drive/app.py index ac4cf9dd5..69950414a 100644 --- a/integrations/omnidreams/omnidreams/interactive_drive/app.py +++ b/integrations/omnidreams/omnidreams/interactive_drive/app.py @@ -465,6 +465,7 @@ def run_scene(self) -> None: map_bounds=self._map_bounds, oob_margin_m=self._config.oob_margin_m, oob_warning_zone_m=self._config.oob_warning_zone_m, + scene=self._scene, ) # Publish the freshly-built initial state up front so read-side # speed readouts (the HUD speed digit, the browser ``/state`` @@ -475,29 +476,33 @@ def run_scene(self) -> None: # displayed speed" symptom. self._keyboard.update_telemetry(simulation.current_state) input_backend = KeyboardInputBackend(self._keyboard) - reset_requested = run_main_loop( - presenter=self._presenter, - runtime_controls=self._keyboard, - initial_presented_frame=loading_frame, - input_backend=input_backend, - simulation=simulation, - pipeline=self._pipeline, - config=LoopConfig( - initial_chunk_size=self._config.chunk.initial_chunk_frames, - chunk_size=self._config.chunk.chunk_frames, - frame_interval_s=self._config.chunk.frame_interval_s, - oob_warn_proximity=self._config.oob_warn_proximity, - oob_respawn_proximity=self._config.oob_respawn_proximity, - oob_respawn_debounce_chunks=( - self._config.oob_respawn_debounce_chunks - ), - stop_after_consumed_chunks=( - self._config.stop_after_consumed_chunks + try: + reset_requested = run_main_loop( + presenter=self._presenter, + runtime_controls=self._keyboard, + initial_presented_frame=loading_frame, + input_backend=input_backend, + simulation=simulation, + pipeline=self._pipeline, + config=LoopConfig( + initial_chunk_size=self._config.chunk.initial_chunk_frames, + chunk_size=self._config.chunk.chunk_frames, + frame_interval_s=self._config.chunk.frame_interval_s, + oob_warn_proximity=self._config.oob_warn_proximity, + oob_respawn_proximity=self._config.oob_respawn_proximity, + oob_respawn_debounce_chunks=( + self._config.oob_respawn_debounce_chunks + ), + stop_after_consumed_chunks=( + self._config.stop_after_consumed_chunks + ), + visual_flare_enabled=self._config.visual_flare_enabled, ), - ), - loading_status=loading_status, - trace_context=self._trace_context, - ) + loading_status=loading_status, + trace_context=self._trace_context, + ) + finally: + simulation.close() if not reset_requested: break self._pipeline.reset() diff --git a/integrations/omnidreams/omnidreams/interactive_drive/backends/raster.py b/integrations/omnidreams/omnidreams/interactive_drive/backends/raster.py index e5d19c2b1..6aeaded26 100644 --- a/integrations/omnidreams/omnidreams/interactive_drive/backends/raster.py +++ b/integrations/omnidreams/omnidreams/interactive_drive/backends/raster.py @@ -38,6 +38,8 @@ def _render_chunk(self, trajectory: TrajectoryChunk) -> FrameChunk: raster_chunk = self._rasterizer.render_chunk( rig_poses_world=trajectory.rig_poses_world, timestamps_us=trajectory.timestamps_us, + dynamic_actors=trajectory.dynamic_actors, + physics_debug_frames=trajectory.physics_debug_frames, ) return FrameChunk( frames=raster_chunk.frames, diff --git a/integrations/omnidreams/omnidreams/interactive_drive/backends/world_model.py b/integrations/omnidreams/omnidreams/interactive_drive/backends/world_model.py index 5fecc0248..f1b5e6ef0 100644 --- a/integrations/omnidreams/omnidreams/interactive_drive/backends/world_model.py +++ b/integrations/omnidreams/omnidreams/interactive_drive/backends/world_model.py @@ -129,15 +129,25 @@ def render_first_chunk(self, trajectory: TrajectoryChunk) -> FrameChunk: raster_chunk = self._rasterizer.render_chunk( rig_poses_world=trajectory.rig_poses_world, timestamps_us=trajectory.timestamps_us, + physics_debug_frames=trajectory.physics_debug_frames, ) raster_end = time.perf_counter() condition_frames = [frame.rgb_host_uint8 for frame in raster_chunk.frames] display_frames = raster_chunk.frames else: - raster_end = time.perf_counter() condition_frames = [ frame.copy() for frame in self._debug_first_chunk_condition_frames ] + physx_frames = ( + self._rasterizer.render_physx_debug_lazy_frames( + trajectory.rig_poses_world, + trajectory.timestamps_us, + trajectory.physics_debug_frames, + ) + if trajectory.physics_debug_frames + else () + ) + raster_end = time.perf_counter() display_frames = tuple( PresentedFrame( timestamp_us=int(timestamp_us), @@ -145,11 +155,21 @@ def render_first_chunk(self, trajectory: TrajectoryChunk) -> FrameChunk: depth_host_f32=None, rgb_native=None, depth_native=None, + physx_debug=( + trajectory.physics_debug_frames[index] + if trajectory.physics_debug_frames + else None + ), + physx_rgb_host_uint8=( + physx_frames[index] if physx_frames else None + ), ) - for timestamp_us, frame in zip( - trajectory.timestamps_us, - self._debug_first_chunk_condition_frames, - strict=True, + for index, (timestamp_us, frame) in enumerate( + zip( + trajectory.timestamps_us, + self._debug_first_chunk_condition_frames, + strict=True, + ) ) ) logger.info( @@ -195,6 +215,8 @@ def render_next_chunk(self, trajectory: TrajectoryChunk) -> FrameChunk: raster_chunk = self._rasterizer.render_chunk( rig_poses_world=trajectory.rig_poses_world, timestamps_us=trajectory.timestamps_us, + dynamic_actors=trajectory.dynamic_actors, + physics_debug_frames=trajectory.physics_debug_frames, ) raster_end = time.perf_counter() condition_frames = [frame.rgb_host_uint8 for frame in raster_chunk.frames] @@ -204,6 +226,24 @@ def render_next_chunk(self, trajectory: TrajectoryChunk) -> FrameChunk: merge_end = time.perf_counter() self._next_chunk_count += 1 total_ms = (merge_end - chunk_start) * 1000.0 + if trajectory.physx_timings is not None: + timing = trajectory.physx_timings + physx_timing = ( + f"physx_ms={timing.total_ms:.1f} " + # f"physx_sync_ms={timing.synchronize_ms:.1f} " + # f"physx_actor_update_ms={timing.actor_update_ms:.1f} " + # f"physx_solver_ms={timing.solver_ms:.1f} " + # f"physx_readback_ms={timing.readback_ms:.1f} " + # f"physx_bridge_ms={timing.bridge_ms:.1f} " + # f"physx_visible_actors={timing.max_visible_actors} " + # f"physx_detached_actors={timing.max_detached_actors} " + ) + else: + physx_timing = ( + f"physx_ms={trajectory.physx_elapsed_s * 1000.0:.1f} " + if trajectory.physx_elapsed_s is not None + else "" + ) if ( self._next_chunk_count <= 3 or self._next_chunk_count % 10 == 0 @@ -213,6 +253,7 @@ def render_next_chunk(self, trajectory: TrajectoryChunk) -> FrameChunk: "[world-model] next_chunk " f"index={self._next_chunk_count} " f"frames={len(trajectory.timestamps_us)} " + f"{physx_timing}" f"raster_ms={(raster_end - chunk_start) * 1000.0:.1f} " f"model_ms={(model_end - raster_end) * 1000.0:.1f} " f"merge_ms={(merge_end - model_end) * 1000.0:.1f} " @@ -302,6 +343,8 @@ def _merge_frames( depth_native=raster_frame.depth_native, model_rgb_host_uint8=model_rgb, bev_host_uint8=raster_frame.bev_host_uint8, + physx_debug=raster_frame.physx_debug, + physx_rgb_host_uint8=raster_frame.physx_rgb_host_uint8, status_message=( _FIRST_STEADY_STATE_WARMUP_MESSAGE if annotate_first_transition and index == last_index diff --git a/integrations/omnidreams/omnidreams/interactive_drive/cli.py b/integrations/omnidreams/omnidreams/interactive_drive/cli.py index 5ff2456c2..36f993b68 100644 --- a/integrations/omnidreams/omnidreams/interactive_drive/cli.py +++ b/integrations/omnidreams/omnidreams/interactive_drive/cli.py @@ -165,13 +165,6 @@ def build_parser() -> argparse.ArgumentParser: default="cuda", help="SlangPy device used for raster compute; presenter still uses Vulkan for swapchain", ) - parser.add_argument( - "--ludus-backend", - choices=("cuda", "vulkan"), - default="cuda", - help="HD-map renderer backend: 'cuda' (default, software rasterizer) or " - "'vulkan' (VK_EXT_mesh_shader). Independent of --compute-device.", - ) parser.add_argument( "--sync-gpu-timing", action=argparse.BooleanOptionalAction, @@ -246,14 +239,31 @@ def build_parser() -> argparse.ArgumentParser: "N yields N traced chunks (1..N)." ), ) + parser.add_argument( + "--game-mode", + action="store_true", + help=( + "Enable game-style actor and static-world collisions, along with " + "the vehicle speed limit and collision visual flare. By default, " + "collisions, the speed limit, and their visual effect are disabled." + ), + ) + parser.add_argument( + "--disable-visual-flare", + action="store_true", + help=( + "Disable the strong full-screen dark fade that signals a collision " + "when --game-mode is enabled." + ), + ) parser.add_argument( "--bev", action=argparse.BooleanOptionalAction, default=True, help=( "Render a synthetic top-down BEV map alongside the main camera and" - " publish it on /bev_stream. Mirrors AlpaSim's BEV camera (a" - " pinhole projection looking straight down). Disable to skip the" + " publish it on /bev_stream. The default is a straight-down," + " orthographic-style view of the HD-map plane. Disable to skip the" " extra rasterizer dispatch when running without the GTC HUD." ), ) @@ -285,10 +295,10 @@ def build_parser() -> argparse.ArgumentParser: type=float, default=BevConfig().tilt_deg, help=( - "Forward pitch of the BEV camera in degrees. ``0`` is pure" - " top-down; positive values tilt forward for a Google-Maps" - " navigation-mode look. Should stay below ``bev-fov-deg / 2``" - " so the bottom of the image doesn't cross the horizon." + "Advanced override for the BEV camera pitch in degrees. The" + " default ``0`` keeps the mini-map straight down; positive values" + " re-enable the older perspective navigation view and should stay" + " below ``bev-fov-deg / 2``." ), ) parser.add_argument( @@ -465,7 +475,6 @@ def prepare_config_and_backend( manifest_path=manifest_path, raster=RasterConfig( compute_device=args.compute_device, - ludus_backend=args.ludus_backend, sync_gpu_timing=args.sync_gpu_timing, ), world_model_profile=WorldModelProfileConfig( @@ -474,8 +483,10 @@ def prepare_config_and_backend( world_model_offload_text_encoder=bool(args.offload_text_encoder), postprocess=VideoPostprocessChainConfig(preset=args.postprocess_preset), bev=bev_config, + game_mode=bool(args.game_mode), stream_mjpeg_bind=args.stream_mjpeg, stop_after_consumed_chunks=args.stop_after_chunks, + visual_flare_enabled=False if args.disable_visual_flare else None, **_oob_kwargs(args), ) diff --git a/integrations/omnidreams/omnidreams/interactive_drive/config.py b/integrations/omnidreams/omnidreams/interactive_drive/config.py index 8e6c263c8..0bf709c1c 100644 --- a/integrations/omnidreams/omnidreams/interactive_drive/config.py +++ b/integrations/omnidreams/omnidreams/interactive_drive/config.py @@ -3,16 +3,15 @@ from __future__ import annotations -from dataclasses import dataclass, field +from dataclasses import dataclass, field, replace from pathlib import Path from typing import Literal from flashdreams.infra.postprocess import VideoPostprocessChainConfig BackendName = Literal["raster", "omnidreams"] -ViewMode = Literal["rgb", "model_rgb"] +ViewMode = Literal["rgb", "model_rgb", "physx"] ComputeDeviceName = Literal["automatic", "cuda", "vulkan"] -LudusBackendName = Literal["cuda", "vulkan"] @dataclass(frozen=True) @@ -27,7 +26,7 @@ def frame_interval_s(self) -> float: @property def frame_interval_us(self) -> int: - return int(round(1_000_000 / float(self.fps))) + return round(1_000_000 / float(self.fps)) @dataclass(frozen=True) @@ -35,7 +34,6 @@ class RasterConfig: width: int = 1280 height: int = 704 compute_device: ComputeDeviceName = "cuda" - ludus_backend: LudusBackendName = "cuda" sync_gpu_timing: bool = False perf_log_interval_frames: int = 20 near_plane_m: float = 0.1 @@ -61,13 +59,34 @@ def resolution_wh(self) -> tuple[int, int]: class VehicleConfig: wheel_base_m: float = 2.8 max_steer_rad: float = 0.5 - steer_rate_rad_per_s: float = 0.4 - steer_return_rate_rad_per_s: float = 0.7 + steer_rate_rad_per_s: float = 0.55 + steer_return_rate_rad_per_s: float = 0.9 + speed_limit_enabled: bool = True max_speed_mps: float = 18.0 max_reverse_speed_mps: float = 6.0 max_accel_mps2: float = 3.5 max_brake_mps2: float = 6.0 + max_lateral_accel_mps2: float = 6.2 drag_mps2: float = 0.7 + mass_kg: float = 1_550.0 + tire_grip: float = 1.35 + rolling_resistance: float = 0.015 + aero_drag_coefficient: float = 0.42 + collision_restitution: float = 0.22 + collision_friction: float = 0.65 + # Bound impact-induced camera rotation. Normal steering keeps its full + # response; this only filters single-frame PhysX yaw impulses that would + # turn the conditioning view away from the struck actor. + # This prevents the cache from forgetting whom you hit. + max_collision_yaw_rate_radps: float = 0.35 + suspension_stiffness: float = 42.0 + suspension_damping: float = 9.0 + suspension_travel_m: float = 0.22 + suspension_visual_gain: float = 0.15 + max_body_roll_rad: float = 0.5 + max_body_pitch_rad: float = 0.5 + actor_collision_enabled: bool = True + static_collision_enabled: bool = True # Ego AABB used by :class:`omnidreams.interactive_drive.simulation.ground_snap.GroundSnapper` to decide # which area of the ground mesh to query when snapping z + pitch + roll. # Defaults match a typical sedan; the alpasim test data uses @@ -84,27 +103,28 @@ class WorldModelProfileConfig: @dataclass(frozen=True) class BevConfig: - """Synthetic top-down BEV camera rendered alongside the main view, published as a separate stream for the HUD minimap.""" + """Straight-down HD-map view rendered for the HUD mini-map.""" enabled: bool = True # 1024x1024 = ~2x SSAA at the HUD's ~470x400 BEV panel; dominant lever # for BEV quality (under-sampling bakes in unrecoverable aliasing). width: int = 1024 height: int = 1024 - # 75 m altitude + 60° vertical FOV covers ~87 m of ground (with the - # forward tilt, ~90 m ahead / ~10 m behind the rig): a navigation zoom. + # 75 m altitude + 60° vertical FOV covers ~87 m of ground. With the + # straight-down camera this is an orthographic-style view of the HD-map + # plane, centered on the ego rig. height_m: float = 75.0 fov_deg: float = 60.0 - # Forward pitch: 0 is pure top-down, positive tilts forward for a - # Google-Maps feel. 28 stays just under the fov_deg/2 = 30 ceiling above - # which the image bottom would cross the horizon. - tilt_deg: float = 28.0 + # Keep the mini-map straight down. Non-zero values remain available for + # explicit CLI overrides, but they no longer define the default HUD view. + tilt_deg: float = 0.0 @dataclass(frozen=True) class AppConfig: scene_path: Path backend: BackendName = "raster" + game_mode: bool = False camera_name: str = "camera_front_wide_120fov" variant: str = "default" prompt_override: str | None = None @@ -143,3 +163,19 @@ class AppConfig: # presenter onto a specific GPU (e.g. "RTX PRO"); None lets SlangPy pick # the first enumerated adapter. presenter_adapter: str | None = None + # None follows game_mode; an explicit bool remains a fine-grained override. + visual_flare_enabled: bool | None = None + + def __post_init__(self) -> None: + object.__setattr__( + self, + "vehicle", + replace( + self.vehicle, + speed_limit_enabled=self.game_mode, + actor_collision_enabled=self.game_mode, + static_collision_enabled=self.game_mode, + ), + ) + if self.visual_flare_enabled is None: + object.__setattr__(self, "visual_flare_enabled", self.game_mode) diff --git a/integrations/omnidreams/omnidreams/interactive_drive/demo.py b/integrations/omnidreams/omnidreams/interactive_drive/demo.py index c0af59990..d77f7ac5c 100644 --- a/integrations/omnidreams/omnidreams/interactive_drive/demo.py +++ b/integrations/omnidreams/omnidreams/interactive_drive/demo.py @@ -125,7 +125,8 @@ class WheelState: class KeyboardDriveState: def __init__(self, control: Any) -> None: - # ``control`` is a drive sink with ``set_drive(steer, throttle, brake)`` + # ``control`` is a drive sink with + # ``set_drive(steer, throttle, brake, reverse)`` # (the HUD's ``KeyboardStateDriveSink``, writing into ``KeyboardState``). self._control = control self._pressed: set[str] = set() @@ -136,6 +137,11 @@ def __init__(self, control: Any) -> None: def state(self) -> WheelState: return WheelState(**self._state.__dict__) + @property + def has_active_input(self) -> bool: + """Whether a keyboard drive key is currently held.""" + return bool(self._pressed) + def set_key(self, keysym: str, down: bool) -> bool: key = _keyboard_drive_key(keysym) if key is None: @@ -162,28 +168,41 @@ def update(self) -> WheelState: else KEYBOARD_STEER_RETURN_RATE_PER_S ) steer = _move_towards(self._state.steering, target_steer, rate * dt) - throttle = 1.0 if {"w", "up"} & self._pressed else 0.0 - brake = 1.0 if {"s", "down", "space"} & self._pressed else 0.0 - target_speed = self._update_target_speed(throttle=throttle, brake=brake, dt=dt) + forward = bool({"w", "up"} & self._pressed) + reverse = bool({"s", "down"} & self._pressed) + throttle = 1.0 if forward != reverse else 0.0 + brake = 1.0 if (forward and reverse) or "space" in self._pressed else 0.0 + reverse = reverse and not forward + target_speed = self._update_target_speed( + throttle=throttle, brake=brake, reverse=reverse, dt=dt + ) self._state = WheelState( steering=steer, throttle=throttle, brake=brake, target_speed_mps=target_speed, connected=False, + reverse=reverse, + ) + self._control.set_drive( + steer=steer, throttle=throttle, brake=brake, reverse=reverse ) - self._control.set_drive(steer=steer, throttle=throttle, brake=brake) return self.state def clear(self) -> None: self._pressed.clear() self._state = WheelState() - self._control.set_drive(steer=0.0, throttle=0.0, brake=0.0) + self._control.set_drive(steer=0.0, throttle=0.0, brake=0.0, reverse=False) + + def release_control(self) -> None: + """Release this input source without changing its display state.""" + self._control.release_all() def _update_target_speed( - self, *, throttle: float, brake: float, dt: float + self, *, throttle: float, brake: float, reverse: bool, dt: float ) -> float: speed = self._state.target_speed_mps + direction = -1.0 if reverse else 1.0 if throttle > 0.01 and brake <= 0.05: accel = 2.0 * throttle * dt current = abs(speed) @@ -193,16 +212,12 @@ def _update_target_speed( else: excess = (current - high_speed_knee) / max(1e-6, 36.0 - high_speed_knee) taper = max(0.05, 0.5 * (1.0 - excess) ** 3) - speed += accel * taper + speed += direction * accel * taper elif brake > 0.01: - speed = max(0.0, speed - 12.0 * brake * dt) + speed = _move_towards(speed, 0.0, 12.0 * brake * dt) else: - creep_target = 4.47 - if speed < creep_target + 0.1: - speed += (creep_target - speed) * 0.18 * dt - else: - speed = max(0.0, speed - 0.5 * dt) - return max(0.0, min(36.0, speed)) + speed = _move_towards(speed, 0.0, 0.5 * dt) + return max(-36.0, min(36.0, speed)) @dataclass(frozen=True) @@ -466,17 +481,8 @@ def _update_target_speed(self, *, throttle: float, brake: float) -> float: elif brake > 0.01: # Brake bleeds speed toward a stop regardless of travel direction. speed = _move_towards(speed, 0.0, 12.0 * brake * dt) - elif self._reverse: - # No auto-crawl in reverse; coast toward a stop. - speed = _move_towards(speed, 0.0, 0.5 * dt) else: - creep_target = 4.47 # 10 mph, matching the AlpaSim manual-driver creep. - if speed < creep_target + 0.1: - # Demo crawl should be gentle: a first-order approach that - # takes several seconds to reach 10 mph from a stop. - speed += (creep_target - speed) * 0.18 * dt - else: - speed = max(0.0, speed - 0.5 * dt) + speed = _move_towards(speed, 0.0, 0.5 * dt) return max(-36.0, min(36.0, speed)) @@ -814,7 +820,7 @@ def _run_slangpy_hud(args: argparse.Namespace) -> None: wheel = WheelBridge( device_paths=device_paths, profile=profile, - control=KeyboardStateDriveSink(app.keyboard), + control=KeyboardStateDriveSink(app.keyboard, source="wheel"), ) wheel.start() presenter.set_wheel(wheel) diff --git a/integrations/omnidreams/omnidreams/interactive_drive/input/keyboard.py b/integrations/omnidreams/omnidreams/interactive_drive/input/keyboard.py index a8083a659..34668a107 100644 --- a/integrations/omnidreams/omnidreams/interactive_drive/input/keyboard.py +++ b/integrations/omnidreams/omnidreams/interactive_drive/input/keyboard.py @@ -36,7 +36,7 @@ def __init__(self) -> None: self._lock = threading.Lock() self._keyboard = RealtimeKeyboardState(supported_keys=DRIVING_SUPPORTED_KEYS) self._view_mode = "rgb" - self._drive_command: DriverCommand | None = None + self._drive_commands: dict[str, DriverCommand] = {} self._reset_pending = False # Rising-edge "exit the current scene and return to the scene # selector" request, set by a wheel/controller's bound exit button @@ -76,9 +76,22 @@ def consume_exit_scene_request(self) -> bool: self._exit_scene_pending = False return pending - def set_drive_command(self, command: DriverCommand | None) -> None: + def set_drive_command( + self, + command: DriverCommand | None, + *, + source: str | None = None, + ) -> None: with self._lock: - self._drive_command = command + if source is None: + if command is None: + self._drive_commands.clear() + return + source = "default" + if command is None: + self._drive_commands.pop(source, None) + else: + self._drive_commands[source] = command def update_telemetry(self, state: VehicleState) -> None: """Publish the simulation's latest vehicle state for read-only consumers. @@ -120,7 +133,14 @@ def view_mode(self) -> str: def command(self) -> DriverCommand: with self._lock: - drive_command = self._drive_command + drive_command = next( + ( + self._drive_commands[source] + for source in ("keyboard", "browser", "default", "wheel") + if source in self._drive_commands + ), + None, + ) pressed = set(self._keyboard.snapshot()) if drive_command is not None: if "space" in pressed: @@ -139,8 +159,14 @@ def command(self) -> DriverCommand: def command_from_snapshot(snapshot: ControlSnapshot) -> DriverCommand: pressed = {normalize_key(key) for key in snapshot.pressed} - throttle = 1.0 if {"w", "up"} & pressed else 0.0 - brake = 1.0 if {"s", "down"} & pressed else 0.0 + forward = bool({"w", "up"} & pressed) + reverse = bool({"s", "down"} & pressed) + # Keyboard driving uses the conventional arcade mapping: S/down applies + # throttle in the opposite direction, while pressing both directions + # requests a brake. Space remains the immediate stop control handled below. + opposing_directions = forward and reverse + throttle = 1.0 if forward != reverse else 0.0 + brake = 1.0 if opposing_directions else 0.0 steer = 0.0 if {"a", "left"} & pressed: steer += 1.0 @@ -151,6 +177,7 @@ def command_from_snapshot(snapshot: ControlSnapshot) -> DriverCommand: brake=brake, steer=steer, stop="space" in pressed, + reverse=reverse and not forward, ) diff --git a/integrations/omnidreams/omnidreams/interactive_drive/physx_debug.py b/integrations/omnidreams/omnidreams/interactive_drive/physx_debug.py new file mode 100644 index 000000000..9f464de49 --- /dev/null +++ b/integrations/omnidreams/omnidreams/interactive_drive/physx_debug.py @@ -0,0 +1,295 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + +"""Ludus CUDA scene construction for the first-person PhysX debug view.""" + +from __future__ import annotations + +from collections.abc import Sequence +from typing import Protocol + +import numpy as np +import torch +from ludus_renderer import CubePool, TimestampedScene +from omnidreams.interactive_drive.types import PhysicsDebugFrame, PresentedFrame + +_ACTOR_FRONT_RGB = (1.0, 190.0 / 255.0, 58.0 / 255.0) +_ACTOR_BACK_RGB = (0.64, 0.28, 0.04) +_BARRIER_FRONT_RGB = (0.0, 225.0 / 255.0, 1.0) +_BARRIER_BACK_RGB = (0.0, 0.34, 0.48) +_HIDDEN_TRANSLATION = (1_000_000.0, 1_000_000.0, -1_000_000.0) + + +class PhysxDebugSceneContext(Protocol): + """Ludus scene operations used by the persistent debug buffer.""" + + def upload_scene(self, scene: TimestampedScene) -> int: ... + + def update_cube_pool( + self, scene_id: int, prim_type_id: int, pool: CubePool + ) -> bool: ... + + def replace_scene(self, scene_id: int, scene: TimestampedScene) -> int: ... + + +def _next_power_of_two(value: int) -> int: + return 1 << max(0, int(value - 1).bit_length()) + + +def _stable_collider_ids( + values: tuple[str, ...], count: int, prefix: str +) -> tuple[str, ...]: + result = values or tuple(f"{prefix}-{index}" for index in range(count)) + if len(result) != count: + raise ValueError(f"{prefix}_ids must match the collider count") + if len(set(result)) != count: + raise ValueError(f"{prefix}_ids must be unique within each frame") + return result + + +def build_physx_debug_cube_pool( + snapshots: Sequence[PhysicsDebugFrame], + timestamps_us: np.ndarray, + *, + device: torch.device, + capacity: int | None = None, +) -> CubePool: + """Pack exact per-frame collider snapshots into one timestamped CUDA pool. + + Each visible collider owns one track whose non-owning timestamps are placed + far outside the renderable world. This preserves exact per-frame topology + even when PhysX activates or deactivates objects between adjacent frames. + Capacity is rounded up and may be supplied by the persistent scene buffer + so normal count fluctuations do not reallocate renderer storage. + """ + timestamps = np.ascontiguousarray(timestamps_us, dtype=np.int64) + if len(snapshots) != len(timestamps): + raise ValueError("PhysX debug snapshots must match the timestamp count") + if not len(timestamps): + raise ValueError("PhysX debug rendering requires at least one timestamp") + + actor_ids_by_frame = [ + _stable_collider_ids( + snapshot.actor_ids, len(snapshot.actor_positions_m), "actor" + ) + for snapshot in snapshots + ] + barrier_ids_by_frame = [ + _stable_collider_ids( + snapshot.barrier_ids, len(snapshot.barrier_segments_xy_m), "barrier" + ) + for snapshot in snapshots + ] + track_indices: dict[tuple[str, str], int] = {} + for actor_ids, barrier_ids in zip( + actor_ids_by_frame, barrier_ids_by_frame, strict=True + ): + for collider_type, collider_ids in ( + ("actor", actor_ids), + ("barrier", barrier_ids), + ): + for collider_id in collider_ids: + track_indices.setdefault( + (collider_type, collider_id), len(track_indices) + ) + required = len(track_indices) + pool_capacity = max(1, int(capacity or _next_power_of_two(max(1, required)))) + if pool_capacity < required: + raise ValueError( + f"PhysX debug pool capacity {pool_capacity} is smaller than {required}" + ) + + frame_count = len(timestamps) + translations = np.full( + (pool_capacity, frame_count, 3), + _HIDDEN_TRANSLATION, + dtype=np.float32, + ) + quaternions = np.zeros((pool_capacity, frame_count, 4), dtype=np.float32) + quaternions[..., 3] = 1.0 + scales = np.full((pool_capacity, 3), 1e-3, dtype=np.float32) + colors = np.zeros((pool_capacity, 6), dtype=np.float32) + + for frame_index, snapshot in enumerate(snapshots): + actor_ids = actor_ids_by_frame[frame_index] + actor_count = len(snapshot.actor_positions_m) + if actor_count: + actor_indices = np.fromiter( + (track_indices[("actor", actor_id)] for actor_id in actor_ids), + dtype=np.intp, + count=actor_count, + ) + translations[actor_indices, frame_index] = np.asarray( + snapshot.actor_positions_m, dtype=np.float32 + ) + quaternions[actor_indices, frame_index] = np.asarray( + snapshot.actor_orientations_xyzw, dtype=np.float32 + ) + scales[actor_indices] = np.asarray( + snapshot.actor_dimensions_lwh, dtype=np.float32 + ) + colors[actor_indices, :3] = _ACTOR_FRONT_RGB + colors[actor_indices, 3:] = _ACTOR_BACK_RGB + + segments = np.asarray(snapshot.barrier_segments_xy_m, dtype=np.float32) + barrier_count = len(segments) + if not barrier_count: + continue + delta = segments[:, 1] - segments[:, 0] + lengths = np.linalg.norm(delta, axis=1) + valid = lengths > 1e-6 + if not bool(np.any(valid)): + continue + segments = segments[valid] + delta = delta[valid] + lengths = lengths[valid] + barrier_ids = tuple( + barrier_id + for barrier_id, keep in zip( + barrier_ids_by_frame[frame_index], valid, strict=True + ) + if bool(keep) + ) + thicknesses = np.asarray(snapshot.barrier_thicknesses_m, dtype=np.float32)[ + valid + ] + heights = np.asarray(snapshot.barrier_heights_m, dtype=np.float32)[valid] + barrier_count = len(segments) + barrier_indices = np.fromiter( + ( + track_indices[("barrier", barrier_id)] + for barrier_id in barrier_ids + ), + dtype=np.intp, + count=barrier_count, + ) + centers = (segments[:, 0] + segments[:, 1]) * 0.5 + ground_z = float( + snapshot.ego_position_m[2] - snapshot.ego_dimensions_lwh[2] * 0.5 + ) + translations[barrier_indices, frame_index, :2] = centers + translations[barrier_indices, frame_index, 2] = ground_z + heights * 0.5 + yaw = np.arctan2(delta[:, 1], delta[:, 0]) + quaternions[barrier_indices, frame_index, 2] = np.sin(yaw * 0.5) + quaternions[barrier_indices, frame_index, 3] = np.cos(yaw * 0.5) + scales[barrier_indices] = np.column_stack((lengths, thicknesses, heights)) + colors[barrier_indices, :3] = _BARRIER_FRONT_RGB + colors[barrier_indices, 3:] = _BARRIER_BACK_RGB + + # Each collider owns one stable track across the whole chunk. Missing + # frames remain at the hidden sentinel instead of allocating a new track + # for every collider/frame pair. + track_lengths = torch.full( + (pool_capacity,), frame_count, dtype=torch.int32, device=device + ) + timestamps_tensor = torch.as_tensor(timestamps, dtype=torch.int64, device=device) + track_timestamps = timestamps_tensor.repeat(pool_capacity) + return CubePool( + timestamps_us=timestamps_tensor, + cube_ts_prefix_sum=torch.cumsum(track_lengths, dim=0), + track_timestamps_us=track_timestamps, + translations=torch.as_tensor( + translations.reshape(-1, 3), dtype=torch.float32, device=device + ), + quaternions=torch.as_tensor( + quaternions.reshape(-1, 4), dtype=torch.float32, device=device + ), + scales=torch.as_tensor(scales, dtype=torch.float32, device=device), + colors=torch.as_tensor(colors, dtype=torch.float32, device=device), + render_flags=0, + ) + + +class LudusPhysxDebugSceneBuffer: + """Persist and update the CUDA scene slot used by the PhysX debug view.""" + + def __init__( + self, context: PhysxDebugSceneContext, *, device: torch.device + ) -> None: + self._context = context + self._device = device + self._scene_id: int | None = None + self._capacity = 0 + self._frame_count = 0 + + def reset(self) -> None: + """Forget the scene slot after the parent context clears its scenes.""" + self._scene_id = None + self._capacity = 0 + self._frame_count = 0 + + def update( + self, + snapshots: Sequence[PhysicsDebugFrame], + timestamps_us: np.ndarray, + ) -> int: + """Update collider tracks and return the stable Ludus scene ID.""" + collider_keys = { + (collider_type, collider_id) + for snapshot in snapshots + for collider_type, collider_ids in ( + ( + "actor", + _stable_collider_ids( + snapshot.actor_ids, + len(snapshot.actor_positions_m), + "actor", + ), + ), + ( + "barrier", + _stable_collider_ids( + snapshot.barrier_ids, + len(snapshot.barrier_segments_xy_m), + "barrier", + ), + ), + ) + for collider_id in collider_ids + } + required = len(collider_keys) + capacity = max(self._capacity, _next_power_of_two(max(1, required))) + pool = build_physx_debug_cube_pool( + snapshots, + timestamps_us, + device=self._device, + capacity=capacity, + ) + scene = TimestampedScene(polyline_pools=[], polygon_pools=[], cube_pools=[pool]) + frame_count = len(timestamps_us) + if self._scene_id is None: + self._scene_id = self._context.upload_scene(scene) + elif ( + capacity != self._capacity + or frame_count != self._frame_count + or not self._context.update_cube_pool( + self._scene_id, pool.prim_type_id, pool + ) + ): + self._scene_id = self._context.replace_scene(self._scene_id, scene) + self._capacity = capacity + self._frame_count = frame_count + return self._scene_id + + +def select_presented_rgb( + frame: PresentedFrame, view_mode: str, *, width: int, height: int +) -> object: + """Select the already-rendered lazy CUDA source for a presenter view.""" + del width, height + if view_mode == "physx": + if frame.physx_debug is None: + raise RuntimeError("PhysX view requires a physics-debug snapshot") + if frame.physx_rgb_host_uint8 is None: + raise RuntimeError("PhysX view requires a Ludus-rendered lazy debug frame") + return frame.physx_rgb_host_uint8 + if view_mode == "model_rgb" and frame.model_rgb_host_uint8 is not None: + return frame.model_rgb_host_uint8 + return frame.rgb_host_uint8 + + +__all__ = [ + "LudusPhysxDebugSceneBuffer", + "build_physx_debug_cube_pool", + "select_presented_rgb", +] diff --git a/integrations/omnidreams/omnidreams/interactive_drive/presenter.py b/integrations/omnidreams/omnidreams/interactive_drive/presenter.py index a938ce0c1..32db95874 100644 --- a/integrations/omnidreams/omnidreams/interactive_drive/presenter.py +++ b/integrations/omnidreams/omnidreams/interactive_drive/presenter.py @@ -13,7 +13,12 @@ ) from omnidreams.interactive_drive.input.keyboard import KeyboardState from omnidreams.interactive_drive.loading_overlay import render_loading_overlay +from omnidreams.interactive_drive.physx_debug import select_presented_rgb from omnidreams.interactive_drive.types import PresentedFrame +from omnidreams.interactive_drive.visual_flare import ( + CollisionVisualFlare, + darken_rgb, +) from flashdreams.infra.acceleration.frame_prefetch import prefetch_to_numpy @@ -31,6 +36,7 @@ def __init__(self, raster: RasterConfig, keyboard: KeyboardState) -> None: self._spy = spy self._raster = raster self._keyboard = keyboard + self._visual_flare = CollisionVisualFlare() self._cuda_interop_unavailable_reason: str | None = None self._window = spy.Window( width=raster.width, @@ -77,7 +83,24 @@ def close(self) -> None: def process_events(self) -> None: self._window.process_events() + def trigger_visual_flare(self) -> None: + """Start the collision-feedback fade.""" + self._visual_flare.trigger() + def prepare_frame(self, frame: PresentedFrame, view_mode: str) -> None: + if view_mode == "physx": + if frame.physx_debug is None: + return + if self._cuda_rgb_interop is None: + _prefetch_to_numpy( + select_presented_rgb( + frame, + view_mode, + width=self._raster.width, + height=self._raster.height, + ) + ) + return if ( view_mode == "model_rgb" and frame.model_rgb_host_uint8 is not None @@ -89,18 +112,65 @@ def prepare_frame(self, frame: PresentedFrame, view_mode: str) -> None: _prefetch_to_numpy(frame.rgb_host_uint8) def present_frame(self, frame: PresentedFrame, view_mode: str) -> None: + visual_flare = getattr(self, "_visual_flare", None) + flare_opacity = visual_flare.opacity() if visual_flare is not None else 0.0 + if view_mode == "physx": + # Frames already generated before the user selected view 3 do not + # contain PhysX debug data. Leave the current surface untouched + # until the first PhysX-enabled chunk arrives; never flash HDMap. + if frame.physx_debug is None: + return + rgb = select_presented_rgb( + frame, + view_mode, + width=self._raster.width, + height=self._raster.height, + ) + cuda_presented = ( + self._present_cuda_rgb( + rgb, + status_message=frame.status_message, + flare_opacity=flare_opacity, + ) + if flare_opacity > 0.0 + else self._present_cuda_rgb( + rgb, status_message=frame.status_message + ) + ) + if cuda_presented: + return + host_rgb = _with_status_overlay(rgb, frame.status_message) + if flare_opacity > 0.0: + self._present_array(host_rgb, flare_opacity=flare_opacity) + else: + self._present_array(host_rgb) + return if view_mode == "model_rgb" and frame.model_rgb_host_uint8 is not None: - if self._present_cuda_rgb( - frame.model_rgb_host_uint8, - status_message=frame.status_message, - ): + cuda_presented = ( + self._present_cuda_rgb( + frame.model_rgb_host_uint8, + status_message=frame.status_message, + flare_opacity=flare_opacity, + ) + if flare_opacity > 0.0 + else self._present_cuda_rgb( + frame.model_rgb_host_uint8, + status_message=frame.status_message, + ) + ) + if cuda_presented: return rgb = _with_status_overlay(frame.model_rgb_host_uint8, frame.status_message) - self._present_array(rgb) + if flare_opacity > 0.0: + self._present_array(rgb, flare_opacity=flare_opacity) + else: + self._present_array(rgb) return - self._present_array( - _with_status_overlay(frame.rgb_host_uint8, frame.status_message) - ) + rgb = _with_status_overlay(frame.rgb_host_uint8, frame.status_message) + if flare_opacity > 0.0: + self._present_array(rgb, flare_opacity=flare_opacity) + else: + self._present_array(rgb) def _create_device(self): existing_device_handles = self._cuda_existing_device_handles() @@ -192,7 +262,11 @@ def _create_cuda_rgb_interop(self): return interop def _present_cuda_rgb( - self, rgb_frame: object, *, status_message: str | None + self, + rgb_frame: object, + *, + status_message: str | None, + flare_opacity: float = 0.0, ) -> bool: if self._cuda_rgb_interop is None: return False @@ -212,7 +286,12 @@ def _present_cuda_rgb( return False submitted = self._submit_ready_cuda_rgb() - self._cuda_rgb_interop.enqueue_rgb_to_shared_rgba(cuda_rgb_frame) + if flare_opacity > 0.0: + self._cuda_rgb_interop.enqueue_rgb_to_shared_rgba( + cuda_rgb_frame, flare_opacity=flare_opacity + ) + else: + self._cuda_rgb_interop.enqueue_rgb_to_shared_rgba(cuda_rgb_frame) if not submitted: submitted = self._submit_ready_cuda_rgb() return True @@ -253,7 +332,9 @@ def _submit_ready_cuda_rgb(self) -> bool: del surface_texture return True - def _present_array(self, rgb_host_uint8: np.ndarray) -> None: + def _present_array( + self, rgb_host_uint8: np.ndarray, *, flare_opacity: float = 0.0 + ) -> None: if not self._surface.config: return surface_texture = self._surface.acquire_next_image() @@ -261,7 +342,9 @@ def _present_array(self, rgb_host_uint8: np.ndarray) -> None: time.sleep(0.001) return - upload = self._pack_surface_pixels(rgb_host_uint8) + upload = self._pack_surface_pixels( + darken_rgb(rgb_host_uint8, flare_opacity) + ) self._display_texture.copy_from_numpy(upload) command_encoder = self._device.create_command_encoder() @@ -334,6 +417,8 @@ def _on_keyboard_event(self, event) -> None: self._keyboard.set_view_mode("model_rgb") elif is_press and self._matches_key(event.key, "key2"): self._keyboard.set_view_mode("rgb") + elif is_press and self._matches_key(event.key, "key3"): + self._keyboard.set_view_mode("physx") elif is_press and self._matches_key(event.key, "r"): self._keyboard.request_reset() @@ -351,6 +436,7 @@ def _build_key_codes(self) -> dict[str, object | None]: "right": self._lookup_key_code("right", "arrow_right"), "key1": self._lookup_key_code("key1", "digit1", "num_1"), "key2": self._lookup_key_code("key2", "digit2", "num_2"), + "key3": self._lookup_key_code("key3", "digit3", "num_3"), } def _lookup_key_code(self, *names: str) -> object | None: @@ -442,7 +528,9 @@ def as_cuda_rgb_source(self, rgb_frame: object) -> "_CudaRGBFrame | None": ready=_cuda_event_ready(source_event), ) - def enqueue_rgb_to_shared_rgba(self, rgb_frame: "_CudaRGBFrame") -> bool: + def enqueue_rgb_to_shared_rgba( + self, rgb_frame: "_CudaRGBFrame", *, flare_opacity: float = 0.0 + ) -> bool: shared_buffer = self._acquire_buffer() if shared_buffer is None: return False @@ -456,6 +544,7 @@ def enqueue_rgb_to_shared_rgba(self, rgb_frame: "_CudaRGBFrame") -> bool: if not rgb_tensor.is_contiguous(): rgb_tensor = rgb_tensor.contiguous() rgba_tensor[..., :3].copy_(rgb_tensor, non_blocking=True) + self._darken_rgba(rgba_tensor, flare_opacity) rgba_tensor[..., 3].fill_(255) rgb_tensor.record_stream(self._copy_stream.stream) rgba_tensor.record_stream(self._copy_stream.stream) @@ -471,6 +560,7 @@ def enqueue_camera_to_shared_rgba( overlay_rgba: np.ndarray, camera_area: tuple[int, int, int, int], bg_rgb: tuple[int, int, int], + flare_opacity: float = 0.0, ) -> bool: shared_buffer = self._acquire_buffer() if shared_buffer is None: @@ -525,6 +615,7 @@ def enqueue_camera_to_shared_rgba( non_blocking=True, ) self._alpha_composite_rgba(rgba_tensor, overlay_tensor) + self._darken_rgba(rgba_tensor, flare_opacity) rgb_tensor.record_stream(self._copy_stream.stream) resized.record_stream(self._copy_stream.stream) @@ -605,6 +696,13 @@ def _alpha_composite_rgba(self, base_rgba: Any, overlay_rgba: Any) -> None: base_rgba[..., :3].copy_(blended.to(self._torch.uint8), non_blocking=True) base_rgba[..., 3].fill_(255) + def _darken_rgba(self, rgba: Any, opacity: float) -> None: + opacity = min(1.0, max(0.0, float(opacity))) + if opacity <= 0.0: + return + darkened = (rgba[..., :3].to(self._torch.float32) * (1.0 - opacity)).round() + rgba[..., :3].copy_(darkened.to(self._torch.uint8), non_blocking=True) + class _CudaRGBFrame: def __init__(self, *, tensor: Any, source_event: Any | None, ready: bool) -> None: diff --git a/integrations/omnidreams/omnidreams/interactive_drive/rasterizer.py b/integrations/omnidreams/omnidreams/interactive_drive/rasterizer.py index 072a7ddc9..0732f6282 100644 --- a/integrations/omnidreams/omnidreams/interactive_drive/rasterizer.py +++ b/integrations/omnidreams/omnidreams/interactive_drive/rasterizer.py @@ -20,18 +20,25 @@ from loguru import logger from ludus_renderer import ( FThetaCamera, - LudusTimestampedContext, + LudusCudaTimestampedContext, + MutableObjectSceneBuffer, ) from ludus_renderer import ( load_scene as load_ludus_scene, ) from ludus_renderer.clipgt import ClipgtGpuScene from ludus_renderer.render_utils import SceneAdapter -from ludus_renderer.torch import LudusCudaTimestampedContext from ludus_renderer.torch.ops import CAMERA_TYPE_BEV, CAMERA_TYPE_REGULAR from omnidreams.interactive_drive.config import BevConfig, RasterConfig from omnidreams.interactive_drive.cuda_env import DISABLE_CUDA_INTEROP_ENV, env_truthy -from omnidreams.interactive_drive.types import PresentedFrame, RasterChunk, SceneBundle +from omnidreams.interactive_drive.physx_debug import LudusPhysxDebugSceneBuffer +from omnidreams.interactive_drive.types import ( + DynamicActorTrajectory, + PhysicsDebugFrame, + PresentedFrame, + RasterChunk, + SceneBundle, +) from torch import Tensor from flashdreams.infra.acceleration.frame_prefetch import LazyCudaFrame @@ -107,16 +114,14 @@ def __init__(self, raster: RasterConfig, bev: BevConfig | None = None) -> None: "using host raster frames", ) - ctx_cls = ( - LudusTimestampedContext - if raster.ludus_backend == "vulkan" - else LudusCudaTimestampedContext - ) - logger.info(f"[rasterizer] ludus_backend={raster.ludus_backend}") - self.ctx = ctx_cls(device=self._device) + logger.info("[rasterizer] ludus_backend=cuda") + self.ctx = LudusCudaTimestampedContext(device=self._device) self.ctx.set_depth_scaling(True) self.ctx.set_msaa_samples(4) - self.ctx.set_max_tessellation_levels(cube=0) + # Keep adaptive cube tessellation enabled. F-theta projection curves + # box faces near the image boundary; forcing level zero turns each face + # into two long screen-space triangles and visibly warps edge colliders. + self.ctx.set_max_tessellation_levels(cube=3) # Use thinner BEV linework so the small map panel doesn't get # swallowed by the heavier polylines designed for the main view. bev_line_width = max(2.0, float(raster.line_width_px) * 0.4) @@ -131,12 +136,16 @@ def __init__(self, raster: RasterConfig, bev: BevConfig | None = None) -> None: self._scene_data: _LoadedSceneData | None = None self._scene_id: int | None = None + self._dynamic_scene: MutableObjectSceneBuffer | None = None self._all_cameras: list[FThetaCamera] = [] self._all_camera_map: dict[str, int] = {} self._sensor_to_rig: dict[str, Tensor] = {} self._selected_camera_name: str | None = None self._bev_camera_id: int | None = None self._bev_sensor_to_rig: Tensor | None = None + self._physx_debug_scene = LudusPhysxDebugSceneBuffer( + self.ctx, device=self._device + ) def _to_ludus_camera_pose(self, camera_poses: Tensor) -> Tensor: """Convert sensor-to-world camera poses to Ludus' world-to-sensor format.""" @@ -149,6 +158,8 @@ def load_scene(self, scene: SceneBundle) -> None: scene: Scene bundle containing path to USDZ and camera selection. """ self.ctx.clear_scenes() + self._physx_debug_scene.reset() + self._dynamic_scene = None clipgt_scene = load_ludus_scene( scene.scene_path, @@ -190,12 +201,21 @@ def load_scene(self, scene: SceneBundle) -> None: self.ctx.upload_cameras(self._all_cameras) # Single scene upload shared by the main camera and the BEV minimap. - self._scene_id = self.ctx.upload_scene(clipgt_scene.timestamped_scene) + base_scene = clipgt_scene.timestamped_scene + self._scene_id = self.ctx.upload_scene(base_scene) + self._dynamic_scene = MutableObjectSceneBuffer( + self.ctx, + self._scene_id, + base_scene, + device=self._device, + ) def render_chunk( self, rig_poses_world: npt.NDArray[np.float32], timestamps_us: npt.NDArray[np.int64], + dynamic_actors: tuple[DynamicActorTrajectory, ...] = (), + physics_debug_frames: tuple[PhysicsDebugFrame, ...] = (), ) -> RasterChunk: """Render a chunk of frames from the scene's selected camera. @@ -210,6 +230,9 @@ def render_chunk( Returns: RasterChunk containing rendered frames. """ + if dynamic_actors: + self._replace_dynamic_actor_scene(dynamic_actors) + if ( self._scene_data is None or self._scene_id is None @@ -227,13 +250,9 @@ def render_chunk( rig_poses_torch = torch.from_numpy( np.ascontiguousarray(rig_poses_world, dtype=np.float32) ).to(device=self._device) - timestamps_batch = torch.from_numpy( - np.ascontiguousarray(timestamps_us, dtype=np.int64) - ).to(device=self._device) - rgb_frames = self._render_one_camera( rig_poses=rig_poses_torch, - timestamps_batch=timestamps_batch, + timestamps_us=timestamps_us, scene_id=self._scene_id, camera_id=self._all_camera_map[camera_name], sensor_to_rig=self._sensor_to_rig[camera_name], @@ -243,20 +262,49 @@ def render_chunk( bev_frames = self.render_bev_frames( rig_poses_torch=rig_poses_torch, - timestamps_batch=timestamps_batch, + timestamps_us=timestamps_us, + ) + physx_frames = self.render_physx_debug_frames( + rig_poses_torch=rig_poses_torch, + timestamps_us=timestamps_us, + physics_debug_frames=physics_debug_frames, ) return self.build_chunk( timestamps_us=timestamps_us, rgb_frames=rgb_frames, bev_frames=bev_frames, + physics_debug_frames=physics_debug_frames, + physx_frames=physx_frames, ) + def _replace_dynamic_actor_scene( + self, actors: tuple[DynamicActorTrajectory, ...] + ) -> None: + """Replace recorded obstacles with authoritative rigid-body tracks.""" + dynamic_scene = getattr(self, "_dynamic_scene", None) + if dynamic_scene is None and hasattr(self, "_base_timestamped_scene"): + dynamic_scene = MutableObjectSceneBuffer( + self.ctx, + self._scene_id, + self._base_timestamped_scene, + device=self._device, + ) + self._dynamic_scene = dynamic_scene + if dynamic_scene is None: + raise RuntimeError("load_scene() must be called before actor replacement.") + dynamic_scene.update(actors) + self._scene_id = dynamic_scene.scene_id + def render_rgb_frames( self, rig_poses_world: npt.NDArray[np.float32], timestamps_us: npt.NDArray[np.int64], - ) -> tuple[npt.NDArray[np.int64], Tensor, Tensor, _RenderedCameraFrames]: + dynamic_actors: tuple[DynamicActorTrajectory, ...] = (), + ) -> tuple[npt.NDArray[np.int64], Tensor, _RenderedCameraFrames]: """Render only the main camera frames needed for model conditioning.""" + if dynamic_actors: + self._replace_dynamic_actor_scene(dynamic_actors) + if ( self._scene_data is None or self._scene_id is None @@ -274,13 +322,9 @@ def render_rgb_frames( rig_poses_torch = torch.from_numpy( np.ascontiguousarray(rig_poses_world, dtype=np.float32) ).to(device=self._device) - timestamps_batch = torch.from_numpy( - np.ascontiguousarray(timestamps_us, dtype=np.int64) - ).to(device=self._device) - rgb_frames = self._render_one_camera( rig_poses=rig_poses_torch, - timestamps_batch=timestamps_batch, + timestamps_us=timestamps_us, scene_id=self._scene_id, camera_id=self._all_camera_map[camera_name], sensor_to_rig=self._sensor_to_rig[camera_name], @@ -290,7 +334,6 @@ def render_rgb_frames( return ( np.asarray(timestamps_us, dtype=np.int64), rig_poses_torch, - timestamps_batch, rgb_frames, ) @@ -298,7 +341,7 @@ def render_bev_frames( self, *, rig_poses_torch: Tensor, - timestamps_batch: Tensor, + timestamps_us: npt.ArrayLike, ) -> _RenderedCameraFrames | None: """Render BEV frames for an already-prepared pose batch.""" if not ( @@ -309,9 +352,10 @@ def render_bev_frames( and self._bev_sensor_to_rig is not None ): return None + level_rig_poses = _level_rig_poses_for_bev(rig_poses_torch) return self._render_one_camera( - rig_poses=rig_poses_torch, - timestamps_batch=timestamps_batch, + rig_poses=level_rig_poses, + timestamps_us=timestamps_us, scene_id=self._scene_id, camera_id=self._bev_camera_id, sensor_to_rig=self._bev_sensor_to_rig, @@ -319,16 +363,82 @@ def render_bev_frames( resolution=(self._bev.height, self._bev.width), ) + def render_physx_debug_frames( + self, + *, + rig_poses_torch: Tensor, + timestamps_us: npt.NDArray[np.int64], + physics_debug_frames: tuple[PhysicsDebugFrame, ...], + ) -> _RenderedCameraFrames | None: + """Render exact PhysX collider snapshots with Ludus on CUDA.""" + if not physics_debug_frames: + return None + if len(physics_debug_frames) != len(timestamps_us): + raise ValueError( + "physics_debug_frames must match the rendered timestamp count" + ) + if self._selected_camera_name is None: + raise RuntimeError("load_scene() must be called before debug rendering.") + camera_name = self._selected_camera_name + scene_id = self._physx_debug_scene.update( + physics_debug_frames, np.asarray(timestamps_us, dtype=np.int64) + ) + return self._render_one_camera( + rig_poses=rig_poses_torch, + timestamps_us=timestamps_us, + scene_id=scene_id, + camera_id=self._all_camera_map[camera_name], + sensor_to_rig=self._sensor_to_rig[camera_name], + camera_type=CAMERA_TYPE_REGULAR, + resolution=(self._raster.height, self._raster.width), + ) + + def render_physx_debug_lazy_frames( + self, + rig_poses_world: npt.NDArray[np.float32], + timestamps_us: npt.NDArray[np.int64], + physics_debug_frames: tuple[PhysicsDebugFrame, ...], + ) -> tuple[_LazyRasterFrame, ...]: + """Render only the debug view and expose each CUDA frame lazily.""" + rig_poses_torch = torch.from_numpy( + np.ascontiguousarray(rig_poses_world, dtype=np.float32) + ).to(device=self._device) + rendered = self.render_physx_debug_frames( + rig_poses_torch=rig_poses_torch, + timestamps_us=timestamps_us, + physics_debug_frames=physics_debug_frames, + ) + if rendered is None: + return () + return tuple( + _LazyRasterFrame( + rendered.frames_hwc_uint8, + index, + source_event=rendered.ready_event, + ) + for index in range(len(timestamps_us)) + ) + def build_chunk( self, *, timestamps_us: npt.NDArray[np.int64], rgb_frames: _RenderedCameraFrames, bev_frames: _RenderedCameraFrames | None, + physics_debug_frames: tuple[PhysicsDebugFrame, ...] = (), + physx_frames: _RenderedCameraFrames | None = None, ) -> RasterChunk: """Wrap rendered camera tensors in lazy frame objects.""" + if physics_debug_frames and len(physics_debug_frames) != len(timestamps_us): + raise ValueError( + "physics_debug_frames must match the rendered timestamp count" + ) if bev_frames is not None and int(bev_frames.frames_hwc_uint8.shape[0]) == 0: bev_frames = None + if physx_frames is not None and int( + physx_frames.frames_hwc_uint8.shape[0] + ) != len(timestamps_us): + raise ValueError("PhysX debug render count must match the timestamp count") bev_frame_indices = _resampled_frame_indices( source_count=( int(bev_frames.frames_hwc_uint8.shape[0]) @@ -356,6 +466,18 @@ def build_chunk( if bev_frames is not None else None ), + physx_debug=( + physics_debug_frames[idx] if physics_debug_frames else None + ), + physx_rgb_host_uint8=( + _LazyRasterFrame( + physx_frames.frames_hwc_uint8, + idx, + source_event=physx_frames.ready_event, + ) + if physx_frames is not None + else None + ), ) for idx in range(len(timestamps_us)) ] @@ -375,6 +497,18 @@ def build_chunk( if bev_host_frames is not None else None ), + physx_debug=( + physics_debug_frames[idx] if physics_debug_frames else None + ), + physx_rgb_host_uint8=( + _LazyRasterFrame( + physx_frames.frames_hwc_uint8, + idx, + source_event=physx_frames.ready_event, + ) + if physx_frames is not None + else None + ), ) for idx in range(len(timestamps_us)) ] @@ -384,7 +518,7 @@ def _render_one_camera( self, *, rig_poses: Tensor, - timestamps_batch: Tensor, + timestamps_us: npt.ArrayLike, scene_id: int, camera_id: int, sensor_to_rig: Tensor, @@ -396,28 +530,18 @@ def _render_one_camera( Frames stay CUDA-backed so the world model consumes HDMap conditioning without a GPU->CPU->GPU round trip (presenters materialize NumPy lazily). """ - n_frames = timestamps_batch.shape[0] camera_poses_world = torch.einsum( "nij,jk->nik", rig_poses, sensor_to_rig.to(self._device) ) camera_poses_ludus = self._to_ludus_camera_pose(camera_poses_world) - scene_id_batch = torch.full( - (n_frames,), scene_id, dtype=torch.int32, device=self._device - ) - camera_id_batch = torch.full( - (n_frames,), camera_id, dtype=torch.int32, device=self._device - ) - camera_type_id_batch = torch.full( - (n_frames,), camera_type, dtype=torch.int32, device=self._device - ) height, width = resolution - images = self.ctx.render( - scene_id_batch, - camera_id_batch, - timestamps_batch, - camera_type_id_batch, - camera_poses_ludus, + images = self.ctx.render_uniform( + scene_id=scene_id, + camera_id=camera_id, + timestamps_us=timestamps_us, + camera_type_id=camera_type, + camera_poses=camera_poses_ludus, resolution=(height, width), ) @@ -479,11 +603,28 @@ def render_chunk( self, rig_poses_world: npt.NDArray[np.float32], timestamps_us: npt.NDArray[np.int64], + dynamic_actors: tuple[DynamicActorTrajectory, ...] = (), + physics_debug_frames: tuple[PhysicsDebugFrame, ...] = (), ) -> "RasterChunk": exec_, impl = self._require_alive() + actors_detached = any(actor.detached_from_track for actor in dynamic_actors) + if actors_detached: + self._clear_pending_bev() + self._latest_bev = None + return exec_.submit( + impl.render_chunk, + rig_poses_world, + timestamps_us, + dynamic_actors, + physics_debug_frames, + ).result() if not self._bev_enabled: return exec_.submit( - impl.render_chunk, rig_poses_world, timestamps_us + impl.render_chunk, + rig_poses_world, + timestamps_us, + dynamic_actors, + physics_debug_frames, ).result() lagged_bev = self._poll_ready_bev() @@ -491,29 +632,54 @@ def render_chunk( ( chunk_timestamps_us, rig_poses_torch, - timestamps_batch, rgb_frames, ) = exec_.submit( - impl.render_rgb_frames, rig_poses_world, timestamps_us + impl.render_rgb_frames, + rig_poses_world, + timestamps_us, + dynamic_actors, ).result() # RGB rendering gives the previous BEV another chance to finish without - # ever making it part of the critical path. If it is still in flight, - # reuse the latest completed BEV and skip this refresh so work cannot - # queue up behind presentation. + # ever making it part of the critical path. Render PhysX before queuing + # the next BEV: both use the same single-thread executor, so submitting + # BEV first would put the debug view behind unrelated minimap work. lagged_bev = self._poll_ready_bev() + physx_frames = exec_.submit( + impl.render_physx_debug_frames, + rig_poses_torch=rig_poses_torch, + timestamps_us=chunk_timestamps_us, + physics_debug_frames=physics_debug_frames, + ).result() if self._pending_bev is None: self._pending_bev = exec_.submit( impl.render_bev_frames, rig_poses_torch=rig_poses_torch, - timestamps_batch=timestamps_batch, + timestamps_us=chunk_timestamps_us, ) return impl.build_chunk( timestamps_us=chunk_timestamps_us, rgb_frames=rgb_frames, bev_frames=lagged_bev, + physics_debug_frames=physics_debug_frames, + physx_frames=physx_frames, ) + def render_physx_debug_lazy_frames( + self, + rig_poses_world: npt.NDArray[np.float32], + timestamps_us: npt.NDArray[np.int64], + physics_debug_frames: tuple[PhysicsDebugFrame, ...], + ) -> tuple[_LazyRasterFrame, ...]: + """Render a debug-only chunk on the rasterizer's pinned worker.""" + exec_, impl = self._require_alive() + return exec_.submit( + impl.render_physx_debug_lazy_frames, + rig_poses_world, + timestamps_us, + physics_debug_frames, + ).result() + def _require_alive( self, ) -> tuple[concurrent.futures.ThreadPoolExecutor, _LudusConditionRasterizerImpl]: @@ -604,6 +770,40 @@ def _build_bev_camera(bev: BevConfig, device: torch.device) -> FThetaCamera: ) +def _level_rig_poses_for_bev(rig_poses: Tensor) -> Tensor: + """Keep BEV centered on the rig without inheriting its pitch or roll. + + The minimap remains heading-up, so retain the rig's planar yaw. When the + forward axis is nearly vertical (for example after a collision), derive + yaw from the projected left axis instead. Translation is copied exactly. + + Args: + rig_poses: Rig-to-world poses with shape ``[..., 4, 4]``. + + Returns: + Poses with the same translation and planar heading but world-up rotation. + """ + rotation = rig_poses[..., :3, :3] + forward_xy = rotation[..., :2, 0] + left_xy = rotation[..., :2, 1] + forward_norm = torch.linalg.vector_norm(forward_xy, dim=-1) + yaw_from_forward = torch.atan2(forward_xy[..., 1], forward_xy[..., 0]) + yaw_from_left = torch.atan2(-left_xy[..., 0], left_xy[..., 1]) + yaw = torch.where(forward_norm > 1e-4, yaw_from_forward, yaw_from_left) + + cos_yaw = torch.cos(yaw) + sin_yaw = torch.sin(yaw) + level_poses = torch.zeros_like(rig_poses) + level_poses[..., 0, 0] = cos_yaw + level_poses[..., 0, 1] = -sin_yaw + level_poses[..., 1, 0] = sin_yaw + level_poses[..., 1, 1] = cos_yaw + level_poses[..., 2, 2] = 1.0 + level_poses[..., :3, 3] = rig_poses[..., :3, 3] + level_poses[..., 3, 3] = 1.0 + return level_poses + + def _bev_sensor_to_rig( *, height_m: float, tilt_deg: float, device: torch.device ) -> Tensor: diff --git a/integrations/omnidreams/omnidreams/interactive_drive/runtime/loop.py b/integrations/omnidreams/omnidreams/interactive_drive/runtime/loop.py index 49dc85d6b..323c1f114 100644 --- a/integrations/omnidreams/omnidreams/interactive_drive/runtime/loop.py +++ b/integrations/omnidreams/omnidreams/interactive_drive/runtime/loop.py @@ -13,12 +13,17 @@ from omnidreams.interactive_drive.input.backend import InputBackend from omnidreams.interactive_drive.runtime.runtime_controls import RuntimeControls from omnidreams.interactive_drive.simulation.backend import SimulationBackend -from omnidreams.interactive_drive.types import DriverCommand, PresentedFrame +from omnidreams.interactive_drive.types import ( + DriverCommand, + PhysXChunkTimings, + PresentedFrame, +) from omnidreams.interactive_drive.video_model.chunk_pipeline import ( ChunkPipeline, ChunkRequest, QueuedFrame, ) +from omnidreams.interactive_drive.visual_flare import VisualFlareEventQueue from flashdreams.infra.acceleration.prewarm import is_warmup_index from flashdreams.serving.realtime.timing import ( @@ -40,6 +45,10 @@ _PROFILE_E2E_WINDOW = InputToPresentProfileWindow() +def _noop_visual_flare() -> None: + return + + def _profile_input_to_present_enabled() -> bool: raw = os.environ.get(_PROFILE_INPUT_TO_PRESENT_ENV, "") return raw.strip().lower() in ("1", "true", "yes", "on") @@ -148,6 +157,7 @@ class LoopConfig: # off the present queue. Chunk 0 is warmup and excluded from the trace, # so consuming chunks 0..N yields N traced chunks (1..N). stop_after_consumed_chunks: int | None = None + visual_flare_enabled: bool = True # OOB overlay strings, module-level so the HUD can match on them for styling. @@ -159,6 +169,22 @@ def should_request_chunk(state: MainLoopState) -> bool: return state.chunks_outstanding < 1 +def _advance_present_deadline( + scheduled_time: float, completed_time: float, frame_interval_s: float +) -> float: + """Return the next presentation deadline without catch-up bursts. + + Preserve the fixed-rate clock while presentation is on schedule. If work on + the main thread overruns the following deadline, rebase from completion so + queued frames remain evenly paced instead of being presented back-to-back + until an old deadline catches up with wall time. + """ + next_scheduled_time = scheduled_time + frame_interval_s + if next_scheduled_time <= completed_time: + return completed_time + frame_interval_s + return next_scheduled_time + + def make_chunk_request( state: MainLoopState, simulation: SimulationBackend, @@ -168,6 +194,7 @@ def make_chunk_request( config: LoopConfig, input_sample_event: int | None = None, trace_context: TraceContext | None = None, + view_mode: str = "rgb", ) -> ChunkRequest: request_time = time.perf_counter() request_event = _trace_main_instant( @@ -179,6 +206,9 @@ def make_chunk_request( ) chunk_index = state.next_chunk_index chunk_size = config.initial_chunk_size if chunk_index == 0 else config.chunk_size + set_physx_debug_enabled = getattr(simulation, "set_physx_debug_enabled", None) + if callable(set_physx_debug_enabled): + set_physx_debug_enabled(view_mode == "physx") trajectory = simulation.pose_chunk( command=command, chunk_size=chunk_size, @@ -194,6 +224,12 @@ def make_chunk_request( depends_on=event_dependencies(request_event), chunk_index=chunk_index, chunk_size=chunk_size, + physx_ms=( + trajectory.physx_elapsed_s * 1000.0 + if trajectory.physx_elapsed_s is not None + else None + ), + physx_timings=trajectory.physx_timings, ) prediction = ChunkPrediction.create( request_time=request_time, frame_interval_s=config.frame_interval_s @@ -445,6 +481,12 @@ def run_main_loop( last_presented_frame: PresentedFrame = initial_presented_frame ready_frames: deque[QueuedFrame] = deque() chunk_history = ChunkHistory(config.history_capacity) + visual_flare_events = VisualFlareEventQueue() + trigger_visual_flare_callback = getattr( + presenter, "trigger_visual_flare", _noop_visual_flare + ) + if not callable(trigger_visual_flare_callback): + trigger_visual_flare_callback = _noop_visual_flare last_input_sample_event: int | None = None last_present_wait_event: int | None = None if _profile_input_to_present_enabled(): @@ -452,6 +494,7 @@ def run_main_loop( while not presenter.should_close: presenter.process_events() + visual_flare_events.update(trigger_visual_flare_callback) if presenter.should_close: break if runtime_controls.consume_reset_request(): @@ -470,7 +513,10 @@ def run_main_loop( depends_on=[], ) - # Keep one chunk in flight. + view_mode = runtime_controls.view_mode + + # Keep one chunk in flight. Snapshot the current view on the request so + # PhysX debug geometry is captured only for chunks that can display it. if should_request_chunk(state): chunk_request = make_chunk_request( state=state, @@ -481,7 +527,23 @@ def run_main_loop( config=config, input_sample_event=last_input_sample_event, trace_context=active_trace, + view_mode=view_mode, ) + if ( + config.visual_flare_enabled + and chunk_request.trajectory.actor_collision_detected + ): + collision_frame_index = ( + chunk_request.trajectory.actor_collision_frame_index + ) + visual_flare_events.schedule( + chunk_index=chunk_request.chunk_times.chunk_index, + frame_index=( + 0 + if collision_frame_index is None + else collision_frame_index + ), + ) pipeline.request_pose_chunk(chunk_request) # The pose chunk just advanced authoritative state, so refresh the # OOB overlay from the new boundary frame and auto-respawn (same @@ -492,7 +554,6 @@ def run_main_loop( # presenter's ``/state`` endpoint) see the latest state. push_telemetry(runtime_controls, simulation) - view_mode = runtime_controls.view_mode _drain_pipeline_frames( pipeline=pipeline, ready_frames=ready_frames, @@ -529,6 +590,13 @@ def run_main_loop( if is_warmup_index(queued_frame.chunk_times.chunk_index) else trace_context ) + visual_flare_events.update( + trigger_visual_flare_callback, + displayed_position=( + queued_frame.chunk_times.chunk_index, + queued_frame.frame_index, + ), + ) present_queued_frame( queued_frame, presenter, @@ -570,7 +638,11 @@ def run_main_loop( view_mode=view_mode, ) - state.next_present_time += config.frame_interval_s + state.next_present_time = _advance_present_deadline( + state.next_present_time, + time.perf_counter(), + config.frame_interval_s, + ) return False @@ -606,6 +678,8 @@ def _trace_main_range( per_frame_error_ms: float | None = None, input_sample_time_ns: int | None = None, image_ready_time_ns: int | None = None, + physx_ms: float | None = None, + physx_timings: PhysXChunkTimings | None = None, ) -> int | None: if trace_context is None: return None @@ -622,6 +696,21 @@ def _trace_main_range( components["input_sample_time_ns"] = input_sample_time_ns if image_ready_time_ns is not None: components["image_ready_time_ns"] = image_ready_time_ns + if physx_ms is not None: + components["physx_ms"] = physx_ms + if physx_timings is not None: + components.update( + { + "physx_sync_ms": physx_timings.synchronize_ms, + "physx_actor_update_ms": physx_timings.actor_update_ms, + "physx_solver_ms": physx_timings.solver_ms, + "physx_readback_ms": physx_timings.readback_ms, + "physx_bridge_ms": physx_timings.bridge_ms, + "physx_steps": physx_timings.step_count, + "physx_visible_actors": physx_timings.max_visible_actors, + "physx_detached_actors": physx_timings.max_detached_actors, + } + ) return trace_context.add_range( name, thread=trace_context.main_thread, diff --git a/integrations/omnidreams/omnidreams/interactive_drive/simulation/backend.py b/integrations/omnidreams/omnidreams/interactive_drive/simulation/backend.py index ba18a76ca..c1bc81e9d 100644 --- a/integrations/omnidreams/omnidreams/interactive_drive/simulation/backend.py +++ b/integrations/omnidreams/omnidreams/interactive_drive/simulation/backend.py @@ -14,6 +14,10 @@ class SimulationBackend(Protocol): @property def current_state(self) -> VehicleState: ... + def set_physx_debug_enabled(self, enabled: bool) -> None: + """Toggle collider snapshot capture for future pose chunks.""" + ... + def pose_chunk( self, command: DriverCommand, diff --git a/integrations/omnidreams/omnidreams/interactive_drive/simulation/components.py b/integrations/omnidreams/omnidreams/interactive_drive/simulation/components.py new file mode 100644 index 000000000..df0c1230b --- /dev/null +++ b/integrations/omnidreams/omnidreams/interactive_drive/simulation/components.py @@ -0,0 +1,564 @@ +# 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. + +"""Engine-neutral components for interactive driving physics.""" + +from __future__ import annotations + +import math +from dataclasses import dataclass +from typing import Any + +import numpy as np +import numpy.typing as npt +from ludus_renderer import RigidBodyModel, VehicleModel +from omnidreams.interactive_drive.config import VehicleConfig +from omnidreams.interactive_drive.types import VehicleState + +FloatArray = npt.NDArray[np.float32] + +# Keep struck vehicles far enough ahead of the front camera that their HD-map +# boxes remain recognizable. A near-plane-sized actor is outside the world +# model's driving-data distribution and causes the generated object to smear or +# disappear after impact. Lateral padding stays small so parked curbside cars +# do not create phantom side contacts. +_VEHICLE_LONGITUDINAL_COLLISION_PADDING_M = 0.2 +_VEHICLE_LATERAL_COLLISION_PADDING_M = 0.1 + +_FIXED_OBJECT_MASS_KG = { + "car": 1_550.0, + "truck": 8_000.0, + "bus": 12_000.0, + "trailer": 10_000.0, + "pedestrian": 80.0, + "cyclist": 100.0, + "motorcycle": 220.0, + "other": 500.0, +} + + +def canonical_object_type(object_type: str) -> str: + """Map scene labels to the simulation categories owned by interactive-drive.""" + normalized = object_type.strip().lower() + # Check compound and overlapping labels before their more general forms. + if "trailer" in normalized: + return "trailer" + if "motor" in normalized: + return "motorcycle" + if "bus" in normalized: + return "bus" + if "truck" in normalized: + return "truck" + if "pedestrian" in normalized or "person" in normalized: + return "pedestrian" + if "cycl" in normalized or "bicycle" in normalized: + return "cyclist" + if "car" in normalized or "vehicle" in normalized: + return "car" + return "other" + + +def _vector3(value: FloatArray, name: str) -> FloatArray: + result = np.asarray(value, dtype=np.float32) + if result.shape != (3,): + raise ValueError(f"{name} must have shape (3,), got {result.shape}") + return result.copy() + + +@dataclass +class TransformComponent: + """World-space transform component.""" + + position_m: FloatArray + """World position in metres.""" + + orientation_xyzw: FloatArray + """Normalized world orientation quaternion in ``xyzw`` order.""" + + def __post_init__(self) -> None: + self.position_m = _vector3(self.position_m, "position_m") + orientation = np.asarray(self.orientation_xyzw, dtype=np.float32) + if orientation.shape != (4,): + raise ValueError( + f"orientation_xyzw must have shape (4,), got {orientation.shape}" + ) + norm = float(np.linalg.norm(orientation)) + if norm <= 1e-8: + raise ValueError("orientation_xyzw must have non-zero norm") + self.orientation_xyzw = (orientation / norm).astype(np.float32) + + +@dataclass +class RigidBodyComponent: + """Linear and angular rigid-body state in SI units.""" + + mass_kg: float + """Positive body mass; trucks use a larger value than cars.""" + + linear_velocity_mps: FloatArray + """World linear velocity.""" + + angular_velocity_radps: FloatArray + """Body angular velocity around world axes.""" + + restitution: float = 0.2 + """Normal collision bounciness in the closed interval ``[0, 1]``.""" + + friction: float = 0.7 + """Tangential collision friction coefficient.""" + + dynamic: bool = True + """Whether impulses and integration can move the body.""" + + def __post_init__(self) -> None: + if self.mass_kg <= 0.0: + raise ValueError("mass_kg must be positive") + self.linear_velocity_mps = _vector3( + self.linear_velocity_mps, "linear_velocity_mps" + ) + self.angular_velocity_radps = _vector3( + self.angular_velocity_radps, "angular_velocity_radps" + ) + self.restitution = float(np.clip(self.restitution, 0.0, 1.0)) + self.friction = max(0.0, float(self.friction)) + + +@dataclass(frozen=True) +class BoxColliderComponent: + """Oriented box collider component.""" + + half_extents_m: tuple[float, float, float] + """Positive half dimensions ordered as length, width, and height.""" + + is_trigger: bool = False + """Whether overlap emits events without applying impulses.""" + + def __post_init__(self) -> None: + if len(self.half_extents_m) != 3 or any(v <= 0.0 for v in self.half_extents_m): + raise ValueError("half_extents_m must contain three positive values") + + +@dataclass(frozen=True) +class VehicleDynamicsComponent: + """Four-wheel game-car layout, drivetrain, and tire parameters.""" + + wheel_base_m: float + track_width_m: float + front_axle_to_cg_m: float + rear_axle_to_cg_m: float + center_of_mass_height_m: float + wheel_radius_m: float + wheel_width_m: float + max_engine_force_n: float + max_brake_force_n: float + max_lateral_accel_mps2: float + cornering_stiffness_n_per_rad: float + yaw_inertia_kg_m2: float + tire_grip: float + rolling_resistance: float + aero_drag_coefficient: float + + @property + def wheel_offsets_m(self) -> tuple[tuple[float, float, float], ...]: + """Return front-left, front-right, rear-left, and rear-right offsets.""" + half_track = self.track_width_m * 0.5 + wheel_z = -self.center_of_mass_height_m + self.wheel_radius_m + return ( + (self.front_axle_to_cg_m, half_track, wheel_z), + (self.front_axle_to_cg_m, -half_track, wheel_z), + (-self.rear_axle_to_cg_m, half_track, wheel_z), + (-self.rear_axle_to_cg_m, -half_track, wheel_z), + ) + + +@dataclass(frozen=True) +class SuspensionComponent: + """Visual spring-damper suspension parameters.""" + + stiffness: float + damping: float + travel_m: float + visual_gain: float + max_roll_rad: float + max_pitch_rad: float + + +@dataclass +class GameEntity: + """Entity composed from engine-neutral transform and physics components.""" + + entity_id: str + transform: TransformComponent + rigid_body: RigidBodyComponent + collider: BoxColliderComponent + vehicle: VehicleDynamicsComponent | None = None + suspension: SuspensionComponent | None = None + object_type: str = "Car" + detached_from_track: bool = False + + def to_game_engine_dict(self) -> dict[str, Any]: + """Return JSON-compatible component data for an external engine.""" + components: dict[str, Any] = { + "transform": { + "position_m": self.transform.position_m.tolist(), + "orientation_xyzw": self.transform.orientation_xyzw.tolist(), + }, + "rigid_body": { + "mass_kg": self.rigid_body.mass_kg, + "linear_velocity_mps": self.rigid_body.linear_velocity_mps.tolist(), + "angular_velocity_radps": self.rigid_body.angular_velocity_radps.tolist(), + "restitution": self.rigid_body.restitution, + "friction": self.rigid_body.friction, + "dynamic": self.rigid_body.dynamic, + }, + "box_collider": { + "half_extents_m": list(self.collider.half_extents_m), + "is_trigger": self.collider.is_trigger, + }, + } + if self.vehicle is not None: + components["vehicle_dynamics"] = { + "wheel_base_m": self.vehicle.wheel_base_m, + "track_width_m": self.vehicle.track_width_m, + "front_axle_to_cg_m": self.vehicle.front_axle_to_cg_m, + "rear_axle_to_cg_m": self.vehicle.rear_axle_to_cg_m, + "center_of_mass_height_m": self.vehicle.center_of_mass_height_m, + "wheel_radius_m": self.vehicle.wheel_radius_m, + "wheel_width_m": self.vehicle.wheel_width_m, + "wheel_offsets_m": self.vehicle.wheel_offsets_m, + "max_engine_force_n": self.vehicle.max_engine_force_n, + "max_brake_force_n": self.vehicle.max_brake_force_n, + "max_lateral_accel_mps2": self.vehicle.max_lateral_accel_mps2, + "cornering_stiffness_n_per_rad": ( + self.vehicle.cornering_stiffness_n_per_rad + ), + "yaw_inertia_kg_m2": self.vehicle.yaw_inertia_kg_m2, + "tire_grip": self.vehicle.tire_grip, + "rolling_resistance": self.vehicle.rolling_resistance, + "aero_drag_coefficient": self.vehicle.aero_drag_coefficient, + } + if self.suspension is not None: + components["suspension"] = { + "stiffness": self.suspension.stiffness, + "damping": self.suspension.damping, + "travel_m": self.suspension.travel_m, + "visual_gain": self.suspension.visual_gain, + "max_roll_rad": self.suspension.max_roll_rad, + "max_pitch_rad": self.suspension.max_pitch_rad, + } + return { + "entity_id": self.entity_id, + "object_type": self.object_type, + "components": components, + } + + +def rigid_body_model_for_object( + object_type: str, + dimensions_lwh: npt.ArrayLike, + *, + restitution: float = 0.22, + friction: float = 0.65, +) -> RigidBodyModel: + """Build a category-weighted PhysX body from an interactive scene label.""" + dimensions = np.asarray(dimensions_lwh, dtype=np.float32) + if dimensions.shape != (3,) or bool(np.any(dimensions <= 0.0)): + raise ValueError("dimensions_lwh must contain three positive values") + kind = canonical_object_type(object_type) + mass_kg = _FIXED_OBJECT_MASS_KG[kind] + dynamics = vehicle_dynamics_for_object(object_type, dimensions, mass_kg) + return RigidBodyModel( + mass_kg=mass_kg, + half_extents_m=( + float(dimensions[0]) * 0.5, + float(dimensions[1]) * 0.5, + float(dimensions[2]) * 0.5, + ), + restitution=float(np.clip(restitution, 0.0, 1.0)), + friction=max(0.0, float(friction)), + vehicle=( + None + if dynamics is None + else _physx_vehicle_model( + dynamics, + dimensions, + mass_kg, + suspension_travel_m=0.22 if kind == "car" else 0.32, + longitudinal_collision_padding_m=( + _VEHICLE_LONGITUDINAL_COLLISION_PADDING_M + ), + lateral_collision_padding_m=_VEHICLE_LATERAL_COLLISION_PADDING_M, + ) + ), + ) + + +def _vehicle_dynamics( + *, + kind: str, + dimensions_lwh: npt.ArrayLike, + mass_kg: float, + max_accel_mps2: float, + max_brake_mps2: float, + max_lateral_accel_mps2: float, + tire_grip: float, + rolling_resistance: float, + aero_drag_coefficient: float, + wheel_base_m: float | None = None, +) -> VehicleDynamicsComponent | None: + if kind not in {"car", "truck", "bus", "trailer"}: + return None + length, width, height = ( + float(value) for value in np.asarray(dimensions_lwh, dtype=np.float32) + ) + wheel_base = ( + float(wheel_base_m) + if wheel_base_m is not None + else float(np.clip(length * 0.58, 1.8, max(1.8, length - 0.8))) + ) + front_weight_fraction = 0.55 if kind == "car" else 0.52 + rear_axle_to_cg = wheel_base * front_weight_fraction + front_axle_to_cg = wheel_base - rear_axle_to_cg + track_width = max(0.9, width * 0.78) + wheel_radius = float(np.clip(height * 0.2125, 0.30, 0.58)) + wheel_width = 0.24 if kind == "car" else 0.34 + yaw_inertia = mass_kg * (length * length + width * width) / 12.0 + return VehicleDynamicsComponent( + wheel_base_m=wheel_base, + track_width_m=track_width, + front_axle_to_cg_m=front_axle_to_cg, + rear_axle_to_cg_m=rear_axle_to_cg, + center_of_mass_height_m=max(wheel_radius, height * 0.34), + wheel_radius_m=wheel_radius, + wheel_width_m=wheel_width, + max_engine_force_n=mass_kg * max_accel_mps2, + max_brake_force_n=mass_kg * max_brake_mps2, + max_lateral_accel_mps2=max_lateral_accel_mps2, + cornering_stiffness_n_per_rad=mass_kg * 9.81 * 5.9, + yaw_inertia_kg_m2=yaw_inertia, + tire_grip=tire_grip, + rolling_resistance=rolling_resistance, + aero_drag_coefficient=aero_drag_coefficient, + ) + + +def _physx_vehicle_model( + dynamics: VehicleDynamicsComponent, + dimensions_lwh: npt.ArrayLike, + mass_kg: float, + *, + suspension_travel_m: float, + longitudinal_collision_padding_m: float | None = None, + lateral_collision_padding_m: float | None = None, +) -> VehicleModel: + """Build a dimensioned four-wheel model at its static ride height.""" + length, width, height = ( + float(value) for value in np.asarray(dimensions_lwh, dtype=np.float32) + ) + sprung_mass_kg = mass_kg * 0.90 + natural_frequency_hz = 1.5 if mass_kg < 4_000.0 else 1.2 + angular_frequency = 2.0 * math.pi * natural_frequency_hz + spring_rate = sprung_mass_kg * angular_frequency * angular_frequency / 4.0 + corner_mass_kg = sprung_mass_kg / 4.0 + damper_rate = 2.0 * 0.70 * math.sqrt(spring_rate * corner_mass_kg) + static_compression = mass_kg * 9.81 / (4.0 * spring_rate) + rest_length = max( + suspension_travel_m, + static_compression + suspension_travel_m * 0.35, + ) + + half_track = dynamics.track_width_m * 0.5 + wheel_center_z = -height * 0.5 + dynamics.wheel_radius_m + mount_z = wheel_center_z + rest_length - static_compression + mounts = ( + (dynamics.front_axle_to_cg_m, half_track, mount_z), + (dynamics.front_axle_to_cg_m, -half_track, mount_z), + (-dynamics.rear_axle_to_cg_m, half_track, mount_z), + (-dynamics.rear_axle_to_cg_m, -half_track, mount_z), + ) + + ground_clearance = float(np.clip(height * 0.10, 0.12, 0.35)) + chassis_bottom = -height * 0.5 + ground_clearance + chassis_top = height * 0.45 + chassis_center_z = (chassis_bottom + chassis_top) * 0.5 + chassis_half_length = ( + length * 0.46 + if longitudinal_collision_padding_m is None + else length * 0.5 + longitudinal_collision_padding_m + ) + chassis_half_width = ( + width * 0.44 + if lateral_collision_padding_m is None + else width * 0.5 + lateral_collision_padding_m + ) + return VehicleModel( + chassis_half_extents_m=( + chassis_half_length, + chassis_half_width, + (chassis_top - chassis_bottom) * 0.5, + ), + chassis_offset_m=(0.0, 0.0, chassis_center_z), + suspension_mounts_m=mounts, + wheel_radius_m=dynamics.wheel_radius_m, + suspension_rest_length_m=rest_length, + suspension_max_compression_m=suspension_travel_m, + spring_stiffness_n_per_m=spring_rate, + damper_rate_n_s_per_m=damper_rate, + tire_friction=dynamics.tire_grip, + cornering_stiffness_n_per_rad=dynamics.cornering_stiffness_n_per_rad, + rolling_resistance=dynamics.rolling_resistance, + max_engine_force_n=dynamics.max_engine_force_n, + max_brake_force_n=dynamics.max_brake_force_n, + ) + + +def vehicle_dynamics_for_object( + object_type: str, + dimensions_lwh: npt.ArrayLike, + mass_kg: float, +) -> VehicleDynamicsComponent | None: + """Build the classified four-wheel design for a recorded scene object.""" + kind = canonical_object_type(object_type) + max_accel = 3.5 if kind == "car" else 2.0 + max_lateral = 5.5 if kind == "car" else 3.6 + return _vehicle_dynamics( + kind=kind, + dimensions_lwh=dimensions_lwh, + mass_kg=mass_kg, + max_accel_mps2=max_accel, + max_brake_mps2=6.0, + max_lateral_accel_mps2=max_lateral, + tire_grip=0.92 if kind == "car" else 0.82, + rolling_resistance=0.015, + aero_drag_coefficient=0.42 if kind == "car" else 0.70, + ) + + +def vehicle_dynamics_from_config(config: VehicleConfig) -> VehicleDynamicsComponent: + """Build the ego four-wheel design used by the interactive drive solver.""" + result = _vehicle_dynamics( + kind="car", + dimensions_lwh=( + config.aabb_length_m, + config.aabb_width_m, + config.aabb_height_m, + ), + mass_kg=config.mass_kg, + max_accel_mps2=config.max_accel_mps2, + max_brake_mps2=config.max_brake_mps2, + max_lateral_accel_mps2=config.max_lateral_accel_mps2, + tire_grip=config.tire_grip, + rolling_resistance=config.rolling_resistance, + aero_drag_coefficient=config.aero_drag_coefficient, + wheel_base_m=config.wheel_base_m, + ) + assert result is not None + return result + + +def rigid_body_model_from_vehicle_config(config: VehicleConfig) -> RigidBodyModel: + """Build the ego chassis, wheels, and suspension from its runtime config.""" + dimensions = ( + config.aabb_length_m, + config.aabb_width_m, + config.aabb_height_m, + ) + dynamics = vehicle_dynamics_from_config(config) + return RigidBodyModel( + mass_kg=config.mass_kg, + half_extents_m=tuple(value * 0.5 for value in dimensions), + restitution=config.collision_restitution, + friction=config.collision_friction, + vehicle=_physx_vehicle_model( + dynamics, + dimensions, + config.mass_kg, + suspension_travel_m=config.suspension_travel_m, + ), + ) + + +def suspension_for_object(object_type: str) -> SuspensionComponent | None: + """Return game-car suspension only for self-propelled four-wheel classes.""" + if canonical_object_type(object_type) not in {"car", "truck", "bus", "trailer"}: + return None + return SuspensionComponent( + stiffness=42.0, + damping=9.0, + travel_m=0.22, + visual_gain=0.65, + max_roll_rad=0.16, + max_pitch_rad=0.10, + ) + + +def game_entity_from_vehicle_state( + state: VehicleState, + config: VehicleConfig, + *, + entity_id: str = "ego", +) -> GameEntity: + """Build an engine-neutral ego entity from authoritative simulation state.""" + half_yaw = state.yaw_rad * 0.5 + quaternion = np.asarray( + [0.0, 0.0, math.sin(half_yaw), math.cos(half_yaw)], dtype=np.float32 + ) + velocity = np.asarray( + [ + state.velocity_x_mps + if state.velocity_x_mps is not None + else math.cos(state.yaw_rad) * state.speed_mps, + state.velocity_y_mps + if state.velocity_y_mps is not None + else math.sin(state.yaw_rad) * state.speed_mps, + 0.0, + ], + dtype=np.float32, + ) + dynamics = vehicle_dynamics_from_config(config) + return GameEntity( + entity_id=entity_id, + object_type="Car", + transform=TransformComponent( + np.asarray([state.x_m, state.y_m, state.z_m], dtype=np.float32), + quaternion, + ), + rigid_body=RigidBodyComponent( + mass_kg=config.mass_kg, + linear_velocity_mps=velocity, + angular_velocity_radps=np.asarray( + [0.0, 0.0, state.yaw_rate_radps], dtype=np.float32 + ), + restitution=config.collision_restitution, + friction=config.collision_friction, + ), + collider=BoxColliderComponent( + ( + config.aabb_length_m * 0.5, + config.aabb_width_m * 0.5, + config.aabb_height_m * 0.5, + ) + ), + vehicle=dynamics, + suspension=SuspensionComponent( + stiffness=config.suspension_stiffness, + damping=config.suspension_damping, + travel_m=config.suspension_travel_m, + visual_gain=config.suspension_visual_gain, + max_roll_rad=config.max_body_roll_rad, + max_pitch_rad=config.max_body_pitch_rad, + ), + detached_from_track=state.ragdoll_active, + ) diff --git a/integrations/omnidreams/omnidreams/interactive_drive/simulation/ego_vehicle_kinematics.py b/integrations/omnidreams/omnidreams/interactive_drive/simulation/ego_vehicle_kinematics.py index eaf27638f..6817d007a 100644 --- a/integrations/omnidreams/omnidreams/interactive_drive/simulation/ego_vehicle_kinematics.py +++ b/integrations/omnidreams/omnidreams/interactive_drive/simulation/ego_vehicle_kinematics.py @@ -2,15 +2,23 @@ # SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. import math +import time import numpy as np from loguru import logger from omnidreams.interactive_drive.config import ChunkConfig, VehicleConfig from omnidreams.interactive_drive.math3d import rig_pose_from_state +from omnidreams.interactive_drive.simulation.components import ( + GameEntity, + game_entity_from_vehicle_state, + vehicle_dynamics_from_config, +) +from omnidreams.interactive_drive.simulation.game_physics import GamePhysicsWorld from omnidreams.interactive_drive.simulation.ground_snap import GroundSnapper from omnidreams.interactive_drive.simulation.map_bounds import MapBounds from omnidreams.interactive_drive.types import ( DriverCommand, + PhysXChunkTimings, SceneBundle, TrajectoryChunk, VehicleState, @@ -55,15 +63,11 @@ def integrate_vehicle( elif speed < 0: speed = min(0.0, speed + decel) elif command.throttle > 0.01: - max_speed = vehicle.max_speed_mps accel = 2.0 * command.throttle * dt_s - if speed * intended_direction < 0: - engine_brake_multiplier = 1.5 - if speed > 0: - speed = max(0.0, speed - accel * engine_brake_multiplier) - else: - speed = min(0.0, speed + accel * engine_brake_multiplier) - else: + if intended_direction < 0.0: + speed -= accel + elif vehicle.speed_limit_enabled: + max_speed = vehicle.max_speed_mps current = abs(speed) high_speed_knee = max_speed * 0.62 if current < high_speed_knee: @@ -73,39 +77,193 @@ def integrate_vehicle( 1e-6, max_speed - high_speed_knee ) taper = max(0.05, 0.5 * (1.0 - excess) ** 3) - speed += intended_direction * accel * taper + speed += accel * taper + else: + speed += accel else: - creep_target = ( - 4.47 # 10 mph, matching the HUD and AlpaSim manual-driver crawl. - ) - if speed < creep_target + 0.1: - speed += (creep_target - speed) * 0.18 * dt_s - elif speed > 0.0: + if speed > 0.0: speed = max(0.0, speed - 0.5 * dt_s) - else: + elif speed < 0.0: speed = min(0.0, speed + 0.5 * dt_s) - # Honour the configured forward / reverse speed caps. - speed = float( - np.clip(speed, -vehicle.max_reverse_speed_mps, vehicle.max_speed_mps) - ) + if vehicle.speed_limit_enabled: + speed = float( + np.clip(speed, -vehicle.max_reverse_speed_mps, vehicle.max_speed_mps) + ) else: - accel = command.throttle * vehicle.max_accel_mps2 - brake = command.brake * vehicle.max_brake_mps2 - speed = speed + (accel - brake) * dt_s - if abs(command.throttle) < 1e-3 and abs(command.brake) < 1e-3: + intended_direction = -1.0 if command.reverse else 1.0 + accel = command.throttle * vehicle.max_accel_mps2 * dt_s + brake = command.brake * vehicle.max_brake_mps2 * dt_s + if brake > 0.0: + speed = _move_towards(speed, 0.0, brake) + elif accel > 0.0: + speed += intended_direction * accel + else: if speed > 0.0: speed = max(0.0, speed - vehicle.drag_mps2 * dt_s) else: speed = min(0.0, speed + vehicle.drag_mps2 * dt_s) - speed = float(np.clip(speed, 0.0, vehicle.max_speed_mps)) + if vehicle.speed_limit_enabled: + speed = float( + np.clip(speed, -vehicle.max_reverse_speed_mps, vehicle.max_speed_mps) + ) - yaw_rate = 0.0 + commanded_yaw_rate = 0.0 if abs(steer_rad) > 1e-5 and abs(speed) > 1e-5: - yaw_rate = speed / vehicle.wheel_base_m * math.tan(steer_rad) + commanded_yaw_rate = speed / vehicle.wheel_base_m * math.tan(steer_rad) + # A fixed steering angle becomes unrealistically aggressive as speed + # rises because bicycle-model lateral acceleration scales with v^2. + # Limit yaw rate by the configured grip envelope while preserving the + # full steering response at parking and neighbourhood speeds. + max_yaw_rate = vehicle.max_lateral_accel_mps2 / abs(speed) + commanded_yaw_rate = float( + np.clip(commanded_yaw_rate, -max_yaw_rate, max_yaw_rate) + ) + + design = vehicle_dynamics_from_config(vehicle) + forward = np.asarray( + [math.cos(state.yaw_rad), math.sin(state.yaw_rad)], dtype=np.float32 + ) + left = np.asarray([-forward[1], forward[0]], dtype=np.float32) + velocity = np.asarray( + [ + state.velocity_x_mps + if state.velocity_x_mps is not None + else forward[0] * state.speed_mps, + state.velocity_y_mps + if state.velocity_y_mps is not None + else forward[1] * state.speed_mps, + ], + dtype=np.float32, + ) + if state.ragdoll_active: + lateral_speed = float(np.dot(velocity, left)) + grip = float(np.clip(vehicle.tire_grip * dt_s * 4.0, 0.0, 1.0)) + velocity -= left * lateral_speed * grip + longitudinal_speed = float(np.dot(velocity, forward)) + velocity += forward * (speed - longitudinal_speed) + yaw_rate = state.yaw_rate_radps * max( + 0.0, 1.0 - 1.8 * dt_s + ) + commanded_yaw_rate * min(1.0, 2.5 * dt_s) + else: + speed_abs = abs(speed) + if speed_abs < 0.75 or speed < 0.0: + response = 1.0 - math.exp(-8.0 * dt_s) + yaw_rate = ( + state.yaw_rate_radps + + (commanded_yaw_rate - state.yaw_rate_radps) * response + ) + # The state pose is at the vehicle CG, not at the rear axle. In a + # no-slip bicycle turn the CG therefore has lateral velocity + # ``rear_axle_to_cg * yaw_rate``. Keeping it here also makes the + # transition into the dynamic tire model continuous. + lateral_speed = design.rear_axle_to_cg_m * yaw_rate + else: + lateral_speed = float(np.dot(velocity, left)) + front_slip = steer_rad - math.atan2( + lateral_speed + design.front_axle_to_cg_m * state.yaw_rate_radps, + speed_abs, + ) + rear_slip = -math.atan2( + lateral_speed - design.rear_axle_to_cg_m * state.yaw_rate_radps, + speed_abs, + ) + front_load_fraction = design.rear_axle_to_cg_m / design.wheel_base_m + rear_load_fraction = 1.0 - front_load_fraction + front_force = float( + np.clip( + design.cornering_stiffness_n_per_rad + * front_load_fraction + * front_slip, + -vehicle.mass_kg + * front_load_fraction + * design.max_lateral_accel_mps2, + vehicle.mass_kg + * front_load_fraction + * design.max_lateral_accel_mps2, + ) + ) + rear_force = float( + np.clip( + design.cornering_stiffness_n_per_rad + * rear_load_fraction + * rear_slip, + -vehicle.mass_kg + * rear_load_fraction + * design.max_lateral_accel_mps2, + vehicle.mass_kg + * rear_load_fraction + * design.max_lateral_accel_mps2, + ) + ) + steered_front_force = front_force * math.cos(steer_rad) + lateral_accel = ( + steered_front_force + rear_force + ) / vehicle.mass_kg - state.yaw_rate_radps * speed + yaw_accel = ( + design.front_axle_to_cg_m * steered_front_force + - design.rear_axle_to_cg_m * rear_force + ) / design.yaw_inertia_kg_m2 + lateral_speed += lateral_accel * dt_s + yaw_rate = state.yaw_rate_radps + yaw_accel * dt_s + max_yaw_rate = design.max_lateral_accel_mps2 / speed_abs + yaw_rate = float(np.clip(yaw_rate, -max_yaw_rate, max_yaw_rate)) yaw = state.yaw_rad + yaw_rate * dt_s - x_m = state.x_m + math.cos(yaw) * speed * dt_s - y_m = state.y_m + math.sin(yaw) * speed * dt_s + if not state.ragdoll_active: + new_forward = np.asarray([math.cos(yaw), math.sin(yaw)], dtype=np.float32) + new_left = np.asarray([-new_forward[1], new_forward[0]], dtype=np.float32) + velocity = new_forward * np.float32(speed) + new_left * np.float32( + lateral_speed + ) + x_m = state.x_m + float(velocity[0]) * dt_s + y_m = state.y_m + float(velocity[1]) * dt_s + + longitudinal_accel = (speed - state.speed_mps) / max(dt_s, 1e-6) + lateral_accel = speed * yaw_rate + target_pitch = float( + np.clip( + -longitudinal_accel + / 9.81 + * vehicle.suspension_visual_gain + * vehicle.max_body_pitch_rad, + -vehicle.max_body_pitch_rad, + vehicle.max_body_pitch_rad, + ) + ) + target_roll = float( + np.clip( + -lateral_accel + / 9.81 + * vehicle.suspension_visual_gain + * vehicle.max_body_roll_rad, + -vehicle.max_body_roll_rad, + vehicle.max_body_roll_rad, + ) + ) + pitch_accel = ( + vehicle.suspension_stiffness * (target_pitch - state.suspension_pitch_rad) + - vehicle.suspension_damping * state.suspension_pitch_rate_radps + ) + roll_accel = ( + vehicle.suspension_stiffness * (target_roll - state.suspension_roll_rad) + - vehicle.suspension_damping * state.suspension_roll_rate_radps + ) + pitch_rate = state.suspension_pitch_rate_radps + pitch_accel * dt_s + roll_rate = state.suspension_roll_rate_radps + roll_accel * dt_s + suspension_pitch = float( + np.clip( + state.suspension_pitch_rad + pitch_rate * dt_s, + -vehicle.max_body_pitch_rad, + vehicle.max_body_pitch_rad, + ) + ) + suspension_roll = float( + np.clip( + state.suspension_roll_rad + roll_rate * dt_s, + -vehicle.max_body_roll_rad, + vehicle.max_body_roll_rad, + ) + ) return VehicleState( x_m=x_m, @@ -116,6 +274,14 @@ def integrate_vehicle( steer_rad=steer_rad, pitch_rad=state.pitch_rad, roll_rad=state.roll_rad, + velocity_x_mps=float(velocity[0]), + velocity_y_mps=float(velocity[1]), + yaw_rate_radps=yaw_rate, + suspension_pitch_rad=suspension_pitch, + suspension_roll_rad=suspension_roll, + suspension_pitch_rate_radps=pitch_rate, + suspension_roll_rate_radps=roll_rate, + ragdoll_active=state.ragdoll_active, ) @@ -127,6 +293,8 @@ def sample_chunk_trajectory( chunk_config: ChunkConfig, vehicle_config: VehicleConfig, ground_snapper: GroundSnapper | None, + physics_world: GamePhysicsWorld | None = None, + capture_physics_debug: bool = False, ) -> TrajectoryChunk: timestamps = np.array( [ @@ -138,10 +306,60 @@ def sample_chunk_trajectory( poses = np.zeros((chunk_size, 4, 4), dtype=np.float32) state = VehicleState(**start_state.__dict__) + actor_samples: list[tuple[tuple[str, np.ndarray, np.ndarray, bool], ...]] = [] + physics_debug_frames = [] + physx_elapsed_s = 0.0 + physx_sync_s = 0.0 + actor_update_ms = 0.0 + solver_ms = 0.0 + readback_ms = 0.0 + bridge_ms = 0.0 + max_visible_actors = 0 + max_detached_actors = 0 + actor_collision_detected = False + actor_collision_frame_index: int | None = None + if physics_world is not None: + physx_started_at = time.perf_counter() + physics_world.synchronize_window( + np.asarray([state.x_m, state.y_m], dtype=np.float32), + timestamp_us=start_timestamp_us, + ) + sync_elapsed_s = time.perf_counter() - physx_started_at + physx_sync_s += sync_elapsed_s + physx_elapsed_s += sync_elapsed_s for frame_idx in range(chunk_size): state = integrate_vehicle( state, command, chunk_config.frame_interval_s, vehicle_config ) + if physics_world is not None: + physx_started_at = time.perf_counter() + state, frame_actor_samples = physics_world.step( + state, + int(timestamps[frame_idx]), + chunk_config.frame_interval_s, + ) + actor_collision_this_frame = bool( + getattr(physics_world, "last_step_actor_collision", False) + ) + actor_collision_detected |= actor_collision_this_frame + if actor_collision_this_frame and actor_collision_frame_index is None: + actor_collision_frame_index = frame_idx + physx_elapsed_s += time.perf_counter() - physx_started_at + step_timings = getattr(physics_world, "last_step_timings", None) + if step_timings is not None: + actor_update_ms += step_timings.actor_update_ms + solver_ms += step_timings.solver_ms + readback_ms += step_timings.readback_ms + bridge_ms += step_timings.bridge_ms + max_visible_actors = max( + max_visible_actors, step_timings.visible_actor_count + ) + max_detached_actors = max( + max_detached_actors, step_timings.detached_actor_count + ) + actor_samples.append(frame_actor_samples) + if capture_physics_debug: + physics_debug_frames.append(physics_world.debug_frame(state)) if ground_snapper is not None: state = ground_snapper.snap(state, vehicle_config) poses[frame_idx] = rig_pose_from_state( @@ -149,14 +367,39 @@ def sample_chunk_trajectory( y_m=state.y_m, z_m=state.z_m, yaw_rad=state.yaw_rad, - pitch_rad=state.pitch_rad, - roll_rad=state.roll_rad, + pitch_rad=state.pitch_rad + state.suspension_pitch_rad, + roll_rad=state.roll_rad + state.suspension_roll_rad, ) + dynamic_actors = ( + physics_world.build_trajectories(timestamps, actor_samples) + if physics_world is not None + else () + ) return TrajectoryChunk( timestamps_us=timestamps, rig_poses_world=poses, boundary_state_after_chunk=state, + dynamic_actors=dynamic_actors, + physics_debug_frames=tuple(physics_debug_frames), + actor_collision_detected=actor_collision_detected, + actor_collision_frame_index=actor_collision_frame_index, + physx_elapsed_s=physx_elapsed_s if physics_world is not None else None, + physx_timings=( + PhysXChunkTimings( + total_ms=physx_elapsed_s * 1000.0, + synchronize_ms=physx_sync_s * 1000.0, + actor_update_ms=actor_update_ms, + solver_ms=solver_ms, + readback_ms=readback_ms, + bridge_ms=bridge_ms, + step_count=chunk_size, + max_visible_actors=max_visible_actors, + max_detached_actors=max_detached_actors, + ) + if physics_world is not None + else None + ), ) @@ -172,6 +415,8 @@ def state_from_initial_pose( yaw_rad=initial_yaw_rad, speed_mps=initial_speed_mps, steer_rad=0.0, + velocity_x_mps=math.cos(initial_yaw_rad) * initial_speed_mps, + velocity_y_mps=math.sin(initial_yaw_rad) * initial_speed_mps, ) @@ -221,6 +466,7 @@ def __init__( map_bounds: MapBounds | None = None, oob_margin_m: float = 50.0, oob_warning_zone_m: float = 100.0, + scene: SceneBundle | None = None, ) -> None: self._state = initial_state self._vehicle_config = vehicle_config @@ -229,11 +475,28 @@ def __init__( self._map_bounds = map_bounds self._oob_margin_m = float(oob_margin_m) self._oob_warning_zone_m = float(oob_warning_zone_m) + self._physics_world = ( + GamePhysicsWorld(scene, vehicle_config) if scene is not None else None + ) + self._capture_physics_debug = False + + def set_physx_debug_enabled(self, enabled: bool) -> None: + """Capture debug collider snapshots only for the active PhysX view.""" + self._capture_physics_debug = bool(enabled) @property def current_state(self) -> VehicleState: return self._state + @property + def game_entities(self) -> tuple[GameEntity, ...]: + """Return the ego and actor objects as engine-neutral components.""" + actors = self._physics_world.entities if self._physics_world is not None else () + return ( + game_entity_from_vehicle_state(self._state, self._vehicle_config), + *actors, + ) + @property def last_proximity(self) -> float: """Out-of-bounds proximity of the latest simulated frame. @@ -252,6 +515,12 @@ def last_proximity(self) -> float: warning_zone_m=self._oob_warning_zone_m, ) + def close(self) -> None: + """Release the Ludus PhysX scene owned by this rollout.""" + if self._physics_world is not None: + self._physics_world.close() + self._physics_world = None + def pose_chunk( self, command: DriverCommand, @@ -264,7 +533,7 @@ def pose_chunk( "Nonzero extrapolation_offset_s is not implemented in Stage 1." ) chunk_config = ChunkConfig( - fps=int(round(1.0 / frame_interval_s)), + fps=round(1.0 / frame_interval_s), initial_chunk_frames=chunk_size, chunk_frames=chunk_size, ) @@ -276,6 +545,8 @@ def pose_chunk( chunk_config=chunk_config, vehicle_config=self._vehicle_config, ground_snapper=self._ground_snapper, + physics_world=self._physics_world, + capture_physics_debug=self._capture_physics_debug, ) self._state = trajectory.boundary_state_after_chunk self._next_timestamp_us = int( diff --git a/integrations/omnidreams/omnidreams/interactive_drive/simulation/game_physics.py b/integrations/omnidreams/omnidreams/interactive_drive/simulation/game_physics.py new file mode 100644 index 000000000..d11ab0f75 --- /dev/null +++ b/integrations/omnidreams/omnidreams/interactive_drive/simulation/game_physics.py @@ -0,0 +1,831 @@ +# 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. + +"""Interactive-drive adapter for the Ludus PhysX-first object graph.""" + +from __future__ import annotations + +import math +import time +from dataclasses import replace + +import numpy as np +from loguru import logger +from ludus_renderer import ( + BodyState, + InvisibleBarrier, + PhysicsObjectGraph, + PhysXWorld, + RigidBodyModel, + SceneObject, +) +from omnidreams.interactive_drive.config import VehicleConfig +from omnidreams.interactive_drive.simulation.components import ( + BoxColliderComponent, + GameEntity, + RigidBodyComponent, + TransformComponent, + rigid_body_model_for_object, + rigid_body_model_from_vehicle_config, + suspension_for_object, + vehicle_dynamics_for_object, +) +from omnidreams.interactive_drive.simulation.traffic_ai import TrafficDriverAI +from omnidreams.interactive_drive.types import ( + DynamicActorTrajectory, + PhysicsDebugFrame, + SceneBundle, + VehicleState, +) + +_BARRIER_LAYER_TOKENS = ("road_bound", "building", "house", "wall", "curb") +_PHYSX_RECENTER_DISTANCE_M = 32.0 +_PHYSX_TOPOLOGY_REFRESH_INTERVAL_US = 2_000_000 +"""Maximum time moving tracks can remain outside a stationary PhysX window.""" + +_PHYSX_BARRIER_SPACING_M = 2.0 +_PHYSX_DEBUG_FORWARD_M = 125.0 +_PHYSX_DEBUG_REAR_M = 15.0 +_PHYSX_DEBUG_LATERAL_M = 100.0 +_VISUAL_FLARE_MIN_SPEED_DELTA_MPS = 5.0 * 0.44704 +_VISUAL_FLARE_COLLISION_WINDOW_US = 500_000 +_NON_EGO_MAX_DRIVE_SPEED_MPS = 15.0 * 0.44704 +_PERSISTENT_TRACK_TIMESTAMP_US = np.iinfo(np.int64).max // 4 +_PHYSX_SIMULATION_RADIUS_M = 96.0 +"""Collision horizon around the last recenter point. + +The 32 m recenter threshold leaves at least 64 m of active topology around the +ego. Actors outside the horizon keep their recorded renderer trajectories until +they enter the PhysX window. +""" + + +def _yaw_from_quaternion_xyzw(quaternion: np.ndarray) -> float: + x, y, z, w = [float(value) for value in quaternion] + return math.atan2(2.0 * (w * z + x * y), 1.0 - 2.0 * (y * y + z * z)) + + +def _body_state_from_vehicle( + state: VehicleState, chassis_half_height_m: float +) -> BodyState: + """Map the ground-anchored rig state to PhysX's chassis-center pose.""" + half_yaw = state.yaw_rad * 0.5 + return BodyState( + position_m=np.asarray( + [state.x_m, state.y_m, state.z_m + chassis_half_height_m], + dtype=np.float32, + ), + orientation_xyzw=np.asarray( + [0.0, 0.0, math.sin(half_yaw), math.cos(half_yaw)], dtype=np.float32 + ), + linear_velocity_mps=np.asarray( + [ + state.velocity_x_mps + if state.velocity_x_mps is not None + else math.cos(state.yaw_rad) * state.speed_mps, + state.velocity_y_mps + if state.velocity_y_mps is not None + else math.sin(state.yaw_rad) * state.speed_mps, + 0.0, + ], + dtype=np.float32, + ), + angular_velocity_radps=np.asarray( + [0.0, 0.0, state.yaw_rate_radps], dtype=np.float32 + ), + ) + + +def _is_visual_flare_impact( + collision_occurred: bool, + before_velocity_mps: np.ndarray, + after_velocity_mps: np.ndarray, + driving_direction_xy: np.ndarray, + impact_normal_xy: np.ndarray | None = None, +) -> bool: + """Return whether a collision changed driving-axis speed by at least 5 mph.""" + speed_delta_mps = abs( + abs(float(np.dot(after_velocity_mps[:2], driving_direction_xy))) + - abs(float(np.dot(before_velocity_mps[:2], driving_direction_xy))) + ) + if impact_normal_xy is not None: + speed_delta_mps = max( + speed_delta_mps, + abs( + float( + np.dot( + after_velocity_mps[:2] - before_velocity_mps[:2], + impact_normal_xy, + ) + ) + ), + ) + meets_threshold = ( + speed_delta_mps >= _VISUAL_FLARE_MIN_SPEED_DELTA_MPS + or math.isclose( + speed_delta_mps, + _VISUAL_FLARE_MIN_SPEED_DELTA_MPS, + rel_tol=1e-6, + abs_tol=1e-6, + ) + ) + return collision_occurred and meets_threshold + + +def _ego_model(vehicle: VehicleConfig) -> RigidBodyModel: + return rigid_body_model_from_vehicle_config(vehicle) + + +def _recorded_actor_trajectory(scene_object: SceneObject) -> DynamicActorTrajectory: + """Build one reusable renderer track that holds its final pose indefinitely.""" + timestamps = scene_object.timestamps_us + positions = scene_object.positions_m + orientations = scene_object.orientations_xyzw + if int(timestamps[-1]) < _PERSISTENT_TRACK_TIMESTAMP_US: + timestamps = np.concatenate( + (timestamps, np.asarray([_PERSISTENT_TRACK_TIMESTAMP_US], dtype=np.int64)) + ) + positions = np.concatenate((positions, positions[-1:]), axis=0) + orientations = np.concatenate((orientations, orientations[-1:]), axis=0) + return DynamicActorTrajectory( + entity_id=scene_object.object_id, + object_type=scene_object.object_type, + timestamps_us=timestamps, + translations_world=positions, + orientations_xyzw=orientations, + dimensions_lwh=np.asarray(scene_object.model.half_extents_m, dtype=np.float32) + * 2.0, + ) + + +def _simplify_barrier_segments(segments_world: np.ndarray) -> tuple[np.ndarray, ...]: + """Coalesce dense ordered map strokes into game-scale wall segments.""" + segments = np.asarray(segments_world, dtype=np.float32) + if len(segments) == 0: + return () + simplified: list[np.ndarray] = [] + start = segments[0, 0, :2].copy() + end = segments[0, 1, :2].copy() + for segment in segments[1:]: + next_start = segment[0, :2] + next_end = segment[1, :2] + if float(np.linalg.norm(next_start - end)) > 0.25: + if float(np.linalg.norm(end - start)) > 1e-4: + simplified.append(np.stack([start, end])) + start = next_start.copy() + end = next_end.copy() + if float(np.linalg.norm(end - start)) >= _PHYSX_BARRIER_SPACING_M: + simplified.append(np.stack([start, end])) + start = end.copy() + if float(np.linalg.norm(end - start)) > 1e-4: + simplified.append(np.stack([start, end])) + return tuple(simplified) + + +class GamePhysicsWorld: + """Adapt a scene bundle to Ludus and delegate all simulation to PhysX.""" + + def __init__(self, scene: SceneBundle, vehicle: VehicleConfig) -> None: + started_at = time.perf_counter() + self._vehicle = vehicle + objects = tuple( + self._object_from_track(track, vehicle) + for track in scene.vehicle_bbox_tracks + ) + barriers = ( + self._build_barriers(scene) if vehicle.static_collision_enabled else () + ) + self.graph = PhysicsObjectGraph(objects=objects, barriers=barriers) + self._recorded_trajectories_by_id = { + obj.object_id: _recorded_actor_trajectory(obj) for obj in objects + } + initial_transform = getattr(scene, "initial_rig_to_world", None) + initial_xy = ( + np.asarray(initial_transform[:2, 3], dtype=np.float32) + if initial_transform is not None + else np.zeros(2, dtype=np.float32) + ) + initial_timestamp_us = int(getattr(scene, "initial_timestamp_us", 0)) + self._physics_graph = self.graph.copy_for_physx( + initial_xy, + _PHYSX_SIMULATION_RADIUS_M, + timestamp_us=initial_timestamp_us, + ) + self._physics_center_xy = initial_xy.copy() + self._physics_timestamp_us = initial_timestamp_us + self._entities = [ + self._entity_from_object(obj) for obj in self._physics_graph.objects + ] + self._entities_by_id = {entity.entity_id: entity for entity in self._entities} + self._detached_entity_ids: set[str] = set() + self.last_step_timings = None + self.last_step_actor_collision = False + self._visual_flare_collision_velocity_mps: np.ndarray | None = None + self._visual_flare_driving_direction_xy: np.ndarray | None = None + self._visual_flare_impact_normal_xy: np.ndarray | None = None + self._visual_flare_collision_deadline_us: int | None = None + self._pending_struck_vehicle_ids: set[str] = set() + self._ego_model = _ego_model(vehicle) + self._world = PhysXWorld( + self._physics_graph, + self._ego_model, + actor_collision_enabled=vehicle.actor_collision_enabled, + max_actor_drive_speed_mps=_NON_EGO_MAX_DRIVE_SPEED_MPS, + ) + self._traffic_ai = TrafficDriverAI() + self._traffic_ai.synchronize(self._physics_graph.objects) + self._refresh_debug_barriers() + logger.info( + "[physics] PhysX graph ready in {:.1f} ms; objects={}/{} barriers={}/{} simulation_radius_m={:.0f}", + (time.perf_counter() - started_at) * 1000.0, + len(self._physics_graph.objects), + len(self.graph.objects), + len(self._physics_graph.barriers), + len(self.graph.barriers), + _PHYSX_SIMULATION_RADIUS_M, + ) + + @staticmethod + def _object_from_track(track: object, vehicle: VehicleConfig) -> SceneObject: + dimensions = np.asarray(track.dimensions_lwh[0], dtype=np.float32) + return SceneObject( + object_id=track.track_id, + object_type=track.object_type, + model=rigid_body_model_for_object( + track.object_type, + dimensions, + restitution=vehicle.collision_restitution, + friction=vehicle.collision_friction, + ), + timestamps_us=np.asarray(track.timestamps_us, dtype=np.int64), + positions_m=np.asarray(track.centers_world, dtype=np.float32), + orientations_xyzw=np.asarray(track.orientations_xyzw, dtype=np.float32), + max_extrapolation_us=track.max_extrapolation_us, + ) + + @staticmethod + def _entity_from_object(scene_object: SceneObject) -> GameEntity: + dimensions = np.asarray(scene_object.model.half_extents_m) * 2.0 + return GameEntity( + entity_id=scene_object.object_id, + object_type=scene_object.object_type, + transform=TransformComponent( + scene_object.positions_m[0], scene_object.orientations_xyzw[0] + ), + rigid_body=RigidBodyComponent( + mass_kg=scene_object.model.mass_kg, + linear_velocity_mps=np.zeros(3, dtype=np.float32), + angular_velocity_radps=np.zeros(3, dtype=np.float32), + restitution=scene_object.model.restitution, + friction=scene_object.model.friction, + ), + collider=BoxColliderComponent(scene_object.model.half_extents_m), + vehicle=vehicle_dynamics_for_object( + scene_object.object_type, + dimensions, + scene_object.model.mass_kg, + ), + suspension=suspension_for_object(scene_object.object_type), + ) + + @staticmethod + def _build_barriers(scene: SceneBundle) -> tuple[InvisibleBarrier, ...]: + barriers: list[InvisibleBarrier] = [] + for layer_index, layer in enumerate(scene.line_layers): + if any( + token in layer.layer_name.lower() for token in _BARRIER_LAYER_TOKENS + ): + for segment_index, segment in enumerate( + _simplify_barrier_segments(layer.segments_world) + ): + barriers.append( + InvisibleBarrier( + tuple(float(value) for value in segment[0]), + tuple(float(value) for value in segment[1]), + barrier_id=f"line-{layer_index}-{segment_index}", + ) + ) + for layer_index, layer in enumerate(scene.polygon_layers): + if not any( + token in layer.layer_name.lower() for token in _BARRIER_LAYER_TOKENS + ): + continue + for polygon_index, polygon in enumerate(layer.polygons_world): + points = np.asarray(polygon, dtype=np.float32) + for index in range(len(points)): + barriers.append( + InvisibleBarrier( + tuple(float(value) for value in points[index - 1, :2]), + tuple(float(value) for value in points[index, :2]), + barrier_id=( + f"polygon-{layer_index}-{polygon_index}-{index}" + ), + ) + ) + return tuple(barriers) + + @property + def entities(self) -> tuple[GameEntity, ...]: + """Return actor entities synchronized from the Ludus object graph.""" + return tuple(self._entities) + + @property + def _active_collider_ids(self) -> set[str]: + """Expose the native collider set for invariant checks and diagnostics.""" + return set(self._world.active_collider_ids) + + def synchronize_window( + self, center_xy_m: np.ndarray, timestamp_us: int | None = None + ) -> bool: + """Incrementally recenter active PhysX topology when the ego moves.""" + center = np.asarray(center_xy_m, dtype=np.float32) + if center.shape != (2,): + raise ValueError("center_xy_m must have shape (2,)") + center_is_current = ( + float(np.linalg.norm(center - self._physics_center_xy)) + < _PHYSX_RECENTER_DISTANCE_M + ) + timestamp_is_current = timestamp_us is None or ( + 0 + <= timestamp_us - self._physics_timestamp_us + < _PHYSX_TOPOLOGY_REFRESH_INTERVAL_US + ) + if center_is_current and timestamp_is_current: + return False + physics_graph = self.graph.copy_for_physx( + center, + _PHYSX_SIMULATION_RADIUS_M, + timestamp_us=timestamp_us, + ) + incoming_ids = {obj.object_id for obj in physics_graph.objects} + retained_detached = tuple( + obj + for obj in self._physics_graph.objects + if obj.object_id in self._detached_entity_ids + and obj.object_id not in incoming_ids + ) + if retained_detached: + physics_graph = PhysicsObjectGraph( + objects=physics_graph.objects + retained_detached, + barriers=physics_graph.barriers, + ) + self._world.synchronize(physics_graph, timestamp_us=timestamp_us) + self._traffic_ai.synchronize(physics_graph.objects) + existing_entities = {entity.entity_id: entity for entity in self._entities} + self._entities = [ + existing_entities.get(scene_object.object_id) + or self._entity_from_object(scene_object) + for scene_object in physics_graph.objects + ] + self._entities_by_id = {entity.entity_id: entity for entity in self._entities} + self._detached_entity_ids.intersection_update(self._entities_by_id) + self._physics_graph = physics_graph + self._physics_center_xy = center.copy() + if timestamp_us is not None: + self._physics_timestamp_us = timestamp_us + self._refresh_debug_barriers() + return True + + def _refresh_debug_barriers(self) -> None: + if self._physics_graph.barriers: + self._debug_barrier_ids = tuple( + barrier.barrier_id or f"barrier-{index}" + for index, barrier in enumerate(self._physics_graph.barriers) + ) + self._debug_barrier_segments = np.asarray( + [ + [barrier.start_xy_m, barrier.end_xy_m] + for barrier in self._physics_graph.barriers + ], + dtype=np.float32, + ) + self._debug_barrier_thicknesses = np.asarray( + [barrier.thickness_m for barrier in self._physics_graph.barriers], + dtype=np.float32, + ) + self._debug_barrier_heights = np.asarray( + [barrier.height_m for barrier in self._physics_graph.barriers], + dtype=np.float32, + ) + else: + self._debug_barrier_ids = () + self._debug_barrier_segments = np.empty((0, 2, 2), dtype=np.float32) + self._debug_barrier_thicknesses = np.empty((0,), dtype=np.float32) + self._debug_barrier_heights = np.empty((0,), dtype=np.float32) + + def debug_frame(self, state: VehicleState) -> PhysicsDebugFrame: + """Capture the active collider topology without rendering it.""" + half_yaw = state.yaw_rad * 0.5 + ego_xy = np.asarray([state.x_m, state.y_m], dtype=np.float32) + forward = np.asarray( + [math.cos(state.yaw_rad), math.sin(state.yaw_rad)], dtype=np.float32 + ) + left = np.asarray([-forward[1], forward[0]], dtype=np.float32) + ( + actor_ids, + actor_positions, + actor_orientations, + actor_dimensions, + ) = self._world.collider_state_arrays() + if len(actor_positions): + actor_delta = actor_positions[:, :2] - ego_xy + actor_forward = actor_delta @ forward + actor_lateral = actor_delta @ left + quaternion = actor_orientations + qx, qy, qz, qw = (quaternion[:, index] for index in range(4)) + # Project the full oriented collider onto the ego axes. Checking + # only its center drops long vehicles whose body crosses the view + # boundary even though the collider is still visible. + local_axes_xy = ( + np.column_stack( + ( + 1.0 - 2.0 * (qy * qy + qz * qz), + 2.0 * (qx * qy + qw * qz), + ) + ), + np.column_stack( + ( + 2.0 * (qx * qy - qw * qz), + 1.0 - 2.0 * (qx * qx + qz * qz), + ) + ), + np.column_stack( + ( + 2.0 * (qx * qz + qw * qy), + 2.0 * (qy * qz - qw * qx), + ) + ), + ) + half_dimensions = actor_dimensions * 0.5 + actor_forward_radius = sum( + half_dimensions[:, axis_index] * np.abs(local_axis @ forward) + for axis_index, local_axis in enumerate(local_axes_xy) + ) + actor_lateral_radius = sum( + half_dimensions[:, axis_index] * np.abs(local_axis @ left) + for axis_index, local_axis in enumerate(local_axes_xy) + ) + actor_visible = ( + (actor_forward + actor_forward_radius >= -_PHYSX_DEBUG_REAR_M) + & (actor_forward - actor_forward_radius <= _PHYSX_DEBUG_FORWARD_M) + & ( + np.abs(actor_lateral) - actor_lateral_radius + <= _PHYSX_DEBUG_LATERAL_M + ) + ) + actor_positions = actor_positions[actor_visible] + actor_orientations = actor_orientations[actor_visible] + actor_dimensions = actor_dimensions[actor_visible] + actor_ids = tuple( + object_id + for object_id, visible in zip(actor_ids, actor_visible, strict=True) + if bool(visible) + ) + else: + actor_positions = np.empty((0, 3), dtype=np.float32) + actor_orientations = np.empty((0, 4), dtype=np.float32) + actor_dimensions = np.empty((0, 3), dtype=np.float32) + if len(self._debug_barrier_segments): + barrier_delta = self._debug_barrier_segments - ego_xy + barrier_forward = barrier_delta @ forward + barrier_lateral = barrier_delta @ left + barrier_radius = self._debug_barrier_thicknesses * 0.5 + barrier_visible = ( + ( + np.max(barrier_forward, axis=1) + barrier_radius + >= -_PHYSX_DEBUG_REAR_M + ) + & ( + np.min(barrier_forward, axis=1) - barrier_radius + <= _PHYSX_DEBUG_FORWARD_M + ) + & ( + np.min(barrier_lateral, axis=1) - barrier_radius + <= _PHYSX_DEBUG_LATERAL_M + ) + & ( + np.max(barrier_lateral, axis=1) + barrier_radius + >= -_PHYSX_DEBUG_LATERAL_M + ) + ) + barrier_segments = self._debug_barrier_segments[barrier_visible] + barrier_thicknesses = self._debug_barrier_thicknesses[barrier_visible] + barrier_heights = self._debug_barrier_heights[barrier_visible] + barrier_ids = tuple( + barrier_id + for barrier_id, visible in zip( + self._debug_barrier_ids, barrier_visible, strict=True + ) + if bool(visible) + ) + else: + barrier_segments = self._debug_barrier_segments + barrier_thicknesses = self._debug_barrier_thicknesses + barrier_heights = self._debug_barrier_heights + barrier_ids = self._debug_barrier_ids + return PhysicsDebugFrame( + ego_position_m=np.asarray( + [ + state.x_m, + state.y_m, + state.z_m + self._ego_model.half_extents_m[2], + ], + dtype=np.float32, + ), + ego_orientation_xyzw=np.asarray( + [0.0, 0.0, math.sin(half_yaw), math.cos(half_yaw)], + dtype=np.float32, + ), + ego_dimensions_lwh=np.asarray( + self._ego_model.half_extents_m, dtype=np.float32 + ) + * 2.0, + actor_positions_m=actor_positions, + actor_orientations_xyzw=actor_orientations, + actor_dimensions_lwh=actor_dimensions, + barrier_segments_xy_m=barrier_segments, + barrier_thicknesses_m=barrier_thicknesses, + barrier_heights_m=barrier_heights, + actor_ids=actor_ids, + barrier_ids=barrier_ids, + ) + + def step( + self, state: VehicleState, timestamp_us: int, dt_s: float + ) -> tuple[VehicleState, tuple[tuple[str, np.ndarray, np.ndarray, bool], ...]]: + """Advance the authoritative PhysX scene and return actor samples.""" + step_started_at = time.perf_counter() + ego_before_step = _body_state_from_vehicle( + state, self._ego_model.half_extents_m[2] + ) + physics_step = self._world.step_compact( + ego_before_step, + timestamp_us, + dt_s, + ) + active_objects = { + scene_object.object_id: scene_object + for scene_object in self._physics_graph.objects + } + if physics_step.struck_object_ids: + self._pending_struck_vehicle_ids.update(physics_step.struck_object_ids) + self._visual_flare_collision_velocity_mps = ( + ego_before_step.linear_velocity_mps.copy() + ) + self._visual_flare_driving_direction_xy = np.asarray( + [math.cos(state.yaw_rad), math.sin(state.yaw_rad)], dtype=np.float32 + ) + strongest_closing_speed_mps = _VISUAL_FLARE_MIN_SPEED_DELTA_MPS + self._visual_flare_impact_normal_xy = None + actor_bodies = { + object_id: body for object_id, body, _ in physics_step.actor_samples + } + for object_id in physics_step.struck_object_ids: + body = actor_bodies.get(object_id) + scene_object = active_objects.get(object_id) + if body is None or scene_object is None: + continue + separation_xy = body.position_m[:2] - ego_before_step.position_m[:2] + separation_m = float(np.linalg.norm(separation_xy)) + if separation_m <= 1e-6: + continue + impact_normal_xy = separation_xy / separation_m + _, _, track_velocity_mps = scene_object.sample(timestamp_us) + relative_velocity_xy = ( + track_velocity_mps[:2] - ego_before_step.linear_velocity_mps[:2] + ) + closing_speed_mps = -float( + np.dot(relative_velocity_xy, impact_normal_xy) + ) + if closing_speed_mps >= strongest_closing_speed_mps: + strongest_closing_speed_mps = closing_speed_mps + self._visual_flare_impact_normal_xy = impact_normal_xy.copy() + self._visual_flare_collision_deadline_us = ( + timestamp_us + _VISUAL_FLARE_COLLISION_WINDOW_US + ) + collision_window_active = ( + self._visual_flare_collision_deadline_us is not None + and timestamp_us <= self._visual_flare_collision_deadline_us + ) + flare_baseline_velocity = self._visual_flare_collision_velocity_mps + if flare_baseline_velocity is None: + flare_baseline_velocity = ego_before_step.linear_velocity_mps + flare_driving_direction = self._visual_flare_driving_direction_xy + if flare_driving_direction is None: + flare_driving_direction = np.asarray( + [math.cos(state.yaw_rad), math.sin(state.yaw_rad)], dtype=np.float32 + ) + self.last_step_actor_collision = _is_visual_flare_impact( + physics_step.impact or collision_window_active, + flare_baseline_velocity, + physics_step.ego.linear_velocity_mps, + flare_driving_direction, + self._visual_flare_impact_normal_xy, + ) + significant_struck_vehicle_ids = ( + self._pending_struck_vehicle_ids.copy() + if self.last_step_actor_collision + else set() + ) + collision_window_expired = ( + self._visual_flare_collision_deadline_us is not None + and timestamp_us > self._visual_flare_collision_deadline_us + ) + if self.last_step_actor_collision or collision_window_expired: + self._visual_flare_collision_velocity_mps = None + self._visual_flare_driving_direction_xy = None + self._visual_flare_impact_normal_xy = None + self._visual_flare_collision_deadline_us = None + self._pending_struck_vehicle_ids.clear() + actor_samples = [] + pending_controls = [] + native_track_samples = getattr(physics_step, "track_samples", ()) + for actor_index, (object_id, body, native_detached) in enumerate( + physics_step.actor_samples + ): + scene_object = active_objects[object_id] + if actor_index < len(native_track_samples): + ( + track_object_id, + track_position, + track_orientation, + track_velocity, + ) = native_track_samples[actor_index] + if track_object_id != object_id: + raise RuntimeError("native actor and track samples are misaligned") + else: + # Compatibility path for light-weight test doubles and older + # native modules while their timestamp sampling remains Python-side. + track_position, track_orientation, track_velocity = scene_object.sample( + timestamp_us + ) + decision = self._traffic_ai.update( + object_id, + struck=object_id in significant_struck_vehicle_ids, + body=body, + track_position=track_position, + track_orientation_xyzw=track_orientation, + track_velocity_mps=track_velocity, + dt_s=dt_s, + ) + if decision is None: + detached = native_detached + else: + detached = decision.detached_from_track + # Do not let the track motor erase momentum while the visual + # effect's short impact-measurement window is still open. + drive_enabled = ( + decision.drive_enabled + and object_id not in self._pending_struck_vehicle_ids + ) + pending_controls.append((object_id, drive_enabled, detached)) + actor_samples.append( + (object_id, body.position_m, body.orientation_xyzw, detached) + ) + self._world.apply_track_controls(tuple(pending_controls)) + + detached_ids = {sample[0] for sample in actor_samples if sample[3]} + for object_id in self._detached_entity_ids - detached_ids: + self._entities_by_id[object_id].detached_from_track = False + for object_id, position, orientation, detached in actor_samples: + entity = self._entities_by_id[object_id] + entity.transform.position_m = position.copy() + entity.transform.orientation_xyzw = orientation.copy() + entity.detached_from_track = detached + self._detached_entity_ids = detached_ids + + ego = physics_step.ego + yaw = _yaw_from_quaternion_xyzw(ego.orientation_xyzw) + collision_response_active = ( + physics_step.impact + or bool(physics_step.struck_object_ids) + or state.ragdoll_active + ) + yaw_rate_radps = float(ego.angular_velocity_radps[2]) + if collision_response_active: + max_yaw_rate = self._vehicle.max_collision_yaw_rate_radps + yaw_delta = math.atan2( + math.sin(yaw - state.yaw_rad), math.cos(yaw - state.yaw_rad) + ) + yaw_delta = float( + np.clip(yaw_delta, -max_yaw_rate * dt_s, max_yaw_rate * dt_s) + ) + yaw = state.yaw_rad + yaw_delta + yaw_rate_radps = float(np.clip(yaw_rate_radps, -max_yaw_rate, max_yaw_rate)) + forward = np.asarray([math.cos(yaw), math.sin(yaw)]) + ego_height_m = float(ego.position_m[2] - self._ego_model.half_extents_m[2]) + remains_unsettled = ( + abs(ego_height_m) > 0.10 + or abs(float(ego.linear_velocity_mps[2])) > 0.50 + or float(np.linalg.norm(ego.angular_velocity_radps[:2])) > 0.25 + ) + result_state = replace( + state, + x_m=float(ego.position_m[0]), + y_m=float(ego.position_m[1]), + z_m=ego_height_m, + yaw_rad=yaw, + speed_mps=float(np.dot(ego.linear_velocity_mps[:2], forward)), + velocity_x_mps=float(ego.linear_velocity_mps[0]), + velocity_y_mps=float(ego.linear_velocity_mps[1]), + yaw_rate_radps=yaw_rate_radps, + ragdoll_active=physics_step.impact or remains_unsettled, + ) + samples = tuple( + ( + object_id, + position.copy(), + orientation.copy(), + detached, + ) + for object_id, position, orientation, detached in actor_samples + ) + step_total_ms = (time.perf_counter() - step_started_at) * 1000.0 + native_ms = ( + physics_step.timings.actor_update_ms + + physics_step.timings.solver_ms + + physics_step.timings.readback_ms + ) + self.last_step_timings = replace( + physics_step.timings, + total_ms=step_total_ms, + bridge_ms=max(0.0, step_total_ms - native_ms), + ) + return result_state, samples + + def close(self) -> None: + """Release the Ludus PhysX world.""" + self._world.close() + + def build_trajectories( + self, + timestamps_us: np.ndarray, + samples_by_frame: list[tuple[tuple[str, np.ndarray, np.ndarray, bool], ...]], + ) -> tuple[DynamicActorTrajectory, ...]: + """Pack PhysX object samples for Ludus RGB and BEV HD-map rendering.""" + if not self.graph.objects or not samples_by_frame: + return () + result: list[DynamicActorTrajectory] = [] + simulated_timestamps = np.asarray(timestamps_us, dtype=np.int64) + samples_by_id = [ + {sample[0]: sample for sample in frame} for frame in samples_by_frame + ] + simulated_ids = { + object_id for frame in samples_by_id for object_id in frame.keys() + } + for scene_object in self.graph.objects: + physically_simulated = scene_object.object_id in simulated_ids + if physically_simulated: + detached = any( + frame[scene_object.object_id][3] + for frame in samples_by_id + if scene_object.object_id in frame + ) + frame_poses = [] + for timestamp, frame in zip( + simulated_timestamps, samples_by_id, strict=True + ): + sample = frame.get(scene_object.object_id) + if sample is None: + position, orientation, _ = scene_object.sample(int(timestamp)) + else: + position, orientation = sample[1], sample[2] + frame_poses.append((position, orientation)) + positions = np.stack([pose[0] for pose in frame_poses]).astype( + np.float32 + ) + orientations = np.stack([pose[1] for pose in frame_poses]).astype( + np.float32 + ) + trajectory_timestamps = simulated_timestamps + else: + result.append(self._recorded_trajectories_by_id[scene_object.object_id]) + continue + result.append( + DynamicActorTrajectory( + entity_id=scene_object.object_id, + object_type=scene_object.object_type, + timestamps_us=trajectory_timestamps, + translations_world=positions, + orientations_xyzw=orientations, + dimensions_lwh=np.asarray( + scene_object.model.half_extents_m, dtype=np.float32 + ) + * 2.0, + detached_from_track=detached, + is_simulated=True, + ) + ) + return tuple(result) diff --git a/integrations/omnidreams/omnidreams/interactive_drive/simulation/ground_snap.py b/integrations/omnidreams/omnidreams/interactive_drive/simulation/ground_snap.py index 4cf22b4c4..d575022e4 100644 --- a/integrations/omnidreams/omnidreams/interactive_drive/simulation/ground_snap.py +++ b/integrations/omnidreams/omnidreams/interactive_drive/simulation/ground_snap.py @@ -13,6 +13,7 @@ import logging import math +from dataclasses import replace import numpy as np import numpy.typing as npt @@ -208,13 +209,9 @@ def snap(self, state: VehicleState, vehicle: VehicleConfig) -> VehicleState: ) if delta_rot > self._max_rotation_rad: return state - return VehicleState( - x_m=state.x_m, - y_m=state.y_m, + return replace( + state, z_m=float(new_z), - yaw_rad=state.yaw_rad, - speed_mps=state.speed_mps, - steer_rad=state.steer_rad, pitch_rad=float(new_pitch), roll_rad=float(new_roll), ) diff --git a/integrations/omnidreams/omnidreams/interactive_drive/simulation/traffic_ai.py b/integrations/omnidreams/omnidreams/interactive_drive/simulation/traffic_ai.py new file mode 100644 index 000000000..24b50827f --- /dev/null +++ b/integrations/omnidreams/omnidreams/interactive_drive/simulation/traffic_ai.py @@ -0,0 +1,157 @@ +# 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. + +"""Traffic-agent recovery policy for physically simulated scene vehicles.""" + +from __future__ import annotations + +import math +from dataclasses import dataclass + +import numpy as np +from ludus_renderer import BodyState, SceneObject + +_RESTART_AFTER_STOPPED_S = 1.0 +"""Continuous stopped time required before a struck vehicle drives again.""" + +_STOPPED_LINEAR_SPEED_MPS = 0.10 +"""Maximum horizontal speed considered stationary by traffic AI.""" + +_STOPPED_ANGULAR_SPEED_RADPS = 0.10 +"""Maximum angular speed considered stationary by traffic AI.""" + + +def _yaw_from_quaternion_xyzw(quaternion: np.ndarray) -> float: + x, y, z, w = (float(value) for value in quaternion) + return math.atan2(2.0 * (w * z + x * y), 1.0 - 2.0 * (y * y + z * z)) + + +@dataclass(frozen=True) +class TrafficDriverDecision: + """Traffic-AI outputs consumed by the native vehicle actuator.""" + + drive_enabled: bool + """Whether the actor may apply its track-following driving command.""" + + detached_from_track: bool + """Whether rendering should use the simulated recovery trajectory.""" + + +@dataclass +class _TrafficDriverState: + drive_enabled: bool = True + """Whether track-following control is active.""" + + detached_from_track: bool = False + """Whether a collision has displaced the actor from its track.""" + + stopped_duration_s: float = 0.0 + """Continuous stationary time accumulated after the latest strike.""" + + +class TrafficDriverAI: + """Own collision recovery decisions for tracked road vehicles.""" + + def __init__(self) -> None: + self._states: dict[str, _TrafficDriverState] = {} + + def synchronize(self, objects: tuple[SceneObject, ...]) -> None: + """Synchronize AI state with the active vehicle object set.""" + vehicle_ids = { + scene_object.object_id + for scene_object in objects + if scene_object.model.vehicle is not None + } + self._states = { + object_id: self._states.get(object_id, _TrafficDriverState()) + for object_id in vehicle_ids + } + + def update( + self, + object_id: str, + *, + struck: bool, + body: BodyState, + track_position: np.ndarray, + track_orientation_xyzw: np.ndarray, + track_velocity_mps: np.ndarray, + dt_s: float, + ) -> TrafficDriverDecision | None: + """Advance one vehicle's recovery policy from observed physics state.""" + state = self._states.get(object_id) + if state is None: + return None + + if struck: + state.drive_enabled = False + state.detached_from_track = True + state.stopped_duration_s = 0.0 + + if not state.drive_enabled: + linear_speed = float(np.linalg.norm(body.linear_velocity_mps[:2])) + angular_speed = float(np.linalg.norm(body.angular_velocity_radps)) + stopped = ( + linear_speed <= _STOPPED_LINEAR_SPEED_MPS + and angular_speed <= _STOPPED_ANGULAR_SPEED_RADPS + ) + state.stopped_duration_s = ( + state.stopped_duration_s + dt_s if stopped else 0.0 + ) + if state.stopped_duration_s >= _RESTART_AFTER_STOPPED_S: + state.drive_enabled = True + state.stopped_duration_s = 0.0 + elif state.detached_from_track and self._is_recovered( + body, + track_position, + track_orientation_xyzw, + track_velocity_mps, + ): + state.detached_from_track = False + + return TrafficDriverDecision( + drive_enabled=state.drive_enabled, + detached_from_track=state.detached_from_track, + ) + + @staticmethod + def _is_recovered( + body: BodyState, + track_position: np.ndarray, + track_orientation_xyzw: np.ndarray, + track_velocity_mps: np.ndarray, + ) -> bool: + displacement = np.asarray(track_position[:2] - body.position_m[:2]) + heading_error = math.atan2( + math.sin( + _yaw_from_quaternion_xyzw(track_orientation_xyzw) + - _yaw_from_quaternion_xyzw(body.orientation_xyzw) + ), + math.cos( + _yaw_from_quaternion_xyzw(track_orientation_xyzw) + - _yaw_from_quaternion_xyzw(body.orientation_xyzw) + ), + ) + velocity_error = np.asarray( + track_velocity_mps[:2] - body.linear_velocity_mps[:2] + ) + return ( + float(np.linalg.norm(displacement)) <= 0.60 + and abs(heading_error) <= math.radians(8.0) + and float(np.linalg.norm(velocity_error)) <= 0.75 + ) + + +__all__ = ["TrafficDriverAI", "TrafficDriverDecision"] diff --git a/integrations/omnidreams/omnidreams/interactive_drive/slangpy_hud_presenter.py b/integrations/omnidreams/omnidreams/interactive_drive/slangpy_hud_presenter.py index 406ed7ce7..385458d38 100644 --- a/integrations/omnidreams/omnidreams/interactive_drive/slangpy_hud_presenter.py +++ b/integrations/omnidreams/omnidreams/interactive_drive/slangpy_hud_presenter.py @@ -22,14 +22,23 @@ import numpy as np from loguru import logger -from omnidreams.interactive_drive.config import RasterConfig +from omnidreams.interactive_drive.config import ( + BevConfig, + RasterConfig, + VehicleConfig, +) from omnidreams.interactive_drive.cuda_env import DISABLE_CUDA_INTEROP_ENV from omnidreams.interactive_drive.input.keyboard import KeyboardState +from omnidreams.interactive_drive.physx_debug import select_presented_rgb from omnidreams.interactive_drive.presenter import ( _CudaRGBInterop, _env_truthy, ) from omnidreams.interactive_drive.types import DriverCommand, PresentedFrame +from omnidreams.interactive_drive.visual_flare import ( + CollisionVisualFlare, + darken_rgb, +) from PIL import Image, ImageDraw, ImageFont from flashdreams.infra.acceleration.frame_prefetch import prefetch_to_numpy @@ -80,6 +89,67 @@ _BevPanelKey = tuple[int, int, int, int] +_DEFAULT_VEHICLE_CONFIG = VehicleConfig() +_DEFAULT_EGO_DIMENSIONS_LWH = ( + _DEFAULT_VEHICLE_CONFIG.aabb_length_m, + _DEFAULT_VEHICLE_CONFIG.aabb_width_m, + _DEFAULT_VEHICLE_CONFIG.aabb_height_m, +) + + +def _bev_ego_footprint_points( + dimensions_lwh: object, + viewport: tuple[int, int, int, int], + bev: BevConfig, +) -> tuple[tuple[int, int], ...] | None: + """Map the ego footprint into the straight-down, ego-centered panel.""" + dimensions = np.asarray(dimensions_lwh, dtype=np.float64).reshape(-1) + if dimensions.size != 3 or not np.all(np.isfinite(dimensions)): + return None + length_m, width_m, height_m = (float(value) for value in dimensions) + if min(length_m, width_m, height_m) <= 0.0: + return None + + left, top, right, bottom = viewport + target_w, target_h = right - left, bottom - top + if target_w <= 0 or target_h <= 0: + return None + + half_fov = _math.radians(float(bev.fov_deg)) * 0.5 + if not (0.0 < half_fov < _math.pi * 0.5) or float(bev.height_m) <= 0.0: + return None + metres_per_source_pixel = ( + 2.0 * float(bev.height_m) * _math.tan(half_fov) / float(bev.height) + ) + source_cx = float(bev.width) * 0.5 + source_cy = float(bev.height) * 0.5 + + # The BEV image is cover-fitted into the HUD panel; mirror the resize and + # centre-crop performed by ``_build_bev_panel_image``. + scale = max(target_w / float(bev.width), target_h / float(bev.height)) + crop_x = (float(bev.width) * scale - target_w) * 0.5 + crop_y = (float(bev.height) * scale - target_h) * 0.5 + + def project(x_m: float, y_m: float) -> tuple[int, int]: + # Rig forward is map-up and rig left is map-left. The BEV source is + # centered on the rig, so the authoritative ego footprint must remain + # centered instead of being perspective-shifted or clamped onscreen. + source_x = source_cx - y_m / metres_per_source_pixel + source_y = source_cy - x_m / metres_per_source_pixel + return ( + round(left + source_x * scale - crop_x), + round(top + source_y * scale - crop_y), + ) + + half_l, half_w = length_m * 0.5, width_m * 0.5 + footprint = ( + (half_l, half_w), + (half_l, -half_w), + (-half_l, -half_w), + (-half_l, half_w), + ) + return tuple(project(x_m, y_m) for x_m, y_m in footprint) + def _allocate_canvas(width: int, height: int) -> tuple[np.ndarray, Image.Image]: """Allocate the chrome buffer and a PIL Image view sharing its memory. @@ -205,15 +275,16 @@ class KeyboardStateDriveSink: ``pulse`` are unused no-ops kept only so the full control surface exists. """ - def __init__(self, keyboard: KeyboardState) -> None: + def __init__(self, keyboard: KeyboardState, *, source: str = "default") -> None: self._keyboard = keyboard + self._source = source def set_drive( self, *, steer: float, throttle: float, brake: float, reverse: bool = False ) -> None: # ``manual_control`` + ``steer_is_direct`` keep the engine state - # identical regardless of transport. ``reverse`` is set by a - # wheel/controller's bound reverse button (keyboard leaves it False). + # identical regardless of transport. ``reverse`` is set by either a + # wheel/controller's bound reverse button or the keyboard's S/down key. self._keyboard.set_drive_command( DriverCommand( throttle=max(0.0, min(1.0, throttle)), @@ -222,11 +293,12 @@ def set_drive( reverse=bool(reverse), steer_is_direct=True, manual_control=True, - ) + ), + source=self._source, ) def release_all(self) -> None: - self._keyboard.set_drive_command(None) + self._keyboard.set_drive_command(None, source=self._source) def request_reset(self) -> None: # Lets a wheel/controller's bound reset button trigger the same @@ -284,7 +356,20 @@ def __init__( self._spy = spy self._raster = raster self._keyboard = keyboard + self._visual_flare = CollisionVisualFlare() self._args = args + bev_width, bev_height = ( + int(component) + for component in str(args.bev_resolution).lower().split("x", maxsplit=1) + ) + self._bev_config = BevConfig( + enabled=bool(args.bev), + width=bev_width, + height=bev_height, + height_m=float(args.bev_height_m), + fov_deg=float(args.bev_fov_deg), + tilt_deg=float(args.bev_tilt_deg), + ) self._scene_options = scene_options self._control_assets = control_assets self._wheel = wheel @@ -294,12 +379,12 @@ def __init__( # imports would be circular. from omnidreams.interactive_drive.demo import ( KeyboardDriveState, - _bev_marker_y_rel, _scene_label, ) - self._keyboard_drive = KeyboardDriveState(KeyboardStateDriveSink(keyboard)) - self._bev_marker_y_rel = _bev_marker_y_rel + self._keyboard_drive = KeyboardDriveState( + KeyboardStateDriveSink(keyboard, source="keyboard") + ) self._scene_label_fn = _scene_label # Window + device + surface setup mirrors SlangPyPresenter's @@ -376,6 +461,7 @@ def __init__( self._latest_camera_pil: Image.Image | None = None self._latest_bev_source: object | None = None + self._latest_ego_dimensions_lwh: object | None = None self._prepared_bev_source_key: object | None = None self._bev_source_generation = 0 # Numpy view of the latest world-model frame (RGBA8 with alpha @@ -499,7 +585,15 @@ def process_events(self) -> None: if self._keyboard.consume_exit_scene_request(): self.exit_scene() + def trigger_visual_flare(self) -> None: + """Start the collision-feedback fade.""" + self._visual_flare.trigger() + def prepare_frame(self, frame: PresentedFrame, view_mode: str) -> None: + # View mode selects only the primary camera area. BEV remains an + # independent HUD input and must keep updating in the PhysX view. + if view_mode == "physx" and frame.physx_debug is None: + return rgb = self._select_view_rgb(frame, view_mode) if self._cuda_hud_interop is None or not _has_cuda_tensor(rgb): _prefetch_to_numpy(rgb) @@ -515,6 +609,8 @@ def prepare_frame(self, frame: PresentedFrame, view_mode: str) -> None: self._prepared_bev_source_key = source_key def present_frame(self, frame: PresentedFrame, view_mode: str) -> None: + visual_flare = getattr(self, "_visual_flare", None) + flare_opacity = visual_flare.opacity() if visual_flare is not None else 0.0 # Apply any pending resize before touching the display texture # this frame. Done here (not inside on_resize) so Vulkan # resources are only ever rebuilt on the main thread. @@ -523,6 +619,16 @@ def present_frame(self, frame: PresentedFrame, view_mode: str) -> None: self._pending_resize = None self._apply_resize(new_size[0], new_size[1]) + # A queued frame generated before view 3 was selected has no PhysX + # snapshot. Keep the last surface visible until a PhysX-enabled chunk + # arrives instead of briefly substituting the HDMap conditioning view. + if view_mode == "physx" and frame.physx_debug is None: + return + + ego_dimensions = getattr(frame.physx_debug, "ego_dimensions_lwh", None) + if ego_dimensions is not None: + self._latest_ego_dimensions_lwh = ego_dimensions + rgb = self._select_view_rgb(frame, view_mode) if ( view_mode == "model_rgb" @@ -534,7 +640,14 @@ def present_frame(self, frame: PresentedFrame, view_mode: str) -> None: # old-size CUDA/Vulkan buffers against the newly resized window. return try: - if self._present_cuda_hud_frame(frame, rgb): + cuda_presented = ( + self._present_cuda_hud_frame( + frame, rgb, flare_opacity=flare_opacity + ) + if flare_opacity > 0.0 + else self._present_cuda_hud_frame(frame, rgb) + ) + if cuda_presented: return except Exception as exc: if not self._cuda_hud_error_logged: @@ -550,8 +663,15 @@ def present_frame(self, frame: PresentedFrame, view_mode: str) -> None: self._update_camera_pil(rgb) if frame.bev_host_uint8 is not None: self._update_bev_pil(frame.bev_host_uint8) - self._render_canvas(frame.status_message) - self._present_canvas(use_gpu_camera=frame.status_message is None) + if flare_opacity > 0.0: + self._render_canvas(frame.status_message, force_cpu_camera=True) + self._present_canvas( + use_gpu_camera=False, + flare_opacity=flare_opacity, + ) + else: + self._render_canvas(frame.status_message) + self._present_canvas(use_gpu_camera=frame.status_message is None) def present_world_model_loading(self, *, process_events: bool = True) -> None: """Paint the HUD's world-model loading state during blocking setup work.""" @@ -561,7 +681,13 @@ def present_world_model_loading(self, *, process_events: bool = True) -> None: self._render_canvas("Loading World Model") self._present_canvas(use_gpu_camera=False) - def _present_cuda_hud_frame(self, frame: PresentedFrame, rgb: object) -> bool: + def _present_cuda_hud_frame( + self, + frame: PresentedFrame, + rgb: object, + *, + flare_opacity: float = 0.0, + ) -> bool: if self._cuda_hud_interop is None: return False @@ -586,6 +712,7 @@ def _present_cuda_hud_frame(self, frame: PresentedFrame, rgb: object) -> bool: overlay_rgba=overlay, camera_area=camera_area, bg_rgb=BG_COLOR, + flare_opacity=flare_opacity, ) if not queued: return True @@ -619,11 +746,14 @@ def close(self) -> None: # -- Frame helpers --------------------------------------------- - @staticmethod - def _select_view_rgb(frame: PresentedFrame, view_mode: str) -> object: - if view_mode == "model_rgb" and frame.model_rgb_host_uint8 is not None: - return frame.model_rgb_host_uint8 - return frame.rgb_host_uint8 + def _select_view_rgb(self, frame: PresentedFrame, view_mode: str) -> object: + raster = getattr(self, "_raster", None) + return select_presented_rgb( + frame, + view_mode, + width=raster.width if raster is not None else 1, + height=raster.height if raster is not None else 1, + ) def _update_camera_pil(self, rgb: object) -> None: rgb = _as_rgb_host_uint8(rgb) @@ -943,7 +1073,12 @@ def _submit_ready_cuda_hud(self) -> bool: return False return True - def _present_canvas(self, use_gpu_camera: bool = False) -> None: + def _present_canvas( + self, + use_gpu_camera: bool = False, + *, + flare_opacity: float = 0.0, + ) -> None: # Sync to the window's CURRENT size before every present. # SDL3 doesn't always fire on_resize for compositor-side rezies # (window manager fitting the window to the screen on first @@ -974,7 +1109,8 @@ def _present_canvas(self, use_gpu_camera: bool = False) -> None: # (see :func:`_allocate_canvas`), so this is a direct upload with no # PIL-to-numpy memcpy. try: - self._display_texture.copy_from_numpy(self._canvas_buffer) + canvas_buffer = darken_rgb(self._canvas_buffer, flare_opacity) + self._display_texture.copy_from_numpy(canvas_buffer) encoder = self._device.create_command_encoder() if use_gpu_camera: self._composite_camera_gpu(encoder) @@ -1172,6 +1308,7 @@ def _render_canvas( status_message: str | None, *, camera_transparent: bool = False, + force_cpu_camera: bool = False, ) -> None: """Composite camera + chrome into ``self._canvas`` for this frame. @@ -1207,7 +1344,7 @@ def _render_canvas( if camera_transparent: camera_drawn = True elif self._latest_camera_pil is not None: - if status_message is None: + if status_message is None and not force_cpu_camera: # GPU camera path fills the centred fit rect after the canvas # upload; here we only repaint the letterbox bars (~0.3 ms) so # they don't show last frame's content when the fit rect resizes. @@ -1382,6 +1519,9 @@ def _poll_drive_state(self) -> Any: the side panel is not drawn (narrow window / camera-only mode). """ if self._wheel is not None and self._wheel.state.connected: + if self._keyboard_drive.has_active_input: + return self._keyboard_drive.update() + self._keyboard_drive.release_control() return self._wheel.state return self._keyboard_drive.update() @@ -1943,11 +2083,14 @@ def _draw_bev( if panel_image is not None: canvas.paste(panel_image, (inner[0], inner[1])) - # Ego marker (Google-Maps chevron) over the BEV panel. - marker_cx = inner[0] + inner_w // 2 - marker_cy = inner[1] + int(inner_h * self._bev_marker_y_rel()) - marker_size = max(10, min(inner_w, inner_h) // 14) - self._draw_bev_marker(draw, marker_cx, marker_cy, marker_size) + ego_dimensions = getattr(self, "_latest_ego_dimensions_lwh", None) + # Physics snapshots are captured only while the optional PhysX debug + # view is active. Keep the normal RGB/model views' ego marker visible + # with the configured default footprint until an authoritative + # snapshot supplies its dimensions. + if ego_dimensions is None: + ego_dimensions = _DEFAULT_EGO_DIMENSIONS_LWH + self._draw_bev_ego_footprint(draw, inner, ego_dimensions, self._bev_config) def _get_bev_panel_image(self, target_size: tuple[int, int]) -> Image.Image | None: if self._latest_bev_source is None: @@ -1993,35 +2136,20 @@ def _get_bev_panel_image(self, target_size: tuple[int, int]) -> Image.Image | No return None @staticmethod - def _draw_bev_marker( - draw: ImageDraw.ImageDraw, cx: int, cy: int, size: int + def _draw_bev_ego_footprint( + draw: ImageDraw.ImageDraw, + viewport: tuple[int, int, int, int], + dimensions_lwh: object, + bev: BevConfig, ) -> None: - # Soft drop shadow. - shadow_size = size + 4 - draw.ellipse( - ( - cx - shadow_size, - cy - shadow_size + 2, - cx + shadow_size, - cy + shadow_size + 2, - ), - fill=(0, 0, 0, 60), - ) - # White outer ring. - draw.ellipse( - (cx - size, cy - size, cx + size, cy + size), fill=(255, 255, 255, 255) - ) - # Forward chevron in Google-Maps blue. - chevron = size - 4 - draw.polygon( - [ - (cx, cy - chevron), - (cx - int(chevron * 0.7), cy + int(chevron * 0.55)), - (cx, cy + int(chevron * 0.18)), - (cx + int(chevron * 0.7), cy + int(chevron * 0.55)), - ], - fill=(66, 133, 244, 255), - ) + footprint = _bev_ego_footprint_points(dimensions_lwh, viewport, bev) + if footprint is None: + return + edge = (45, 82, 0, 255) + draw.polygon(footprint, fill=NVIDIA_GREEN + (255,), outline=edge) + # The first edge is the front bumper. Highlight it so vehicle heading + # is unambiguous even when the footprint is only a few pixels wide. + draw.line((footprint[0], footprint[1]), fill=(220, 255, 170, 255), width=2) # -- Dropdowns --------------------------------------------------- @@ -2196,6 +2324,7 @@ def _build_key_codes(self) -> dict[str, Any]: "right": _lookup_key(spy.KeyCode, "right", "arrow_right"), "key1": _lookup_key(spy.KeyCode, "key1", "digit1", "num_1"), "key2": _lookup_key(spy.KeyCode, "key2", "digit2", "num_2"), + "key3": _lookup_key(spy.KeyCode, "key3", "digit3", "num_3"), } def _on_keyboard_event(self, event: Any) -> None: @@ -2248,6 +2377,8 @@ def _on_keyboard_event(self, event: Any) -> None: self._keyboard.set_view_mode("model_rgb") elif self._key_matches(key, "key2"): self._keyboard.set_view_mode("rgb") + elif self._key_matches(key, "key3"): + self._keyboard.set_view_mode("physx") elif self._key_matches(key, "r"): self._keyboard.request_reset() elif self._key_matches(key, "x"): @@ -2654,7 +2785,9 @@ def bind_keyboard(self, keyboard: KeyboardState) -> None: from omnidreams.interactive_drive.demo import KeyboardDriveState self._keyboard = keyboard - self._keyboard_drive = KeyboardDriveState(KeyboardStateDriveSink(keyboard)) + self._keyboard_drive = KeyboardDriveState( + KeyboardStateDriveSink(keyboard, source="keyboard") + ) # -- Module-level helpers --------------------------------------------- diff --git a/integrations/omnidreams/omnidreams/interactive_drive/streaming_presenter.py b/integrations/omnidreams/omnidreams/interactive_drive/streaming_presenter.py index 41a53c8b0..6b91455dc 100644 --- a/integrations/omnidreams/omnidreams/interactive_drive/streaming_presenter.py +++ b/integrations/omnidreams/omnidreams/interactive_drive/streaming_presenter.py @@ -28,7 +28,12 @@ from omnidreams.interactive_drive.config import RasterConfig from omnidreams.interactive_drive.input.keyboard import KeyboardState from omnidreams.interactive_drive.loading_overlay import render_loading_overlay +from omnidreams.interactive_drive.physx_debug import select_presented_rgb from omnidreams.interactive_drive.types import DriverCommand, PresentedFrame +from omnidreams.interactive_drive.visual_flare import ( + CollisionVisualFlare, + darken_rgb, +) from flashdreams.serving.realtime.frame_bus import LatestFrameBus from flashdreams.serving.realtime.media import ( @@ -67,8 +72,10 @@ _BROWSER_KEY_TO_VIEW_MODE: dict[str, str] = { # 1 = world-model RGB (the generated drive view, the main demo output). # 2 = HDMap with traffic (the rasterizer's conditioning input). + # 3 = active PhysX colliders and invisible walls. "1": "model_rgb", "2": "rgb", + "3": "physx", } @@ -82,19 +89,23 @@ class _KeyboardDriveSink: def __init__(self, keyboard: KeyboardState) -> None: self._keyboard = keyboard - def set_drive(self, *, steer: float, throttle: float, brake: float) -> None: + def set_drive( + self, *, steer: float, throttle: float, brake: float, reverse: bool = False + ) -> None: self._keyboard.set_drive_command( DriverCommand( throttle=max(0.0, min(1.0, throttle)), brake=max(0.0, min(1.0, brake)), steer=max(-1.0, min(1.0, steer)), + reverse=bool(reverse), steer_is_direct=True, manual_control=True, - ) + ), + source="browser", ) def release_all(self) -> None: - self._keyboard.set_drive_command(None) + self._keyboard.set_drive_command(None, source="browser") # No-ops in-process: the streaming presenter writes directly via # ``KeyboardState`` from its HTTP handler thread. @@ -316,7 +327,7 @@ def _print_port_conflict_help(host: str, port: int, exc: OSError) -> None: -
WASD / Arrows = Drive · 1 = World-Model RGB · 2 = HDMap · R = Reset Rollout
+
WASD / Arrows = Drive · 1 = World-Model RGB · 2 = HDMap · 3 = PhysX · R = Reset Rollout