diff --git a/doc/materialx.md b/doc/materialx.md
index 9b4b01ac..ce2964a0 100644
--- a/doc/materialx.md
+++ b/doc/materialx.md
@@ -557,6 +557,14 @@ make
- [ ] Memory usage is bounded
- [ ] Security: no buffer overflows or memory leaks
+## Related Documentation
+
+- **[OpenPBR Parameters Reference](./openpbr-parameters-reference.md)** - Comprehensive parameter mapping guide
+ - Complete list of all 38 OpenPBR parameters
+ - Blender MaterialX export parameter names
+ - Three.js MeshPhysicalMaterial support status
+ - Conversion recommendations and limitations
+
## References
- [MaterialX Specification v1.38](https://www.materialx.org/docs/api/MaterialX_v1_38_Spec.pdf)
diff --git a/doc/openpbr-parameters-reference.md b/doc/openpbr-parameters-reference.md
new file mode 100644
index 00000000..f171b0fd
--- /dev/null
+++ b/doc/openpbr-parameters-reference.md
@@ -0,0 +1,324 @@
+# OpenPBR Parameters Reference
+
+## Overview
+
+This document provides a comprehensive mapping of OpenPBR (Open Physically-Based Rendering) parameters as implemented in TinyUSDZ, their corresponding Blender v4.5+ MaterialX export names, and Three.js MeshPhysicalMaterial support status.
+
+**Key Points:**
+- OpenPBR is the Academy Software Foundation's open standard for PBR materials
+- Blender v4.5+ exports MaterialX with `ND_open_pbr_surface_surfaceshader` node definition
+- Three.js MeshPhysicalMaterial has limited support for advanced OpenPBR features
+- TinyUSDZ supports full OpenPBR parameter set for parsing and conversion
+
+## Parameter Categories
+
+### Legend
+
+| Symbol | Meaning |
+|--------|---------|
+| тЬЕ | Fully supported in Three.js MeshPhysicalMaterial |
+| тЪая╕П | Partially supported or requires workarounds |
+| тЭМ | Not supported in Three.js (no equivalent parameter) |
+| ЁЯФД | Supported but with different semantic interpretation |
+
+---
+
+## 1. Base Layer Properties
+
+The base layer defines the fundamental appearance of the material - its color, reflectivity, and surface texture.
+
+| TinyUSDZ Parameter | Blender/MaterialX Name | Type | Default | Three.js Support | Three.js Mapping | Notes |
+|-------------------|------------------------|------|---------|------------------|------------------|-------|
+| `base_weight` | `inputs:base_weight` | float | 1.0 | тЪая╕П | `opacity` | Affects overall opacity in Three.js; not a direct base layer weight |
+| `base_color` | `inputs:base_color` | color3f | (0.8, 0.8, 0.8) | тЬЕ | `color` | Direct 1:1 mapping to diffuse color |
+| `base_roughness` | `inputs:base_roughness` | float | 0.0 | тЬЕ | `roughness` | Direct mapping for microfacet roughness |
+| `base_metalness` | `inputs:base_metalness` | float | 0.0 | тЬЕ | `metalness` | Direct mapping for metallic workflow |
+
+**Three.js Notes:**
+- `base_weight` doesn't have a direct equivalent; Three.js uses `opacity` for transparency
+- Base layer is the foundation of the PBR material in both OpenPBR and Three.js
+
+---
+
+## 2. Specular Reflection Properties
+
+Specular properties control the shiny, mirror-like reflections on dielectric (non-metallic) surfaces.
+
+| TinyUSDZ Parameter | Blender/MaterialX Name | Type | Default | Three.js Support | Three.js Mapping | Notes |
+|-------------------|------------------------|------|---------|------------------|------------------|-------|
+| `specular_weight` | `inputs:specular_weight` | float | 1.0 | тЪая╕П | `reflectivity` (r170+) | Three.js r170+ has limited support |
+| `specular_color` | `inputs:specular_color` | color3f | (1.0, 1.0, 1.0) | тЪая╕П | `specularColor` (limited) | Only available in certain material types |
+| `specular_roughness` | `inputs:specular_roughness` | float | 0.3 | тЬЕ | `roughness` | Same as base_roughness in Three.js |
+| `specular_ior` | `inputs:specular_ior` | float | 1.5 | тЬЕ | `ior` | Index of refraction, directly supported |
+| `specular_ior_level` | `inputs:specular_ior_level` | float | 0.5 | тЭМ | тАФ | No equivalent in Three.js |
+| `specular_anisotropy` | `inputs:specular_anisotropy` | float | 0.0 | тЪая╕П | `anisotropy` (r170+) | Experimental support in recent Three.js |
+| `specular_rotation` | `inputs:specular_rotation` | float | 0.0 | тЪая╕П | `anisotropyRotation` (r170+) | Requires anisotropy support |
+
+**Three.js Notes:**
+- Anisotropic reflection is experimental and not widely supported
+- `specular_ior_level` has no Three.js equivalent
+- Most specular properties require custom shader implementations for full fidelity
+
+---
+
+## 3. Transmission Properties (Transparency/Glass)
+
+Transmission properties control light passing through the material, used for glass, water, and translucent materials.
+
+| TinyUSDZ Parameter | Blender/MaterialX Name | Type | Default | Three.js Support | Three.js Mapping | Notes |
+|-------------------|------------------------|------|---------|------------------|------------------|-------|
+| `transmission_weight` | `inputs:transmission_weight` | float | 0.0 | тЬЕ | `transmission` | Supported in MeshPhysicalMaterial |
+| `transmission_color` | `inputs:transmission_color` | color3f | (1.0, 1.0, 1.0) | тЭМ | тАФ | **NOT SUPPORTED** - Three.js uses white |
+| `transmission_depth` | `inputs:transmission_depth` | float | 0.0 | тЪая╕П | `thickness` | Approximate mapping, different semantics |
+| `transmission_scatter` | `inputs:transmission_scatter` | color3f | (0.0, 0.0, 0.0) | тЭМ | тАФ | **NOT SUPPORTED** - Volume scattering |
+| `transmission_scatter_anisotropy` | `inputs:transmission_scatter_anisotropy` | float | 0.0 | тЭМ | тАФ | **NOT SUPPORTED** - Advanced scattering |
+| `transmission_dispersion` | `inputs:transmission_dispersion` | float | 0.0 | тЭМ | тАФ | **NOT SUPPORTED** - Chromatic dispersion |
+
+**Three.js Notes:**
+- тЭМ **Transmission is NOT fully supported** - Only basic `transmission` weight is available
+- тЭМ Colored transmission, volume scattering, and dispersion require custom shaders
+- Glass materials will appear simplified compared to OpenPBR specification
+
+---
+
+## 4. Subsurface Scattering Properties
+
+Subsurface scattering simulates light penetrating and scattering beneath the surface, crucial for skin, wax, marble, etc.
+
+| TinyUSDZ Parameter | Blender/MaterialX Name | Type | Default | Three.js Support | Three.js Mapping | Notes |
+|-------------------|------------------------|------|---------|------------------|------------------|-------|
+| `subsurface_weight` | `inputs:subsurface_weight` | float | 0.0 | тЭМ | тАФ | **NOT SUPPORTED** |
+| `subsurface_color` | `inputs:subsurface_color` | color3f | (0.8, 0.8, 0.8) | тЭМ | тАФ | **NOT SUPPORTED** |
+| `subsurface_radius` | `inputs:subsurface_radius` | color3f | (1.0, 1.0, 1.0) | тЭМ | тАФ | **NOT SUPPORTED** |
+| `subsurface_scale` | `inputs:subsurface_scale` | float | 1.0 | тЭМ | тАФ | **NOT SUPPORTED** |
+| `subsurface_anisotropy` | `inputs:subsurface_anisotropy` | float | 0.0 | тЭМ | тАФ | **NOT SUPPORTED** |
+
+**Three.js Notes:**
+- тЭМ **Subsurface scattering is NOT supported in standard Three.js materials**
+- Requires custom shader implementations (e.g., via shader chunks)
+- Materials with SSS will fall back to standard diffuse appearance
+- Community solutions exist but are not part of core Three.js
+
+---
+
+## 5. Sheen Properties (Fabric/Velvet)
+
+Sheen adds a soft, velvet-like reflective layer, commonly used for cloth, fabric, and microfiber materials.
+
+| TinyUSDZ Parameter | Blender/MaterialX Name | Type | Default | Three.js Support | Three.js Mapping | Notes |
+|-------------------|------------------------|------|---------|------------------|------------------|-------|
+| `sheen_weight` | `inputs:sheen_weight` | float | 0.0 | тЬЕ | `sheen` | Supported in MeshPhysicalMaterial |
+| `sheen_color` | `inputs:sheen_color` | color3f | (1.0, 1.0, 1.0) | тЬЕ | `sheenColor` | Directly supported |
+| `sheen_roughness` | `inputs:sheen_roughness` | float | 0.3 | тЬЕ | `sheenRoughness` | Directly supported |
+
+**Three.js Notes:**
+- тЬЕ Sheen is well supported in Three.js MeshPhysicalMaterial
+- Good for fabric and cloth materials
+
+---
+
+## 6. Coat Layer Properties (Clear Coat)
+
+Coat layer simulates a clear protective coating on top of the base material, like car paint or lacquered wood.
+
+| TinyUSDZ Parameter | Blender/MaterialX Name | Type | Default | Three.js Support | Three.js Mapping | Notes |
+|-------------------|------------------------|------|---------|------------------|------------------|-------|
+| `coat_weight` | `inputs:coat_weight` | float | 0.0 | тЬЕ | `clearcoat` | Direct mapping |
+| `coat_color` | `inputs:coat_color` | color3f | (1.0, 1.0, 1.0) | тЭМ | тАФ | **NOT SUPPORTED** - Three.js clearcoat is always white |
+| `coat_roughness` | `inputs:coat_roughness` | float | 0.0 | тЬЕ | `clearcoatRoughness` | Direct mapping |
+| `coat_anisotropy` | `inputs:coat_anisotropy` | float | 0.0 | тЭМ | тАФ | **NOT SUPPORTED** |
+| `coat_rotation` | `inputs:coat_rotation` | float | 0.0 | тЭМ | тАФ | **NOT SUPPORTED** |
+| `coat_ior` | `inputs:coat_ior` | float | 1.5 | тЪая╕П | `ior` | Uses same IOR as base material |
+| `coat_affect_color` | `inputs:coat_affect_color` | color3f | (1.0, 1.0, 1.0) | тЭМ | тАФ | **NOT SUPPORTED** |
+| `coat_affect_roughness` | `inputs:coat_affect_roughness` | float | 0.0 | тЭМ | тАФ | **NOT SUPPORTED** |
+
+**Three.js Notes:**
+- тЪая╕П Clear coat support is basic - only weight and roughness
+- тЭМ Colored clear coats not supported
+- тЭМ Anisotropic coat reflections not supported
+- тЭМ Advanced coat interactions (affect_color, affect_roughness) not supported
+
+---
+
+## 7. Emission Properties (Glow/Light)
+
+Emission makes materials glow and emit light, used for light sources, LEDs, neon signs, etc.
+
+| TinyUSDZ Parameter | Blender/MaterialX Name | Type | Default | Three.js Support | Three.js Mapping | Notes |
+|-------------------|------------------------|------|---------|------------------|------------------|-------|
+| `emission_luminance` | `inputs:emission_luminance` | float | 0.0 | тЬЕ | `emissiveIntensity` | Direct mapping |
+| `emission_color` | `inputs:emission_color` | color3f | (1.0, 1.0, 1.0) | тЬЕ | `emissive` | Direct mapping |
+
+**Three.js Notes:**
+- тЬЕ Emission is fully supported
+- Works well for glowing materials and light-emitting surfaces
+
+---
+
+## 8. Geometry Properties
+
+Geometry properties affect surface normals and tangent space, used for bump mapping, normal mapping, etc.
+
+| TinyUSDZ Parameter | Blender/MaterialX Name | Type | Default | Three.js Support | Three.js Mapping | Notes |
+|-------------------|------------------------|------|---------|------------------|------------------|-------|
+| `opacity` | `inputs:opacity` | float | 1.0 | тЬЕ | `opacity` + `transparent` flag | Direct mapping |
+| `normal` | `inputs:normal` | normal3f | (0.0, 0.0, 1.0) | тЬЕ | `normalMap` | Normal map support |
+| `tangent` | `inputs:tangent` | vector3f | (1.0, 0.0, 0.0) | тЪая╕П | Computed internally | Three.js computes tangents automatically |
+
+**Three.js Notes:**
+- тЬЕ Opacity and normal mapping fully supported
+- Tangent vectors are usually computed by Three.js from geometry
+
+---
+
+## 9. Outputs
+
+| TinyUSDZ Parameter | Blender/MaterialX Name | Type | Three.js Support | Notes |
+|-------------------|------------------------|------|------------------|-------|
+| `surface` | `token outputs:surface` | token | тЬЕ | Output connection for shader graph |
+
+---
+
+## Summary Statistics
+
+### Support Overview
+
+| Category | Parameters | Fully Supported | Partially Supported | Not Supported |
+|----------|-----------|-----------------|---------------------|---------------|
+| Base Layer | 4 | 3 | 1 | 0 |
+| Specular | 7 | 2 | 3 | 2 |
+| Transmission | 6 | 1 | 1 | 4 |
+| Subsurface | 5 | 0 | 0 | 5 |
+| Sheen | 3 | 3 | 0 | 0 |
+| Coat | 8 | 2 | 1 | 5 |
+| Emission | 2 | 2 | 0 | 0 |
+| Geometry | 3 | 2 | 1 | 0 |
+| **Total** | **38** | **15 (39%)** | **7 (18%)** | **16 (42%)** |
+
+### Critical Limitations for Three.js
+
+**тЭМ NOT SUPPORTED (requires custom shaders):**
+1. **Subsurface Scattering** - All 5 parameters (weight, color, radius, scale, anisotropy)
+2. **Transmission Effects** - Color, scatter, dispersion (4 parameters)
+3. **Coat Advanced** - Color, anisotropy, affect properties (5 parameters)
+4. **Specular Advanced** - IOR level (1 parameter)
+
+**тЪая╕П LIMITATIONS:**
+- Transmission is basic (only weight supported, no colored transmission)
+- Coat layer cannot be colored or anisotropic
+- Anisotropic reflections are experimental
+- No volume scattering or participating media
+
+**тЬЕ WELL SUPPORTED:**
+- Base PBR (color, metalness, roughness)
+- Emission (color and intensity)
+- Sheen (fabric materials)
+- Basic clear coat
+- Normal mapping and opacity
+
+---
+
+## Blender MaterialX Export Format
+
+When Blender v4.5+ exports OpenPBR materials to MaterialX, it uses this structure:
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+### USD Format
+
+In USD files, OpenPBR materials appear as:
+
+```usda
+def Material "MaterialName"
+{
+ token outputs:surface.connect =
+
+ def Shader "OpenPBRSurface"
+ {
+ uniform token info:id = "OpenPBRSurface"
+ # Or: uniform token info:id = "ND_open_pbr_surface_surfaceshader"
+
+ color3f inputs:base_color = (0.8, 0.8, 0.8)
+ float inputs:base_metalness = 0.0
+ float inputs:base_roughness = 0.5
+ # ... all other inputs
+
+ token outputs:surface
+ }
+}
+```
+
+---
+
+## Conversion Recommendations
+
+### For Three.js WebGL Target
+
+When converting OpenPBR to Three.js MeshPhysicalMaterial:
+
+1. **Use Supported Parameters:**
+ - Base color, metalness, roughness тЖТ Direct mapping
+ - Emission color and luminance тЖТ Direct mapping
+ - Sheen weight, color, roughness тЖТ Direct mapping
+ - Clearcoat weight and roughness тЖТ Direct mapping
+ - Transmission weight тЖТ Basic transparency
+
+2. **Handle Unsupported Parameters:**
+ - **Subsurface Scattering**: Approximate with albedo color darkening
+ - **Transmission Color**: Warn user, fall back to white
+ - **Coat Color**: Warn user, fall back to white clearcoat
+ - **Advanced Specular**: Use base `ior` parameter, ignore `specular_ior_level`
+
+3. **Texture Handling:**
+ - Map `inputs:base_color` texture тЖТ `map`
+ - Map `inputs:base_metalness` texture тЖТ `metalnessMap`
+ - Map `inputs:base_roughness` texture тЖТ `roughnessMap`
+ - Map `inputs:emission_color` texture тЖТ `emissiveMap`
+ - Map `inputs:normal` texture тЖТ `normalMap`
+
+### For Three.js WebGPU Target
+
+With WebGPU and MaterialX node support:
+- More parameters may become available
+- Custom node implementations can handle advanced features
+- Refer to Three.js MaterialXLoader documentation
+
+---
+
+## References
+
+- [OpenPBR Specification](https://github.com/AcademySoftwareFoundation/OpenPBR)
+- [MaterialX Specification v1.38](https://www.materialx.org/)
+- [Three.js MeshPhysicalMaterial Documentation](https://threejs.org/docs/#api/en/materials/MeshPhysicalMaterial)
+- [TinyUSDZ OpenPBR Implementation](../src/usdShade.hh)
+- [Three.js MaterialX Loader](https://threejs.org/examples/webgpu_loader_materialx.html)
+
+---
+
+## Revision History
+
+| Date | Version | Changes |
+|------|---------|---------|
+| 2025-11-06 | 1.0 | Initial comprehensive parameter reference |
+
diff --git a/tools/hdrgen/.gitignore b/tools/hdrgen/.gitignore
new file mode 100644
index 00000000..9840f93e
--- /dev/null
+++ b/tools/hdrgen/.gitignore
@@ -0,0 +1,13 @@
+# HDRGen output files
+output/*.hdr
+output/*.exr
+
+# Keep test files for CI
+!output/test_*.hdr
+
+# Node modules (if dependencies are added later)
+node_modules/
+
+# System files
+.DS_Store
+Thumbs.db
diff --git a/tools/hdrgen/CHANGELOG.md b/tools/hdrgen/CHANGELOG.md
new file mode 100644
index 00000000..40122298
--- /dev/null
+++ b/tools/hdrgen/CHANGELOG.md
@@ -0,0 +1,148 @@
+# HDRGen Changelog
+
+## Version 1.1.0 (2025-11-06)
+
+### тЬи New Features
+
+#### Image Transformations
+- **Rotation Support** - Rotate environment maps around Y axis
+ - Use `--rotation ` (positive = counterclockwise)
+ - Bilinear filtering for smooth results
+ - Useful for adjusting lighting direction
+
+- **Intensity Scaling** - Global intensity multiplier
+ - Use `--intensity-scale ` or `--scale `
+ - Quickly adjust overall brightness
+ - Apply after preset generation
+
+#### LDR Output Formats
+- **PNG Output** - 8-bit RGB PNG format
+ - Automatic tone mapping from HDR
+ - Simplified implementation (no compression)
+ - Use `--format png` or `-f png`
+
+- **BMP Output** - 24-bit RGB BMP format
+ - Uncompressed bitmap format
+ - Widely compatible
+ - Use `--format bmp` or `-f bmp`
+
+- **JPEG Placeholder** - JPEG support noted
+ - Currently converts to BMP
+ - Requires jpeg-js library for true JPEG encoding
+ - Use `--format jpg` or `--format jpeg`
+
+#### Tone Mapping
+- **Multiple Tone Mapping Methods**
+ - `simple` - Exposure + clamp
+ - `reinhard` - Reinhard operator (default)
+ - `aces` - ACES filmic tone curve
+ - Use `--tonemap-method `
+
+- **Exposure Control**
+ - `--exposure ` - Exposure adjustment in EV stops
+ - Default: 0.0
+ - Positive values brighten, negative darken
+
+- **Gamma Correction**
+ - `--gamma ` - Gamma correction for display
+ - Default: 2.2 (standard for sRGB displays)
+ - Adjustable for different display profiles
+
+### ЁЯФз API Changes
+
+**HDRGenerator.generate() new options:**
+```javascript
+{
+ rotation: 0, // Rotation in degrees
+ intensityScale: 1.0, // Intensity multiplier
+ format: 'hdr', // Now supports: hdr, exr, png, bmp, jpg
+ tonemapOptions: { // For LDR output
+ exposure: 0.0,
+ gamma: 2.2,
+ method: 'reinhard'
+ }
+}
+```
+
+**New Classes Exported:**
+- `ImageTransform` - Image rotation and scaling utilities
+- `ToneMapper` - HDR to LDR tone mapping
+- `LDRWriter` - LDR format writers (PNG, BMP, JPEG)
+
+### ЁЯУЭ Examples
+
+**Generate LDR preview:**
+```bash
+hdrgen -p sun-sky -f png --exposure 1.0 -o output/sky_preview.png
+```
+
+**Rotate environment 90 degrees:**
+```bash
+hdrgen -p studio --rotation 90 -o output/studio_rotated.hdr
+```
+
+**Scale intensity 2x and output as BMP:**
+```bash
+hdrgen -p studio --intensity-scale 2.0 -f bmp -o output/studio_bright.bmp
+```
+
+**ACES tone mapping:**
+```bash
+hdrgen -p sun-sky -f png --tonemap-method aces --exposure -0.5 -o output/sky_aces.png
+```
+
+### ЁЯРЫ Bug Fixes
+
+- Fixed CRC32 calculation in PNG writer (was producing negative values)
+- Added unsigned 32-bit coercion for correct CRC generation
+
+### ЁЯУК Code Statistics
+
+- **New Code:** ~400 lines
+- **Total Code:** ~1,500 lines
+- **New Classes:** 3 (ImageTransform, ToneMapper, LDRWriter)
+- **New Formats:** 3 (PNG, BMP, JPEG placeholder)
+
+---
+
+## Version 1.0.0 (2025-11-06)
+
+### Initial Release
+
+- HDR/EXR environment map generation
+- Three presets: white-furnace, sun-sky, studio
+- Lat-long and cubemap projections
+- Pure Node.js implementation (zero dependencies)
+- Comprehensive documentation
+
+### Features
+
+- **Presets:**
+ - White Furnace - Energy conservation testing
+ - Sun & Sky - Procedural outdoor environment
+ - Studio Lighting - 3-point lighting setup
+
+- **Formats:**
+ - HDR (Radiance RGBE) - Fully implemented
+ - EXR (OpenEXR) - Stub implementation
+
+- **Projections:**
+ - Lat-long (equirectangular)
+ - Cubemap (6 faces)
+
+- **CLI:**
+ - Comprehensive command-line interface
+ - Preset-specific options
+ - Resolution control
+
+- **Documentation:**
+ - Complete README (15KB)
+ - Quick start guide
+ - API documentation
+ - DCC integration guides
+
+### Code Statistics
+
+- **Total Code:** ~1,100 lines
+- **Test Coverage:** 8 unit tests
+- **Examples:** 7+ preset variations
diff --git a/tools/hdrgen/NEW_FEATURES.md b/tools/hdrgen/NEW_FEATURES.md
new file mode 100644
index 00000000..ce4eb0f7
--- /dev/null
+++ b/tools/hdrgen/NEW_FEATURES.md
@@ -0,0 +1,448 @@
+# HDRGen v1.1.0 - New Features Guide
+
+## Overview
+
+HDRGen v1.1.0 adds powerful image transformation and LDR export capabilities, making it easier to generate preview images and adjust environment maps for different use cases.
+
+## ЁЯОи New Features
+
+### 1. Image Rotation
+
+Rotate environment maps around the Y axis (vertical) to adjust lighting direction.
+
+**Use Cases:**
+- Align sun position with scene requirements
+- Rotate studio lights to desired angle
+- Create lighting variations without regenerating
+
+**Command Line:**
+```bash
+# Rotate 90 degrees counterclockwise
+hdrgen -p sun-sky --rotation 90 -o output/sky_rotated.hdr
+
+# Rotate 180 degrees (flip horizontally)
+hdrgen -p studio --rotation 180 -o output/studio_flipped.hdr
+
+# Fine rotation (45 degrees)
+hdrgen -p sun-sky --sun-azimuth 0 --rotation 45 -o output/sky_45.hdr
+```
+
+**API Usage:**
+```javascript
+import { HDRGenerator } from './src/hdrgen.js';
+
+HDRGenerator.generate({
+ preset: 'sun-sky',
+ rotation: 90, // Degrees, positive = CCW
+ output: 'output/rotated.hdr'
+});
+```
+
+**Technical Details:**
+- Uses bilinear filtering for smooth results
+- Wraps horizontally (seamless rotation)
+- No quality loss for moderate rotations
+- Applied after preset generation
+
+---
+
+### 2. Intensity Scaling
+
+Global intensity multiplier for the entire environment map.
+
+**Use Cases:**
+- Quickly adjust overall brightness
+- Create dimmer/brighter variations
+- Normalize different presets to same intensity
+- Test material response to different lighting levels
+
+**Command Line:**
+```bash
+# Double intensity
+hdrgen -p studio --intensity-scale 2.0 -o output/studio_bright.hdr
+
+# Half intensity
+hdrgen -p sun-sky --scale 0.5 -o output/sky_dim.hdr
+
+# 10x intensity (for testing high dynamic range)
+hdrgen -p white-furnace --intensity-scale 10.0 -o output/furnace_10x.hdr
+```
+
+**API Usage:**
+```javascript
+HDRGenerator.generate({
+ preset: 'studio',
+ intensityScale: 2.0, // Multiply all values by 2.0
+ output: 'output/bright.hdr'
+});
+```
+
+**Technical Details:**
+- Applied after rotation
+- Multiplies all RGB values uniformly
+- Maintains color ratios
+- No clamping (HDR preserved)
+
+---
+
+### 3. LDR Output Formats
+
+Export environment maps as standard 8-bit image formats for previews and web use.
+
+#### PNG Output
+
+8-bit RGB PNG with automatic tone mapping.
+
+**Command Line:**
+```bash
+# Basic PNG export
+hdrgen -p sun-sky -f png -o output/sky.png
+
+# PNG with custom exposure
+hdrgen -p studio -f png --exposure 1.0 -o output/studio_bright.png
+
+# PNG with ACES tone mapping
+hdrgen -p sun-sky -f png --tonemap-method aces -o output/sky_aces.png
+```
+
+**Features:**
+- Automatic HDR to LDR conversion
+- Simplified format (no compression)
+- Cross-platform compatibility
+- ~385KB for 512x256 image
+
+**Note:** For production use, consider using `sharp` or `pngjs` libraries for compressed PNG.
+
+#### BMP Output
+
+24-bit RGB BMP format.
+
+**Command Line:**
+```bash
+# Basic BMP export
+hdrgen -p studio -f bmp -o output/studio.bmp
+
+# BMP with custom gamma
+hdrgen -p sun-sky -f bmp --gamma 1.8 -o output/sky.bmp
+```
+
+**Features:**
+- Uncompressed format
+- Universal compatibility
+- Fast write speed
+- ~385KB for 512x256 image
+
+#### JPEG Output (Placeholder)
+
+**Command Line:**
+```bash
+# Will convert to BMP
+hdrgen -p sun-sky -f jpg -o output/sky.jpg
+# Actual output: output/sky.bmp
+```
+
+**Note:** Currently converts to BMP. For true JPEG encoding, integrate `jpeg-js` library.
+
+---
+
+### 4. Tone Mapping
+
+Convert HDR to LDR with proper tone mapping operators.
+
+#### Tone Mapping Methods
+
+**1. Simple (Exposure + Clamp)**
+```bash
+hdrgen -p sun-sky -f png --tonemap-method simple --exposure 1.0 -o output/sky_simple.png
+```
+- Linear exposure adjustment
+- Hard clipping at 1.0
+- Fast, no compression
+- Good for low dynamic range scenes
+
+**2. Reinhard (Default)**
+```bash
+hdrgen -p sun-sky -f png --tonemap-method reinhard -o output/sky.png
+```
+- Reinhard global operator: `x / (1 + x)`
+- Compresses high values smoothly
+- Preserves local contrast
+- Best for most scenes
+
+**3. ACES Filmic**
+```bash
+hdrgen -p sun-sky -f png --tonemap-method aces --exposure -0.5 -o output/sky_aces.png
+```
+- ACES filmic tone curve approximation
+- Film-like response
+- Rich shadows, smooth highlights
+- Best for cinematic look
+
+#### Exposure Control
+
+Adjust brightness before tone mapping.
+
+```bash
+# Increase exposure by 1 EV (2x brighter)
+hdrgen -p studio -f png --exposure 1.0 -o output/studio_bright.png
+
+# Decrease exposure by 1 EV (2x darker)
+hdrgen -p sun-sky -f png --exposure -1.0 -o output/sky_dark.png
+
+# Fine adjustment (+0.5 EV)
+hdrgen -p studio -f png --exposure 0.5 -o output/studio_mid.png
+```
+
+**EV Scale:**
+- `+1.0` = 2x brighter
+- `-1.0` = 2x darker
+- `+2.0` = 4x brighter
+- `-2.0` = 4x darker
+
+#### Gamma Correction
+
+Adjust gamma for different display profiles.
+
+```bash
+# Standard sRGB gamma (default)
+hdrgen -p sun-sky -f png --gamma 2.2 -o output/sky.png
+
+# Mac gamma
+hdrgen -p sun-sky -f png --gamma 1.8 -o output/sky_mac.png
+
+# Linear (no gamma, for further processing)
+hdrgen -p sun-sky -f png --gamma 1.0 -o output/sky_linear.png
+```
+
+---
+
+## ЁЯОп Common Workflows
+
+### Generate Web Preview
+
+Quick PNG preview for web display:
+
+```bash
+hdrgen -p sun-sky -w 1024 --height 512 -f png --exposure 0.5 --gamma 2.2 -o preview.png
+```
+
+### Rotate and Scale for Scene Matching
+
+Adjust environment to match scene lighting:
+
+```bash
+hdrgen -p sun-sky --sun-azimuth 90 --rotation 45 --intensity-scale 1.5 -o scene_env.hdr
+```
+
+### Generate LDR Reference
+
+Create LDR reference for comparing with renderer output:
+
+```bash
+hdrgen -p studio -f png --tonemap-method aces --exposure 0.0 -o reference.png
+```
+
+### Test Multiple Intensities
+
+Generate intensity variations for testing:
+
+```bash
+for scale in 0.5 1.0 2.0 4.0; do
+ hdrgen -p studio --intensity-scale $scale -o output/studio_${scale}x.hdr
+done
+```
+
+### Generate Preview Grid
+
+Create preview images with different tone mapping:
+
+```bash
+for method in simple reinhard aces; do
+ hdrgen -p sun-sky -f png --tonemap-method $method -o preview_$method.png
+done
+```
+
+---
+
+## ЁЯУК Performance Notes
+
+### Rotation Performance
+
+| Resolution | Time (approx) |
+|-----------|---------------|
+| 512x256 | < 1 second |
+| 1024x512 | ~2 seconds |
+| 2048x1024 | ~8 seconds |
+| 4096x2048 | ~30 seconds |
+
+**Optimization:** Use lower resolution for previews, rotate at target resolution for final output.
+
+### Tone Mapping Performance
+
+| Operation | Time | Notes |
+|-----------|------|-------|
+| Simple | Fast | Linear, no iterations |
+| Reinhard | Fast | Single pass |
+| ACES | Fast | Slightly more math |
+
+**Note:** Tone mapping adds < 100ms for typical resolutions.
+
+### File Sizes
+
+| Format | 512x256 | 1024x512 | 2048x1024 |
+|--------|---------|----------|-----------|
+| HDR | 513 KB | 2 MB | 8 MB |
+| PNG (uncompressed) | 385 KB | 1.5 MB | 6 MB |
+| BMP | 385 KB | 1.5 MB | 6 MB |
+
+---
+
+## ЁЯФз API Reference
+
+### ImageTransform Class
+
+```javascript
+import { ImageTransform, HDRImage } from './src/hdrgen.js';
+
+// Rotate image
+const rotated = ImageTransform.rotate(image, 90);
+
+// Scale intensity (in-place)
+ImageTransform.scaleIntensity(image, 2.0);
+```
+
+### ToneMapper Class
+
+```javascript
+import { ToneMapper } from './src/hdrgen.js';
+
+// Tone map HDR to LDR
+const ldrData = ToneMapper.tonemapToLDR(hdrImage, {
+ exposure: 1.0,
+ gamma: 2.2,
+ method: 'reinhard' // 'simple', 'reinhard', 'aces'
+});
+```
+
+### LDRWriter Class
+
+```javascript
+import { LDRWriter } from './src/hdrgen.js';
+
+// Write PNG
+LDRWriter.writePNG(ldrData, width, height, 'output.png');
+
+// Write BMP
+LDRWriter.writeBMP(ldrData, width, height, 'output.bmp');
+```
+
+---
+
+## ЁЯОУ Tips & Best Practices
+
+### Rotation
+
+1. **Combine with Sun Azimuth:**
+ ```bash
+ # Set sun to north, then rotate entire environment
+ hdrgen -p sun-sky --sun-azimuth 0 --rotation 90
+ ```
+
+2. **Use Multiples of 90┬░ for Symmetry:**
+ - 0┬░, 90┬░, 180┬░, 270┬░ preserve cubemap alignment
+ - Fractional angles may introduce minor artifacts
+
+### Intensity Scaling
+
+1. **Test Energy Conservation:**
+ ```bash
+ # White furnace at different intensities
+ hdrgen -p white-furnace --intensity-scale 1.0 -o f1.hdr
+ hdrgen -p white-furnace --intensity-scale 10.0 -o f10.hdr
+ ```
+
+2. **Match Real-World Values:**
+ - Outdoor: scale 50-200 for direct sun
+ - Indoor: scale 1-10 for artificial lights
+ - Studio: scale 10-100 for key lights
+
+### Tone Mapping
+
+1. **Choose Method by Content:**
+ - **Simple:** Low dynamic range, flat lighting
+ - **Reinhard:** Balanced scenes with moderate highlights
+ - **ACES:** High dynamic range, cinematic look
+
+2. **Adjust Exposure First:**
+ ```bash
+ # Start with neutral exposure
+ hdrgen -p sun-sky -f png --exposure 0.0
+ # Adjust if too bright/dark
+ hdrgen -p sun-sky -f png --exposure -1.0
+ ```
+
+3. **Use Consistent Gamma:**
+ - sRGB displays: `--gamma 2.2` (default)
+ - Mac displays: `--gamma 1.8`
+ - Linear workflow: `--gamma 1.0`
+
+---
+
+## ЁЯРЫ Known Limitations
+
+1. **PNG Compression:**
+ - Current implementation uses uncompressed PNG
+ - File sizes larger than library-encoded PNG
+ - Consider using `sharp` or `pngjs` for production
+
+2. **JPEG Support:**
+ - Currently converts to BMP
+ - Requires `jpeg-js` library for true JPEG
+
+3. **Rotation Quality:**
+ - Uses bilinear filtering (good quality)
+ - Large rotations (>45┬░) may show minor softening
+ - Consider rotating less and adjusting sun azimuth instead
+
+4. **Memory Usage:**
+ - Rotation duplicates image in memory
+ - 4K images require ~200MB RAM during rotation
+ - Close other applications if generating very large images
+
+---
+
+## ЁЯУЪ Further Reading
+
+- [Tone Mapping Operators](https://en.wikipedia.org/wiki/Tone_mapping)
+- [ACES Filmic Tone Mapping](https://knarkowicz.wordpress.com/2016/01/06/aces-filmic-tone-mapping-curve/)
+- [Reinhard Tone Mapping](http://www.cmap.polytechnique.fr/~peyre/cours/x2005signal/hdr_photographic.pdf)
+- [Gamma Correction](https://en.wikipedia.org/wiki/Gamma_correction)
+
+---
+
+## ЁЯУЮ Support
+
+For issues or questions about new features:
+- Check examples in `examples/` directory
+- Read [CHANGELOG.md](./CHANGELOG.md)
+- See main [README.md](./README.md)
+- Report bugs: https://github.com/syoyo/tinyusdz
+
+---
+
+## ЁЯОЙ What's Next?
+
+Future enhancements being considered:
+- True JPEG encoding (via jpeg-js)
+- Compressed PNG output (via pngjs)
+- Flip horizontal/vertical
+- Crop and resize operations
+- Batch processing mode
+- Animation sequences (time-of-day)
+- Real-time preview server
+
+---
+
+**Version:** 1.1.0
+**Date:** 2025-11-06
+**Author:** TinyUSDZ Project
diff --git a/tools/hdrgen/QUICK_START.md b/tools/hdrgen/QUICK_START.md
new file mode 100644
index 00000000..16c130b2
--- /dev/null
+++ b/tools/hdrgen/QUICK_START.md
@@ -0,0 +1,154 @@
+# HDRGen Quick Start Guide
+
+## Installation
+
+```bash
+cd tools/hdrgen
+npm install # (No dependencies currently)
+```
+
+## Generate Your First Environment Map
+
+### 1. White Furnace (Testing)
+
+Perfect uniform white environment for energy conservation testing:
+
+```bash
+node src/cli.js --preset white-furnace -o output/furnace.hdr
+```
+
+Output: `output/furnace.hdr` (2048x1024, ~8MB)
+
+### 2. Sun & Sky (Outdoor)
+
+Procedural outdoor environment with sun:
+
+```bash
+node src/cli.js --preset sun-sky --sun-elevation 45 --sun-azimuth 135 -o output/sky.hdr
+```
+
+Output: `output/sky.hdr` (2048x1024, ~8MB)
+
+**Tip:** Adjust sun position:
+- `--sun-elevation 5`: Sunset (low sun)
+- `--sun-elevation 85`: Noon (overhead)
+- `--sun-azimuth 90`: East
+- `--sun-azimuth 270`: West
+
+### 3. Studio Lighting (Indoor)
+
+Professional 3-point lighting setup:
+
+```bash
+node src/cli.js --preset studio -o output/studio.hdr
+```
+
+Output: `output/studio.hdr` (2048x1024, ~8MB)
+
+## Common Options
+
+```bash
+# Custom resolution
+node src/cli.js -p sun-sky -w 4096 --height 2048 -o output/sky_4k.hdr
+
+# Generate cubemap (6 faces)
+node src/cli.js -p studio --projection cubemap --width 512 -o output/studio_cube
+# Creates: studio_cube_+X.hdr, studio_cube_-X.hdr, ... (6 files)
+
+# Adjust intensity
+node src/cli.js -p sun-sky --sun-intensity 200 --sky-intensity 0.8 -o output/bright_sky.hdr
+```
+
+## Generate All Examples
+
+```bash
+npm run example
+```
+
+This generates 7+ example environment maps in `output/`:
+- White furnace
+- Sun/sky variations (afternoon, sunset, noon)
+- Studio lighting variations (default, high-key, low-key)
+- Cubemap example
+
+## View Generated HDR Files
+
+**On macOS/Linux:**
+```bash
+# Install ImageMagick
+sudo apt install imagemagick # Ubuntu/Debian
+brew install imagemagick # macOS
+
+# Convert HDR to viewable PNG
+convert output/furnace.hdr output/furnace.png
+```
+
+**In Blender:**
+1. Switch to **Shading** workspace
+2. Select **World** shader
+3. Add **Environment Texture** node
+4. Open your `.hdr` file
+
+**In Web Browser:**
+Use online HDR viewer: https://www.hdrlabs.com/sibl/viewer.html
+
+## Quick Command Reference
+
+| Command | Description |
+|---------|-------------|
+| `-p, --preset` | Preset name: white-furnace, sun-sky, studio |
+| `-w, --width` | Width in pixels (default: 2048) |
+| `--height` | Height in pixels (default: 1024) |
+| `--projection` | latlong or cubemap (default: latlong) |
+| `-f, --format` | hdr or exr (default: hdr) |
+| `-o, --output` | Output file path |
+| `--sun-elevation` | Sun angle above horizon (0-90┬░) |
+| `--sun-azimuth` | Sun compass direction (0-360┬░) |
+| `--key-intensity` | Studio key light intensity |
+
+For full documentation, see [README.md](./README.md)
+
+## Troubleshooting
+
+### Files too dark/bright?
+
+Adjust intensity parameters:
+```bash
+# Brighter sun
+node src/cli.js -p sun-sky --sun-intensity 200
+
+# Dimmer studio
+node src/cli.js -p studio --key-intensity 25
+```
+
+### Sun in wrong position?
+
+Check azimuth (compass direction):
+- 0┬░ = North (center top of image)
+- 90┬░ = East (right side)
+- 180┬░ = South (center bottom)
+- 270┬░ = West (left side)
+
+### Need help?
+
+```bash
+node src/cli.js --help
+```
+
+## Next Steps
+
+- Read full [README.md](./README.md) for detailed documentation
+- Check [examples/](./examples/) directory for code samples
+- Import generated HDR files into your DCC (Blender, Houdini, etc.)
+- Use for IBL testing in your renderer
+
+## File Sizes
+
+| Resolution | File Size (HDR) | Use Case |
+|-----------|----------------|----------|
+| 512x256 | ~0.5 MB | Quick preview |
+| 1024x512 | ~2 MB | Development |
+| 2048x1024 | ~8 MB | Production (standard) |
+| 4096x2048 | ~32 MB | Production (high quality) |
+
+Cubemaps are ~6x the equivalent lat-long size (one file per face).
diff --git a/tools/hdrgen/README.md b/tools/hdrgen/README.md
new file mode 100644
index 00000000..8bc8ec45
--- /dev/null
+++ b/tools/hdrgen/README.md
@@ -0,0 +1,553 @@
+# HDRGen - Synthetic HDR/EXR Environment Map Generator
+
+A pure Node.js tool for generating synthetic HDR environment maps for testing, debugging, and prototyping PBR materials and IBL (Image-Based Lighting) setups.
+
+## Features
+
+- **Pure JavaScript/Node.js** - No external dependencies, no native bindings
+- **Multiple Presets** - White furnace, sun & sky, studio lighting
+- **Flexible Output** - HDR (Radiance RGBE) and EXR (OpenEXR) formats
+- **Dual Projections** - Equirectangular (lat-long) and cubemap
+- **Physically-Based** - Linear color space, HDR values, proper intensity scaling
+- **Customizable** - Extensive options for each preset
+- **CLI & API** - Use from command line or import as library
+
+## Installation
+
+```bash
+cd tools/hdrgen
+npm install
+```
+
+Make CLI globally available:
+```bash
+npm link
+```
+
+## Quick Start
+
+### Generate White Furnace (Energy Conservation Test)
+
+```bash
+node src/cli.js --preset white-furnace -o output/furnace.hdr
+```
+
+### Generate Sun & Sky Environment
+
+```bash
+node src/cli.js --preset sun-sky --sun-elevation 45 -o output/sky.hdr
+```
+
+### Generate Studio Lighting
+
+```bash
+node src/cli.js --preset studio -o output/studio.hdr
+```
+
+### Generate Cubemap
+
+```bash
+node src/cli.js --preset studio --projection cubemap --width 512 -o output/studio_cube
+```
+
+### Generate All Examples
+
+```bash
+npm run example
+```
+
+## CLI Usage
+
+```bash
+hdrgen [OPTIONS]
+```
+
+### General Options
+
+| Option | Description | Default |
+|--------|-------------|---------|
+| `-h, --help` | Show help message | - |
+| `-p, --preset ` | Preset name (white-furnace, sun-sky, studio) | `white-furnace` |
+| `-w, --width ` | Width in pixels | `2048` |
+| `--height ` | Height in pixels | `1024` |
+| `--projection ` | Projection type (latlong, cubemap) | `latlong` |
+| `-f, --format ` | Output format (hdr, exr) | `hdr` |
+| `-o, --output ` | Output file path | `output/_.` |
+
+### White Furnace Options
+
+| Option | Description | Default |
+|--------|-------------|---------|
+| `--intensity ` | Furnace intensity | `1.0` |
+
+**Purpose:** Uniform white environment for testing energy conservation. A perfect diffuse BRDF should integrate to exactly the furnace intensity.
+
+### Sun & Sky Options
+
+| Option | Description | Default |
+|--------|-------------|---------|
+| `--sun-elevation ` | Sun elevation angle (0=horizon, 90=zenith) | `45` |
+| `--sun-azimuth ` | Sun azimuth angle (0=north, 90=east) | `135` |
+| `--sun-intensity ` | Sun disk intensity | `100.0` |
+| `--sky-intensity ` | Base sky intensity | `0.5` |
+
+**Purpose:** Procedural outdoor environment with directional sun and atmospheric sky gradient.
+
+### Studio Lighting Options
+
+| Option | Description | Default |
+|--------|-------------|---------|
+| `--key-intensity ` | Key light intensity (main light) | `50.0` |
+| `--fill-intensity ` | Fill light intensity (shadow fill) | `10.0` |
+| `--rim-intensity ` | Rim light intensity (back highlight) | `20.0` |
+| `--ambient-intensity ` | Ambient light intensity | `0.5` |
+
+**Purpose:** Professional 3-point lighting setup for product visualization and character lighting.
+
+## Presets
+
+### 1. White Furnace
+
+Uniform white environment at specified intensity. Essential for validating PBR material energy conservation.
+
+**Use Cases:**
+- Energy conservation testing
+- BRDF validation
+- Exposure calibration
+- Albedo verification
+
+**Example:**
+```bash
+# Standard furnace test
+hdrgen -p white-furnace --intensity 1.0 -o output/furnace.hdr
+
+# High intensity test
+hdrgen -p white-furnace --intensity 10.0 -o output/furnace_10x.hdr
+```
+
+**Expected Results:**
+- Perfectly diffuse white material should appear with albedo = intensity
+- Metals should appear dark (no diffuse reflection)
+- Specular reflections should be uniform in all directions
+
+### 2. Sun & Sky
+
+Procedural sky with sun disk and atmospheric gradient. Simplified Hosek-Wilkie sky model approximation.
+
+**Use Cases:**
+- Outdoor scene lighting
+- Architecture visualization
+- Product photography (outdoor)
+- Time-of-day studies
+
+**Parameters:**
+- **Sun Elevation:** Height of sun above horizon (0┬░-90┬░)
+ - `0┬░-10┬░`: Sunrise/sunset (warm, long shadows)
+ - `30┬░-60┬░`: Mid-day (balanced, natural)
+ - `80┬░-90┬░`: Noon (overhead, harsh)
+- **Sun Azimuth:** Compass direction of sun (0┬░-360┬░)
+ - `0┬░`: North
+ - `90┬░`: East
+ - `180┬░`: South
+ - `270┬░`: West
+
+**Examples:**
+```bash
+# Afternoon sun (front-right)
+hdrgen -p sun-sky --sun-elevation 45 --sun-azimuth 135 -o output/afternoon.hdr
+
+# Sunset (low sun, west)
+hdrgen -p sun-sky --sun-elevation 5 --sun-azimuth 270 --sun-intensity 150 -o output/sunset.hdr
+
+# Noon (overhead)
+hdrgen -p sun-sky --sun-elevation 85 --sun-azimuth 0 --sun-intensity 200 -o output/noon.hdr
+
+# Sunrise (low sun, east)
+hdrgen -p sun-sky --sun-elevation 10 --sun-azimuth 90 --sun-intensity 120 -o output/sunrise.hdr
+```
+
+### 3. Studio Lighting
+
+3-point lighting setup with key, fill, and rim lights. Classic photography and cinematography lighting pattern.
+
+**Use Cases:**
+- Product rendering
+- Character lighting
+- Controlled lighting studies
+- Material comparison
+
+**Light Configuration:**
+- **Key Light:** Main light source (front-right, elevated)
+ - Position: 45┬░ right, 30┬░ up
+ - Color: Warm (slightly yellow)
+- **Fill Light:** Shadow fill (front-left, lower)
+ - Position: 30┬░ left, 20┬░ up
+ - Color: Cool (slightly blue)
+- **Rim Light:** Edge/separation light (back, elevated)
+ - Position: Behind subject, 25┬░ up
+ - Color: Neutral white
+
+**Examples:**
+```bash
+# Standard studio setup
+hdrgen -p studio -o output/studio.hdr
+
+# High-key lighting (bright, low contrast)
+hdrgen -p studio --key-intensity 80 --fill-intensity 30 --ambient-intensity 1.0 -o output/highkey.hdr
+
+# Low-key lighting (dramatic, high contrast)
+hdrgen -p studio --key-intensity 30 --fill-intensity 5 --rim-intensity 40 --ambient-intensity 0.1 -o output/lowkey.hdr
+
+# Product lighting (strong rim for edge definition)
+hdrgen -p studio --key-intensity 60 --fill-intensity 15 --rim-intensity 50 -o output/product.hdr
+```
+
+## Projection Types
+
+### Equirectangular (Lat-Long)
+
+Single image with 2:1 aspect ratio (e.g., 2048x1024). Standard format for environment maps.
+
+**Characteristics:**
+- Full 360┬░ horizontal, 180┬░ vertical coverage
+- Distortion at poles (top and bottom stretched)
+- Most compact format (single file)
+- Widely supported by renderers and DCCs
+
+**Output:** Single `.hdr` or `.exr` file
+
+```bash
+hdrgen -p sun-sky --projection latlong -w 2048 --height 1024 -o output/sky.hdr
+```
+
+### Cubemap
+
+Six square images representing faces of a cube. No distortion, but requires 6 separate files.
+
+**Face Order (OpenGL Convention):**
+- `+X`: Right
+- `-X`: Left
+- `+Y`: Top (up)
+- `-Y`: Bottom (down)
+- `+Z`: Front
+- `-Z`: Back
+
+**Characteristics:**
+- No polar distortion
+- Uniform sampling across all directions
+- Larger total file size (6 files)
+- Preferred for real-time rendering and importance sampling
+
+**Output:** Six files with face suffixes: `_+X.hdr`, `_-X.hdr`, etc.
+
+```bash
+hdrgen -p studio --projection cubemap --width 512 -o output/studio_cube
+# Creates: studio_cube_+X.hdr, studio_cube_-X.hdr, ..., studio_cube_-Z.hdr
+```
+
+## File Formats
+
+### HDR (Radiance RGBE)
+
+Standard format for HDR images. Widely supported, compact, 8-bit per channel with shared exponent.
+
+**Specifications:**
+- Format: RGBE (RGB + 8-bit shared exponent)
+- Precision: ~7 decimal digits
+- Dynamic range: 10^-38 to 10^38
+- File size: 4 bytes per pixel
+- Extension: `.hdr`
+
+**Advantages:**
+- Small file size
+- Fast to write
+- Universal support
+- Good for most IBL use cases
+
+**Limitations:**
+- Limited precision (8-bit mantissa)
+- No alpha channel
+- No arbitrary metadata
+
+### EXR (OpenEXR)
+
+High-precision format from ILM. Better precision, alpha channel support, extensive metadata.
+
+**Specifications:**
+- Format: Half-float (16-bit) or float (32-bit) per channel
+- Precision: Half = 11-bit mantissa, Float = 24-bit mantissa
+- Dynamic range: Half = 10^-5 to 65504
+- File size: 6 bytes (half) or 12 bytes (float) per pixel
+- Extension: `.exr`
+
+**Note:** Current implementation converts to HDR. For production EXR writing, use `@openexr/node` or similar library.
+
+## API Usage
+
+### As ES6 Module
+
+```javascript
+import { HDRGenerator } from './src/hdrgen.js';
+
+// Generate lat-long sun & sky
+const result = HDRGenerator.generate({
+ preset: 'sun-sky',
+ width: 2048,
+ height: 1024,
+ projection: 'latlong',
+ format: 'hdr',
+ output: 'output/sky.hdr',
+ presetOptions: {
+ sunElevation: 45,
+ sunAzimuth: 135,
+ sunIntensity: 100.0
+ }
+});
+
+// Access raw image data
+const { latLongImage } = result;
+console.log(`Generated ${latLongImage.width}x${latLongImage.height} HDR image`);
+```
+
+### Programmatic Generation
+
+```javascript
+import { HDRImage, EnvMapPresets, HDRWriter } from './src/hdrgen.js';
+
+// Create custom environment
+const image = new HDRImage(2048, 1024);
+
+// Apply preset
+EnvMapPresets.sunSky(image, {
+ sunElevation: 30,
+ sunIntensity: 150.0
+});
+
+// Write to file
+HDRWriter.writeRGBE(image, 'output/custom.hdr');
+```
+
+### Custom Procedural Environments
+
+```javascript
+import { HDRImage, Vec3 } from './src/hdrgen.js';
+
+const image = new HDRImage(1024, 512);
+
+for (let y = 0; y < image.height; y++) {
+ for (let x = 0; x < image.width; x++) {
+ const u = x / image.width;
+ const v = y / image.height;
+
+ // Custom procedural function
+ const r = Math.sin(u * Math.PI * 4) * 0.5 + 0.5;
+ const g = Math.sin(v * Math.PI * 4) * 0.5 + 0.5;
+ const b = 0.5;
+
+ image.setPixel(x, y, r * 10.0, g * 10.0, b * 10.0);
+ }
+}
+
+HDRWriter.writeRGBE(image, 'output/procedural.hdr');
+```
+
+## Resolution Guidelines
+
+### Lat-Long Environments
+
+| Use Case | Resolution | Aspect | File Size (HDR) |
+|----------|-----------|--------|-----------------|
+| Quick preview | 512x256 | 2:1 | ~0.5 MB |
+| Development | 1024x512 | 2:1 | ~2 MB |
+| Production (low) | 2048x1024 | 2:1 | ~8 MB |
+| Production (standard) | 4096x2048 | 2:1 | ~32 MB |
+| Production (high) | 8192x4096 | 2:1 | ~128 MB |
+
+### Cubemap Environments
+
+| Use Case | Face Size | Total Resolution | File Size (HDR x6) |
+|----------|----------|------------------|-------------------|
+| Preview | 128x128 | 128 | ~0.4 MB |
+| Low | 256x256 | 256 | ~1.5 MB |
+| Medium | 512x512 | 512 | ~6 MB |
+| High | 1024x1024 | 1K | ~24 MB |
+| Ultra | 2048x2048 | 2K | ~96 MB |
+
+**Recommendation:** Start with 1024x512 lat-long for development, use 2048x1024 or higher for final renders.
+
+## Testing & Validation
+
+### Energy Conservation Test
+
+White furnace with diffuse white material should reflect exactly the furnace intensity:
+
+```bash
+# Generate test environment
+hdrgen -p white-furnace --intensity 1.0 -o output/furnace_test.hdr
+
+# In your renderer:
+# 1. Load furnace_test.hdr
+# 2. Create material: diffuse white (albedo = 1.0)
+# 3. Render sphere
+# 4. Expected result: sphere appears with color = (1.0, 1.0, 1.0)
+```
+
+### Sun Direction Validation
+
+```bash
+# Generate known sun position (45┬░ elevation, 90┬░ east)
+hdrgen -p sun-sky --sun-elevation 45 --sun-azimuth 90 -o output/sun_test.hdr
+
+# Visual check: Bright spot should be in upper-right quadrant of lat-long image
+# Azimuth 90┬░ = right side of image (east)
+# Elevation 45┬░ = mid-height of image
+```
+
+### Studio Lighting Validation
+
+```bash
+# Generate studio environment
+hdrgen -p studio -o output/studio_test.hdr
+
+# Expected light positions:
+# - Key light: Front-right (bright warm spot)
+# - Fill light: Front-left (dimmer cool glow)
+# - Rim light: Back (sharp highlight)
+```
+
+## Importing in DCCs
+
+### Blender
+
+1. Switch to **Shading** workspace
+2. Select **World** shader
+3. Add **Environment Texture** node
+4. Open generated `.hdr` file
+5. Connect to **Background** shader
+
+### Houdini
+
+1. Create **Environment Light**
+2. Set **Environment Map** to generated `.hdr` file
+3. Adjust **Intensity** if needed
+
+### Maya
+
+1. Create **Skydome Light**
+2. Load generated `.hdr` in **Color** attribute
+3. Set **Exposure** if needed
+
+### Unreal Engine
+
+1. Import `.hdr` as **Texture Cube** (for cubemaps) or **Texture 2D** (for lat-long)
+2. Create **Skylight** actor
+3. Set **Source Type** to **SLS Specified Cubemap**
+4. Assign texture
+
+### Unity
+
+1. Import `.hdr` file
+2. Set **Texture Shape** to **Cube** (for cubemap) or **2D** (for lat-long)
+3. In **Lighting** window, assign to **Environment Skybox**
+
+## Technical Details
+
+### Color Space
+
+All generated environments are in **linear color space** (no gamma encoding). This is correct for PBR rendering and HDR textures.
+
+- Input values: Linear RGB
+- Output values: Linear RGB (HDR, values can exceed 1.0)
+- No sRGB transfer function applied
+
+### HDR Range
+
+Values are unbounded and can significantly exceed 1.0:
+- Sun disk: 50-200+ (direct sunlight simulation)
+- Sky: 0.1-2.0 (indirect ambient)
+- Studio lights: 10-100 (controlled lighting)
+- White furnace: 0.1-10.0 (testing range)
+
+### Coordinate System
+
+**Lat-Long (Equirectangular):**
+- U (horizontal): 0 = -180┬░ (west), 0.5 = 0┬░ (north), 1.0 = 180┬░ (east)
+- V (vertical): 0 = -90┬░ (down), 0.5 = 0┬░ (horizon), 1.0 = 90┬░ (up)
+- Direction: +X right, +Y up, +Z forward
+
+**Cubemap (OpenGL Convention):**
+- Faces: +X, -X, +Y, -Y, +Z, -Z
+- +Y is up (top face)
+- Right-handed coordinate system
+
+## Troubleshooting
+
+### Generated files appear too dark/bright
+
+Adjust intensity parameters:
+```bash
+# Increase sun intensity
+hdrgen -p sun-sky --sun-intensity 200 -o output/bright_sky.hdr
+
+# Decrease studio key light
+hdrgen -p studio --key-intensity 25 -o output/dim_studio.hdr
+```
+
+### Sun position is incorrect
+
+Check azimuth convention:
+- 0┬░ = North (top of lat-long image, middle)
+- 90┬░ = East (right side of lat-long image)
+- 180┬░ = South (bottom, middle)
+- 270┬░ = West (left side)
+
+### Cubemap faces don't align properly
+
+Ensure DCC is using OpenGL convention (+Y up). Some DCCs (DirectX convention) may require face reordering.
+
+### EXR files aren't working
+
+Current implementation writes HDR format. For true EXR support, integrate `@openexr/node` or similar library.
+
+## Limitations
+
+- **EXR Writing:** Currently writes HDR format instead (requires external library for true EXR)
+- **Sky Model:** Simplified procedural sky (not full Hosek-Wilkie or Nishita)
+- **Compression:** HDR files are uncompressed (no RLE compression)
+- **Metadata:** Minimal file metadata (no custom tags)
+
+## Roadmap
+
+- [ ] Proper EXR writing with compression
+- [ ] More presets (indoor, sunset, overcast, etc.)
+- [ ] Importance sampling map generation
+- [ ] Diffuse/specular pre-filtering
+- [ ] HDRI panorama manipulation (rotate, exposure)
+- [ ] Animation (time-of-day sequence)
+- [ ] Web-based visualizer
+
+## License
+
+Apache License 2.0
+
+Copyright 2024 - Present, Light Transport Entertainment Inc.
+
+## References
+
+- [HDR Image Formats](https://www.pauldebevec.com/Research/HDR/)
+- [Radiance RGBE Format](https://floyd.lbl.gov/radiance/refer/Notes/picture_format.html)
+- [OpenEXR Specification](https://www.openexr.com/)
+- [PBR Theory](https://www.pbrt.org/)
+- [Hosek-Wilkie Sky Model](https://cgg.mff.cuni.cz/projects/SkylightModelling/)
+
+## Contributing
+
+Contributions welcome! Please ensure:
+- Code follows existing style
+- Tests pass: `npm test`
+- Examples work: `npm run example`
+- Documentation is updated
+
+## Support
+
+For issues or questions, see: https://github.com/syoyo/tinyusdz
diff --git a/tools/hdrgen/examples/generate-all.js b/tools/hdrgen/examples/generate-all.js
new file mode 100644
index 00000000..cff4d722
--- /dev/null
+++ b/tools/hdrgen/examples/generate-all.js
@@ -0,0 +1,138 @@
+#!/usr/bin/env node
+/**
+ * Generate all preset examples
+ */
+
+import { HDRGenerator } from '../src/hdrgen.js';
+import * as path from 'path';
+import { fileURLToPath } from 'url';
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+const outputDir = path.join(__dirname, '../output');
+
+console.log('Generating all preset examples...\n');
+
+// 1. White Furnace (for testing)
+console.log('--- White Furnace ---');
+HDRGenerator.generate({
+ preset: 'white-furnace',
+ width: 1024,
+ height: 512,
+ projection: 'latlong',
+ format: 'hdr',
+ output: path.join(outputDir, 'white_furnace_1k.hdr'),
+ presetOptions: { intensity: 1.0 }
+});
+
+// 2. Sun & Sky (Default - afternoon)
+console.log('\n--- Sun & Sky (Afternoon) ---');
+HDRGenerator.generate({
+ preset: 'sun-sky',
+ width: 2048,
+ height: 1024,
+ projection: 'latlong',
+ format: 'hdr',
+ output: path.join(outputDir, 'sunsky_afternoon_2k.hdr'),
+ presetOptions: {
+ sunElevation: 45,
+ sunAzimuth: 135,
+ sunIntensity: 100.0,
+ skyIntensity: 0.5
+ }
+});
+
+// 3. Sun & Sky (Sunset)
+console.log('\n--- Sun & Sky (Sunset) ---');
+HDRGenerator.generate({
+ preset: 'sun-sky',
+ width: 2048,
+ height: 1024,
+ projection: 'latlong',
+ format: 'hdr',
+ output: path.join(outputDir, 'sunsky_sunset_2k.hdr'),
+ presetOptions: {
+ sunElevation: 5,
+ sunAzimuth: 270,
+ sunIntensity: 150.0,
+ skyIntensity: 0.3
+ }
+});
+
+// 4. Sun & Sky (Noon)
+console.log('\n--- Sun & Sky (Noon) ---');
+HDRGenerator.generate({
+ preset: 'sun-sky',
+ width: 2048,
+ height: 1024,
+ projection: 'latlong',
+ format: 'hdr',
+ output: path.join(outputDir, 'sunsky_noon_2k.hdr'),
+ presetOptions: {
+ sunElevation: 85,
+ sunAzimuth: 0,
+ sunIntensity: 200.0,
+ skyIntensity: 0.8
+ }
+});
+
+// 5. Studio Lighting (Default)
+console.log('\n--- Studio Lighting (Default) ---');
+HDRGenerator.generate({
+ preset: 'studio',
+ width: 2048,
+ height: 1024,
+ projection: 'latlong',
+ format: 'hdr',
+ output: path.join(outputDir, 'studio_default_2k.hdr'),
+ presetOptions: {}
+});
+
+// 6. Studio Lighting (High Key)
+console.log('\n--- Studio Lighting (High Key) ---');
+HDRGenerator.generate({
+ preset: 'studio',
+ width: 2048,
+ height: 1024,
+ projection: 'latlong',
+ format: 'hdr',
+ output: path.join(outputDir, 'studio_highkey_2k.hdr'),
+ presetOptions: {
+ keyIntensity: 80.0,
+ fillIntensity: 30.0,
+ rimIntensity: 10.0,
+ ambientIntensity: 1.0
+ }
+});
+
+// 7. Studio Lighting (Low Key)
+console.log('\n--- Studio Lighting (Low Key) ---');
+HDRGenerator.generate({
+ preset: 'studio',
+ width: 2048,
+ height: 1024,
+ projection: 'latlong',
+ format: 'hdr',
+ output: path.join(outputDir, 'studio_lowkey_2k.hdr'),
+ presetOptions: {
+ keyIntensity: 30.0,
+ fillIntensity: 5.0,
+ rimIntensity: 40.0,
+ ambientIntensity: 0.1
+ }
+});
+
+// 8. Cubemap Example (Studio)
+console.log('\n--- Cubemap (Studio) ---');
+HDRGenerator.generate({
+ preset: 'studio',
+ width: 512,
+ height: 512,
+ projection: 'cubemap',
+ format: 'hdr',
+ output: path.join(outputDir, 'studio_cube'),
+ presetOptions: {}
+});
+
+console.log('\n=== All examples generated successfully! ===');
+console.log(`Output directory: ${outputDir}\n`);
diff --git a/tools/hdrgen/examples/test-presets.js b/tools/hdrgen/examples/test-presets.js
new file mode 100644
index 00000000..12134451
--- /dev/null
+++ b/tools/hdrgen/examples/test-presets.js
@@ -0,0 +1,194 @@
+#!/usr/bin/env node
+/**
+ * Quick test script for validating all presets
+ */
+
+import { HDRGenerator, HDRImage, Vec3 } from '../src/hdrgen.js';
+import * as path from 'path';
+import { fileURLToPath } from 'url';
+import * as fs from 'fs';
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+const outputDir = path.join(__dirname, '../output');
+
+// Ensure output directory exists
+if (!fs.existsSync(outputDir)) {
+ fs.mkdirSync(outputDir, { recursive: true });
+}
+
+console.log('Running HDRGen tests...\n');
+
+let passed = 0;
+let failed = 0;
+
+function test(name, fn) {
+ try {
+ console.log(`Testing: ${name}`);
+ fn();
+ console.log(`тЬУ ${name} passed\n`);
+ passed++;
+ } catch (err) {
+ console.error(`тЬЧ ${name} failed: ${err.message}\n`);
+ failed++;
+ }
+}
+
+// Test 1: White Furnace Generation
+test('White Furnace (256x128)', () => {
+ const result = HDRGenerator.generate({
+ preset: 'white-furnace',
+ width: 256,
+ height: 128,
+ projection: 'latlong',
+ format: 'hdr',
+ output: path.join(outputDir, 'test_furnace.hdr'),
+ presetOptions: { intensity: 1.0 }
+ });
+
+ if (!result.latLongImage) throw new Error('No image generated');
+ if (result.latLongImage.width !== 256) throw new Error('Wrong width');
+ if (result.latLongImage.height !== 128) throw new Error('Wrong height');
+
+ // Check first pixel is white
+ const pixel = result.latLongImage.getPixel(0, 0);
+ if (Math.abs(pixel.r - 1.0) > 0.01) throw new Error('Wrong intensity');
+});
+
+// Test 2: Sun & Sky Generation
+test('Sun & Sky (256x128)', () => {
+ const result = HDRGenerator.generate({
+ preset: 'sun-sky',
+ width: 256,
+ height: 128,
+ projection: 'latlong',
+ format: 'hdr',
+ output: path.join(outputDir, 'test_sunsky.hdr'),
+ presetOptions: {
+ sunElevation: 45,
+ sunAzimuth: 135,
+ sunIntensity: 100.0
+ }
+ });
+
+ if (!result.latLongImage) throw new Error('No image generated');
+
+ // Check that sky has varying intensities (not uniform)
+ const p1 = result.latLongImage.getPixel(0, 0);
+ const p2 = result.latLongImage.getPixel(128, 64);
+ if (p1.r === p2.r && p1.g === p2.g && p1.b === p2.b) {
+ throw new Error('Sky should not be uniform');
+ }
+});
+
+// Test 3: Studio Lighting Generation
+test('Studio Lighting (256x128)', () => {
+ const result = HDRGenerator.generate({
+ preset: 'studio',
+ width: 256,
+ height: 128,
+ projection: 'latlong',
+ format: 'hdr',
+ output: path.join(outputDir, 'test_studio.hdr'),
+ presetOptions: {}
+ });
+
+ if (!result.latLongImage) throw new Error('No image generated');
+});
+
+// Test 4: Cubemap Generation
+test('Cubemap Generation (64x64 faces)', () => {
+ const result = HDRGenerator.generate({
+ preset: 'white-furnace',
+ width: 64,
+ height: 64,
+ projection: 'cubemap',
+ format: 'hdr',
+ output: path.join(outputDir, 'test_cube'),
+ presetOptions: { intensity: 1.0 }
+ });
+
+ if (!result.faces) throw new Error('No cubemap faces generated');
+ if (result.faces.length !== 6) throw new Error('Should generate 6 faces');
+
+ // Check each face
+ for (const face of result.faces) {
+ if (!face.image) throw new Error('Missing face image');
+ if (face.image.width !== 64) throw new Error('Wrong face size');
+ }
+});
+
+// Test 5: HDR Image Class
+test('HDRImage class', () => {
+ const img = new HDRImage(100, 50);
+ if (img.width !== 100) throw new Error('Wrong width');
+ if (img.height !== 50) throw new Error('Wrong height');
+ if (img.data.length !== 100 * 50 * 3) throw new Error('Wrong data size');
+
+ img.setPixel(10, 20, 1.5, 2.5, 3.5);
+ const pixel = img.getPixel(10, 20);
+ if (Math.abs(pixel.r - 1.5) > 0.001) throw new Error('setPixel/getPixel failed');
+});
+
+// Test 6: Vec3 math
+test('Vec3 math utilities', () => {
+ const v1 = new Vec3(1, 2, 3);
+ const v2 = new Vec3(4, 5, 6);
+
+ const sum = Vec3.add(v1, v2);
+ if (sum.x !== 5 || sum.y !== 7 || sum.z !== 9) throw new Error('Vec3.add failed');
+
+ const dot = Vec3.dot(v1, v2);
+ if (dot !== 32) throw new Error('Vec3.dot failed');
+
+ const len = new Vec3(3, 4, 0).length();
+ if (Math.abs(len - 5) > 0.001) throw new Error('Vec3.length failed');
+
+ const norm = new Vec3(0, 5, 0).normalize();
+ if (Math.abs(norm.y - 1) > 0.001) throw new Error('Vec3.normalize failed');
+});
+
+// Test 7: Lat-Long to Direction Conversion
+test('Lat-Long coordinate conversion', () => {
+ // Test north pole (u=0.5, v=0)
+ const north = HDRImage.latLongToDir(0.5, 0.0);
+ if (Math.abs(north.y - 1) > 0.01) throw new Error('North pole conversion failed');
+
+ // Test south pole (u=0.5, v=1)
+ const south = HDRImage.latLongToDir(0.5, 1.0);
+ if (Math.abs(south.y + 1) > 0.01) throw new Error('South pole conversion failed');
+
+ // Test equator front (u=0.5, v=0.5)
+ const front = HDRImage.latLongToDir(0.5, 0.5);
+ if (Math.abs(front.y) > 0.01) throw new Error('Equator conversion failed');
+});
+
+// Test 8: Custom Intensity White Furnace
+test('White Furnace with custom intensity', () => {
+ const result = HDRGenerator.generate({
+ preset: 'white-furnace',
+ width: 64,
+ height: 32,
+ projection: 'latlong',
+ format: 'hdr',
+ output: path.join(outputDir, 'test_furnace_10x.hdr'),
+ presetOptions: { intensity: 10.0 }
+ });
+
+ const pixel = result.latLongImage.getPixel(32, 16);
+ if (Math.abs(pixel.r - 10.0) > 0.01) throw new Error('Wrong intensity');
+});
+
+// Summary
+console.log('='.repeat(60));
+console.log(`Test Results: ${passed} passed, ${failed} failed`);
+console.log('='.repeat(60));
+
+if (failed > 0) {
+ console.error('\nтЬЧ Some tests failed');
+ process.exit(1);
+} else {
+ console.log('\nтЬУ All tests passed!');
+ console.log(`\nTest outputs in: ${outputDir}/test_*.hdr`);
+ process.exit(0);
+}
diff --git a/tools/hdrgen/output/sky_test.bmp b/tools/hdrgen/output/sky_test.bmp
new file mode 100644
index 00000000..705ba62b
Binary files /dev/null and b/tools/hdrgen/output/sky_test.bmp differ
diff --git a/tools/hdrgen/output/studio_test.png b/tools/hdrgen/output/studio_test.png
new file mode 100644
index 00000000..8f633d9a
Binary files /dev/null and b/tools/hdrgen/output/studio_test.png differ
diff --git a/tools/hdrgen/output/test_cube_+X.hdr b/tools/hdrgen/output/test_cube_+X.hdr
new file mode 100644
index 00000000..9c8198b8
--- /dev/null
+++ b/tools/hdrgen/output/test_cube_+X.hdr
@@ -0,0 +1,6 @@
+#?RADIANCE
+FORMAT=32-bit_rle_rgbe
+EXPOSURE=1.0
+
+-Y 64 +X 64
+ А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А
\ No newline at end of file
diff --git a/tools/hdrgen/output/test_cube_+Y.hdr b/tools/hdrgen/output/test_cube_+Y.hdr
new file mode 100644
index 00000000..9c8198b8
--- /dev/null
+++ b/tools/hdrgen/output/test_cube_+Y.hdr
@@ -0,0 +1,6 @@
+#?RADIANCE
+FORMAT=32-bit_rle_rgbe
+EXPOSURE=1.0
+
+-Y 64 +X 64
+ А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А
\ No newline at end of file
diff --git a/tools/hdrgen/output/test_cube_+Z.hdr b/tools/hdrgen/output/test_cube_+Z.hdr
new file mode 100644
index 00000000..9c8198b8
--- /dev/null
+++ b/tools/hdrgen/output/test_cube_+Z.hdr
@@ -0,0 +1,6 @@
+#?RADIANCE
+FORMAT=32-bit_rle_rgbe
+EXPOSURE=1.0
+
+-Y 64 +X 64
+ А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А
\ No newline at end of file
diff --git a/tools/hdrgen/output/test_cube_-X.hdr b/tools/hdrgen/output/test_cube_-X.hdr
new file mode 100644
index 00000000..9c8198b8
--- /dev/null
+++ b/tools/hdrgen/output/test_cube_-X.hdr
@@ -0,0 +1,6 @@
+#?RADIANCE
+FORMAT=32-bit_rle_rgbe
+EXPOSURE=1.0
+
+-Y 64 +X 64
+ А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А
\ No newline at end of file
diff --git a/tools/hdrgen/output/test_cube_-Y.hdr b/tools/hdrgen/output/test_cube_-Y.hdr
new file mode 100644
index 00000000..9c8198b8
--- /dev/null
+++ b/tools/hdrgen/output/test_cube_-Y.hdr
@@ -0,0 +1,6 @@
+#?RADIANCE
+FORMAT=32-bit_rle_rgbe
+EXPOSURE=1.0
+
+-Y 64 +X 64
+ А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А
\ No newline at end of file
diff --git a/tools/hdrgen/output/test_cube_-Z.hdr b/tools/hdrgen/output/test_cube_-Z.hdr
new file mode 100644
index 00000000..9c8198b8
--- /dev/null
+++ b/tools/hdrgen/output/test_cube_-Z.hdr
@@ -0,0 +1,6 @@
+#?RADIANCE
+FORMAT=32-bit_rle_rgbe
+EXPOSURE=1.0
+
+-Y 64 +X 64
+ А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А
\ No newline at end of file
diff --git a/tools/hdrgen/output/test_furnace.hdr b/tools/hdrgen/output/test_furnace.hdr
new file mode 100644
index 00000000..5842afd8
--- /dev/null
+++ b/tools/hdrgen/output/test_furnace.hdr
@@ -0,0 +1,6 @@
+#?RADIANCE
+FORMAT=32-bit_rle_rgbe
+EXPOSURE=1.0
+
+-Y 128 +X 256
+ А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А А
\ No newline at end of file
diff --git a/tools/hdrgen/output/test_furnace_10x.hdr b/tools/hdrgen/output/test_furnace_10x.hdr
new file mode 100644
index 00000000..f39fd707
--- /dev/null
+++ b/tools/hdrgen/output/test_furnace_10x.hdr
@@ -0,0 +1,6 @@
+#?RADIANCE
+FORMAT=32-bit_rle_rgbe
+EXPOSURE=1.0
+
+-Y 32 +X 64
+ Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г Г
\ No newline at end of file
diff --git a/tools/hdrgen/output/test_studio.hdr b/tools/hdrgen/output/test_studio.hdr
new file mode 100644
index 00000000..a71f9d7b
--- /dev/null
+++ b/tools/hdrgen/output/test_studio.hdr
@@ -0,0 +1,6 @@
+#?RADIANCE
+FORMAT=32-bit_rle_rgbe
+EXPOSURE=1.0
+
+-Y 128 +X 256
+ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ыЄ ї№ ¤ ¤ ї№ ыё ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~шя № № шю ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~Є∙ ▌ч Аръ Асы Аръ А▌ц А ё° ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ыЄ ▌ч Аэ° А√ А А А А А А А А А А√ Аьў А▌ц А ъё ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ №А А А А А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~∙ чЄ А■ А А А А А А А А А А А А А А А А¤ Ацё А ў ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А А √Б Б Б Б Б Б Б А А А ■· ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ть А■ А А А А А А А А╫т Б┌ц Б█ч Б┌ц Б╓т Б А А А А А А А¤ Асы А ¤ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А ¤ўБ Б Б Б В В В В В ·В Б Б Б А А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~№ ьў А А А А А А╪ф Бцє БЄ Б№ Б Б Б Б Б Б√ БЄ БцЄ Б╪у Б А А А А АыЎ А · ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А А Б Б В В В В В В В В В В В №їВ Б Б А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ё° я· А А А А А┌ц Бэ· Б Б Б Б Б Б Б Б Б Б Б Б Б Бэ· Б┘х Б А А А Аю∙ А Ёў ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А А Б ■ЎВ В В В Г Г Г Г Г Г Г Г В В В Б Б А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ыї А А А А Ахё Б¤ Б Б Б Б Б Б Б Б Б Б Б Б Б Б Б Б№ БфЁ Б А А А АщЇ А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А Б ¤В В В Г Г Г Г Г Г Г Г Г Г Г ■Г В В Б Б А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ў■ ▐ш А А А А Ащї Б Б Б Б Б Б Б Б╥▐ В╓т В╫ф В╓т В╤▌ В Б Б Б Б Б Б БшЇ Б А А А А▄ц А ї№ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А Б Б В В Г Г Г ■ўД Д Д Д Д Д Д Г Г Г Г В В Б А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ї А А А Ахё Б Б Б Б Б Б╨▄ В▌ъ ВшЎ Вё ВЎ В° ВЎ ВЁ■ Вшї В▌ъ В╨▄ В Б Б Б Б БфЁ Б А А Ає■ А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А Б В В Г Г Г Д Д Д Д Д Д Д Д Д №їД Г Г √єГ В Б Б А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~чю █х А А А А┌х Б√ Б Б Б Б Б╪х Въў В· В В В В В В В В∙ Вщў В╫ф В Б Б Б Б∙ Б┘ф Б А А А┌у А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ √А ¤Б Б В В Г Г Д Д Д Д Д Д Д Д Д Д Д Г Г Г В В Б А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~є· щЇ А А А Аъў Б Б Б Б Б┘х Вю№ В В В В В В В В В В В Вэ√ В╪ф В Б Б Б Бщї Б А А АшЄ А ё° ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А Б Б В Г Г Г Д Д Д Д Е Е Е Е Д Д Д Д Г Г В В Б А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~√ Ї А А А╘▀ Б° Б Б Б Б╥▐ Въў В В В В В В В В В В В В В ВщЎ В╤▌ В Б Б БЎ Б А А Ає■ А ∙ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А Б ¤ЎВ В Г Г Г Д Д Д Е Е Е Е Е ■ЎЕ Д Д Д Г Г В В Б А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ № А А А▄ч Б Б Б Б Б▌ъ В° В В В В В В В В В В В В В Вў В▄щ В Б Б Б Б┌ц Б А А· А ■ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А А А А А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А Б Б В Г Г Г Д Д Д Е Е Е Е Е ■ЎЕ Д Д Д Г Г В В Б А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А А Арь Б Б Б Б БхЄ В В В В В В╧█ Г█ш Грэ Г┌ч Г╬┌ Г В В В В Вфё В Б Б Б Б▀ы Б А А¤ А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А А Б Б Б Б Б А А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А Б В ўГ Г Г Д Д Д √ЇЕ Е Е Е Е Д Д Д ¤Д Г Г В В Б А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~■ ■ А А Асэ Б Б Б Б БщЎ В В В В В В┌ш Гэ√ Гў Гь· Г┌ч Г В В В В Вшї В Б Б Б Брь Б А А№ А √ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А А Б В В В В В Б А А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А Б В В Г Г √Д Д Д Д Д √єЕ Д Д Д Д Д Г Г Г В Б Б А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ў■ ∙ А А А▀ъ Б Б Б Б Бшї В В В В В В▄щ ГЁ■ Г■ Гя■ Г█ш Г В В В В ВчЇ В Б Б Б Б▌щ Б А Аў А ї№ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А Б В В Г Г Г В В Б А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А Б Б В ■Г Г Г Д Д Д Д Д Д Д Д Д Г Г Г В В Б А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ьє Ё№ А А А╪ф Б Б Б Б БтЁ В В В В В В╥▀ Грю ГцЇ Грэ Г╤▐ Г В В В В Вся В Б Б Б■ Б╫т Б А Ая∙ А ъё ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А Б В Г Г Г Г Г В Б А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А Б В В Г Г Г ¤їД Д Д Д Д Д Д Г Г Г В В Б Б А ■ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ фю А А А Аї Б Б Б Б┘ц Вї В В В В В В В╧▄ Г В В В В В ВЇ В╪х В Б Б БЇ Б А А Ать А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А Б В Г Г Д Г Г В Б А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А ¤ЎБ Б В В Г Г Г Г Г Г Г Г Г Г Г В В ¤В Б А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А А АчЇ Б Б Б Б БцЇ В В В В В В В В В В В В В Вхє В Б Б Б БцЄ Б А А А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А Б В Г Г Г Г Г В Б А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А Б Б В В В Г Г Г Г Г Г Г Г В В ■ўВ Б А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~є· є А А А╓т Б№ Б Б Б Б╒с Вь· В В В В В В В В В В В Вы∙ В╘р В Б Б Б· Б╒р Б А АЄ¤ А ё° ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А Б В В В Г В В В Б А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А А Б ■ўВ В В В В В В В В В В Б Б А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ▄ц А А А АцЄ Б Б Б Б Б╓у Въ° В¤ В В В В В В В В№ Въў В╓т В Б Б Б Бхё Б А А А█ф А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А Б Б В В В Б Б А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А Б Б Б В В В В В №В Б Б №їБ А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~° Є¤ А А А АЁ¤ Б Б Б Б Б╤▌ Всю Вю№ В° В В В В° Вю√ Врэ В╨▄ В Б Б Б Бя√ Б А А АЁ√ А Ў■ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А Б Б Б Б Б А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А А °Б Б Б Б Б Б Б А А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А А А╘р Бє Б Б Б Б Б Б╨▄ В┘х В▐ы Врэ В▐ы В┘х В╨▄ В Б Б Б Б БЄ Б╙▐ Б А А А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А А А А А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ А А А А А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~эЇ ръ А А А А╘▀ БЁ¤ Б Б Б Б Б Б Б Б Б Б Б Б Б Б Б Бя№ Б╙▐ Б А А А▐ш А ыЄ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~№ хя А А А А АцЄ Б¤ Б Б Б Б Б Б Б Б Б Б Б Б№ Бхё Б А А А Аую А · ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ фю А А А А А╒с БчЇ Бў Б Б Б Б Б Б Б Бў Бчє Б╒р Б А А А Атэ А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ▄ц А■ А А А А А А┘ф Бсэ БцЄ БчЇ БцЄ Бсэ Б╪ф Б А А А А А¤ А█х А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ыЎ А А А А А А А А А А А А А А А АъЇ А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~Ї№ щє А¤ А А А А А А А А А А№ АшЄ А є· ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ сь Аъї АЁ√ Аё№ Ая· Аъї Асы А ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~цэ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~эЇ ¤ ¤ ьє ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
\ No newline at end of file
diff --git a/tools/hdrgen/output/test_sunsky.hdr b/tools/hdrgen/output/test_sunsky.hdr
new file mode 100644
index 00000000..cc2e51ee
--- /dev/null
+++ b/tools/hdrgen/output/test_sunsky.hdr
@@ -0,0 +1,6 @@
+#?RADIANCE
+FORMAT=32-bit_rle_rgbe
+EXPOSURE=1.0
+
+-Y 128 +X 256
+Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Щ ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Ы ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Э ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~Я ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~б ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~г ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~е ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~з ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~й ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~л ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~н ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~п ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~▒ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~│ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╡ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╖ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╣ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╗ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~╜ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┐ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~┴ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~├ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~┼ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╟ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╔ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~╦ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~═ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╧ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╤ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╙ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╓ ~ ╓ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╒ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~Й│ эБ В ы╛Г В эБЙ│ ╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~╫ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~ ∙╨В Г Ж Г ∙╨В ┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~┘ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~ё ~ ∙▀Б В ы╛Г В ∙▀Бё ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~█ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~ ▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▌ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~▀ ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~с ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~у ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~х ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~ч ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~щ ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~ы ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~э ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~я ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~ё ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~є ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ї ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~ў ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~∙ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~√ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
\ No newline at end of file
diff --git a/tools/hdrgen/package.json b/tools/hdrgen/package.json
new file mode 100644
index 00000000..7d12d325
--- /dev/null
+++ b/tools/hdrgen/package.json
@@ -0,0 +1,31 @@
+{
+ "name": "hdrgen",
+ "version": "1.1.0",
+ "description": "Synthetic HDR/EXR/LDR environment map generator with rotation, scaling, and tone mapping",
+ "main": "src/hdrgen.js",
+ "type": "module",
+ "bin": {
+ "hdrgen": "./src/cli.js"
+ },
+ "scripts": {
+ "generate": "node src/cli.js",
+ "example": "node examples/generate-all.js",
+ "test": "node examples/test-presets.js"
+ },
+ "keywords": [
+ "hdr",
+ "exr",
+ "environment-map",
+ "cubemap",
+ "latlong",
+ "ibl",
+ "pbr"
+ ],
+ "author": "TinyUSDZ Project",
+ "license": "Apache-2.0",
+ "dependencies": {},
+ "devDependencies": {},
+ "engines": {
+ "node": ">=16.0.0"
+ }
+}
diff --git a/tools/hdrgen/src/cli.js b/tools/hdrgen/src/cli.js
new file mode 100644
index 00000000..7d1f0b08
--- /dev/null
+++ b/tools/hdrgen/src/cli.js
@@ -0,0 +1,256 @@
+#!/usr/bin/env node
+/**
+ * HDRGen CLI - Command line interface for HDR environment map generation
+ *
+ * Copyright 2024 - Present, Light Transport Entertainment Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import { HDRGenerator, Vec3 } from './hdrgen.js';
+import * as path from 'path';
+import { fileURLToPath } from 'url';
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+
+// ============================================================================
+// CLI Argument Parser
+// ============================================================================
+
+function parseArgs(argv) {
+ const args = {
+ preset: 'white-furnace',
+ width: 2048,
+ height: 1024,
+ projection: 'latlong',
+ format: 'hdr',
+ output: null,
+ presetOptions: {},
+ rotation: 0,
+ intensityScale: 1.0,
+ tonemapOptions: {
+ exposure: 0.0,
+ gamma: 2.2,
+ method: 'reinhard'
+ },
+ help: false
+ };
+
+ for (let i = 2; i < argv.length; i++) {
+ const arg = argv[i];
+
+ if (arg === '-h' || arg === '--help') {
+ args.help = true;
+ } else if (arg === '-p' || arg === '--preset') {
+ args.preset = argv[++i];
+ } else if (arg === '-w' || arg === '--width') {
+ args.width = parseInt(argv[++i]);
+ } else if (arg === '--height') {
+ args.height = parseInt(argv[++i]);
+ } else if (arg === '--projection') {
+ args.projection = argv[++i];
+ } else if (arg === '-f' || arg === '--format') {
+ args.format = argv[++i];
+ } else if (arg === '-o' || arg === '--output') {
+ args.output = argv[++i];
+ }
+ // Transform options
+ else if (arg === '--rotation' || arg === '--rotate') {
+ args.rotation = parseFloat(argv[++i]);
+ } else if (arg === '--intensity-scale' || arg === '--scale') {
+ args.intensityScale = parseFloat(argv[++i]);
+ }
+ // Tone mapping options (for LDR output)
+ else if (arg === '--exposure') {
+ args.tonemapOptions.exposure = parseFloat(argv[++i]);
+ } else if (arg === '--gamma') {
+ args.tonemapOptions.gamma = parseFloat(argv[++i]);
+ } else if (arg === '--tonemap-method') {
+ args.tonemapOptions.method = argv[++i];
+ }
+ // Sun/Sky options
+ else if (arg === '--sun-elevation') {
+ args.presetOptions.sunElevation = parseFloat(argv[++i]);
+ } else if (arg === '--sun-azimuth') {
+ args.presetOptions.sunAzimuth = parseFloat(argv[++i]);
+ } else if (arg === '--sun-intensity') {
+ args.presetOptions.sunIntensity = parseFloat(argv[++i]);
+ } else if (arg === '--sky-intensity') {
+ args.presetOptions.skyIntensity = parseFloat(argv[++i]);
+ }
+ // Studio options
+ else if (arg === '--key-intensity') {
+ args.presetOptions.keyIntensity = parseFloat(argv[++i]);
+ } else if (arg === '--fill-intensity') {
+ args.presetOptions.fillIntensity = parseFloat(argv[++i]);
+ } else if (arg === '--rim-intensity') {
+ args.presetOptions.rimIntensity = parseFloat(argv[++i]);
+ } else if (arg === '--ambient-intensity') {
+ args.presetOptions.ambientIntensity = parseFloat(argv[++i]);
+ }
+ // White furnace options
+ else if (arg === '--intensity') {
+ args.presetOptions.intensity = parseFloat(argv[++i]);
+ }
+ }
+
+ return args;
+}
+
+function printHelp() {
+ console.log(`
+HDRGen - Synthetic HDR/EXR Environment Map Generator
+
+USAGE:
+ hdrgen [OPTIONS]
+
+OPTIONS:
+ -h, --help Show this help message
+ -p, --preset Preset name (white-furnace, sun-sky, studio) [default: white-furnace]
+ -w, --width Width in pixels [default: 2048]
+ --height Height in pixels [default: 1024]
+ --projection Projection type (latlong, cubemap) [default: latlong]
+ -f, --format Output format (hdr, exr, png, bmp, jpg) [default: hdr]
+ -o, --output Output file path [default: output/_.]
+
+TRANSFORM OPTIONS:
+ --rotation Rotate environment map (degrees, +CCW) [default: 0]
+ --intensity-scale Global intensity multiplier [default: 1.0]
+
+LDR/TONE MAPPING OPTIONS (for PNG/BMP/JPG output):
+ --exposure Exposure adjustment in EV [default: 0.0]
+ --gamma Gamma correction [default: 2.2]
+ --tonemap-method Method: simple, reinhard, aces [default: reinhard]
+
+WHITE FURNACE OPTIONS:
+ --intensity Furnace intensity [default: 1.0]
+
+SUN & SKY OPTIONS:
+ --sun-elevation Sun elevation angle in degrees [default: 45]
+ --sun-azimuth Sun azimuth angle in degrees [default: 135]
+ --sun-intensity Sun disk intensity [default: 100.0]
+ --sky-intensity Base sky intensity [default: 0.5]
+
+STUDIO LIGHTING OPTIONS:
+ --key-intensity Key light intensity [default: 50.0]
+ --fill-intensity Fill light intensity [default: 10.0]
+ --rim-intensity Rim light intensity [default: 20.0]
+ --ambient-intensity Ambient light intensity [default: 0.5]
+
+EXAMPLES:
+ # Generate white furnace for testing
+ hdrgen --preset white-furnace -o output/furnace.hdr
+
+ # Generate sun & sky with low sun
+ hdrgen --preset sun-sky --sun-elevation 15 --sun-azimuth 90 -o output/sunset.hdr
+
+ # Generate studio lighting as cubemap
+ hdrgen --preset studio --projection cubemap --width 512 -o output/studio
+
+ # High-resolution sky with intense sun
+ hdrgen -p sun-sky -w 4096 --height 2048 --sun-intensity 200 -o output/sky_4k.hdr
+
+ # Rotate environment 90 degrees
+ hdrgen -p sun-sky --rotation 90 -o output/sky_rotated.hdr
+
+ # Scale intensity 2x and output as PNG
+ hdrgen -p studio --intensity-scale 2.0 -f png -o output/studio.png
+
+ # Generate LDR preview with custom exposure
+ hdrgen -p sun-sky -f png --exposure 1.0 --gamma 2.2 -o output/sky_preview.png
+
+ # Generate BMP with ACES tone mapping
+ hdrgen -p studio -f bmp --tonemap-method aces --exposure -0.5 -o output/studio.bmp
+
+PRESETS:
+ white-furnace - Uniform white environment for energy conservation testing
+ sun-sky - Procedural sky with sun disk and atmospheric gradient
+ studio - 3-point lighting setup (key, fill, rim lights)
+
+FORMATS:
+ HDR Formats:
+ hdr - Radiance RGBE format (.hdr)
+ exr - OpenEXR format (.exr) [requires external library]
+
+ LDR Formats (with automatic tone mapping):
+ png - PNG format (.png) [uncompressed]
+ bmp - BMP format (.bmp) [24-bit RGB]
+ jpg/jpeg - JPEG format [converts to BMP, requires jpeg-js for true JPEG]
+
+PROJECTIONS:
+ latlong - Equirectangular lat-long projection (single image)
+ cubemap - Cubemap projection (6 faces: +X, -X, +Y, -Y, +Z, -Z)
+
+OUTPUT:
+ - For latlong: Single file at specified path
+ - For cubemap: Six files with face suffixes (_+X, _-X, _+Y, _-Y, _+Z, _-Z)
+ - Default output directory: tools/hdrgen/output/
+
+NOTES:
+ - All outputs are in linear color space (no gamma encoding)
+ - HDR values can exceed 1.0 (high dynamic range)
+ - Cubemap faces use OpenGL convention (+Y is up)
+ - Generated maps are suitable for IBL (Image-Based Lighting) in renderers
+
+For more information, see: tools/hdrgen/README.md
+`);
+}
+
+// ============================================================================
+// Main CLI Entry Point
+// ============================================================================
+
+async function main() {
+ const args = parseArgs(process.argv);
+
+ if (args.help) {
+ printHelp();
+ process.exit(0);
+ }
+
+ // Generate default output path if not specified
+ if (!args.output) {
+ const outputDir = path.join(__dirname, '../output');
+ const filename = `${args.preset}_${args.projection}.${args.format}`;
+ args.output = path.join(outputDir, filename);
+ }
+
+ // Ensure output directory exists
+ const outputDir = path.dirname(args.output);
+ try {
+ const fs = await import('fs');
+ if (!fs.existsSync(outputDir)) {
+ fs.mkdirSync(outputDir, { recursive: true });
+ }
+ } catch (err) {
+ console.error(`Error creating output directory: ${err.message}`);
+ process.exit(1);
+ }
+
+ try {
+ // Generate environment map
+ HDRGenerator.generate({
+ preset: args.preset,
+ width: args.width,
+ height: args.height,
+ projection: args.projection,
+ format: args.format,
+ output: args.output,
+ presetOptions: args.presetOptions,
+ rotation: args.rotation,
+ intensityScale: args.intensityScale,
+ tonemapOptions: args.tonemapOptions
+ });
+
+ console.log('\nтЬУ Generation complete!');
+ console.log(`Output: ${args.output}\n`);
+
+ } catch (err) {
+ console.error(`\nтЬЧ Error: ${err.message}`);
+ console.error(err.stack);
+ process.exit(1);
+ }
+}
+
+// Run CLI
+main();
diff --git a/tools/hdrgen/src/hdrgen.js b/tools/hdrgen/src/hdrgen.js
new file mode 100644
index 00000000..705ebb53
--- /dev/null
+++ b/tools/hdrgen/src/hdrgen.js
@@ -0,0 +1,912 @@
+#!/usr/bin/env node
+/**
+ * HDRGen - Synthetic HDR/EXR Environment Map Generator
+ *
+ * Generates procedural environment maps for IBL testing and visualization
+ * Supports: HDR (Radiance RGBE), EXR (OpenEXR), lat-long and cubemap projections
+ *
+ * Copyright 2024 - Present, Light Transport Entertainment Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import * as fs from 'fs';
+import * as path from 'path';
+
+// ============================================================================
+// Math Utilities
+// ============================================================================
+
+class Vec3 {
+ constructor(x = 0, y = 0, z = 0) {
+ this.x = x;
+ this.y = y;
+ this.z = z;
+ }
+
+ static add(a, b) {
+ return new Vec3(a.x + b.x, a.y + b.y, a.z + b.z);
+ }
+
+ static sub(a, b) {
+ return new Vec3(a.x - b.x, a.y - b.y, a.z - b.z);
+ }
+
+ static mul(v, s) {
+ return new Vec3(v.x * s, v.y * s, v.z * s);
+ }
+
+ static dot(a, b) {
+ return a.x * b.x + a.y * b.y + a.z * b.z;
+ }
+
+ static cross(a, b) {
+ return new Vec3(
+ a.y * b.z - a.z * b.y,
+ a.z * b.x - a.x * b.z,
+ a.x * b.y - a.y * b.x
+ );
+ }
+
+ length() {
+ return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);
+ }
+
+ normalize() {
+ const len = this.length();
+ if (len > 0) {
+ return new Vec3(this.x / len, this.y / len, this.z / len);
+ }
+ return new Vec3(0, 0, 0);
+ }
+
+ static lerp(a, b, t) {
+ return new Vec3(
+ a.x + (b.x - a.x) * t,
+ a.y + (b.y - a.y) * t,
+ a.z + (b.z - a.z) * t
+ );
+ }
+}
+
+// ============================================================================
+// HDR Image Buffer
+// ============================================================================
+
+class HDRImage {
+ constructor(width, height) {
+ this.width = width;
+ this.height = height;
+ // Store as float32 RGB (linear color space)
+ this.data = new Float32Array(width * height * 3);
+ }
+
+ setPixel(x, y, r, g, b) {
+ const idx = (y * this.width + x) * 3;
+ this.data[idx + 0] = r;
+ this.data[idx + 1] = g;
+ this.data[idx + 2] = b;
+ }
+
+ getPixel(x, y) {
+ const idx = (y * this.width + x) * 3;
+ return {
+ r: this.data[idx + 0],
+ g: this.data[idx + 1],
+ b: this.data[idx + 2]
+ };
+ }
+
+ // Convert lat-long (u,v) to direction vector
+ static latLongToDir(u, v) {
+ const phi = u * Math.PI * 2.0; // 0 to 2╧А
+ const theta = v * Math.PI; // 0 to ╧А
+ const sinTheta = Math.sin(theta);
+ return new Vec3(
+ sinTheta * Math.cos(phi),
+ Math.cos(theta),
+ sinTheta * Math.sin(phi)
+ );
+ }
+
+ // Convert direction vector to lat-long (u,v)
+ static dirToLatLong(dir) {
+ const theta = Math.acos(Math.max(-1, Math.min(1, dir.y)));
+ const phi = Math.atan2(dir.z, dir.x);
+ return {
+ u: (phi + Math.PI) / (Math.PI * 2.0),
+ v: theta / Math.PI
+ };
+ }
+}
+
+// ============================================================================
+// Image Transformation Utilities
+// ============================================================================
+
+class ImageTransform {
+ /**
+ * Rotate environment map around Y axis
+ * @param {HDRImage} image - Source image
+ * @param {number} angleDegrees - Rotation angle in degrees (positive = counterclockwise)
+ * @returns {HDRImage} - Rotated image
+ */
+ static rotate(image, angleDegrees) {
+ console.log(`Rotating environment map by ${angleDegrees}┬░...`);
+
+ const rotated = new HDRImage(image.width, image.height);
+ const angleRad = (angleDegrees * Math.PI) / 180.0;
+
+ for (let y = 0; y < image.height; y++) {
+ for (let x = 0; x < image.width; x++) {
+ // Get current UV
+ let u = x / image.width;
+ const v = y / image.height;
+
+ // Rotate U coordinate
+ u = u + (angleRad / (Math.PI * 2.0));
+ u = u - Math.floor(u); // Wrap to [0, 1]
+
+ // Sample from source image with bilinear filtering
+ const fx = u * (image.width - 1);
+ const fy = v * (image.height - 1);
+
+ const x0 = Math.floor(fx);
+ const y0 = Math.floor(fy);
+ const x1 = (x0 + 1) % image.width; // Wrap horizontally
+ const y1 = Math.min(y0 + 1, image.height - 1);
+
+ const tx = fx - x0;
+ const ty = fy - y0;
+
+ const c00 = image.getPixel(x0, y0);
+ const c10 = image.getPixel(x1, y0);
+ const c01 = image.getPixel(x0, y1);
+ const c11 = image.getPixel(x1, y1);
+
+ const r = (1 - tx) * (1 - ty) * c00.r + tx * (1 - ty) * c10.r +
+ (1 - tx) * ty * c01.r + tx * ty * c11.r;
+ const g = (1 - tx) * (1 - ty) * c00.g + tx * (1 - ty) * c10.g +
+ (1 - tx) * ty * c01.g + tx * ty * c11.g;
+ const b = (1 - tx) * (1 - ty) * c00.b + tx * (1 - ty) * c10.b +
+ (1 - tx) * ty * c01.b + tx * ty * c11.b;
+
+ rotated.setPixel(x, y, r, g, b);
+ }
+ }
+
+ return rotated;
+ }
+
+ /**
+ * Scale intensity of entire image
+ * @param {HDRImage} image - Image to scale (modified in place)
+ * @param {number} scale - Intensity multiplier
+ */
+ static scaleIntensity(image, scale) {
+ if (scale === 1.0) return;
+
+ console.log(`Scaling intensity by ${scale}x...`);
+
+ for (let i = 0; i < image.data.length; i++) {
+ image.data[i] *= scale;
+ }
+ }
+}
+
+// ============================================================================
+// Tone Mapping and LDR Conversion
+// ============================================================================
+
+class ToneMapper {
+ /**
+ * Apply tone mapping to HDR image for LDR display
+ * @param {HDRImage} hdrImage - Source HDR image
+ * @param {Object} options - Tone mapping options
+ * @returns {Uint8ClampedArray} - 8-bit RGB data
+ */
+ static tonemapToLDR(hdrImage, options = {}) {
+ const {
+ exposure = 1.0, // Exposure adjustment (EV)
+ gamma = 2.2, // Gamma correction for display
+ method = 'reinhard' // Tone mapping method: 'simple', 'reinhard', 'aces'
+ } = options;
+
+ console.log(`Tone mapping: method=${method}, exposure=${exposure}, gamma=${gamma}`);
+
+ const { width, height, data } = hdrImage;
+ const ldrData = new Uint8ClampedArray(width * height * 3);
+
+ const exposureScale = Math.pow(2.0, exposure);
+ const invGamma = 1.0 / gamma;
+
+ for (let i = 0; i < data.length; i += 3) {
+ let r = data[i + 0] * exposureScale;
+ let g = data[i + 1] * exposureScale;
+ let b = data[i + 2] * exposureScale;
+
+ // Apply tone mapping operator
+ switch (method) {
+ case 'simple':
+ // Simple exposure + clamp
+ r = Math.min(r, 1.0);
+ g = Math.min(g, 1.0);
+ b = Math.min(b, 1.0);
+ break;
+
+ case 'reinhard':
+ // Reinhard tone mapping: x / (1 + x)
+ r = r / (1.0 + r);
+ g = g / (1.0 + g);
+ b = b / (1.0 + b);
+ break;
+
+ case 'aces':
+ // ACES filmic tone mapping (approximation)
+ r = ToneMapper.acesToneMap(r);
+ g = ToneMapper.acesToneMap(g);
+ b = ToneMapper.acesToneMap(b);
+ break;
+
+ default:
+ r = Math.min(r, 1.0);
+ g = Math.min(g, 1.0);
+ b = Math.min(b, 1.0);
+ }
+
+ // Apply gamma correction
+ r = Math.pow(Math.max(0, r), invGamma);
+ g = Math.pow(Math.max(0, g), invGamma);
+ b = Math.pow(Math.max(0, b), invGamma);
+
+ // Convert to 8-bit
+ ldrData[i + 0] = Math.round(Math.min(255, r * 255));
+ ldrData[i + 1] = Math.round(Math.min(255, g * 255));
+ ldrData[i + 2] = Math.round(Math.min(255, b * 255));
+ }
+
+ return ldrData;
+ }
+
+ /**
+ * ACES filmic tone mapping curve
+ */
+ static acesToneMap(x) {
+ const a = 2.51;
+ const b = 0.03;
+ const c = 2.43;
+ const d = 0.59;
+ const e = 0.14;
+ return Math.min(1.0, Math.max(0.0, (x * (a * x + b)) / (x * (c * x + d) + e)));
+ }
+}
+
+// ============================================================================
+// LDR File Format Writers
+// ============================================================================
+
+class LDRWriter {
+ /**
+ * Write BMP format (24-bit RGB, uncompressed)
+ */
+ static writeBMP(ldrData, width, height, filepath) {
+ // BMP requires rows to be padded to 4-byte boundary
+ const rowSize = Math.floor((24 * width + 31) / 32) * 4;
+ const pixelDataSize = rowSize * height;
+ const fileSize = 54 + pixelDataSize; // 14-byte header + 40-byte DIB header + pixel data
+
+ const buffer = Buffer.alloc(fileSize);
+
+ // BMP Header (14 bytes)
+ buffer.write('BM', 0); // Signature
+ buffer.writeUInt32LE(fileSize, 2); // File size
+ buffer.writeUInt32LE(0, 6); // Reserved
+ buffer.writeUInt32LE(54, 10); // Pixel data offset
+
+ // DIB Header (BITMAPINFOHEADER, 40 bytes)
+ buffer.writeUInt32LE(40, 14); // DIB header size
+ buffer.writeInt32LE(width, 18); // Width
+ buffer.writeInt32LE(height, 22); // Height
+ buffer.writeUInt16LE(1, 26); // Planes
+ buffer.writeUInt16LE(24, 28); // Bits per pixel
+ buffer.writeUInt32LE(0, 30); // Compression (0 = none)
+ buffer.writeUInt32LE(pixelDataSize, 34); // Image size
+ buffer.writeInt32LE(2835, 38); // X pixels per meter (72 DPI)
+ buffer.writeInt32LE(2835, 42); // Y pixels per meter
+ buffer.writeUInt32LE(0, 46); // Colors in palette
+ buffer.writeUInt32LE(0, 50); // Important colors
+
+ // Pixel data (bottom-up, BGR format)
+ let offset = 54;
+ for (let y = height - 1; y >= 0; y--) {
+ for (let x = 0; x < width; x++) {
+ const idx = (y * width + x) * 3;
+ buffer[offset++] = ldrData[idx + 2]; // B
+ buffer[offset++] = ldrData[idx + 1]; // G
+ buffer[offset++] = ldrData[idx + 0]; // R
+ }
+ // Padding to 4-byte boundary
+ while (offset % 4 !== 0) {
+ buffer[offset++] = 0;
+ }
+ }
+
+ fs.writeFileSync(filepath, buffer);
+ console.log(`тЬУ Wrote BMP file: ${filepath}`);
+ }
+
+ /**
+ * Write PNG format (8-bit RGB, uncompressed)
+ * Simple implementation without compression
+ */
+ static writePNG(ldrData, width, height, filepath) {
+ // For production, use a PNG library. This is a simplified implementation.
+ // We'll write an uncompressed PNG using filter type 0 (None)
+
+ const pngSignature = Buffer.from([137, 80, 78, 71, 13, 10, 26, 10]);
+
+ // IHDR chunk
+ const ihdr = Buffer.alloc(13);
+ ihdr.writeUInt32BE(width, 0);
+ ihdr.writeUInt32BE(height, 4);
+ ihdr.writeUInt8(8, 8); // Bit depth
+ ihdr.writeUInt8(2, 9); // Color type (2 = RGB)
+ ihdr.writeUInt8(0, 10); // Compression
+ ihdr.writeUInt8(0, 11); // Filter
+ ihdr.writeUInt8(0, 12); // Interlace
+
+ // IDAT chunk (pixel data with filter bytes)
+ // Each scanline: filter byte (0) + RGB data
+ const scanlineSize = 1 + width * 3;
+ const idatRaw = Buffer.alloc(scanlineSize * height);
+
+ for (let y = 0; y < height; y++) {
+ idatRaw[y * scanlineSize] = 0; // Filter type: None
+ for (let x = 0; x < width; x++) {
+ const srcIdx = (y * width + x) * 3;
+ const dstIdx = y * scanlineSize + 1 + x * 3;
+ idatRaw[dstIdx + 0] = ldrData[srcIdx + 0]; // R
+ idatRaw[dstIdx + 1] = ldrData[srcIdx + 1]; // G
+ idatRaw[dstIdx + 2] = ldrData[srcIdx + 2]; // B
+ }
+ }
+
+ // Simple zlib compression would go here, but for now use uncompressed
+ // For production, use zlib or a PNG library
+ console.warn('PNG: Using simplified format (consider using sharp/pngjs for production)');
+
+ // Build PNG file
+ const chunks = [];
+ chunks.push(pngSignature);
+ chunks.push(LDRWriter.createPNGChunk('IHDR', ihdr));
+ chunks.push(LDRWriter.createPNGChunk('IDAT', idatRaw));
+ chunks.push(LDRWriter.createPNGChunk('IEND', Buffer.alloc(0)));
+
+ const pngBuffer = Buffer.concat(chunks);
+ fs.writeFileSync(filepath, pngBuffer);
+ console.log(`тЬУ Wrote PNG file: ${filepath}`);
+ }
+
+ /**
+ * Create PNG chunk with length, type, data, and CRC
+ */
+ static createPNGChunk(type, data) {
+ const length = Buffer.alloc(4);
+ length.writeUInt32BE(data.length, 0);
+
+ const typeBuffer = Buffer.from(type, 'ascii');
+ const crcData = Buffer.concat([typeBuffer, data]);
+ const crc = Buffer.alloc(4);
+ crc.writeUInt32BE(LDRWriter.crc32(crcData), 0);
+
+ return Buffer.concat([length, typeBuffer, data, crc]);
+ }
+
+ /**
+ * CRC32 calculation for PNG
+ */
+ static crc32(buffer) {
+ let crc = 0xFFFFFFFF;
+ for (let i = 0; i < buffer.length; i++) {
+ crc = crc ^ buffer[i];
+ for (let j = 0; j < 8; j++) {
+ crc = (crc >>> 1) ^ (0xEDB88320 & -(crc & 1));
+ }
+ }
+ return (crc ^ 0xFFFFFFFF) >>> 0; // Force unsigned 32-bit
+ }
+
+ /**
+ * Write JPEG format
+ * Note: Requires external library for production use
+ */
+ static writeJPEG(ldrData, width, height, filepath, quality = 90) {
+ console.warn('JPEG writing requires external library (e.g., jpeg-js)');
+ console.warn('Converting to BMP instead');
+ const bmpPath = filepath.replace(/\.jpe?g$/i, '.bmp');
+ LDRWriter.writeBMP(ldrData, width, height, bmpPath);
+ }
+}
+
+// ============================================================================
+// HDR File Format Writers
+// ============================================================================
+
+class HDRWriter {
+ /**
+ * Write Radiance RGBE (.hdr) format
+ * https://en.wikipedia.org/wiki/RGBE_image_format
+ */
+ static writeRGBE(image, filepath) {
+ const { width, height, data } = image;
+
+ // RGBE encoding function
+ function encodeRGBE(r, g, b) {
+ const maxComp = Math.max(r, g, b);
+ if (maxComp < 1e-32) {
+ return Buffer.from([0, 0, 0, 0]);
+ }
+
+ const exponent = Math.floor(Math.log2(maxComp)) + 128;
+ const scale = Math.pow(2, exponent - 128);
+
+ const re = Math.floor((r / scale) * 255.0 + 0.5);
+ const ge = Math.floor((g / scale) * 255.0 + 0.5);
+ const be = Math.floor((b / scale) * 255.0 + 0.5);
+
+ return Buffer.from([
+ Math.min(255, re),
+ Math.min(255, ge),
+ Math.min(255, be),
+ exponent
+ ]);
+ }
+
+ // Build HDR header
+ const header = [
+ '#?RADIANCE',
+ 'FORMAT=32-bit_rle_rgbe',
+ `EXPOSURE=1.0`,
+ '',
+ `-Y ${height} +X ${width}`,
+ ''
+ ].join('\n');
+
+ const headerBuf = Buffer.from(header, 'ascii');
+
+ // Encode pixel data
+ const pixelBuf = Buffer.alloc(width * height * 4);
+ for (let y = 0; y < height; y++) {
+ for (let x = 0; x < width; x++) {
+ const idx = (y * width + x) * 3;
+ const r = data[idx + 0];
+ const g = data[idx + 1];
+ const b = data[idx + 2];
+ const rgbe = encodeRGBE(r, g, b);
+ rgbe.copy(pixelBuf, (y * width + x) * 4);
+ }
+ }
+
+ // Write file
+ const fullBuf = Buffer.concat([headerBuf, pixelBuf]);
+ fs.writeFileSync(filepath, fullBuf);
+ console.log(`тЬУ Wrote HDR file: ${filepath}`);
+ }
+
+ /**
+ * Write OpenEXR format (simplified, uncompressed scanline)
+ * For production use, consider using openexr npm package
+ */
+ static writeEXR(image, filepath) {
+ // For now, write as HDR since proper EXR requires external library
+ // In production, use @openexr/node or similar
+ console.warn('EXR writing requires external library, writing as HDR instead');
+ const hdrPath = filepath.replace(/\.exr$/i, '.hdr');
+ HDRWriter.writeRGBE(image, hdrPath);
+ }
+}
+
+// ============================================================================
+// Environment Map Presets
+// ============================================================================
+
+class EnvMapPresets {
+ /**
+ * White Furnace - Uniform white environment for energy conservation testing
+ * Perfect for validating that BRDF integrates to 1.0
+ */
+ static whiteFurnace(image, intensity = 1.0) {
+ console.log(`Generating White Furnace (${image.width}x${image.height})...`);
+
+ for (let y = 0; y < image.height; y++) {
+ for (let x = 0; x < image.width; x++) {
+ image.setPixel(x, y, intensity, intensity, intensity);
+ }
+ }
+ }
+
+ /**
+ * Sun & Sky - Procedural Hosek-Wilkie sky model approximation
+ * Simplified version with sun disk and gradient sky
+ */
+ static sunSky(image, options = {}) {
+ const {
+ sunElevation = 45, // Sun elevation in degrees (0 = horizon, 90 = zenith)
+ sunAzimuth = 135, // Sun azimuth in degrees (0 = north, 90 = east)
+ sunIntensity = 100.0, // Sun disk intensity
+ sunRadius = 0.02, // Sun angular radius (radians)
+ skyIntensity = 0.5, // Base sky intensity
+ horizonColor = new Vec3(0.8, 0.9, 1.0), // Horizon tint
+ zenithColor = new Vec3(0.3, 0.5, 0.9), // Zenith color
+ } = options;
+
+ console.log(`Generating Sun & Sky (${image.width}x${image.height})...`);
+ console.log(` Sun: elevation=${sunElevation}┬░, azimuth=${sunAzimuth}┬░, intensity=${sunIntensity}`);
+
+ // Convert sun angles to direction
+ const elevRad = sunElevation * Math.PI / 180;
+ const azimRad = sunAzimuth * Math.PI / 180;
+ const sunDir = new Vec3(
+ Math.cos(elevRad) * Math.cos(azimRad),
+ Math.sin(elevRad),
+ Math.cos(elevRad) * Math.sin(azimRad)
+ ).normalize();
+
+ for (let y = 0; y < image.height; y++) {
+ for (let x = 0; x < image.width; x++) {
+ const u = x / image.width;
+ const v = y / image.height;
+
+ const dir = HDRImage.latLongToDir(u, v);
+
+ // Sky gradient based on elevation
+ const elevation = Math.asin(Math.max(-1, Math.min(1, dir.y)));
+ const elevNorm = (elevation + Math.PI / 2) / Math.PI; // 0 at bottom, 1 at top
+
+ // Interpolate between horizon and zenith
+ const skyColor = Vec3.lerp(horizonColor, zenithColor, elevNorm);
+ let r = skyColor.x * skyIntensity;
+ let g = skyColor.y * skyIntensity;
+ let b = skyColor.z * skyIntensity;
+
+ // Add sun disk
+ const angleToCosun = Vec3.dot(dir, sunDir);
+ const angleToSun = Math.acos(Math.max(-1, Math.min(1, angleToCosun)));
+
+ if (angleToSun < sunRadius) {
+ // Inside sun disk
+ const falloff = 1.0 - (angleToSun / sunRadius);
+ const sunCol = Vec3.mul(new Vec3(1, 0.95, 0.8), sunIntensity);
+ r += sunCol.x * falloff;
+ g += sunCol.y * falloff;
+ b += sunCol.z * falloff;
+ } else if (angleToSun < sunRadius * 3) {
+ // Sun glow
+ const falloff = 1.0 - ((angleToSun - sunRadius) / (sunRadius * 2));
+ const glowIntensity = sunIntensity * 0.1 * falloff * falloff;
+ r += glowIntensity;
+ g += glowIntensity * 0.9;
+ b += glowIntensity * 0.7;
+ }
+
+ image.setPixel(x, y, r, g, b);
+ }
+ }
+ }
+
+ /**
+ * Studio Lighting - 3-point lighting setup
+ * Key light (main), fill light (shadows), rim/back light
+ */
+ static studioLighting(image, options = {}) {
+ const {
+ keyIntensity = 50.0,
+ fillIntensity = 10.0,
+ rimIntensity = 20.0,
+ ambientIntensity = 0.5,
+ keyColor = new Vec3(1.0, 0.98, 0.95), // Warm key
+ fillColor = new Vec3(0.8, 0.85, 1.0), // Cool fill
+ rimColor = new Vec3(1.0, 1.0, 1.0), // White rim
+ ambientColor = new Vec3(0.5, 0.5, 0.5), // Neutral ambient
+ } = options;
+
+ console.log(`Generating Studio Lighting (${image.width}x${image.height})...`);
+ console.log(` Key=${keyIntensity}, Fill=${fillIntensity}, Rim=${rimIntensity}`);
+
+ // Light positions (as directions)
+ const keyLight = new Vec3(0.7, 0.5, 0.5).normalize(); // Front-right, elevated
+ const fillLight = new Vec3(-0.5, 0.3, 0.3).normalize(); // Front-left, lower
+ const rimLight = new Vec3(0, 0.4, -0.9).normalize(); // Back, elevated
+
+ // Light spreads (angular size in radians)
+ const keySpread = 0.3;
+ const fillSpread = 0.5;
+ const rimSpread = 0.2;
+
+ for (let y = 0; y < image.height; y++) {
+ for (let x = 0; x < image.width; x++) {
+ const u = x / image.width;
+ const v = y / image.height;
+
+ const dir = HDRImage.latLongToDir(u, v);
+
+ // Start with ambient
+ let r = ambientColor.x * ambientIntensity;
+ let g = ambientColor.y * ambientIntensity;
+ let b = ambientColor.z * ambientIntensity;
+
+ // Add key light
+ const keyDot = Math.max(0, Vec3.dot(dir, keyLight));
+ const keyAngle = Math.acos(Math.max(0, Math.min(1, keyDot)));
+ if (keyAngle < keySpread) {
+ const falloff = Math.pow(1.0 - (keyAngle / keySpread), 2);
+ r += keyColor.x * keyIntensity * falloff;
+ g += keyColor.y * keyIntensity * falloff;
+ b += keyColor.z * keyIntensity * falloff;
+ }
+
+ // Add fill light
+ const fillDot = Math.max(0, Vec3.dot(dir, fillLight));
+ const fillAngle = Math.acos(Math.max(0, Math.min(1, fillDot)));
+ if (fillAngle < fillSpread) {
+ const falloff = Math.pow(1.0 - (fillAngle / fillSpread), 2);
+ r += fillColor.x * fillIntensity * falloff;
+ g += fillColor.y * fillIntensity * falloff;
+ b += fillColor.z * fillIntensity * falloff;
+ }
+
+ // Add rim light
+ const rimDot = Math.max(0, Vec3.dot(dir, rimLight));
+ const rimAngle = Math.acos(Math.max(0, Math.min(1, rimDot)));
+ if (rimAngle < rimSpread) {
+ const falloff = Math.pow(1.0 - (rimAngle / rimSpread), 3);
+ r += rimColor.x * rimIntensity * falloff;
+ g += rimColor.y * rimIntensity * falloff;
+ b += rimColor.z * rimIntensity * falloff;
+ }
+
+ image.setPixel(x, y, r, g, b);
+ }
+ }
+ }
+}
+
+// ============================================================================
+// Cubemap Generator
+// ============================================================================
+
+class CubemapGenerator {
+ /**
+ * Generate 6 cubemap faces from an equirectangular environment map
+ * Face order: +X, -X, +Y, -Y, +Z, -Z (standard OpenGL order)
+ */
+ static fromLatLong(latLongImage, faceSize = 512) {
+ console.log(`Converting lat-long to cubemap (face size: ${faceSize}x${faceSize})...`);
+
+ const faces = [];
+ const faceNames = ['+X', '-X', '+Y', '-Y', '+Z', '-Z'];
+
+ // Cubemap face directions
+ const faceData = [
+ // +X (right)
+ { right: new Vec3(0, 0, -1), up: new Vec3(0, 1, 0), forward: new Vec3(1, 0, 0) },
+ // -X (left)
+ { right: new Vec3(0, 0, 1), up: new Vec3(0, 1, 0), forward: new Vec3(-1, 0, 0) },
+ // +Y (top)
+ { right: new Vec3(1, 0, 0), up: new Vec3(0, 0, -1), forward: new Vec3(0, 1, 0) },
+ // -Y (bottom)
+ { right: new Vec3(1, 0, 0), up: new Vec3(0, 0, 1), forward: new Vec3(0, -1, 0) },
+ // +Z (front)
+ { right: new Vec3(1, 0, 0), up: new Vec3(0, 1, 0), forward: new Vec3(0, 0, 1) },
+ // -Z (back)
+ { right: new Vec3(-1, 0, 0), up: new Vec3(0, 1, 0), forward: new Vec3(0, 0, -1) },
+ ];
+
+ for (let faceIdx = 0; faceIdx < 6; faceIdx++) {
+ const face = new HDRImage(faceSize, faceSize);
+ const { right, up, forward } = faceData[faceIdx];
+
+ for (let y = 0; y < faceSize; y++) {
+ for (let x = 0; x < faceSize; x++) {
+ // Map to [-1, 1] range
+ const u = (x / (faceSize - 1)) * 2.0 - 1.0;
+ const v = (y / (faceSize - 1)) * 2.0 - 1.0;
+
+ // Get direction for this texel
+ const dir = Vec3.add(
+ Vec3.add(Vec3.mul(right, u), Vec3.mul(up, -v)),
+ forward
+ ).normalize();
+
+ // Convert to lat-long coords and sample
+ const { u: latU, v: latV } = HDRImage.dirToLatLong(dir);
+ const color = CubemapGenerator.sampleBilinear(latLongImage, latU, latV);
+
+ face.setPixel(x, y, color.r, color.g, color.b);
+ }
+ }
+
+ faces.push({ image: face, name: faceNames[faceIdx] });
+ }
+
+ return faces;
+ }
+
+ /**
+ * Bilinear sampling from lat-long image
+ */
+ static sampleBilinear(image, u, v) {
+ // Wrap u, clamp v
+ u = u - Math.floor(u);
+ v = Math.max(0, Math.min(1, v));
+
+ const fx = u * (image.width - 1);
+ const fy = v * (image.height - 1);
+
+ const x0 = Math.floor(fx);
+ const y0 = Math.floor(fy);
+ const x1 = Math.min(x0 + 1, image.width - 1);
+ const y1 = Math.min(y0 + 1, image.height - 1);
+
+ const tx = fx - x0;
+ const ty = fy - y0;
+
+ const c00 = image.getPixel(x0, y0);
+ const c10 = image.getPixel(x1, y0);
+ const c01 = image.getPixel(x0, y1);
+ const c11 = image.getPixel(x1, y1);
+
+ const r = (1 - tx) * (1 - ty) * c00.r + tx * (1 - ty) * c10.r +
+ (1 - tx) * ty * c01.r + tx * ty * c11.r;
+ const g = (1 - tx) * (1 - ty) * c00.g + tx * (1 - ty) * c10.g +
+ (1 - tx) * ty * c01.g + tx * ty * c11.g;
+ const b = (1 - tx) * (1 - ty) * c00.b + tx * (1 - ty) * c10.b +
+ (1 - tx) * ty * c01.b + tx * ty * c11.b;
+
+ return { r, g, b };
+ }
+}
+
+// ============================================================================
+// Public API
+// ============================================================================
+
+export class HDRGenerator {
+ /**
+ * Generate environment map with specified preset
+ *
+ * @param {Object} options - Generation options
+ * @param {string} options.preset - Preset name: 'white-furnace', 'sun-sky', 'studio'
+ * @param {number} options.width - Width in pixels (default: 2048 for latlong, 512 for cubemap)
+ * @param {number} options.height - Height in pixels (default: 1024 for latlong)
+ * @param {string} options.projection - 'latlong' or 'cubemap'
+ * @param {string} options.format - 'hdr', 'exr', 'png', 'bmp', 'jpg'/'jpeg'
+ * @param {string} options.output - Output file path
+ * @param {Object} options.presetOptions - Preset-specific options
+ * @param {number} options.rotation - Rotation angle in degrees (default: 0)
+ * @param {number} options.intensityScale - Intensity multiplier (default: 1.0)
+ * @param {Object} options.tonemapOptions - Tone mapping options for LDR output
+ */
+ static generate(options) {
+ const {
+ preset = 'white-furnace',
+ width = 2048,
+ height = 1024,
+ projection = 'latlong',
+ format = 'hdr',
+ output = null,
+ presetOptions = {},
+ rotation = 0,
+ intensityScale = 1.0,
+ tonemapOptions = {}
+ } = options;
+
+ console.log('\n=== HDR Environment Map Generator ===');
+ console.log(`Preset: ${preset}`);
+ console.log(`Resolution: ${width}x${height}`);
+ console.log(`Projection: ${projection}`);
+ console.log(`Format: ${format.toUpperCase()}`);
+ if (rotation !== 0) console.log(`Rotation: ${rotation}┬░`);
+ if (intensityScale !== 1.0) console.log(`Intensity Scale: ${intensityScale}x`);
+
+ // Generate lat-long image first
+ let latLongImage = new HDRImage(width, height);
+
+ // Apply preset
+ switch (preset) {
+ case 'white-furnace':
+ EnvMapPresets.whiteFurnace(latLongImage, presetOptions.intensity || 1.0);
+ break;
+ case 'sun-sky':
+ EnvMapPresets.sunSky(latLongImage, presetOptions);
+ break;
+ case 'studio':
+ EnvMapPresets.studioLighting(latLongImage, presetOptions);
+ break;
+ default:
+ throw new Error(`Unknown preset: ${preset}`);
+ }
+
+ // Apply transformations
+ if (rotation !== 0) {
+ latLongImage = ImageTransform.rotate(latLongImage, rotation);
+ }
+
+ if (intensityScale !== 1.0) {
+ ImageTransform.scaleIntensity(latLongImage, intensityScale);
+ }
+
+ // Determine if output is LDR or HDR
+ const isLDR = ['png', 'bmp', 'jpg', 'jpeg'].includes(format.toLowerCase());
+
+ // Generate output
+ if (projection === 'latlong') {
+ // Direct lat-long output
+ if (output) {
+ const filepath = output.endsWith(`.${format}`) ? output : `${output}.${format}`;
+ HDRGenerator._writeImage(latLongImage, format, filepath, isLDR, tonemapOptions);
+ }
+ return { latLongImage };
+ } else if (projection === 'cubemap') {
+ // Convert to cubemap
+ const faceSize = Math.min(width, height); // Use smaller dimension for cube face
+ const faces = CubemapGenerator.fromLatLong(latLongImage, faceSize);
+
+ if (output) {
+ const dir = path.dirname(output);
+ const base = path.basename(output, path.extname(output));
+
+ for (const face of faces) {
+ const facePath = path.join(dir, `${base}_${face.name}.${format}`);
+ HDRGenerator._writeImage(face.image, format, facePath, isLDR, tonemapOptions);
+ }
+ }
+ return { faces };
+ }
+ }
+
+ /**
+ * Internal helper to write image in appropriate format
+ */
+ static _writeImage(image, format, filepath, isLDR, tonemapOptions) {
+ if (isLDR) {
+ // Convert HDR to LDR via tone mapping
+ const ldrData = ToneMapper.tonemapToLDR(image, tonemapOptions);
+ const fmt = format.toLowerCase();
+
+ switch (fmt) {
+ case 'png':
+ LDRWriter.writePNG(ldrData, image.width, image.height, filepath);
+ break;
+ case 'bmp':
+ LDRWriter.writeBMP(ldrData, image.width, image.height, filepath);
+ break;
+ case 'jpg':
+ case 'jpeg':
+ LDRWriter.writeJPEG(ldrData, image.width, image.height, filepath);
+ break;
+ default:
+ throw new Error(`Unknown LDR format: ${format}`);
+ }
+ } else {
+ // HDR output
+ if (format === 'hdr') {
+ HDRWriter.writeRGBE(image, filepath);
+ } else if (format === 'exr') {
+ HDRWriter.writeEXR(image, filepath);
+ } else {
+ throw new Error(`Unknown HDR format: ${format}`);
+ }
+ }
+ }
+}
+
+export {
+ EnvMapPresets,
+ HDRImage,
+ CubemapGenerator,
+ HDRWriter,
+ LDRWriter,
+ ToneMapper,
+ ImageTransform,
+ Vec3
+};